__init__.py 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. STORAGE_IMPLEMENTATIONS = {
  2. "KV_STORAGE": {
  3. "implementations": [
  4. "JsonKVStorage",
  5. "RedisKVStorage",
  6. "PGKVStorage",
  7. "MongoKVStorage",
  8. "OpenSearchKVStorage",
  9. ],
  10. "required_methods": ["get_by_id", "upsert"],
  11. },
  12. "GRAPH_STORAGE": {
  13. "implementations": [
  14. "NetworkXStorage",
  15. "Neo4JStorage",
  16. "PGGraphStorage",
  17. "MongoGraphStorage",
  18. "MemgraphStorage",
  19. "OpenSearchGraphStorage",
  20. ],
  21. "required_methods": ["upsert_node", "upsert_edge"],
  22. },
  23. "VECTOR_STORAGE": {
  24. "implementations": [
  25. "NanoVectorDBStorage",
  26. "MilvusVectorDBStorage",
  27. "PGVectorStorage",
  28. "FaissVectorDBStorage",
  29. "QdrantVectorDBStorage",
  30. "MongoVectorDBStorage",
  31. "OpenSearchVectorDBStorage",
  32. # "ChromaVectorDBStorage",
  33. ],
  34. "required_methods": ["query", "upsert"],
  35. },
  36. "DOC_STATUS_STORAGE": {
  37. "implementations": [
  38. "JsonDocStatusStorage",
  39. "RedisDocStatusStorage",
  40. "PGDocStatusStorage",
  41. "MongoDocStatusStorage",
  42. "OpenSearchDocStatusStorage",
  43. ],
  44. "required_methods": ["get_docs_by_status"],
  45. },
  46. }
  47. # Storage implementation environment variable without default value
  48. STORAGE_ENV_REQUIREMENTS: dict[str, list[str]] = {
  49. # KV Storage Implementations
  50. "JsonKVStorage": [],
  51. "MongoKVStorage": [
  52. "MONGO_URI",
  53. "MONGO_DATABASE",
  54. ],
  55. "RedisKVStorage": ["REDIS_URI"],
  56. "PGKVStorage": ["POSTGRES_USER", "POSTGRES_PASSWORD", "POSTGRES_DATABASE"],
  57. # Graph Storage Implementations
  58. "NetworkXStorage": [],
  59. "Neo4JStorage": ["NEO4J_URI", "NEO4J_USERNAME", "NEO4J_PASSWORD"],
  60. "MongoGraphStorage": [
  61. "MONGO_URI",
  62. "MONGO_DATABASE",
  63. ],
  64. "MemgraphStorage": ["MEMGRAPH_URI"],
  65. "AGEStorage": [
  66. "AGE_POSTGRES_DB",
  67. "AGE_POSTGRES_USER",
  68. "AGE_POSTGRES_PASSWORD",
  69. ],
  70. "PGGraphStorage": [
  71. "POSTGRES_USER",
  72. "POSTGRES_PASSWORD",
  73. "POSTGRES_DATABASE",
  74. ],
  75. # Vector Storage Implementations
  76. "NanoVectorDBStorage": [],
  77. "MilvusVectorDBStorage": [
  78. "MILVUS_URI",
  79. "MILVUS_DB_NAME",
  80. ],
  81. # "ChromaVectorDBStorage": [],
  82. "PGVectorStorage": ["POSTGRES_USER", "POSTGRES_PASSWORD", "POSTGRES_DATABASE"],
  83. "FaissVectorDBStorage": [],
  84. "QdrantVectorDBStorage": ["QDRANT_URL"], # QDRANT_API_KEY has default value None
  85. "MongoVectorDBStorage": [
  86. "MONGO_URI",
  87. "MONGO_DATABASE",
  88. ],
  89. # Document Status Storage Implementations
  90. "JsonDocStatusStorage": [],
  91. "RedisDocStatusStorage": ["REDIS_URI"],
  92. "PGDocStatusStorage": ["POSTGRES_USER", "POSTGRES_PASSWORD", "POSTGRES_DATABASE"],
  93. "MongoDocStatusStorage": [
  94. "MONGO_URI",
  95. "MONGO_DATABASE",
  96. ],
  97. # OpenSearch Storage Implementations
  98. "OpenSearchKVStorage": [
  99. "OPENSEARCH_HOSTS",
  100. ],
  101. "OpenSearchDocStatusStorage": [
  102. "OPENSEARCH_HOSTS",
  103. ],
  104. "OpenSearchGraphStorage": [
  105. "OPENSEARCH_HOSTS",
  106. ],
  107. "OpenSearchVectorDBStorage": [
  108. "OPENSEARCH_HOSTS",
  109. ],
  110. }
  111. # Storage implementation module mapping
  112. STORAGES = {
  113. "NetworkXStorage": ".kg.networkx_impl",
  114. "JsonKVStorage": ".kg.json_kv_impl",
  115. "NanoVectorDBStorage": ".kg.nano_vector_db_impl",
  116. "JsonDocStatusStorage": ".kg.json_doc_status_impl",
  117. "Neo4JStorage": ".kg.neo4j_impl",
  118. "MilvusVectorDBStorage": ".kg.milvus_impl",
  119. "MongoKVStorage": ".kg.mongo_impl",
  120. "MongoDocStatusStorage": ".kg.mongo_impl",
  121. "MongoGraphStorage": ".kg.mongo_impl",
  122. "MongoVectorDBStorage": ".kg.mongo_impl",
  123. "RedisKVStorage": ".kg.redis_impl",
  124. "RedisDocStatusStorage": ".kg.redis_impl",
  125. "ChromaVectorDBStorage": ".kg.chroma_impl",
  126. "PGKVStorage": ".kg.postgres_impl",
  127. "PGVectorStorage": ".kg.postgres_impl",
  128. "AGEStorage": ".kg.age_impl",
  129. "PGGraphStorage": ".kg.postgres_impl",
  130. "PGDocStatusStorage": ".kg.postgres_impl",
  131. "FaissVectorDBStorage": ".kg.faiss_impl",
  132. "QdrantVectorDBStorage": ".kg.qdrant_impl",
  133. "MemgraphStorage": ".kg.memgraph_impl",
  134. "OpenSearchKVStorage": ".kg.opensearch_impl",
  135. "OpenSearchDocStatusStorage": ".kg.opensearch_impl",
  136. "OpenSearchGraphStorage": ".kg.opensearch_impl",
  137. "OpenSearchVectorDBStorage": ".kg.opensearch_impl",
  138. }
  139. def verify_storage_implementation(storage_type: str, storage_name: str) -> None:
  140. """Verify if storage implementation is compatible with specified storage type
  141. Args:
  142. storage_type: Storage type (KV_STORAGE, GRAPH_STORAGE etc.)
  143. storage_name: Storage implementation name
  144. Raises:
  145. ValueError: If storage implementation is incompatible or missing required methods
  146. """
  147. if storage_type not in STORAGE_IMPLEMENTATIONS:
  148. raise ValueError(f"Unknown storage type: {storage_type}")
  149. storage_info = STORAGE_IMPLEMENTATIONS[storage_type]
  150. if storage_name not in storage_info["implementations"]:
  151. raise ValueError(
  152. f"Storage implementation '{storage_name}' is not compatible with {storage_type}. "
  153. f"Compatible implementations are: {', '.join(storage_info['implementations'])}"
  154. )