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.2
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.2.tar.gz | 128.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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
|