| 
									
										
										
										
											2024-11-09 14:32:24 -08:00
										 |  |  | # /api/runs routes | 
					
						
							|  |  |  | from typing import Dict | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-26 15:39:36 -08:00
										 |  |  | from fastapi import APIRouter, Body, Depends, HTTPException | 
					
						
							| 
									
										
										
										
											2024-11-09 14:32:24 -08:00
										 |  |  | from pydantic import BaseModel | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-26 15:39:36 -08:00
										 |  |  | from ...datamodel import Message, MessageConfig, Run, RunStatus, Session, Team | 
					
						
							|  |  |  | from ..deps import get_db, get_team_manager, get_websocket_manager | 
					
						
							| 
									
										
										
										
											2024-11-09 14:32:24 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | router = APIRouter() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class CreateRunRequest(BaseModel): | 
					
						
							|  |  |  |     session_id: int | 
					
						
							|  |  |  |     user_id: str | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @router.post("/") | 
					
						
							|  |  |  | async def create_run( | 
					
						
							|  |  |  |     request: CreateRunRequest, | 
					
						
							|  |  |  |     db=Depends(get_db), | 
					
						
							|  |  |  | ) -> Dict: | 
					
						
							| 
									
										
										
										
											2024-11-26 15:39:36 -08:00
										 |  |  |     """Create a new run with initial state""" | 
					
						
							| 
									
										
										
										
											2024-11-09 14:32:24 -08:00
										 |  |  |     session_response = db.get( | 
					
						
							| 
									
										
										
										
											2024-11-26 15:39:36 -08:00
										 |  |  |         Session, filters={"id": request.session_id, "user_id": request.user_id}, return_json=False | 
					
						
							| 
									
										
										
										
											2024-11-09 14:32:24 -08:00
										 |  |  |     ) | 
					
						
							|  |  |  |     if not session_response.status or not session_response.data: | 
					
						
							|  |  |  |         raise HTTPException(status_code=404, detail="Session not found") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     try: | 
					
						
							| 
									
										
										
										
											2024-11-26 15:39:36 -08:00
										 |  |  |         # Create run with default state | 
					
						
							|  |  |  |         run = db.upsert( | 
					
						
							|  |  |  |             Run( | 
					
						
							|  |  |  |                 session_id=request.session_id, | 
					
						
							|  |  |  |                 status=RunStatus.CREATED, | 
					
						
							| 
									
										
										
										
											2025-02-25 07:21:08 -08:00
										 |  |  |                 user_id=request.user_id, | 
					
						
							| 
									
										
										
										
											2025-03-11 11:46:25 -07:00
										 |  |  |                 task={},  # Will be set when run starts | 
					
						
							|  |  |  |                 team_result={}, | 
					
						
							| 
									
										
										
										
											2024-11-26 15:39:36 -08:00
										 |  |  |             ), | 
					
						
							|  |  |  |             return_json=False, | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2025-03-06 10:52:42 -08:00
										 |  |  |         return {"status": run.status, "data": {"run_id": run.data.id}} | 
					
						
							| 
									
										
										
										
											2024-11-09 14:32:24 -08:00
										 |  |  |     except Exception as e: | 
					
						
							| 
									
										
										
										
											2024-11-26 15:39:36 -08:00
										 |  |  |         raise HTTPException(status_code=500, detail=str(e)) from e | 
					
						
							| 
									
										
										
										
											2024-11-09 14:32:24 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-26 15:39:36 -08:00
										 |  |  | # We might want to add these endpoints: | 
					
						
							| 
									
										
										
										
											2024-11-09 14:32:24 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-26 15:39:36 -08:00
										 |  |  | @router.get("/{run_id}") | 
					
						
							| 
									
										
										
										
											2025-03-06 10:52:42 -08:00
										 |  |  | async def get_run(run_id: int, db=Depends(get_db)) -> Dict: | 
					
						
							| 
									
										
										
										
											2024-11-26 15:39:36 -08:00
										 |  |  |     """Get run details including task and result""" | 
					
						
							|  |  |  |     run = db.get(Run, filters={"id": run_id}, return_json=False) | 
					
						
							|  |  |  |     if not run.status or not run.data: | 
					
						
							|  |  |  |         raise HTTPException(status_code=404, detail="Run not found") | 
					
						
							| 
									
										
										
										
											2024-11-09 14:32:24 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-26 15:39:36 -08:00
										 |  |  |     return {"status": True, "data": run.data[0]} | 
					
						
							| 
									
										
										
										
											2024-11-09 14:32:24 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-26 15:39:36 -08:00
										 |  |  | @router.get("/{run_id}/messages") | 
					
						
							| 
									
										
										
										
											2025-03-06 10:52:42 -08:00
										 |  |  | async def get_run_messages(run_id: int, db=Depends(get_db)) -> Dict: | 
					
						
							| 
									
										
										
										
											2024-11-26 15:39:36 -08:00
										 |  |  |     """Get all messages for a run""" | 
					
						
							|  |  |  |     messages = db.get(Message, filters={"run_id": run_id}, order="created_at asc", return_json=False) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return {"status": True, "data": messages.data} |