paint-brush
Configurações do LiteLLM: ligue com segurança para mais de 100 LLMspor@krrish
2,951 leituras
2,951 leituras

Configurações do LiteLLM: ligue com segurança para mais de 100 LLMs

por Krrish Dholakia3m2023/09/22
Read on Terminal Reader

Muito longo; Para ler

LiteLLM é um substituto imediato para o SDK openai-python. Permitindo que você ligue para mais de 100 LLMs. Com arquivos de configuração, agora você pode adicionar novos modelos em produção, sem alterar nenhum código do lado do servidor.
featured image - Configurações do LiteLLM: ligue com segurança para mais de 100 LLMs
Krrish Dholakia HackerNoon profile picture


O problema

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;

  • Não queríamos lógica condicional em nosso servidor.
  • Precisávamos de uma maneira de controlar para quais modelos/provedores essa verificação seria executada.

A solução: arquivos de configuração

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:

  • Lógica de prompt - escolher o modelo certo para um determinado prompt, bem como cortar um prompt se for maior que qualquer modelo disponível
  • Lógica de fallback - permitindo definir fallbacks padrão, bem como aqueles específicos do modelo (por exemplo, o erro da janela de contexto acima).
  • Moderações - se um provedor (por exemplo, Anthropic) exigir que você modere suas solicitações


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!

Conclusão

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.