@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.
Files changed (94) hide show
  1. package/README.md +170 -69
  2. package/bin/__tests__/callback-server.test.js +4 -1
  3. package/bin/cli.js +41 -164
  4. package/bin/commands/config.js +251 -0
  5. package/package.json +2 -1
  6. package/packages/doctor/__tests__/detect.test.js +2 -6
  7. package/packages/doctor/src/checks/local-memory.js +164 -196
  8. package/packages/doctor/src/detect.js +11 -3
  9. package/packages/memory/src/corpus/adapters.js +104 -0
  10. package/packages/memory/src/corpus/cli.js +72 -7
  11. package/packages/memory/src/corpus/index.js +1 -1
  12. package/packages/memory-engine/.env.example +13 -0
  13. package/packages/memory-engine/README.md +131 -0
  14. package/packages/memory-engine/bench/README.md +99 -0
  15. package/packages/memory-engine/bench/scorecards-engine/agent-coding__pentatonic-baseline__20260427-142523.json +1115 -0
  16. package/packages/memory-engine/bench/scorecards-engine/chat-recall__pentatonic-baseline__20260427-142648.json +819 -0
  17. package/packages/memory-engine/bench/scorecards-engine/circular-economy__pentatonic-baseline__20260427-142757.json +1278 -0
  18. package/packages/memory-engine/bench/scorecards-engine/customer-support__pentatonic-baseline__20260427-142900.json +1018 -0
  19. package/packages/memory-engine/bench/scorecards-engine/marketplace-ops__pentatonic-baseline__20260427-142957.json +1038 -0
  20. package/packages/memory-engine/bench/scorecards-engine/product-catalogue__pentatonic-baseline__20260427-143122.json +961 -0
  21. package/packages/memory-engine/bench/scorecards-engine-via-docker/agent-coding__pentatonic-memory__20260427-161812.json +1115 -0
  22. package/packages/memory-engine/bench/scorecards-engine-via-docker/chat-recall__pentatonic-memory__20260427-161701.json +819 -0
  23. package/packages/memory-engine/bench/scorecards-engine-via-docker/circular-economy__pentatonic-memory__20260427-161713.json +1278 -0
  24. package/packages/memory-engine/bench/scorecards-engine-via-docker/customer-support__pentatonic-memory__20260427-161723.json +1018 -0
  25. package/packages/memory-engine/bench/scorecards-engine-via-docker/marketplace-ops__pentatonic-memory__20260427-161732.json +1038 -0
  26. package/packages/memory-engine/bench/scorecards-engine-via-docker/product-catalogue__pentatonic-memory__20260427-161741.json +937 -0
  27. package/packages/memory-engine/bench/scorecards-engine-via-l2-7-layer-populated/agent-coding__pentatonic-memory__20260427-184718.json +1115 -0
  28. package/packages/memory-engine/bench/scorecards-engine-via-l2-7-layer-populated/chat-recall__pentatonic-memory__20260427-184614.json +819 -0
  29. package/packages/memory-engine/bench/scorecards-engine-via-l2-7-layer-populated/circular-economy__pentatonic-memory__20260427-184809.json +1278 -0
  30. package/packages/memory-engine/bench/scorecards-engine-via-l2-7-layer-populated/customer-support__pentatonic-memory__20260427-184854.json +1018 -0
  31. package/packages/memory-engine/bench/scorecards-engine-via-l2-7-layer-populated/marketplace-ops__pentatonic-memory__20260427-184929.json +1038 -0
  32. package/packages/memory-engine/bench/scorecards-engine-via-l2-7-layer-populated/product-catalogue__pentatonic-memory__20260427-185015.json +961 -0
  33. package/packages/memory-engine/bench/scorecards-engine-via-l2-empty-layers/agent-coding__pentatonic-memory__20260427-175252.json +1115 -0
  34. package/packages/memory-engine/bench/scorecards-engine-via-l2-empty-layers/chat-recall__pentatonic-memory__20260427-175312.json +819 -0
  35. package/packages/memory-engine/bench/scorecards-engine-via-l2-empty-layers/circular-economy__pentatonic-memory__20260427-175335.json +1278 -0
  36. package/packages/memory-engine/bench/scorecards-engine-via-l2-empty-layers/customer-support__pentatonic-memory__20260427-175355.json +1018 -0
  37. package/packages/memory-engine/bench/scorecards-engine-via-l2-empty-layers/marketplace-ops__pentatonic-memory__20260427-175413.json +1038 -0
  38. package/packages/memory-engine/bench/scorecards-engine-via-l2-empty-layers/product-catalogue__pentatonic-memory__20260427-175430.json +883 -0
  39. package/packages/memory-engine/bench/scorecards-engine-via-shim/agent-coding__pentatonic-memory__20260427-155409.json +1115 -0
  40. package/packages/memory-engine/bench/scorecards-engine-via-shim/chat-recall__pentatonic-memory__20260427-155421.json +819 -0
  41. package/packages/memory-engine/bench/scorecards-engine-via-shim/circular-economy__pentatonic-memory__20260427-155433.json +1278 -0
  42. package/packages/memory-engine/bench/scorecards-engine-via-shim/customer-support__pentatonic-memory__20260427-155443.json +1018 -0
  43. package/packages/memory-engine/bench/scorecards-engine-via-shim/marketplace-ops__pentatonic-memory__20260427-155453.json +1038 -0
  44. package/packages/memory-engine/bench/scorecards-engine-via-shim/product-catalogue__pentatonic-memory__20260427-155503.json +937 -0
  45. package/packages/memory-engine/bench/scorecards-pentatonic-baseline/agent-coding__pentatonic-memory-latest__20260427-145103.json +1115 -0
  46. package/packages/memory-engine/bench/scorecards-pentatonic-baseline/agent-coding__pentatonic-memory__20260427-144909.json +1115 -0
  47. package/packages/memory-engine/bench/scorecards-pentatonic-baseline/chat-recall__pentatonic-memory-latest__20260427-145153.json +819 -0
  48. package/packages/memory-engine/bench/scorecards-pentatonic-baseline/chat-recall__pentatonic-memory__20260427-145120.json +542 -0
  49. package/packages/memory-engine/bench/scorecards-pentatonic-baseline/circular-economy__pentatonic-memory-latest__20260427-145313.json +1278 -0
  50. package/packages/memory-engine/bench/scorecards-pentatonic-baseline/circular-economy__pentatonic-memory__20260427-145207.json +894 -0
  51. package/packages/memory-engine/bench/scorecards-pentatonic-baseline/customer-support__pentatonic-memory-latest__20260427-145412.json +1018 -0
  52. package/packages/memory-engine/bench/scorecards-pentatonic-baseline/customer-support__pentatonic-memory__20260427-145327.json +680 -0
  53. package/packages/memory-engine/bench/scorecards-pentatonic-baseline/marketplace-ops__pentatonic-memory-latest__20260427-145517.json +1038 -0
  54. package/packages/memory-engine/bench/scorecards-pentatonic-baseline/marketplace-ops__pentatonic-memory__20260427-145422.json +693 -0
  55. package/packages/memory-engine/bench/scorecards-pentatonic-baseline/product-catalogue__pentatonic-memory-latest__20260427-145616.json +961 -0
  56. package/packages/memory-engine/bench/scorecards-pentatonic-baseline/product-catalogue__pentatonic-memory__20260427-145528.json +727 -0
  57. package/packages/memory-engine/compat/Dockerfile +11 -0
  58. package/packages/memory-engine/compat/server.py +680 -0
  59. package/packages/memory-engine/docker-compose.yml +243 -0
  60. package/packages/memory-engine/docs/MIGRATION.md +178 -0
  61. package/packages/memory-engine/docs/RUNBOOK-AWS.md +375 -0
  62. package/packages/memory-engine/docs/why-v05-underperforms.md +138 -0
  63. package/packages/memory-engine/engine/README.md +52 -0
  64. package/packages/memory-engine/engine/l2-hybridrag-proxy.py +1543 -0
  65. package/packages/memory-engine/engine/l5-comms-layer.py +663 -0
  66. package/packages/memory-engine/engine/l6-document-store.py +1018 -0
  67. package/packages/memory-engine/engine/services/l2/Dockerfile +41 -0
  68. package/packages/memory-engine/engine/services/l2/init_databases.py +81 -0
  69. package/packages/memory-engine/engine/services/l2/l2-hybridrag-proxy.py +1543 -0
  70. package/packages/memory-engine/engine/services/l4/Dockerfile +15 -0
  71. package/packages/memory-engine/engine/services/l4/server.py +235 -0
  72. package/packages/memory-engine/engine/services/l5/Dockerfile +9 -0
  73. package/packages/memory-engine/engine/services/l5/l5-comms-layer.py +678 -0
  74. package/packages/memory-engine/engine/services/l6/Dockerfile +11 -0
  75. package/packages/memory-engine/engine/services/l6/l6-document-store.py +1016 -0
  76. package/packages/memory-engine/engine/services/nv-embed/Dockerfile +28 -0
  77. package/packages/memory-engine/engine/services/nv-embed/server.py +152 -0
  78. package/packages/memory-engine/pme_memory/__init__.py +0 -0
  79. package/packages/memory-engine/pme_memory/__main__.py +129 -0
  80. package/packages/memory-engine/pme_memory/artifacts.py +95 -0
  81. package/packages/memory-engine/pme_memory/embed.py +74 -0
  82. package/packages/memory-engine/pme_memory/health.py +36 -0
  83. package/packages/memory-engine/pme_memory/hygiene.py +159 -0
  84. package/packages/memory-engine/pme_memory/indexer.py +200 -0
  85. package/packages/memory-engine/pme_memory/needs.py +55 -0
  86. package/packages/memory-engine/pme_memory/provenance.py +80 -0
  87. package/packages/memory-engine/pme_memory/scoring.py +168 -0
  88. package/packages/memory-engine/pme_memory/search.py +52 -0
  89. package/packages/memory-engine/pme_memory/store.py +86 -0
  90. package/packages/memory-engine/pme_memory/synthesis.py +114 -0
  91. package/packages/memory-engine/pyproject.toml +65 -0
  92. package/packages/memory-engine/scripts/kg-extractor.py +557 -0
  93. package/packages/memory-engine/scripts/kg-preflexor-v2.py +738 -0
  94. 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())