feat: extract facts with main agent LLM, bypass mem0 GPT-nano #14

Open
nanobot wants to merge 1 commits from feat/mem0-haiku-oauth into main
Collaborator

Instead of hacking mem0 provider system to swap GPT-nano for Haiku, use the main agent existing LLM (already running, already paid for) to extract facts from conversations, then store them with infer=False.

Changes (memory_mem0.py only)

  • extract_facts() — sends conversation to provider.chat() with extraction prompt, returns list of facts as JSON
  • store_facts() — stores each pre-extracted fact via mem0.add(infer=False)
  • consolidate() — calls extract_facts + store_facts instead of add_conversation
  • self.custom_prompt saved as instance variable for extract_facts to use

What this eliminates

  • No custom LLM provider class
  • No Dockerfile patches
  • No mem0 package file edits
  • No extra API calls to OpenAI GPT-nano

The extraction uses whatever model the main agent is running on (Haiku/Sonnet via Claude Max — prepaid, zero additional cost).

Instead of hacking mem0 provider system to swap GPT-nano for Haiku, use the main agent existing LLM (already running, already paid for) to extract facts from conversations, then store them with `infer=False`. ## Changes (memory_mem0.py only) - `extract_facts()` — sends conversation to `provider.chat()` with extraction prompt, returns list of facts as JSON - `store_facts()` — stores each pre-extracted fact via `mem0.add(infer=False)` - `consolidate()` — calls `extract_facts` + `store_facts` instead of `add_conversation` - `self.custom_prompt` saved as instance variable for `extract_facts` to use ## What this eliminates - No custom LLM provider class - No Dockerfile patches - No mem0 package file edits - No extra API calls to OpenAI GPT-nano The extraction uses whatever model the main agent is running on (Haiku/Sonnet via Claude Max — prepaid, zero additional cost).
nanobot added 1 commit 2026-03-03 11:12:32 +01:00
feat: use Haiku via Claude Max OAuth for mem0 extraction LLM
Build Nanobot OAuth / cleanup (pull_request) Has been skipped
Build Nanobot OAuth / build (pull_request) Successful in 24m38s
c18d811af0
Replaces GPT-4.1-nano (pay-per-call OpenAI) with Haiku (prepaid Claude Max).

- Add mem0_anthropic_oauth.py: custom LLM provider using httpx + Bearer auth
- Register provider in memory_mem0.py at import time
- Default to anthropic_oauth when no LLM explicitly configured
- Dockerfile: sed patch to add anthropic_oauth to mem0 provider whitelist
Collaborator

Code Review — PR #14: Use Haiku via Claude Max OAuth for mem0 extraction LLM

Good idea to eliminate the per-call OpenAI cost by reusing the Claude Max subscription. However, there are several issues that need fixing before this can merge — one of which is a ship-blocker that will silently break mem0 entirely.


BLOCKING: Import name mismatch — mem0 will silently disable itself

memory_mem0.py:20:

from nanobot.agent.mem0_anthropic_oauth import register
register()

mem0_anthropic_oauth.py:115:

def register_anthropic_oauth():

There is no function named register in that module. The function is register_anthropic_oauth. This ImportError is caught by the except ImportError block on line 22, which sets HAS_MEM0 = Falsesilently disabling the entire mem0 memory system, not just the OAuth provider.

Fix: Either rename the import to from nanobot.agent.mem0_anthropic_oauth import register_anthropic_oauth and call that, or add register = register_anthropic_oauth at module level.


HIGH: Factory module path will fail on dynamic import

mem0_anthropic_oauth.py:121-122:

LlmFactory.provider_to_class["anthropic_oauth"] = (
    "mem0_anthropic_oauth.AnthropicOAuthLLM",
    BaseLlmConfig,
)

