This release is a pre-release and may not be stable for production use.
Linha Fina
linha-fina is an intent engine that adapts to changing reference data at
run time. It adds and removes intents dynamically, without a fixed training
pass over the whole intent set.
How it works:
- each intent is an independent SVM that classifies intent vs not-intent
- each intent uses the other intents' data as "not-intent" training data
- only the most relevant negative samples are used for training, ranked by token_set_ratio
- features are one-hot-encoded keyword vectors
- entity extraction from templates uses simplematch
- entity extraction from wordlists optionally uses Aho-Corasick
Limitations:
- long warm-up time (training happens on first inference)
- does not scale well to a large number of intents
- does not take word position into account
- needs retraining whenever a new intent is added
See the docs for concepts, a quickstart, the full API reference, and tuning and troubleshooting guides.
Install
pip install linha-fina
Usage
from linha_fina.engine import IntentEngine
engine = IntentEngine()
intent_1 = ["hello world", "hey there", "hello"]
intent_2 = ["tell me a joke", "say a joke", "make me laugh"]
intent_3 = ["how is the weather", "what's the weather like",
"what is the weather outside"]
intent_4 = ["my name is {name}", "call me {name}"]
intent_5 = ["change the color to {color}",
"change light to {color}",
"set light to {color}}"]
engine.register_intent("hello", intent_1)
engine.register_intent("joke", intent_2)
engine.register_intent("weather", intent_3)
engine.register_intent("introduce", intent_4)
engine.register_intent("change_color", intent_5, entity_samples={"color": ["red", "blue"]})
# you can register more entity examples after intent creation
engine.register_entity("color", ["yellow", "green"], intent_name="color")
for s in ["hello earth",
"call me Casimiro",
"my name is Miro",
"tell me a joke",
"what is the weather",
"tell me a joke about the weather",
"red blue and green are my 3 favorite colors",
"red is my favorite color",
"light to blue",
"change to green",
"make color green"
]:
print(s)
print(engine.calc_intent(s))
# hello earth
# IntentMatch(name='hello', slots={}, conf=0.9728585833827678)
# call me Casimiro
# IntentMatch(name='introduce', slots=[{'name': 'Casimiro'}], conf=0.9236423200801248)
# my name is Miro
# IntentMatch(name='introduce', slots=[{'name': 'Miro'}], conf=0.9949282563482034)
# tell me a joke
# IntentMatch(name='joke', slots={}, conf=0.9728801357230902)
# what is the weather
# IntentMatch(name='weather', slots={}, conf=0.9427588770219081)
# tell me a joke about the weather
# IntentMatch(name='joke', slots={}, conf=0.9728801357230902)
# red blue and green are my 3 favorite colors
# IntentMatch(name='change_color', slots={'color': 'green'}, conf=0.9648410361539215)
# red is my favorite color
# IntentMatch(name='change_color', slots={'color': 'red'}, conf=0.9142220645436988)
# light to blue
# IntentMatch(name='change_color', slots={'color': 'blue'}, conf=0.9845866111672085)
# change to green
# IntentMatch(name='change_color', slots={'color': 'green'}, conf=0.9598265049335444)
# make color green
# IntentMatch(name='change_color', slots={'color': 'green'}, conf=0.9142364945872282)
Related projects
- OpenVoiceOS/ovos-intent-benchmark compares
linha-finaagainst other intent engines, including MycroftAI/padatious, the enginelinha-finais architecturally based on. - OpenVoiceOS/OVOS-plugin-manager defines the
opm.pipelineplugin interfacelinha-finaimplements.
Credits
Originally an experimental research project by TigreGóticoLda, polished and donated to OpenVoiceOS. Its modernization, integration into OpenVoiceOS, and intent benchmarking were funded by the NGI0 Commons Fund.
This project was funded through the NGI0 Commons Fund, a fund established by NLnet with financial support from the European Commission's Next Generation Internet programme, under the aegis of DG Communications Networks, Content and Technology under grant agreement No 101135429.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file linha_fina-0.4.1a2.tar.gz.
File metadata
- Download URL: linha_fina-0.4.1a2.tar.gz
- Upload date:
- Size: 37.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6557cd7e20d87732cc30f84ada38b2218b2da485e5137b3181aab084af22e5ea
|
|
| MD5 |
4ce8d5e620a8f06c7a7977dfadb118ff
|
|
| BLAKE2b-256 |
3004c57c9b7d111fc6344673788caa6cbc86df912e0ce7bcbcc8fe3669c9f797
|
File details
Details for the file linha_fina-0.4.1a2-py3-none-any.whl.
File metadata
- Download URL: linha_fina-0.4.1a2-py3-none-any.whl
- Upload date:
- Size: 27.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f4fe014be33d330c2434b1c398c3b2ed98d1b38ecbab62ab1e9e89f510625e9c
|
|
| MD5 |
bb38f7874cd7024ff36ac0537a0890d3
|
|
| BLAKE2b-256 |
7fabc353754c61ea1ebb54eef7b4723af88ad1ff5083cd0c1d70611d1c1f6891
|