Chamar vários LLMs envolve configurações específicas do provedor/modelo. Mesmo se você unificar a E/S, ainda precisará de uma maneira de lidar com casos extremos específicos do modelo/provedor.
Enfrentamos isso na semana passada, quando a Anthropic nos disse que havíamos violado sua política de conteúdo. Desde então, fornecemos à nossa comunidade acesso a LLMs como Claude-2 etc. por meio de nosso servidor proxy de código aberto.
Verificar as consultas por meio do endpoint de moderação OpenAI tornaria as consultas mais lentas, então queríamos executar isso apenas nos modelos da Anthropic.
if model in ["claude-instant-1", "claude-2"]: # run moderations check return litellm.completion(model, messages)
Mas lógica condicional como essa leva a bugs. Já havíamos enfrentado exatamente esse problema antes e construímos o LiteLLM para resolver esse problema para nós (biblioteca de abstração que simplificou as chamadas de API do LLM).
tldr;
Nossa solução foi fazer com que o LiteLLM cuidasse disso para nós e controlasse sua lógica por meio de um arquivo de configuração. Isso removeu a lógica condicional do código do nosso servidor e ainda nos permitiu controlar detalhes específicos do provedor/modelo .
Isso também nos permitiu lidar com outros cenários, como erros de janela de contexto, máximo de tokens, etc.
Aqui está nosso código completo:
import litellm import os config = { "default_fallback_models": ["gpt-3.5-turbo", "claude-instant-1", "j2-ultra"], "model": { "claude-instant-1": { "needs_moderation": True }, "gpt-3.5-turbo": { "error_handling": { "ContextWindowExceededError": {"fallback_model": "gpt-3.5-turbo-16k"} } } } } # set env var os.environ["OPENAI_API_KEY"] = "sk-litellm-5b46387675a944d2" # [OPTIONAL] replace with your openai key os.environ["ANTHROPIC_API_KEY"] = "sk-litellm-5b46387675a944d2" # [OPTIONAL] replace with your anthropic key sample_text = "how does a court case get to the Supreme Court?" * 1000 messages = [{"content": sample_text, "role": "user"}] response = completion_with_config(model="gpt-3.5-turbo", messages=messages, config=config) print(response) # should be gpt-3.5-turbo-16k
Os arquivos de configuração gerenciam atualmente:
Com o tempo, isso irá lidar com outros parâmetros específicos do modelo, como configuração de tokens máximos, formatação de prompt, etc. Idéias/sugestões são bem-vindas!
LiteLLM já simplificou a chamada para provedores LLM, com um substituto imediato para o endpoint do OpenAI ChatCompletion.
Com arquivos de configuração, agora você pode adicionar novos modelos em produção, sem alterar nenhum código do lado do servidor.
No geral, LiteLLM é uma excelente escolha para quem deseja adicionar modelos não-OpenAI em produção de forma rápida e fácil.
Estamos tentando ativamente fazer crescer este projeto, portanto, não importa o seu nível de habilidade, agradecemos contribuições! Abra um problema se encontrar recursos/bugs ausentes ou contribuir para problemas existentes. Marque-nos no GitHub se quiser acompanhar nosso progresso à medida que novas atualizações chegam.