fix: handle mode as string due to use_enum_values=True
The BaseSchema has use_enum_values=True which makes Pydantic store enum values as strings. Added _get_mode() helper to convert back to PermissionMode enum before passing to agent methods. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -23,6 +23,13 @@ from src.domains.agents.schemas import (
|
||||
AgentListResponse,
|
||||
PermissionMode,
|
||||
)
|
||||
|
||||
|
||||
def _get_mode(mode_value: str | PermissionMode) -> PermissionMode:
|
||||
"""Convert mode string to enum (handles use_enum_values=True)."""
|
||||
if isinstance(mode_value, PermissionMode):
|
||||
return mode_value
|
||||
return PermissionMode(mode_value)
|
||||
from src.shared.logging import logged, get_logger
|
||||
|
||||
logger = get_logger(__name__)
|
||||
@@ -56,18 +63,21 @@ async def run_agent(request: AgentRunRequest) -> AgentRunResponse:
|
||||
detail=f"Unknown agent type: {request.agent_type}"
|
||||
)
|
||||
|
||||
# Convert mode string to enum (use_enum_values=True in schema)
|
||||
mode = _get_mode(request.mode)
|
||||
|
||||
try:
|
||||
# Run the agent with mode
|
||||
response = await agent.run(
|
||||
request.prompt,
|
||||
working_dir=request.working_dir,
|
||||
mode=request.mode,
|
||||
mode=mode,
|
||||
)
|
||||
|
||||
return AgentRunResponse(
|
||||
response=response,
|
||||
agent_type=request.agent_type,
|
||||
mode=request.mode,
|
||||
mode=request.mode, # Keep original for response
|
||||
success=True,
|
||||
)
|
||||
|
||||
@@ -103,19 +113,22 @@ async def stream_agent(request: AgentRunRequest) -> StreamingResponse:
|
||||
detail=f"Unknown agent type: {request.agent_type}"
|
||||
)
|
||||
|
||||
# Convert mode string to enum (use_enum_values=True in schema)
|
||||
mode = _get_mode(request.mode)
|
||||
|
||||
async def generate():
|
||||
try:
|
||||
async for chunk in agent.run_stream(
|
||||
request.prompt,
|
||||
working_dir=request.working_dir,
|
||||
mode=request.mode,
|
||||
mode=mode,
|
||||
):
|
||||
# SSE format: data: {json}\n\n
|
||||
event = {"event": "chunk", "data": chunk}
|
||||
yield f"data: {json.dumps(event)}\n\n"
|
||||
|
||||
# Signal completion
|
||||
yield f"data: {json.dumps({'event': 'done', 'mode': request.mode.value})}\n\n"
|
||||
yield f"data: {json.dumps({'event': 'done', 'mode': mode.value})}\n\n"
|
||||
|
||||
except Exception as e:
|
||||
logger.exception(f"Stream error: {e}")
|
||||
|
||||
Reference in New Issue
Block a user