Compare commits

..

No commits in common. "50c984cfd72979926bd11601523f60432fa9e746" and "24ce709fb147c7d280ffee588e0e7e222faa6d95" have entirely different histories.

4 changed files with 12 additions and 48 deletions

View file

@ -1,8 +1,8 @@
from dataclasses import dataclass
from typing import List, Dict, Optional
from openrouter import OpenRouter, RetryConfig
from openrouter.utils import BackoffStrategy
from openrouter import OpenRouter
SYSTEM_PROMPT = """
Ты - помощник в групповом чате.
@ -39,11 +39,7 @@ class AiMessage:
class AiAgent:
def __init__(self, api_token: str):
retry_config = RetryConfig(strategy="backoff",
backoff=BackoffStrategy(
initial_interval=2000, max_interval=8000, exponent=2, max_elapsed_time=14000),
retry_connection_errors=True)
self.client = OpenRouter(api_key=api_token, retry_config=retry_config)
self.client = OpenRouter(api_key=api_token, timeout_ms=15000)
self.chat_contexts: Dict[int, ChatContext] = {}
async def get_reply(self, chat_id: int, chat_prompt: str,

View file

@ -1,4 +1,3 @@
from functools import partial
from typing import Optional
from aiogram import Router, F, Bot
@ -93,10 +92,8 @@ async def any_message_handler(message: Message):
# noinspection PyUnresolvedReferences
agent = AiAgent(message.bot.config['openrouter_token'])
await message.reply(
await utils.run_with_progress(partial(agent.get_reply, chat_id, chat_prompt, ai_message, ai_fwd_messages),
partial(message.bot.send_chat_action, chat_id, 'typing'),
interval=4))
await message.bot.send_chat_action(chat_id, 'typing')
await message.reply(await agent.get_reply(chat_id, chat_prompt, ai_message, ai_fwd_messages))
def clear_ai_chat_context(chat_id: int):
@ -117,6 +114,5 @@ async def get_ai_reply(bot: Bot, chat_id, user: User, message: str, fwd_user: Us
# noinspection PyUnresolvedReferences
agent = AiAgent(bot.config['openrouter_token'])
return await utils.run_with_progress(partial(agent.get_reply, chat_id, chat_prompt, ai_message, ai_fwd_messages),
partial(bot.send_chat_action(chat_id, 'typing')),
interval=4)
await bot.send_chat_action(chat_id, 'typing')
return await agent.get_reply(chat_id, chat_prompt, ai_message, ai_fwd_messages)

View file

@ -1,6 +1,5 @@
import asyncio
from calendar import timegm
from typing import Awaitable, Callable, Coroutine, Optional
from typing import Optional
from pymorphy3 import MorphAnalyzer
from time import gmtime
@ -22,26 +21,3 @@ def full_name(first_name: str, last_name: Optional[str]) -> str:
if last_name is not None:
return f"{first_name} {last_name}"
return first_name
async def run_with_progress(main_func: Callable[[], Coroutine], progress_func: Callable[[], Awaitable], interval: int):
completion_event = asyncio.Event()
async def progress():
while not completion_event.is_set():
await progress_func()
wait_event_task = asyncio.create_task(completion_event.wait())
wait_timer_task = asyncio.create_task(asyncio.sleep(interval))
await asyncio.wait([wait_event_task, wait_timer_task],
return_when=asyncio.FIRST_COMPLETED)
if completion_event.is_set():
wait_timer_task.cancel()
progress_task = asyncio.create_task(progress())
main_task = asyncio.create_task(main_func())
result = await main_task
completion_event.set()
await progress_task
return result

View file

@ -1,5 +1,4 @@
import re
from functools import partial
from typing import Optional, Tuple, List
from vkbottle import API
@ -88,10 +87,8 @@ async def any_message_handler(message: Message):
# noinspection PyUnresolvedReferences
agent = AiAgent(message.ctx_api.config['openrouter_token'])
await message.reply(
await utils.run_with_progress(partial(agent.get_reply, chat_id, chat_prompt, ai_message, ai_fwd_messages),
partial(message.ctx_api.messages.set_activity, peer_id=chat_id, type='typing'),
interval=4))
await message.ctx_api.messages.set_activity(peer_id=chat_id, type='typing')
await message.reply(await agent.get_reply(chat_id, chat_prompt, ai_message, ai_fwd_messages))
def clear_ai_chat_context(chat_id: int):
@ -115,6 +112,5 @@ async def get_ai_reply(api: API, chat_id, message: Tuple[int, str], fwd_messages
# noinspection PyUnresolvedReferences
agent = AiAgent(api.config['openrouter_token'])
return await utils.run_with_progress(partial(agent.get_reply, chat_id, chat_prompt, ai_message, ai_fwd_messages),
partial(api.messages.set_activity, peer_id=chat_id, type='typing'),
interval=4)
await api.messages.set_activity(peer_id=chat_id, type='typing')
return await agent.get_reply(chat_id, chat_prompt, ai_message, ai_fwd_messages)