74 lines
2.3 KiB
Markdown
74 lines
2.3 KiB
Markdown
# PocketFlow FastAPI Background Job
|
|
|
|
A minimal example of running PocketFlow workflows as background jobs with real-time progress updates via Server-Sent Events (SSE).
|
|
|
|
## Features
|
|
|
|
- Start article generation jobs via REST API
|
|
- Real-time granular progress updates via SSE (shows progress for each section)
|
|
- Background processing with FastAPI
|
|
- Simple three-step workflow: Outline → Content → Style
|
|
- Web interface for easy job submission and monitoring
|
|
|
|
## Getting Started
|
|
|
|
1. Install dependencies:
|
|
```bash
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
2. Set your OpenAI API key:
|
|
```bash
|
|
export OPENAI_API_KEY=your_api_key_here
|
|
```
|
|
|
|
3. Run the server:
|
|
```bash
|
|
python main.py
|
|
```
|
|
|
|
## Usage
|
|
|
|
### Web Interface (Recommended)
|
|
|
|
1. Open your browser and go to `http://localhost:8000`
|
|
2. Enter an article topic (e.g., "AI Safety", "Climate Change")
|
|
3. Click "Generate Article"
|
|
4. You'll be redirected to a progress page showing real-time updates
|
|
5. The final article will appear when generation is complete
|
|
|
|
### API Usage
|
|
|
|
#### Start a Job
|
|
```bash
|
|
curl -X POST "http://localhost:8000/start-job" -d "topic=AI Safety" -H "Content-Type: application/x-www-form-urlencoded"
|
|
```
|
|
|
|
Response:
|
|
```json
|
|
{"job_id": "123e4567-e89b-12d3-a456-426614174000", "topic": "AI Safety", "status": "started"}
|
|
```
|
|
|
|
#### Monitor Progress
|
|
```bash
|
|
curl "http://localhost:8000/progress/123e4567-e89b-12d3-a456-426614174000"
|
|
```
|
|
|
|
SSE Stream:
|
|
```
|
|
data: {"step": "outline", "progress": 33, "data": {"sections": ["Introduction", "Challenges", "Solutions"]}}
|
|
data: {"step": "content", "progress": 44, "data": {"section": "Introduction", "completed_sections": 1, "total_sections": 3}}
|
|
data: {"step": "content", "progress": 55, "data": {"section": "Challenges", "completed_sections": 2, "total_sections": 3}}
|
|
data: {"step": "content", "progress": 66, "data": {"section": "Solutions", "completed_sections": 3, "total_sections": 3}}
|
|
data: {"step": "content", "progress": 66, "data": {"draft_length": 1234, "status": "complete"}}
|
|
data: {"step": "complete", "progress": 100, "data": {"final_article": "..."}}
|
|
```
|
|
|
|
## Files
|
|
|
|
- `main.py` - FastAPI app with background jobs and SSE
|
|
- `flow.py` - PocketFlow workflow definition
|
|
- `nodes.py` - Workflow nodes (Outline, Content, Style)
|
|
- `utils/call_llm.py` - LLM utility function
|
|
- `static/index.html` - Main page for starting jobs
|
|
- `static/progress.html` - Progress monitoring page with real-time updates |