PMFlow/backend/app/api/llm_providers.py

62 lines
2.7 KiB
Python

"""LLM provider preset API."""
from __future__ import annotations
from typing import Any
from fastapi import APIRouter, Depends
from ..core.response import success_response
from ..dependencies.auth import get_current_user
from ..models import User
from ..services.model.model_config import get_provider_defaults, get_tier_defaults
router = APIRouter(prefix="/ai-steward/llm", tags=["AI Steward"])
def _build_provider_payload() -> dict[str, Any]:
provider_defaults = get_provider_defaults()
tier_defaults = get_tier_defaults()
low_tier = dict(tier_defaults.get("low") or {})
high_tier = dict(tier_defaults.get("high") or {})
openai_defaults = dict(provider_defaults.get("openai") or {})
glm_defaults = dict(provider_defaults.get("glm") or {})
deepseek_defaults = dict(provider_defaults.get("deepseek") or {})
ollama_defaults = dict(provider_defaults.get("ollama") or {})
high_model = str(high_tier.get("model") or openai_defaults.get("model") or "GLM-5").strip()
return {
"low": str(low_tier.get("model") or glm_defaults.get("model") or "qwen-plus").strip(),
"high": high_model,
"base_url": str(high_tier.get("base_url") or openai_defaults.get("base_url") or "https://api.edgefn.net/v1").strip(),
"providers": {
"glm": {
"model": str(glm_defaults.get("model") or "qwen-plus").strip(),
"base_url": str(glm_defaults.get("base_url") or "https://dashscope.aliyuncs.com/compatible-mode/v1").strip(),
"api_env": str(glm_defaults.get("api_env") or "DASHSCOPE_API_KEY").strip(),
},
"openai": {
"model": high_model,
"base_url": str(openai_defaults.get("base_url") or "https://api.edgefn.net/v1").strip(),
"api_env": str(openai_defaults.get("api_env") or "OPENAI_API_KEY").strip(),
},
"deepseek": {
"model": str(deepseek_defaults.get("model") or "deepseek-chat").strip(),
"base_url": str(deepseek_defaults.get("base_url") or "https://api.deepseek.com/v1").strip(),
"api_env": str(deepseek_defaults.get("api_env") or "DEEPSEEK_API_KEY").strip(),
},
"ollama": {
"model": str(ollama_defaults.get("model") or "llama3:latest").strip(),
"base_url": str(ollama_defaults.get("base_url") or "http://127.0.0.1:11434").strip(),
"api_env": str(ollama_defaults.get("api_env") or "").strip(),
},
},
}
@router.get("/providers")
async def get_llm_provider_presets(
current_user: User = Depends(get_current_user),
):
_ = current_user
return success_response(_build_provider_payload())