Ken Sang Tang commited on
Commit
779fb9a
·
verified ·
1 Parent(s): d5461ce

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +37 -0
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