Aleksandr Maiorov commited on
Commit
a9daaf3
·
1 Parent(s): cc178d7

- add bot.py

Files changed (2) hide show
  1. app.py +28 -26
  2. bot.py +41 -0
app.py CHANGED
@@ -1,15 +1,15 @@
 
1
  import logging
2
- import os
3
  from typing import Union, Optional, SupportsIndex
4
-
5
- import requests
6
  from fastapi import FastAPI
7
  from llama_cpp import Llama
8
 
 
 
9
  app = FastAPI()
10
- TELEGRAM_TOKEN = os.getenv('TELEGRAM_TOKEN')
11
  CHAT_TEMPLATE = '<|system|> {system_prompt}<|end|><|user|> {prompt}<|end|><|assistant|>'.strip()
12
- SYSTEM_PROMPT = '{prompt}'
13
 
14
  logging.basicConfig(
15
  format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
@@ -20,11 +20,11 @@ logger = logging.getLogger(__name__)
20
  logger.info("Запускаемся... 🥳🥳🥳")
21
 
22
  REPO_ID = "Vikhrmodels/Vikhr-Qwen-2.5-1.5B-Instruct-GGUF"
23
- FILENAME = "Vikhr-Qwen-2.5-1.5b-Instruct-Q8_0.gguf",
24
 
25
  # Инициализация модели
26
  try:
27
- logger.info(f"Загрузка модели {FILENAME}...")
28
 
29
  # загрузка модели для локального хранилища
30
  # llm = Llama(
@@ -66,7 +66,7 @@ def create_prompt(text: str) -> Union[str, None]:
66
 
67
  # Генерация шаблона
68
  return CHAT_TEMPLATE.format(
69
- system_prompt=SYSTEM_PROMPT.format(promt='Ответ должен быть точным, кратким и с юмором.'),
70
  prompt=user_input,
71
  )
72
  except Exception as e:
@@ -96,26 +96,28 @@ def generate_response(prompt: str) -> Optional[str]:
96
  except Exception as e:
97
  logger.error(f"Ошибка обработки сообщения: {str(e)}")
98
 
99
- async def send_to_telegram(message):
100
- url = f"https://api.telegram.org/bot7517190315:AAE4TAhZm4ybTEPGe_KOYajFxHttNOqUtaY/sendMessage"
101
- payload = {
102
- "chat_id": '719751843',
103
- "text": message
104
- }
105
- response = requests.post(url, json=payload)
106
- return "Сообщение отправлено!" if response.ok else "Ошибка!"
107
-
108
 
109
  @app.get("/")
110
- async def root():
111
- await send_to_telegram('aaaaaaaaaaa')
112
- return {"message": "Hello World"}
113
 
114
- @app.post("/webhook")
115
- async def predict(response):
116
  # Генерация ответа с помощью модели
117
- logger.info('post/webhook -> response:')
118
- logger.info(response)
119
- # prompt = create_prompt(text)
120
- # response = generate_response(prompt)
 
 
 
 
 
 
 
121
  return {"response": response}
 
 
 
 
 
 
1
+ import asyncio
2
  import logging
 
3
  from typing import Union, Optional, SupportsIndex
 
 
4
  from fastapi import FastAPI
5
  from llama_cpp import Llama
6
 
7
+ from bot import start_bot
8
+
9
  app = FastAPI()
10
+
11
  CHAT_TEMPLATE = '<|system|> {system_prompt}<|end|><|user|> {prompt}<|end|><|assistant|>'.strip()
12
+ SYSTEM_PROMPT = ''
13
 
14
  logging.basicConfig(
15
  format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
 
20
  logger.info("Запускаемся... 🥳🥳🥳")
21
 
22
  REPO_ID = "Vikhrmodels/Vikhr-Qwen-2.5-1.5B-Instruct-GGUF"
23
+ FILE_NAME = "Vikhr-Qwen-2.5-1.5b-Instruct-Q8_0.gguf",
24
 
25
  # Инициализация модели
26
  try:
27
+ logger.info(f"Загрузка модели {FILE_NAME}...")
28
 
29
  # загрузка модели для локального хранилища
30
  # llm = Llama(
 
66
 
67
  # Генерация шаблона
68
  return CHAT_TEMPLATE.format(
69
+ system_prompt=SYSTEM_PROMPT or 'Ответ должен быть точным, кратким и с юмором.',
70
  prompt=user_input,
71
  )
72
  except Exception as e:
 
96
  except Exception as e:
97
  logger.error(f"Ошибка обработки сообщения: {str(e)}")
98
 
 
 
 
 
 
 
 
 
 
99
 
100
  @app.get("/")
101
+ def greet_json():
102
+ return {"Hello": "World!"}
 
103
 
104
+ @app.put("/system-prompt")
105
+ async def set_system_prompt(text: str):
106
  # Генерация ответа с помощью модели
107
+ logger.info('post/system-prompt')
108
+ global SYSTEM_PROMPT
109
+ SYSTEM_PROMPT = text
110
+
111
+
112
+ @app.post("/predict")
113
+ async def predict(text: str):
114
+ # Генерация ответа с помощью модели
115
+ logger.info('post/predict')
116
+ prompt = create_prompt(text)
117
+ response = generate_response(prompt)
118
  return {"response": response}
119
+
120
+ # Запуск Telegram-бота при старте приложения
121
+ @app.on_event("startup")
122
+ async def startup_event():
123
+ asyncio.create_task(start_bot()) # Запускаем бота в фоновом режиме
bot.py ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from telegram import Update
3
+ from telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes
4
+
5
+ TOKEN = os.environ["TELEGRAM_TOKEN"]
6
+
7
+ # Команды
8
+ async def start_command(update: Update, context: ContextTypes.DEFAULT_TYPE):
9
+ await update.message.reply_text("Привет! Я простой бот. Напиши что-нибудь, и я повторю!")
10
+
11
+ async def help_command(update: Update, context: ContextTypes.DEFAULT_TYPE):
12
+ await update.message.reply_text("Доступные команды:\n/start - начать общение\n/help - помощь")
13
+
14
+ # Обработка текстовых сообщений
15
+ async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
16
+ text = update.message.text
17
+ print(f"User ({update.message.chat.id}): {text}")
18
+ await update.message.reply_text(f"Вы написали: {text}")
19
+
20
+ # Ошибки
21
+ async def error(update: Update, context: ContextTypes.DEFAULT_TYPE):
22
+ print(f"Update {update} caused error {context.error}")
23
+
24
+ # Запуск бота
25
+ async def start_bot():
26
+ print("Starting bot...")
27
+ app = Application.builder().token(TOKEN).build()
28
+
29
+ # Регистрация команд
30
+ app.add_handler(CommandHandler("start", start_command))
31
+ app.add_handler(CommandHandler("help", help_command))
32
+
33
+ # Регистрация обработчика сообщений
34
+ app.add_handler(MessageHandler(filters.TEXT, handle_message))
35
+
36
+ # Регистрация обработчика ошибок
37
+ app.add_error_handler(error)
38
+
39
+ # Опрос сервера
40
+ print("Polling...")
41
+ await app.run_polling(polling_interval=3)