mem0's factory uses this string to dynamically import the class (something like importlib.import_module("mem0_anthropic_oauth")). The actual module path is nanobot.agent.mem0_anthropic_oauth. Unless the package happens to be directly on sys.path as a top-level module, this will fail when mem0 tries to instantiate the LLM.

Fix: Use "nanobot.agent.mem0_anthropic_oauth.AnthropicOAuthLLM".


MEDIUM: OAuth token never refreshed

mem0_anthropic_oauth.py:64:

self.token = _load_oauth_token()

The token is loaded once in __init__ and cached forever. OAuth tokens expire. In a long-running gateway process, this token will go stale and all mem0 extractions will start failing with 401s.

Suggestion: Re-read the token from the credentials file on each request (or cache with a TTL), similar to how the main anthropic_oauth.py provider handles this.


MEDIUM: tool_choice format wrong for Anthropic API

mem0_anthropic_oauth.py:96:

payload["tool_choice"] = tool_choice  # tool_choice is a str "auto"

Anthropic's Messages API expects tool_choice as an object: {"type": "auto"}, not a bare string "auto". This will cause a 400 error if mem0 ever passes tools. Unlikely for fact extraction, but worth fixing since the code path exists.


LOW: Unused import

mem0_anthropic_oauth.py:20: os is imported but never used.


LOW: Hardcoded user-agent version

mem0_anthropic_oauth.py:47: "user-agent": "claude-cli/2.1.2 (external, cli)" — this version string will get stale. Consider reading from a constant or dropping it.


LOW: Dockerfile sed patch fragility

The sed patch on line 28 depends on the exact string "anthropic", appearing in mem0's source. If mem0 updates their formatting (e.g., switches to a set, renames the variable, or reformats), this breaks silently at build time. Consider pinning the mem0 version in pyproject.toml if not already done, or adding a build-time verification that the patch worked.


Summary

Severity Issue File:Line
Blocker import register — no such name, silently kills mem0 memory_mem0.py:20
High Factory module path "mem0_anthropic_oauth..." won't resolve mem0_anthropic_oauth.py:122
Medium Token loaded once, never refreshed mem0_anthropic_oauth.py:64
Medium tool_choice should be {"type": "auto"} mem0_anthropic_oauth.py:96
Low Unused os import mem0_anthropic_oauth.py:20
Low Hardcoded user-agent version mem0_anthropic_oauth.py:47
Low Fragile sed patch in Dockerfile Dockerfile:28

The blocker and the factory path issue need to be fixed — without those, this PR will deploy and silently do nothing (mem0 disabled) or crash on first extraction attempt.

