cortexdbai 0.10.1__tar.gz → 0.10.3__tar.gz

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 (95) hide show
  1. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/PKG-INFO +2 -2
  2. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/README.md +1 -1
  3. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/__init__.py +71 -71
  4. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/v1/client.py +57 -2
  5. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/pyproject.toml +186 -186
  6. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/.gitignore +0 -0
  7. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/__init__.py +0 -0
  8. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/ag2/__init__.py +0 -0
  9. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/ag2/agent.py +0 -0
  10. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/ag2/tools.py +0 -0
  11. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/agno/__init__.py +0 -0
  12. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/agno/memory.py +0 -0
  13. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/agno/tools.py +0 -0
  14. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/autogen/__init__.py +0 -0
  15. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/autogen/agent.py +0 -0
  16. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/autogen/tools.py +0 -0
  17. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/beeai/__init__.py +0 -0
  18. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/beeai/memory.py +0 -0
  19. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/beeai/tools.py +0 -0
  20. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/camel/__init__.py +0 -0
  21. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/camel/memory.py +0 -0
  22. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/camel/tools.py +0 -0
  23. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/controlflow/__init__.py +0 -0
  24. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/controlflow/memory.py +0 -0
  25. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/crewai/__init__.py +0 -0
  26. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/crewai/memory.py +0 -0
  27. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/crewai/tools.py +0 -0
  28. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/deepinfra/__init__.py +0 -0
  29. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/deepinfra/config.py +0 -0
  30. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/deepinfra/embeddings.py +0 -0
  31. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/deepinfra/openai_compat.py +0 -0
  32. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/dify/__init__.py +0 -0
  33. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/dify/manifest.yaml +0 -0
  34. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/dify/tool.py +0 -0
  35. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/dspy/__init__.py +0 -0
  36. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/dspy/memory.py +0 -0
  37. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/dspy/retriever.py +0 -0
  38. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/fireworks/__init__.py +0 -0
  39. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/fireworks/config.py +0 -0
  40. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/fireworks/embeddings.py +0 -0
  41. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/fireworks/openai_compat.py +0 -0
  42. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/flowise/__init__.py +0 -0
  43. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/flowise/node.py +0 -0
  44. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/google_adk/__init__.py +0 -0
  45. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/google_adk/tools.py +0 -0
  46. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/groq/__init__.py +0 -0
  47. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/groq/config.py +0 -0
  48. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/groq/embeddings.py +0 -0
  49. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/groq/openai_compat.py +0 -0
  50. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/hermes/__init__.py +0 -0
  51. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/hermes/provider.py +0 -0
  52. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/instructor/__init__.py +0 -0
  53. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/instructor/memory.py +0 -0
  54. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/langchain/__init__.py +0 -0
  55. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/langchain/memory.py +0 -0
  56. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/langchain/retriever.py +0 -0
  57. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/langchain/tools.py +0 -0
  58. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/langgraph/__init__.py +0 -0
  59. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/langgraph/memory.py +0 -0
  60. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/letta/__init__.py +0 -0
  61. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/letta/storage.py +0 -0
  62. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/llamaindex/__init__.py +0 -0
  63. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/llamaindex/memory.py +0 -0
  64. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/nemo_guardrails/__init__.py +0 -0
  65. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/nemo_guardrails/actions.py +0 -0
  66. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/nemo_guardrails/knowledge_base.py +0 -0
  67. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/ollama/__init__.py +0 -0
  68. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/ollama/config.py +0 -0
  69. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/ollama/embeddings.py +0 -0
  70. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/openai_agents/__init__.py +0 -0
  71. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/openai_agents/tools.py +0 -0
  72. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/prefect/__init__.py +0 -0
  73. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/prefect/blocks.py +0 -0
  74. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/prefect/tasks.py +0 -0
  75. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/pydanticai/__init__.py +0 -0
  76. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/pydanticai/dependencies.py +0 -0
  77. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/pydanticai/tools.py +0 -0
  78. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/smolagents/__init__.py +0 -0
  79. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/smolagents/tools.py +0 -0
  80. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/temporal/__init__.py +0 -0
  81. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/temporal/activities.py +0 -0
  82. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/temporal/interceptor.py +0 -0
  83. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/together/__init__.py +0 -0
  84. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/together/config.py +0 -0
  85. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/together/embeddings.py +0 -0
  86. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/together/openai_compat.py +0 -0
  87. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/vllm/__init__.py +0 -0
  88. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/vllm/config.py +0 -0
  89. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/vllm/embeddings.py +0 -0
  90. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/vllm/openai_compat.py +0 -0
  91. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/py.typed +0 -0
  92. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/v1/__init__.py +0 -0
  93. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/v1/exceptions.py +0 -0
  94. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/tests/__init__.py +0 -0
  95. {cortexdbai-0.10.1 → cortexdbai-0.10.3}/tests/test_conflicts.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cortexdbai
