Skip to content
Snippets Groups Projects
schema.py 2.35 KiB
Newer Older
  • Learn to ignore specific revisions
  • James Briggs's avatar
    James Briggs committed
    from datetime import datetime
    
    James Briggs's avatar
    James Briggs committed
    from enum import Enum
    
    from typing import List, Optional, Union, Any, Dict
    
    James Briggs's avatar
    James Briggs committed
    from pydantic.v1 import BaseModel, Field
    
    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])
    
    James Briggs's avatar
    James Briggs committed
    
    
    James Briggs's avatar
    James Briggs committed
    class ConfigParameter(BaseModel):
        field: str
        value: str
    
    James Briggs's avatar
    James Briggs committed
        namespace: Optional[str] = None
    
    James Briggs's avatar
    James Briggs committed
        created_at: str = Field(default_factory=lambda: datetime.utcnow().isoformat())
    
        def to_pinecone(self, dimensions: int):
    
    James Briggs's avatar
    James Briggs committed
            if self.namespace is None:
                namespace = ""
    
    James Briggs's avatar
    James Briggs committed
            return {
    
    James Briggs's avatar
    James Briggs committed
                "id": f"{self.field}#{namespace}",
    
    James Briggs's avatar
    James Briggs committed
                "values": [0.1] * dimensions,
                "metadata": {
                    "value": self.value,
                    "created_at": self.created_at,
    
    James Briggs's avatar
    James Briggs committed
                    "namespace": namespace,
    
    James Briggs's avatar
    James Briggs committed
                    "field": self.field,
                },
            }
    
    James Briggs's avatar
    James Briggs committed
    
    
    Anush008's avatar
    Anush008 committed
    class Metric(Enum):
        COSINE = "cosine"
        DOTPRODUCT = "dotproduct"
        EUCLIDEAN = "euclidean"
        MANHATTAN = "manhattan"