File size: 1,165 Bytes
42fa16e
54f6dae
 
 
 
42fa16e
54f6dae
 
 
 
 
42fa16e
54f6dae
 
 
 
42fa16e
 
 
54f6dae
 
42fa16e
 
 
54f6dae
 
 
42fa16e
54f6dae
 
 
42fa16e
54f6dae
 
 
 
 
 
 
 
42fa16e
54f6dae
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import asyncio

from huggingface_hub import hf_hub_download
from llama_cpp import Llama

from src.core.config import settings


class ModelEngine:
    def __init__(self):
        self.llm = None
        self.lock = asyncio.Lock()
        self._load_model()

    def _load_model(self):
        try:
            model_path = hf_hub_download(
                repo_id=settings.REPO_ID, filename=settings.FILENAME
            )
            self.llm = Llama(
                model_path=model_path,
                n_ctx=settings.CONTEXT_SIZE,
                n_threads=settings.N_THREADS,
                n_gpu_layers=settings.N_GPU_LAYERS,
                verbose=True,
            )
        except Exception as e:
            print(f"Error loading model: {e}")

    def generate(self, messages, max_tokens, temperature, stream=True):
        if not self.llm:
            raise RuntimeError("Model not loaded")
        return self.llm.create_chat_completion(
            messages=messages,
            max_tokens=int(max_tokens),
            temperature=float(temperature),
            stream=stream,
        )


# Создаем синглтон
engine = ModelEngine()