3
- Version: 0.10.1
3
+ Version: 0.10.3
4
4
  Summary: The Long-Term Memory Layer for AI Systems
5
5
  Project-URL: Homepage, https://cortexdb.ai
6
6
  Project-URL: Documentation, https://docs.cortexdb.ai
@@ -187,7 +187,7 @@ ans = c.answer("ws:demo", "What changed in payments recently?")
187
187
 
188
188
  # Forget — GDPR erasure. confirm_all wipes the whole scope.
189
189
  c.forget("ws:demo", confirm_all=True, cascade="redact_events",
190
- audit_note="GDPR Article 17 request")
190
+ reason="GDPR Article 17 request")
191
191
 
192
192
  # Layer reads (paginated { items, has_more }).
193
193
  c.events("ws:demo")
@@ -74,7 +74,7 @@ ans = c.answer("ws:demo", "What changed in payments recently?")
74
74
 
75
75
  # Forget — GDPR erasure. confirm_all wipes the whole scope.
76
76
  c.forget("ws:demo", confirm_all=True, cascade="redact_events",
77
- audit_note="GDPR Article 17 request")
77
+ reason="GDPR Article 17 request")
78
78
 
79
79
  # Layer reads (paginated { items, has_more }).
80
80
  c.events("ws:demo")
