af7dceaf77bbcd5dcafe4f65982c7cd7df5f4c4a
3 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
9a322726ae |
fix(mem0): prune dead get_all, wire rerank config default, warn on MEM0_HOST env override
Review follow-ups on the salvage: - get_all() pruned from the ABC and all three backends: mem0_list (its only caller) was removed by the recall-tuning commit, leaving new, tested, unreachable code — including SelfHostedBackend's _MAX_TOP_K over-fetch workaround. Tests for it dropped; fake-class stubs remain harmlessly. (The #52921 true-total fix lives on in the PR history if a lister ever returns.) - The persisted rerank config key was write-only (setup prompted for it, nothing read it). initialize() now parses it into _rerank_default and mem0_search uses it when the model doesn't pass rerank explicitly; per-call args still win. Guard test added. - Platform-mode setup now warns when MEM0_HOST is set in the environment: the json host-clear can't help there (_load_config seeds host from the env var, docs tell users to put it in .env) — the user would silently keep routing to the self-hosted server. - SelfHostedBackend: connect-level retries (httpx.HTTPTransport(retries=2)) so a single transient blip doesn't count toward the provider breaker; transport now injectable and the test helper uses the real __init__ instead of mirroring it via __new__. - plugin.yaml description no longer leads with reranking (off by default, platform-only); docs em-dash typo fixed. |
||
|
|
2a14205ff4 |
feat(mem0): self-hosted dashboard backend + recall tuning (salvage #55614)
Salvage of #55614 by @kartik-mem0 (mem0 maintainer). Adds a SelfHostedBackend that talks to a self-hosted Mem0 Docker server over httpx (X-API-Key auth, /search + /memories routes), gated behind `host`. Also folds in the mem0 research-team recall tuning that rides with it: rerank defaults to false across all modes, the mem0_list tool is removed (5->4 tools), search guidance is de-shouted, and self-hosted get_all reports the true stored total (#52921). Supersedes the self-hosted portion of #52487 (@liuhao1024, first-submitted). Closes #52478 Fixes #52921 |
||
|
|
2e779d11a0 |
feat(mem0): v3 API, OSS mode, update/delete tools, telemetry & review fixes (#15624)
* fix: update to version 3 endpoints and adding update and delete tool * chore: removing the test md file * fix: prevent circuit breaker on client errors in Mem0 provider * chore: add telemetry for platform version * feat: add OSS mode support to Mem0 memory provider * chore: bump mem0ai dependency to >=2.0.1 in memory plugin * refactor: enhance dependency checks and embedder config in mem0 backend * refactor: adjust fact storage message for OSS mode * refactor: expand user paths, add collection recreation on dimension change for Qdrant * fix(mem0): make MEM0_USER_ID override gateway-native ids and tag writes with channel When MEM0_USER_ID was configured (env or mem0.json), the gateway-native id from kwargs (Telegram numeric id, Discord snowflake, ...) still won, so the same human ended up under different user_ids per channel and memories never merged across CLI / Telegram / Slack / Discord. Mirrors openclaw's cfg.userId pattern: configured override wins, gateway-native id is the fallback. The legacy "hermes-user" placeholder default written by the setup wizard is treated as unset to avoid silently bucketing every gateway user together. Also tag every write with metadata.channel (cli/telegram/discord/...) so the dashboard can offer per-channel filtered views without coupling identity to the channel; document the read/write filter asymmetry as intentional (reads scope to user_id only for cross-agent recall). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * refactor: improve Mem0 memory provider backend, pagination, config, and error handling * refactor: update mem0 telemetry code, docs, and bump version * fix(mem0): make get_config_schema() return unified schema with mode-aware required flag Schema always includes api_key field so picker shows "API key / local" for both modes. In OSS mode api_key.required=False so status won't mislead. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * refactor: improve mem0 telemetry, add env var key and OSS mode detection * chore: bump mem0ai lower bound to 2.0.4 (latest SDK release) * refactor: set telemetry sample rate to 1.0 and update docs for opt‑out * fix(mem0): resolve 15 correctness, thread-safety, and resource bugs Thread safety: - Protect circuit breaker counters with _breaker_lock (race between prefetch/sync daemon threads and main thread) - Wrap sync_turn thread creation in _sync_lock; skip if previous sync is still alive after 5 s join to prevent duplicate memory ingestion - Guard _schedule_flush timer creation under _queue_lock (TOCTOU race) - Capture local `backend` reference in prefetch/sync closures so shutdown() nulling self._backend cannot crash in-flight threads Correctness: - Fix bool("false")==True for rerank param; parse string values explicitly - Guard page/top_k with max(1,...) and move int() inside try blocks - Fix fact_count=0 always in OSS mode (Memory.add returns list, not dict) - Fix prefetch() not clearing result when thread still alive after timeout - Fix atexit.register accumulating on repeated initialize() calls Backend / setup: - Handle Qdrant named-vector collections in _recreate_collection_if_dims_changed (vectors is a dict; .size access raised AttributeError, swallowed silently) - Wrap QdrantClient and psycopg2 conn/cursor in try/finally to prevent leaks - Resolve ollama_bin at top of _ensure_ollama; use it for ollama pull - Fix embedder key lookup when LLM provider has no env_var (e.g. ollama) Also: remove _telemetry_enabled cache (env var check is cheap), bump required mem0ai to >=2.0.7, minor README wording fix. * fix(mem0): fix brittle qdrant path test + add telemetry sample-rate docs - Replace generator-throw lambda with a proper def in test_qdrant_path_not_writable; use tmp_path instead of a hardcoded /nonexistent path so the test is root-safe - Add MEM0_TELEMETRY_SAMPLE_RATE to memory-providers.md (was only in the plugin README, not the user-guide docs) * revert: remove MEM0_TELEMETRY_SAMPLE_RATE from user-guide docs * refactor: remove telemetry from mem0 plugin and update documentation * fix(mem0): set stdin=DEVNULL on setup subprocess calls The TUI stdin guard (scripts/check_subprocess_stdin.py) requires every subprocess call in plugin code to set stdin= so it can't inherit the gateway's JSON-RPC stdin fd. Muzzle the docker/ollama calls in the OSS setup wizard with stdin=subprocess.DEVNULL (none need interactive input). Also covers the docker-inspect call the linter's regex misses. --------- Co-authored-by: chaithanyak42 <chaithanya.kumar42a@gmail.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |