Spaces:
Configuration error
Configuration error
File size: 1,923 Bytes
aa15bce |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
import asyncio
from typing import Optional, Union
from fastapi import status
from fastapi.responses import JSONResponse, PlainTextResponse
from ...agents.interaction_agent.runtime import InteractionAgentRuntime
from ...logging_config import logger
from ...models import ChatMessage, ChatRequest
from ...utils import error_response
# Extract the most recent user message from the chat request payload
def _extract_latest_user_message(payload: ChatRequest) -> Optional[ChatMessage]:
for message in reversed(payload.messages):
if message.role.lower().strip() == "user" and message.content.strip():
return message
return None
# Process incoming chat requests by routing them to the interaction agent runtime
async def handle_chat_request(payload: ChatRequest) -> Union[PlainTextResponse, JSONResponse]:
"""Handle a chat request using the InteractionAgentRuntime."""
# Extract user message
user_message = _extract_latest_user_message(payload)
if user_message is None:
return error_response("Missing user message", status_code=status.HTTP_400_BAD_REQUEST)
user_content = user_message.content.strip() # Already checked in _extract_latest_user_message
logger.info("chat request", extra={"message_length": len(user_content)})
try:
runtime = InteractionAgentRuntime()
except ValueError as ve:
# Missing API key error
logger.error("configuration error", extra={"error": str(ve)})
return error_response(str(ve), status_code=status.HTTP_400_BAD_REQUEST)
async def _run_interaction() -> None:
try:
await runtime.execute(user_message=user_content)
except Exception as exc: # pragma: no cover - defensive
logger.error("chat task failed", extra={"error": str(exc)})
asyncio.create_task(_run_interaction())
return PlainTextResponse("", status_code=status.HTTP_202_ACCEPTED)
|