cortexdbai 0.6.0__tar.gz → 0.8.0__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.6.0 → cortexdbai-0.8.0}/PKG-INFO +1 -1
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/__init__.py +71 -71
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/v1/client.py +106 -1
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/pyproject.toml +186 -186
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/.gitignore +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/README.md +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/__init__.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/ag2/__init__.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/ag2/agent.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/ag2/tools.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/agno/__init__.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/agno/memory.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/agno/tools.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/autogen/__init__.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/autogen/agent.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/autogen/tools.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/beeai/__init__.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/beeai/memory.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/beeai/tools.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/camel/__init__.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/camel/memory.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/camel/tools.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/controlflow/__init__.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/controlflow/memory.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/crewai/__init__.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/crewai/memory.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/crewai/tools.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/deepinfra/__init__.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/deepinfra/config.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/deepinfra/embeddings.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/deepinfra/openai_compat.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/dify/__init__.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/dify/manifest.yaml +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/dify/tool.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/dspy/__init__.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/dspy/memory.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/dspy/retriever.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/fireworks/__init__.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/fireworks/config.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/fireworks/embeddings.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/fireworks/openai_compat.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/flowise/__init__.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/flowise/node.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/google_adk/__init__.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/google_adk/tools.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/groq/__init__.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/groq/config.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/groq/embeddings.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/groq/openai_compat.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/hermes/__init__.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/hermes/provider.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/instructor/__init__.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/instructor/memory.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/langchain/__init__.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/langchain/memory.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/langchain/retriever.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/langchain/tools.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/langgraph/__init__.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/langgraph/memory.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/letta/__init__.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/letta/storage.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/llamaindex/__init__.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/llamaindex/memory.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/nemo_guardrails/__init__.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/nemo_guardrails/actions.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/nemo_guardrails/knowledge_base.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/ollama/__init__.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/ollama/config.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/ollama/embeddings.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/openai_agents/__init__.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/openai_agents/tools.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/prefect/__init__.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/prefect/blocks.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/prefect/tasks.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/pydanticai/__init__.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/pydanticai/dependencies.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/pydanticai/tools.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/smolagents/__init__.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/smolagents/tools.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/temporal/__init__.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/temporal/activities.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/temporal/interceptor.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/together/__init__.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/together/config.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/together/embeddings.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/together/openai_compat.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/vllm/__init__.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/vllm/config.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/vllm/embeddings.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/vllm/openai_compat.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/py.typed +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/v1/__init__.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/v1/exceptions.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/tests/__init__.py +0 -0
- {cortexdbai-0.6.0 → cortexdbai-0.8.0}/tests/test_conflicts.py +0 -0
|
@@ -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.
|
|
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.8.0"
|
|
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
|
+
]
|
|
@@ -500,6 +500,8 @@ class V1Client:
|
|
|
500
500
|
question_date: Optional[str] = None,
|
|
501
501
|
answer_model: Optional[str] = None,
|
|
502
502
|
answer_max_tokens: Optional[int] = None,
|
|
503
|
+
answer_instructions: Optional[str] = None,
|
|
504
|
+
cite_sources: bool = False,
|
|
503
505
|
use_pack_id: Optional[str] = None,
|
|
504
506
|
temporal: Optional[Mapping[str, Any]] = None,
|
|
505
507
|
diagnostics: str = "none",
|
|
@@ -510,6 +512,12 @@ class V1Client:
|
|
|
510
512
|
defaults to ``"none"`` so free-tier tokens don't hit the
|
|
511
513
|
``diagnostics.read`` gate. Pass ``"summary"`` or ``"full"`` when
|
|
512
514
|
you hold the elevated capability.
|
|
515
|
+
|
|
516
|
+
``answer_instructions`` is a prompt addendum appended to the server's
|
|
517
|
+
system prompt — control style, verbosity, and output format ("be
|
|
518
|
+
terse", "answer as markdown with curl examples", "respond in JSON").
|
|
519
|
+
It never affects retrieval. Max 4000 chars. Pair with
|
|
520
|
+
``question_type="docs-assistant"`` for documentation-support answers.
|
|
513
521
|
"""
|
|
514
522
|
body: dict = {
|
|
515
523
|
"scope": scope,
|
|
@@ -525,12 +533,75 @@ class V1Client:
|
|
|
525
533
|
body["answer_model"] = answer_model
|
|
526
534
|
if answer_max_tokens is not None:
|
|
527
535
|
body["answer_max_tokens"] = answer_max_tokens
|
|
536
|
+
if answer_instructions:
|
|
537
|
+
body["answer_instructions"] = answer_instructions
|
|
538
|
+
if cite_sources:
|
|
539
|
+
body["cite_sources"] = True
|
|
528
540
|
if use_pack_id:
|
|
529
541
|
body["use_pack_id"] = use_pack_id
|
|
530
542
|
if temporal:
|
|
531
543
|
body["temporal"] = dict(temporal)
|
|
532
544
|
return self._post("/v1/answer", body)
|
|
533
545
|
|
|
546
|
+
def compose(
|
|
547
|
+
self,
|
|
548
|
+
scope: str,
|
|
549
|
+
brief: str,
|
|
550
|
+
*,
|
|
551
|
+
view: str = "holistic",
|
|
552
|
+
time: Optional[str] = None,
|
|
553
|
+
depth: Optional[str] = None,
|
|
554
|
+
length: Optional[str] = None,
|
|
555
|
+
max_tokens: Optional[int] = None,
|
|
556
|
+
structure: Optional[Sequence[str]] = None,
|
|
557
|
+
citations: bool = True,
|
|
558
|
+
instructions: Optional[str] = None,
|
|
559
|
+
model: Optional[str] = None,
|
|
560
|
+
use_pack_id: Optional[str] = None,
|
|
561
|
+
include_context: bool = False,
|
|
562
|
+
) -> dict:
|
|
563
|
+
"""``POST /v1/compose`` — produce a structured markdown DOCUMENT
|
|
564
|
+
from memory (digests, reports, overviews).
|
|
565
|
+
|
|
566
|
+
The synthesis-permitted counterpart to :meth:`answer`: answer is
|
|
567
|
+
"what is true in my memory?" (terse, cite-or-abstain); compose is
|
|
568
|
+
"write me something from my memory" (markdown with headings,
|
|
569
|
+
tables, mermaid diagrams; per-section "insufficient evidence"
|
|
570
|
+
notes instead of a global abstention). Returns ``document``
|
|
571
|
+
instead of ``answer``.
|
|
572
|
+
|
|
573
|
+
- ``view``: ``holistic`` (default), ``lineage`` (include ancestor
|
|
574
|
+
synthesis your subtree contributed to), or ``descend``.
|
|
575
|
+
- ``time``: natural-language window, e.g. ``"last 7 days"``.
|
|
576
|
+
- ``depth``: ``standard`` (default) or ``exhaustive`` (whole-scope
|
|
577
|
+
context instead of ranked top-K — right for digests).
|
|
578
|
+
- ``length``: ``brief`` | ``standard`` | ``deep``
|
|
579
|
+
(~600/1500/4000 output tokens); ``max_tokens`` overrides.
|
|
580
|
+
- ``structure``: section outline the document follows exactly.
|
|
581
|
+
- ``citations``: grounded ``[S#]`` markers, default ON.
|
|
582
|
+
- ``instructions``: free-text style escape hatch (max 4000 chars).
|
|
583
|
+
"""
|
|
584
|
+
body: dict = {"scope": scope, "brief": brief, "view": view, "citations": citations}
|
|
585
|
+
if time:
|
|
586
|
+
body["time"] = time
|
|
587
|
+
if depth:
|
|
588
|
+
body["depth"] = depth
|
|
589
|
+
if length:
|
|
590
|
+
body["length"] = length
|
|
591
|
+
if max_tokens is not None:
|
|
592
|
+
body["max_tokens"] = max_tokens
|
|
593
|
+
if structure:
|
|
594
|
+
body["structure"] = list(structure)
|
|
595
|
+
if instructions:
|
|
596
|
+
body["instructions"] = instructions
|
|
597
|
+
if model:
|
|
598
|
+
body["model"] = model
|
|
599
|
+
if use_pack_id:
|
|
600
|
+
body["use_pack_id"] = use_pack_id
|
|
601
|
+
if include_context:
|
|
602
|
+
body["include_context"] = True
|
|
603
|
+
return self._post("/v1/compose", body)
|
|
604
|
+
|
|
534
605
|
# ── layer reads ───────────────────────────────────────────────────
|
|
535
606
|
|
|
536
607
|
def events(
|
|
@@ -1020,11 +1091,14 @@ class AsyncV1Client:
|
|
|
1020
1091
|
*,
|
|
1021
1092
|
question_type: Optional[str] = None,
|
|
1022
1093
|
question_date: Optional[str] = None,
|
|
1094
|
+
answer_instructions: Optional[str] = None,
|
|
1095
|
+
cite_sources: bool = False,
|
|
1023
1096
|
view: str = "holistic",
|
|
1024
1097
|
diagnostics: str = "none",
|
|
1025
1098
|
) -> dict:
|
|
1026
1099
|
"""``POST /v1/answer``. ``diagnostics`` defaults to ``"none"`` so
|
|
1027
|
-
free-tier tokens succeed (audit FRI-1).
|
|
1100
|
+
free-tier tokens succeed (audit FRI-1). ``answer_instructions``:
|
|
1101
|
+
see :meth:`V1Client.answer`."""
|
|
1028
1102
|
body: dict = {
|
|
1029
1103
|
"scope": scope,
|
|
1030
1104
|
"view": view,
|
|
@@ -1035,8 +1109,39 @@ class AsyncV1Client:
|
|
|
1035
1109
|
body["question_type"] = question_type
|
|
1036
1110
|
if question_date:
|
|
1037
1111
|
body["question_date"] = question_date
|
|
1112
|
+
if answer_instructions:
|
|
1113
|
+
body["answer_instructions"] = answer_instructions
|
|
1114
|
+
if cite_sources:
|
|
1115
|
+
body["cite_sources"] = True
|
|
1038
1116
|
return await self._post("/v1/answer", body)
|
|
1039
1117
|
|
|
1118
|
+
async def compose(
|
|
1119
|
+
self,
|
|
1120
|
+
scope: str,
|
|
1121
|
+
brief: str,
|
|
1122
|
+
*,
|
|
1123
|
+
view: str = "holistic",
|
|
1124
|
+
time: Optional[str] = None,
|
|
1125
|
+
depth: Optional[str] = None,
|
|
1126
|
+
length: Optional[str] = None,
|
|
1127
|
+
structure: Optional[Sequence[str]] = None,
|
|
1128
|
+
citations: bool = True,
|
|
1129
|
+
instructions: Optional[str] = None,
|
|
1130
|
+
) -> dict:
|
|
1131
|
+
"""``POST /v1/compose``. See :meth:`V1Client.compose`."""
|
|
1132
|
+
body: dict = {"scope": scope, "brief": brief, "view": view, "citations": citations}
|
|
1133
|
+
if time:
|
|
1134
|
+
body["time"] = time
|
|
1135
|
+
if depth:
|
|
1136
|
+
body["depth"] = depth
|
|
1137
|
+
if length:
|
|
1138
|
+
body["length"] = length
|
|
1139
|
+
if structure:
|
|
1140
|
+
body["structure"] = list(structure)
|
|
1141
|
+
if instructions:
|
|
1142
|
+
body["instructions"] = instructions
|
|
1143
|
+
return await self._post("/v1/compose", body)
|
|
1144
|
+
|
|
1040
1145
|
# ── conflicts + bi-temporal claims ────────────────────────────────
|
|
1041
1146
|
# Same surface + semantics as the sync client; see V1Client for the
|
|
1042
1147
|
# full docstrings (including the "observed → by <date>" rendering rule).
|
|
@@ -1,186 +1,186 @@
|
|
|
1
|
-
[build-system]
|
|
2
|
-
requires = ["hatchling"]
|
|
3
|
-
build-backend = "hatchling.build"
|
|
4
|
-
|
|
5
|
-
[project]
|
|
6
|
-
name = "cortexdbai"
|
|
7
|
-
version = "0.
|
|
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.8.0"
|
|
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
|
|
File without changes
|
{cortexdbai-0.6.0 → cortexdbai-0.8.0}/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
|