Spaces:
Running
Running
File size: 2,612 Bytes
4ef118d 592cb1d 4ef118d 592cb1d 4ef118d | 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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | """
Agent for auto mode API routes.
"""
from __future__ import annotations
import logging
from fastapi import APIRouter, Request
from fastapi.responses import JSONResponse
from starlette.responses import Response
from ..providers import is_provider_supported
from ._request_secrets import get_llm_api_key
from ..services.generation import generate_agent_for_auto
from ..utils.json_stream import create_streaming_json_response
router = APIRouter(tags=["agent-for-auto"])
logger = logging.getLogger(__name__)
@router.post("/agent-for-auto")
async def agent_for_auto(request: Request) -> Response:
body = await request.json()
provider = body.get("provider")
message = body.get("message")
current_space = body.get("currentSpace")
api_key = get_llm_api_key(request)
base_url = body.get("baseUrl")
model = body.get("model")
user_timezone = body.get("userTimezone")
user_locale = body.get("userLocale")
if not provider or not message:
return JSONResponse(
status_code=400,
content={"error": "Missing required fields: provider, message"},
)
if not is_provider_supported(provider):
return JSONResponse(status_code=400, content={"error": f"Unsupported provider: {provider}"})
# Auto agent preselection is best-effort and must not break user chat flow.
# On provider auth/config errors, gracefully return null and let frontend fallback.
return create_streaming_json_response(
_build_agent_for_auto_result(
provider=provider,
message=message,
current_space=current_space,
api_key=api_key,
base_url=base_url,
model=model,
user_timezone=user_timezone,
user_locale=user_locale,
)
)
async def _build_agent_for_auto_result(
*,
provider: str,
message: str,
current_space: dict | None,
api_key: str,
base_url: str | None,
model: str | None,
user_timezone: str | None,
user_locale: str | None,
) -> dict[str, str | None]:
try:
agent_name = await generate_agent_for_auto(
provider=provider,
user_message=message,
current_space=current_space,
api_key=api_key,
base_url=base_url,
model=model,
user_timezone=user_timezone,
user_locale=user_locale,
)
return {"agentName": agent_name}
except Exception as exc: # noqa: BLE001
logger.warning("agent-for-auto failed, fallback to null agent: %s", exc)
return {"agentName": None}
|