Configuration Reference

Konfigurationsreferenz

Open Ticket AI lädt seine YAML-Konfiguration in das OpenTicketAIConfig Modell. Das Schema basiert auf einem einzelnen open_ticket_ai Objekt, das API-/Version-Metadaten, Infrastruktureinstellungen, Dependency-Injected Services und die Definition des Pipeline-Orchestrators enthält. 【F:src/open_ticket_ai/core/config/config_models.py†L17-L37】

Grundstruktur der Konfiguration

FeldTypBeschreibung
api_versionstrOptionaler Versionsstring, der standardmäßig "1" ist. 【F:src/open_ticket_ai/core/config/config_models.py†L18-L21】
pluginslist[str]Python-Module, die Plugin-Entry-Points bereitstellen. Jedes Plugin fügt zusätzliche Injectables zum Registry hinzu. 【F:src/open_ticket_ai/core/config/config_models.py†L22-L25】
infrastructureInfrastructureConfigLogging und andere Host-Level-Anforderungen. 【F:src/open_ticket_ai/core/config/config_models.py†L26-L29】
servicesdict[str, InjectableConfigBase]Map von Injectable-Service-Definitionen, die durch den Identifier gekennzeichnet sind, den Sie in Pipelines referenzieren. 【F:src/open_ticket_ai/core/config/config_models.py†L30-L33】
orchestratorPipeConfigTop-Level Pipe (typisch ein Orchestrator), der von der Runtime ausgeführt wird. 【F:src/open_ticket_ai/core/config/config_models.py†L34-L36】

Infrastrukturkonfiguration

InfrastructureConfig stellt aktuell Logging-Konfiguration bereit und verwendet standardmäßig das integrierte Logging-Schema. 【F: src/open_ticket_ai/core/config/config_models.py†L10-L14】

Services-Dictionary (open_ticket_ai.services)

Alle Services teilen das gleiche Basisschema, weil sie Instanzen von InjectableConfigBase sind. Jeder Eintrag befindet sich unter dem services Dictionary und verwendet den Dictionary-Key als seinen Identifier. 【F: src/open_ticket_ai/core/config/config_models.py†L30-L43】

FeldTypBeschreibung
usestrRegistry-Identifier der Injectable-Implementierung, die instanziiert werden soll. Standardwert ist "otai_base:CompositePipe". 【F:src/open_ticket_ai/core/injectables/injectable_models.py†L9-L15】
injectsdict[str, str]Optionales Mapping von Constructor-Parameternamen zu anderen Service-Identifiers. So verbinden Sie ein Injectable mit einem anderen. 【F:src/open_ticket_ai/core/injectables/injectable_models.py†L16-L20】
paramsdict[str, Any]Beliebiges Konfigurationsobjekt, das als Keyword-Argumente zum Parameter-Model des Injectables übergeben wird. 【F:src/open_ticket_ai/core/injectables/injectable_models.py†L21-L25】

Wenn die Runtime Services materialisiert, wird der Dictionary-Key in das Model integriert, wodurch der Identifier für Dependency-Injection-Konsumenten verfügbar wird. 【F:src/open_ticket_ai/core/config/config_models.py†L39-L43】

Wie Registry-Identifiers gebaut werden

Plugins leiten Registry-Identifiers von ihrem Modulnamen ab. Jedes Plugin beginnt mit dem Prefix otai-; die Runtime entfernt diesen Prefix und konkateniert den Rest mit dem Injectable-Klassennamen mit :. Beispielsweise, das otai_base Plugin liefert Identifier wie base:CompositePipe. 【F:src/open_ticket_ai/core/config/app_config.py†L16-L21】【F: src/open_ticket_ai/core/plugins/plugin.py†L18-L46】

Orchestrator und PipeConfig

Pipelines werden mit PipeConfig beschrieben, welches das gleiche Basis-Injectable-Schema mit einem id Feld erweitert, zusätzliche Keys verbietet und alle Werte immutable für konsistentes Hashing behält. 【F: src/open_ticket_ai/core/pipes/pipe_models.py†L9-L15】 Jede Pipe liefert ein PipeResult, das Erfolg, Skip, Fehler und jegliche strukturierte Daten für downstream Steps anzeigt. 【F:src/open_ticket_ai/core/pipes/pipe_models.py†L17-L68】

