from abc import ABC, abstractmethod from enum import Enum import os class ModelType(Enum): ''' Les différentes technos de models ''' MTOPENAI = 1 MTOLLAMA = 2 MTHUGGINGFACE = 3 MTMISTRAL = 4 MTHUGGINGFACEURL = 5 @classmethod def to_str(self, mt:int)->str: match mt: case 1: return "MTOPENAI" case 2: return "MTOLLAMA" case 3: return "MTHUGGINGFACE" case 4: return "MTMISTRAL" case _: return "UNKNOWN" class AModel(ABC): ''' Classe abstraite de base pour tous les models : Ollama en local OpenAI distant HuggingFace distant HuggingFace dans une app ... ''' @classmethod def load_env_variables(cls): ''' Gestion des tokens par variables d'environnement On utilise dotenv, sauf si la platforme est un space HuggingFace Dans ce cas les variables d'env sont déjà chargées ''' # HF_ACTIVE est une variable d'environnement créée dans les spaces HuggingFace # Elle sert à savoir que l'appli tourne dans un space if not os.getenv("HF_ACTIVE"): # Utilisation ailleurs que dans un space # load_dotenv ne passe pas dans un space HuggingFace from dotenv import load_dotenv load_dotenv() @abstractmethod def ask_llm(self, question:str)->str: pass @abstractmethod def create_vector(self, chunk:str)->list[float]: pass @abstractmethod def create_vectors(self, chunks:list[str])->list[list[float]]: pass def get_llm_name(self): return self.llm_name def set_llm_name(self, llm_name:str): self.llm_name = llm_name def get_feature_name(self): return self.feature_name def set_feature_name(self, feature_name:str): self.feature_name = feature_name def get_temperature(self): return self.temperature def set_temperature(self, temperature:float): self.temperature = temperature