chatgpt_bot/bot/handlers/user/model_processing.py
2024-10-10 13:08:58 +03:00

146 lines
5.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from aiogram.filters.callback_data import CallbackData
from aiogram.types import InlineKeyboardButton
from aiogram.utils.keyboard import InlineKeyboardBuilder
from db.db import *
class PageCallBack(CallbackData, prefix="page"):
page: int
page_name: str
models_description = {
"1o": "Это базовая модель ИИ, которая \"умеет думать\". Она хороша для выполнения повседневных задач, \
таких как анализ данных, обработка текста и создание отчетов. Она подходит для малого и среднего бизнеса, \
где важно автоматизировать рутинные задачи и получать быстрые результаты.\n\n\
Выберите тариф к модели 1о.\nОставшиеся токены: ",
"1o mini": "Уменьшенная версия 1о, которая также \"умеет думать\". Эта модель менее мощная, \
но зато работает быстрее на устройствах с ограниченными ресурсами, таких как смартфоны или небольшие компьютеры. \
Прекрасно подойдет для мобильных приложений и стартапов, где ресурсы ограничены, но нужны умные решения.\n\n\
Выберите тариф к модели 1о mini.\nОставшиеся токены: ",
"4o": "Это мощная модель ИИ, предназначенная для сложных и объемных задач. Она хорошо справляется \
с глубоким анализом больших данных, сложными прогнозами и инновационными бизнес-проектами. \
Идеальна для крупных компаний, требующих высокую производительность для динамичного принятия решений и стратегического анализа.\n\n\
Выберите тариф к модели 4о.\nОставшиеся токены: ",
"4o mini": "Уменьшенная версия модели 4о. Она сохраняет высокую мощность при меньшем использовании ресурсов. \
Подходит для сложных бизнес-задач в условиях ограниченных ресурсов, таких как аналитика в режиме реального времени \
на портативных и мобильных устройствах. Отличный выбор для бизнеса, который хочет получить максимум от своих технологий \
без больших затрат на оборудование.\n\n\
Выберите тариф к модели 4о.\nОставшиеся токены: "
}
model_prices = {
"1o" : {
"base": {
"tokens": "60",
"amount": "2000"
},
"advanced": {
"tokens": "128",
"amount": "3500"
},
"pro": {
"tokens": "300",
"amount": "7500"
}
},
"1o mini": {
"base": {
"tokens": "50",
"amount": "900"
},
"advanced": {
"tokens": "100",
"amount": "1500"
},
"pro": {
"tokens": "270",
"amount": "2700"
}
},
"4o": {
"base": {
"tokens": "100",
"amount": "1500"
},
"advanced": {
"tokens": "150",
"amount": "2000"
},
"pro": {
"tokens": "303",
"amount": "3750"
}
},
"4o mini": {
"base": {
"tokens": "800",
"amount": "400"
},
"advanced": {
"tokens": "1650",
"amount": "650"
},
"pro": {
"tokens": "3300",
"amount": "1250"
}
}
}
name_of_model = {
"base" : "Базовый",
"advanced": "Продвинутый",
"pro" : "Профессиональный"
}
class BuyCallBack(CallbackData, prefix="buy"):
name: str
option_of_model: str
tokens: str
amount: str
class PayCallBack(CallbackData, prefix="pay"):
name: str
option_of_model: str
tokens: str
amount: str
class ChooseCallBack(CallbackData, prefix="choose"):
name: str
async def get_model_page(*, page: int, name: str, user_id):
temp_kbds: InlineKeyboardBuilder = InlineKeyboardBuilder()
if name in ['1o', '1o mini']:
return "Данная модель сейчас не работает", temp_kbds
tokens = await get_current_model_tokens(user_id, name)
status = await get_current_model(user_id) == name
text: str = models_description[name] + str(tokens)
for option_name, item in model_prices[name].items():
option_name_rus, tokens, amount = name_of_model[option_name], item["tokens"], item["amount"]
temp_text = f"{name_of_model[option_name]} | {tokens} запросов"
temp_kbds.add(InlineKeyboardButton(
text=temp_text,
callback_data=BuyCallBack(
name=name,
option_of_model=option_name_rus,
tokens=tokens,
amount=amount
).pack()
))
temp_kbds.add(InlineKeyboardButton(
text="🟢 Выбрано" if status else "🔴 Не выбрано",
callback_data=ChooseCallBack(
name=name,
).pack()
))
return text, temp_kbds