veeiiinnnnn's picture
new
592cb1d
"""
Daily tip 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_daily_tip
from ..utils.json_stream import create_streaming_json_response
router = APIRouter(tags=["daily-tip"])
@router.post("/daily-tip")
async def daily_tip(request: Request) -> Response:
body = await request.json()
provider = body.get("provider")
api_key = get_llm_api_key(request)
base_url = body.get("baseUrl")
model = body.get("model")
language = body.get("language")
category = body.get("category")
user_timezone = body.get("userTimezone")
user_locale = body.get("userLocale")
if not provider:
return JSONResponse(status_code=400, content={"error": "Missing required field: provider"})
if not is_provider_supported(provider):
return JSONResponse(
status_code=400,
content={"error": f"Unsupported provider: {provider}"},
)
return create_streaming_json_response(
_build_daily_tip_result(
provider=provider,
language=language,
category=category,
api_key=api_key,
base_url=base_url,
model=model,
user_timezone=user_timezone,
user_locale=user_locale,
)
)
async def _build_daily_tip_result(
*,
provider: str,
language: str | None,
category: str | None,
api_key: str,
base_url: str | None,
model: str | None,
user_timezone: str | None,
user_locale: str | None,
) -> dict[str, str]:
tip = await generate_daily_tip(
provider=provider,
language=language,
category=category,
api_key=api_key,
base_url=base_url,
model=model,
user_timezone=user_timezone,
user_locale=user_locale,
)
return {"tip": tip}