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.
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/PKG-INFO +2 -2
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/README.md +1 -1
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/__init__.py +71 -71
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/v1/client.py +57 -2
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/pyproject.toml +186 -186
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/.gitignore +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/__init__.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/ag2/__init__.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/ag2/agent.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/ag2/tools.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/agno/__init__.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/agno/memory.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/agno/tools.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/autogen/__init__.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/autogen/agent.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/autogen/tools.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/beeai/__init__.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/beeai/memory.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/beeai/tools.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/camel/__init__.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/camel/memory.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/camel/tools.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/controlflow/__init__.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/controlflow/memory.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/crewai/__init__.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/crewai/memory.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/crewai/tools.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/deepinfra/__init__.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/deepinfra/config.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/deepinfra/embeddings.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/deepinfra/openai_compat.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/dify/__init__.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/dify/manifest.yaml +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/dify/tool.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/dspy/__init__.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/dspy/memory.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/dspy/retriever.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/fireworks/__init__.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/fireworks/config.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/fireworks/embeddings.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/fireworks/openai_compat.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/flowise/__init__.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/flowise/node.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/google_adk/__init__.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/google_adk/tools.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/groq/__init__.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/groq/config.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/groq/embeddings.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/groq/openai_compat.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/hermes/__init__.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/hermes/provider.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/instructor/__init__.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/instructor/memory.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/langchain/__init__.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/langchain/memory.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/langchain/retriever.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/langchain/tools.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/langgraph/__init__.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/langgraph/memory.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/letta/__init__.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/letta/storage.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/llamaindex/__init__.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/llamaindex/memory.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/nemo_guardrails/__init__.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/nemo_guardrails/actions.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/nemo_guardrails/knowledge_base.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/ollama/__init__.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/ollama/config.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/ollama/embeddings.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/openai_agents/__init__.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/openai_agents/tools.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/prefect/__init__.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/prefect/blocks.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/prefect/tasks.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/pydanticai/__init__.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/pydanticai/dependencies.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/pydanticai/tools.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/smolagents/__init__.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/smolagents/tools.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/temporal/__init__.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/temporal/activities.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/temporal/interceptor.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/together/__init__.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/together/config.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/together/embeddings.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/together/openai_compat.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/vllm/__init__.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/vllm/config.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/vllm/embeddings.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/vllm/openai_compat.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/py.typed +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/v1/__init__.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/v1/exceptions.py +0 -0
- {cortexdbai-0.10.1 → cortexdbai-0.10.3}/tests/__init__.py +0 -0
- {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.
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cortexdbai-0.10.1 → cortexdbai-0.10.3}/cortexdb/integrations/nemo_guardrails/knowledge_base.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|