Klix
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
Choicebeeinflussen wederScore- nochFlag-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.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| klix_engine-0.1.1.tar.gz | 128.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| klix_engine-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 138.2 kB
Release files / klix_engine-0.1.1.tar.gz
| Download URL | klix_engine-0.1.1.tar.gz |
|---|---|
| Size | 128.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7093c8d068d8edd514fc30a66a93b1b30274a187c43aa016c996aae488ca9793
|
|
BLAKE2b-256 checksum How to use checksums |
ef0cbda286a7f8092c2c7e2d5fdc146e5fc774e63d2be7600db194007f03da5b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / klix_engine-0.1.1-py3-none-any.whl
| Download URL | klix_engine-0.1.1-py3-none-any.whl |
|---|---|
| Size | 10.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e6072044098f38e8b48450cc4dbada077f4cfdc89920c5f53a45e8caf5166276
|
|
BLAKE2b-256 checksum How to use checksums |
ea2422f569a28f5a6151ecc2089a74d88203bb4537f7126280109975378ef6df
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|