| import os |
| from .amodel import AModel |
| from huggingface_hub import InferenceClient |
| import numpy as np |
|
|
|
|
| class HuggingFaceModel(AModel): |
| |
| def __init__(self, llm_name:str, feature_name:str, temperature:float=0.0): |
| self.llm_name:str = llm_name |
| self.feature_name:str = feature_name |
| self.temperature = temperature |
| api_token = os.getenv("HUGGINGFACEHUB_API_TOKEN") |
| try: |
| self.model = InferenceClient(api_key=api_token) |
| except: |
| raise |
|
|
| def ask_llm(self, question:str)->str: |
| messages = [{"role": "user", "content": question}] |
| try: |
| resp = self.model.chat.completions.create( |
| model=self.llm_name, |
| messages=messages, |
| max_tokens=2048, |
| temperature=self.temperature, |
| |
| ) |
| return resp.choices[0].message.content |
| except: |
| raise |
|
|
| def create_vector(self, chunk:str)->list[float]: |
| try: |
| resp = self.model.feature_extraction( |
| text=chunk, |
| |
| model=self.feature_name, |
| ) |
| if isinstance(resp, np.ndarray): |
| return resp |
| else: |
| raise Exception("Error with embedding !") |
| except: |
| raise |
| |
| def create_vectors(self, chunks:list[str])->list[list[float]]: |
| ''' |
| Pas de batch pour la création de vectors sur HuggingFace, on les passe un par un |
| ''' |
| vectors = [] |
| try: |
| for chunk in chunks: |
| v = self.create_vector(chunk) |
| if not isinstance(v, np.ndarray): |
| raise |
| vectors.append(v.tolist()) |
| return vectors |
| except: |
| raise |