From 5e5e7b4f3567c2052d2ed81f9a80c980cf1a1179 Mon Sep 17 00:00:00 2001 From: Simon Diesenreiter Date: Sat, 11 Apr 2026 21:17:12 +0200 Subject: [PATCH] fix: fix internal server error, refs NOISSUE --- ai_software_factory/main.py | 72 +++++++++++++++++++++++++++++++++++-- 1 file changed, 70 insertions(+), 2 deletions(-) diff --git a/ai_software_factory/main.py b/ai_software_factory/main.py index 37e1733..d70d1bd 100644 --- a/ai_software_factory/main.py +++ b/ai_software_factory/main.py @@ -283,6 +283,51 @@ def _compose_prompt_text(request: SoftwareRequest) -> str: ) +def _generation_error_payload( + *, + message: str, + request: SoftwareRequest | None = None, + source: dict | None = None, + interpreted_request: dict | None = None, + routing: dict | None = None, +) -> dict: + """Return a workflow-safe JSON payload for expected generation failures.""" + response = { + 'status': 'error', + 'message': message, + 'error': message, + 'summary_message': message, + 'summary_metadata': { + 'provider': None, + 'model': None, + 'fallback_used': False, + }, + 'data': { + 'history_id': None, + 'project_id': None, + 'name': request.name if request is not None else (interpreted_request or {}).get('name'), + 'description': request.description if request is not None else (interpreted_request or {}).get('description'), + 'status': 'error', + 'progress': 0, + 'message': message, + 'current_step': None, + 'error_message': message, + 'logs': [], + 'changed_files': [], + 'repository': None, + 'pull_request': None, + 'summary_message': message, + }, + } + if source is not None: + response['source'] = source + if interpreted_request is not None: + response['interpreted_request'] = interpreted_request + if routing is not None: + response['routing'] = routing + return response + + async def _run_generation( request: SoftwareRequest, db: Session, @@ -876,7 +921,15 @@ def reset_runtime_setting(setting_key: str, db: DbSession): @app.post('/generate') async def generate_software(request: SoftwareRequest, db: DbSession): """Create and record a software-generation request.""" - return await _run_generation(request, db) + try: + return await _run_generation(request, db) + except Exception as exc: + DatabaseManager(db).log_system_event( + component='api', + level='ERROR', + message=f"Structured generation failed: {exc}", + ) + return _generation_error_payload(message=str(exc), request=request) @app.post('/generate/text') @@ -920,7 +973,22 @@ async def generate_software_from_text(request: FreeformSoftwareRequest, db: DbSe }, } - return await _run_freeform_generation(request, db) + try: + return await _run_freeform_generation(request, db) + except Exception as exc: + DatabaseManager(db).log_system_event( + component='api', + level='ERROR', + message=f"Free-form generation failed for source={request.source}: {exc}", + ) + return _generation_error_payload( + message=str(exc), + source={ + 'type': request.source, + 'chat_id': request.chat_id, + 'chat_type': request.chat_type, + }, + ) @app.get('/queue')