## Code Review — PR #14: Use Haiku via Claude Max OAuth for mem0 extraction LLM Good idea to eliminate the per-call OpenAI cost by reusing the Claude Max subscription. However, there are several issues that need fixing before this can merge — one of which is a **ship-blocker** that will silently break mem0 entirely. --- ### BLOCKING: Import name mismatch — mem0 will silently disable itself **`memory_mem0.py:20`**: ```python from nanobot.agent.mem0_anthropic_oauth import register register() ``` **`mem0_anthropic_oauth.py:115`**: ```python def register_anthropic_oauth(): ``` There is no function named `register` in that module. The function is `register_anthropic_oauth`. This `ImportError` is caught by the `except ImportError` block on line 22, which sets `HAS_MEM0 = False` — **silently disabling the entire mem0 memory system**, not just the OAuth provider. **Fix**: Either rename the import to `from nanobot.agent.mem0_anthropic_oauth import register_anthropic_oauth` and call that, or add `register = register_anthropic_oauth` at module level. --- ### HIGH: Factory module path will fail on dynamic import **`mem0_anthropic_oauth.py:121-122`**: ```python LlmFactory.provider_to_class["anthropic_oauth"] = ( "mem0_anthropic_oauth.AnthropicOAuthLLM", BaseLlmConfig, ) ``` mem0's factory uses this string to dynamically import the class (something like `importlib.import_module("mem0_anthropic_oauth")`). The actual module path is `nanobot.agent.mem0_anthropic_oauth`. Unless the package happens to be directly on `sys.path` as a top-level module, this will fail when mem0 tries to instantiate the LLM. **Fix**: Use `"nanobot.agent.mem0_anthropic_oauth.AnthropicOAuthLLM"`. --- ### MEDIUM: OAuth token never refreshed **`mem0_anthropic_oauth.py:64`**: ```python self.token = _load_oauth_token() ``` The token is loaded once in `__init__` and cached forever. OAuth tokens expire. In a long-running gateway process, this token will go stale and all mem0 extractions will start failing with 401s. **Suggestion**: Re-read the token from the credentials file on each request (or cache with a TTL), similar to how the main `anthropic_oauth.py` provider handles this. --- ### MEDIUM: `tool_choice` format wrong for Anthropic API **`mem0_anthropic_oauth.py:96`**: ```python payload["tool_choice"] = tool_choice # tool_choice is a str "auto" ``` Anthropic's Messages API expects `tool_choice` as an object: `{"type": "auto"}`, not a bare string `"auto"`. This will cause a 400 error if mem0 ever passes tools. Unlikely for fact extraction, but worth fixing since the code path exists. --- ### LOW: Unused import **`mem0_anthropic_oauth.py:20`**: `os` is imported but never used. --- ### LOW: Hardcoded user-agent version **`mem0_anthropic_oauth.py:47`**: `"user-agent": "claude-cli/2.1.2 (external, cli)"` — this version string will get stale. Consider reading from a constant or dropping it. --- ### LOW: Dockerfile sed patch fragility The `sed` patch on line 28 depends on the exact string `"anthropic",` appearing in mem0's source. If mem0 updates their formatting (e.g., switches to a set, renames the variable, or reformats), this breaks silently at build time. Consider pinning the mem0 version in `pyproject.toml` if not already done, or adding a build-time verification that the patch worked. --- ### Summary | Severity | Issue | File:Line | |----------|-------|-----------| | Blocker | `import register` — no such name, silently kills mem0 | `memory_mem0.py:20` | | High | Factory module path `"mem0_anthropic_oauth..."` won't resolve | `mem0_anthropic_oauth.py:122` | | Medium | Token loaded once, never refreshed | `mem0_anthropic_oauth.py:64` | | Medium | `tool_choice` should be `{"type": "auto"}` | `mem0_anthropic_oauth.py:96` | | Low | Unused `os` import | `mem0_anthropic_oauth.py:20` | | Low | Hardcoded user-agent version | `mem0_anthropic_oauth.py:47` | | Low | Fragile sed patch in Dockerfile | `Dockerfile:28` | The blocker and the factory path issue need to be fixed — without those, this PR will deploy and silently do nothing (mem0 disabled) or crash on first extraction attempt.
nanobot force-pushed feat/mem0-haiku-oauth from c18d811af0 to 3dcc8692b6 2026-03-04 01:48:01 +01:00 Compare
nanobot force-pushed feat/mem0-haiku-oauth from 3dcc8692b6 to 0ab1ab8d8c 2026-03-04 01:48:12 +01:00 Compare
nanobot force-pushed feat/mem0-haiku-oauth from 0ab1ab8d8c to 99bd54a162 2026-03-04 01:48:39 +01:00 Compare
Collaborator

Re-review after force-push (99bd54a)

The approach is fundamentally better now. Using the main agent's existing LLM for extraction + infer=False storage is clean — no provider hacking, no Dockerfile patches, no new dependencies. But there are two blockers from calling the wrong API.


BLOCKER: provider.create_message() does not exist

memory_mem0.py:272:

response = await provider.create_message(
    model=model,
    max_tokens=2000,
    messages=extraction_messages,
)

LLMProvider has chat(), not create_message(). See providers/base.py:84:

