testing / interview /llm_router.py
Danielsz's picture
Fix slow startup: defer heavy ML library imports (sentence_transformers, litellm)
c0ba22e
Raw
History Blame Contribute Delete
2.33 kB
from .models import LLMProviderConfig
# ponytail: wrapper ultra-fino para litellm. Si falla, boom.
def chat_completion(messages):
config = LLMProviderConfig.objects.filter(is_active=True, is_embedding=False).first()
if not config:
raise Exception("No active LLM provider configured.")
if config.provider_type == 'ollama':
import litellm
endpoint = config.api_key if config.api_key else "http://127.0.0.1:11434"
return litellm.completion(
model=f"ollama/{config.model}",
messages=messages,
api_base=endpoint
)
elif config.provider_type == 'talentai':
# Para TalentAI (HuggingFace Space microservicio), usamos formato OpenAI
# config.endpoint tiene la URL del Space, config.api_key tiene la clave secreta
ep = config.endpoint.strip().rstrip("/") if config.endpoint else ""
import litellm
return litellm.completion(
model=f"openai/{config.model}",
messages=messages,
api_base=ep,
api_key=config.api_key if config.api_key else "no-key-needed",
custom_llm_provider="openai"
)
elif config.provider_type == 'openai':
import litellm
return litellm.completion(
model=config.model,
messages=messages,
api_key=config.api_key
)
elif config.provider_type == 'anthropic':
import litellm
return litellm.completion(
model=config.model,
messages=messages,
api_key=config.api_key
)
elif config.provider_type == 'nvidia':
import openai
client = openai.OpenAI(
base_url="https://integrate.api.nvidia.com/v1",
api_key=config.api_key
)
return client.chat.completions.create(
model=config.model,
messages=messages,
temperature=1,
top_p=0.95,
max_tokens=4000
)
else:
# Fallback genérico para Litellm (que se encarga de rutear según el modelo)
import litellm
return litellm.completion(
model=config.model,
messages=messages,
api_key=config.api_key,
api_base=config.endpoint if config.endpoint else None
)