r2r.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. from typing import Optional, Any
  2. from r2r import R2RAsyncClient
  3. from app.libs.util import verify_jwt_expiration
  4. from config.llm import tool_settings
  5. class R2R:
  6. client: R2RAsyncClient
  7. def __init__(self):
  8. self.auth_enabled = tool_settings.R2R_USERNAME and tool_settings.R2R_PASSWORD
  9. self.client = None
  10. async def init(self):
  11. if not self.auth_enabled:
  12. return
  13. if not self.client:
  14. self.client = R2RAsyncClient(tool_settings.R2R_BASE_URL, "/v3")
  15. print(
  16. "1111111111111111111111111111111122222vvdgdfdf" + tool_settings.R2R_USERNAME
  17. )
  18. print(tool_settings.R2R_USERNAME)
  19. print(tool_settings.R2R_PASSWORD)
  20. await self.client.users.login(
  21. tool_settings.R2R_USERNAME, tool_settings.R2R_PASSWORD
  22. )
  23. print(self.client.access_token)
  24. async def ingest_file(self, file_path: str, metadata: Optional[dict]):
  25. await self._check_login()
  26. return await self.client.documents.create(
  27. file_path=file_path,
  28. metadata=metadata if metadata else None,
  29. id=None,
  30. )
  31. async def search(self, query: str, filters: dict[str, Any]):
  32. await self._check_login()
  33. print(
  34. "aaaaaaaaaaaaaaaaaaaaaaaaaaaasssssssssssssssssssssssssssssssssssssssssgggggggggggggggggggg"
  35. )
  36. search_response = await self.client.retrieval.search(
  37. query=query,
  38. search_settings={
  39. "filters": filters,
  40. "limit": tool_settings.R2R_SEARCH_LIMIT,
  41. },
  42. )
  43. print("vvvvvvvvvvvvvvvvvvmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm")
  44. print(search_response.get("results"))
  45. return search_response.get("results").get("chunk_search_results")
  46. async def _check_login(self):
  47. if not self.auth_enabled:
  48. return
  49. if not self.client.access_token and verify_jwt_expiration(
  50. self.client.access_token
  51. ):
  52. return
  53. else:
  54. await self.init()
  55. # 创建 R2R 实例
  56. r2r = R2R()
  57. # 在您的应用程序启动时调用 initialize_r2r()
  58. async def initialize_r2r():
  59. await r2r.init()