Aktualisiertes Konfigurationsbeispiel

Das folgende Snippet spiegelt die aktuelle OpenTicketAIConfig Struktur: Services sind durch Identifier gekennzeichnet, und der Orchestrator ist ein PipeConfig, das verschachtelte Pipes und Triggers rendert.

open_ticket_ai:
  api_version: '1'
  plugins:
    - otai_base
    - otai_hf_local
    - otai_otobo_znuny

  infrastructure:
    logging:
      version: 1
      root:
        level: INFO

  services:
    ticketing:
      use: 'otobo-znuny:OTOBOZnunyTicketSystemService'
      params:
        base_url: '${OTOBO_BASE_URL}'
        username: '${OTOBO_USERNAME}'
        password: '${OTOBO_PASSWORD}'
    classifier:
      use: 'hf-local:HFClassificationService'
      params:
        api_token: '${HF_TOKEN}'
    renderer:
      use: 'base:JinjaRenderer'

  orchestrator:
    id: support-orchestrator
    use: 'base:SimpleSequentialOrchestrator'
    params:
      orchestrator_sleep: '0:00:05'
      exception_sleep: '0:01:00'
      steps:
        - id: ticket-runner
          use: 'base:SimpleSequentialRunner'
          params:
            on:
              id: every-minute
              use: 'base:IntervalTrigger'
              params:
                interval: '0:01:00'
            run:
              id: ticket-flow
              use: 'base:CompositePipe'
              params:
                steps:
                  - id: fetch
                    use: 'base:FetchTicketsPipe'
                    injects:
                      ticket_system: ticketing
                    params:
                      ticket_search_criteria:
                        queue:
                          id: Raw
                          name: Raw
                        limit: 1
                  - id: classify
                    use: 'base:ClassificationPipe'
                    injects:
                      classification_service: classifier
                    params:
                      text: "{{ get_pipe_result('fetch').data.fetched_tickets[0].body }}"
                      model_name: 'distilbert-base-uncased'
                  - id: respond
                    use: 'base:AddNotePipe'
                    injects:
                      ticket_system: ticketing
                    params:
                      ticket_id: "{{ get_pipe_result('fetch').data.fetched_tickets[0].id }}"
                      note:
                        subject: 'Classification result'
                        body: "{{ get_pipe_result('classify').data.label }}"

Kern-Injectables

Die Tabelle fasst die Kern-Injectables zusammen, die mit den Standard-Plugins geliefert werden. Folgen Sie den Links für Parameter- und Output-Details.

IdentifierPluginArtZusammenfassung
base:JinjaRendererotai_baseTemplate-RendererAsync Jinja-Renderer mit Helfern für Zugriff auf Pipe-Output. Details
base:SimpleSequentialOrchestratorotai_baseOrchestrator PipeDurchläuft Child-Pipes nach einem Schedule, retry bei Fehler. Details
base:SimpleSequentialRunnerotai_baseRunner PipeFührt eine run Pipe aus, wenn der on Trigger erfolgreich ist. Details
base:CompositePipeotai_baseComposite PipeEvaluiert verschachtelte Pipes in Sequenz und mergt ihre Ergebnisse. Details
base:ExpressionPipeotai_baseUtility PipeLiefert Literalwerte oder fails, wenn ein FailMarker produziert wird. Details
base:ClassificationPipeotai_baseAI PipeDelegiert zu einem ClassificationService und liefert den Model-Output. Details
base:IntervalTriggerotai_baseTrigger PipeEmittiert Erfolg, wenn das konfigurierte Interval abgelaufen ist. Details
base:FetchTicketsPipeotai_baseTicket PipeLädt Tickets via einem injected TicketSystemService. Details
base:UpdateTicketPipeotai_baseTicket PipeWendet Updates auf ein Ticket durch den injected Ticket-Service an. Details
base:AddNotePipeotai_baseTicket PipeFügt eine Note zu einem Ticket mit dem Ticket-Service hinzu. Details
hf-local:HFClassificationServiceotai_hf_localServiceHugging Face Text-Klassifikations-Client mit optionalem Auth-Token. Details
otobo-znuny:OTOBOZnunyTicketSystemServiceotai_otobo_znunyServiceAsync Ticket-Service basierend auf der OTOBO/Znuny API. Details

