Skip to content
Snippets Groups Projects
Select Git revision
  • 15195b91be1f45d3b2a1c9830a145111d9b1dc5f
  • main default
  • semantic-router/pinecone-v7
  • josh/pytest-deps
  • josh/semantic-router/pineconeindex/adelete_index
  • james/dagger-ci
  • josh/semantic/sparse-sentence-encoders
  • josh/semantic/sentence-transformer-support
  • josh/semantic-router/delay-unit-tests/fix
  • james/v0.1.10
  • josh/semantic-router/local-index/metadata
  • josh/semantic-router/upgrade-urllib3-
  • josh/docs/semantic-router-guardrails
  • josh/qdrant/duplication-bug
  • josh/postgres/async-methods
  • arkadiy-telegin/pinecone-async-init
  • josh/semantic-router/pine/adelete
  • josh/semantic/pinecone/adelete
  • josh/adelete
  • james/organize-testing
  • josh/postgres/psycopg-update
  • v0.1.11
  • v0.1.10
  • v0.1.9
  • v0.1.8
  • v0.1.7
  • v0.1.6
  • v0.1.5
  • v0.1.4
  • v0.1.3
  • v0.1.2
  • v0.1.1
  • v0.1.0
  • v0.1.0.dev10
  • v0.1.0.dev9
  • v0.1.0.dev8
  • v0.1.0.dev7
  • v0.1.0.dev6
  • v0.1.0.dev5
  • v0.1.0.dev4
  • v0.1.0.dev3
41 results

semantic-router

  • Open with
  • Download source code
  • user avatar
    James Briggs authored and GitHub committed
    fix: release workflow
    15195b91
    History

    Semantic Router

    PyPI - Python Version GitHub Contributors GitHub Last Commit GitHub Issues GitHub Pull Requests Github License

    Semantic Router is a superfast decision-making layer for your LLMs and agents. Rather than waiting for slow LLM generations to make tool-use decisions, we use the magic of semantic vector space to make those decisions — routing our requests using semantic meaning.

    Read the Docs


    Quickstart

    To get started with semantic-router we install it like so:

    pip install -qU semantic-router

    If wanting to use a fully local version of semantic router you can use HuggingFaceEncoder and LlamaCppLLM (pip install -qU "semantic-router[local]", see here). To use the HybridRouteLayer you must pip install -qU "semantic-router[hybrid]".

    We begin by defining a set of Route objects. These are the decision paths that the semantic router can decide to use, let's try two simple routes for now — one for talk on politics and another for chitchat:

    from semantic_router import Route
    
    # we could use this as a guide for our chatbot to avoid political conversations
    politics = Route(
        name="politics",
        utterances=[
            "isn't politics the best thing ever",
            "why don't you tell me about your political opinions",
            "don't you just love the president",
            "they're going to destroy this country!",
            "they will save the country!",
        ],
    )
    
    # this could be used as an indicator to our chatbot to switch to a more
    # conversational prompt
    chitchat = Route(
        name="chitchat",
        utterances=[
            "how's the weather today?",
            "how are things going?",
            "lovely weather today",
            "the weather is horrendous",
            "let's go to the chippy",
        ],
    )
    
    # we place both of our decisions together into single list
    routes = [politics, chitchat]

    We have our routes ready, now we initialize an embedding / encoder model. We currently support a CohereEncoder and OpenAIEncoder — more encoders will be added soon. To initialize them we do:

    import os
    from semantic_router.encoders import CohereEncoder, OpenAIEncoder
    
    # for Cohere
    os.environ["COHERE_API_KEY"] = "<YOUR_API_KEY>"
    encoder = CohereEncoder()
    
    # or for OpenAI
    os.environ["OPENAI_API_KEY"] = "<YOUR_API_KEY>"
    encoder = OpenAIEncoder()

    With our routes and encoder defined we now create a RouteLayer. The route layer handles our semantic decision making.

    from semantic_router.routers import SemanticRouter
    
    rl = SemanticRouter(encoder=encoder, routes=routes, auto_sync="local")

    We can now use our route layer to make super fast decisions based on user queries. Let's try with two queries that should trigger our route decisions:

    rl("don't you love politics?").name
    [Out]: 'politics'

    Correct decision, let's try another:

    rl("how's the weather today?").name
    [Out]: 'chitchat'

    We get both decisions correct! Now lets try sending an unrelated query:

    rl("I'm interested in learning about llama 2").name
    [Out]:

    In this case, no decision could be made as we had no matches — so our route layer returned None!

    Integrations

    The encoders of semantic router include easy-to-use integrations with Cohere, OpenAI, Hugging Face, FastEmbed, and more — we even support multi-modality!.

    Our utterance vector space also integrates with Pinecone and Qdrant!


    📚 Resources

    Docs

    Notebook Description
    Introduction Introduction to Semantic Router and static routes
    Dynamic Routes Dynamic routes for parameter generation and functionc calls
    Save/Load Layers How to save and load RouteLayer from file
    LangChain Integration How to integrate Semantic Router with LangChain Agents
    Local Execution Fully local Semantic Router with dynamic routes — local models such as Mistral 7B outperform GPT-3.5 in most tests
    Route Optimization How to train route layer thresholds to optimize performance
    Multi-Modal Routes Using multi-modal routes to identify Shrek vs. not-Shrek pictures

    Online Course

    Semantic Router Course

    Community