r2r.py 2.4 KB

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