base:JinjaRenderer

  • Use: base:JinjaRenderer
  • Params: none (defaults to an empty StrictBaseModel). 【F: packages/otai_base/src/otai_base/template_renderers/jinja_renderer.py†L21-L38】
  • Behaviour: Rendert Strings, Listen und Dicts async mit Helper-Globals wie get_pipe_result und fail. 【F:packages/otai_base/src/otai_base/template_renderers/jinja_renderer.py†L29-L38】

base:SimpleSequentialOrchestrator

  • Use: base:SimpleSequentialOrchestrator
  • Params:
    • orchestrator_sleep (timedelta) – Wartezeit zwischen Cycles. 【F: packages/otai_base/src/otai_base/pipes/orchestrators/simple_sequential_orchestrator.py†L14-L18】
    • exception_sleep (timedelta) – Delay vor Retry nach einem Error. 【F: packages/otai_base/src/otai_base/pipes/orchestrators/simple_sequential_orchestrator.py†L14-L18】
    • always_retry (bool) – rethrow bei Fehler, wenn false. 【F: packages/otai_base/src/otai_base/pipes/orchestrators/simple_sequential_orchestrator.py†L14-L18】
    • steps (list[PipeConfig]) – verschachtelte Steps, die mit voller Template-Support gerendert werden. 【F: packages/otai_base/src/otai_base/pipes/orchestrators/simple_sequential_orchestrator.py†L14-L27】
  • Output: Läuft unendlich, liefert das aggregierte PipeResult aller Steps pro Cycle. Fehler respektieren always_retry. 【F:packages/otai_base/src/otai_base/pipes/orchestrators/simple_sequential_orchestrator.py†L24-L40】【F: src/open_ticket_ai/core/pipes/pipe_models.py†L36-L52】

base:SimpleSequentialRunner

  • Use: base:SimpleSequentialRunner
  • Params:
    • on (PipeConfig) – Trigger Pipe; der Runner überspringt Execution, wenn sie fails. 【F: packages/otai_base/src/otai_base/pipes/pipe_runners/simple_sequential_runner.py†L12-L36】
    • run (PipeConfig) – Pipe, die ausgeführt wird, wenn der Trigger erfolgreich ist. 【F: packages/otai_base/src/otai_base/pipes/pipe_runners/simple_sequential_runner.py†L12-L36】
  • Output: Liefert das downstream Pipe-Result oder ein skipped PipeResult mit einer diagnostischen Message. 【F: packages/otai_base/src/otai_base/pipes/pipe_runners/simple_sequential_runner.py†L26-L36】【F: src/open_ticket_ai/core/pipes/pipe_models.py†L17-L64】

base:CompositePipe

  • Use: base:CompositePipe
  • Params: steps – geordnete Liste von PipeConfig Definitionen. Extra Keys sind allowed, um custom Composite Implementations zu unterstützen. 【F:packages/otai_base/src/otai_base/pipes/composite_pipe.py†L11-L33】
  • Output: Führt jeden Step in Reihenfolge aus, stoppt beim ersten Fehler und mergt Daten von allen erfolgreichen Steps mit PipeResult.union. 【F:packages/otai_base/src/otai_base/pipes/composite_pipe.py†L29-L47】【F: src/open_ticket_ai/core/pipes/pipe_models.py†L36-L52】

base:ExpressionPipe

  • Use: base:ExpressionPipe
  • Params: expression – Literalwert oder gerendertes Expression-Result. 【F: packages/otai_base/src/otai_base/pipes/expression_pipe.py†L13-L18】
  • Output: Liefert PipeResult.success mit {"value": expression} außer wenn die Expression zu einem FailMarker evaluiert, dann fails. 【F:packages/otai_base/src/otai_base/pipes/expression_pipe†L21-L38】【F: src/open_ticket_ai/core/pipes/pipe_models.py†L59-L68】

base:ClassificationPipe

  • Use: base:ClassificationPipe
  • Injects: classification_service muss auf eine ClassificationService Implementation pointen.
  • Params:
    • text (str) – Content zu klassifizieren.
    • model_name (str) – Identifier, der zum Service forwarded wird.
    • api_token (str | None) – optionaler Token, der den Service-Default überschreibt. 【F: packages/otai_base/src/otai_base/pipes/classification_pipe.py†L19-L52】
  • Output: Erfolgreiche Results enthalten das vollständige ClassificationResult Payload (label, confidence, optional scores). 【F:packages/otai_base/src/otai_base/pipes/classification_pipe.py†L54-L63】

