r2r.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  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 list(
  55. self,
  56. ids: Optional[list[str]] = None,
  57. offset: Optional[int] = 0,
  58. limit: Optional[int] = 100,
  59. ):
  60. await self._check_login()
  61. print("aaaaaaaaaaaaaaaaaaaaaaaaaaaaassssssssssssssssssssssssssssssssssss")
  62. print(ids)
  63. """
  64. listed = mutable_client.documents.list(limit=2, offset=0)
  65. results = listed.results
  66. assert len(results) == 2, "Expected 2 results for paginated listing"
  67. """
  68. print("listlistlistlistlistlistlistlistlistlistlistlistlistlistlistlistlist")
  69. if len(ids) > 0:
  70. listed = await self.client.documents.list(
  71. ids=ids, limit=limit, offset=offset
  72. )
  73. print(listed.get("results"))
  74. return listed.get("results")
  75. else:
  76. return []
  77. async def list_documents(
  78. self,
  79. id: Optional[str] = "",
  80. offset: Optional[int] = 0,
  81. limit: Optional[int] = 100,
  82. ):
  83. await self._check_login()
  84. """
  85. docs = client.collections.list_documents(empty_coll_id).results
  86. assert len(docs) == 0, "Expected no documents in a new empty collection"
  87. """
  88. print(
  89. "collectionscollectionscollectionscollectionscollectionscollectionscollectionscollectionscollectionscollectionscollectionscollections"
  90. )
  91. if id != "":
  92. try:
  93. listed = await self.client.collections.list_documents(
  94. id=id, limit=limit, offset=offset
  95. )
  96. except Exception as e:
  97. print(e)
  98. listed = []
  99. print(listed.get("results"))
  100. return listed.get("results")
  101. else:
  102. return []
  103. async def _check_login(self):
  104. if not self.auth_enabled:
  105. return
  106. if not self.client.access_token and verify_jwt_expiration(
  107. self.client.access_token
  108. ):
  109. return
  110. else:
  111. await self.init()
  112. # 创建 R2R 实例
  113. r2r = R2R()
  114. # 在您的应用程序启动时调用 initialize_r2r()
  115. async def initialize_r2r():
  116. await r2r.init()