@@ -1,71 +1,71 @@
1
- """CortexDB Python SDK — the long-term memory layer for AI systems.
2
-
3
- The SDK is a thin HTTP client over the v1 API surface that cortexdb
4
- exposes by default on port 3141. The top-level :class:`Cortex` class
5
- (alias :class:`V1Client`) is what you should reach for.
6
-
7
- Quick start::
8
-
9
- from cortexdb import Cortex
10
-
11
- # Local docker run with no auth (CORTEX_API_KEY unset on the server):
12
- with Cortex("http://localhost:3141") as c:
13
- c.experience("ws:demo", text="Priya at Acme signed for 200 seats.")
14
- pack = c.recall("ws:demo", query="How many seats did Acme sign for?")
15
- print(pack)
16
-
17
- # Hosted / multi-tenant deployment with PASETO bearer + actor header:
18
- with Cortex(
19
- "https://api-v1.cortexdb.ai",
20
- actor="user:alice",
21
- bearer="eyJ...",
22
- ) as c:
23
- out = c.answer(
24
- "org:initech/user:alice",
25
- question="What did Alice say about coffee?",
26
- )
27
-
28
- Versions ≤ 0.2.x exposed a separate ``cortexdb.Cortex`` class targeting
29
- the legacy ``/v1/remember`` endpoints. That surface was retired in 0.3.0
30
- because the cortexdb binary's public port now only serves the v1 API;
31
- the legacy endpoints survive only as an internal bench-compat helper.
32
- If you need them, pin ``cortexdbai<0.3``.
33
- """
34
-
35
- from cortexdb.v1 import V1Client, AsyncV1Client
36
- from cortexdb.v1.exceptions import (
37
- V1APIError,
38
- V1AuthError,
39
- V1ConnectionError,
40
- V1Error,
41
- V1NotConfiguredError,
42
- V1PolicyDeniedError,
43
- V1RateLimitError,
44
- V1TimeoutError,
45
- )
46
- from cortexdb import v1 # the explicit submodule namespace
47
-
48
- # Ergonomic top-level aliases. New code can write either form.
49
- Cortex = V1Client
50
- AsyncCortex = AsyncV1Client
51
-
52
- __version__ = "0.10.1"
53
- __all__ = [
54
- # Clients (preferred top-level names)
55
- "Cortex",
56
- "AsyncCortex",
57
- # Explicit v1 names (identical classes, kept for code that pinned them)
58
- "V1Client",
59
- "AsyncV1Client",
60
- # Submodule
61
- "v1",
62
- # Exceptions
63
- "V1Error",
64
- "V1APIError",
65
- "V1AuthError",
66
- "V1ConnectionError",
67
- "V1TimeoutError",
68
- "V1RateLimitError",
69
- "V1NotConfiguredError",
70
- "V1PolicyDeniedError",
71
- ]
1
+ """CortexDB Python SDK — the long-term memory layer for AI systems.
2
+
3
+ The SDK is a thin HTTP client over the v1 API surface that cortexdb
4
+ exposes by default on port 3141. The top-level :class:`Cortex` class
5
+ (alias :class:`V1Client`) is what you should reach for.
6
+
7
+ Quick start::
8
+
9
+ from cortexdb import Cortex
10
+
11
+ # Local docker run with no auth (CORTEX_API_KEY unset on the server):
12
+ with Cortex("http://localhost:3141") as c:
13
+ c.experience("ws:demo", text="Priya at Acme signed for 200 seats.")
14
+ pack = c.recall("ws:demo", query="How many seats did Acme sign for?")
15
+ print(pack)
16
+
17
+ # Hosted / multi-tenant deployment with PASETO bearer + actor header:
18
+ with Cortex(
19
+ "https://api-v1.cortexdb.ai",
20
+ actor="user:alice",
21
+ bearer="eyJ...",
22
+ ) as c:
23
+ out = c.answer(
24
+ "org:initech/user:alice",
25
+ question="What did Alice say about coffee?",
26
+ )
27
+
28
+ Versions ≤ 0.2.x exposed a separate ``cortexdb.Cortex`` class targeting
29
+ the legacy ``/v1/remember`` endpoints. That surface was retired in 0.3.0
30
+ because the cortexdb binary's public port now only serves the v1 API;
31
+ the legacy endpoints survive only as an internal bench-compat helper.
32
+ If you need them, pin ``cortexdbai<0.3``.
33
+ """
34
+
35
+ from cortexdb.v1 import V1Client, AsyncV1Client
36
+ from cortexdb.v1.exceptions import (
37
+ V1APIError,
38
+ V1AuthError,
39
+ V1ConnectionError,
40
+ V1Error,
41
+ V1NotConfiguredError,
42
+ V1PolicyDeniedError,
43
+ V1RateLimitError,
44
+ V1TimeoutError,
45
+ )
46
+ from cortexdb import v1 # the explicit submodule namespace
47
+
48
+ # Ergonomic top-level aliases. New code can write either form.
49
+ Cortex = V1Client
50
+ AsyncCortex = AsyncV1Client
51
+
52
+ __version__ = "0.10.3"
53
+ __all__ = [
54
+ # Clients (preferred top-level names)
55
+ "Cortex",
56
+ "AsyncCortex",
57
+ # Explicit v1 names (identical classes, kept for code that pinned them)
58
+ "V1Client",
59
+ "AsyncV1Client",
60
+ # Submodule
61
+ "v1",
62
+ # Exceptions
63
+ "V1Error",
64
+ "V1APIError",
65
+ "V1AuthError",
66
+ "V1ConnectionError",
67
+ "V1TimeoutError",
68
+ "V1RateLimitError",
69
+ "V1NotConfiguredError",
70
+ "V1PolicyDeniedError",
71
+ ]
@@ -384,7 +384,9 @@ class V1Client:
384
384
  processor. A ``triple`` (subject/predicate/object dict, see
385
385
  :func:`_envelope`) writes a fact deterministically — no LLM extractor
386
386
  in the loop (server >= v0.7.0). ``wait`` selects sync semantics:
