send_data_to_vector.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import asyncio
  2. import grpc
  3. import os
  4. import sys
  5. sys.path.append(os.path.dirname(os.path.dirname(__file__)))
  6. from config import logger,GRPC_VECTOR
  7. from grpc_m import vector_service_pb2, vector_service_pb2_grpc
  8. from db.docs import DocumentsRepository,DocumentCategories,Documents,DocStatus
  9. def send_to_grpc_vetcor(category_id,doc_model:Documents):
  10. loop = asyncio.get_running_loop()
  11. loop.create_task(load_user_docs_async(category_id,doc_model))
  12. async def load_user_docs_async(category_id: str, doc_model:Documents):
  13. user_doc_relative_path = DocumentsRepository.get_user_file_relpath_from_docmodel(doc_model)
  14. try:
  15. async with grpc.aio.insecure_channel(GRPC_VECTOR) as channel:
  16. stub = vector_service_pb2_grpc.VectorServiceStub(channel)
  17. logger.info(f"send to vector: category_id={category_id} user_doc_relative_path={user_doc_relative_path}")
  18. request = vector_service_pb2.SaveDocToVectorRequest(
  19. user_doc_relative_path=user_doc_relative_path,
  20. category_id=str(category_id) # 将 uuid 类型转为字符串,使其符合 proto 文件定义的协议
  21. )
  22. response:vector_service_pb2.SaveDocToVectorResponse = await stub.SaveDocToVector(request)
  23. # 输出响应结果
  24. if response.status == vector_service_pb2.ErrorCode.SUCCESS:
  25. doc_model.status = DocStatus.COMPLETED
  26. DocumentsRepository().update(doc_model)
  27. logger.info(f"Document conver to vector sucess. category_id:{category_id} doc_id:{doc_model.id} path:{doc_model.path}")
  28. else:
  29. logger.error(f"Response: status = {response.status}, {doc_model}")
  30. return response.status
  31. except Exception:
  32. logger.exception(f"vector server {GRPC_VECTOR} error:{response.status}")
  33. async def main():
  34. dm = Documents(open_id="user123", path="思维链-文档说明.md")
  35. send_to_grpc_vetcor("123", dm)
  36. while True:
  37. await asyncio.sleep(1)
  38. if __name__ == "__main__":
  39. asyncio.run(main())