Skip to content
Snippets Groups Projects
schema.py 1.25 KiB
Newer Older
  • Learn to ignore specific revisions
  • James Briggs's avatar
    James Briggs committed
    from enum import Enum
    
    Simonas's avatar
    Simonas committed
    
    
    James Briggs's avatar
    James Briggs committed
    from pydantic import BaseModel
    from pydantic.dataclasses import dataclass
    
    Simonas's avatar
    Simonas committed
    
    
    from semantic_router.retrievers import (
        BaseRetriever,
        CohereRetriever,
        OpenAIRetriever,
    
    James Briggs's avatar
    James Briggs committed
    )
    
    
    class Decision(BaseModel):
        name: str
        utterances: list[str]
        description: str | None = None
    
    
    Simonas's avatar
    Simonas committed
    
    
    James Briggs's avatar
    James Briggs committed
        HUGGINGFACE = "huggingface"
        OPENAI = "openai"
        COHERE = "cohere"
    
    
    Simonas's avatar
    Simonas committed
    
    
    James Briggs's avatar
    James Briggs committed
    @dataclass
    
    class Retriever:
        type: RetrieverType
    
    James Briggs's avatar
    James Briggs committed
        name: str
    
    James Briggs's avatar
    James Briggs committed
    
        def __init__(self, type: str, name: str):
    
            self.type = RetrieverType(type)
    
    James Briggs's avatar
    James Briggs committed
            self.name = name
    
            if self.type == RetrieverType.HUGGINGFACE:
    
                raise NotImplementedError
    
            elif self.type == RetrieverType.OPENAI:
                self.model = OpenAIRetriever(name)
            elif self.type == RetrieverType.COHERE:
                self.model = CohereRetriever(name)
    
    James Briggs's avatar
    James Briggs committed
    
        def __call__(self, texts: list[str]) -> list[float]:
            return self.model(texts)
    
    
    Simonas's avatar
    Simonas committed
    
    
    James Briggs's avatar
    James Briggs committed
    @dataclass
    class SemanticSpace:
        id: str
        decisions: list[Decision]
        encoder: str = ""
    
        def __init__(self, decisions: list[Decision] = []):
            self.id = ""
            self.decisions = decisions
    
        def add(self, decision: Decision):
    
    Simonas's avatar
    Simonas committed
            self.decisions.append(decision)