1- """
2- File: backend/workers/tasks/vectorize_post.py
3- Task: 6.4.1 - RAG Feedback Loop (Continuous Learning via OpenAI)
4- """
5-
61import structlog
72from llama_index .core import Document , StorageContext , VectorStoreIndex
83from llama_index .core .settings import Settings
2116
2217# Витягуємо токен безпечно (Pydantic SecretStr)
2318_raw_key = settings .OPENAI_API_KEY
24- openai_key : str = _raw_key .get_secret_value () if hasattr (_raw_key , "get_secret_value" ) else str (_raw_key )
19+ openai_key : str = (
20+ _raw_key .get_secret_value ()
21+ if hasattr (_raw_key , "get_secret_value" )
22+ else str (_raw_key )
23+ )
2524
2625# Налаштовуємо глобальну модель для векторизації
2726embed_model = OpenAIEmbedding (model = settings .OPENAI_MODEL_EMBEDDING , api_key = openai_key )
@@ -38,9 +37,12 @@ async def vectorize_published_post_task(content: str, platform: str) -> None:
3837 try :
3938 # 1. Підключаємось до Qdrant
4039 qdrant_url = getattr (settings , "QDRANT_URL" , "http://127.0.0.1:6333" )
41- client = AsyncQdrantClient (url = qdrant_url )
40+ aclient = AsyncQdrantClient (url = qdrant_url )
4241
43- vector_store = QdrantVectorStore (aclient = client , collection_name = "doctor_style" )
42+ # Передаємо AsyncQdrantClient в параметр aclient
43+ vector_store = QdrantVectorStore (
44+ aclient = aclient , collection_name = "doctor_style"
45+ )
4446 storage_context = StorageContext .from_defaults (vector_store = vector_store )
4547
4648 # 2. Створюємо документ із метаданими
@@ -53,11 +55,18 @@ async def vectorize_published_post_task(content: str, platform: str) -> None:
5355 },
5456 )
5557
56- # 3. Векторизуємо та зберігаємо у БД
57- VectorStoreIndex .from_documents (
58- [doc ], storage_context = storage_context , show_progress = False
58+ # 3. Векторизуємо та зберігаємо у БД асинхронно
59+ # Якщо колекції немає, QdrantVectorStore створит її під капотом
60+ # коли ми будемо використовувати aclient
61+
62+ # Створюємо порожній індекс, прив'язаний до Qdrant
63+ index = VectorStoreIndex .from_vector_store ( # type: ignore[reportUnknownMemberType]
64+ vector_store = vector_store , storage_context = storage_context
5965 )
6066
67+ # Вставляємо документ асинхронно
68+ await index .ainsert (doc )
69+
6170 logger .info ("vectorization_success" , platform = platform )
6271 except Exception as e :
6372 logger .error ("vectorization_failed" , error = str (e ), error_type = type (e ).__name__ )
0 commit comments