paint-brush
LiteLLM-Konfigurationen: Rufen Sie zuverlässig mehr als 100 LLMs aufvon@krrish
2,287 Lesungen
2,287 Lesungen

LiteLLM-Konfigurationen: Rufen Sie zuverlässig mehr als 100 LLMs auf

von Krrish Dholakia3m2023/09/22
Read on Terminal Reader
Read this story w/o Javascript

Zu lang; Lesen

LiteLLM ist ein direkter Ersatz für das openai-python SDK. Damit können Sie mehr als 100 LLMs anrufen. Mit Konfigurationsdateien können Sie jetzt neue Modelle in der Produktion hinzufügen, ohne serverseitigen Code zu ändern.
featured image - LiteLLM-Konfigurationen: Rufen Sie zuverlässig mehr als 100 LLMs auf
Krrish Dholakia HackerNoon profile picture
0-item
1-item


Das Problem

Der Aufruf mehrerer LLMs erfordert anbieter-/modellspezifische Konfigurationen. Selbst wenn Sie die E/A vereinheitlichen, benötigen Sie immer noch eine Möglichkeit, modell-/anbieterspezifische Randfälle zu handhaben.


Wir waren letzte Woche damit konfrontiert, als Anthropic uns mitteilte, dass wir gegen ihre Inhaltsrichtlinien verstoßen hatten. Seitdem bieten wir unserer Community über unseren Open-Source- Proxyserver Zugriff auf LLMs wie Claude-2 usw.


Das Überprüfen von Abfragen über den OpenAI-Moderationsendpunkt würde die Abfragen verlangsamen, daher wollten wir dies nur auf den Modellen von Anthropic ausführen.


 if model in ["claude-instant-1", "claude-2"]: # run moderations check return litellm.completion(model, messages)


Eine solche bedingte Logik führt jedoch zu Fehlern. Wir hatten genau dieses Problem schon einmal und haben LiteLLM entwickelt, um dieses Problem für uns zu lösen (Abstraktionsbibliothek, die LLM-API-Aufrufe vereinfacht).


tldr;

  • Wir wollten keine bedingte Logik auf unserem Server.
  • Wir brauchten eine Möglichkeit zu kontrollieren, für welche Modelle/Anbieter diese Prüfung durchgeführt wurde.

Die Lösung: Konfigurationsdateien

Unsere Lösung bestand darin, LiteLLM dies für uns erledigen zu lassen und seine Logik über eine Konfigurationsdatei zu steuern. Dadurch wurde die bedingte Logik aus unserem Servercode entfernt und wir konnten weiterhin anbieter-/modellspezifische Details steuern .


Dadurch konnten wir auch andere Szenarien wie Kontextfensterfehler, maximale Tokenanzahl usw. bewältigen.


Hier ist unser vollständiger Code:


 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


Konfigurationsdateien verwalten derzeit:

  • Eingabeaufforderungslogik – Auswahl des richtigen Modells für eine bestimmte Eingabeaufforderung sowie Kürzung einer Eingabeaufforderung, wenn sie größer als jedes verfügbare Modell ist
  • Fallback-Logik – Sie können sowohl Standard-Fallbacks als auch modellspezifische festlegen (z. B. den Kontextfensterfehler oben).
  • Moderationen – wenn ein Anbieter (z. B. Anthropic) von Ihnen verlangt, Ihre Anfragen zu moderieren


Im Laufe der Zeit werden dadurch auch andere modellspezifische Parameter wie das Festlegen der maximalen Token, die Eingabeaufforderungsformatierung usw. behandelt . Ideen/Vorschläge sind willkommen!

Abschluss

LiteLLM hat bereits das Aufrufen von LLM-Anbietern vereinfacht, mit einem Drop-in-Ersatz für den OpenAI ChatCompletion-Endpunkt.


Mit Konfigurationsdateien können Sie jetzt neue Modelle in der Produktion hinzufügen, ohne serverseitigen Code zu ändern.


Insgesamt ist LiteLLM eine ausgezeichnete Wahl für alle, die schnell und einfach Nicht-OpenAI-Modelle in die Produktion integrieren möchten.


Wir versuchen aktiv, dieses Projekt auszubauen, daher freuen wir uns über Beiträge, unabhängig von Ihrem Kenntnisstand! Öffnen Sie ein Problem, wenn Sie fehlende Funktionen/Fehler finden oder zu bestehenden Problemen beitragen. Markieren Sie uns auf GitHub, wenn Sie unsere Fortschritte verfolgen möchten, sobald neue Updates verfügbar sind.