File size: 3,469 Bytes
a844653
2bf7b09
3618620
2bf7b09
 
56205e9
152d4a2
1cc747b
56205e9
2bf7b09
a844653
1b071a4
152d4a2
a844653
 
 
152d4a2
a844653
 
 
 
47af0fc
 
12f5431
a844653
 
17d2ff9
12f5431
a844653
 
12f5431
a844653
 
12f5431
 
 
 
 
 
a844653
 
12f5431
17d2ff9
 
fb6e36a
a844653
12f5431
 
 
 
 
 
a844653
 
 
 
 
 
 
 
3618620
a844653
 
 
 
 
 
 
1b071a4
a844653
 
 
 
 
 
3618620
a844653
 
17d2ff9
a844653
12f5431
a844653
 
 
 
 
 
3618620
a844653
 
 
 
 
 
12f5431
a844653
 
152d4a2
2bf7b09
 
 
 
 
 
 
 
6066e39
12f5431
2bf7b09
 
419ab5e
2bf7b09
f04979d
e00c1d6
f19d93a
 
 
 
 
 
 
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
import logging
import os
from typing import Union, Optional, SupportsIndex

import requests
from fastapi import FastAPI
from llama_cpp import Llama

app = FastAPI()
TELEGRAM_TOKEN = os.getenv('TELEGRAM_TOKEN')
CHAT_TEMPLATE = '<|system|> {system_prompt}<|end|><|user|> {prompt}<|end|><|assistant|>'.strip()
SYSTEM_PROMPT = '{prompt}'

logging.basicConfig(
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
    level=logging.INFO
)
logger = logging.getLogger(__name__)

logger.info("Запускаемся... 🥳🥳🥳")

REPO_ID = "Vikhrmodels/Vikhr-Qwen-2.5-1.5B-Instruct-GGUF"
FILENAME = "Vikhr-Qwen-2.5-1.5b-Instruct-Q8_0.gguf",

# Инициализация модели
try:
    logger.info(f"Загрузка модели {FILENAME}...")

    # загрузка модели для локального хранилища
    # llm = Llama(
    #     model_path=f"./models/{model_name}.gguf",
    #     verbose=False,
    #     n_gpu_layers=-1,
    #     n_ctx=1512,
    #     temperature=0.3,
    #     num_return_sequences=1,
    #     no_repeat_ngram_size=2,
    #     top_k=50,
    #     top_p=0.95,
    # )

    # if not llm:
    LLM = Llama.from_pretrained(
        repo_id=REPO_ID,
        filename='Vikhr-Qwen-2.5-1.5b-Instruct-Q8_0.gguf',
        n_gpu_layers=-1,
        n_ctx=1512,
        temperature=0.3,
        num_return_sequences=1,
        no_repeat_ngram_size=2,
        top_k=50,
        top_p=0.95,
    )

except Exception as e:
    logger.error(f"Ошибка загрузки модели: {str(e)}")
    raise


# составление промта для модели
def create_prompt(text: str) -> Union[str, None]:
    try:
        user_input = text
        logger.info(f"Получено сообщение: {user_input}")


        # Генерация шаблона
        return CHAT_TEMPLATE.format(
            system_prompt=SYSTEM_PROMPT.format(promt='Ответ должен быть точным, кратким и с юмором.'),
            prompt=user_input,
        )
    except Exception as e:
        logger.error(e)


def generate_response(prompt: str) -> Optional[str]:
    try:
        # Обработка текстового сообщения
        output = LLM(
            prompt,
            max_tokens=64,
            stop=["<|end|>"],
        )

        logger.info('Output:')
        logger.info(output)

        response = output['choices'][0]['text']

        # Отправка ответа
        if response:
            return response

        return 'Произошла ошибка при обработке запроса'

    except Exception as e:
        logger.error(f"Ошибка обработки сообщения: {str(e)}")

def send_to_telegram(message):
    url = f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage"
    payload = {
        "chat_id": '719751843',
        "text": message
    }
    response = requests.post(url, json=payload)
    return "Сообщение отправлено!" if response.ok else "Ошибка!"


@app.get("/")
async def root():
    send_to_telegram('aaaaaaaaaaa')
    return {"message": "Hello World"}

@app.post("/webhook")
async def predict(response):
    # Генерация ответа с помощью модели
    logger.info('post/webhook -> response:')
    logger.info(response)
    # prompt = create_prompt(text)
    # response = generate_response(prompt)
    return {"response": response}