PMFlow/backend/app/api/llm_providers.py

59 lines
2.1 KiB
Python

"""LLM provider preset API."""
from __future__ import annotations
import os
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
router = APIRouter(prefix="/ai-steward/llm", tags=["AI Steward"])
def _build_provider_payload() -> dict[str, Any]:
low_model = str(os.getenv("LLM_ROUTING_LOW_MODEL", "GLM-4.7") or "GLM-4.7").strip()
high_model = str(os.getenv("LLM_ROUTING_HIGH_MODEL", "MiniMax-M2.5") or "MiniMax-M2.5").strip()
base_url = str(os.getenv("OPENAI_BASE_URL", "https://api.edgefn.net/v1") or "https://api.edgefn.net/v1").strip()
ollama_base_url = str(
os.getenv("OLLAMA_BASE_URL", os.getenv("OLLAMA_HOST", "http://127.0.0.1:11434")) or "http://127.0.0.1:11434"
).strip()
return {
"low": low_model,
"high": high_model,
"base_url": base_url,
"providers": {
"glm": {
"model": str(os.getenv("GLM_MODEL", low_model) or low_model).strip(),
"base_url": str(os.getenv("GLM_BASE_URL", base_url) or base_url).strip(),
"api_env": "GLM_API_KEY",
},
"openai": {
"model": str(os.getenv("OPENAI_MODEL", high_model) or high_model).strip(),
"base_url": base_url,
"api_env": "OPENAI_API_KEY",
},
"deepseek": {
"model": str(os.getenv("DEEPSEEK_MODEL", "deepseek-chat") or "deepseek-chat").strip(),
"base_url": str(os.getenv("DEEPSEEK_BASE_URL", "https://api.deepseek.com/v1") or "").strip(),
"api_env": "DEEPSEEK_API_KEY",
},
"ollama": {
"model": str(os.getenv("OLLAMA_MODEL", "llama3:latest") or "llama3:latest").strip(),
"base_url": ollama_base_url,
"api_env": "",
},
},
}
@router.get("/providers")
async def get_llm_provider_presets(
current_user: User = Depends(get_current_user),
):
_ = current_user
return success_response(_build_provider_payload())