Skip to content
Diese Seite wurde mit KI-Unterstützung erstellt und übersetzt. Falls Ihnen Ungenauigkeiten auffallen, helfen Sie gerne bei der Verbesserung. Auf GitHub bearbeiten

Hot-Reload

PRX unterstützt das Hot-Reloading der meisten Konfigurationsänderungen. Wenn Sie config.toml (oder ein Fragment in config.d/) bearbeiten, werden die Änderungen innerhalb von Sekunden erkannt und angewendet -- kein Neustart erforderlich.

Funktionsweise

PRX verwendet einen dreischichtigen Mechanismus für Live-Konfigurationsaktualisierungen:

  1. Dateibeobachter -- Ein notify-Dateisystem-Beobachter überwacht das Konfigurationsverzeichnis (sowohl config.toml als auch den gesamten config.d/-Baum) auf Schreibereignisse.

  2. Entprellen -- Ereignisse werden mit einem 1-Sekunden-Fenster entprellt, um schnelle aufeinanderfolgende Schreibvorgänge zusammenzufassen (z.B. von Editoren, die schreiben und dann umbenennen).

  3. Atomarer Tausch -- Bei Erkennung einer Änderung:

    • Berechnet PRX einen SHA-256-Fingerabdruck der neuen Konfiguration
    • Vergleicht ihn mit dem letzten bekannten Fingerabdruck (überspringt bei Gleichheit)
    • Parst das neue TOML in ein Config-Struct
    • Bei Erfolg: veröffentlicht die neue Konfiguration atomar über ArcSwap (ohne Sperre)
    • Bei Fehlschlag: behält die vorherige Konfiguration bei und protokolliert eine Warnung

Der Typ SharedConfig (Arc<ArcSwap<Config>>) stellt sicher, dass alle Komponenten, die die Konfiguration lesen, einen konsistenten Snapshot ohne Konkurrenz erhalten. Leser rufen .load_full() auf, um einen Arc<Config>-Snapshot zu erhalten, der gültig bleibt, auch wenn die Konfiguration während der Verwendung getauscht wird.

Was per Hot-Reload aktualisiert wird

Die folgenden Änderungen werden sofort wirksam (innerhalb von ~1 Sekunde):

KategorieBeispiele
Anbietereinstellungendefault_provider, default_model, default_temperature, api_key, api_url
KanaleinstellungenTelegram allowed_users, Discord mention_only, Slack channel_id usw.
Gedächtniseinstellungenbackend, auto_save, embedding_provider, Aufbewahrungszeiträume
Router-Einstellungenenabled, Gewichte (alpha/beta/gamma/delta/epsilon), Automix-Schwellenwerte
SicherheitseinstellungenSandbox-Backend, Ressourcenlimits, Audit-Konfiguration
AutonomieeinstellungenBereichsregeln, Autonomiestufen
MCP-EinstellungenServerdefinitionen, Zeitlimits, Werkzeug-Allowlists
Websucheeinstellungenenabled, provider, max_results
Browsereinstellungenenabled, allowed_domains
Xin-Einstellungenenabled, interval_minutes, Aufgabenlimits
Kosteneinstellungendaily_limit_usd, monthly_limit_usd, Preise
Zuverlässigkeitseinstellungenmax_retries, fallback_providers
Beobachtbarkeitseinstellungenbackend, OTLP-Endpunkt
Proxy-EinstellungenProxy-URLs, No-Proxy-Listen, Bereich

Was einen Neustart erfordert

Eine kleine Anzahl von Einstellungen wird beim Start gebunden und kann zur Laufzeit nicht geändert werden:

EinstellungGrund
[gateway] hostTCP-Listener wird einmalig beim Start gebunden
[gateway] portTCP-Listener wird einmalig beim Start gebunden
[tunnel]-EinstellungenTunnel-Verbindungen werden beim Start aufgebaut
Kanal-Bot-TokenBot-Verbindungen (Telegram Long-Poll, Discord Gateway, Slack Socket) werden einmalig initialisiert

Für diese Einstellungen müssen Sie den PRX-Daemon neu starten:

bash
# Bei Ausführung als systemd-Dienst
sudo systemctl restart openprx

# Bei Ausführung im Vordergrund
# Mit Ctrl+C stoppen, dann erneut starten
prx

CLI-Neuladebefehl

Sie können manuell ein Neuladen der Konfiguration auslösen, ohne die Datei zu bearbeiten:

bash
prx config reload

Dies entspricht dem Erkennen einer Änderung durch den Dateibeobachter. Es liest die Konfigurationsdateien erneut ein, parst sie und tauscht die aktive Konfiguration atomar aus. Dies ist nützlich, wenn:

  • Sie die Datei geändert haben, aber der Beobachter das Ereignis verpasst hat (selten)
  • Sie ein Neuladen nach der Aktualisierung von Umgebungsvariablen erzwingen möchten
  • Sie Konfigurationsänderungen skripten

Fehlerbehandlung

Wenn die neue Konfigurationsdatei Fehler enthält:

  • TOML-Syntaxfehler -- Der Parser lehnt die Datei ab. Die vorherige Konfiguration wird beibehalten. Eine Warnung mit den Parse-Fehlerdetails wird protokolliert.
  • Ungültige Feldwerte -- Die Validierung erkennt Probleme wie confidence_threshold > 1.0 oder leere premium_model_id bei aktiviertem Automix. Die vorherige Konfiguration wird beibehalten.
  • Fehlende Datei -- Wenn config.toml gelöscht wird, protokolliert der Beobachter einen Fehler, aber die In-Memory-Konfiguration funktioniert weiter.

In allen Fehlerfällen arbeitet PRX mit der letzten bekannten guten Konfiguration weiter. Es gehen keine Daten verloren und es tritt keine Dienstunterbrechung auf.

Neuladen überwachen

Der HotReloadManager pflegt einen monotonen reload_version-Zähler, der bei jedem erfolgreichen Neuladen inkrementiert wird. Sie können die aktuelle Version über den Gateway-Statusendpunkt prüfen:

bash
curl http://localhost:16830/api/status

Die Antwort enthält die aktuelle Neulade-Zählung, damit Sie überprüfen können, ob Ihre Änderungen angewendet wurden.

Neuladen aufgeteilter Dateien

Bei Verwendung aufgeteilter Konfigurationsdateien (config.d/*.toml) überwacht der Beobachter das gesamte config.d/-Verzeichnis rekursiv. Eine Änderung an einem beliebigen .toml-Fragment löst ein vollständiges Zusammenführen und Neuladen der gesamten Konfiguration aus. Das bedeutet:

  • Bearbeitung von config.d/channels.toml lädt die gesamte Konfiguration neu (nicht nur Kanäle)
  • Hinzufügen oder Entfernen einer Fragmentdatei löst ein Neuladen aus
  • Die Zusammenführungsreihenfolge ist alphabetisch nach Dateiname, wobei Fragmente Vorrang vor config.toml haben

Released under the Apache-2.0 License.