Skip to content

v0.9.1: graph writes silently fail on FalkorDB v4 (--params syntax) and A-MAC ignores provider config #21

@shade-familiar

Description

@shade-familiar

Hit two bugs running v0.9.1 on a fresh setup with falkordb/falkordb:latest (currently FalkorDB module v4.16.9). Both are easy to reproduce.

Bug 1: Graph writes silently fail with Missing parameters on FalkorDB v4

Symptom

Every /commit returns:

"graph": {"written": false, "entities": 5, "connected_to": []},
"warnings": ["graph_write_failed: graph_write_returned_false"]

MATCH (n) RETURN count(n) against the brain graph returns 0 even after thousands of commits.

Root cause

tools/brain/graph.py passes Cypher parameters using the legacy redis-cli ... --params {json} syntax:

redis_client.execute_command(
    "GRAPH.QUERY",
    _state.GRAPH_NAME,
    "MERGE (m:Memory {id: $id}) SET m.text = $text, m.created_at = $ts",
    "--params",
    json.dumps({"id": str(point_id), "text": text_preview, "ts": ts}),
)

FalkorDB v4 rejects this with Missing parameters and the error is logged but swallowed (graph_write_returned_false). Modern FalkorDB requires the in-query CYPHER param=value ... prefix syntax.

Fix (proposed)

Add a _params_prefix(params) helper that builds a CYPHER key="value" ... prefix with proper quoting/escaping, and prepend it to the Cypher string instead of passing --params. Affects 6 call sites in tools/brain/graph.py. Local patch tested against FalkorDB v4.16.9, all writes + 1-hop, 2-hop, keyword, and context queries verified working. Happy to open a PR.

Bug 2: A-MAC ignores provider = "anthropic" in config and always hits the Ollama URL

Symptom

With rasputin.toml:

[amac]
threshold = 4.0
timeout = 30
model = "claude-haiku-4-5-20251001"
provider = "anthropic"

Every commit logs:

A-MAC scoring error; fail-open: 404 Client Error: Not Found for url: http://localhost:11434/v1/chat/completions

The model name claude-haiku-4-5-20251001 is sent to Ollama at localhost:11434, which 404s.

Root cause

tools/brain/_state.py reads model, url, timeout, threshold from the [amac] config block but does not read provider. tools/brain/amac.py then unconditionally posts to _state.AMAC_LLM_URL (defaulting to Ollama's /v1/chat/completions) with an OpenAI-compatible body. The provider = "anthropic" line is decorative.

Fix (proposed)

Add AMAC_PROVIDER = str(CONFIG.get("amac", {}).get("provider", "ollama")).lower() to _state.py. In amac.py, branch on AMAC_PROVIDER == "anthropic" and ANTHROPIC_API_KEY to call https://api.anthropic.com/v1/messages with the standard x-api-key + anthropic-version headers and the Anthropic message format (then concatenate text blocks from the response). Local patch verified against claude-haiku-4-5-20251001 returning expected SCORES: r,n,s triplets.

Bonus: Qdrant healthcheck in docker-compose.yml references curl, not present in current Qdrant images

healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost:6333/healthz"]

qdrant/qdrant:latest no longer ships curl, so the container is permanently unhealthy (91k+ failing streak in my case). Replacing with a bash /dev/tcp probe works:

test: ["CMD", "bash", "-c", "exec 3<>/dev/tcp/localhost/6333 && printf 'GET /healthz HTTP/1.0\r\n\r\n' >&3 && head -1 <&3 | grep -q '200 OK'"]

Environment

  • v0.9.1 via git clone
  • FalkorDB module v4.16.9 (image falkordb/falkordb:latest pulled this week)
  • Qdrant qdrant/qdrant:latest
  • Ollama 0.15.4
  • Linux 6.6 (WSL2)

Happy to open a PR for any/all of these if useful.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions