You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+41-16Lines changed: 41 additions & 16 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -229,29 +229,30 @@ Each search method compensates for the others' weaknesses. The result: **dramati
229
229
230
230
## Performance
231
231
232
-
ragweld measures real pipeline latency and throughput via **Prometheus + Grafana** (see dashboards `tribrid-overview` and `tribrid-rag-metrics`). For reproducible local benchmarking (index + search), use the built-in benchmark runner.
232
+
ragweld measures pipeline latency and throughput via **Prometheus + Grafana** (see dashboards `tribrid-overview` and `tribrid-rag-metrics`). The benchmark runner measures complete HTTP search requests against a running Ragweld API, including application processing and network time. Warmup requests are excluded from measured latency and throughput.
233
233
234
234
### Reproducible benchmark (index + search)
235
235
236
236
Prereqs:
237
237
238
238
```bash
239
-
docker compose up -d postgres neo4j
240
-
# If using the docker-compose defaults:
241
-
export NEO4J_PASSWORD=password
239
+
# Run on LXC100 against the already running API and a registered corpus.
--query 'How does the indexing run fence prevent concurrent replacement?' \
244
+
--out-json /var/tmp/ragweld-benchmark.json
242
245
```
243
246
244
-
Run:
247
+
To include indexing, omit `--skip-index`. The server uses the registered corpus path unless `--corpus-path` supplies another path on that server. Indexing uses the normal run fence, validation and promotion lifecycle. `--force-reindex` permits changed embedding settings; semantic graph indexing also requires `--approved-graph-schema-hash` with the exact reviewed schema hash.
The runner prints Markdown and writes JSON when `--out-json` is supplied. `--request-timeout` bounds each HTTP request (default 60 seconds); `--index-timeout` bounds waiting for the accepted run (default 3,600 seconds). A failed, cancelled or unfinished index produces no success report. A wait timeout leaves the server-owned job running, so inspect that corpus's run before starting another benchmark.
249
250
250
-
This prints **Markdown + JSON** summary you can paste into docs/PRs.
251
+
`--out-json` replaces the selected report: after input validation, the runner removes the previous report before making API requests and publishes a complete JSON file only on success. A failed rerun therefore leaves no stale metrics at that path. Concurrent invocations using the same output path are rejected without changing the active writer's report.
251
252
252
253
### Latest benchmark (local dev run)
253
254
254
-
Generated on `2026-02-01`with the command above (vector+sparse+graph enabled, `final_k=10`).
255
+
Historical internal-pipeline measurement from `2026-02-01` (vector+sparse+graph enabled, `final_k=10`); these values are not directly comparable to the current HTTP benchmark.
255
256
256
257
| Operation | Performance | Notes |
257
258
|---|---:|---|
@@ -281,7 +282,7 @@ Treat the mainline status section above as the architecture truth for modernizat
281
282
- Docker & Docker Compose
282
283
- Python 3.11+ with [uv](https://github.com/astral-sh/uv)
283
284
- Node.js 18+
284
-
-API keys for your preferred embedding provider (OpenAI, Voyage, etc.)
285
+
-Provider credentials for the configured cloud workflows; OpenAI embedding credentials belong to LiteLLM
285
286
286
287
### 1. Clone and Configure
287
288
@@ -291,17 +292,37 @@ cd ragweld
291
292
cp .env.example .env
292
293
```
293
294
294
-
Edit `.env` with your API keys:
295
+
The app's `.env` configures its gateway connection with `LITELLM_BASE_URL` and
296
+
`LITELLM_API_KEY`. OpenAI embeddings and generation call LiteLLM; their upstream
297
+
provider credentials belong in the gateway's private `infra/litellm.env`.
298
+
299
+
For a new install without an existing gateway environment file:
300
+
295
301
```bash
296
-
OPENAI_API_KEY=sk-...
297
-
# or
298
-
VOYAGE_API_KEY=pa-...
302
+
cp infra/litellm.env.example infra/litellm.env
303
+
chmod 600 infra/litellm.env
299
304
```
300
305
306
+
Edit that private file to replace `OPENAI_API_KEY=disabled` when enabling OpenAI
307
+
embeddings. Preserve existing gateway settings and Langfuse credentials when
308
+
updating an installation. Do not put `OPENAI_API_KEY` in the app's `.env` or
309
+
export it into the app process. Compose passes the app's `LITELLM_API_KEY` to
310
+
the gateway as `LITELLM_MASTER_KEY`; this gateway client credential is separate
311
+
from the upstream OpenAI key.
312
+
313
+
On the Proxmox deployment, `.env` points to `/etc/ragweld/runtime.env` and
314
+
`infra/litellm.env` points to `/etc/ragweld/litellm.env`. Update the existing
315
+
owner-only files on LXC100 instead of replacing those symlinks. After changing
316
+
the gateway environment, reconcile/recreate the `litellm` service through the
317
+
deployment's Compose configuration during an idle interval. Restarting only the
0 commit comments