Skip to main content

Linha Fina

A IntentEngine that dynamically accounts for changing reference data at runtime. Add/remove intents dynamically

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 most relevant negative samples are used for training (calculated via token_set_ratio)
  • features are just one-hot-encoded keyword vectors
  • entity extraction from templates via simplematch
  • entity extraction based on wordlists, optionally via aho-corasick

Limitations:

  • long warm up time (training happens on first inference)
  • doesn't scale well to a large number of intents
  • does not take word position into account
  • needs retraining whenever a new intent is added

img.png

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)

Metadata

Release files for linha-fina 0.1.0

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

Source distribution (sdist)

Source distribution for linha-fina 0.1.0
File Size Uploaded
linha_fina-0.1.0.tar.gz 29.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for linha-fina 0.1.0
File Interpreter ABI Platform
linha_fina-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 49.9 kB

Release files / linha_fina-0.1.0.tar.gz

Download URL linha_fina-0.1.0.tar.gz
Size 29.4 kB
Tags Source
SHA-256 checksum
How to use checksums
90a2a3d253b320544c1b6c2ac35cf8fa129a16588b879547b5e27e7e21eeb92a
BLAKE2b-256 checksum
How to use checksums
cf6bef0198efe6b2b591155d42138ba3c8d45f4ecc01f2319c154a324a34fb5e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / linha_fina-0.1.0-py3-none-any.whl

Download URL linha_fina-0.1.0-py3-none-any.whl
Size 20.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2d6ee39d04ba5a0611c86723fae98f74dda8cea6802aaf2afeaa936840508fb0
BLAKE2b-256 checksum
How to use checksums
73e459b7344a180b22f2db4305d8699eb9a3f2b1c2cdafbed946c1b9acad4ed6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12
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