1.2.0 introduced /api/v2 as the canonical, cloud-aligned prefix and mounted every business router twice, but the user-facing entry points (README, README.zh-CN, QUICKSTART, the docs/ set, the Langfuse example) still taught /api/v1 — so new users were pointed at the compatibility alias while docs/api.md already declared v2 canonical. - Switch every EverOS endpoint reference in docs, examples, and `everos demo --live` to /api/v2, plus the matching CLI test expectations. - Describe /api/v1 as a legacy compatibility alias that may be removed in a future major release, rather than a permanent one. Nothing changes at runtime: both prefixes still resolve to the same handlers and the v1/v2 parity test is untouched. - Add a short note in README / README.zh-CN / QUICKSTART so existing v1 integrations know they keep working. - Fix the five dead endpoint anchors in the docs/api.md table of contents, which still pointed at the pre-1.2.0 #post-apiv1... slugs. Left on v1 deliberately: docs/migration-to-1.0.0.md (historical record), CHANGELOG history, tests/** (v1 must stay covered), and the use-cases/claude-code-plugin + openher READMEs, which document a different cloud API. Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| .gitignore | ||
| README.md | ||
| demo.py | ||
README.md
EverOS × Langfuse (native OpenTelemetry)
EverOS emits OpenTelemetry spans for its own memory operations — write, memcell boundary + episode extraction (LLM), search with recall-quality scores, and OME reflection — and exports them over OTLP to any backend, including Langfuse. There is no wrapper and no extra instrumentation code: enable it in config and the traces appear.
Enable
-
Install the optional OpenTelemetry extra:
pip install "everos[otel]" -
Add
[observability]to youreveros.toml. The Langfuse keys derive the OTLP endpoint and auth automatically:[observability] enabled = true langfuse_public_key = "pk-lf-..." langfuse_secret_key = "sk-lf-..." langfuse_host = "https://us.cloud.langfuse.com" # EU: https://cloud.langfuse.com # capture_content = true # opt-in: also record query / extracted memory textContainer/CI equivalent via env vars:
EVEROS_OBSERVABILITY__ENABLED=true,EVEROS_OBSERVABILITY__LANGFUSE_PUBLIC_KEY=..., and so on. -
Run EverOS normally:
everos server start
Off by default — with enabled = false (or the otel extra absent) there is
zero tracing overhead.
What you get
| EverOS operation | Langfuse observation |
|---|---|
POST /api/v2/memory/add · flush |
span everos.memory.add / everos.memory.flush |
| memcell boundary detection (LLM) | generation everos.memcell.boundary (model + tokens) |
| episode extraction (LLM) | generation everos.extract |
| markdown persistence | span everos.persist.markdown |
POST /api/v2/memory/search |
retriever everos.memory.search → recall / rank |
| query / recall embedding | embedding everos.embedding |
| OME reflection strategies | agent everos.ome.<strategy> (linked to the triggering request's trace) |
langfuse.session.id / langfuse.user.id group the traces. Recall quality is
pushed as Langfuse scores, split by whether the method's score is calibrated:
recall_top_score plus recall_hit for HYBRID / AGENTIC (comparable [0, 1]),
and recall_top_score_raw for KEYWORD / single-route VECTOR, whose raw BM25 or
cosine values are on a different scale and must not be averaged in with the
calibrated ones. Query and memory text are captured only when
capture_content = true.
Try it
With a server running and [observability] enabled:
python demo.py
It drives one add → flush → search (keyword / hybrid / agentic) cycle against
http://127.0.0.1:8000 using only the standard library, then tells you to open
Langfuse → Tracing filtered to session.id = langfuse_demo.
Learn more
- Langfuse OpenTelemetry: https://langfuse.com/integrations/native/opentelemetry
- Config reference: the
[observability]block insrc/everos/config/default.toml.