Skip to main content

Klix

PyPI version Python License: MIT

Entkoppelte Entscheidungs-Köpfe auf einem geteilten semantischen Backbone. Ein Text geht genau einmal durch das Embedding-Modell (Dense + Sparse), beliebig viele Köpfe (Choice, Score, Flag) arbeiten anschließend auf den vorberechneten Vektoren – jeder in seinem eigenen mathematischen Raum. Kein Modelltraining, keine Slot-Limits, vollständig offline und CPU-only.

Architektur

Text ──► HybridBackbone (FastEmbed-Dense + TF-IDF-Sparse, einmalig ~10 ms)
              │
              ├──► Choice   (Routing/Klassifikation: Max-Similarity + Keyword-Boost)
              ├──► Score    (kontinuierliche Achse: Low/High-Anker + Sigmoid)
              ├──► Flag     (Boolesch: 2/3-Klassen-Softmax mit Temperatur)
              └──► eigene Köpfe (von BaseHead erben)
  • Shared Backbone: Der Text wird einmal embedding + einmal TF-IDF transformiert. 3 Köpfe oder 50 Köpfe – die Extraktionskosten bleiben gleich.
  • Entkoppelte Köpfe: Neue Optionen in einem Choice beeinflussen weder Score- noch Flag-Ergebnisse. Jeder Kopf kapselt seine eigene Logik.
  • Deklarativ: Nur Schemata mit Beispielsätzen definieren, compile(), fertig.

Installation

uv add klix-engine
# oder
pip install klix-engine

Beim ersten Aufruf lädt FastEmbed das Modell paraphrase-multilingual-MiniLM-L12-v2 (~120 MB, einmalig, danach lokal gecacht). Danach läuft alles offline.

Schnellstart

from klix import DecisionEngine, Choice, Score, Flag

engine = DecisionEngine()

engine.add_head(
    Choice(
        name="target",
        options={
            "it_ops": ["VPN abgerissen", "Server down", "Rechner bootet nicht"],
            "ot_plant": ["Roboterzelle steht", "SPS Fehler", "Taktzeit deviation"],
            "finance": ["KST 4210 über Budget", "Rechnung freigeben"],
            "facility": ["Öllache Halle 2", "Heizung defekt"],
        },
    )
)

engine.add_head(
    Score(
        name="urgency",
        low_anchors=["Routine-Wartung", "Informelle Frage"],
        high_anchors=["Notfall sofort", "Produktionsstillstand", "Akute Gefahr"],
        min_val=0.0,
        max_val=3.0,
    )
)

engine.add_head(
    Flag(
        name="is_security",
        true_anchors=["Hackerangriff", "Ransomware Befall", "Datenabfluss"],
        false_anchors=["Hardware kaputt", "Netzwerkstörung", "Alltägliche Anfrage"],
        threshold=0.5,
    )
)

engine.compile()

res = engine.decide("plc-34 meldet fehler, förderband steht sofort!")

print(res)                                   # <DecisionResult (11 ms): target=ot_plant, urgency=2.9, is_security=False>
print(res.target)                            # 'ot_plant'
print(res.urgency)                           # 2.87
print(res.is_security)                       # False
print(res.details("is_security"))            # {'value': False, 'probability': 0.03}

Eigene Köpfe

Von BaseHead erben und evaluate(encoded) implementieren:

import re
from klix import BaseHead

class RegExExtractionHead(BaseHead):
    def __init__(self, name: str, pattern: str):
        super().__init__(name)
        self.re = re.compile(pattern)

    def get_reference_texts(self) -> list[str]:
        return []  # keine Referenztexte nötig

    def fit(self, backbone) -> None:
        pass

    def evaluate(self, encoded) -> dict:
        match = self.re.search(encoded.text)
        return {"value": match.group(0) if match else None}

Entwicklung

uv sync          # Abhängigkeiten installieren
uv run pytest    # Tests
uv run python examples/demo.py
uv build         # PyPI-Artefakte (wheel + sdist) nach dist/
uv publish       # Hochladen (erfordert Token/Account)

Lizenz

MIT

Release files for klix-engine 0.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for klix-engine 0.1.2
File Size Uploaded
klix_engine-0.1.2.tar.gz 128.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for klix-engine 0.1.2
File Interpreter ABI Platform
klix_engine-0.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 138.1 kB

Release files / klix_engine-0.1.2.tar.gz

Download URL klix_engine-0.1.2.tar.gz
Size 128.0 kB
Tags Source
SHA-256 checksum
How to use checksums
4db3a77fcc7d341f89d9a24b947c0a3338dd05232711477f9ca2e54abc1b3a8f
BLAKE2b-256 checksum
How to use checksums
01919005df16b44d43bd01c3171e30e80a1d676e8739982c1cfa7b583fe35241
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / klix_engine-0.1.2-py3-none-any.whl

Download URL klix_engine-0.1.2-py3-none-any.whl
Size 10.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f40d8ff8829fe5a97c661817cc83e19a403a4995e7121eaa99f3df03a34c612c
BLAKE2b-256 checksum
How to use checksums
d5e37ebf893580fc8b5f86ef7b368bb0d7632ba2b1e5675a9e8fe5f825b832b4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

0.8.3

2 release files

0.8.2

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.2

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

This release

0.1.2 This release

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page