@abstractmethod
async def chat(
    self,
    messages: list[dict[str, Any]],
    tools: list[dict[str, Any]] | None = None,
    model: str | None = None,
    max_tokens: int = 4096,
    ...
) -> LLMResponse:

Fix:

response = await provider.chat(
    messages=extraction_messages,
    model=model,
    max_tokens=2000,
    temperature=0.3,  # low temp for structured extraction
)

BLOCKER: response.content[0].text — wrong type

memory_mem0.py:279:

text = response.content[0].text if response.content else ""

LLMResponse.content is str | None (see providers/base.py:19), NOT a list of content blocks. This will crash with TypeError: 'str' object is not subscriptable.

Fix:

text = response.content or ""

MEDIUM: Merge conflict with main

The PR shows mergeable: false. Main has diverged since the branch forked — specifically:

  • New prompt instructions about time-sensitive facts (lines 135-136 on main)
  • Additional debug logging in __init__
  • Tool result handling changed (main now skips them, PR keeps them)

Needs a rebase onto current main.


LOW: Stale docstring in consolidate()

memory_mem0.py:400-401: Docstring still says "mem0 handles extraction automatically" — but the whole point of this PR is that extraction is now manual via extract_facts(). Should update to reflect the new flow.


Summary

Severity Issue Line
Blocker provider.create_message() doesn't exist, use chat() 272
Blocker response.content[0].text — content is str, not list 279
Medium Merge conflict, needs rebase onto main
Low Stale docstring in consolidate() 400

The architecture is right this time. Just needs the API mismatch fixed and a rebase.

## Re-review after force-push (99bd54a) The approach is fundamentally better now. Using the main agent's existing LLM for extraction + `infer=False` storage is clean — no provider hacking, no Dockerfile patches, no new dependencies. But there are two blockers from calling the wrong API. --- ### BLOCKER: `provider.create_message()` does not exist **`memory_mem0.py:272`**: ```python response = await provider.create_message( model=model, max_tokens=2000, messages=extraction_messages, ) ``` `LLMProvider` has `chat()`, not `create_message()`. See `providers/base.py:84`: ```python @abstractmethod async def chat( self, messages: list[dict[str, Any]], tools: list[dict[str, Any]] | None = None, model: str | None = None, max_tokens: int = 4096, ... ) -> LLMResponse: ``` **Fix**: ```python response = await provider.chat( messages=extraction_messages, model=model, max_tokens=2000, temperature=0.3, # low temp for structured extraction ) ``` --- ### BLOCKER: `response.content[0].text` — wrong type **`memory_mem0.py:279`**: ```python text = response.content[0].text if response.content else "" ``` `LLMResponse.content` is `str | None` (see `providers/base.py:19`), NOT a list of content blocks. This will crash with `TypeError: 'str' object is not subscriptable`. **Fix**: ```python text = response.content or "" ``` --- ### MEDIUM: Merge conflict with main The PR shows `mergeable: false`. Main has diverged since the branch forked — specifically: - New prompt instructions about time-sensitive facts (lines 135-136 on main) - Additional debug logging in `__init__` - Tool result handling changed (main now skips them, PR keeps them) Needs a rebase onto current main. --- ### LOW: Stale docstring in `consolidate()` **`memory_mem0.py:400-401`**: Docstring still says "mem0 handles extraction automatically" — but the whole point of this PR is that extraction is now manual via `extract_facts()`. Should update to reflect the new flow. --- ### Summary | Severity | Issue | Line | |----------|-------|------| | Blocker | `provider.create_message()` doesn't exist, use `chat()` | 272 | | Blocker | `response.content[0].text` — content is `str`, not list | 279 | | Medium | Merge conflict, needs rebase onto main | — | | Low | Stale docstring in consolidate() | 400 | The architecture is right this time. Just needs the API mismatch fixed and a rebase.
nanobot force-pushed feat/mem0-haiku-oauth from 99bd54a162 to 0b0c4e9b5e 2026-03-04 02:05:36 +01:00 Compare
Collaborator

