@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,41 @@
|
|
|
1
|
+
FROM python:3.12-slim
|
|
2
|
+
|
|
3
|
+
WORKDIR /app
|
|
4
|
+
|
|
5
|
+
# System deps for sentence-transformers + neo4j driver
|
|
6
|
+
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
7
|
+
gcc g++ git curl \
|
|
8
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
9
|
+
|
|
10
|
+
# Reranker = sentence-transformers MiniLM cross-encoder.
|
|
11
|
+
# Torch CPU wheels are fine — reranker is small enough to be CPU-bound.
|
|
12
|
+
RUN pip install --no-cache-dir \
|
|
13
|
+
fastapi "uvicorn[standard]" httpx requests pydantic \
|
|
14
|
+
neo4j \
|
|
15
|
+
"sentence-transformers" \
|
|
16
|
+
"torch" --extra-index-url https://download.pytorch.org/whl/cpu
|
|
17
|
+
|
|
18
|
+
COPY l2-hybridrag-proxy.py /app/server.py
|
|
19
|
+
COPY init_databases.py /app/init_databases.py
|
|
20
|
+
|
|
21
|
+
# Pre-create empty L0 BM25 SQLite + empty workspace
|
|
22
|
+
RUN mkdir -p /data/workspace /data/.pentatonic/memory /data/.cache && \
|
|
23
|
+
python init_databases.py /data
|
|
24
|
+
|
|
25
|
+
# L2 proxy expects various data dirs — point them at /data
|
|
26
|
+
ENV PME_WORKSPACE=/data/workspace
|
|
27
|
+
ENV PME_QMD_DB=/data/qmd.sqlite
|
|
28
|
+
ENV PME_MEMORY_DB=/data/workspace.db
|
|
29
|
+
ENV HF_HOME=/data/.cache/huggingface
|
|
30
|
+
|
|
31
|
+
# OSS-friendly defaults: HyDE off (per request), reranker on
|
|
32
|
+
ENV PME_HYDE_ENABLED=false
|
|
33
|
+
ENV PME_RERANK_ENABLED=true
|
|
34
|
+
ENV PME_NV_EMBED_ENABLED=true
|
|
35
|
+
|
|
36
|
+
EXPOSE 8031
|
|
37
|
+
|
|
38
|
+
# Pre-download the MiniLM cross-encoder so cold-start is fast
|
|
39
|
+
RUN python -c "from sentence_transformers import CrossEncoder; CrossEncoder('cross-encoder/ms-marco-MiniLM-L-6-v2', cache_folder='/data/.cache/huggingface')"
|
|
40
|
+
|
|
41
|
+
CMD ["python", "server.py", "--port", "8031", "--host", "0.0.0.0"]
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"""Initialise empty L0 BM25 SQLite + L4 QMD SQLite at container startup.
|
|
2
|
+
|
|
3
|
+
The L2 proxy reads from two SQLite files that don't otherwise exist
|
|
4
|
+
in a fresh container — so opening them via sqlite3.connect() fails
|
|
5
|
+
with "unable to open database file." Pre-creating them with the
|
|
6
|
+
schemas the proxy expects lets the proxy come up cleanly and return
|
|
7
|
+
empty results from those layers (instead of crashing) until the shim
|
|
8
|
+
populates them through /index-batch.
|
|
9
|
+
|
|
10
|
+
Schemas mirror what the production ingester writes.
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
import os
|
|
14
|
+
import sqlite3
|
|
15
|
+
import sys
|
|
16
|
+
from pathlib import Path
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def init_l0_bm25(db_path: Path) -> None:
|
|
20
|
+
"""L0 — workspace BM25 over chunked markdown."""
|
|
21
|
+
db_path.parent.mkdir(parents=True, exist_ok=True)
|
|
22
|
+
conn = sqlite3.connect(str(db_path))
|
|
23
|
+
conn.execute("PRAGMA journal_mode=WAL")
|
|
24
|
+
conn.execute("""
|
|
25
|
+
CREATE TABLE IF NOT EXISTS chunks (
|
|
26
|
+
id INTEGER PRIMARY KEY,
|
|
27
|
+
path TEXT,
|
|
28
|
+
text TEXT,
|
|
29
|
+
file_type TEXT,
|
|
30
|
+
chunk_index INTEGER,
|
|
31
|
+
created_at TEXT
|
|
32
|
+
)
|
|
33
|
+
""")
|
|
34
|
+
conn.execute("""
|
|
35
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS chunks_fts USING fts5(
|
|
36
|
+
path, text, file_type,
|
|
37
|
+
content='chunks',
|
|
38
|
+
content_rowid='id'
|
|
39
|
+
)
|
|
40
|
+
""")
|
|
41
|
+
conn.execute("""
|
|
42
|
+
CREATE TRIGGER IF NOT EXISTS chunks_ai AFTER INSERT ON chunks BEGIN
|
|
43
|
+
INSERT INTO chunks_fts(rowid, path, text, file_type)
|
|
44
|
+
VALUES (new.id, new.path, new.text, new.file_type);
|
|
45
|
+
END
|
|
46
|
+
""")
|
|
47
|
+
conn.commit()
|
|
48
|
+
conn.close()
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def init_l4_qmd(db_path: Path) -> None:
|
|
52
|
+
"""L4 — QMD vector store, JSONB embeddings stored alongside text."""
|
|
53
|
+
db_path.parent.mkdir(parents=True, exist_ok=True)
|
|
54
|
+
conn = sqlite3.connect(str(db_path))
|
|
55
|
+
conn.execute("PRAGMA journal_mode=WAL")
|
|
56
|
+
conn.execute("""
|
|
57
|
+
CREATE TABLE IF NOT EXISTS chunks (
|
|
58
|
+
id INTEGER PRIMARY KEY,
|
|
59
|
+
path TEXT,
|
|
60
|
+
text TEXT,
|
|
61
|
+
embedding TEXT,
|
|
62
|
+
embedding_model TEXT,
|
|
63
|
+
embedding_dim INTEGER,
|
|
64
|
+
chunk_index INTEGER,
|
|
65
|
+
created_at TEXT
|
|
66
|
+
)
|
|
67
|
+
""")
|
|
68
|
+
conn.commit()
|
|
69
|
+
conn.close()
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def main() -> int:
|
|
73
|
+
base = Path(sys.argv[1] if len(sys.argv) > 1 else "/data")
|
|
74
|
+
init_l0_bm25(base / "workspace.db")
|
|
75
|
+
init_l4_qmd(base / "qmd.sqlite")
|
|
76
|
+
print(f"initialised L0 + L4 QMD databases under {base}")
|
|
77
|
+
return 0
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
if __name__ == "__main__":
|
|
81
|
+
sys.exit(main())
|