Lucie / src /amodel.py
Eric Marchand
First commit
98da9ec
raw
history blame
2.09 kB
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