194 lines
5.8 KiB
Python
194 lines
5.8 KiB
Python
from fastapi import HTTPException
|
|
from google import genai
|
|
from openai import OpenAI
|
|
|
|
from constants.llm import (
|
|
DEFAULT_ANTHROPIC_MODEL,
|
|
DEFAULT_AZURE_MODEL,
|
|
DEFAULT_BEDROCK_MODEL,
|
|
DEFAULT_CEREBRAS_MODEL,
|
|
DEFAULT_CODEX_MODEL,
|
|
DEFAULT_DEEPSEEK_MODEL,
|
|
DEFAULT_FIREWORKS_MODEL,
|
|
DEFAULT_LITELLM_MODEL,
|
|
DEFAULT_GOOGLE_MODEL,
|
|
DEFAULT_LMSTUDIO_MODEL,
|
|
DEFAULT_OPENAI_MODEL,
|
|
DEFAULT_OPENROUTER_MODEL,
|
|
DEFAULT_TOGETHER_MODEL,
|
|
DEFAULT_VERTEX_MODEL,
|
|
SUPPORTED_CODEX_MODELS,
|
|
)
|
|
from enums.llm_provider import LLMProvider
|
|
from utils.get_env import (
|
|
get_azure_openai_deployment_env,
|
|
get_azure_openai_model_env,
|
|
get_anthropic_model_env,
|
|
get_bedrock_model_env,
|
|
get_codex_model_env,
|
|
get_custom_model_env,
|
|
get_deepseek_model_env,
|
|
get_fireworks_model_env,
|
|
get_google_api_key_env,
|
|
get_google_model_env,
|
|
get_litellm_model_env,
|
|
get_lmstudio_model_env,
|
|
get_llm_provider_env,
|
|
get_ollama_model_env,
|
|
get_openai_api_key_env,
|
|
get_openai_model_env,
|
|
get_cerebras_model_env,
|
|
get_openrouter_model_env,
|
|
get_together_model_env,
|
|
get_vertex_model_env,
|
|
)
|
|
|
|
|
|
def get_llm_provider():
|
|
try:
|
|
return LLMProvider(get_llm_provider_env())
|
|
except:
|
|
raise HTTPException(
|
|
status_code=500,
|
|
detail=(
|
|
"Invalid LLM provider. Please select one of: "
|
|
"openai, deepseek, google, vertex, azure, bedrock, openrouter, "
|
|
"fireworks, together, cerebras, anthropic, litellm, "
|
|
"lmstudio, ollama, custom, codex"
|
|
),
|
|
)
|
|
|
|
|
|
def is_openai_selected():
|
|
return get_llm_provider() == LLMProvider.OPENAI
|
|
|
|
|
|
def is_deepseek_selected():
|
|
return get_llm_provider() == LLMProvider.DEEPSEEK
|
|
|
|
|
|
def is_google_selected():
|
|
return get_llm_provider() == LLMProvider.GOOGLE
|
|
|
|
|
|
def is_anthropic_selected():
|
|
return get_llm_provider() == LLMProvider.ANTHROPIC
|
|
|
|
|
|
def is_vertex_selected():
|
|
return get_llm_provider() == LLMProvider.VERTEX
|
|
|
|
|
|
def is_azure_selected():
|
|
return get_llm_provider() == LLMProvider.AZURE
|
|
|
|
|
|
def is_bedrock_selected():
|
|
return get_llm_provider() == LLMProvider.BEDROCK
|
|
|
|
|
|
def is_ollama_selected():
|
|
return get_llm_provider() == LLMProvider.OLLAMA
|
|
|
|
|
|
def is_custom_llm_selected():
|
|
return get_llm_provider() == LLMProvider.CUSTOM
|
|
|
|
|
|
def is_cerebras_selected():
|
|
return get_llm_provider() == LLMProvider.CEREBRAS
|
|
|
|
|
|
def is_openrouter_selected():
|
|
return get_llm_provider() == LLMProvider.OPENROUTER
|
|
|
|
|
|
def is_fireworks_selected():
|
|
return get_llm_provider() == LLMProvider.FIREWORKS
|
|
|
|
|
|
def is_together_selected():
|
|
return get_llm_provider() == LLMProvider.TOGETHER
|
|
|
|
|
|
def is_codex_selected():
|
|
return get_llm_provider() == LLMProvider.CODEX
|
|
|
|
|
|
def is_litellm_selected():
|
|
return get_llm_provider() == LLMProvider.LITELLM
|
|
|
|
|
|
def is_lmstudio_selected():
|
|
return get_llm_provider() == LLMProvider.LMSTUDIO
|
|
|
|
|
|
def get_model():
|
|
selected_llm = get_llm_provider()
|
|
if selected_llm == LLMProvider.OPENAI:
|
|
return get_openai_model_env() or DEFAULT_OPENAI_MODEL
|
|
elif selected_llm == LLMProvider.DEEPSEEK:
|
|
return get_deepseek_model_env() or DEFAULT_DEEPSEEK_MODEL
|
|
elif selected_llm == LLMProvider.GOOGLE:
|
|
return get_google_model_env() or DEFAULT_GOOGLE_MODEL
|
|
elif selected_llm == LLMProvider.VERTEX:
|
|
return get_vertex_model_env() or DEFAULT_VERTEX_MODEL
|
|
elif selected_llm == LLMProvider.AZURE:
|
|
return (
|
|
get_azure_openai_model_env()
|
|
or get_azure_openai_deployment_env()
|
|
or DEFAULT_AZURE_MODEL
|
|
)
|
|
elif selected_llm == LLMProvider.BEDROCK:
|
|
return get_bedrock_model_env() or DEFAULT_BEDROCK_MODEL
|
|
elif selected_llm == LLMProvider.OPENROUTER:
|
|
return get_openrouter_model_env() or DEFAULT_OPENROUTER_MODEL
|
|
elif selected_llm == LLMProvider.FIREWORKS:
|
|
return get_fireworks_model_env() or DEFAULT_FIREWORKS_MODEL
|
|
elif selected_llm == LLMProvider.TOGETHER:
|
|
return get_together_model_env() or DEFAULT_TOGETHER_MODEL
|
|
elif selected_llm == LLMProvider.CEREBRAS:
|
|
return get_cerebras_model_env() or DEFAULT_CEREBRAS_MODEL
|
|
elif selected_llm == LLMProvider.ANTHROPIC:
|
|
return get_anthropic_model_env() or DEFAULT_ANTHROPIC_MODEL
|
|
elif selected_llm == LLMProvider.OLLAMA:
|
|
return get_ollama_model_env()
|
|
elif selected_llm == LLMProvider.CUSTOM:
|
|
return get_custom_model_env()
|
|
elif selected_llm == LLMProvider.LITELLM:
|
|
return get_litellm_model_env() or DEFAULT_LITELLM_MODEL
|
|
elif selected_llm == LLMProvider.LMSTUDIO:
|
|
return get_lmstudio_model_env() or DEFAULT_LMSTUDIO_MODEL
|
|
elif selected_llm == LLMProvider.CODEX:
|
|
codex_model = get_codex_model_env()
|
|
return codex_model if codex_model in SUPPORTED_CODEX_MODELS else DEFAULT_CODEX_MODEL
|
|
else:
|
|
raise HTTPException(
|
|
status_code=500,
|
|
detail=(
|
|
"Invalid LLM provider. Please select one of: "
|
|
"openai, deepseek, google, vertex, azure, bedrock, openrouter, "
|
|
"fireworks, together, cerebras, anthropic, litellm, "
|
|
"lmstudio, ollama, custom, codex"
|
|
),
|
|
)
|
|
|
|
|
|
def get_google_llm_client() -> genai.Client:
|
|
"""Google GenAI client for tests and direct API use (uses GOOGLE_API_KEY from env)."""
|
|
if not get_google_api_key_env():
|
|
raise HTTPException(status_code=400, detail="Google API Key is not set")
|
|
return genai.Client()
|
|
|
|
|
|
def get_llm_client() -> OpenAI:
|
|
"""OpenAI client for tests and direct API use (uses OPENAI_API_KEY from env)."""
|
|
if not get_openai_api_key_env():
|
|
raise HTTPException(status_code=400, detail="OpenAI API Key is not set")
|
|
return OpenAI()
|
|
|
|
|
|
def get_large_model() -> str:
|
|
"""Resolved model name for the configured LLM provider (same as runtime `get_model`)."""
|
|
return get_model()
|