@simbimbo/memory-ocmemog 0.1.4 → 0.1.6
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/CHANGELOG.md +27 -0
- package/README.md +9 -7
- package/brain/runtime/inference.py +31 -1
- package/brain/runtime/memory/api.py +824 -5
- package/brain/runtime/memory/context_builder.py +101 -76
- package/brain/runtime/memory/distill.py +156 -13
- package/brain/runtime/memory/freshness.py +24 -1
- package/brain/runtime/memory/integrity.py +22 -6
- package/brain/runtime/memory/pondering_engine.py +87 -8
- package/brain/runtime/memory/promote.py +6 -0
- package/brain/runtime/memory/provenance.py +52 -0
- package/brain/runtime/memory/retrieval.py +116 -50
- package/brain/runtime/memory/vector_index.py +67 -5
- package/docs/notes/2026-03-18-memory-repair-and-backfill.md +70 -0
- package/docs/notes/local-model-role-matrix-2026-03-18.md +50 -0
- package/docs/usage.md +16 -14
- package/index.ts +1 -1
- package/ocmemog/sidecar/app.py +381 -9
- package/ocmemog/sidecar/compat.py +7 -1
- package/ocmemog/sidecar/transcript_watcher.py +2 -2
- package/package.json +1 -1
- package/scripts/install-ocmemog.sh +2 -2
- package/scripts/ocmemog-backfill-vectors.py +33 -0
- package/scripts/ocmemog-context.sh +1 -1
- package/scripts/ocmemog-demo.py +1 -1
- package/scripts/ocmemog-load-test.py +1 -1
- package/scripts/ocmemog-ponder.sh +2 -2
- package/scripts/ocmemog-recall-test.py +1 -1
- package/scripts/ocmemog-reindex-vectors.py +8 -0
- package/scripts/ocmemog-reliability-soak.py +1 -1
- package/scripts/ocmemog-sidecar.sh +33 -7
- package/scripts/ocmemog-test-rig.py +1 -1
|
@@ -1,12 +1,20 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
2
|
from __future__ import annotations
|
|
3
3
|
|
|
4
|
+
import os
|
|
4
5
|
import sys
|
|
5
6
|
from pathlib import Path
|
|
6
7
|
|
|
7
8
|
REPO_ROOT = Path(__file__).resolve().parents[1]
|
|
8
9
|
sys.path.insert(0, str(REPO_ROOT))
|
|
9
10
|
|
|
11
|
+
os.environ.setdefault("OCMEMOG_USE_OLLAMA", "true")
|
|
12
|
+
os.environ.setdefault("OCMEMOG_OLLAMA_MODEL", "phi3:latest")
|
|
13
|
+
os.environ.setdefault("OCMEMOG_OLLAMA_EMBED_MODEL", "nomic-embed-text:latest")
|
|
14
|
+
os.environ.setdefault("BRAIN_EMBED_MODEL_PROVIDER", "ollama")
|
|
15
|
+
os.environ.setdefault("BRAIN_EMBED_MODEL_LOCAL", "")
|
|
16
|
+
os.environ.setdefault("OCMEMOG_STATE_DIR", str(REPO_ROOT / ".ocmemog-state"))
|
|
17
|
+
|
|
10
18
|
from brain.runtime.memory import vector_index
|
|
11
19
|
|
|
12
20
|
if __name__ == "__main__":
|
|
@@ -119,7 +119,7 @@ def _run_sequence(base_url: str, *, token: str | None, timeout: float, worker_id
|
|
|
119
119
|
|
|
120
120
|
def main() -> None:
|
|
121
121
|
parser = argparse.ArgumentParser(description="Run a live reliability soak against the local ocmemog sidecar.")
|
|
122
|
-
parser.add_argument("--base-url", default="http://127.0.0.1:
|
|
122
|
+
parser.add_argument("--base-url", default="http://127.0.0.1:17891")
|
|
123
123
|
parser.add_argument("--iterations", type=int, default=8)
|
|
124
124
|
parser.add_argument("--workers", type=int, default=2)
|
|
125
125
|
parser.add_argument("--timeout", type=float, default=30.0)
|
|
@@ -3,7 +3,7 @@ set -euo pipefail
|
|
|
3
3
|
|
|
4
4
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
5
5
|
HOST="${OCMEMOG_HOST:-127.0.0.1}"
|
|
6
|
-
PORT="${OCMEMOG_PORT:-
|
|
6
|
+
PORT="${OCMEMOG_PORT:-17891}"
|
|
7
7
|
PYTHON_BIN="${OCMEMOG_PYTHON_BIN:-}"
|
|
8
8
|
|
|
9
9
|
export PATH="/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:${PATH:-}"
|
|
@@ -13,21 +13,47 @@ export OCMEMOG_STATE_DIR="${OCMEMOG_STATE_DIR:-${ROOT_DIR}/.ocmemog-state}"
|
|
|
13
13
|
export PYTHONPATH="${ROOT_DIR}${PYTHONPATH:+:${PYTHONPATH}}"
|
|
14
14
|
mkdir -p "${OCMEMOG_STATE_DIR}" "${OCMEMOG_STATE_DIR}/logs"
|
|
15
15
|
|
|
16
|
+
is_on_battery() {
|
|
17
|
+
if [[ "$(uname -s)" != "Darwin" ]]; then
|
|
18
|
+
return 1
|
|
19
|
+
fi
|
|
20
|
+
command -v pmset >/dev/null 2>&1 || return 1
|
|
21
|
+
pmset -g batt 2>/dev/null | grep -q "Battery Power"
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
LAPTOP_MODE="${OCMEMOG_LAPTOP_MODE:-auto}"
|
|
25
|
+
if [[ "$LAPTOP_MODE" == "auto" ]]; then
|
|
26
|
+
if is_on_battery; then
|
|
27
|
+
LAPTOP_MODE="battery"
|
|
28
|
+
else
|
|
29
|
+
LAPTOP_MODE="ac"
|
|
30
|
+
fi
|
|
31
|
+
fi
|
|
32
|
+
export OCMEMOG_LAPTOP_MODE="$LAPTOP_MODE"
|
|
33
|
+
|
|
16
34
|
# defaults for local ollama-backed inference/embeddings
|
|
17
35
|
export OCMEMOG_USE_OLLAMA="${OCMEMOG_USE_OLLAMA:-true}"
|
|
18
36
|
export OCMEMOG_OLLAMA_MODEL="${OCMEMOG_OLLAMA_MODEL:-phi3:latest}"
|
|
19
37
|
export OCMEMOG_OLLAMA_EMBED_MODEL="${OCMEMOG_OLLAMA_EMBED_MODEL:-nomic-embed-text:latest}"
|
|
38
|
+
export OCMEMOG_PONDER_MODEL="${OCMEMOG_PONDER_MODEL:-qwen2.5:7b}"
|
|
20
39
|
export BRAIN_EMBED_MODEL_PROVIDER="${BRAIN_EMBED_MODEL_PROVIDER:-ollama}"
|
|
21
40
|
export BRAIN_EMBED_MODEL_LOCAL="${BRAIN_EMBED_MODEL_LOCAL:-}"
|
|
22
41
|
|
|
23
|
-
#
|
|
42
|
+
# battery-aware transcript watcher defaults
|
|
24
43
|
export OCMEMOG_TRANSCRIPT_WATCHER="${OCMEMOG_TRANSCRIPT_WATCHER:-true}"
|
|
25
44
|
export OCMEMOG_SESSION_DIR="${OCMEMOG_SESSION_DIR:-$HOME/.openclaw/agents/main/sessions}"
|
|
26
|
-
|
|
27
|
-
export
|
|
28
|
-
export
|
|
29
|
-
export
|
|
30
|
-
export OCMEMOG_REINFORCE_SENTIMENT="${OCMEMOG_REINFORCE_SENTIMENT:-
|
|
45
|
+
if [[ "$LAPTOP_MODE" == "battery" ]]; then
|
|
46
|
+
export OCMEMOG_TRANSCRIPT_POLL_SECONDS="${OCMEMOG_TRANSCRIPT_POLL_SECONDS:-120}"
|
|
47
|
+
export OCMEMOG_INGEST_BATCH_SECONDS="${OCMEMOG_INGEST_BATCH_SECONDS:-120}"
|
|
48
|
+
export OCMEMOG_INGEST_BATCH_MAX="${OCMEMOG_INGEST_BATCH_MAX:-10}"
|
|
49
|
+
export OCMEMOG_REINFORCE_SENTIMENT="${OCMEMOG_REINFORCE_SENTIMENT:-false}"
|
|
50
|
+
else
|
|
51
|
+
export OCMEMOG_TRANSCRIPT_POLL_SECONDS="${OCMEMOG_TRANSCRIPT_POLL_SECONDS:-30}"
|
|
52
|
+
export OCMEMOG_INGEST_BATCH_SECONDS="${OCMEMOG_INGEST_BATCH_SECONDS:-30}"
|
|
53
|
+
export OCMEMOG_INGEST_BATCH_MAX="${OCMEMOG_INGEST_BATCH_MAX:-25}"
|
|
54
|
+
export OCMEMOG_REINFORCE_SENTIMENT="${OCMEMOG_REINFORCE_SENTIMENT:-true}"
|
|
55
|
+
fi
|
|
56
|
+
export OCMEMOG_INGEST_ENDPOINT="${OCMEMOG_INGEST_ENDPOINT:-http://127.0.0.1:17891/memory/ingest_async}"
|
|
31
57
|
export OCMEMOG_INGEST_SOURCE="${OCMEMOG_INGEST_SOURCE:-transcript}"
|
|
32
58
|
export OCMEMOG_INGEST_MEMORY_TYPE="${OCMEMOG_INGEST_MEMORY_TYPE:-reflections}"
|
|
33
59
|
|
|
@@ -12,7 +12,7 @@ from pathlib import Path
|
|
|
12
12
|
from typing import Iterable
|
|
13
13
|
from urllib import request as urlrequest
|
|
14
14
|
|
|
15
|
-
DEFAULT_ENDPOINT = "http://127.0.0.1:
|
|
15
|
+
DEFAULT_ENDPOINT = "http://127.0.0.1:17891"
|
|
16
16
|
DEFAULT_EXTS = {".md", ".txt", ".log", ".jsonl"}
|
|
17
17
|
DEFAULT_SKIP_DIRS = {
|
|
18
18
|
".git",
|