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.
Files changed (95) hide show
  1. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/PKG-INFO +1 -1
  2. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/__init__.py +71 -71
  3. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/v1/client.py +106 -1
  4. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/pyproject.toml +186 -186
  5. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/.gitignore +0 -0
  6. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/README.md +0 -0
  7. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/__init__.py +0 -0
  8. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/ag2/__init__.py +0 -0
  9. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/ag2/agent.py +0 -0
  10. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/ag2/tools.py +0 -0
  11. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/agno/__init__.py +0 -0
  12. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/agno/memory.py +0 -0
  13. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/agno/tools.py +0 -0
  14. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/autogen/__init__.py +0 -0
  15. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/autogen/agent.py +0 -0
  16. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/autogen/tools.py +0 -0
  17. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/beeai/__init__.py +0 -0
  18. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/beeai/memory.py +0 -0
  19. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/beeai/tools.py +0 -0
  20. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/camel/__init__.py +0 -0
  21. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/camel/memory.py +0 -0
  22. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/camel/tools.py +0 -0
  23. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/controlflow/__init__.py +0 -0
  24. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/controlflow/memory.py +0 -0
  25. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/crewai/__init__.py +0 -0
  26. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/crewai/memory.py +0 -0
  27. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/crewai/tools.py +0 -0
  28. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/deepinfra/__init__.py +0 -0
  29. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/deepinfra/config.py +0 -0
  30. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/deepinfra/embeddings.py +0 -0
  31. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/deepinfra/openai_compat.py +0 -0
  32. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/dify/__init__.py +0 -0
  33. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/dify/manifest.yaml +0 -0
  34. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/dify/tool.py +0 -0
  35. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/dspy/__init__.py +0 -0
  36. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/dspy/memory.py +0 -0
  37. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/dspy/retriever.py +0 -0
  38. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/fireworks/__init__.py +0 -0
  39. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/fireworks/config.py +0 -0
  40. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/fireworks/embeddings.py +0 -0
  41. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/fireworks/openai_compat.py +0 -0
  42. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/flowise/__init__.py +0 -0
  43. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/flowise/node.py +0 -0
  44. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/google_adk/__init__.py +0 -0
  45. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/google_adk/tools.py +0 -0
  46. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/groq/__init__.py +0 -0
  47. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/groq/config.py +0 -0
  48. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/groq/embeddings.py +0 -0
  49. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/groq/openai_compat.py +0 -0
  50. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/hermes/__init__.py +0 -0
  51. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/hermes/provider.py +0 -0
  52. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/instructor/__init__.py +0 -0
  53. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/instructor/memory.py +0 -0
  54. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/langchain/__init__.py +0 -0
  55. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/langchain/memory.py +0 -0
  56. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/langchain/retriever.py +0 -0
  57. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/langchain/tools.py +0 -0
  58. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/langgraph/__init__.py +0 -0
  59. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/langgraph/memory.py +0 -0
  60. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/letta/__init__.py +0 -0
  61. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/letta/storage.py +0 -0
  62. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/llamaindex/__init__.py +0 -0
  63. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/llamaindex/memory.py +0 -0
  64. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/nemo_guardrails/__init__.py +0 -0
  65. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/nemo_guardrails/actions.py +0 -0
  66. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/nemo_guardrails/knowledge_base.py +0 -0
  67. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/ollama/__init__.py +0 -0
  68. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/ollama/config.py +0 -0
  69. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/ollama/embeddings.py +0 -0
  70. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/openai_agents/__init__.py +0 -0
  71. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/openai_agents/tools.py +0 -0
  72. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/prefect/__init__.py +0 -0
  73. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/prefect/blocks.py +0 -0
  74. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/prefect/tasks.py +0 -0
  75. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/pydanticai/__init__.py +0 -0
  76. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/pydanticai/dependencies.py +0 -0
  77. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/pydanticai/tools.py +0 -0
  78. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/smolagents/__init__.py +0 -0
  79. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/smolagents/tools.py +0 -0
  80. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/temporal/__init__.py +0 -0
  81. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/temporal/activities.py +0 -0
  82. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/temporal/interceptor.py +0 -0
  83. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/together/__init__.py +0 -0
  84. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/together/config.py +0 -0
  85. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/together/embeddings.py +0 -0
  86. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/together/openai_compat.py +0 -0
  87. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/vllm/__init__.py +0 -0
  88. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/vllm/config.py +0 -0
  89. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/vllm/embeddings.py +0 -0
  90. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/integrations/vllm/openai_compat.py +0 -0
  91. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/py.typed +0 -0
  92. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/v1/__init__.py +0 -0
  93. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/cortexdb/v1/exceptions.py +0 -0
  94. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/tests/__init__.py +0 -0
  95. {cortexdbai-0.6.0 → cortexdbai-0.8.0}/tests/test_conflicts.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cortexdbai
3
- Version: 0.6.0
3
+ Version: 0.8.0
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
@@ -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.6.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.6.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