contextsynapse 1.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (776) hide show
  1. contextsynapse/__init__.py +107 -0
  2. contextsynapse/__main__.py +9 -0
  3. contextsynapse/a2a/__init__.py +28 -0
  4. contextsynapse/a2a/client.py +120 -0
  5. contextsynapse/a2a/discovery.py +128 -0
  6. contextsynapse/a2a/handlers.py +164 -0
  7. contextsynapse/a2a/models.py +246 -0
  8. contextsynapse/a2a/streaming.py +92 -0
  9. contextsynapse/a2a/task_manager.py +275 -0
  10. contextsynapse/adapters/__init__.py +98 -0
  11. contextsynapse/adapters/_base.py +298 -0
  12. contextsynapse/adapters/autogen/__init__.py +4 -0
  13. contextsynapse/adapters/autogen/tools.py +34 -0
  14. contextsynapse/adapters/crewai/__init__.py +4 -0
  15. contextsynapse/adapters/crewai/tools.py +63 -0
  16. contextsynapse/adapters/langchain/__init__.py +19 -0
  17. contextsynapse/adapters/langchain/message_history.py +17 -0
  18. contextsynapse/adapters/langchain/retriever.py +158 -0
  19. contextsynapse/adapters/langchain/tools.py +43 -0
  20. contextsynapse/adapters/langgraph/__init__.py +21 -0
  21. contextsynapse/adapters/langgraph/checkpoint.py +223 -0
  22. contextsynapse/adapters/langgraph/context_tools.py +341 -0
  23. contextsynapse/adapters/langgraph/message_history.py +138 -0
  24. contextsynapse/adapters/langgraph/tools.py +43 -0
  25. contextsynapse/adapters/llamaindex/__init__.py +4 -0
  26. contextsynapse/adapters/llamaindex/tools.py +64 -0
  27. contextsynapse/adapters/openai/__init__.py +24 -0
  28. contextsynapse/adapters/openai/tools.py +206 -0
  29. contextsynapse/adapters/pydantic_ai/__init__.py +4 -0
  30. contextsynapse/adapters/pydantic_ai/tools.py +36 -0
  31. contextsynapse/adapters/swarm/__init__.py +4 -0
  32. contextsynapse/adapters/swarm/tools.py +44 -0
  33. contextsynapse/agents/__init__.py +6 -0
  34. contextsynapse/agents/auto_capture.py +80 -0
  35. contextsynapse/agents/dispatcher.py +299 -0
  36. contextsynapse/agents/notifications.py +112 -0
  37. contextsynapse/aiql/__init__.py +71 -0
  38. contextsynapse/aiql/cache.py +341 -0
  39. contextsynapse/aiql/compiler/__init__.py +62 -0
  40. contextsynapse/aiql/compiler/optimizer.py +126 -0
  41. contextsynapse/aiql/compiler/planner.py +366 -0
  42. contextsynapse/aiql/compiler/statistics.py +235 -0
  43. contextsynapse/aiql/compiler/validator.py +425 -0
  44. contextsynapse/aiql/engine/__init__.py +11 -0
  45. contextsynapse/aiql/engine/chunk_storage.py +2584 -0
  46. contextsynapse/aiql/engine/executor.py +7737 -0
  47. contextsynapse/aiql/engine/extraction_integration.py +442 -0
  48. contextsynapse/aiql/engine/graph_builder.py +405 -0
  49. contextsynapse/aiql/engine/node_creation_from_normalized.py +691 -0
  50. contextsynapse/aiql/engine/performance_monitor.py +289 -0
  51. contextsynapse/aiql/engine/postprocessing.py +365 -0
  52. contextsynapse/aiql/engine/ray_stage_executors.py +918 -0
  53. contextsynapse/aiql/engine/redis_cache.py +106 -0
  54. contextsynapse/aiql/engine/streaming_json.py +366 -0
  55. contextsynapse/aiql/engine/streaming_parquet.py +568 -0
  56. contextsynapse/aiql/engine/streaming_ray_chunking.py +419 -0
  57. contextsynapse/aiql/grammar/__init__.py +14 -0
  58. contextsynapse/aiql/grammar/aiql_grammar.py +1822 -0
  59. contextsynapse/aiql/grammar/base.py +71 -0
  60. contextsynapse/aiql/parser/__init__.py +46 -0
  61. contextsynapse/aiql/parser/aiql_parser.py +11330 -0
  62. contextsynapse/aiql/parser/base_parser.py +47 -0
  63. contextsynapse/api/__init__.py +5 -0
  64. contextsynapse/api/a2a_router.py +233 -0
  65. contextsynapse/api/admin_router.py +140 -0
  66. contextsynapse/api/agent_worker_router.py +978 -0
  67. contextsynapse/api/algorithms_router.py +317 -0
  68. contextsynapse/api/api.py +4144 -0
  69. contextsynapse/api/audit.py +204 -0
  70. contextsynapse/api/auth.py +441 -0
  71. contextsynapse/api/auth_router.py +537 -0
  72. contextsynapse/api/billing.py +261 -0
  73. contextsynapse/api/billing_router.py +275 -0
  74. contextsynapse/api/boundary_router.py +452 -0
  75. contextsynapse/api/cognition_router.py +116 -0
  76. contextsynapse/api/connector_router.py +237 -0
  77. contextsynapse/api/context_router.py +1619 -0
  78. contextsynapse/api/dashboard_router.py +11367 -0
  79. contextsynapse/api/errors.py +183 -0
  80. contextsynapse/api/events.py +88 -0
  81. contextsynapse/api/experiment_bootstrap.py +321 -0
  82. contextsynapse/api/experiment_orchestrator.py +1078 -0
  83. contextsynapse/api/experiment_router.py +2089 -0
  84. contextsynapse/api/feature_gate.py +89 -0
  85. contextsynapse/api/federation_router.py +108 -0
  86. contextsynapse/api/integrations.py +567 -0
  87. contextsynapse/api/integrations_router.py +461 -0
  88. contextsynapse/api/intelligence_router.py +1028 -0
  89. contextsynapse/api/metering.py +155 -0
  90. contextsynapse/api/metrics.py +112 -0
  91. contextsynapse/api/models.py +38 -0
  92. contextsynapse/api/monitoring_router.py +174 -0
  93. contextsynapse/api/pipeline_router.py +1437 -0
  94. contextsynapse/api/playground_conn.py +116 -0
  95. contextsynapse/api/projects_router.py +131 -0
  96. contextsynapse/api/queries_router.py +282 -0
  97. contextsynapse/api/quota.py +95 -0
  98. contextsynapse/api/rate_limit.py +64 -0
  99. contextsynapse/api/search_router.py +261 -0
  100. contextsynapse/api/shield_router.py +447 -0
  101. contextsynapse/api/tenant_guard.py +103 -0
  102. contextsynapse/api/tenant_quotas.py +231 -0
  103. contextsynapse/api/tenants.py +305 -0
  104. contextsynapse/api/users.py +646 -0
  105. contextsynapse/api/v1.py +167 -0
  106. contextsynapse/api/vertical_builder_router.py +387 -0
  107. contextsynapse/benchmark/__init__.py +15 -0
  108. contextsynapse/benchmark/__main__.py +64 -0
  109. contextsynapse/benchmark/agents.py +338 -0
  110. contextsynapse/benchmark/live_ab.py +338 -0
  111. contextsynapse/benchmark/reporter.py +149 -0
  112. contextsynapse/benchmark/runner.py +264 -0
  113. contextsynapse/benchmark/savings.py +266 -0
  114. contextsynapse/benchmark/token_counter.py +212 -0
  115. contextsynapse/benchmark/workloads.py +289 -0
  116. contextsynapse/buffer/__init__.py +154 -0
  117. contextsynapse/buffer/base.py +257 -0
  118. contextsynapse/buffer/duckdb_buffer.py +246 -0
  119. contextsynapse/buffer/file_buffer.py +229 -0
  120. contextsynapse/buffer/lmdb_buffer.py +286 -0
  121. contextsynapse/buffer/local_buffer.py +154 -0
  122. contextsynapse/buffer/redis_buffer.py +211 -0
  123. contextsynapse/buffer/sqlite_buffer.py +266 -0
  124. contextsynapse/cache.py +2 -0
  125. contextsynapse/cli/__init__.py +40 -0
  126. contextsynapse/cli/cli.py +475 -0
  127. contextsynapse/cli/config_cli.py +177 -0
  128. contextsynapse/cli/scaffold.py +465 -0
  129. contextsynapse/cognition/__init__.py +31 -0
  130. contextsynapse/cognition/derivation.py +55 -0
  131. contextsynapse/cognition/events.py +135 -0
  132. contextsynapse/cognition/feedback.py +52 -0
  133. contextsynapse/cognition/hallucination.py +90 -0
  134. contextsynapse/cognition/invalidation.py +70 -0
  135. contextsynapse/cognition/read_tracker.py +50 -0
  136. contextsynapse/collaboration.py +2 -0
  137. contextsynapse/comparison.py +2 -0
  138. contextsynapse/config/__init__.py +10 -0
  139. contextsynapse/config/connectors/amfi_nav.yaml +18 -0
  140. contextsynapse/config/connectors/auto_sector.yaml +20 -0
  141. contextsynapse/config/connectors/banking_sector.yaml +20 -0
  142. contextsynapse/config/connectors/energy_sector.yaml +20 -0
  143. contextsynapse/config/connectors/fmcg_sector.yaml +20 -0
  144. contextsynapse/config/connectors/nsdl_fpi.yaml +9 -0
  145. contextsynapse/config/connectors/nse_price.yaml +61 -0
  146. contextsynapse/config/connectors/pharma_sector.yaml +20 -0
  147. contextsynapse/config/connectors/rbi_dbie.yaml +12 -0
  148. contextsynapse/config/context_presets/ai_research.json +25 -0
  149. contextsynapse/config/context_presets/chatgpt_conversations.json +19 -0
  150. contextsynapse/config/context_presets/claude_conversations.json +19 -0
  151. contextsynapse/config/context_presets/legal_compliance.json +21 -0
  152. contextsynapse/config/context_presets/meeting_notes.json +21 -0
  153. contextsynapse/config/context_presets/slack_engineering.json +21 -0
  154. contextsynapse/config/context_presets/tech_climate.json +24 -0
  155. contextsynapse/config/context_presets/toi_politics.json +25 -0
  156. contextsynapse/config/database_config.py +453 -0
  157. contextsynapse/config/deployment.py +221 -0
  158. contextsynapse/config/gpt_action_schema.json +164 -0
  159. contextsynapse/config/indicators/india_macro.yaml +213 -0
  160. contextsynapse/config/logging_config.py +88 -0
  161. contextsynapse/config/mode_config.py +223 -0
  162. contextsynapse/config/schemas/api_spec.yaml +48 -0
  163. contextsynapse/config/schemas/architecture_doc.yaml +51 -0
  164. contextsynapse/config/schemas/chat_history.yaml +90 -0
  165. contextsynapse/config/schemas/chatgpt_conversation.yaml +101 -0
  166. contextsynapse/config/schemas/claude_conversation.yaml +148 -0
  167. contextsynapse/config/schemas/contract.yaml +48 -0
  168. contextsynapse/config/schemas/conversation.yaml +167 -0
  169. contextsynapse/config/schemas/database.yaml +74 -0
  170. contextsynapse/config/schemas/decision.yaml +72 -0
  171. contextsynapse/config/schemas/ecommerce.yaml +56 -0
  172. contextsynapse/config/schemas/education.yaml +42 -0
  173. contextsynapse/config/schemas/healthcare.yaml +133 -0
  174. contextsynapse/config/schemas/hr_document.yaml +48 -0
  175. contextsynapse/config/schemas/invoice.yaml +40 -0
  176. contextsynapse/config/schemas/knowledge_base.yaml +75 -0
  177. contextsynapse/config/schemas/legal.yaml +42 -0
  178. contextsynapse/config/schemas/marketing_content.yaml +48 -0
  179. contextsynapse/config/schemas/meeting_notes.yaml +51 -0
  180. contextsynapse/config/schemas/news_article.yaml +61 -0
  181. contextsynapse/config/schemas/real_estate.yaml +49 -0
  182. contextsynapse/config/schemas/requirements_doc.yaml +48 -0
  183. contextsynapse/config/schemas/research_paper.yaml +56 -0
  184. contextsynapse/config/schemas/resume.yaml +49 -0
  185. contextsynapse/config/schemas/retail.yaml +42 -0
  186. contextsynapse/config/schemas/rule_meta.yaml +173 -0
  187. contextsynapse/config/schemas/rules.yaml +72 -0
  188. contextsynapse/config/schemas/screener_meta.yaml +236 -0
  189. contextsynapse/config/schemas/sdlc.yaml +103 -0
  190. contextsynapse/config/schemas/session_graph.yaml +172 -0
  191. contextsynapse/config/schemas/support_ticket.yaml +48 -0
  192. contextsynapse/config/schemas/web.yaml +64 -0
  193. contextsynapse/config/sensors/earnings_calendar.yaml +52 -0
  194. contextsynapse/config/sensors/global_risk.yaml +53 -0
  195. contextsynapse/config/sensors/government_policy.yaml +54 -0
  196. contextsynapse/config/sensors/supply_chain.yaml +50 -0
  197. contextsynapse/config/sensors/templates/behavioral.yaml +56 -0
  198. contextsynapse/config/sensors/templates/equity_sentiment.yaml +48 -0
  199. contextsynapse/config/sensors/templates/global_macro.yaml +47 -0
  200. contextsynapse/config/sensors/templates/market_data.yaml +118 -0
  201. contextsynapse/config/sensors/templates/sector_technical.yaml +47 -0
  202. contextsynapse/config/sensors/weather.yaml +52 -0
  203. contextsynapse/config/storage_strategy.py +202 -0
  204. contextsynapse/config/templates/competitive_intel.yaml +39 -0
  205. contextsynapse/config/templates/geopolitical_risk.yaml +46 -0
  206. contextsynapse/config/templates/market_analysis.yaml +58 -0
  207. contextsynapse/connectors/__init__.py +15 -0
  208. contextsynapse/connectors/api_router.py +121 -0
  209. contextsynapse/connectors/base.py +357 -0
  210. contextsynapse/connectors/financial/audio.py +170 -0
  211. contextsynapse/connectors/financial/youtube.py +272 -0
  212. contextsynapse/connectors/github.py +164 -0
  213. contextsynapse/connectors/jira.py +120 -0
  214. contextsynapse/connectors/kafka_connector.py +124 -0
  215. contextsynapse/connectors/pipeline_connector.py +747 -0
  216. contextsynapse/connectors/registry.py +116 -0
  217. contextsynapse/connectors/scheduler.py +87 -0
  218. contextsynapse/connectors/universal.py +360 -0
  219. contextsynapse/context/__init__.py +96 -0
  220. contextsynapse/context/__main__.py +4 -0
  221. contextsynapse/context/acl.py +125 -0
  222. contextsynapse/context/agent_card.py +201 -0
  223. contextsynapse/context/agent_memory.py +814 -0
  224. contextsynapse/context/agents.py +472 -0
  225. contextsynapse/context/agents_redis.py +391 -0
  226. contextsynapse/context/assembled.py +204 -0
  227. contextsynapse/context/attribution.py +113 -0
  228. contextsynapse/context/blob.py +184 -0
  229. contextsynapse/context/boundaries.py +187 -0
  230. contextsynapse/context/boundary.py +507 -0
  231. contextsynapse/context/bundle.py +155 -0
  232. contextsynapse/context/cli.py +519 -0
  233. contextsynapse/context/collaboration.py +165 -0
  234. contextsynapse/context/compiler.py +604 -0
  235. contextsynapse/context/composite.py +536 -0
  236. contextsynapse/context/compression.py +147 -0
  237. contextsynapse/context/context_manager.py +888 -0
  238. contextsynapse/context/context_schema.py +90 -0
  239. contextsynapse/context/context_schema.yaml +105 -0
  240. contextsynapse/context/context_units.py +891 -0
  241. contextsynapse/context/conversation.py +488 -0
  242. contextsynapse/context/dedup.py +207 -0
  243. contextsynapse/context/document_processor.py +698 -0
  244. contextsynapse/context/embedding_hooks.py +338 -0
  245. contextsynapse/context/execution_schema.py +274 -0
  246. contextsynapse/context/fan_out.py +138 -0
  247. contextsynapse/context/frozen.py +80 -0
  248. contextsynapse/context/gravity.py +227 -0
  249. contextsynapse/context/hub.py +1401 -0
  250. contextsynapse/context/ingest.py +391 -0
  251. contextsynapse/context/injection.py +226 -0
  252. contextsynapse/context/interaction_graphifier.py +562 -0
  253. contextsynapse/context/layers.py +574 -0
  254. contextsynapse/context/projection.py +1195 -0
  255. contextsynapse/context/promotion.py +634 -0
  256. contextsynapse/context/proof.py +131 -0
  257. contextsynapse/context/propagation.py +577 -0
  258. contextsynapse/context/pubsub.py +135 -0
  259. contextsynapse/context/quality.py +1054 -0
  260. contextsynapse/context/quality_tracker.py +270 -0
  261. contextsynapse/context/scoping.py +370 -0
  262. contextsynapse/context/seed.py +992 -0
  263. contextsynapse/context/session.py +1142 -0
  264. contextsynapse/context/session_graph.py +593 -0
  265. contextsynapse/context/session_memory.py +309 -0
  266. contextsynapse/context/session_resolver.py +111 -0
  267. contextsynapse/context/skill_learning.py +237 -0
  268. contextsynapse/context/smart_budget.py +129 -0
  269. contextsynapse/context/source_policy.py +242 -0
  270. contextsynapse/context/store_factory.py +53 -0
  271. contextsynapse/context/sync.py +648 -0
  272. contextsynapse/context/token.py +236 -0
  273. contextsynapse/context/vector_integration.py +297 -0
  274. contextsynapse/context/webhooks.py +194 -0
  275. contextsynapse/context/working_memory.py +224 -0
  276. contextsynapse/core/__init__.py +18 -0
  277. contextsynapse/core/archiver.py +237 -0
  278. contextsynapse/core/change_stream.py +282 -0
  279. contextsynapse/core/checkpoint.py +310 -0
  280. contextsynapse/core/cloud_storage.py +387 -0
  281. contextsynapse/core/context_state.py +651 -0
  282. contextsynapse/core/cron.py +324 -0
  283. contextsynapse/core/datasource.py +643 -0
  284. contextsynapse/core/db.py +289 -0
  285. contextsynapse/core/federation.py +283 -0
  286. contextsynapse/core/graph_coordinator.py +201 -0
  287. contextsynapse/core/graph_intelligence.py +388 -0
  288. contextsynapse/core/graph_structures.py +106 -0
  289. contextsynapse/core/graph_sync.py +157 -0
  290. contextsynapse/core/hybrid_graph_storage.py +2998 -0
  291. contextsynapse/core/lifecycle.py +691 -0
  292. contextsynapse/core/multiworker.py +378 -0
  293. contextsynapse/core/pruning.py +312 -0
  294. contextsynapse/core/redis_registry.py +524 -0
  295. contextsynapse/core/registry.py +1043 -0
  296. contextsynapse/core/registry_factory.py +51 -0
  297. contextsynapse/core/registry_metadata.py +294 -0
  298. contextsynapse/core/replay.py +354 -0
  299. contextsynapse/core/replication.py +339 -0
  300. contextsynapse/core/time_travel.py +260 -0
  301. contextsynapse/core/write_behind.py +152 -0
  302. contextsynapse/core/write_context.py +39 -0
  303. contextsynapse/db/__init__.py +1 -0
  304. contextsynapse/db/postgres.py +267 -0
  305. contextsynapse/db/profile.py +236 -0
  306. contextsynapse/db/rules.py +328 -0
  307. contextsynapse/demo/__init__.py +0 -0
  308. contextsynapse/demo/report.py +147 -0
  309. contextsynapse/demo/runner.py +520 -0
  310. contextsynapse/demo/scenario.py +165 -0
  311. contextsynapse/demo/session_demo.py +280 -0
  312. contextsynapse/demo/session_report.py +143 -0
  313. contextsynapse/demo/universal_runner.py +257 -0
  314. contextsynapse/engine/__init__.py +15 -0
  315. contextsynapse/engine/core.py +555 -0
  316. contextsynapse/extraction/__init__.py +69 -0
  317. contextsynapse/extraction/cli.py +274 -0
  318. contextsynapse/extraction/config.py +107 -0
  319. contextsynapse/extraction/examples/example_usage.py +118 -0
  320. contextsynapse/extraction/examples/sample_manifest.json +53 -0
  321. contextsynapse/extraction/examples/sample_normalized.json +185 -0
  322. contextsynapse/extraction/extract_engine.py +440 -0
  323. contextsynapse/extraction/extractors/__init__.py +37 -0
  324. contextsynapse/extraction/extractors/chat_export_extractor.py +189 -0
  325. contextsynapse/extraction/extractors/csv_extractor.py +83 -0
  326. contextsynapse/extraction/extractors/docx_extractor.py +129 -0
  327. contextsynapse/extraction/extractors/excel_extractor.py +152 -0
  328. contextsynapse/extraction/extractors/html_extractor.py +146 -0
  329. contextsynapse/extraction/extractors/pdf_extractor.py +635 -0
  330. contextsynapse/extraction/extractors/pdf_extractor_layoutparser.py +408 -0
  331. contextsynapse/extraction/extractors/register_extractors.py +63 -0
  332. contextsynapse/extraction/extractors/text_extractor.py +65 -0
  333. contextsynapse/extraction/extractors/txt_extractor.py +120 -0
  334. contextsynapse/extraction/extractors/website_extractor.py +246 -0
  335. contextsynapse/extraction/fact_extractor.py +236 -0
  336. contextsynapse/extraction/file_manager.py +353 -0
  337. contextsynapse/extraction/hierarchy.py +239 -0
  338. contextsynapse/extraction/id_generator.py +450 -0
  339. contextsynapse/extraction/layout_detector.py +409 -0
  340. contextsynapse/extraction/llm_entity_extractor.py +301 -0
  341. contextsynapse/extraction/normalized_store.py +480 -0
  342. contextsynapse/extraction/normalizer.py +594 -0
  343. contextsynapse/extraction/parquet_writer.py +598 -0
  344. contextsynapse/extraction/post_processors/__init__.py +40 -0
  345. contextsynapse/extraction/post_processors/column_reorganizer.py +507 -0
  346. contextsynapse/extraction/ray_normalization.py +233 -0
  347. contextsynapse/extraction/ray_runner.py +207 -0
  348. contextsynapse/extraction/redis_schema_registry.py +222 -0
  349. contextsynapse/extraction/registry.py +204 -0
  350. contextsynapse/extraction/schema_loader.py +663 -0
  351. contextsynapse/extraction/schema_registry.py +230 -0
  352. contextsynapse/extraction/semantic_normalizer.py +245 -0
  353. contextsynapse/extraction/version_manager.py +314 -0
  354. contextsynapse/gateway/__init__.py +24 -0
  355. contextsynapse/gateway/action_emitter.py +212 -0
  356. contextsynapse/gateway/cost_tracker.py +508 -0
  357. contextsynapse/gateway/gateway.py +377 -0
  358. contextsynapse/gateway/policy.py +303 -0
  359. contextsynapse/governance/__init__.py +13 -0
  360. contextsynapse/governance/layer.py +513 -0
  361. contextsynapse/ingestion/__init__.py +15 -0
  362. contextsynapse/ingestion/amplifier.py +288 -0
  363. contextsynapse/ingestion/async_ingest.py +463 -0
  364. contextsynapse/ingestion/chunker.py +303 -0
  365. contextsynapse/ingestion/chunking.py +58 -0
  366. contextsynapse/ingestion/cleaner.py +190 -0
  367. contextsynapse/ingestion/cleanse.py +252 -0
  368. contextsynapse/ingestion/connectors/__init__.py +38 -0
  369. contextsynapse/ingestion/connectors/base.py +300 -0
  370. contextsynapse/ingestion/connectors/chatgpt_memory.py +247 -0
  371. contextsynapse/ingestion/connectors/claude_memory.py +274 -0
  372. contextsynapse/ingestion/connectors/sap_ingestor.py +208 -0
  373. contextsynapse/ingestion/content_detector.py +80 -0
  374. contextsynapse/ingestion/content_monitor.py +502 -0
  375. contextsynapse/ingestion/dedup.py +106 -0
  376. contextsynapse/ingestion/feed.py +640 -0
  377. contextsynapse/ingestion/filters.py +461 -0
  378. contextsynapse/ingestion/graph_builder.py +705 -0
  379. contextsynapse/ingestion/input_classifier.py +307 -0
  380. contextsynapse/ingestion/job_manager.py +571 -0
  381. contextsynapse/ingestion/llm_extractor.py +610 -0
  382. contextsynapse/ingestion/orchestrator.py +116 -0
  383. contextsynapse/ingestion/parsers/__init__.py +19 -0
  384. contextsynapse/ingestion/parsers/graph_parser_registry.py +103 -0
  385. contextsynapse/ingestion/parsers/graphml_parser.py +141 -0
  386. contextsynapse/ingestion/parsers/jsonld_parser.py +171 -0
  387. contextsynapse/ingestion/parsers/rdf_parser.py +150 -0
  388. contextsynapse/ingestion/pipeline_context.py +228 -0
  389. contextsynapse/ingestion/pipeline_store.py +1195 -0
  390. contextsynapse/ingestion/queue.py +133 -0
  391. contextsynapse/ingestion/reprocess.py +179 -0
  392. contextsynapse/ingestion/scenario_router.py +224 -0
  393. contextsynapse/ingestion/schema_extractor.py +759 -0
  394. contextsynapse/ingestion/schema_validator.py +274 -0
  395. contextsynapse/ingestion/sdlc_ingest.py +87 -0
  396. contextsynapse/ingestion/smart_ingest.py +2451 -0
  397. contextsynapse/ingestion/source_connector.py +171 -0
  398. contextsynapse/ingestion/stage_executor.py +2095 -0
  399. contextsynapse/ingestion/stages/__init__.py +9 -0
  400. contextsynapse/ingestion/stages/tabular_to_graph.py +289 -0
  401. contextsynapse/ingestion/strategies.py +386 -0
  402. contextsynapse/ingestion/universal/__init__.py +4 -0
  403. contextsynapse/ingestion/universal/_operator_registry.py +59 -0
  404. contextsynapse/ingestion/universal/ingest_content.py +32 -0
  405. contextsynapse/ingestion/universal/operators/__init__.py +1 -0
  406. contextsynapse/ingestion/universal/operators/base.py +19 -0
  407. contextsynapse/ingestion/universal/operators/build_edges.py +75 -0
  408. contextsynapse/ingestion/universal/operators/cluster_topics.py +397 -0
  409. contextsynapse/ingestion/universal/operators/deduplicate.py +45 -0
  410. contextsynapse/ingestion/universal/operators/detect_signals.py +90 -0
  411. contextsynapse/ingestion/universal/operators/embed.py +80 -0
  412. contextsynapse/ingestion/universal/operators/extract_entities.py +253 -0
  413. contextsynapse/ingestion/universal/operators/extract_preferences.py +117 -0
  414. contextsynapse/ingestion/universal/operators/filter_content.py +69 -0
  415. contextsynapse/ingestion/universal/operators/index_bm25.py +52 -0
  416. contextsynapse/ingestion/universal/operators/infer_domains.py +69 -0
  417. contextsynapse/ingestion/universal/operators/link_cross_reference.py +210 -0
  418. contextsynapse/ingestion/universal/operators/parse_records.py +66 -0
  419. contextsynapse/ingestion/universal/operators/resolve_entities.py +261 -0
  420. contextsynapse/ingestion/universal/operators/scanners/__init__.py +16 -0
  421. contextsynapse/ingestion/universal/operators/scanners/edges.py +173 -0
  422. contextsynapse/ingestion/universal/operators/scanners/git.py +187 -0
  423. contextsynapse/ingestion/universal/operators/scanners/github.py +135 -0
  424. contextsynapse/ingestion/universal/operators/scanners/github_api.py +509 -0
  425. contextsynapse/ingestion/universal/operators/scanners/helpers.py +67 -0
  426. contextsynapse/ingestion/universal/operators/scanners/jira.py +65 -0
  427. contextsynapse/ingestion/universal/operators/scanners/llm_enrichment.py +82 -0
  428. contextsynapse/ingestion/universal/operators/scanners/repo.py +149 -0
  429. contextsynapse/ingestion/universal/operators/sdlc_scan.py +213 -0
  430. contextsynapse/ingestion/universal/operators/spec_scanner.py +149 -0
  431. contextsynapse/ingestion/universal/operators/store_documents.py +72 -0
  432. contextsynapse/ingestion/universal/operators/synthesize_cu.py +180 -0
  433. contextsynapse/ingestion/universal/operators/validate_gate.py +65 -0
  434. contextsynapse/ingestion/universal/parsers/__init__.py +5 -0
  435. contextsynapse/ingestion/universal/parsers/record_parser.py +203 -0
  436. contextsynapse/ingestion/universal/parsers/turn_parser.py +329 -0
  437. contextsynapse/ingestion/universal/shared_signals.py +161 -0
  438. contextsynapse/ingestion/universal/stage_executor.py +219 -0
  439. contextsynapse/ingestion/web_crawler.py +265 -0
  440. contextsynapse/intelligence/__init__.py +53 -0
  441. contextsynapse/intelligence/alerts.py +198 -0
  442. contextsynapse/intelligence/collector.py +655 -0
  443. contextsynapse/intelligence/comparison.py +198 -0
  444. contextsynapse/intelligence/config.py +56 -0
  445. contextsynapse/intelligence/conflict_detector.py +182 -0
  446. contextsynapse/intelligence/context_gaps.py +192 -0
  447. contextsynapse/intelligence/context_radar.py +135 -0
  448. contextsynapse/intelligence/correlation_engine.py +416 -0
  449. contextsynapse/intelligence/correlation_template.py +120 -0
  450. contextsynapse/intelligence/dedup.py +296 -0
  451. contextsynapse/intelligence/event_bus.py +91 -0
  452. contextsynapse/intelligence/feedback_loop.py +101 -0
  453. contextsynapse/intelligence/freshness.py +307 -0
  454. contextsynapse/intelligence/fundamental_feed.py +551 -0
  455. contextsynapse/intelligence/geo_data.py +170 -0
  456. contextsynapse/intelligence/geo_reference.py +112 -0
  457. contextsynapse/intelligence/graph_fusion.py +465 -0
  458. contextsynapse/intelligence/heuristics.py +176 -0
  459. contextsynapse/intelligence/impact_tracker.py +336 -0
  460. contextsynapse/intelligence/macro_indicators.py +319 -0
  461. contextsynapse/intelligence/ocr.py +104 -0
  462. contextsynapse/intelligence/persistence.py +267 -0
  463. contextsynapse/intelligence/pipeline_health.py +130 -0
  464. contextsynapse/intelligence/price_feed.py +221 -0
  465. contextsynapse/intelligence/rate_limiter.py +130 -0
  466. contextsynapse/intelligence/reactive.py +411 -0
  467. contextsynapse/intelligence/runtime_context.py +390 -0
  468. contextsynapse/intelligence/sentiment_decay.py +426 -0
  469. contextsynapse/intelligence/session.py +277 -0
  470. contextsynapse/intelligence/signal_hierarchy.py +438 -0
  471. contextsynapse/intelligence/signals.py +185 -0
  472. contextsynapse/intelligence/source_watcher.py +132 -0
  473. contextsynapse/intelligence/table_enricher.py +256 -0
  474. contextsynapse/intelligence/tagger.py +319 -0
  475. contextsynapse/intelligence/timeseries.py +209 -0
  476. contextsynapse/intelligence/tracker.py +318 -0
  477. contextsynapse/intelligence/watchdog.py +392 -0
  478. contextsynapse/intelligence/watchdog_manager.py +263 -0
  479. contextsynapse/intelligence/webhook_receiver.py +165 -0
  480. contextsynapse/intelligence/weight_learner.py +234 -0
  481. contextsynapse/llm/__init__.py +8 -0
  482. contextsynapse/llm/client.py +348 -0
  483. contextsynapse/llm/rate_limiter.py +166 -0
  484. contextsynapse/logging_config.py +2 -0
  485. contextsynapse/marketplace/__init__.py +7 -0
  486. contextsynapse/marketplace/registry.py +173 -0
  487. contextsynapse/mcp/__init__.py +11 -0
  488. contextsynapse/mcp/__main__.py +4 -0
  489. contextsynapse/mcp/auth_middleware.py +212 -0
  490. contextsynapse/mcp/connection_pool.py +128 -0
  491. contextsynapse/mcp/server.py +986 -0
  492. contextsynapse/mcp/session_context.py +67 -0
  493. contextsynapse/memory/__init__.py +34 -0
  494. contextsynapse/memory/engine.py +475 -0
  495. contextsynapse/memory/temporal.py +327 -0
  496. contextsynapse/metadata/__init__.py +12 -0
  497. contextsynapse/metadata/metadata_db.py +272 -0
  498. contextsynapse/metadata/metadata_query_tool.py +300 -0
  499. contextsynapse/metadata/metadata_tracker.py +425 -0
  500. contextsynapse/models/__init__.py +27 -0
  501. contextsynapse/models/embedding_service.py +360 -0
  502. contextsynapse/models/model_registry.py +228 -0
  503. contextsynapse/multiworker.py +2 -0
  504. contextsynapse/pipelines/__init__.py +1 -0
  505. contextsynapse/pipelines/executor.py +851 -0
  506. contextsynapse/pipelines/filters.py +189 -0
  507. contextsynapse/pipelines/models.py +176 -0
  508. contextsynapse/pipelines/scheduler.py +268 -0
  509. contextsynapse/playground/__init__.py +1 -0
  510. contextsynapse/playground/templates.py +85 -0
  511. contextsynapse/plugins/__init__.py +43 -0
  512. contextsynapse/plugins/api.py +66 -0
  513. contextsynapse/plugins/base.py +350 -0
  514. contextsynapse/plugins/domain_interface.py +508 -0
  515. contextsynapse/plugins/domain_loader.py +241 -0
  516. contextsynapse/plugins/loader.py +148 -0
  517. contextsynapse/plugins/registry.py +265 -0
  518. contextsynapse/project/__init__.py +11 -0
  519. contextsynapse/project/code_context.py +807 -0
  520. contextsynapse/project/connectors/__init__.py +4 -0
  521. contextsynapse/project/connectors/github_connector.py +113 -0
  522. contextsynapse/project/connectors/jira_connector.py +160 -0
  523. contextsynapse/project/graph.py +1023 -0
  524. contextsynapse/project/project_context.py +545 -0
  525. contextsynapse/project/scanner_registry.py +61 -0
  526. contextsynapse/project/schema_manager.py +322 -0
  527. contextsynapse/project/schemas/knowledge.yaml +59 -0
  528. contextsynapse/project/schemas/sdlc.yaml +369 -0
  529. contextsynapse/project/sdlc_schema.py +172 -0
  530. contextsynapse/project/spec_parser.py +85 -0
  531. contextsynapse/project/task_lock.py +181 -0
  532. contextsynapse/project/task_stream.py +203 -0
  533. contextsynapse/project/team_tools.py +537 -0
  534. contextsynapse/py.typed +0 -0
  535. contextsynapse/realtime/__init__.py +6 -0
  536. contextsynapse/realtime/collaboration.py +147 -0
  537. contextsynapse/rules/__init__.py +10 -0
  538. contextsynapse/rules/engine.py +116 -0
  539. contextsynapse/rules/evaluators/__init__.py +6 -0
  540. contextsynapse/rules/evaluators/aggregate.py +205 -0
  541. contextsynapse/rules/evaluators/custom.py +170 -0
  542. contextsynapse/rules/evaluators/pre_action.py +125 -0
  543. contextsynapse/rules/evaluators/temporal.py +129 -0
  544. contextsynapse/rules/loader.py +52 -0
  545. contextsynapse/rules/models.py +124 -0
  546. contextsynapse/rules/universal.py +393 -0
  547. contextsynapse/scheduler.py +229 -0
  548. contextsynapse/schema/__init__.py +42 -0
  549. contextsynapse/schema/compiler.py +252 -0
  550. contextsynapse/schema/composer.py +158 -0
  551. contextsynapse/schema/dedup.py +73 -0
  552. contextsynapse/schema/derivation.py +172 -0
  553. contextsynapse/schema/sdl.py +326 -0
  554. contextsynapse/schema/validation_gate.py +124 -0
  555. contextsynapse/sdk/__init__.py +63 -0
  556. contextsynapse/sdk/agent.py +214 -0
  557. contextsynapse/sdk/client.py +269 -0
  558. contextsynapse/sdk/exceptions.py +23 -0
  559. contextsynapse/sdk/models.py +78 -0
  560. contextsynapse/sdk/session.py +408 -0
  561. contextsynapse/sdk/tracked.py +218 -0
  562. contextsynapse/sdk/worker.py +266 -0
  563. contextsynapse/sdk/workspace_client.py +98 -0
  564. contextsynapse/sdk/ws.py +41 -0
  565. contextsynapse/search/__init__.py +20 -0
  566. contextsynapse/search/embedding_cache.py +140 -0
  567. contextsynapse/search/enhanced_search.py +152 -0
  568. contextsynapse/search/fulltext.py +130 -0
  569. contextsynapse/search/graph_search.py +634 -0
  570. contextsynapse/search/lmdb_index.py +1218 -0
  571. contextsynapse/search/nl_to_aiql.py +199 -0
  572. contextsynapse/search/rag.py +1346 -0
  573. contextsynapse/search/rag_cache.py +167 -0
  574. contextsynapse/search/reasoning_chain.py +231 -0
  575. contextsynapse/search/redis_search.py +207 -0
  576. contextsynapse/search/retrieval_quality.py +314 -0
  577. contextsynapse/search/semantic_query.py +455 -0
  578. contextsynapse/search/text_resolver.py +159 -0
  579. contextsynapse/search/whoosh_search.py +373 -0
  580. contextsynapse/security/__init__.py +17 -0
  581. contextsynapse/security/audit.py +297 -0
  582. contextsynapse/security/audit_logger.py +97 -0
  583. contextsynapse/security/audit_trail.py +270 -0
  584. contextsynapse/security/auth_unified.py +284 -0
  585. contextsynapse/security/auto_tagger.py +230 -0
  586. contextsynapse/security/data_security.py +218 -0
  587. contextsynapse/security/encryption.py +207 -0
  588. contextsynapse/security/identity.py +447 -0
  589. contextsynapse/security/jwt_identity.py +59 -0
  590. contextsynapse/security/middleware.py +336 -0
  591. contextsynapse/security/pii.py +233 -0
  592. contextsynapse/security/rbac.py +96 -0
  593. contextsynapse/security/rls.py +205 -0
  594. contextsynapse/security/sanitize.py +233 -0
  595. contextsynapse/security/scoped_encryption.py +131 -0
  596. contextsynapse/security/tenant.py +401 -0
  597. contextsynapse/shield/__init__.py +21 -0
  598. contextsynapse/shield/anomaly.py +56 -0
  599. contextsynapse/shield/permissions.py +99 -0
  600. contextsynapse/shield/profile.py +103 -0
  601. contextsynapse/shield/shield.py +108 -0
  602. contextsynapse/shield/trust_engine.py +69 -0
  603. contextsynapse/skills/__init__.py +14 -0
  604. contextsynapse/skills/engine.py +233 -0
  605. contextsynapse/skills/loader.py +59 -0
  606. contextsynapse/skills/models.py +139 -0
  607. contextsynapse/storage/__init__.py +7 -0
  608. contextsynapse/storage/cache.py +208 -0
  609. contextsynapse/storage/columnar_store_v2.py +178 -0
  610. contextsynapse/storage/csr_graph_storage.py +587 -0
  611. contextsynapse/storage/csr_store.py +388 -0
  612. contextsynapse/storage/document_store.py +491 -0
  613. contextsynapse/storage/hnsw_index.py +294 -0
  614. contextsynapse/storage/hybrid_store_v2.py +278 -0
  615. contextsynapse/storage/lmdb_graph_storage.py +366 -0
  616. contextsynapse/storage/migration.py +279 -0
  617. contextsynapse/storage/namespace_store.py +346 -0
  618. contextsynapse/storage/pure_graph_storage.py +185 -0
  619. contextsynapse/storage/redis_graph_adapter.py +186 -0
  620. contextsynapse/storage/redis_graph_storage.py +375 -0
  621. contextsynapse/storage/router/__init__.py +29 -0
  622. contextsynapse/storage/router/duckdb_store.py +398 -0
  623. contextsynapse/storage/router/factory.py +83 -0
  624. contextsynapse/storage/router/interface.py +125 -0
  625. contextsynapse/storage/router/postgres_store.py +339 -0
  626. contextsynapse/storage/router/resolver.py +192 -0
  627. contextsynapse/storage/router/router.py +300 -0
  628. contextsynapse/storage/single_file_storage.py +391 -0
  629. contextsynapse/storage/storage_manager.py +214 -0
  630. contextsynapse/storage/storage_query_optimizer.py +314 -0
  631. contextsynapse/storage/wal.py +359 -0
  632. contextsynapse/temporal/__init__.py +0 -0
  633. contextsynapse/temporal/storage.py +106 -0
  634. contextsynapse/tests/__init__.py +11 -0
  635. contextsynapse/tests/regression/__init__.py +1 -0
  636. contextsynapse/tests/regression/add_metadata.py +395 -0
  637. contextsynapse/tests/regression/add_skip_flags.py +85 -0
  638. contextsynapse/tests/regression/cases/test_basic_create_node.yaml +20 -0
  639. contextsynapse/tests/regression/cases/test_basic_select.yaml +21 -0
  640. contextsynapse/tests/regression/cases/test_blockchain_audit_trail.yaml +37 -0
  641. contextsynapse/tests/regression/cases/test_blockchain_audit_trail_filtered.yaml +39 -0
  642. contextsynapse/tests/regression/cases/test_blockchain_blocks_range.yaml +39 -0
  643. contextsynapse/tests/regression/cases/test_blockchain_get_block.yaml +35 -0
  644. contextsynapse/tests/regression/cases/test_blockchain_latest_block.yaml +35 -0
  645. contextsynapse/tests/regression/cases/test_blockchain_length.yaml +37 -0
  646. contextsynapse/tests/regression/cases/test_blockchain_merkle_root.yaml +37 -0
  647. contextsynapse/tests/regression/cases/test_blockchain_verify.yaml +35 -0
  648. contextsynapse/tests/regression/cases/test_blockchain_verify_block.yaml +35 -0
  649. contextsynapse/tests/regression/cases/test_create_edge.yaml +28 -0
  650. contextsynapse/tests/regression/cases/test_delete_edge_basic.yaml +29 -0
  651. contextsynapse/tests/regression/cases/test_delete_node_basic.yaml +29 -0
  652. contextsynapse/tests/regression/cases/test_evaluation_mrr.yaml +40 -0
  653. contextsynapse/tests/regression/cases/test_evaluation_ndcg.yaml +40 -0
  654. contextsynapse/tests/regression/cases/test_evaluation_precision.yaml +40 -0
  655. contextsynapse/tests/regression/cases/test_evaluation_recall.yaml +40 -0
  656. contextsynapse/tests/regression/cases/test_group_by_basic.yaml +56 -0
  657. contextsynapse/tests/regression/cases/test_match_node_basic.yaml +29 -0
  658. contextsynapse/tests/regression/cases/test_match_node_with_order_limit.yaml +31 -0
  659. contextsynapse/tests/regression/cases/test_namespace_switch.yaml +18 -0
  660. contextsynapse/tests/regression/cases/test_pipeline_cascaded.yaml +61 -0
  661. contextsynapse/tests/regression/cases/test_pipeline_fixed_size_chunking.yaml +48 -0
  662. contextsynapse/tests/regression/cases/test_pipeline_gpt4_chunking.yaml +54 -0
  663. contextsynapse/tests/regression/cases/test_pipeline_hybrid_indexing.yaml +57 -0
  664. contextsynapse/tests/regression/cases/test_pipeline_large_embedding.yaml +52 -0
  665. contextsynapse/tests/regression/cases/test_pipeline_paragraph_chunking.yaml +49 -0
  666. contextsynapse/tests/regression/cases/test_pipeline_recursive_chunking.yaml +47 -0
  667. contextsynapse/tests/regression/cases/test_pipeline_run_pipeline.yaml +56 -0
  668. contextsynapse/tests/regression/cases/test_pipeline_section_based_chunking.yaml +53 -0
  669. contextsynapse/tests/regression/cases/test_pipeline_semantic_chunking.yaml +51 -0
  670. contextsynapse/tests/regression/cases/test_pipeline_with_entity_extraction.yaml +57 -0
  671. contextsynapse/tests/regression/cases/test_pipeline_with_relationships.yaml +62 -0
  672. contextsynapse/tests/regression/cases/test_rag_evaluation.yaml +38 -0
  673. contextsynapse/tests/regression/cases/test_rag_graph_bfs_with_eval.yaml +48 -0
  674. contextsynapse/tests/regression/cases/test_rag_graph_centrality.yaml +40 -0
  675. contextsynapse/tests/regression/cases/test_rag_graph_centrality_eval.yaml +35 -0
  676. contextsynapse/tests/regression/cases/test_rag_graph_community.yaml +40 -0
  677. contextsynapse/tests/regression/cases/test_rag_graph_community_eval.yaml +35 -0
  678. contextsynapse/tests/regression/cases/test_rag_graph_dfs_with_eval.yaml +35 -0
  679. contextsynapse/tests/regression/cases/test_rag_graph_multi_hop_eval.yaml +35 -0
  680. contextsynapse/tests/regression/cases/test_rag_graph_path.yaml +40 -0
  681. contextsynapse/tests/regression/cases/test_rag_graph_search_basic.yaml +38 -0
  682. contextsynapse/tests/regression/cases/test_rag_graph_search_bfs.yaml +52 -0
  683. contextsynapse/tests/regression/cases/test_rag_graph_search_dfs.yaml +41 -0
  684. contextsynapse/tests/regression/cases/test_rag_graph_search_multi_hop.yaml +43 -0
  685. contextsynapse/tests/regression/cases/test_rag_graph_search_shortest_path.yaml +41 -0
  686. contextsynapse/tests/regression/cases/test_rag_graph_search_weighted.yaml +43 -0
  687. contextsynapse/tests/regression/cases/test_rag_graph_shortest_path_eval.yaml +35 -0
  688. contextsynapse/tests/regression/cases/test_rag_graph_traversal.yaml +30 -0
  689. contextsynapse/tests/regression/cases/test_rag_graph_weighted_eval.yaml +35 -0
  690. contextsynapse/tests/regression/cases/test_rag_hybrid_search.yaml +33 -0
  691. contextsynapse/tests/regression/cases/test_rag_hybrid_with_prompt_embedding.yaml +44 -0
  692. contextsynapse/tests/regression/cases/test_rag_keyword_search.yaml +32 -0
  693. contextsynapse/tests/regression/cases/test_rag_multi_hop_graph.yaml +32 -0
  694. contextsynapse/tests/regression/cases/test_rag_path_based.yaml +34 -0
  695. contextsynapse/tests/regression/cases/test_rag_profile_based.yaml +32 -0
  696. contextsynapse/tests/regression/cases/test_rag_vector_search.yaml +32 -0
  697. contextsynapse/tests/regression/cases/test_rag_weighted_graph.yaml +34 -0
  698. contextsynapse/tests/regression/cases/test_rag_weighted_hybrid.yaml +31 -0
  699. contextsynapse/tests/regression/cases/test_semantic_boundary_chunking.yaml +57 -0
  700. contextsynapse/tests/regression/cases/test_semantic_boundary_detection.yaml +33 -0
  701. contextsynapse/tests/regression/cases/test_semantic_hash_function.yaml +30 -0
  702. contextsynapse/tests/regression/cases/test_semantic_hash_with_model.yaml +31 -0
  703. contextsynapse/tests/regression/cases/test_tcs_ingestion_fixed_size.yaml +44 -0
  704. contextsynapse/tests/regression/cases/test_tcs_ingestion_recursive.yaml +46 -0
  705. contextsynapse/tests/regression/cases/test_tcs_ingestion_section.yaml +46 -0
  706. contextsynapse/tests/regression/cases/test_tcs_ingestion_semantic.yaml +44 -0
  707. contextsynapse/tests/regression/cases/test_time_travel_as_of.yaml +35 -0
  708. contextsynapse/tests/regression/cases/test_time_travel_at_commit.yaml +33 -0
  709. contextsynapse/tests/regression/cases/test_time_travel_at_timestamp.yaml +33 -0
  710. contextsynapse/tests/regression/cases/test_time_travel_for_system_time_all.yaml +37 -0
  711. contextsynapse/tests/regression/cases/test_time_travel_versions_between.yaml +39 -0
  712. contextsynapse/tests/regression/cases/test_traverse_basic.yaml +31 -0
  713. contextsynapse/tests/regression/cases/test_traverse_max_depth.yaml +34 -0
  714. contextsynapse/tests/regression/cases/test_update_edge_basic.yaml +29 -0
  715. contextsynapse/tests/regression/evaluation_metrics.py +227 -0
  716. contextsynapse/tests/regression/regression_runner.py +1081 -0
  717. contextsynapse/tests/regression/setup_regression_data.py +212 -0
  718. contextsynapse/tests/regression/test_basic_only.py +84 -0
  719. contextsynapse/tests/regression/test_namespace_creation.py +29 -0
  720. contextsynapse/tests/regression/test_single_fix.py +61 -0
  721. contextsynapse/tests/regression/test_single_query.py +20 -0
  722. contextsynapse/tests/regression/validate_test_syntax.py +179 -0
  723. contextsynapse/tests/test_advanced_features.py +347 -0
  724. contextsynapse/tests/test_aiql_summary.py +283 -0
  725. contextsynapse/tests/test_all_aiql_queries.py +948 -0
  726. contextsynapse/tests/test_all_create_queries.py +213 -0
  727. contextsynapse/tests/test_api_vs_native.py +280 -0
  728. contextsynapse/tests/test_chunking_dedup.py +199 -0
  729. contextsynapse/tests/test_connectors.py +171 -0
  730. contextsynapse/tests/test_edges_and_match.py +202 -0
  731. contextsynapse/tests/test_extraction_pipeline_integration.py +581 -0
  732. contextsynapse/tests/test_name_property.py +224 -0
  733. contextsynapse/tests/test_node_edge_metadata.py +250 -0
  734. contextsynapse/tests/test_playground_conn.py +114 -0
  735. contextsynapse/tests/test_query_cache.py +213 -0
  736. contextsynapse/tests/test_source_policy_auth.py +348 -0
  737. contextsynapse/tests/test_temporal_and_domain.py +224 -0
  738. contextsynapse/tests/test_time_travel_e2e.py +571 -0
  739. contextsynapse/tests/test_traversal_and_aggregation.py +275 -0
  740. contextsynapse/tools/__init__.py +36 -0
  741. contextsynapse/tools/a2a_tools.py +106 -0
  742. contextsynapse/tools/cognition_tools.py +118 -0
  743. contextsynapse/tools/context.py +905 -0
  744. contextsynapse/tools/formatting.py +92 -0
  745. contextsynapse/tools/gateway_tools.py +186 -0
  746. contextsynapse/tools/graph.py +1700 -0
  747. contextsynapse/tools/intelligence.py +235 -0
  748. contextsynapse/tools/memory.py +118 -0
  749. contextsynapse/tools/registry.py +373 -0
  750. contextsynapse/tools/shield_tools.py +159 -0
  751. contextsynapse/tools/tasks.py +341 -0
  752. contextsynapse/tools/workspace_tools.py +124 -0
  753. contextsynapse/utils/__init__.py +15 -0
  754. contextsynapse/utils/config_loader.py +198 -0
  755. contextsynapse/utils/env_loader.py +156 -0
  756. contextsynapse/utils/file_utils.py +288 -0
  757. contextsynapse/utils/logging_optimizer.py +119 -0
  758. contextsynapse/vector/__init__.py +30 -0
  759. contextsynapse/vector/chroma_vector_store.py +152 -0
  760. contextsynapse/vector/custom_vector_store.py +537 -0
  761. contextsynapse/vector/faiss_vector_store.py +296 -0
  762. contextsynapse/vector/qdrant_vector_store.py +163 -0
  763. contextsynapse/vector/vector_db.py +953 -0
  764. contextsynapse/vector/vector_db_manager.py +197 -0
  765. contextsynapse/workspace/__init__.py +27 -0
  766. contextsynapse/workspace/base.py +94 -0
  767. contextsynapse/workspace/git.py +228 -0
  768. contextsynapse/workspace/github.py +78 -0
  769. contextsynapse/workspace/local.py +73 -0
  770. contextsynapse/workspace/tools.py +222 -0
  771. contextsynapse-1.0.0.dist-info/METADATA +847 -0
  772. contextsynapse-1.0.0.dist-info/RECORD +776 -0
  773. contextsynapse-1.0.0.dist-info/WHEEL +5 -0
  774. contextsynapse-1.0.0.dist-info/entry_points.txt +4 -0
  775. contextsynapse-1.0.0.dist-info/licenses/LICENSE +200 -0
  776. contextsynapse-1.0.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,953 @@
