El problema 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 de código abierto. servidor proxy 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 (biblioteca de abstracción que simplificó las llamadas a la API de LLM). creado LiteLLM para resolverlo tldr; queríamos lógica condicional en nuestro servidor. No una forma de controlar para qué modelos/proveedores realizaba esta verificación. Necesitábamos La solución: archivos de configuración Nuestra solución fue que LiteLLM esto por nosotros y controlara su lógica a través de un archivo de configuración. Esto y aún nos permitió . manejara eliminó la lógica condicional de nuestro código de servidor 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: Lógica de avisos: elegir el modelo correcto para un aviso determinado, así como recortar un aviso si es más grande que cualquier modelo disponible Lógica de respaldo: le permite establecer respaldos predeterminados y específicos del modelo (por ejemplo, el error de la ventana de contexto anterior). Moderaciones: si un proveedor (por ejemplo, Anthropic) requiere que modere sus solicitudes 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! Conclusión 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. en GitHub si quieres seguir nuestro progreso a medida que llegan nuevas actualizaciones. Destacanos