@pentatonic-ai/ai-agent-sdk 0.6.0 → 0.7.0
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.
- package/README.md +170 -69
- package/bin/__tests__/callback-server.test.js +4 -1
- package/bin/cli.js +41 -164
- package/bin/commands/config.js +251 -0
- package/package.json +2 -1
- package/packages/doctor/__tests__/detect.test.js +2 -6
- package/packages/doctor/src/checks/local-memory.js +164 -196
- package/packages/doctor/src/detect.js +11 -3
- package/packages/memory/src/corpus/adapters.js +104 -0
- package/packages/memory/src/corpus/cli.js +72 -7
- package/packages/memory/src/corpus/index.js +1 -1
- package/packages/memory-engine/.env.example +13 -0
- package/packages/memory-engine/README.md +131 -0
- package/packages/memory-engine/bench/README.md +99 -0
- package/packages/memory-engine/bench/scorecards-engine/agent-coding__pentatonic-baseline__20260427-142523.json +1115 -0
- package/packages/memory-engine/bench/scorecards-engine/chat-recall__pentatonic-baseline__20260427-142648.json +819 -0
- package/packages/memory-engine/bench/scorecards-engine/circular-economy__pentatonic-baseline__20260427-142757.json +1278 -0
- package/packages/memory-engine/bench/scorecards-engine/customer-support__pentatonic-baseline__20260427-142900.json +1018 -0
- package/packages/memory-engine/bench/scorecards-engine/marketplace-ops__pentatonic-baseline__20260427-142957.json +1038 -0
- package/packages/memory-engine/bench/scorecards-engine/product-catalogue__pentatonic-baseline__20260427-143122.json +961 -0
- package/packages/memory-engine/bench/scorecards-engine-via-docker/agent-coding__pentatonic-memory__20260427-161812.json +1115 -0
- package/packages/memory-engine/bench/scorecards-engine-via-docker/chat-recall__pentatonic-memory__20260427-161701.json +819 -0
- package/packages/memory-engine/bench/scorecards-engine-via-docker/circular-economy__pentatonic-memory__20260427-161713.json +1278 -0
- package/packages/memory-engine/bench/scorecards-engine-via-docker/customer-support__pentatonic-memory__20260427-161723.json +1018 -0
- package/packages/memory-engine/bench/scorecards-engine-via-docker/marketplace-ops__pentatonic-memory__20260427-161732.json +1038 -0
- package/packages/memory-engine/bench/scorecards-engine-via-docker/product-catalogue__pentatonic-memory__20260427-161741.json +937 -0
- package/packages/memory-engine/bench/scorecards-engine-via-l2-7-layer-populated/agent-coding__pentatonic-memory__20260427-184718.json +1115 -0
- package/packages/memory-engine/bench/scorecards-engine-via-l2-7-layer-populated/chat-recall__pentatonic-memory__20260427-184614.json +819 -0
- package/packages/memory-engine/bench/scorecards-engine-via-l2-7-layer-populated/circular-economy__pentatonic-memory__20260427-184809.json +1278 -0
- package/packages/memory-engine/bench/scorecards-engine-via-l2-7-layer-populated/customer-support__pentatonic-memory__20260427-184854.json +1018 -0
- package/packages/memory-engine/bench/scorecards-engine-via-l2-7-layer-populated/marketplace-ops__pentatonic-memory__20260427-184929.json +1038 -0
- package/packages/memory-engine/bench/scorecards-engine-via-l2-7-layer-populated/product-catalogue__pentatonic-memory__20260427-185015.json +961 -0
- package/packages/memory-engine/bench/scorecards-engine-via-l2-empty-layers/agent-coding__pentatonic-memory__20260427-175252.json +1115 -0
- package/packages/memory-engine/bench/scorecards-engine-via-l2-empty-layers/chat-recall__pentatonic-memory__20260427-175312.json +819 -0
- package/packages/memory-engine/bench/scorecards-engine-via-l2-empty-layers/circular-economy__pentatonic-memory__20260427-175335.json +1278 -0
- package/packages/memory-engine/bench/scorecards-engine-via-l2-empty-layers/customer-support__pentatonic-memory__20260427-175355.json +1018 -0
- package/packages/memory-engine/bench/scorecards-engine-via-l2-empty-layers/marketplace-ops__pentatonic-memory__20260427-175413.json +1038 -0
- package/packages/memory-engine/bench/scorecards-engine-via-l2-empty-layers/product-catalogue__pentatonic-memory__20260427-175430.json +883 -0
- package/packages/memory-engine/bench/scorecards-engine-via-shim/agent-coding__pentatonic-memory__20260427-155409.json +1115 -0
- package/packages/memory-engine/bench/scorecards-engine-via-shim/chat-recall__pentatonic-memory__20260427-155421.json +819 -0
- package/packages/memory-engine/bench/scorecards-engine-via-shim/circular-economy__pentatonic-memory__20260427-155433.json +1278 -0
- package/packages/memory-engine/bench/scorecards-engine-via-shim/customer-support__pentatonic-memory__20260427-155443.json +1018 -0
- package/packages/memory-engine/bench/scorecards-engine-via-shim/marketplace-ops__pentatonic-memory__20260427-155453.json +1038 -0
- package/packages/memory-engine/bench/scorecards-engine-via-shim/product-catalogue__pentatonic-memory__20260427-155503.json +937 -0
- package/packages/memory-engine/bench/scorecards-pentatonic-baseline/agent-coding__pentatonic-memory-latest__20260427-145103.json +1115 -0
- package/packages/memory-engine/bench/scorecards-pentatonic-baseline/agent-coding__pentatonic-memory__20260427-144909.json +1115 -0
- package/packages/memory-engine/bench/scorecards-pentatonic-baseline/chat-recall__pentatonic-memory-latest__20260427-145153.json +819 -0
- package/packages/memory-engine/bench/scorecards-pentatonic-baseline/chat-recall__pentatonic-memory__20260427-145120.json +542 -0
- package/packages/memory-engine/bench/scorecards-pentatonic-baseline/circular-economy__pentatonic-memory-latest__20260427-145313.json +1278 -0
- package/packages/memory-engine/bench/scorecards-pentatonic-baseline/circular-economy__pentatonic-memory__20260427-145207.json +894 -0
- package/packages/memory-engine/bench/scorecards-pentatonic-baseline/customer-support__pentatonic-memory-latest__20260427-145412.json +1018 -0
- package/packages/memory-engine/bench/scorecards-pentatonic-baseline/customer-support__pentatonic-memory__20260427-145327.json +680 -0
- package/packages/memory-engine/bench/scorecards-pentatonic-baseline/marketplace-ops__pentatonic-memory-latest__20260427-145517.json +1038 -0
- package/packages/memory-engine/bench/scorecards-pentatonic-baseline/marketplace-ops__pentatonic-memory__20260427-145422.json +693 -0
- package/packages/memory-engine/bench/scorecards-pentatonic-baseline/product-catalogue__pentatonic-memory-latest__20260427-145616.json +961 -0
- package/packages/memory-engine/bench/scorecards-pentatonic-baseline/product-catalogue__pentatonic-memory__20260427-145528.json +727 -0
- package/packages/memory-engine/compat/Dockerfile +11 -0
- package/packages/memory-engine/compat/server.py +680 -0
- package/packages/memory-engine/docker-compose.yml +243 -0
- package/packages/memory-engine/docs/MIGRATION.md +178 -0
- package/packages/memory-engine/docs/RUNBOOK-AWS.md +375 -0
- package/packages/memory-engine/docs/why-v05-underperforms.md +138 -0
- package/packages/memory-engine/engine/README.md +52 -0
- package/packages/memory-engine/engine/l2-hybridrag-proxy.py +1543 -0
- package/packages/memory-engine/engine/l5-comms-layer.py +663 -0
- package/packages/memory-engine/engine/l6-document-store.py +1018 -0
- package/packages/memory-engine/engine/services/l2/Dockerfile +41 -0
- package/packages/memory-engine/engine/services/l2/init_databases.py +81 -0
- package/packages/memory-engine/engine/services/l2/l2-hybridrag-proxy.py +1543 -0
- package/packages/memory-engine/engine/services/l4/Dockerfile +15 -0
- package/packages/memory-engine/engine/services/l4/server.py +235 -0
- package/packages/memory-engine/engine/services/l5/Dockerfile +9 -0
- package/packages/memory-engine/engine/services/l5/l5-comms-layer.py +678 -0
- package/packages/memory-engine/engine/services/l6/Dockerfile +11 -0
- package/packages/memory-engine/engine/services/l6/l6-document-store.py +1016 -0
- package/packages/memory-engine/engine/services/nv-embed/Dockerfile +28 -0
- package/packages/memory-engine/engine/services/nv-embed/server.py +152 -0
- package/packages/memory-engine/pme_memory/__init__.py +0 -0
- package/packages/memory-engine/pme_memory/__main__.py +129 -0
- package/packages/memory-engine/pme_memory/artifacts.py +95 -0
- package/packages/memory-engine/pme_memory/embed.py +74 -0
- package/packages/memory-engine/pme_memory/health.py +36 -0
- package/packages/memory-engine/pme_memory/hygiene.py +159 -0
- package/packages/memory-engine/pme_memory/indexer.py +200 -0
- package/packages/memory-engine/pme_memory/needs.py +55 -0
- package/packages/memory-engine/pme_memory/provenance.py +80 -0
- package/packages/memory-engine/pme_memory/scoring.py +168 -0
- package/packages/memory-engine/pme_memory/search.py +52 -0
- package/packages/memory-engine/pme_memory/store.py +86 -0
- package/packages/memory-engine/pme_memory/synthesis.py +114 -0
- package/packages/memory-engine/pyproject.toml +65 -0
- package/packages/memory-engine/scripts/kg-extractor.py +557 -0
- package/packages/memory-engine/scripts/kg-preflexor-v2.py +738 -0
- package/packages/memory-engine/tests/test_api_contract.sh +57 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"""
|
|
2
|
+
pme_memory.synthesis — Synthesis Operator
|
|
3
|
+
|
|
4
|
+
Deterministic multi-parent merge for compatible artifacts.
|
|
5
|
+
When two or more artifacts share overlapping schema fields,
|
|
6
|
+
the operator produces a new synthesis artifact that:
|
|
7
|
+
- references all parents
|
|
8
|
+
- merges payloads (union of keys, conflict detection)
|
|
9
|
+
- inherits combined needs (minus fulfilled ones)
|
|
10
|
+
- gets its own content_hash for integrity
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from __future__ import annotations
|
|
14
|
+
|
|
15
|
+
from typing import Any, Dict, List, Optional, Set
|
|
16
|
+
|
|
17
|
+
from .artifacts import ArtifactEnvelope, ArtifactStore
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def find_compatible_pairs(
|
|
21
|
+
artifacts: List[Dict[str, Any]],
|
|
22
|
+
min_overlap: int = 2,
|
|
23
|
+
) -> List[tuple[Dict[str, Any], Dict[str, Any], Set[str]]]:
|
|
24
|
+
"""Find artifact pairs with overlapping payload keys.
|
|
25
|
+
|
|
26
|
+
Returns list of (art_a, art_b, shared_keys) tuples.
|
|
27
|
+
"""
|
|
28
|
+
pairs = []
|
|
29
|
+
for i, a in enumerate(artifacts):
|
|
30
|
+
a_keys = set(a.get("payload", {}).keys())
|
|
31
|
+
for b in artifacts[i + 1:]:
|
|
32
|
+
b_keys = set(b.get("payload", {}).keys())
|
|
33
|
+
shared = a_keys & b_keys
|
|
34
|
+
if len(shared) >= min_overlap:
|
|
35
|
+
pairs.append((a, b, shared))
|
|
36
|
+
return pairs
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def merge_payloads(
|
|
40
|
+
payloads: List[Dict[str, Any]],
|
|
41
|
+
) -> tuple[Dict[str, Any], List[str]]:
|
|
42
|
+
"""Merge multiple payloads. Returns (merged_payload, conflict_keys).
|
|
43
|
+
|
|
44
|
+
For conflicting keys, keeps all values as a list under the key.
|
|
45
|
+
"""
|
|
46
|
+
merged: Dict[str, Any] = {}
|
|
47
|
+
conflicts: List[str] = []
|
|
48
|
+
|
|
49
|
+
for payload in payloads:
|
|
50
|
+
for k, v in payload.items():
|
|
51
|
+
if k not in merged:
|
|
52
|
+
merged[k] = v
|
|
53
|
+
elif merged[k] != v:
|
|
54
|
+
if k not in conflicts:
|
|
55
|
+
conflicts.append(k)
|
|
56
|
+
# Store as list of divergent values
|
|
57
|
+
existing = merged[k]
|
|
58
|
+
if isinstance(existing, list) and k in conflicts:
|
|
59
|
+
existing.append(v)
|
|
60
|
+
else:
|
|
61
|
+
merged[k] = [existing, v]
|
|
62
|
+
|
|
63
|
+
return merged, conflicts
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def synthesise(
|
|
67
|
+
parents: List[Dict[str, Any]],
|
|
68
|
+
producer: str,
|
|
69
|
+
topic: Optional[str] = None,
|
|
70
|
+
store: Optional[ArtifactStore] = None,
|
|
71
|
+
) -> ArtifactEnvelope:
|
|
72
|
+
"""Create a synthesis artifact from multiple parent artifacts.
|
|
73
|
+
|
|
74
|
+
Args:
|
|
75
|
+
parents: list of artifact dicts (must have artifact_id, payload, needs)
|
|
76
|
+
producer: who is producing the synthesis
|
|
77
|
+
topic: optional topic label
|
|
78
|
+
store: if provided, appends the new artifact automatically
|
|
79
|
+
|
|
80
|
+
Returns:
|
|
81
|
+
The new synthesis ArtifactEnvelope
|
|
82
|
+
"""
|
|
83
|
+
parent_ids = [p["artifact_id"] for p in parents]
|
|
84
|
+
payloads = [p.get("payload", {}) for p in parents]
|
|
85
|
+
|
|
86
|
+
merged_payload, conflicts = merge_payloads(payloads)
|
|
87
|
+
|
|
88
|
+
# Combine unresolved needs, deduplicated
|
|
89
|
+
all_needs: List[str] = []
|
|
90
|
+
seen: set = set()
|
|
91
|
+
for p in parents:
|
|
92
|
+
for n in p.get("needs", []):
|
|
93
|
+
if n not in seen:
|
|
94
|
+
all_needs.append(n)
|
|
95
|
+
seen.add(n)
|
|
96
|
+
|
|
97
|
+
synthesis = ArtifactEnvelope.create(
|
|
98
|
+
artifact_type="synthesis",
|
|
99
|
+
producer=producer,
|
|
100
|
+
payload={
|
|
101
|
+
"merged": merged_payload,
|
|
102
|
+
"conflicts": conflicts,
|
|
103
|
+
"parent_count": len(parents),
|
|
104
|
+
},
|
|
105
|
+
parents=parent_ids,
|
|
106
|
+
needs=all_needs,
|
|
107
|
+
source_tool="synthesis_operator",
|
|
108
|
+
topic=topic,
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
if store:
|
|
112
|
+
store.append(synthesis)
|
|
113
|
+
|
|
114
|
+
return synthesis
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=68", "wheel"]
|
|
3
|
+
build-backend = "setuptools.backends.legacy:build"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "pme-memory"
|
|
7
|
+
version = "1.7.0"
|
|
8
|
+
description = "Milvus-backed L5 vector store layer for Pentatonic Memory Engine"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
license = { text = "Pentatonic Ltd — Internal" }
|
|
11
|
+
requires-python = ">=3.11"
|
|
12
|
+
|
|
13
|
+
dependencies = [
|
|
14
|
+
"requests>=2.28.0",
|
|
15
|
+
]
|
|
16
|
+
|
|
17
|
+
[project.optional-dependencies]
|
|
18
|
+
# Full L5 stack with Milvus Lite (no Docker required)
|
|
19
|
+
milvus = [
|
|
20
|
+
"pymilvus>=2.4.0",
|
|
21
|
+
]
|
|
22
|
+
# Milvus with integrated model support (larger download)
|
|
23
|
+
milvus-model = [
|
|
24
|
+
"pymilvus[model]>=2.4.0",
|
|
25
|
+
]
|
|
26
|
+
# Full 5-layer memory stack (L2 proxy + L3 graph + L5 comms)
|
|
27
|
+
full = [
|
|
28
|
+
"fastapi>=0.100.0",
|
|
29
|
+
"uvicorn>=0.23.0",
|
|
30
|
+
"neo4j>=5.0.0",
|
|
31
|
+
"pymilvus>=2.4.0",
|
|
32
|
+
"httpx>=0.24.0",
|
|
33
|
+
"pydantic>=2.0.0",
|
|
34
|
+
]
|
|
35
|
+
# NV-Embed-v2 embedding service
|
|
36
|
+
# transformers must stay <4.50 — newer versions break NV-Embed-v2 (removed all_tied_weights_keys)
|
|
37
|
+
# Install CUDA torch separately: pip install torch>=2.0 --index-url https://download.pytorch.org/whl/cu130
|
|
38
|
+
nv-embed = [
|
|
39
|
+
"torch>=2.0",
|
|
40
|
+
"transformers>=4.42,<4.50",
|
|
41
|
+
"datasets>=2.14.0",
|
|
42
|
+
"einops>=0.7.0",
|
|
43
|
+
"fastapi>=0.100.0",
|
|
44
|
+
"uvicorn>=0.23.0",
|
|
45
|
+
]
|
|
46
|
+
# All extras for development
|
|
47
|
+
dev = [
|
|
48
|
+
"pymilvus>=2.4.0",
|
|
49
|
+
"fastapi>=0.100.0",
|
|
50
|
+
"uvicorn>=0.23.0",
|
|
51
|
+
"neo4j>=5.0.0",
|
|
52
|
+
"httpx>=0.24.0",
|
|
53
|
+
"pydantic>=2.0.0",
|
|
54
|
+
"pytest>=8.0",
|
|
55
|
+
"pytest-mock>=3.12",
|
|
56
|
+
]
|
|
57
|
+
|
|
58
|
+
[project.scripts]
|
|
59
|
+
pme-memory = "pme_memory.__main__:main"
|
|
60
|
+
|
|
61
|
+
[tool.setuptools.packages.find]
|
|
62
|
+
include = ["pme_memory*"]
|
|
63
|
+
|
|
64
|
+
[tool.setuptools.package-data]
|
|
65
|
+
pme_memory = ["py.typed"]
|