387
- ``captured``, ``indexed``, ``consolidated``."""
387
+ ``captured``, ``indexed``, ``consolidated`` (``accepted`` is a valid
388
+ alias for the omitted default on server >= v0.8.7; anything else
389
+ 422s listing the valid values)."""
388
390
  env = _envelope(
389
391
  scope,
390
392
  role=role,
@@ -443,6 +445,24 @@ class V1Client:
443
445
  _raise_for_response(r.status_code, r.text)
444
446
  return r.json() if r.text else {}
445
447
 
448
+ def delete_blob(self, blob_id: str) -> dict:
449
+ """``DELETE /v1/blobs/{id}`` — purge an uploaded object.
450
+
451
+ Only the uploader may delete a blob; someone else's blob answers
452
+ 404. Note that forgetting the experience which referenced a blob
453
+ removes the *memory*, not the *object* — deleting a file that was
454
+ uploaded here means both calls."""
455
+ try:
456
+ r = self._session.delete(
457
+ f"{self.api_url}/v1/blobs/{blob_id}", timeout=self.timeout
458
+ )
459
+ except requests.Timeout as e:
460
+ raise V1TimeoutError(str(e)) from e
461
+ except requests.ConnectionError as e:
462
+ raise V1ConnectionError(str(e)) from e
463
+ _raise_for_response(r.status_code, r.text)
464
+ return r.json() if r.text else {}
465
+
446
466
  def experience_bulk(
447
467
  self,
448
468
  scope: str,
@@ -458,7 +478,10 @@ class V1Client:
458
478
  ``wait`` turns the batch into a barrier: pass ``"indexed"`` (or
459
479
  ``"consolidated"`` etc.) to block until every accepted event reaches
460
480
  that stage before returning — the batch analogue of
461
- :meth:`experience`'s ``wait``, ideal for bulk-ingest-then-recall."""
481
+ :meth:`experience`'s ``wait``, ideal for bulk-ingest-then-recall.
482
+ Items whose envelope carries a ``triple`` write their facts
483
+ deterministically in bulk too (server >= v0.8.7; older servers only
484
+ did this on the single-write endpoint)."""
462
485
  envelopes = [
463
486
  _envelope(
464
487
  scope=str(item.get("scope", scope)),
@@ -900,6 +923,25 @@ class V1Client:
900
923
  Requires ``diagnostics.read``. Stability: ``experimental``."""
901
924
  return self._get("/v1/admin/layers/stats")
902
925
 
926
+ def index_audit(
927
+ self,
928
+ *,
929
+ repair: bool = False,
930
+ scope: Optional[str] = None,
931
+ ) -> dict:
932
+ """``POST /v1/admin/index-audit`` — WAL↔search-index self-audit.
933
+ Reports events whose search-index entries are missing; with
934
+ ``repair=True`` re-indexes them from stored state (server >= v0.8.7
935
+ also rebuilds missing content rows from the WAL event content).
936
+ ``scope`` restricts the audit and repair to one scope subtree
937
+ (honored on server >= v0.8.7; silently ignored before). Requires
938
+ ``diagnostics.read``. Synchronous full-WAL walk — can take seconds
939
+ to minutes on a large store. Stability: ``experimental``."""
940
+ body: dict = {"repair": repair}
941
+ if scope is not None:
942
+ body["scope"] = scope
943
+ return self._post("/v1/admin/index-audit", body)
944
+
903
945
  # ── low-level transport ──────────────────────────────────────────
904
946
 
905
947
  def _get(
@@ -1104,6 +1146,19 @@ class AsyncV1Client:
1104
1146
  _raise_for_response(r.status_code, r.text)
1105
1147
  return r.json() if r.text else {}
1106
1148
 
1149
+ async def delete_blob(self, blob_id: str) -> dict:
1150
+ """``DELETE /v1/blobs/{id}`` — purge an uploaded object (uploader
1151
+ only). Forgetting the referencing experience removes the memory, not
1152
+ the object; deleting an uploaded file means both calls."""
1153
+ try:
1154
+ r = await self._client.delete(f"{self.api_url}/v1/blobs/{blob_id}")
1155
+ except httpx.TimeoutException as e:
1156
+ raise V1TimeoutError(str(e)) from e
1157
+ except httpx.HTTPError as e:
1158
+ raise V1ConnectionError(str(e)) from e
1159
+ _raise_for_response(r.status_code, r.text)
1160
+ return r.json() if r.text else {}
1161
+
1107
1162
  async def recall(
1108
1163
  self,
1109
1164
  scope: str,
@@ -1,186 +1,186 @@
1
- [build-system]
2
- requires = ["hatchling"]
3
- build-backend = "hatchling.build"
4
-
5
- [project]
6
- name = "cortexdbai"
7
- version = "0.10.1"
8
- description = "The Long-Term Memory Layer for AI Systems"
9
- readme = "README.md"
10
- license = "Apache-2.0"
11
- # 3.10+: the v1 module uses PEP 604 unions (`str | None`) in TypedDict
12
- # field annotations, which Python 3.9 cannot evaluate at class-definition
13
- # time even with `from __future__ import annotations`. Python 3.9 hit
14
- # end-of-life on 2025-10-31. Declaring >=3.10 means `pip install
15
- # cortexdbai` on 3.9 fails immediately with a clear "requires Python
16
- # 3.10+" error from pip — not a silent install followed by an obscure
17
- # `TypeError: Unable to evaluate type annotation 'str | None'` on the
18
- # first import.
19
- requires-python = ">=3.10"
20
- authors = [
21
- { name = "Prashant Malik", email = "prashant@cortexdb.ai" },
22
- ]
23
- keywords = ["ai", "memory", "llm", "knowledge-graph", "event-sourcing", "cortexdb"]
24
- classifiers = [
25
- "Development Status :: 4 - Beta",
26
- "Intended Audience :: Developers",
27
- "Programming Language :: Python :: 3",
28
- "Programming Language :: Python :: 3.10",
29
- "Programming Language :: Python :: 3.11",
30
- "Programming Language :: Python :: 3.12",
31
- "Programming Language :: Python :: 3.13",
32
- "Topic :: Scientific/Engineering :: Artificial Intelligence",
33
- "Topic :: Database",
34
- "Typing :: Typed",
35
- ]
36
- dependencies = [
37
- "requests>=2.31",
38
- "httpx>=0.24",
39
- "pydantic>=2.0",
40
- "tenacity>=8.0",
41
- ]
42
-
43
- [project.optional-dependencies]
44
- async = [
45
- "httpx[http2]",
46
- ]
47
- dev = [
48
- "pytest>=8.0",
49
- "pytest-asyncio>=0.23",
50
- "ruff>=0.4",
51
- ]
52
-
53
- # --- Framework / provider integrations -------------------------------------
54
- # Each extra pulls in only the third-party framework needed by the matching
55
- # submodule under `cortexdb.integrations.<name>`. The CortexDB client itself
56
- # is always the base package, so it is never listed here. Nothing under
57
- # `cortexdb.integrations` is imported at `import cortexdb` time — importing a
58
- # submodule without its extra raises a clean ModuleNotFoundError.
59
- autogen = [
60
- "ag2>=0.4",
61
- ]
62
- ag2 = [
63
- "ag2>=0.4",
64
- ]
65
- agno = [
66
- "agno>=1.0",
67
- ]
68
- langchain = [
69
- "langchain-core>=0.3",
70
- ]
71
- beeai = [
72
- "beeai-framework>=0.1",
73
- ]
74
- camel = [
75
- "camel-ai>=0.2",
76
- ]
77
- controlflow = [
78
- "controlflow>=0.11",
79
- ]
80
- crewai = [
81
- "crewai>=0.80",
82
- ]
83
- dify = []
84
- dspy = [
85
- "dspy>=2.0",
86
- ]
87
- flowise = []
88
- google-adk = [
89
- "google-adk>=0.1",
90
- ]
91
- hermes = []
92
- instructor = [
93
- "instructor>=1.0",
94
- "pydantic>=2.0",
95
- ]
96
- langgraph = [
97
- "langchain-core>=0.3",
98
- "langgraph-checkpoint>=2.0",
99
- ]
100
- letta = [
101
- "letta>=0.1",
102
- ]
103
- llamaindex = [
104
- "llama-index-core>=0.11",
105
- ]
106
- nemo-guardrails = [
107
- "nemoguardrails>=0.9",
108
- ]
109
- openai-agents = [
110
- "openai-agents>=0.1",
111
- ]
112
- prefect = [
113
- "prefect>=3.0",
114
- ]
115
- pydanticai = [
116
- "pydantic-ai>=0.1",
117
- ]
118
- smolagents = [
119
- "smolagents>=1.0",
120
- ]
121
- temporal = [
122
- "temporalio>=1.7",
123
- ]
124
- groq = [
125
- "httpx>=0.27",
126
- ]
127
- fireworks = [
128
- "httpx>=0.27",
129
- ]
130
- together = [
131
- "httpx>=0.27",
132
- ]
133
- deepinfra = [
134
- "httpx>=0.27",
135
- ]
136
- ollama = [
137
- "httpx>=0.27",
138
- ]
139
- vllm = [
140
- "httpx>=0.27",
141
- ]
142
- # Convenience: every framework/provider integration at once.
143
- all-integrations = [
144
- "ag2>=0.4",
145
- "agno>=1.0",
146
- "langchain-core>=0.3",
147
- "beeai-framework>=0.1",
148
- "camel-ai>=0.2",
149
- "controlflow>=0.11",
150
- "crewai>=0.80",
151
- "dspy>=2.0",
152
- "google-adk>=0.1",
153
- "instructor>=1.0",
154
- "langchain-core>=0.3",
155
- "langgraph-checkpoint>=2.0",
156
- "letta>=0.1",
157
- "llama-index-core>=0.11",
158
- "nemoguardrails>=0.9",
159
- "openai-agents>=0.1",
160
- "prefect>=3.0",
161
- "pydantic-ai>=0.1",
162
- "smolagents>=1.0",
163
- "temporalio>=1.7",
164
- "httpx>=0.27",
165
- ]
166
-
167
- [project.urls]
168
- Homepage = "https://cortexdb.ai"
169
- Documentation = "https://docs.cortexdb.ai"
170
- Repository = "https://github.com/cortexdb/cortexdb"
171
- Issues = "https://github.com/cortexdb/cortexdb/issues"
172
- Changelog = "https://github.com/cortexdb/cortexdb/blob/main/CHANGELOG.md"
173
-
174
- [tool.hatch.build.targets.wheel]
175
- packages = ["cortexdb"]
176
-
177
- [tool.ruff]
178
- target-version = "py310"
179
- line-length = 100
180
-
181
- [tool.ruff.lint]
182
- select = ["E", "F", "W", "I", "N", "UP", "B", "A", "SIM", "TCH"]
183
-
184
- [tool.pytest.ini_options]
185
- asyncio_mode = "auto"
186
- testpaths = ["tests"]
1
+ [build-system]
2
+ requires = ["hatchling"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "cortexdbai"
7
+ version = "0.10.3"
8
+ description = "The Long-Term Memory Layer for AI Systems"
9
+ readme = "README.md"
10
+ license = "Apache-2.0"
11
+ # 3.10+: the v1 module uses PEP 604 unions (`str | None`) in TypedDict
12
+ # field annotations, which Python 3.9 cannot evaluate at class-definition
13
+ # time even with `from __future__ import annotations`. Python 3.9 hit
14
+ # end-of-life on 2025-10-31. Declaring >=3.10 means `pip install
15
+ # cortexdbai` on 3.9 fails immediately with a clear "requires Python
16
+ # 3.10+" error from pip — not a silent install followed by an obscure
17
+ # `TypeError: Unable to evaluate type annotation 'str | None'` on the
18
+ # first import.
19
+ requires-python = ">=3.10"
20
+ authors = [
21
+ { name = "Prashant Malik", email = "prashant@cortexdb.ai" },
22
+ ]
23
+ keywords = ["ai", "memory", "llm", "knowledge-graph", "event-sourcing", "cortexdb"]
24
+ classifiers = [
25
+ "Development Status :: 4 - Beta",
26
+ "Intended Audience :: Developers",
27
+ "Programming Language :: Python :: 3",
28
+ "Programming Language :: Python :: 3.10",
29
+ "Programming Language :: Python :: 3.11",
30
+ "Programming Language :: Python :: 3.12",
31
+ "Programming Language :: Python :: 3.13",
32
+ "Topic :: Scientific/Engineering :: Artificial Intelligence",
33
+ "Topic :: Database",
34
+ "Typing :: Typed",
35
+ ]
36
+ dependencies = [
37
+ "requests>=2.31",
38
+ "httpx>=0.24",
39
+ "pydantic>=2.0",
40
+ "tenacity>=8.0",
41
+ ]
42
+
43
+ [project.optional-dependencies]
44
+ async = [
45
+ "httpx[http2]",
46
+ ]
47
+ dev = [
48
+ "pytest>=8.0",
49
+ "pytest-asyncio>=0.23",
50
+ "ruff>=0.4",
51
+ ]
52
+
53
+ # --- Framework / provider integrations -------------------------------------
54
+ # Each extra pulls in only the third-party framework needed by the matching
55
+ # submodule under `cortexdb.integrations.<name>`. The CortexDB client itself
56
+ # is always the base package, so it is never listed here. Nothing under
57
+ # `cortexdb.integrations` is imported at `import cortexdb` time — importing a
58
+ # submodule without its extra raises a clean ModuleNotFoundError.
59
+ autogen = [
60
+ "ag2>=0.4",
61
+ ]
62
+ ag2 = [
63
+ "ag2>=0.4",
64
+ ]
65
+ agno = [
66
+ "agno>=1.0",
67
+ ]
68
+ langchain = [
69
+ "langchain-core>=0.3",
70
+ ]
71
+ beeai = [
72
+ "beeai-framework>=0.1",
73
+ ]
74
+ camel = [
75
+ "camel-ai>=0.2",
76
+ ]
77
+ controlflow = [
78
+ "controlflow>=0.11",
79
+ ]
80
+ crewai = [
81
+ "crewai>=0.80",
82
+ ]
83
+ dify = []
84
+ dspy = [
85
+ "dspy>=2.0",
86
+ ]
87
+ flowise = []
88
+ google-adk = [
89
+ "google-adk>=0.1",
90
+ ]
91
+ hermes = []
92
+ instructor = [
93
+ "instructor>=1.0",
94
+ "pydantic>=2.0",
95
+ ]
96
+ langgraph = [
97
+ "langchain-core>=0.3",
98
+ "langgraph-checkpoint>=2.0",
99
+ ]
100
+ letta = [
101
+ "letta>=0.1",
102
+ ]
103
+ llamaindex = [
104
+ "llama-index-core>=0.11",
105
+ ]
106
+ nemo-guardrails = [
107
+ "nemoguardrails>=0.9",
108
+ ]
109
+ openai-agents = [
110
+ "openai-agents>=0.1",
111
+ ]
112
+ prefect = [
113
+ "prefect>=3.0",
114
+ ]
115
+ pydanticai = [
116
+ "pydantic-ai>=0.1",
117
+ ]
118
+ smolagents = [
119
+ "smolagents>=1.0",
120
+ ]
121
+ temporal = [
122
+ "temporalio>=1.7",
123
+ ]
124
+ groq = [
125
+ "httpx>=0.27",
126
+ ]
127
+ fireworks = [
128
+ "httpx>=0.27",
129
+ ]
130
+ together = [
131
+ "httpx>=0.27",
132
+ ]
133
+ deepinfra = [
134
+ "httpx>=0.27",
135
+ ]
136
+ ollama = [
137
+ "httpx>=0.27",
138
+ ]
139
+ vllm = [
140
+ "httpx>=0.27",
141
+ ]
142
+ # Convenience: every framework/provider integration at once.
143
+ all-integrations = [
144
+ "ag2>=0.4",
145
+ "agno>=1.0",
146
+ "langchain-core>=0.3",
147
+ "beeai-framework>=0.1",
148
+ "camel-ai>=0.2",
149
+ "controlflow>=0.11",
150
+ "crewai>=0.80",
151
+ "dspy>=2.0",
152
+ "google-adk>=0.1",
153
+ "instructor>=1.0",
154
+ "langchain-core>=0.3",
155
+ "langgraph-checkpoint>=2.0",
156
+ "letta>=0.1",
157
+ "llama-index-core>=0.11",
158
+ "nemoguardrails>=0.9",
159
+ "openai-agents>=0.1",
160
+ "prefect>=3.0",
161
+ "pydantic-ai>=0.1",
162
+ "smolagents>=1.0",
163
+ "temporalio>=1.7",
164
+ "httpx>=0.27",
165
+ ]
166
+
167
+ [project.urls]
168
+ Homepage = "https://cortexdb.ai"
169
+ Documentation = "https://docs.cortexdb.ai"
170
+ Repository = "https://github.com/cortexdb/cortexdb"
171
+ Issues = "https://github.com/cortexdb/cortexdb/issues"
172
+ Changelog = "https://github.com/cortexdb/cortexdb/blob/main/CHANGELOG.md"
173
+
174
+ [tool.hatch.build.targets.wheel]
175
+ packages = ["cortexdb"]
176
+
177
+ [tool.ruff]
178
+ target-version = "py310"
179
+ line-length = 100
180
+
181
+ [tool.ruff.lint]
182
+ select = ["E", "F", "W", "I", "N", "UP", "B", "A", "SIM", "TCH"]
183
+
184
+ [tool.pytest.ini_options]
185
+ asyncio_mode = "auto"
186
+ testpaths = ["tests"]
File without changes