Spaces:
Sleeping
Sleeping
Ken Sang Tang commited on
Update app.py
Browse files
app.py
CHANGED
|
@@ -114,6 +114,43 @@ async def run_task(task_id: str, prompt: str):
|
|
| 114 |
await task_manager.fail_task(task_id, str(e))
|
| 115 |
|
| 116 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 117 |
|
| 118 |
|
| 119 |
|
|
|
|
| 114 |
await task_manager.fail_task(task_id, str(e))
|
| 115 |
|
| 116 |
|
| 117 |
+
@app.get("/tasks/{task_id}/events")
|
| 118 |
+
async def task_events(task_id: str):
|
| 119 |
+
async def event_generator():
|
| 120 |
+
if task_id not in task_manager.queues:
|
| 121 |
+
yield f"event: error\ndata: {dumps({'message': 'Task not found'})}\n\n"
|
| 122 |
+
return
|
| 123 |
+
|
| 124 |
+
queue = task_manager.queues[task_id]
|
| 125 |
+
task = task_manager.tasks.get(task_id)
|
| 126 |
+
if task:
|
| 127 |
+
yield f"event: status\ndata: {dumps({'type': 'status', 'status': task.status, 'steps': task.steps})}\n\n"
|
| 128 |
+
|
| 129 |
+
while True:
|
| 130 |
+
try:
|
| 131 |
+
event = await queue.get()
|
| 132 |
+
formatted_event = dumps(event)
|
| 133 |
+
yield ": heartbeat\n\n"
|
| 134 |
+
yield f"event: {event['type']}\ndata: {formatted_event}\n\n"
|
| 135 |
+
|
| 136 |
+
if event["type"] in ["complete", "error"]:
|
| 137 |
+
break
|
| 138 |
+
|
| 139 |
+
except asyncio.CancelledError:
|
| 140 |
+
break
|
| 141 |
+
except Exception as e:
|
| 142 |
+
yield f"event: error\ndata: {dumps({'message': str(e)})}\n\n"
|
| 143 |
+
break
|
| 144 |
+
|
| 145 |
+
return StreamingResponse(
|
| 146 |
+
event_generator(),
|
| 147 |
+
media_type="text/event-stream",
|
| 148 |
+
headers={
|
| 149 |
+
"Cache-Control": "no-cache",
|
| 150 |
+
"Connection": "keep-alive",
|
| 151 |
+
"X-Accel-Buffering": "no",
|
| 152 |
+
},
|
| 153 |
+
)
|
| 154 |
|
| 155 |
|
| 156 |
|