Skip to content
Snippets Groups Projects
schema.py 1.72 KiB
Newer Older
  • Learn to ignore specific revisions
  • James Briggs's avatar
    James Briggs committed
    from enum import Enum
    
    from typing import List, Optional, Union, Any, Dict
    
    Kenny's avatar
    Kenny committed
    from pydantic.v1 import BaseModel
    
    Ismail Ashraq's avatar
    Ismail Ashraq committed
    
    
    James Briggs's avatar
    James Briggs committed
    class EncoderType(Enum):
    
        AZURE = "azure"
    
    James Briggs's avatar
    James Briggs committed
        COHERE = "cohere"
    
        OPENAI = "openai"
        BM25 = "bm25"
        TFIDF = "tfidf"
        FASTEMBED = "fastembed"
        HUGGINGFACE = "huggingface"
    
        MISTRAL = "mistral"
    
        VIT = "vit"
        CLIP = "clip"
    
    Kurtis Massey's avatar
    Kurtis Massey committed
        BEDROCK = "bedrock"
    
    James Briggs's avatar
    James Briggs committed
    
    
    Simonas's avatar
    Simonas committed
    
    
    class EncoderInfo(BaseModel):
        name: str
        token_limit: int
    
        threshold: Optional[float] = None
    
        name: Optional[str] = None
    
        function_call: Optional[List[Dict]] = None
    
    Simonas's avatar
    Simonas committed
        similarity_score: Optional[float] = None
    
    Ismail Ashraq's avatar
    Ismail Ashraq committed
    class Message(BaseModel):
        role: str
        content: str
    
    
        def to_openai(self):
    
    Ismail Ashraq's avatar
    Ismail Ashraq committed
            if self.role.lower() not in ["user", "assistant", "system"]:
                raise ValueError("Role must be either 'user', 'assistant' or 'system'")
            return {"role": self.role, "content": self.content}
    
    
        def to_cohere(self):
    
    Ismail Ashraq's avatar
    Ismail Ashraq committed
            return {"role": self.role, "message": self.content}
    
    
    Bogdan Buduroiu's avatar
    Bogdan Buduroiu committed
        def to_llamacpp(self):
            return {"role": self.role, "content": self.content}
    
    Siraj R Aizlewood's avatar
    Siraj R Aizlewood committed
    
    
        def to_mistral(self):
            return {"role": self.role, "content": self.content}
    
    
        def __str__(self):
            return f"{self.role}: {self.content}"
    
    Ismail Ashraq's avatar
    Ismail Ashraq committed
    
    
    class DocumentSplit(BaseModel):
    
        docs: List[Union[str, Any]]
    
        is_triggered: bool = False
    
        triggered_score: Optional[float] = None
    
    Simonas's avatar
    Simonas committed
        token_count: Optional[int] = None
    
        metadata: Optional[Dict] = None
    
    
        @property
        def content(self) -> str:
    
            return " ".join([doc if isinstance(doc, str) else "" for doc in self.docs])
    
    Anush008's avatar
    Anush008 committed
    
    
    class Metric(Enum):
        COSINE = "cosine"
        DOTPRODUCT = "dotproduct"
        EUCLIDEAN = "euclidean"
        MANHATTAN = "manhattan"