Zuverlässigkeit - Wiederholungsversuche, Fallbacks
LiteLLM hilft, fehlgeschlagene Anfragen auf 2 Arten zu verhindern
- Wiederholungsversuche
- Fallbacks: Kontextfenster + Allgemein
Hilfsfunktionen​
LiteLLM unterstützt die folgenden Funktionen für Zuverlässigkeit
litellm.longer_context_model_fallback_dict: Ein Wörterbuch, das eine Zuordnung für Modelle mit größeren Äquivalenten enthältnum_retries: verwendet Tenacity-Wiederholungsversuchecompletion()mit Fallbacks: Wechselt bei Fehlern zwischen Modellen/Schlüsseln/API-Basen.
Fehlgeschlagene Anfragen erneut versuchen​
Rufen Sie es in completion wie folgt auf: completion(..num_retries=2).
Hier ist ein kurzer Überblick, wie Sie es verwenden können
from litellm import completion
user_message = "Hello, whats the weather in San Francisco??"
messages = [{"content": user_message, "role": "user"}]
# normal call
response = completion(
model="gpt-3.5-turbo",
messages=messages,
num_retries=2
)
Fallbacks (SDK)​
Kontextfenster-Fallbacks (SDK)​
from litellm import completion
fallback_dict = {"gpt-3.5-turbo": "gpt-3.5-turbo-16k"}
messages = [{"content": "how does a court case get to the Supreme Court?" * 500, "role": "user"}]
completion(model="gpt-3.5-turbo", messages=messages, context_window_fallback_dict=fallback_dict)
Fallbacks - Modelle/API-Schlüssel/API-Basen wechseln (SDK)​
LLM-APIs können instabil sein. `completion()` mit Fallbacks stellt sicher, dass Sie immer eine Antwort von Ihren Aufrufen erhalten.
Verwendung​
Um Fallback-Modelle mit completion() zu verwenden, geben Sie eine Liste von Modellen im Parameter fallbacks an.
Die Liste fallbacks sollte das primäre Modell, das Sie verwenden möchten, gefolgt von zusätzlichen Modellen, die als Sicherung verwendet werden können, wenn das primäre Modell keine Antwort liefert, enthalten.
Modelle wechseln​
response = completion(model="bad-model", messages=messages,
fallbacks=["gpt-3.5-turbo" "command-nightly"])
API-Schlüssel/Basen wechseln (z. B. Azure-Bereitstellung)​
Wechseln Sie zwischen verschiedenen SchlĂĽsseln fĂĽr dieselbe Azure-Bereitstellung oder verwenden Sie auch eine andere Bereitstellung.
api_key="bad-key"
response = completion(model="azure/gpt-4", messages=messages, api_key=api_key,
fallbacks=[{"api_key": "good-key-1"}, {"api_key": "good-key-2", "api_base": "good-api-base-2"}])
Sehen Sie sich diesen Abschnitt fĂĽr Implementierungsdetails an
Implementierungsdetails (SDK)​
Fallbacks​
Ausgabe von Aufrufen​
Completion with 'bad-model': got exception Unable to map your input to a model. Check your input - {'model': 'bad-model'
completion call gpt-3.5-turbo
{
"id": "chatcmpl-7qTmVRuO3m3gIBg4aTmAumV1TmQhB",
"object": "chat.completion",
"created": 1692741891,
"model": "gpt-3.5-turbo-0613",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "I apologize, but as an AI, I do not have the capability to provide real-time weather updates. However, you can easily check the current weather in San Francisco by using a search engine or checking a weather website or app."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 16,
"completion_tokens": 46,
"total_tokens": 62
}
}
Wie funktionieren Fallbacks?​
Wenn Sie fallbacks an completion übergeben, wird der erste completion-Aufruf mit dem primären Modell durchgeführt, das als model in completion(model=model) angegeben ist. Wenn das primäre Modell fehlschlägt oder einen Fehler aufweist, werden automatisch die fallbacks-Modelle in der angegebenen Reihenfolge ausprobiert. Dies stellt sicher, dass eine Antwort auch dann geliefert wird, wenn das primäre Modell nicht verfügbar ist.
Schlüsselkomponenten der Implementierung von Modell-Fallbacks:​
- Durchlaufen der
fallbacks - AbkĂĽhlzeiten fĂĽr ratenlimitierte Modelle
Durchlaufen der fallbacks​
Erlauben Sie jeweils 45 Sekunden für jede Anfrage. Innerhalb dieser 45 Sekunden versucht diese Funktion, das als model festgelegte primäre Modell aufzurufen. Wenn das Modell fehlschlägt, durchläuft es die Backup-fallbacks-Modelle und versucht, innerhalb der hier festgelegten 45 Sekunden eine Antwort zu erhalten.
while response == None and time.time() - start_time < 45:
for model in fallbacks:
Abkühlzeiten für ratenlimitierte Modelle​
Wenn ein LLM-API-Aufruf zu einem Fehler fĂĽhrt, lassen Sie ihn 60 Sekunden abkĂĽhlen.
except Exception as e:
print(f"got exception {e} for model {model}")
rate_limited_models.add(model)
model_expiration_times[model] = (
time.time() + 60
) # cool down this selected model
pass
Bevor wir einen LLM-API-Aufruf tätigen, prüfen wir, ob das ausgewählte Modell in rate_limited_models enthalten ist. Wenn ja, überspringen wir den API-Aufruf.
if (
model in rate_limited_models
): # check if model is currently cooling down
if (
model_expiration_times.get(model)
and time.time() >= model_expiration_times[model]
):
rate_limited_models.remove(
model
) # check if it's been 60s of cool down and remove model
else:
continue # skip model
Vollständiger Code von completion mit Fallbacks()​
response = None
rate_limited_models = set()
model_expiration_times = {}
start_time = time.time()
fallbacks = [kwargs["model"]] + kwargs["fallbacks"]
del kwargs["fallbacks"] # remove fallbacks so it's not recursive
while response == None and time.time() - start_time < 45:
for model in fallbacks:
# loop thru all models
try:
if (
model in rate_limited_models
): # check if model is currently cooling down
if (
model_expiration_times.get(model)
and time.time() >= model_expiration_times[model]
):
rate_limited_models.remove(
model
) # check if it's been 60s of cool down and remove model
else:
continue # skip model
# delete model from kwargs if it exists
if kwargs.get("model"):
del kwargs["model"]
print("making completion call", model)
response = litellm.completion(**kwargs, model=model)
if response != None:
return response
except Exception as e:
print(f"got exception {e} for model {model}")
rate_limited_models.add(model)
model_expiration_times[model] = (
time.time() + 60
) # cool down this selected model
pass
return response