update
This commit is contained in:
@@ -14,8 +14,10 @@ API_VERSION = "2023-06-01"
|
||||
|
||||
# Der Provider drosselt bei vielen gleichzeitigen Anfragen
|
||||
WIEDERHOLBAR = (429, 500, 502, 503, 504)
|
||||
WIEDERHOLUNGEN = 4
|
||||
WIEDERHOLUNGEN = 6
|
||||
PAUSE = 2.0
|
||||
# Länger als das zu warten hilft nicht mehr; dann ist die Drossel zu weit offen
|
||||
HOECHSTPAUSE = 60.0
|
||||
|
||||
|
||||
class NichtKonfiguriert(ValueError):
|
||||
@@ -37,6 +39,15 @@ def pruefe_konfiguration():
|
||||
raise NichtKonfiguriert(f"Nicht konfiguriert: {', '.join(fehlend)} in .env fehlt")
|
||||
|
||||
|
||||
def _pause(res, versuch: int) -> float:
|
||||
"""Wie lange bis zum nächsten Versuch — der Provider darf es selbst sagen."""
|
||||
gesagt = res.headers.get("retry-after")
|
||||
try:
|
||||
return min(float(gesagt), HOECHSTPAUSE)
|
||||
except (TypeError, ValueError):
|
||||
return min(PAUSE * (2 ** versuch), HOECHSTPAUSE)
|
||||
|
||||
|
||||
async def frage(system: str, inhalt: str, temperatur: float = 0.0) -> str:
|
||||
"""Eine Anfrage, eine Antwort — der Text der Modellantwort.
|
||||
Kalt geroutet: Temperatur 0, kein Thinking; die Prüfung soll nicht raten.
|
||||
@@ -63,7 +74,7 @@ async def frage(system: str, inhalt: str, temperatur: float = 0.0) -> str:
|
||||
# Zu viele Anfragen oder Serverfehler: warten und noch einmal.
|
||||
# Ohne das fielen bei großen Läufen ganze Stimmen aus — und ein
|
||||
# fehlendes Urteil sah aus wie „nichts gefunden".
|
||||
await asyncio.sleep(PAUSE * (2 ** versuch))
|
||||
await asyncio.sleep(_pause(res, versuch))
|
||||
if res.status_code != 200:
|
||||
raise RuntimeError(f"Provider antwortet mit HTTP {res.status_code}")
|
||||
antwort = res.json()
|
||||
|
||||
Reference in New Issue
Block a user