Re-review after force-push (0b0c4e9)

Both blockers from the previous review are fixed. Code looks correct now.

Fixed

  • provider.chat() instead of provider.create_message() (line 277)
  • response.content or "" instead of response.content[0].text (line 285)
  • Rebased onto main, mergeable: true
  • temperature=0.3 for structured extraction
  • Dockerfile clean (no sed patch)
  • mem0_anthropic_oauth.py deleted

Remaining (non-blocking)

1. Commit message mismatch: The PR commit 0b0c4e9 message says "fix(bash): use newline separator for sentinel to fix heredoc hangs" but the diff includes the mem0 extraction changes. Looks like the rebase squashed the wrong message. If you squash-merge, the merge commit message should describe the actual feature.

2. PR title/body outdated: Title still says "use Haiku via Claude Max OAuth" and body still references mem0_anthropic_oauth.py and Dockerfile sed patch. The approach has completely changed — should update to reflect the extract-then-store-with-infer=False design.

3. Stale docstring (line 406): consolidate() docstring still says "mem0 handles extraction automatically" — the whole point is now that extraction is manual.

Verdict

Code is correct. Ready to merge after updating the PR description. The extract_facts()store_facts(infer=False) approach is clean and eliminates all the provider hacking from v1.

## Re-review after force-push (0b0c4e9) Both blockers from the previous review are fixed. Code looks correct now. ### Fixed - `provider.chat()` instead of `provider.create_message()` (line 277) ✅ - `response.content or ""` instead of `response.content[0].text` (line 285) ✅ - Rebased onto main, `mergeable: true` ✅ - `temperature=0.3` for structured extraction ✅ - Dockerfile clean (no sed patch) ✅ - `mem0_anthropic_oauth.py` deleted ✅ ### Remaining (non-blocking) **1. Commit message mismatch**: The PR commit `0b0c4e9` message says "fix(bash): use newline separator for sentinel to fix heredoc hangs" but the diff includes the mem0 extraction changes. Looks like the rebase squashed the wrong message. If you squash-merge, the merge commit message should describe the actual feature. **2. PR title/body outdated**: Title still says "use Haiku via Claude Max OAuth" and body still references `mem0_anthropic_oauth.py` and Dockerfile sed patch. The approach has completely changed — should update to reflect the extract-then-store-with-infer=False design. **3. Stale docstring** (line 406): `consolidate()` docstring still says "mem0 handles extraction automatically" — the whole point is now that extraction is manual. ### Verdict Code is correct. Ready to merge after updating the PR description. The `extract_facts()` → `store_facts(infer=False)` approach is clean and eliminates all the provider hacking from v1.
nanobot force-pushed feat/mem0-haiku-oauth from 0b0c4e9b5e to 887abd1f39 2026-03-04 03:48:56 +01:00 Compare
nanobot changed title from feat: use Haiku via Claude Max OAuth for mem0 extraction LLM to feat: extract facts with main agent LLM, bypass mem0 GPT-nano 2026-03-04 03:49:09 +01:00
Collaborator

Review of commit 887abd1 (v4)

Scope: mem0 extraction via main agent LLM + bash heredoc fix + tests

mem0 changes (memory_mem0.py)

All previous blockers fixed. Code is correct:

  • extract_facts() (line 277): uses provider.chat()
  • response.content or "" (line 285): handles str | None correctly ✓
  • store_facts() (line 325): memory.add(fact, infer=False)
  • consolidate() signature already had provider and model on main (lines 397-398) — body now uses them ✓
  • self.custom_prompt saved as instance var (line 153) ✓

Commit message and PR description now accurately describe the mem0 changes.

bash heredoc fix (bash.py)

Good catch. Old code appended sentinel on same line as command:

command + "; echo '<<exit>>'"

This broke heredocs because EOF; echo '...'EOF as a terminator.

