2 Commits

Author SHA1 Message Date
bbe0279af4 release: version 0.9.13 🚀
All checks were successful
Upload Python Package / Create Release (push) Successful in 16s
Upload Python Package / deploy (push) Successful in 29s
2026-04-11 21:17:16 +02:00
5e5e7b4f35 fix: fix internal server error, refs NOISSUE 2026-04-11 21:17:12 +02:00
3 changed files with 82 additions and 3 deletions

View File

@@ -5,11 +5,22 @@ Changelog
(unreleased) (unreleased)
------------ ------------
Fix
~~~
- Fix internal server error, refs NOISSUE. [Simon Diesenreiter]
0.9.12 (2026-04-11)
-------------------
Fix Fix
~~~ ~~~
- Remove heuristic decision making fallbacks, refs NOISSUE. [Simon - Remove heuristic decision making fallbacks, refs NOISSUE. [Simon
Diesenreiter] Diesenreiter]
Other
~~~~~
0.9.11 (2026-04-11) 0.9.11 (2026-04-11)
------------------- -------------------

View File

@@ -1 +1 @@
0.9.12 0.9.13

View File

@@ -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( async def _run_generation(
request: SoftwareRequest, request: SoftwareRequest,
db: Session, db: Session,
@@ -876,7 +921,15 @@ def reset_runtime_setting(setting_key: str, db: DbSession):
@app.post('/generate') @app.post('/generate')
async def generate_software(request: SoftwareRequest, db: DbSession): async def generate_software(request: SoftwareRequest, db: DbSession):
"""Create and record a software-generation request.""" """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') @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') @app.get('/queue')