|
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 |
|
''' |
|
|
|
|
|
if not os.getenv("HF_ACTIVE"): |
|
|
|
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 |
|
|