MCPcopy Index your code
hub / github.com/OpenBMB/ChatDev / run_workflow_sync

Function run_workflow_sync

server/routes/execute_sync.py:153–253  ·  view source on GitHub ↗
(request: WorkflowRunRequest, http_request: Request)

Source from the content-addressed store, hash-verified

151
152@router.post("/api/workflow/run")
153async def run_workflow_sync(request: WorkflowRunRequest, http_request: Request):
154 try:
155 resolved_log_level: Optional[LogLevel] = None
156 if request.log_level:
157 resolved_log_level = LogLevel(request.log_level)
158 except ValueError:
159 raise HTTPException(
160 status_code=400,
161 detail="log_level must be one of DEBUG, INFO, WARNING, ERROR, CRITICAL",
162 )
163
164 accepts_stream = _SSE_CONTENT_TYPE in (http_request.headers.get("accept") or "")
165 if not accepts_stream:
166 try:
167 result = await run_in_threadpool(
168 run_workflow,
169 request.yaml_file,
170 task_prompt=request.task_prompt,
171 attachments=request.attachments,
172 session_name=request.session_name,
173 variables=request.variables,
174 log_level=resolved_log_level,
175 )
176 except FileNotFoundError as exc:
177 raise HTTPException(status_code=404, detail=str(exc))
178 except ValidationError as exc:
179 raise HTTPException(status_code=400, detail=str(exc))
180 except Exception as exc:
181 logger = get_server_logger()
182 logger.log_exception(exc, "Failed to run workflow via sync API")
183 raise WorkflowExecutionError(f"Failed to run workflow: {exc}")
184
185 final_message = result.final_message.text_content() if result.final_message else ""
186 meta = result.meta_info
187
188 logger = get_server_logger()
189 logger.info(
190 "Workflow execution completed via sync API",
191 log_type=LogType.WORKFLOW,
192 session_id=meta.session_name,
193 yaml_path=meta.yaml_file,
194 )
195
196 return {
197 "status": "completed",
198 "final_message": final_message,
199 "token_usage": meta.token_usage,
200 "output_dir": str(meta.output_dir.resolve()),
201 }
202
203 event_queue: queue.Queue[tuple[str, Any]] = queue.Queue()
204 done_event = threading.Event()
205
206 def enqueue(event_type: str, data: Any) -> None:
207 event_queue.put((event_type, data))
208
209 def worker() -> None:
210 try:

Callers

nothing calls this directly

Calls 9

LogLevelClass · 0.90
get_server_loggerFunction · 0.90
streamFunction · 0.85
log_exceptionMethod · 0.80
text_contentMethod · 0.80
resolveMethod · 0.80
getMethod · 0.45
infoMethod · 0.45

Tested by

no test coverage detected