from django.core.management import BaseCommand from vacancies.main.vector_store import search_similarities from vacancies.main.models import CustomerCV, RecommendedVacancy from vacancies.main.bot import application from vacancies.main.features_extractor import extract_vacancy_features 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: features = extract_vacancy_features(customer_cv.content) print(features) 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), ] ) search_result_id = search_similarities(features.model_dump(), query_filter) recommendation, _ = RecommendedVacancy.objects.get_or_create( customer=customer_cv.customer, vacancy_id=search_result_id, ) application.bot.send_message( chat_id=recommendation.customer.chat_id, text=recommendation.vacancy.content, reply_markup=InlineKeyboardMarkup([[ InlineKeyboardButton("Откликнуться", url=recommendation.vacancy.link), ]]), )