Ausnahmesteuerung
LiteLLM bildet Ausnahmen über alle Anbieter auf ihre OpenAI-Gegenstücke ab.
Alle Ausnahmen können aus litellm importiert werden - z.B. from litellm import BadRequestError
LiteLLM-Ausnahmen​
| Statuscode | Fehlertyp | Erbt von | Beschreibung |
|---|---|---|---|
| 400 | BadRequestError | openai.BadRequestError | |
| 400 | UnsupportedParamsError | litellm.BadRequestError | Ausgelöst, wenn nicht unterstützte Parameter übergeben werden |
| 400 | ContextWindowExceededError | litellm.BadRequestError | Spezieller Fehlertyp für Fehlermeldungen, die das Überschreiten des Kontextfensters betreffen - ermöglicht Fallbacks für das Kontextfenster |
| 400 | ContentPolicyViolationError | litellm.BadRequestError | Spezieller Fehlertyp für Fehlermeldungen, die die Verletzung von Inhaltsrichtlinien betreffen - ermöglicht Fallbacks für Inhaltsrichtlinien |
| 400 | InvalidRequestError | openai.BadRequestError | Veraltet, verwenden Sie stattdessen BadRequestError |
| 401 | AuthenticationError | openai.AuthenticationError | |
| 403 | PermissionDeniedError | openai.PermissionDeniedError | |
| 404 | NotFoundError | openai.NotFoundError | Wird ausgelöst, wenn ungültige Modelle übergeben werden, z. B. gpt-8 |
| 408 | Timeout | openai.APITimeoutError | Ausgelöst, wenn ein Timeout auftritt |
| 422 | UnprocessableEntityError | openai.UnprocessableEntityError | |
| 429 | RateLimitError | openai.RateLimitError | |
| 500 | APIConnectionError | openai.APIConnectionError | Wenn eine nicht zugeordnete Ausnahme zurückgegeben wird, geben wir diese Ausnahme zurück |
| 500 | APIError | openai.APIError | Genereller Fehler mit Statuscode 500 |
| 503 | ServiceUnavailableError | openai.APIStatusError | Wenn der Anbieter einen Fehler wegen nicht verfügbarer Dienste zurückgibt, wird diese Ausnahme ausgelöst |
| >=500 | InternalServerError | openai.InternalServerError | Wenn ein nicht zugeordneter Fehler mit Statuscode 500 zurückgegeben wird, wird diese Ausnahme ausgelöst |
| N/A | APIResponseValidationError | openai.APIResponseValidationError | Wenn Regeln verwendet werden und Anfrage/Antwort eine Regel verletzen, wird diese Ausnahme ausgelöst |
| N/A | BudgetExceededError | Exception | Ausgelöst für den Proxy, wenn das Budget überschritten wird |
| N/A | JSONSchemaValidationError | litellm.APIResponseValidationError | Ausgelöst, wenn die Antwort nicht dem erwarteten JSON-Schema entspricht - verwendet, wenn der Parameter response_schema mit enforce_validation=True übergeben wird |
| N/A | MockException | Exception | Interne Ausnahme, ausgelöst durch die Klasse mock_completion. Nicht direkt verwenden |
| N/A | OpenAIError | openai.OpenAIError | Veraltete interne Ausnahme, erbt von openai.OpenAIError. |
Basisfall - wir geben APIConnectionError zurück
Alle unsere Ausnahmen erben von den Ausnahmetypen von OpenAI, daher sollte jede Fehlerbehandlung, die Sie für diese haben, sofort mit LiteLLM funktionieren.
In allen Fällen erbt die zurückgegebene Ausnahme von der ursprünglichen OpenAI-Ausnahme, enthält aber 3 zusätzliche Attribute
- status_code - der http-statuscode der Ausnahme
- message - die Fehlermeldung
- llm_provider - der Anbieter, der die Ausnahme auslöst
Verwendung​
import litellm
import openai
try:
response = litellm.completion(
model="gpt-4",
messages=[
{
"role": "user",
"content": "hello, write a 20 pageg essay"
}
],
timeout=0.01, # this will raise a timeout exception
)
except openai.APITimeoutError as e:
print("Passed: Raised correct exception. Got openai.APITimeoutError\nGood Job", e)
print(type(e))
pass
Verwendung - Streaming-Ausnahmen abfangen​
import litellm
try:
response = litellm.completion(
model="gpt-3.5-turbo",
messages=[
{
"role": "user",
"content": "hello, write a 20 pg essay"
}
],
timeout=0.0001, # this will raise an exception
stream=True,
)
for chunk in response:
print(chunk)
except openai.APITimeoutError as e:
print("Passed: Raised correct exception. Got openai.APITimeoutError\nGood Job", e)
print(type(e))
pass
except Exception as e:
print(f"Did not raise error `openai.APITimeoutError`. Instead raised error type: {type(e)}, Error: {e}")
Verwendung - Sollten Sie die Ausnahme erneut versuchen?​
import litellm
import openai
try:
response = litellm.completion(
model="gpt-4",
messages=[
{
"role": "user",
"content": "hello, write a 20 pageg essay"
}
],
timeout=0.01, # this will raise a timeout exception
)
except openai.APITimeoutError as e:
should_retry = litellm._should_retry(e.status_code)
print(f"should_retry: {should_retry}")
Details​
Um zu sehen, wie es implementiert ist - schauen Sie sich den Code an
Erstellen Sie ein Problem oder machen Sie einen PR, wenn Sie die Ausnahmezuordnung verbessern möchten.
Hinweis Für OpenAI und Azure geben wir die ursprüngliche Ausnahme zurück (da sie vom Typ OpenAI Error sind). Wir fügen ihnen jedoch das Attribut 'llm_provider' hinzu. Siehe Code
Benutzerdefinierte Zuordnungsliste​
Basisfall - wir geben die Ausnahme litellm.APIConnectionError zurück (erbt von der Ausnahme APIConnectionError von openai).
| custom_llm_provider | Timeout | ContextWindowExceededError | BadRequestError | NotFoundError | ContentPolicyViolationError | AuthenticationError | APIError | RateLimitError | ServiceUnavailableError | PermissionDeniedError | UnprocessableEntityError |
|---|---|---|---|---|---|---|---|---|---|---|---|
| openai | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||
| watsonx | ✓ | ||||||||||
| text-completion-openai | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||
| custom_openai | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||
| openai_compatible_providers | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||
| anthropic | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||||
| replicate | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||||
| bedrock | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||
| sagemaker | ✓ | ✓ | |||||||||
| vertex_ai | ✓ | ✓ | ✓ | ✓ | |||||||
| palm | ✓ | ✓ | ✓ | ||||||||
| gemini | ✓ | ✓ | ✓ | ||||||||
| cloudflare | ✓ | ✓ | |||||||||
| cohere | ✓ | ✓ | ✓ | ✓ | |||||||
| cohere_chat | ✓ | ✓ | ✓ | ✓ | |||||||
| huggingface | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||
| ai21 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||
| nlp_cloud | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||||
| together_ai | ✓ | ✓ | ✓ | ✓ | |||||||
| aleph_alpha | ✓ | ✓ | |||||||||
| ollama | ✓ | ✓ | ✓ | ||||||||
| ollama_chat | ✓ | ✓ | ✓ | ||||||||
| vllm | ✓ | ✓ | |||||||||
| azure | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
- "✓" bedeutet, dass der angegebene
custom_llm_providerdie entsprechende Ausnahme auslösen kann. - Leere Zellen deuten auf fehlende Zuordnung hin oder darauf, dass der Anbieter diesen bestimmten Ausnahmetyp nicht wie in der Funktion angegeben auslöst.
Für ein tieferes Verständnis dieser Ausnahmen können Sie diese Implementierung zur zusätzlichen Einsicht konsultieren.
Die ContextWindowExceededError ist eine Unterklasse von InvalidRequestError. Sie wurde eingeführt, um mehr Granularität für die Ausnahmebehandlung zu bieten. Bitte beziehen Sie sich auf dieses Problem, um mehr zu erfahren.
Beiträge zur Verbesserung der Ausnahmezuordnung sind willkommen