Llamar a varios LLM implica configuraciones específicas del proveedor/modelo. Incluso si unifica las E/S, aún necesita una forma de manejar los casos extremos específicos del modelo/proveedor.
Nos enfrentamos a esto la semana pasada cuando Anthropic nos dijo que habíamos violado su política de contenido. Desde entonces, brindamos a nuestra comunidad acceso a LLM como Claude-2, etc. a través de nuestro servidor proxy de código abierto.
Verificar las consultas a través del punto final de moderación de OpenAI ralentizaría las consultas, por lo que solo queríamos ejecutar esto en los modelos de Anthropic.
if model in ["claude-instant-1", "claude-2"]: # run moderations check return litellm.completion(model, messages)
Pero una lógica condicional como esta genera errores. Nos habíamos enfrentado a este problema exacto antes y habíamos creado LiteLLM para resolverlo (biblioteca de abstracción que simplificó las llamadas a la API de LLM).
tldr;
Nuestra solución fue que LiteLLM manejara esto por nosotros y controlara su lógica a través de un archivo de configuración. Esto eliminó la lógica condicional de nuestro código de servidor y aún nos permitió controlar los detalles específicos del proveedor/modelo .
Esto también nos permitió manejar otros escenarios como errores de ventana de contexto, tokens máximos, etc.
Aquí está nuestro 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
Los archivos de configuración actualmente administran:
Con el tiempo, esto manejará otros parámetros específicos del modelo, como establecer tokens máximos, formato de mensajes, etc. ¡Las ideas y sugerencias son bienvenidas!
LiteLLM ya simplificó las llamadas a proveedores de LLM, con un reemplazo directo para el punto final de OpenAI ChatCompletion.
Con los archivos de configuración, ahora puede permitirle agregar nuevos modelos en producción, sin cambiar ningún código del lado del servidor.
En general, LiteLLM es una excelente opción para cualquiera que busque agregar modelos que no sean OpenAI en producción de manera rápida y sencilla.
Estamos tratando activamente de hacer crecer este proyecto, por lo que no importa su nivel de habilidad, ¡agradecemos las contribuciones! Abra un problema si encuentra características o errores faltantes o si contribuye a problemas existentes. Destacanos en GitHub si quieres seguir nuestro progreso a medida que llegan nuevas actualizaciones.