# 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 # 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: print(f"⚠️ Warning: 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: print(f"⚠️ Could not fetch referenced message: {e}") cleaned = message.content.strip() return bool(re.search( r'(?