from django.core.management import BaseCommand import asyncio from vacancies.main.vector_store import vector_store from vacancies.main.models import CustomerCV, RecommendedVacancy from vacancies.main.bot import application from telegram import InlineKeyboardButton, InlineKeyboardMarkup from qdrant_client.models import Filter, HasIdCondition class Command(BaseCommand): help = "Generates new recommended vacancies" def handle(self, *args, **options): customer_cvs = CustomerCV.objects.all() for customer_cv in customer_cvs: recommended_vacancy_ids = RecommendedVacancy.objects.filter( customer=customer_cv.customer ).values_list('vacancy_id', flat=True) query_filter = Filter( must_not = [ HasIdCondition(has_id=recommended_vacancy_ids), ] ) document = vector_store.similarity_search( customer_cv.content, k=1, filter=query_filter, )[0] print(document.__dict__) recommendation, _ = RecommendedVacancy.objects.get_or_create( customer=customer_cv.customer, vacancy_id=document.metadata["_id"], ) asyncio.run(application.bot.send_message( chat_id=recommendation.customer.chat_id, text=recommendation.vacancy.content, reply_markup=InlineKeyboardMarkup([[ InlineKeyboardButton("Откликнуться", url=recommendation.vacancy.link), ]]), ))