1
+ """
2
+ AIContextDB Universal Vector Database System
3
+ Self-contained universal vector database with multiple provider support.
4
+ Extracted and adapted from QGraph Universal Vector Database.
5
+ """
6
+
7
+ import asyncio
8
+ import numpy as np
9
+ import logging
10
+ from typing import Dict, List, Any, Optional, Union, Tuple, Callable
11
+ from dataclasses import dataclass
12
+ from enum import Enum
13
+ import time
14
+ import hashlib
15
+ from datetime import datetime
16
+ import json
17
+ import threading
18
+ from collections import defaultdict
19
+ import os
20
+
21
+ # Try to import various vector database libraries
22
+ try:
23
+ import faiss
24
+ FAISS_AVAILABLE = True
25
+ except ImportError:
26
+ FAISS_AVAILABLE = False
27
+
28
+ try:
29
+ import chromadb
30
+ CHROMA_AVAILABLE = True
31
+ except ImportError:
32
+ CHROMA_AVAILABLE = False
33
+
34
+ try:
35
+ import pinecone
36
+ PINECONE_AVAILABLE = True
37
+ except ImportError:
38
+ PINECONE_AVAILABLE = False
39
+
40
+ try:
41
+ import weaviate
42
+ WEAVIATE_AVAILABLE = True
43
+ except ImportError:
44
+ WEAVIATE_AVAILABLE = False
45
+
46
+ try:
47
+ import qdrant_client
48
+ QDRANT_AVAILABLE = True
49
+ except ImportError:
50
+ QDRANT_AVAILABLE = False
51
+
52
+ logger = logging.getLogger(__name__)
53
+
54
+ class VectorDBProvider(Enum):
55
+ """Supported vector database providers."""
56
+ FAISS = "faiss"
57
+ CHROMA = "chroma"
58
+ PINECONE = "pinecone"
59
+ WEAVIATE = "weaviate"
60
+ QDRANT = "qdrant"
61
+ CUSTOM = "custom"
62
+
63
+ @dataclass
64
+ class VectorDBCapabilities:
65
+ """Vector database capabilities."""
66
+ supports_metadata: bool = True
67
+ supports_filtering: bool = True
68
+ supports_batch_operations: bool = True
69
+ supports_upsert: bool = True
70
+ supports_delete: bool = True
71
+ supports_update: bool = True
72
+ supports_similarity_search: bool = True
73
+ supports_hybrid_search: bool = False
74
+ supports_quantization: bool = False
75
+ supports_sharding: bool = False
76
+ max_dimensions: int = 2048
77
+ max_vectors: int = 1000000
78
+
79
+ @dataclass
80
+ class VectorDBConfig:
81
+ """Configuration for universal vector database manager."""
82
+ default_provider: VectorDBProvider = VectorDBProvider.FAISS
83
+ providers: Dict[VectorDBProvider, Dict[str, Any]] = None
84
+ dimension: int = 768
85
+ metric: str = "cosine" # cosine, euclidean, dot
86
+ batch_size: int = 1000
87
+ enable_compression: bool = False
88
+ enable_quantization: bool = False
89
+ enable_sharding: bool = False
90
+ shard_count: int = 4
91
+ cache_size: int = 10000
92
+ enable_logging: bool = True
93
+
94
+ @dataclass
95
+ class VectorResult:
96
+ """Result of vector database operation."""
97
+ success: bool
98
+ data: Any = None
99
+ error: Optional[str] = None
100
+ metadata: Dict[str, Any] = None
101
+
102
+ class AIContextDBUniversalVectorDBManager:
103
+ """
104
+ AIContextDB Universal vector database manager that supports any vector database provider.
105
+ """
106
+
107
+ def __init__(self, config: Optional[VectorDBConfig] = None):
108
+ self.config = config or VectorDBConfig()
109
+ self.providers = {} # provider -> instance
110
+ self.collections = {} # collection_name -> provider
111
+ self.usage_stats = defaultdict(int)
112
+ self.lock = threading.Lock()
113
+
114
+ # Initialize providers
115
+ self._initialize_providers()
116
+
117
+ logger.info("AIContextDB Universal Vector DB Manager initialized")
118
+
119
+ def _initialize_providers(self) -> None:
120
+ """Initialize vector database providers."""
121
+ # FAISS
122
+ if FAISS_AVAILABLE:
123
+ self.providers[VectorDBProvider.FAISS] = self._create_faiss_provider()
124
+
125
+ # Chroma
126
+ if CHROMA_AVAILABLE:
127
+ self.providers[VectorDBProvider.CHROMA] = self._create_chroma_provider()
128
+
129
+ # Pinecone
130
+ if PINECONE_AVAILABLE:
131
+ self.providers[VectorDBProvider.PINECONE] = self._create_pinecone_provider()
132
+
133
+ # Weaviate
134
+ if WEAVIATE_AVAILABLE:
135
+ self.providers[VectorDBProvider.WEAVIATE] = self._create_weaviate_provider()
136
+
137
+ # Qdrant
138
+ if QDRANT_AVAILABLE:
139
+ self.providers[VectorDBProvider.QDRANT] = self._create_qdrant_provider()
140
+
141
+ def _create_faiss_provider(self) -> Dict[str, Any]:
142
+ """Create FAISS provider."""
143
+ return {
144
+ "type": "faiss",
145
+ "indexes": {},
146
+ "capabilities": VectorDBCapabilities(
147
+ supports_metadata=True,
148
+ supports_filtering=False,
149
+ supports_batch_operations=True,
150
+ supports_upsert=True,
151
+ supports_delete=True,
152
+ supports_update=True,
153
+ supports_similarity_search=True,
154
+ supports_hybrid_search=False,
155
+ supports_quantization=True,
156
+ supports_sharding=False,
157
+ max_dimensions=2048,
158
+ max_vectors=1000000
159
+ )
160
+ }
161
+
162
+ def _create_chroma_provider(self) -> Dict[str, Any]:
163
+ """Create Chroma provider."""
164
+ return {
165
+ "type": "chroma",
166
+ "client": None, # Will be initialized when needed
167
+ "capabilities": VectorDBCapabilities(
168
+ supports_metadata=True,
169
+ supports_filtering=True,
170
+ supports_batch_operations=True,
171
+ supports_upsert=True,
172
+ supports_delete=True,
173
+ supports_update=True,
174
+ supports_similarity_search=True,
175
+ supports_hybrid_search=True,
176
+ supports_quantization=False,
177
+ supports_sharding=True,
178
+ max_dimensions=2048,
179
+ max_vectors=10000000
180
+ )
181
+ }
182
+
183
+ def _create_pinecone_provider(self) -> Dict[str, Any]:
184
+ """Create Pinecone provider."""
185
+ return {
186
+ "type": "pinecone",
187
+ "client": None, # Will be initialized when needed
188
+ "capabilities": VectorDBCapabilities(
189
+ supports_metadata=True,
190
+ supports_filtering=True,
191
+ supports_batch_operations=True,
192
+ supports_upsert=True,
193
+ supports_delete=True,
194
+ supports_update=True,
195
+ supports_similarity_search=True,
196
+ supports_hybrid_search=True,
197
+ supports_quantization=False,
198
+ supports_sharding=True,
199
+ max_dimensions=2048,
200
+ max_vectors=100000000
201
+ )
202
+ }
203
+
204
+ def _create_weaviate_provider(self) -> Dict[str, Any]:
205
+ """Create Weaviate provider."""
206
+ return {
207
+ "type": "weaviate",
208
+ "client": None, # Will be initialized when needed
209
+ "capabilities": VectorDBCapabilities(
210
+ supports_metadata=True,
211
+ supports_filtering=True,
212
+ supports_batch_operations=True,
213
+ supports_upsert=True,
214
+ supports_delete=True,
215
+ supports_update=True,
216
+ supports_similarity_search=True,
217
+ supports_hybrid_search=True,
218
+ supports_quantization=False,
219
+ supports_sharding=True,
220
+ max_dimensions=2048,
221
+ max_vectors=100000000
222
+ )
223
+ }
224
+
225
+ def _create_qdrant_provider(self) -> Dict[str, Any]:
226
+ """Create Qdrant provider."""
227
+ return {
228
+ "type": "qdrant",
229
+ "client": None, # Will be initialized when needed
230
+ "capabilities": VectorDBCapabilities(
231
+ supports_metadata=True,
232
+ supports_filtering=True,
233
+ supports_batch_operations=True,
234
+ supports_upsert=True,
235
+ supports_delete=True,
236
+ supports_update=True,
237
+ supports_similarity_search=True,
238
+ supports_hybrid_search=True,
239
+ supports_quantization=True,
240
+ supports_sharding=True,
241
+ max_dimensions=2048,
242
+ max_vectors=100000000
243
+ )
244
+ }
245
+
246
+ async def create_collection(self, collection_name: str,
247
+ dimension: Optional[int] = None,
248
+ provider: Optional[VectorDBProvider] = None) -> bool:
249
+ """Create a new collection."""
250
+ try:
251
+ if provider is None:
252
+ provider = self.config.default_provider
253
+
254
+ if dimension is None:
255
+ dimension = self.config.dimension
256
+
257
+ # Check if collection already exists
258
+ if collection_name in self.collections:
259
+ logger.warning(f"Collection {collection_name} already exists")
260
+ return False
261
+
262
+ # Create collection with provider
263
+ success = await self._create_collection_with_provider(
264
+ collection_name, dimension, provider
265
+ )
266
+
267
+ if success:
268
+ self.collections[collection_name] = provider
269
+ self.usage_stats[f"collections_created_{provider.value}"] += 1
270
+ logger.info(f"Created collection {collection_name} with {provider.value}")
271
+
272
+ return success
273
+
274
+ except Exception as e:
275
+ logger.error(f"Error creating collection {collection_name}: {e}")
276
+ return False
277
+
278
+ async def _create_collection_with_provider(self, collection_name: str,
279
+ dimension: int,
280
+ provider: VectorDBProvider) -> bool:
281
+ """Create collection with specific provider."""
282
+ if provider == VectorDBProvider.FAISS:
283
+ return await self._create_faiss_collection(collection_name, dimension)
284
+ elif provider == VectorDBProvider.CHROMA:
285
+ return await self._create_chroma_collection(collection_name, dimension)
286
+ elif provider == VectorDBProvider.PINECONE:
287
+ return await self._create_pinecone_collection(collection_name, dimension)
288
+ elif provider == VectorDBProvider.WEAVIATE:
289
+ return await self._create_weaviate_collection(collection_name, dimension)
290
+ elif provider == VectorDBProvider.QDRANT:
291
+ return await self._create_qdrant_collection(collection_name, dimension)
292
+ else:
293
+ raise ValueError(f"Unsupported provider: {provider}")
294
+
295
+ async def _create_faiss_collection(self, collection_name: str, dimension: int) -> bool:
296
+ """Create FAISS collection."""
297
+ if not FAISS_AVAILABLE:
298
+ raise ImportError("FAISS library not available")
299
+
300
+ try:
301
+ # Create FAISS index
302
+ if self.config.metric == "cosine":
303
+ index = faiss.IndexFlatIP(dimension) # Inner product for cosine similarity
304
+ elif self.config.metric == "euclidean":
305
+ index = faiss.IndexFlatL2(dimension) # L2 distance for euclidean
306
+ else:
307
+ index = faiss.IndexFlatIP(dimension) # Default to inner product
308
+
309
+ # Store index
310
+ self.providers[VectorDBProvider.FAISS]["indexes"][collection_name] = {
311
+ "index": index,
312
+ "dimension": dimension,
313
+ "vectors": [],
314
+ "metadata": []
315
+ }
316
+
317
+ return True
318
+
319
+ except Exception as e:
320
+ logger.error(f"Error creating FAISS collection: {e}")
321
+ return False
322
+
323
+ async def _create_chroma_collection(self, collection_name: str, dimension: int) -> bool:
324
+ """Create Chroma collection."""
325
+ if not CHROMA_AVAILABLE:
326
+ raise ImportError("Chroma library not available")
327
+
328
+ try:
329
+ # Initialize Chroma client if not already done
330
+ if self.providers[VectorDBProvider.CHROMA]["client"] is None:
331
+ client = chromadb.Client()
332
+ self.providers[VectorDBProvider.CHROMA]["client"] = client
333
+
334
+ client = self.providers[VectorDBProvider.CHROMA]["client"]
335
+
336
+ # Create collection
337
+ collection = client.create_collection(
338
+ name=collection_name,
339
+ metadata={"dimension": dimension}
340
+ )
341
+
342
+ # Store collection reference
343
+ self.providers[VectorDBProvider.CHROMA]["collections"] = self.providers[VectorDBProvider.CHROMA].get("collections", {})
344
+ self.providers[VectorDBProvider.CHROMA]["collections"][collection_name] = collection
345
+
346
+ return True
347
+
348
+ except Exception as e:
349
+ logger.error(f"Error creating Chroma collection: {e}")
350
+ return False
351
+
352
+ async def _create_pinecone_collection(self, collection_name: str, dimension: int) -> bool:
353
+ """Create Pinecone collection."""
354
+ if not PINECONE_AVAILABLE:
355
+ raise ImportError("Pinecone library not available")
356
+
357
+ try:
358
+ # Initialize Pinecone client if not already done
359
+ if self.providers[VectorDBProvider.PINECONE]["client"] is None:
360
+ pinecone.init(
361
+ api_key=self.config.providers.get(VectorDBProvider.PINECONE, {}).get("api_key"),
362
+ environment=self.config.providers.get(VectorDBProvider.PINECONE, {}).get("environment")
363
+ )
364
+ client = pinecone.Index(collection_name)
365
+ self.providers[VectorDBProvider.PINECONE]["client"] = client
366
+
367
+ # Create index
368
+ pinecone.create_index(
369
+ name=collection_name,
370
+ dimension=dimension,
371
+ metric=self.config.metric
372
+ )
373
+
374
+ return True
375
+
376
+ except Exception as e:
377
+ logger.error(f"Error creating Pinecone collection: {e}")
378
+ return False
379
+
380
+ async def _create_weaviate_collection(self, collection_name: str, dimension: int) -> bool:
381
+ """Create Weaviate collection."""
382
+ if not WEAVIATE_AVAILABLE:
383
+ raise ImportError("Weaviate library not available")
384
+
385
+ try:
386
+ # Initialize Weaviate client if not already done
387
+ if self.providers[VectorDBProvider.WEAVIATE]["client"] is None:
388
+ client = weaviate.Client(
389
+ url=self.config.providers.get(VectorDBProvider.WEAVIATE, {}).get("url", "http://localhost:8080")
390
+ )
391
+ self.providers[VectorDBProvider.WEAVIATE]["client"] = client
392
+
393
+ client = self.providers[VectorDBProvider.WEAVIATE]["client"]
394
+
395
+ # Create schema
396
+ schema = {
397
+ "class": collection_name,
398
+ "vectorizer": "none", # We'll provide vectors manually
399
+ "properties": [
400
+ {"name": "text", "dataType": ["text"]},
401
+ {"name": "metadata", "dataType": ["object"]}
402
+ ]
403
+ }
404
+
405
+ client.schema.create_class(schema)
406
+
407
+ return True
408
+
409
+ except Exception as e:
410
+ logger.error(f"Error creating Weaviate collection: {e}")
411
+ return False
412
+
413
+ async def _create_qdrant_collection(self, collection_name: str, dimension: int) -> bool:
414
+ """Create Qdrant collection."""
415
+ if not QDRANT_AVAILABLE:
416
+ raise ImportError("Qdrant library not available")
417
+
418
+ try:
419
+ # Initialize Qdrant client if not already done
420
+ if self.providers[VectorDBProvider.QDRANT]["client"] is None:
421
+ client = qdrant_client.QdrantClient(
422
+ url=self.config.providers.get(VectorDBProvider.QDRANT, {}).get("url", "http://localhost:6333")
423
+ )
424
+ self.providers[VectorDBProvider.QDRANT]["client"] = client
425
+
426
+ client = self.providers[VectorDBProvider.QDRANT]["client"]
427
+
428
+ # Create collection
429
+ client.create_collection(
430
+ collection_name=collection_name,
431
+ vectors_config=qdrant_client.VectorParams(
432
+ size=dimension,
433
+ distance=qdrant_client.Distance.COSINE if self.config.metric == "cosine" else qdrant_client.Distance.EUCLID
434
+ )
435
+ )
436
+
437
+ return True
438
+
439
+ except Exception as e:
440
+ logger.error(f"Error creating Qdrant collection: {e}")
441
+ return False
442
+
443
+ async def insert_vectors(self, collection_name: str,
444
+ vectors: List[List[float]],
445
+ ids: Optional[List[str]] = None,
446
+ metadata: Optional[List[Dict[str, Any]]] = None) -> bool:
447
+ """Insert vectors into collection."""
448
+ try:
449
+ if collection_name not in self.collections:
450
+ logger.error(f"Collection {collection_name} does not exist")
451
+ return False
452
+
453
+ provider = self.collections[collection_name]
454
+
455
+ # Generate IDs if not provided
456
+ if ids is None:
457
+ ids = [f"vector_{i}_{int(time.time())}" for i in range(len(vectors))]
458
+
459
+ # Generate metadata if not provided
460
+ if metadata is None:
461
+ metadata = [{} for _ in range(len(vectors))]
462
+
463
+ # Insert with provider
464
+ success = await self._insert_vectors_with_provider(
465
+ collection_name, vectors, ids, metadata, provider
466
+ )
467
+
468
+ if success:
469
+ self.usage_stats[f"vectors_inserted_{provider.value}"] += len(vectors)
470
+ logger.info(f"Inserted {len(vectors)} vectors into {collection_name}")
471
+
472
+ return success
473
+
474
+ except Exception as e:
475
+ logger.error(f"Error inserting vectors: {e}")
476
+ return False
477
+
478
+ async def _insert_vectors_with_provider(self, collection_name: str,
479
+ vectors: List[List[float]],
480
+ ids: List[str],
481
+ metadata: List[Dict[str, Any]],
482
+ provider: VectorDBProvider) -> bool:
483
+ """Insert vectors with specific provider."""
484
+ if provider == VectorDBProvider.FAISS:
485
+ return await self._insert_faiss_vectors(collection_name, vectors, ids, metadata)
486
+ elif provider == VectorDBProvider.CHROMA:
487
+ return await self._insert_chroma_vectors(collection_name, vectors, ids, metadata)
488
+ elif provider == VectorDBProvider.PINECONE:
489
+ return await self._insert_pinecone_vectors(collection_name, vectors, ids, metadata)
490
+ elif provider == VectorDBProvider.WEAVIATE:
491
+ return await self._insert_weaviate_vectors(collection_name, vectors, ids, metadata)
492
+ elif provider == VectorDBProvider.QDRANT:
493
+ return await self._insert_qdrant_vectors(collection_name, vectors, ids, metadata)
494
+ else:
495
+ raise ValueError(f"Unsupported provider: {provider}")
496
+
497
+ async def _insert_faiss_vectors(self, collection_name: str,
498
+ vectors: List[List[float]],
499
+ ids: List[str],
500
+ metadata: List[Dict[str, Any]]) -> bool:
501
+ """Insert vectors into FAISS collection."""
502
+ try:
503
+ collection_data = self.providers[VectorDBProvider.FAISS]["indexes"][collection_name]
504
+ index = collection_data["index"]
505
+
506
+ # Convert to numpy array
507
+ vectors_array = np.array(vectors, dtype=np.float32)
508
+
509
+ # Add vectors to index
510
+ index.add(vectors_array)
511
+
512
+ # Store metadata
513
+ collection_data["vectors"].extend(vectors)
514
+ collection_data["metadata"].extend(metadata)
515
+
516
+ return True
517
+
518
+ except Exception as e:
519
+ logger.error(f"Error inserting FAISS vectors: {e}")
520
+ return False
521
+
522
+ async def _insert_chroma_vectors(self, collection_name: str,
523
+ vectors: List[List[float]],
524
+ ids: List[str],
525
+ metadata: List[Dict[str, Any]]) -> bool:
526
+ """Insert vectors into Chroma collection."""
527
+ try:
528
+ collection = self.providers[VectorDBProvider.CHROMA]["collections"][collection_name]
529
+
530
+ # Prepare data for Chroma
531
+ documents = [meta.get("text", "") for meta in metadata]
532
+ metadatas = [meta for meta in metadata]
533
+
534
+ # Add vectors
535
+ collection.add(
536
+ embeddings=vectors,
537
+ documents=documents,
538
+ metadatas=metadatas,
539
+ ids=ids
540
+ )
541
+
542
+ return True
543
+
544
+ except Exception as e:
545
+ logger.error(f"Error inserting Chroma vectors: {e}")
546
+ return False
547
+
548
+ async def _insert_pinecone_vectors(self, collection_name: str,
549
+ vectors: List[List[float]],
550
+ ids: List[str],
551
+ metadata: List[Dict[str, Any]]) -> bool:
552
+ """Insert vectors into Pinecone collection."""
553
+ try:
554
+ index = self.providers[VectorDBProvider.PINECONE]["client"]
555
+
556
+ # Prepare data for Pinecone
557
+ vectors_data = []
558
+ for i, (vector, vector_id, meta) in enumerate(zip(vectors, ids, metadata)):
559
+ vectors_data.append({
560
+ "id": vector_id,
561
+ "values": vector,
562
+ "metadata": meta
563
+ })
564
+
565
+ # Upsert vectors
566
+ index.upsert(vectors=vectors_data)
567
+
568
+ return True
569
+
570
+ except Exception as e:
571
+ logger.error(f"Error inserting Pinecone vectors: {e}")
572
+ return False
573
+
574
+ async def _insert_weaviate_vectors(self, collection_name: str,
575
+ vectors: List[List[float]],
576
+ ids: List[str],
577
+ metadata: List[Dict[str, Any]]) -> bool:
578
+ """Insert vectors into Weaviate collection."""
579
+ try:
580
+ client = self.providers[VectorDBProvider.WEAVIATE]["client"]
581
+
582
+ # Prepare data for Weaviate
583
+ objects = []
584
+ for i, (vector, vector_id, meta) in enumerate(zip(vectors, ids, metadata)):
585
+ objects.append({
586
+ "class": collection_name,
587
+ "id": vector_id,
588
+ "vector": vector,
589
+ "properties": {
590
+ "text": meta.get("text", ""),
591
+ "metadata": meta
592
+ }
593
+ })
594
+
595
+ # Batch insert
596
+ client.batch.create_objects(objects)
597
+
598
+ return True
599
+
600
+ except Exception as e:
601
+ logger.error(f"Error inserting Weaviate vectors: {e}")
602
+ return False
603
+
604
+ async def _insert_qdrant_vectors(self, collection_name: str,
605
+ vectors: List[List[float]],
606
+ ids: List[str],
607
+ metadata: List[Dict[str, Any]]) -> bool:
608
+ """Insert vectors into Qdrant collection."""
609
+ try:
610
+ client = self.providers[VectorDBProvider.QDRANT]["client"]
611
+
612
+ # Prepare data for Qdrant
613
+ points = []
614
+ for i, (vector, vector_id, meta) in enumerate(zip(vectors, ids, metadata)):
615
+ points.append(qdrant_client.PointStruct(
616
+ id=vector_id,
617
+ vector=vector,
618
+ payload=meta
619
+ ))
620
+
621
+ # Upsert points
622
+ client.upsert(
623
+ collection_name=collection_name,
624
+ points=points
625
+ )
626
+
627
+ return True
628
+
629
+ except Exception as e:
630
+ logger.error(f"Error inserting Qdrant vectors: {e}")
631
+ return False
632
+
633
+ async def search_vectors(self, collection_name: str,
634
+ query_vector: List[float],
635
+ top_k: int = 10,
636
+ filter_conditions: Optional[Dict[str, Any]] = None) -> List[Dict[str, Any]]:
637
+ """Search for similar vectors."""
638
+ try:
639
+ if collection_name not in self.collections:
640
+ logger.error(f"Collection {collection_name} does not exist")
641
+ return []
642
+
643
+ provider = self.collections[collection_name]
644
+
645
+ # Search with provider
646
+ results = await self._search_vectors_with_provider(
647
+ collection_name, query_vector, top_k, filter_conditions, provider
648
+ )
649
+
650
+ # Update usage stats
651
+ self.usage_stats[f"searches_performed_{provider.value}"] += 1
652
+
653
+ return results
654
+
655
+ except Exception as e:
656
+ logger.error(f"Error searching vectors: {e}")
657
+ return []
658
+
659
+ async def _search_vectors_with_provider(self, collection_name: str,
660
+ query_vector: List[float],
661
+ top_k: int,
662
+ filter_conditions: Optional[Dict[str, Any]],
663
+ provider: VectorDBProvider) -> List[Dict[str, Any]]:
664
+ """Search vectors with specific provider."""
665
+ if provider == VectorDBProvider.FAISS:
666
+ return await self._search_faiss_vectors(collection_name, query_vector, top_k)
667
+ elif provider == VectorDBProvider.CHROMA:
668
+ return await self._search_chroma_vectors(collection_name, query_vector, top_k, filter_conditions)
669
+ elif provider == VectorDBProvider.PINECONE:
670
+ return await self._search_pinecone_vectors(collection_name, query_vector, top_k, filter_conditions)
671
+ elif provider == VectorDBProvider.WEAVIATE:
672
+ return await self._search_weaviate_vectors(collection_name, query_vector, top_k, filter_conditions)
673
+ elif provider == VectorDBProvider.QDRANT:
674
+ return await self._search_qdrant_vectors(collection_name, query_vector, top_k, filter_conditions)
675
+ else:
676
+ raise ValueError(f"Unsupported provider: {provider}")
677
+
678
+ async def _search_faiss_vectors(self, collection_name: str,
679
+ query_vector: List[float],
680
+ top_k: int) -> List[Dict[str, Any]]:
681
+ """Search vectors in FAISS collection."""
682
+ try:
683
+ collection_data = self.providers[VectorDBProvider.FAISS]["indexes"][collection_name]
684
+ index = collection_data["index"]
685
+
686
+ # Convert query to numpy array
687
+ query_array = np.array([query_vector], dtype=np.float32)
688
+
689
+ # Search
690
+ distances, indices = index.search(query_array, top_k)
691
+
692
+ # Prepare results
693
+ results = []
694
+ for i, (distance, idx) in enumerate(zip(distances[0], indices[0])):
695
+ if idx < len(collection_data["vectors"]):
696
+ results.append({
697
+ "id": f"vector_{idx}",
698
+ "distance": float(distance),
699
+ "vector": collection_data["vectors"][idx],
700
+ "metadata": collection_data["metadata"][idx]
701
+ })
702
+
703
+ return results
704
+
705
+ except Exception as e:
706
+ logger.error(f"Error searching FAISS vectors: {e}")
707
+ return []
708
+
709
+ async def _search_chroma_vectors(self, collection_name: str,
710
+ query_vector: List[float],
711
+ top_k: int,
712
+ filter_conditions: Optional[Dict[str, Any]]) -> List[Dict[str, Any]]:
713
+ """Search vectors in Chroma collection."""
714
+ try:
715
+ collection = self.providers[VectorDBProvider.CHROMA]["collections"][collection_name]
716
+
717
+ # Search
718
+ results = collection.query(
719
+ query_embeddings=[query_vector],
720
+ n_results=top_k,
721
+ where=filter_conditions
722
+ )
723
+
724
+ # Prepare results
725
+ search_results = []
726
+ for i in range(len(results["ids"][0])):
727
+ search_results.append({
728
+ "id": results["ids"][0][i],
729
+ "distance": results["distances"][0][i],
730
+ "vector": results["embeddings"][0][i],
731
+ "metadata": results["metadatas"][0][i]
732
+ })
733
+
734
+ return search_results
735
+
736
+ except Exception as e:
737
+ logger.error(f"Error searching Chroma vectors: {e}")
738
+ return []
739
+
740
+ async def _search_pinecone_vectors(self, collection_name: str,
741
+ query_vector: List[float],
742
+ top_k: int,
743
+ filter_conditions: Optional[Dict[str, Any]]) -> List[Dict[str, Any]]:
744
+ """Search vectors in Pinecone collection."""
745
+ try:
746
+ index = self.providers[VectorDBProvider.PINECONE]["client"]
747
+
748
+ # Search
749
+ results = index.query(
750
+ vector=query_vector,
751
+ top_k=top_k,
752
+ include_metadata=True,
753
+ filter=filter_conditions
754
+ )
755
+
756
+ # Prepare results
757
+ search_results = []
758
+ for match in results["matches"]:
759
+ search_results.append({
760
+ "id": match["id"],
761
+ "distance": match["score"],
762
+ "vector": match["values"],
763
+ "metadata": match["metadata"]
764
+ })
765
+
766
+ return search_results
767
+
768
+ except Exception as e:
769
+ logger.error(f"Error searching Pinecone vectors: {e}")
770
+ return []
771
+
772
+ async def _search_weaviate_vectors(self, collection_name: str,
773
+ query_vector: List[float],
774
+ top_k: int,
775
+ filter_conditions: Optional[Dict[str, Any]]) -> List[Dict[str, Any]]:
776
+ """Search vectors in Weaviate collection."""
777
+ try:
778
+ client = self.providers[VectorDBProvider.WEAVIATE]["client"]
779
+
780
+ # Search
781
+ results = client.query.get(
782
+ collection_name,
783
+ ["text", "metadata"]
784
+ ).with_near_vector({
785
+ "vector": query_vector
786
+ }).with_limit(top_k).do()
787
+
788
+ # Prepare results
789
+ search_results = []
790
+ for obj in results["data"]["Get"][collection_name]:
791
+ search_results.append({
792
+ "id": obj["_additional"]["id"],
793
+ "distance": obj["_additional"]["distance"],
794
+ "vector": query_vector, # Weaviate doesn't return the vector
795
+ "metadata": obj["metadata"]
796
+ })
797
+
798
+ return search_results
799
+
800
+ except Exception as e:
801
+ logger.error(f"Error searching Weaviate vectors: {e}")
802
+ return []
803
+
804
+ async def _search_qdrant_vectors(self, collection_name: str,
805
+ query_vector: List[float],
806
+ top_k: int,
807
+ filter_conditions: Optional[Dict[str, Any]]) -> List[Dict[str, Any]]:
808
+ """Search vectors in Qdrant collection."""
809
+ try:
810
+ client = self.providers[VectorDBProvider.QDRANT]["client"]
811
+
812
+ # Search
813
+ results = client.search(
814
+ collection_name=collection_name,
815
+ query_vector=query_vector,
816
+ limit=top_k,
817
+ query_filter=filter_conditions
818
+ )
819
+
820
+ # Prepare results
821
+ search_results = []
822
+ for point in results:
823
+ search_results.append({
824
+ "id": point.id,
825
+ "distance": point.score,
826
+ "vector": point.vector,
827
+ "metadata": point.payload
828
+ })
829
+
830
+ return search_results
831
+
832
+ except Exception as e:
833
+ logger.error(f"Error searching Qdrant vectors: {e}")
834
+ return []
835
+
836
+ def get_collection_info(self, collection_name: str) -> Optional[Dict[str, Any]]:
837
+ """Get information about a collection."""
838
+ if collection_name not in self.collections:
839
+ return None
840
+
841
+ provider = self.collections[collection_name]
842
+ capabilities = self.providers[provider]["capabilities"]
843
+
844
+ return {
845
+ "name": collection_name,
846
+ "provider": provider.value,
847
+ "capabilities": {
848
+ "supports_metadata": capabilities.supports_metadata,
849
+ "supports_filtering": capabilities.supports_filtering,
850
+ "supports_batch_operations": capabilities.supports_batch_operations,
851
+ "supports_upsert": capabilities.supports_upsert,
852
+ "supports_delete": capabilities.supports_delete,
853
+ "supports_update": capabilities.supports_update,
854
+ "supports_similarity_search": capabilities.supports_similarity_search,
855
+ "supports_hybrid_search": capabilities.supports_hybrid_search,
856
+ "supports_quantization": capabilities.supports_quantization,
857
+ "supports_sharding": capabilities.supports_sharding,
858
+ "max_dimensions": capabilities.max_dimensions,
859
+ "max_vectors": capabilities.max_vectors
860
+ }
861
+ }
862
+
863
+ def get_available_providers(self) -> List[VectorDBProvider]:
864
+ """Get list of available providers."""
865
+ return list(self.providers.keys())
866
+
867
+ def get_usage_stats(self) -> Dict[str, Any]:
868
+ """Get usage statistics."""
869
+ return {
870
+ "collections": len(self.collections),
871
+ "providers": {provider.value: "available" for provider in self.providers.keys()},
872
+ "usage_stats": dict(self.usage_stats)
873
+ }
874
+
875
+ async def close(self) -> None:
876
+ """Close all connections."""
877
+ # Close provider connections
878
+ for provider in self.providers.values():
879
+ if provider.get("client"):
880
+ # Close client connections
881
+ pass
882
+
883
+ logger.info("AIContextDB Universal Vector DB Manager closed")
884
+
885
+ # Legacy compatibility classes
886
+ class VectorConfig(VectorDBConfig):
887
+ """Legacy compatibility."""
888
+ pass
889
+
890
+ class AIContextDBVectorDB:
891
+ """Legacy compatibility wrapper."""
892
+
893
+ def __init__(self, config: VectorConfig):
894
+ """Initialize with legacy config."""
895
+ self.config = config
896
+ self.manager = AIContextDBUniversalVectorDBManager(config)
897
+ self.logger = logging.getLogger(f"{__name__}.AIContextDBVectorDB")
898
+
899
+ async def create_collection(self, name: str, dimension: int = None) -> VectorResult:
900
+ """Create collection with legacy interface."""
901
+ try:
902
+ success = await self.manager.create_collection(name, dimension)
903
+ return VectorResult(success=success, data={"name": name} if success else None)
904
+ except Exception as e:
905
+ return VectorResult(success=False, error=str(e))
906
+
907
+ async def add_vector(self, collection: str, vector: List[float],
908
+ vector_id: str = None, metadata: Dict[str, Any] = None) -> VectorResult:
909
+ """Add vector with legacy interface."""
910
+ try:
911
+ success = await self.manager.insert_vectors(
912
+ collection, [vector], [vector_id] if vector_id else None, [metadata] if metadata else None
913
+ )
914
+ return VectorResult(success=success, data={"id": vector_id} if success else None)
915
+ except Exception as e:
916
+ return VectorResult(success=False, error=str(e))
917
+
918
+ async def search_vectors(self, collection: str, query_vector: List[float],
919
+ top_k: int = 10, threshold: float = 0.0) -> VectorResult:
920
+ """Search vectors with legacy interface."""
921
+ try:
922
+ results = await self.manager.search_vectors(collection, query_vector, top_k)
923
+ # Filter by threshold
924
+ filtered_results = [r for r in results if (1.0 - r.get("distance", 1.0)) >= threshold]
925
+ return VectorResult(success=True, data=filtered_results)
926
+ except Exception as e:
927
+ return VectorResult(success=False, error=str(e))
928
+
929
+ def get_collection_info(self, collection: str) -> VectorResult:
930
+ """Get collection info with legacy interface."""
931
+ try:
932
+ info = self.manager.get_collection_info(collection)
933
+ return VectorResult(success=info is not None, data=info)
934
+ except Exception as e:
935
+ return VectorResult(success=False, error=str(e))
936
+
937
+ def get_stats(self) -> Dict[str, Any]:
938
+ """Get stats with legacy interface."""
939
+ return self.manager.get_usage_stats()
940
+
941
+ # Global instances
942
+ def get_vector_db(config: VectorConfig) -> AIContextDBVectorDB:
943
+ """Get a vector database instance."""
944
+ return AIContextDBVectorDB(config)
945
+
946
+ def create_vector_db(backend: VectorDBProvider, dimension: int = 768) -> AIContextDBVectorDB:
947
+ """Create a vector database instance."""
948
+ config = VectorConfig(default_provider=backend, dimension=dimension)
949
+ return AIContextDBVectorDB(config)
950
+
951
+ def get_universal_vector_db(config: VectorDBConfig = None) -> AIContextDBUniversalVectorDBManager:
952
+ """Get the universal vector database manager."""
953
+ return AIContextDBUniversalVectorDBManager(config)