from telegram import Update, ForceReply import logging from pxy_openai.assistants import OpenAIAssistant from .models import TelegramBot from asgiref.sync import sync_to_async from pxy_langchain.models import AIAssistant from pxy_langchain.services import LangchainAIService logger = logging.getLogger(__name__) async def dream_city_command(update: Update): """Send a message with a link to the random city generator.""" message = ( "Descubre la ciudad de tus sueños! Haz clic en el enlace para explorar una ciudad generada aleatoriamente que podría reflejar tus aspiraciones urbanas: " "https://app.polisplexity.tech/city/digital/twin/dream/?innovation=30&technology=30&science=40" ) await update.message.reply_text(message) async def start(update: Update): """Send a message when the command /start is issued.""" user = update.effective_user await update.message.reply_html( rf"Hi {user.mention_html()}!", reply_markup=ForceReply(selective=True), ) async def help_command(update: Update): """Send a message when the command /help is issued.""" user = update.effective_user await update.message.reply_text(f"Help! How can I assist you, {user.first_name}?") async def handle_location(update: Update): """Respond to a location message.""" location = update.message.location if location: await update.message.reply_text( f"Thanks for sharing your location! Latitude: {location.latitude}, Longitude: {location.longitude}" ) else: await update.message.reply_text("Please share your location.") async def respond(update, bot_name): """Respond to user messages using the LangChain AI service.""" try: user_message = update.message.text # Fetch the Telegram bot and its assigned AI assistant asynchronously telegram_bot = await sync_to_async(TelegramBot.objects.get)(name=bot_name, is_active=True) if not telegram_bot.assistant: raise ValueError(f"No assistant configured for bot '{bot_name}'.") # Fetch the AI assistant linked to this bot assistant = await sync_to_async(AIAssistant.objects.get)(name=telegram_bot.assistant.name) # Initialize AI service ai_service = LangchainAIService(assistant) # Generate response asynchronously bot_response = await sync_to_async(ai_service.generate_response)(user_message) await update.message.reply_text(bot_response) except TelegramBot.DoesNotExist: await update.message.reply_text(f"Bot '{bot_name}' not found or inactive.") except Exception as e: await update.message.reply_text(f"Oops! Something went wrong: {e}")