# utils/core.py import asyncio import aiohttp import re import globals from langchain_community.vectorstores import FAISS from langchain_text_splitters import CharacterTextSplitter, RecursiveCharacterTextSplitter from langchain_core.documents import Document from utils.logger import get_logger logger = get_logger('core') # switch_model() removed - llama-swap handles model switching automatically async def is_miku_addressed(message) -> bool: # Check if this is a DM (no guild) if message.guild is None: # In DMs, always respond to every message return True # Safety check: ensure guild and guild.me exist if not message.guild or not message.guild.me: logger.warning(f"Invalid guild or guild.me in message from {message.author}") return False # If message contains a ping for Miku, return true if message.guild.me in message.mentions: return True # If message is a reply, check the referenced message author if message.reference: try: referenced_msg = await message.channel.fetch_message(message.reference.message_id) if referenced_msg.author == message.guild.me: return True except Exception as e: logger.warning(f"Could not fetch referenced message: {e}") cleaned = message.content.strip() return bool(re.search( r'(?