test Supermemory with LiteLLM Gemini models

This commit is contained in:
Codex
2026-09-07 23:48:22 -07:00
parent 41ae90f88c
commit 1690f774e9
3 changed files with 118 additions and 25 deletions
+20 -17
View File
@@ -10,10 +10,12 @@ production Hindsight service or change the default Hermes profile.
cache live under `/mnt/user/appdata/supermemory-poc/data`. cache live under `/mnt/user/appdata/supermemory-poc/data`.
- A dedicated address on Docker `br0`; port `6767` is not published on the - A dedicated address on Docker `br0`; port `6767` is not published on the
unRaid host address. unRaid host address.
- Local multilingual `Xenova/bge-m3` embeddings at 1024 dimensions. - Remote OpenAI-compatible embeddings through HK LiteLLM using
- One embedding worker and ingest concurrency 1. This avoids treating known `google/gemini-embedding-2` at 1024 dimensions.
concurrent-local-embedding instability as a retrieval-quality result. - Extraction, summarization, and other intelligent steps use
- Extraction/summarization uses an operator-supplied OpenAI-compatible LLM. `gemini-3.5-flash-lite` through the same LiteLLM endpoint.
- Ingest concurrency remains 1 so the first POC emphasizes correctness and
observable cost over throughput.
- Resource ceiling: 4 CPUs and 8 GiB RAM. Supermemory Local keeps its corpus - Resource ceiling: 4 CPUs and 8 GiB RAM. Supermemory Local keeps its corpus
in memory, so RSS must be watched as the sample grows. in memory, so RSS must be watched as the sample grows.
@@ -24,8 +26,10 @@ directory and re-ingest when comparing a different embedding plan.
1. Confirm the chosen `SUPERMEMORY_IPV4_ADDRESS` is absent from both Arcane's 1. Confirm the chosen `SUPERMEMORY_IPV4_ADDRESS` is absent from both Arcane's
`br0` attachments and the LAN neighbor/DHCP tables. `br0` attachments and the LAN neighbor/DHCP tables.
2. Add `SUPERMEMORY_IPV4_ADDRESS`, `OPENAI_API_KEY`, and optional model/base URL 2. Add `SUPERMEMORY_IPV4_ADDRESS`, `OPENAI_API_KEY`,
overrides to this Project's Arcane environment. Do not put secrets in Git, `OPENAI_BASE_URL=https://api.opfo.xyz/v1`, and
`OPENAI_MODEL=gemini-3.5-flash-lite` to this Project's Arcane environment.
`OPENAI_API_KEY` is the HK LiteLLM bearer key. Do not put it in Git,
Compose, activity notes, or chat. Compose, activity notes, or chat.
3. Confirm `/mnt/user/appdata` has room for the 298 MiB server binary, the 3. Confirm `/mnt/user/appdata` has room for the 298 MiB server binary, the
multilingual model cache, data, and rollback copy. multilingual model cache, data, and rollback copy.
@@ -45,7 +49,7 @@ image build is required.
The server creates its client bearer token at: The server creates its client bearer token at:
`/mnt/user/appdata/supermemory-poc/data/api-key` `/mnt/user/appdata/supermemory-poc/data-google-gemini-embedding-2-1024/api-key`
Read it through an authorized unRaid/Arcane console without printing it into Read it through an authorized unRaid/Arcane console without printing it into
logs. Save it only as `SUPERMEMORY_API_KEY` in the `supermemory-lab` Hermes logs. Save it only as `SUPERMEMORY_API_KEY` in the `supermemory-lab` Hermes
@@ -77,17 +81,16 @@ Run `poc.py smoke` before importing any sampled production material. It checks
the v3 document path plus the v4 search, profile, and conversation endpoints the v3 document path plus the v4 search, profile, and conversation endpoints
used by Hermes. used by Hermes.
### Current local-embedding blocker ### Embedding plan and smoke gate
On the unRaid POC host, `server-v0.0.8` remains healthy but its local embedding The earlier local `Xenova/bge-m3` experiment is preserved under the old `data`
worker returns `unknown certificate verification error` when first loading directory because embedding plans cannot be changed in place. This deployment
`Xenova/bge-m3`. Supplying a Mozilla CA bundle through `SSL_CERT_FILE`, uses the fresh `data-google-gemini-embedding-2-1024` directory. The one-shot
`SSL_CERT_DIR`, `NODE_EXTRA_CA_CERTS`, and Debian's standard CA path did not `supermemory-smoke` service verifies the locked embedding plan, performs a
change the error; TLS verification was never disabled. Do not import sampled Chinese hybrid-search round trip, checks provenance metadata, and exercises
Hindsight or document data until either a remote OpenAI-compatible embedding the profile and conversation endpoints. It writes a sentinel after success so
endpoint or a separately approved local embedding sidecar passes the smoke ordinary redeploys do not add duplicate smoke documents. Do not import sampled
test. The server also returns HTTP 409 when deleting documents stuck in the Hindsight or document material until this service exits successfully.
`embedding` state, so failed smoke rows may require a fresh POC data directory.
## Evaluation guardrails ## Evaluation guardrails
+36 -8
View File
@@ -53,20 +53,20 @@ services:
PORT: "6767" PORT: "6767"
SUPERMEMORY_DATA_DIR: /var/lib/supermemory SUPERMEMORY_DATA_DIR: /var/lib/supermemory
SUPERMEMORY_DISABLE_TELEMETRY: "1" SUPERMEMORY_DISABLE_TELEMETRY: "1"
SUPERMEMORY_EMBEDDING_PROVIDER: local SUPERMEMORY_EMBEDDING_PROVIDER: openai
SUPERMEMORY_EMBEDDING_MODEL: Xenova/bge-m3 SUPERMEMORY_EMBEDDING_MODEL: google/gemini-embedding-2
SUPERMEMORY_EMBEDDING_DIMENSIONS: "1024" SUPERMEMORY_EMBEDDING_DIMENSIONS: "1024"
SUPERMEMORY_LOCAL_EMBEDDING_POOL_SIZE: "1" SUPERMEMORY_EMBEDDING_BASE_URL: ${OPENAI_BASE_URL:?set OPENAI_BASE_URL in Arcane environment}
SUPERMEMORY_LOCAL_EMBEDDING_WASM_THREADS: "1"
SUPERMEMORY_LOCAL_EMBEDDING_BATCH_SIZE: "4"
SUPERMEMORY_EMBEDDING_RAM_LIMIT: 2gb SUPERMEMORY_EMBEDDING_RAM_LIMIT: 2gb
SUPERMEMORY_INGEST_CONCURRENCY: "1" SUPERMEMORY_INGEST_CONCURRENCY: "1"
SSL_CERT_FILE: /opt/supermemory/bin/ca-certificates.crt SSL_CERT_FILE: /opt/supermemory/bin/ca-certificates.crt
SSL_CERT_DIR: /etc/ssl/certs SSL_CERT_DIR: /etc/ssl/certs
NODE_EXTRA_CA_CERTS: /opt/supermemory/bin/ca-certificates.crt NODE_EXTRA_CA_CERTS: /opt/supermemory/bin/ca-certificates.crt
OPENAI_API_KEY: ${OPENAI_API_KEY:?set OPENAI_API_KEY in Arcane environment} OPENAI_API_KEY: ${OPENAI_API_KEY:?set OPENAI_API_KEY in Arcane environment}
OPENAI_BASE_URL: ${OPENAI_BASE_URL:-} OPENAI_BASE_URL: ${OPENAI_BASE_URL:?set OPENAI_BASE_URL in Arcane environment}
OPENAI_MODEL: ${OPENAI_MODEL:-gpt-5.1} OPENAI_MODEL: ${OPENAI_MODEL:-gemini-3.5-flash-lite}
OPENAI_FAST_MODEL: ${OPENAI_MODEL:-gemini-3.5-flash-lite}
OPENAI_TEXT_MODEL: ${OPENAI_MODEL:-gemini-3.5-flash-lite}
entrypoint: entrypoint:
- /bin/bash - /bin/bash
- -ec - -ec
@@ -86,7 +86,7 @@ services:
volumes: volumes:
- /mnt/user/appdata/supermemory-poc/bin:/opt/supermemory/bin:ro - /mnt/user/appdata/supermemory-poc/bin:/opt/supermemory/bin:ro
- /mnt/user/appdata/supermemory-poc/bin/ca-certificates.crt:/etc/ssl/certs/ca-certificates.crt:ro - /mnt/user/appdata/supermemory-poc/bin/ca-certificates.crt:/etc/ssl/certs/ca-certificates.crt:ro
- /mnt/user/appdata/supermemory-poc/data:/var/lib/supermemory - /mnt/user/appdata/supermemory-poc/data-google-gemini-embedding-2-1024:/var/lib/supermemory
networks: networks:
br0: br0:
ipv4_address: ${SUPERMEMORY_IPV4_ADDRESS:?set an unused LAN address in Arcane environment} ipv4_address: ${SUPERMEMORY_IPV4_ADDRESS:?set an unused LAN address in Arcane environment}
@@ -100,6 +100,34 @@ services:
max-size: 10m max-size: 10m
max-file: "3" max-file: "3"
supermemory-smoke:
image: curlimages/curl:8.16.0@sha256:463eaf6072688fe96ac64fa623fe73e1dbe25d8ad6c34404a669ad3ce1f104b6
container_name: supermemory-poc-smoke
user: "0:0"
restart: "no"
depends_on:
supermemory:
condition: service_healthy
network_mode: service:supermemory
environment:
SUPERMEMORY_URL: http://127.0.0.1:6767
SUPERMEMORY_CONTAINER_TAG: hermes_supermemory_lab
entrypoint:
- /bin/sh
- /opt/supermemory-poc/smoke.sh
volumes:
- ./smoke.sh:/opt/supermemory-poc/smoke.sh:ro
- /mnt/user/appdata/supermemory-poc/data-google-gemini-embedding-2-1024:/var/lib/supermemory
security_opt:
- no-new-privileges:true
cap_drop:
- ALL
logging:
driver: json-file
options:
max-size: 1m
max-file: "2"
networks: networks:
fetch: fetch:
internal: false internal: false
+62
View File
@@ -0,0 +1,62 @@
#!/bin/sh
set -eu
data_dir=/var/lib/supermemory
sentinel="$data_dir/.smoke-google-gemini-embedding-2-1024.ok"
base_url="${SUPERMEMORY_URL:-http://127.0.0.1:6767}"
container_tag="${SUPERMEMORY_CONTAINER_TAG:-hermes_supermemory_lab}"
if [ -f "$sentinel" ]; then
printf '%s\n' '{"smoke":"already-passed"}'
exit 0
fi
api_key=$(cat "$data_dir/api-key")
auth_header="Authorization: Bearer $api_key"
marker="supermemory-poc-google-embedding-2-$(date +%s)"
plan="$data_dir/embedding-plan.json"
for _ in $(seq 1 30); do
[ -f "$plan" ] && break
sleep 1
done
grep -q 'openai' "$plan"
grep -q 'google/gemini-embedding-2' "$plan"
grep -q '1024' "$plan"
curl --fail --silent --show-error --max-time 60 \
-H "$auth_header" \
-H 'Content-Type: application/json' \
--data "{\"content\":\"$marker:中文跨文档检索测试;海棠计划的下一步是核对原始报告。\",\"containerTag\":\"$container_tag\",\"customId\":\"$marker\",\"metadata\":{\"source\":\"poc-smoke\",\"status\":\"temporary\"}}" \
"$base_url/v3/documents" >/tmp/add.json
found=false
for _ in $(seq 1 90); do
curl --fail --silent --show-error --max-time 60 \
-H "$auth_header" \
-H 'Content-Type: application/json' \
--data "{\"q\":\"海棠计划下一步是什么?\",\"containerTag\":\"$container_tag\",\"searchMode\":\"hybrid\",\"limit\":5}" \
"$base_url/v4/search" >/tmp/search.json
if grep -q '核对原始报告' /tmp/search.json && grep -q 'poc-smoke' /tmp/search.json; then
found=true
break
fi
sleep 2
done
[ "$found" = true ]
curl --fail --silent --show-error --max-time 60 \
-H "$auth_header" \
-H 'Content-Type: application/json' \
--data "{\"containerTag\":\"$container_tag\",\"q\":\"海棠计划\"}" \
"$base_url/v4/profile" >/tmp/profile.json
grep -q '"profile"' /tmp/profile.json
curl --fail --silent --show-error --max-time 60 \
-H "$auth_header" \
-H 'Content-Type: application/json' \
--data "{\"conversationId\":\"$marker\",\"containerTags\":[\"$container_tag\"],\"messages\":[{\"role\":\"user\",\"content\":\"这只是隔离测试。\"},{\"role\":\"assistant\",\"content\":\"不会作为正式事实。\"}],\"metadata\":{\"source\":\"poc-smoke\",\"status\":\"temporary\"}}" \
"$base_url/v4/conversations" >/tmp/conversation.json
touch "$sentinel"
printf '%s\n' '{"embedding_plan":"openai/google/gemini-embedding-2/1024","llm":"gemini-3.5-flash-lite","chinese_hybrid_search":"ok","metadata_traceability":"ok","profile":"ok","conversation_ingest":"accepted"}'