File size: 1,600 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
"""
Space and agent selection API routes.
"""

from __future__ import annotations

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_space_and_agent
from ..utils.json_stream import create_streaming_json_response

router = APIRouter(tags=["space-agent"])


@router.post("/space-agent")
async def space_agent(request: Request) -> Response:
    body = await request.json()
    provider = body.get("provider")
    message = body.get("message")
    spaces_with_agents = body.get("spacesWithAgents") or []
    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}"})

    return create_streaming_json_response(
        generate_space_and_agent(
            provider=provider,
            first_message=message,
            spaces_with_agents=spaces_with_agents,
            api_key=api_key,
            base_url=base_url,
            model=model,
            user_timezone=user_timezone,
            user_locale=user_locale,
        )
    )