base:IntervalTrigger

  • Use: base:IntervalTrigger
  • Params: interval (timedelta) – erforderliche elapsed Zeit zwischen Erfolgen. 【F: packages/otai_base/src/otai_base/pipes/interval_trigger_pipe.py†L11-L28】
  • Output: Liefert Erfolg, wenn das Interval seit dem letzten Run elapsed ist; sonst liefert ein Failure-Result so downstream Runner Arbeit überspringen können. 【F:packages/otai_base/src/otai_base/pipes/interval_trigger_pipe.py†L21-L30】【F: src/open_ticket_ai/core/pipes/pipe_models.py†L17-L64】

base:FetchTicketsPipe

  • Use: base:FetchTicketsPipe
  • Injects: ticket_system muss zu einer TicketSystemService Implementation resolve. 【F: packages/otai_base/src/otai_base/ticket_system_integration/ticket_system_service.py†L1-L27】
  • Params: ticket_search_criteria beschreibt Queue, Limit und andere Filters. 【F: packages/otai_base/src/otai_base/pipes/ticket_system_pipes/fetch_tickets_pipe.py†L11-L26】
  • Output: Erfolg-Result mit data.fetched_tickets set to a list of UnifiedTicket records. 【F: packages/otai_base/src/otai_base/pipes/ticket_system_pipes/fetch_tickets_pipe.py†L20-L26】

base:UpdateTicketPipe

  • Use: base:UpdateTicketPipe
  • Injects: ticket_system (same as above).
  • Params:
    • ticket_id (str | int) – Ziel-Ticket-Identifier.
    • updated_ticket (UnifiedTicket) – Felder zu update. 【F: packages/otai_base/src/otai_base/pipes/ticket_system_pipes/update_ticket_pipe.py†L11-L28】
  • Output: Liefert Erfolg, wenn der Ticket-Service den Update bestätigt. 【F: packages/otai_base/src/otai_base/pipes/ticket_system_pipes/update_ticket_pipe.py†L21-L31】

base:AddNotePipe

  • Use: base:AddNotePipe
  • Injects: ticket_system.
  • Params:
    • ticket_id (str | int) – Ticket, das die Note empfängt.
    • note (UnifiedNote) – Subject/Body-Payload. 【F: packages/otai_base/src/otai_base/pipes/ticket_system_pipes/add_note_pipe.py†L13-L40】
  • Output: Liefert Erfolg nach Delegation zum Ticket-Service, um die Note anzuhängen. 【F: packages/otai_base/src/otai_base/pipes/ticket_system_pipes/add_note_pipe.py†L27-L40】

hf-local:HFClassificationService

  • Use: hf-local:HFClassificationService
  • Params: api_token (str | None) – Default Hugging Face Token, verwendet wenn Requests einen Token omit. 【F: packages/otai_hf_local/src/otai_hf_local/hf_classification_service.py†L105-L158】
  • Behaviour: Lädt lazy und cachet ein Hugging Face transformers pipeline, loggt in wenn ein Token provided ist, und stellt synchronous/asynchronous classification helpers bereit. 【F: packages/otai_hf_local/src/otai_hf_local/hf_classification_service.py†L34-L163】

otobo-znuny:OTOBOZnunyTicketSystemService

  • Use: otobo-znuny:OTOBOZnunyTicketSystemService
  • Params (RenderedOTOBOZnunyTSServiceParams):
    • base_url – OTOBO/Znuny Endpoint Base URL.
    • username / password – Credentials für den konfigurierten Web-Service.
    • webservice_name – optionaler Service-Name-Override (defaults to OpenTicketAI).
    • operation_urls – Mapping von Ticket-Operations zu relativen API-Paths. 【F: packages/otai_otobo_znuny/src/otai_otobo_znuny/models.py†L44-L76】
  • Behaviour: Erstellt und loggt in einen OTOBOZnunyClient, dann implementiert das TicketSystemService Interface für Searching, Retrieving, Updating und Annotating Tickets. 【F: packages/otai_otobo_znuny/src/otai_otobo_znuny/oto_znuny_ts_service.py†L21-L135】