forked from labintsev/python-telegram-ai-bot
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmodel.py
More file actions
87 lines (71 loc) · 3.62 KB
/
Copy pathmodel.py
File metadata and controls
87 lines (71 loc) · 3.62 KB
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
import openai
import dotenv
import logging
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
# Загружаем переменные окружения из файла .env
try:
env = dotenv.dotenv_values(".env")
YA_API_KEY = env["YA_API_KEY"]
YA_FOLDER_ID = env["YA_FOLDER_ID"]
except FileNotFoundError:
raise FileNotFoundError("Файл .env не найден. Убедитесь, что он существует в корневой директории проекта.")
except KeyError as e:
raise KeyError(f"Переменная окружения {str(e)} не найдена в файле .env. Проверьте его содержимое.")
class LLMService:
"""
Параметры:
sys_prompt - системный промпт для указания роли ассистента
use_data - имя файла для включения полезной информации в системный промпт
"""
def __init__(self, prompt_file):
"""
Инициализация сервиса LLM.
Аргументы:
prompt_file (str): Путь к файлу с системным промптом для LLM.
"""
# Читаем системный промпт из файла и сохраняем в атрибут sys_prompt
with open(prompt_file, encoding='utf-8') as f:
self.sys_prompt = f.read()
try:
# Создаём клиента OpenAI с вашим API-ключом и базовым URL для Yandex LLM API
self.client = openai.OpenAI(
api_key=YA_API_KEY,
base_url="https://llm.api.cloud.yandex.net/v1",
)
# Формируем путь к модели с использованием идентификатора каталога из .env
self.model = f"gpt://{YA_FOLDER_ID}/yandexgpt-lite"
except Exception as e:
logger.error(f"Ошибка при авторизации модели. Проверьте настройки аккаунта и область действия ключа API. {str(e)}")
def chat(self, message, history):
# Берем последние два сообщения из истории, чтобы не перегружать запрос
messages=[
{"role": "system", "content": self.sys_prompt}] + history[-4:] + [{"role": "user", "content": message}]
logger.debug(f"Messages: {messages}")
try:
# Обращаемся к API
response = self.client.chat.completions.create(
model=self.model,
messages=messages,
temperature=0.3,
max_tokens=256,
)
logger.debug(f"Response: {response}")
# Возвращаем ответ
return response.choices[0].message.content
except Exception as e:
return f"Произошла ошибка: {str(e)}"
llm_1 = LLMService('prompts/prompt_1.txt')
cache = {}
def chat_with_llm(user_message, history):
"""
Чат с использованием сервиса LLM.
Аргументы:
user_message (str): Сообщение пользователя.
Возвращает:
str: Ответ LLM.
"""
llm_response = llm_1.chat(user_message, history)
history.append({"role": "user", "content": user_message}) # добавляем сообщение пользователя в историю
history.append({"role": "assistant", "content": llm_response})
return llm_response