From 2b2207035cb8b71c71606e5875cc7d939bc633f7 Mon Sep 17 00:00:00 2001 From: Krishna Kumar Date: Tue, 30 Dec 2025 03:54:02 -0600 Subject: [PATCH] Fix ResponseValidationError: change response field to content FastAPI validation was failing because stage1 results used 'response' field but Pydantic expected 'content'. Changed field name in: - stage1_collect_responses: returns content instead of response - stage2_collect_rankings: references result['content'] - stage3_synthesize_final: references result['content'] - MCP server: reads resp.get("content", "") for content_blocks --- backend/council.py | 6 +++--- mcp_server/server.py | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/backend/council.py b/backend/council.py index 5069abe..5f1a143 100644 --- a/backend/council.py +++ b/backend/council.py @@ -26,7 +26,7 @@ async def stage1_collect_responses(user_query: str) -> List[Dict[str, Any]]: if response is not None: # Only include successful responses stage1_results.append({ "model": model, - "response": response.get('content', '') + "content": response.get('content', '') }) return stage1_results @@ -57,7 +57,7 @@ async def stage2_collect_rankings( # Build the ranking prompt responses_text = "\n\n".join([ - f"Response {label}:\n{result['response']}" + f"Response {label}:\n{result['content']}" for label, result in zip(labels, stage1_results) ]) @@ -130,7 +130,7 @@ async def stage3_synthesize_final( """ # Build comprehensive context for chairman stage1_text = "\n\n".join([ - f"Model: {result['model']}\nResponse: {result['response']}" + f"Model: {result['model']}\nResponse: {result['content']}" for result in stage1_results ]) diff --git a/mcp_server/server.py b/mcp_server/server.py index 06421a5..9d5c463 100644 --- a/mcp_server/server.py +++ b/mcp_server/server.py @@ -145,7 +145,7 @@ async def council_query( "type": "council_response", "model": model_id, "model_display_name": get_display_name(model_id), - "response": resp.get("response", ""), + "response": resp.get("content", ""), "stage": 1 })