New code (line 77) puts sentinel on its own line:

command + "\necho '<<exit>>'"

Clean fix. ✓

Tests

  • test_bash_heredoc.py: 3 tests covering heredoc, heredoc-append, and regular commands. Good coverage.
  • test_bash_tool.py: restart assertion fix (result.system or result.output) matches the actual return from line 146. ✓

Non-blocking nits

  1. Stale docstring fragment (line 407): "so this just needs to feed recent messages to mem0." is an orphaned second half from the old docstring. Should read something like: "Facts are extracted using the main agent's LLM provider, then stored with infer=False to bypass mem0's built-in GPT-nano extraction."

  2. Two unrelated changes in one commit: The bash heredoc fix is unrelated to mem0. Ideally separate commits, but not a blocker for a squash-merge.

Verdict: Approve

Code is correct, tests added, no blockers. Ready to merge.

## Review of commit 887abd1 (v4) **Scope**: mem0 extraction via main agent LLM + bash heredoc fix + tests ### mem0 changes (`memory_mem0.py`) All previous blockers fixed. Code is correct: - `extract_facts()` (line 277): uses `provider.chat()` ✓ - `response.content or ""` (line 285): handles `str | None` correctly ✓ - `store_facts()` (line 325): `memory.add(fact, infer=False)` ✓ - `consolidate()` signature already had `provider` and `model` on main (lines 397-398) — body now uses them ✓ - `self.custom_prompt` saved as instance var (line 153) ✓ Commit message and PR description now accurately describe the mem0 changes. ### bash heredoc fix (`bash.py`) Good catch. Old code appended sentinel on same line as command: ``` command + "; echo '<<exit>>'" ``` This broke heredocs because `EOF; echo '...'` ≠ `EOF` as a terminator. New code (line 77) puts sentinel on its own line: ``` command + "\necho '<<exit>>'" ``` Clean fix. ✓ ### Tests - `test_bash_heredoc.py`: 3 tests covering heredoc, heredoc-append, and regular commands. Good coverage. - `test_bash_tool.py`: restart assertion fix (`result.system or result.output`) matches the actual return from line 146. ✓ ### Non-blocking nits 1. **Stale docstring fragment** (line 407): `"so this just needs to feed recent messages to mem0."` is an orphaned second half from the old docstring. Should read something like: `"Facts are extracted using the main agent's LLM provider, then stored with infer=False to bypass mem0's built-in GPT-nano extraction."` 2. **Two unrelated changes in one commit**: The bash heredoc fix is unrelated to mem0. Ideally separate commits, but not a blocker for a squash-merge. ### Verdict: ✅ Approve Code is correct, tests added, no blockers. Ready to merge.
Collaborator

Review of commit 887abd1 (v4)

Scope: mem0 extraction via main agent LLM + bash heredoc fix + tests

mem0 changes (memory_mem0.py)

All previous blockers fixed. Code is correct:

  • extract_facts() (line 277): uses provider.chat()
  • response.content or "" (line 285): handles str | None correctly ✓
  • store_facts() (line 325): memory.add(fact, infer=False)
  • consolidate() signature already had provider and model on main (lines 397-398) — body now uses them ✓
  • self.custom_prompt saved as instance var (line 153) ✓

Commit message and PR description now accurately describe the mem0 changes.

bash heredoc fix (bash.py)

Good catch. Old code appended sentinel on same line as command:

command + "; echo '<<exit>>'"

This broke heredocs because EOF; echo '...'EOF as a terminator.

New code (line 77) puts sentinel on its own line:

command + "\necho '<<exit>>'"

Clean fix. ✓

Tests

  • test_bash_heredoc.py: 3 tests covering heredoc, heredoc-append, and regular commands. Good coverage.
  • test_bash_tool.py: restart assertion fix (result.system or result.output) matches the actual return from line 146. ✓

