API Reference¶
Automatisch aus den Docstrings generiert. Neue Module bitte hier als :::-Direktive eintragen.
qualdatan_core.facets¶
Registry¶
qualdatan_core.facets.registry ¶
Facet registry and discovery.
Drei Quellen werden unterstuetzt:
- In-Process-Registrierung ueber :func:
register_facet— fuer Tests und fuer Code, der Facets direkt instanziiert. - Python-Entry-Points unter Gruppe
qualdatan.facet_types(registriert man via[project.entry-points."qualdatan.facet_types"]inpyproject.toml) — fuer Plugin-Pakete, die neue Typen von Facets einbringen (z.B. einenGraphFacet). - Bundle-YAMLs ueber :class:
qualdatan_core.facets.loader.YamlFacetLoader— fuer deklarative Facets, die sich auf vorhandene Typen stuetzen (siehetypes.py: TaxonomyFacet, EvidenceFacet, ...). Bundles bringen keine eigenen Typen mit, sondern liefern Konfigurationen der mitgelieferten Typen plus eigener Codes/Prompts.
register_facet ¶
Registriert einen Facet im Process-globalen Index.
Source code in src/qualdatan_core/facets/registry.py
unregister_facet ¶
get_facet ¶
list_facets ¶
clear_registry ¶
discovered_facet_types ¶
Sammelt registrierte Facet-Typen aus Entry-Points + Built-ins.
Built-ins (TaxonomyFacet, ...) werden durch types.builtin_facet_types
geliefert; Drittpakete koennen weitere Typen via Entry-Point hinzufuegen.
Source code in src/qualdatan_core/facets/registry.py
register_facets ¶
Base¶
qualdatan_core.facets.base ¶
Facet protocol — domain-agnostic building block for qualdatan analyses.
Ein Facet ist ein konfigurierbarer Analyse-Baustein: es bekommt Material (Text / PDF-Text / PDF-Visual / Image), produziert ein Prompt fuer einen LLM und parsed die Antwort zu einer Liste von Kodierungen.
Facets sind selbst inhaltsfrei — die konkrete Taxonomie / Evidenz-Skala / Codeliste kommt aus dem Bundle, das den Facet instanziiert. So funktioniert derselbe Facet-Code fuer "IFC-Bauelemente" wie fuer "ICD-10-Diagnosen" oder "BPMN-Akteursrollen".
Material ¶
Bases: str, Enum
Materialart, die ein Facet konsumieren kann.
CodeContribution
dataclass
¶
Ein Code, den ein Facet ins Codebook einbringt.
id ist die ID innerhalb des Bundle-Namespaces (z.B. IFC-WALL).
Die Bundle-ID + Facet-ID praefixiert das Code-Owner-System bei Bedarf.
FacetContext
dataclass
¶
FacetContext(material, material_kind, source_label='', metadata=dict(), model=None, max_tokens=None)
Kontext, den der Orchestrator beim Aufruf eines Facets liefert.
Types¶
qualdatan_core.facets.types ¶
Built-in Facet types (declarative, configured via YAML).
Diese Klassen sind das, was Bundles benutzen, um eigene Domaenen zu
beschreiben — z.B. IFC-Bauelemente als TaxonomyFacet mit der
IFC-Klassen-Liste als Choices, LOG-Evidenz als EvidenceFacet mit
einer 5-stufigen Skala.
Alle Typen erfuellen das :class:Facet-Protocol aus base.py. Sie sind
mit Absicht spezifisch genug, um wirklich nuetzlich zu sein, aber
generisch genug, um in beliebigen Domaenen zu funktionieren.
Der Code hier liefert nur die generischen Schemata und einen sehr einfachen,
heuristischen Default fuer build_prompt / parse_response. Bundles
koennen Prompt-Templates ueberschreiben (Feld prompt_template im YAML),
und Phase-D wird die Rohbausteine durch eine richtige LLM-Wrapper-Schicht
in qualdatan_core/llm ergaenzen.
TaxonomyFacet
dataclass
¶
TaxonomyFacet(id, label, input_kinds, codebook_contribution, description='', prompt_template='Klassifiziere folgendes Material gegen die Taxonomie \'{label}\'.\nErlaubte Codes: {codes_csv}\n\nMaterial:\n{material}\n\nAntworte als JSON-Liste von Objekten {{"code_id": "…", "text": "…", "char_start": int, "char_end": int}}.')
Wandelt Material in Kodierungen anhand einer Taxonomie.
Beispiel: IFC-Klassen, ICD-10-Diagnosen, BPMN-Aktivitaetstypen.
EvidenceFacet
dataclass
¶
EvidenceFacet(id, label, input_kinds, codebook_contribution, description='', prompt_template='Bewerte Material auf der Skala \'{label}\'.\nStufen (von niedrig nach hoch): {codes_list}\n\nMaterial:\n{material}\n\nAntworte als JSON: {{"code_id": "…", "justification": "…"}}.')
Stuft Material auf einer ordinalen Skala ein (z.B. LOG-01..05).
ActorRoleFacet
dataclass
¶
ActorRoleFacet(id, label, input_kinds, codebook_contribution, description='', prompt_template='Identifiziere Akteure und ordne jedem eine Rolle aus \'{label}\' zu.\nVerfuegbare Rollen: {codes_csv}\n\nMaterial:\n{material}\n\nAntworte als JSON-Liste {{"code_id": "<rolle>", "text": "<akteur>", "char_start": int, "char_end": int}}.')
Findet Akteure im Material und ordnet sie Rollen zu.
ProcessStepFacet
dataclass
¶
ProcessStepFacet(id, label, input_kinds, codebook_contribution, description='', prompt_template='Identifiziere Prozessschritte aus \'{label}\' im Material und gib sie in der Reihenfolge ihres Auftretens zurueck.\nErlaubte Schritte: {codes_csv}\n\nMaterial:\n{material}\n\nAntworte als JSON-Liste {{"code_id": "…", "text": "<auszug>", "char_start": int, "char_end": int, "sequence": int}}.')
Zerlegt Material in eine Sequenz definierter Prozessschritte.
FreeCodingFacet
dataclass
¶
FreeCodingFacet(id, label, input_kinds, codebook_contribution=(), description='', prompt_template='Fuehre offene Kodierung am Material durch (Methode \'{label}\').\nBekannte Seed-Codes (optional, du darfst neue erfinden): {codes_csv}\n\nMaterial:\n{material}\n\nAntworte als JSON-Liste {{"code_id": "…", "code_label": "…", "text": "…", "char_start": int, "char_end": int}}.')
Offene Kodierung — Modell darf eigene Codes vergeben.
Optional kann ein Set an Seed-Codes mitgegeben werden, an dem das Modell sich orientieren soll.
builtin_facet_types ¶
Map type-Strings aus YAML auf die zugehoerigen Built-in-Klassen.
Source code in src/qualdatan_core/facets/types.py
Loader¶
qualdatan_core.facets.loader ¶
Load Facet instances from YAML files (bundle data).
YAML-Schema (Beispiel bim-basic/facets/ifc-elements.yaml):
id: ifc-elements
type: taxonomy
label: "IFC-Bauelemente"
description: "Klassifikation visuell erkennbarer Bauteile nach IfcClass."
input_kinds: [pdf_visual]
codes:
- { id: IFC-WALL, label: "Wand" }
- { id: IFC-SLAB, label: "Decke" }
prompt_template: |
...optional, sonst Default aus types.py...
Der Loader weiss, welche Typen es gibt, indem er :func:discovered_facet_types
fragt — das schliesst Built-ins und ueber Entry-Points registrierte Plugin-
Typen ein.
FacetLoadError ¶
Bases: ValueError
Fehler beim Laden eines Facet-YAML.
load_facet_from_dict ¶
Instanziiert einen Facet aus einer geparsten YAML-Mapping-Struktur.
Source code in src/qualdatan_core/facets/loader.py
load_facet_from_yaml ¶
Liest ein einzelnes Facet-YAML und instanziiert den Facet.
Source code in src/qualdatan_core/facets/loader.py
load_facets_from_dir ¶
Laedt alle *.yaml / *.yml aus einem Verzeichnis (rekursiv).
Source code in src/qualdatan_core/facets/loader.py
load_facets ¶
Laedt Facets aus einer Mischung von Dateien und Verzeichnissen.