JackSparrow
Red Team
- 04.04.2020
- 260
- 173
SCRIPT.PY
Код мой частично, кода немного, улучшения приветствуются
Можно запустить "как есть" подложив свой токен. Вы получите бесплатный GPT 4 через g4f с памятью 4096 (макс. длина запроса) символов в вашем телеграмм боте .
g4f поддерживает множество разных моделей, которые реализуются через запросы к разным провайдерам (в том числе платформа
Код мой частично, кода немного, улучшения приветствуются
Можно запустить "как есть" подложив свой токен. Вы получите бесплатный GPT 4 через g4f с памятью 4096 (макс. длина запроса) символов в вашем телеграмм боте .
g4f поддерживает множество разных моделей, которые реализуются через запросы к разным провайдерам (в том числе платформа
Ссылка скрыта от гостей
) - git .
Python:
import logging
import g4f
import asyncio
from aiogram import Bot, Dispatcher, types
from aiogram.filters import Command
from aiogram.fsm.storage.memory import MemoryStorage
from aiogram.types import ReplyKeyboardMarkup, KeyboardButton
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)
API_TOKEN_BOT = 'BOTFATHER_TOKEN'
bot = Bot(token=API_TOKEN_BOT)
storage = MemoryStorage()
dp = Dispatcher(storage=storage)
gpt_response_task = None
history_for_shodan = {}
def check_history(history, max_length=4096):
current_length = sum(len(message["content"]) for message in history)
while history and current_length > max_length:
removed_message = history.pop(0)
current_length -= len(removed_message["content"])
print(history)
return history
@dp.message(Command("start"))
async def send_welcome(message: types.Message):
await message.answer("Позоваи меня тихо по имени ...")
# чистка истории
@dp.message(Command("clear"))
async def process_clear_command(message: types.Message):
user_id = message.from_user.id
history_for_shodan[user_id] = []
await message.answer("История диалога очищена...")
# обработчик сообщений юзера. создает асинк задачу на отправку запроса к gpt. парсит ответ для обработки кода.
@dp.message()
async def echo(message: types.Message):
global gpt_response_task
if gpt_response_task and not gpt_response_task.done(): # Проверяем, выполняется ли задача
await message.answer("Предыдущий запрос еще обрабатывается...")
return
user_message = message.text
user_id = message.from_user.id
msg_request = await message.answer("Запрос отправлен в обработку...")
msg_request_id = msg_request.chat.id
msg_request_message_id = msg_request.message_id
try:
gpt_response_task = asyncio.create_task(gpt_response(user_message, message, msg_request_id, msg_request_message_id))
bot_response = await gpt_response_task
await message.answer(bot_response, parse_mode='Markdown')
except Exception as e:
#await message.answer(bot_response)
await message.answer(f"Ошибка в методе echo : {e}")
async def gpt_response(user_message: str, message: types.Message, msg_request_id, msg_request_message_id):
user_id = message.from_user.id
if user_id not in history_for_shodan:
history_for_shodan[user_id] = []
history_for_shodan[user_id].append({"role": "user", "content": user_message})
history_for_shodan[user_id] = check_history(history_for_shodan[user_id])
chat_history = history_for_shodan[user_id]
print(chat_history)
chat_id = message.chat.id
# запрос к модели провайдера
response = g4f.ChatCompletion.create(
model=g4f.models.gpt_4,
#messages=[{"role": "user", "content": user_message}],
messages=chat_history,
)
print(response)
history_for_shodan[user_id].append({"role": "assistant", "content": response})
await bot.delete_message(msg_request_id, msg_request_message_id)
return response
async def main():
try:
await dp.start_polling(bot)
except Exception as e:
await message.answer(f"Ошибка в методе main : {e}")
if __name__ == "__main__":
asyncio.run(main())
Последнее редактирование: