Skip to content

feat(v3.0): wire API-based summarizer from config#26

Open
RichardHightower wants to merge 2 commits intomainfrom
feature/v3.0-api-summarizer-wiring
Open

feat(v3.0): wire API-based summarizer from config#26
RichardHightower wants to merge 2 commits intomainfrom
feature/v3.0-api-summarizer-wiring

Conversation

@RichardHightower
Copy link
Copy Markdown
Contributor

Summary

Wires the existing ApiSummarizer (OpenAI + Anthropic) into the daemon from config and environment variables. Previously hardcoded to MockSummarizer with a TODO comment.

What changed

File Change
crates/memory-daemon/src/commands.rs build_summarizer() function: reads provider/model from config, resolves API key from env var or config, constructs ApiSummarizer or falls back to MockSummarizer with warning. 7 unit tests.
crates/memory-types/src/config.rs Added api_key_env: Option<String> to SummarizerSettings for custom env var override (serde(default) for backward compat)
.planning/STATE.md, .planning/ROADMAP.md v3.0 progress updated

How it works

# ~/.config/agent-memory/config.toml
[summarizer]
provider = "openai"          # or "anthropic"
model = "gpt-4o-mini"        # or "claude-3-haiku-20240307"
# api_key_env = "MY_KEY"     # optional override, defaults to OPENAI_API_KEY / ANTHROPIC_API_KEY

Set the corresponding env var (OPENAI_API_KEY or ANTHROPIC_API_KEY) and the daemon picks it up automatically. Without an API key, it falls back to MockSummarizer with a warning log.

Design decisions

  • Env-var-first for secrets — API keys stay out of config files. Config can optionally override which env var to read via api_key_env.
  • Backward compatible — new field is Option<String> with serde(default), existing configs unchanged.
  • Fail-open — missing API key logs a warning and falls back to mock, never blocks startup.
  • Case-insensitive provider matchingOpenAI, openai, OPENAI all work.

Tests

7 unit tests covering:

  • Provider → env var mapping (openai, anthropic, custom)
  • Case-insensitive provider matching
  • Explicit key in config takes precedence over env var
  • Env var lookup for both providers
  • Fallback to mock when no key available

- Read provider/model/api_key_env from SummarizerSettings config
- Construct ApiSummarizer (OpenAI or Anthropic) when API key available
- Fallback to MockSummarizer with warning when no API key found
- Add build_summarizer() function for testable summarizer construction
- Add unit tests for provider selection and env var lookup
- Update planning docs for v3.0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant