Steve Ahlstrom
a714ff9823
fix(aux): stop probe stubs poisoning the client cache
...
`_store_cached_client()` refuses an `_AuxProbeClientStub`, but
`_get_cached_client()` assigns to `_client_cache` directly and so never
reaches that guard. check_fns resolve through this path inside
`aux_probe_mode()` during tool-schema assembly, and the cache key carries no
probe/runtime distinction — so the stored stub is returned to the next real
caller sharing that key, which dies on attribute access with
`_AuxProbeClientStub used as a real client (attribute 'chat')`.
The `async_mode` field in the cache key is what kept this latent: the probe
caches the sync variant, so async consumers (`analyze_image`) miss the entry
and build a real client, while sync consumers (`browser_vision`) hit the
poisoned one and fail on every call.
Observed against a local OpenAI-compatible vision endpoint, where
`browser_vision` failed every call with that RuntimeError while
`analyze_image` against the same provider worked.
Guard the inline store the same way `_store_cached_client()` does, and
return the stub to the probe caller without caching it.
The existing `test_probe_stub_never_cached` pins the invariant only on
`_store_cached_client()`, which is why the unguarded door went unnoticed;
the new test exercises `_get_cached_client()` and fails without this change.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-09-13 11:22:08 -07:00
..
2026-09-12 05:09:11 -07:00
2026-09-13 05:07:50 -07:00
2026-09-03 17:13:22 -07:00
2026-09-13 05:07:11 -07:00
2026-09-13 05:07:11 -07:00
2026-09-12 21:10:02 -07:00
2026-09-10 11:48:01 -07:00
2026-09-06 20:50:02 +05:30
2026-09-03 13:16:47 -07:00
2026-09-13 09:18:02 -07:00
2026-09-13 05:21:02 -07:00
2026-09-13 09:18:02 -07:00
2026-09-13 05:20:26 -07:00
2026-09-12 01:35:05 -07:00
2026-09-13 05:07:11 -07:00
2026-09-06 05:37:03 -07:00
2026-09-06 05:37:03 -07:00
2026-09-03 17:13:22 -07:00
2026-09-13 11:22:08 -07:00
2026-09-11 19:39:12 -07:00
2026-09-07 06:02:22 -07:00
2026-09-13 05:19:48 -07:00
2026-09-07 07:06:58 -07:00
2026-09-09 12:19:13 +05:30
2026-09-12 01:35:05 -07:00
2026-09-03 17:13:22 -07:00
2026-09-03 17:13:22 -07:00
2026-09-04 00:15:16 -07:00
2026-09-05 10:54:19 +05:30
2026-09-12 22:40:28 +05:30
2026-09-07 05:24:15 -07:00
2026-09-07 05:24:15 -07:00
2026-09-10 18:08:16 -07:00
2026-09-07 21:43:54 +05:30
2026-09-10 15:13:02 -04:00
2026-09-06 22:45:31 +05:30
2026-09-07 21:22:49 -07:00
2026-09-13 05:09:43 -07:00
2026-09-07 05:59:08 -07:00
2026-09-13 05:09:43 -07:00
2026-09-11 02:07:48 -07:00
2026-09-05 16:44:23 +05:30
2026-09-13 05:20:26 -07:00
2026-09-13 05:21:02 -07:00
2026-09-11 03:45:33 +05:30
2026-09-13 19:30:48 +05:30
2026-09-07 08:06:48 -07:00
2026-09-13 05:09:43 -07:00
2026-09-03 22:00:01 -07:00
2026-09-11 03:45:33 +05:30
2026-09-12 05:56:15 -07:00
2026-09-07 08:19:32 -07:00
2026-09-07 07:10:28 -07:00
2026-09-12 08:23:42 -07:00
2026-09-12 21:52:48 -07:00
2026-09-09 16:30:24 -07:00
2026-09-03 17:13:22 -07:00
2026-09-09 11:29:56 -07:00
2026-09-10 10:35:07 -07:00
2026-09-13 05:09:43 -07:00
2026-09-07 21:10:50 -07:00
2026-09-11 15:26:46 -07:00
2026-09-03 17:13:22 -07:00
2026-09-04 00:15:16 -07:00
2026-09-07 08:08:04 -07:00
2026-09-12 01:35:05 -07:00
2026-09-11 15:26:46 -07:00
2026-09-12 08:23:13 -07:00
2026-09-09 13:08:25 +05:30
2026-09-09 10:58:16 -07:00
2026-09-07 08:28:43 -07:00
2026-09-11 11:54:49 -07:00
2026-09-03 22:00:01 -07:00
2026-09-13 05:19:48 -07:00
2026-09-13 05:19:48 -07:00
2026-09-10 18:11:25 -07:00
2026-09-13 05:09:43 -07:00
2026-09-11 16:50:20 -07:00
2026-09-13 05:09:43 -07:00
2026-09-13 05:09:43 -07:00
2026-09-06 09:11:04 -07:00
2026-09-13 05:09:06 -07:00
2026-09-11 15:26:46 -07:00
2026-09-09 12:17:57 +05:30
2026-09-03 15:07:39 -07:00
2026-09-13 05:09:43 -07:00
2026-09-13 05:09:43 -07:00
2026-09-03 17:13:22 -07:00
2026-09-12 13:44:52 -07:00
2026-09-13 05:09:43 -07:00
2026-09-11 03:45:33 +05:30
2026-09-13 05:19:48 -07:00
2026-09-03 13:48:49 -07:00
2026-09-07 08:24:54 -07:00
2026-09-10 09:22:31 -07:00
2026-09-13 05:07:50 -07:00
2026-09-03 17:13:22 -07:00
2026-09-10 13:23:24 -07:00
2026-09-03 17:13:22 -07:00
2026-09-13 19:23:09 +05:30
2026-09-13 05:09:43 -07:00
2026-09-08 04:38:47 -07:00
2026-09-03 17:13:22 -07:00
2026-09-13 06:06:46 -07:00
2026-09-06 05:35:12 -07:00
2026-09-09 10:32:01 +05:30
2026-09-13 05:07:11 -07:00
2026-09-03 17:13:22 -07:00
2026-09-12 08:25:36 -07:00
2026-09-07 07:10:28 -07:00
2026-09-12 08:25:59 -07:00
2026-09-03 17:13:22 -07:00
2026-09-03 13:29:35 -07:00
2026-09-12 08:34:07 -07:00
2026-09-09 10:31:26 +05:30
2026-09-09 10:31:26 +05:30
2026-09-03 13:24:04 -07:00
2026-09-04 00:15:16 -07:00
2026-09-13 05:20:26 -07:00
2026-09-12 21:10:02 -07:00
2026-09-10 02:21:16 +05:30
2026-09-11 19:39:12 -07:00
2026-09-12 21:07:46 -07:00
2026-09-06 22:56:51 +05:30
2026-09-12 08:25:14 -07:00
2026-09-03 17:13:22 -07:00
2026-09-04 00:15:16 -07:00
2026-09-04 00:15:16 -07:00
2026-09-04 00:15:16 -07:00
2026-09-11 03:45:33 +05:30
2026-09-12 08:27:11 -07:00
2026-09-10 10:45:57 -07:00
2026-09-06 13:21:17 -07:00
2026-09-13 19:23:09 +05:30
2026-09-03 13:12:23 -07:00
2026-09-11 06:37:27 -07:00
2026-09-09 12:17:57 +05:30
2026-09-10 13:23:24 -07:00
2026-09-11 06:24:11 -07:00
2026-09-09 09:51:31 -07:00
2026-09-09 12:17:57 +05:30
2026-09-03 13:12:23 -07:00
2026-09-06 13:21:17 -07:00
2026-09-06 13:21:17 -07:00
2026-09-12 10:00:06 +05:30
2026-09-07 06:15:43 -07:00
2026-09-11 01:37:22 -07:00
2026-09-03 17:13:22 -07:00
2026-09-09 11:42:43 -07:00
2026-09-06 14:19:42 -07:00
2026-09-06 13:21:17 -07:00
2026-09-10 02:44:26 -07:00
2026-09-10 11:48:01 -07:00
2026-09-13 05:07:11 -07:00
2026-09-13 05:08:29 -07:00
2026-09-12 13:44:52 -07:00
2026-09-04 00:15:16 -07:00
2026-09-03 17:13:22 -07:00
2026-09-04 07:17:00 -07:00