Skip to content

fix(gateway): resolve UnboundLocalError for 'adapter' in streaming media delivery - #2424

Closed
42-evey wants to merge 1 commit into
NousResearch:mainfrom
42-evey:fix/adapter-unbound-streaming
Closed

fix(gateway): resolve UnboundLocalError for 'adapter' in streaming media delivery#2424
42-evey wants to merge 1 commit into
NousResearch:mainfrom
42-evey:fix/adapter-unbound-streaming

Conversation

@42-evey

@42-evey 42-evey commented Mar 22, 2026

Copy link
Copy Markdown
Contributor

Summary

_handle_message_with_agent references a bare adapter variable when delivering media files after a streamed response (already_sent=True). This variable is never assigned in the method scope, causing:

UnboundLocalError: cannot access local variable 'adapter'
where it is not associated with a value

This crashes streaming responses that include MEDIA: tags, and on some platforms surfaces as a user-visible error on all streaming responses.

Fix

Resolve the adapter from self.adapters using source.platform, matching every other adapter reference in the method (lines 1334, 1380, 1395, 1409, 1436, 1802, 1934, etc.).

Reproduction

  1. Enable streaming in gateway config
  2. Send any message that triggers a tool call
  3. Agent streams response with already_sent=True
  4. Gateway tries to deliver media files → crashes with UnboundLocalError

Test plan

  • Verified fix resolves the error in production (Telegram gateway)
  • Send message with streaming enabled, confirm no crash
  • Send message that produces MEDIA: output, confirm delivery

🤖 Generated with Claude Code

…dia delivery

_handle_message_with_agent references a bare `adapter` variable when
delivering media files after a streamed response (already_sent=True).
This variable is never assigned in the method scope, causing:

  UnboundLocalError: cannot access local variable 'adapter'
  where it is not associated with a value

This crashes every streaming response that includes MEDIA: tags,
and on some platforms crashes all streaming responses entirely
(the error surfaces before the response is returned).

Fix: resolve the adapter from self.adapters using the source
platform, matching every other adapter reference in the method.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
teknium1 added a commit that referenced this pull request Mar 22, 2026
Two fixes:

1. CLI /stop command crashed with 'cannot import name get_registry' —
   the code imported a non-existent function. Fixed to use the actual
   process_registry singleton and list_sessions() method.
   (Reported in #2458 by haiyuzhong1980)

2. Streaming media delivery used undefined 'adapter' variable —
   our PR #2382 called _deliver_media_from_response(adapter=adapter)
   but 'adapter' wasn't guaranteed to be defined in that scope.
   Fixed to resolve via self.adapters.get(source.platform).
   (Reported in #2424 by 42-evey)
@teknium1

Copy link
Copy Markdown
Contributor

Fixed in PR #2463 — adapter variable was indeed undefined in that scope. Good catch, our #2382 introduced this bug. Thanks!

@teknium1 teknium1 closed this Mar 22, 2026
outsourc-e pushed a commit to outsourc-e/hermes-agent that referenced this pull request Mar 26, 2026
Two fixes:

1. CLI /stop command crashed with 'cannot import name get_registry' —
   the code imported a non-existent function. Fixed to use the actual
   process_registry singleton and list_sessions() method.
   (Reported in NousResearch#2458 by haiyuzhong1980)

2. Streaming media delivery used undefined 'adapter' variable —
   our PR NousResearch#2382 called _deliver_media_from_response(adapter=adapter)
   but 'adapter' wasn't guaranteed to be defined in that scope.
   Fixed to resolve via self.adapters.get(source.platform).
   (Reported in NousResearch#2424 by 42-evey)
angelburgosrosado pushed a commit to angelburgosrosado/hermes-agent that referenced this pull request Apr 27, 2026
Two fixes:

1. CLI /stop command crashed with 'cannot import name get_registry' —
   the code imported a non-existent function. Fixed to use the actual
   process_registry singleton and list_sessions() method.
   (Reported in NousResearch#2458 by haiyuzhong1980)

2. Streaming media delivery used undefined 'adapter' variable —
   our PR NousResearch#2382 called _deliver_media_from_response(adapter=adapter)
   but 'adapter' wasn't guaranteed to be defined in that scope.
   Fixed to resolve via self.adapters.get(source.platform).
   (Reported in NousResearch#2424 by 42-evey)
02356abc pushed a commit to 02356abc/hermes-agent that referenced this pull request May 14, 2026
Two fixes:

1. CLI /stop command crashed with 'cannot import name get_registry' —
   the code imported a non-existent function. Fixed to use the actual
   process_registry singleton and list_sessions() method.
   (Reported in NousResearch#2458 by haiyuzhong1980)

2. Streaming media delivery used undefined 'adapter' variable —
   our PR NousResearch#2382 called _deliver_media_from_response(adapter=adapter)
   but 'adapter' wasn't guaranteed to be defined in that scope.
   Fixed to resolve via self.adapters.get(source.platform).
   (Reported in NousResearch#2424 by 42-evey)
gweeteve pushed a commit to gweeteve/hermes-agent that referenced this pull request Jun 2, 2026
Two fixes:

1. CLI /stop command crashed with 'cannot import name get_registry' —
   the code imported a non-existent function. Fixed to use the actual
   process_registry singleton and list_sessions() method.
   (Reported in NousResearch#2458 by haiyuzhong1980)

2. Streaming media delivery used undefined 'adapter' variable —
   our PR NousResearch#2382 called _deliver_media_from_response(adapter=adapter)
   but 'adapter' wasn't guaranteed to be defined in that scope.
   Fixed to resolve via self.adapters.get(source.platform).
   (Reported in NousResearch#2424 by 42-evey)
waefrebeorn pushed a commit to waefrebeorn/slermes that referenced this pull request Jul 2, 2026
Two fixes:

1. CLI /stop command crashed with 'cannot import name get_registry' —
   the code imported a non-existent function. Fixed to use the actual
   process_registry singleton and list_sessions() method.
   (Reported in NousResearch#2458 by haiyuzhong1980)

2. Streaming media delivery used undefined 'adapter' variable —
   our PR NousResearch#2382 called _deliver_media_from_response(adapter=adapter)
   but 'adapter' wasn't guaranteed to be defined in that scope.
   Fixed to resolve via self.adapters.get(source.platform).
   (Reported in NousResearch#2424 by 42-evey)
melon-xf added a commit to melon-xf/hermes-agent that referenced this pull request Sep 3, 2026
Two fixes:

1. CLI /stop command crashed with 'cannot import name get_registry' —
   the code imported a non-existent function. Fixed to use the actual
   process_registry singleton and list_sessions() method.
   (Reported in NousResearch#2458 by haiyuzhong1980)

2. Streaming media delivery used undefined 'adapter' variable —
   our PR NousResearch#2382 called _deliver_media_from_response(adapter=adapter)
   but 'adapter' wasn't guaranteed to be defined in that scope.
   Fixed to resolve via self.adapters.get(source.platform).
   (Reported in NousResearch#2424 by 42-evey)
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.

2 participants