Non-blocking nits

  1. Stale docstring fragment (line 407): "so this just needs to feed recent messages to mem0." is an orphaned second half from the old docstring. Should read something like: "Facts are extracted using the main agent's LLM provider, then stored with infer=False to bypass mem0's built-in GPT-nano extraction."

  2. Two unrelated changes in one commit: The bash heredoc fix is unrelated to mem0. Ideally separate commits, but not a blocker for a squash-merge.

Verdict: Approve

Code is correct, tests added, no blockers. Ready to merge.

## Review of commit 887abd1 (v4) **Scope**: mem0 extraction via main agent LLM + bash heredoc fix + tests ### mem0 changes (`memory_mem0.py`) All previous blockers fixed. Code is correct: - `extract_facts()` (line 277): uses `provider.chat()` ✓ - `response.content or ""` (line 285): handles `str | None` correctly ✓ - `store_facts()` (line 325): `memory.add(fact, infer=False)` ✓ - `consolidate()` signature already had `provider` and `model` on main (lines 397-398) — body now uses them ✓ - `self.custom_prompt` saved as instance var (line 153) ✓ Commit message and PR description now accurately describe the mem0 changes. ### bash heredoc fix (`bash.py`) Good catch. Old code appended sentinel on same line as command: ``` command + "; echo '<<exit>>'" ``` This broke heredocs because `EOF; echo '...'` ≠ `EOF` as a terminator. New code (line 77) puts sentinel on its own line: ``` command + "\necho '<<exit>>'" ``` Clean fix. ✓ ### Tests - `test_bash_heredoc.py`: 3 tests covering heredoc, heredoc-append, and regular commands. Good coverage. - `test_bash_tool.py`: restart assertion fix (`result.system or result.output`) matches the actual return from line 146. ✓ ### Non-blocking nits 1. **Stale docstring fragment** (line 407): `"so this just needs to feed recent messages to mem0."` is an orphaned second half from the old docstring. Should read something like: `"Facts are extracted using the main agent's LLM provider, then stored with infer=False to bypass mem0's built-in GPT-nano extraction."` 2. **Two unrelated changes in one commit**: The bash heredoc fix is unrelated to mem0. Ideally separate commits, but not a blocker for a squash-merge. ### Verdict: ✅ Approve Code is correct, tests added, no blockers. Ready to merge.
nanobot force-pushed feat/mem0-haiku-oauth from 887abd1f39 to 677d3c7521 2026-03-04 03:57:37 +01:00 Compare
nanobot force-pushed feat/mem0-haiku-oauth from 677d3c7521 to 97389736da 2026-03-04 04:22:53 +01:00 Compare
nanobot force-pushed feat/mem0-haiku-oauth from 97389736da to 55b0875773 2026-03-04 04:42:32 +01:00 Compare
Collaborator

Review of commit 55b0875 (v5)

Simplified extraction prompt was tested against the detailed version (16 tests) and performed better. Approved.

  • Orphaned docstring line removed ✓
  • Prompt simplified to tested one-liner ✓
  • All other changes unchanged from v4 ✓

Verdict: Approve

Ready to merge.

## Review of commit 55b0875 (v5) Simplified extraction prompt was tested against the detailed version (16 tests) and performed better. Approved. - Orphaned docstring line removed ✓ - Prompt simplified to tested one-liner ✓ - All other changes unchanged from v4 ✓ ### Verdict: ✅ Approve Ready to merge.
All checks were successful
Build Nanobot OAuth / build (pull_request) Successful in 6m5s
Required
Details
Build Nanobot OAuth / cleanup (pull_request) Has been skipped
This pull request has changes conflicting with the target branch.
  • nanobot/agent/memory_mem0.py
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin feat/mem0-haiku-oauth:feat/mem0-haiku-oauth
git checkout feat/mem0-haiku-oauth
Sign in to join this conversation.
No Reviewers
No labels
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: wylab/nanobot#14