kai392
6e2cbb727a
fix(ai): prevent Anthropic chat crash on no-argument tool calls ( #2755 )
...
* fix: prevent Anthropic chat crash on no-argument tool calls
When the model streams a tool_use block with no arguments (e.g.
get_categories), the accumulated input arrives as an empty string.
The Anthropic chat parser passed that empty string straight through as
function_args, and Assistant::FunctionToolCaller then called
JSON.parse("") — which raises "unexpected end of input", surfaces as a
Provider::Anthropic::Error, and kills the whole assistant turn.
Fix at the source by normalizing empty/nil tool input to an empty JSON
object in the parser, plus a defensive guard in FunctionToolCaller so
any provider that emits blank arguments cannot crash a turn.
Fixes #2722
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
* test: assert nil-args result as Hash to match jsonb function_result
Addresses Codex P1 / CodeRabbit review: EchoFunction returns the parsed
params Hash and ToolCall::Function stores it in a jsonb column, so the
nil-arguments test must assert the Hash directly instead of JSON.parse.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-26 04:47:15 +02:00
..
2026-07-25 20:14:56 +02:00
2026-06-02 21:44:57 +02:00
2026-06-02 21:44:57 +02:00
2026-07-25 20:11:25 +02:00
2026-07-26 04:47:15 +02:00
2026-07-25 20:14:56 +02:00
2026-07-25 05:59:32 +02:00
2026-05-27 23:58:00 +02:00
2026-05-27 23:58:00 +02:00
2026-05-13 18:13:48 +02:00
2026-05-13 18:13:48 +02:00
2026-05-13 18:13:48 +02:00
2026-05-30 00:12:54 +02:00
2026-07-17 06:35:57 +02:00
2026-04-01 20:25:06 +02:00
2026-04-01 20:25:06 +02:00
2026-06-20 21:43:20 +02:00
2026-02-06 18:04:03 +01:00
2026-07-21 09:15:24 +02:00
2026-05-12 00:17:49 +02:00
2026-07-17 21:33:32 +02:00
2026-02-06 18:04:03 +01:00
2026-04-13 00:51:23 +02:00
2026-06-15 20:09:39 +02:00
2026-06-08 21:45:35 +02:00
2026-07-14 01:33:35 +02:00
2026-05-26 22:48:23 +02:00
2026-05-12 23:45:19 +02:00
2026-07-26 01:47:53 +02:00
2026-07-14 02:19:39 +02:00
2026-06-30 07:35:14 +02:00
2026-06-30 07:35:14 +02:00
2026-01-09 13:14:14 +01:00
2026-02-19 18:58:01 +01:00
2026-07-17 22:49:31 +02:00
2026-05-30 23:27:18 +02:00
2026-06-30 07:37:14 +02:00
2026-06-30 07:37:14 +02:00
2026-06-30 07:37:14 +02:00
2026-07-04 08:24:31 +02:00
2026-06-11 20:26:40 +02:00
2026-07-17 07:22:50 +02:00
2025-05-24 19:16:55 -04:00
2026-07-26 04:47:15 +02:00
2026-06-09 23:02:26 +02:00
2026-07-08 09:00:49 +02:00
2026-06-18 12:28:32 +02:00
2026-07-17 23:00:18 +02:00
2026-05-17 16:55:01 +02:00
2025-11-24 14:07:14 +01:00
2026-05-13 18:17:10 +02:00
2026-04-07 14:43:17 +02:00
2026-06-28 16:12:33 +02:00
2026-07-25 18:54:37 +02:00
2026-05-09 21:55:20 +02:00
2026-05-31 22:17:56 +02:00
2026-04-08 21:05:58 +02:00
2026-06-30 08:19:25 +02:00
2026-06-20 20:33:09 +02:00
2025-07-15 11:42:41 -04:00
2026-06-08 21:35:12 +02:00
2026-07-14 03:16:28 +02:00
2026-07-14 03:16:28 +02:00
2026-07-14 03:16:28 +02:00
2026-05-12 23:45:19 +02:00
2026-05-13 20:07:00 +02:00
2026-01-07 15:59:04 +01:00
2026-03-25 10:50:23 +01:00
2025-11-24 14:07:14 +01:00
2026-07-04 03:27:59 +02:00
2026-07-14 01:39:26 +02:00
2026-06-11 09:04:56 +02:00
2026-04-29 15:30:04 +02:00
2026-06-02 21:44:57 +02:00
2026-06-02 21:44:57 +02:00
2026-06-02 21:44:57 +02:00
2026-06-26 06:47:38 +02:00
2026-03-14 20:14:18 +01:00
2026-06-14 22:09:02 +02:00
2026-05-03 20:33:29 +02:00
2026-07-21 05:50:40 +02:00
2026-06-25 05:44:44 +02:00
2026-06-27 00:57:03 +00:00
2026-04-07 14:43:17 +02:00
2026-04-07 14:43:17 +02:00
2026-05-13 18:13:48 +02:00
2026-05-13 18:13:48 +02:00
2026-05-30 00:51:16 +02:00
2026-04-23 21:28:38 +02:00
2026-03-11 15:54:01 +01:00
2026-07-21 10:00:15 +02:00
2026-06-25 05:44:44 +02:00
2026-01-21 22:56:39 +01:00
2026-01-21 22:56:39 +01:00
2026-04-11 21:37:07 +02:00
2026-01-07 15:59:04 +01:00
2026-02-19 19:51:42 +01:00
2024-10-03 14:42:22 -04:00
2026-05-17 16:55:01 +02:00
2026-07-08 08:08:10 +02:00
2026-04-10 23:19:48 +02:00
2026-06-04 19:53:52 +02:00
2026-05-09 12:36:41 +02:00
2026-06-16 10:51:51 +02:00
2026-06-28 16:12:33 +02:00
2026-02-19 18:07:47 +01:00
2026-02-11 15:22:56 +01:00
2026-07-25 05:04:30 +02:00
2026-07-26 01:38:31 +02:00
2026-07-14 01:39:26 +02:00
2026-06-30 06:55:29 +02:00
2026-06-02 14:00:16 +02:00
2026-06-30 07:26:23 +02:00
2026-05-12 23:45:19 +02:00
2026-05-18 21:03:04 +02:00
2026-05-12 23:45:19 +02:00
2026-05-12 23:45:19 +02:00
2026-05-12 23:45:19 +02:00
2025-09-24 00:19:51 +02:00
2026-06-16 17:13:03 +02:00
2026-07-25 05:04:30 +02:00
2026-07-25 05:04:30 +02:00
2026-07-25 04:59:29 +02:00
2026-02-08 18:19:37 +01:00
2026-02-08 18:19:37 +01:00
2026-07-14 02:19:39 +02:00
2026-06-06 17:11:33 +02:00
2026-07-14 03:16:28 +02:00
2026-05-05 01:04:29 +02:00
2026-07-14 01:39:26 +02:00
2024-02-02 19:37:10 -06:00
2026-05-12 00:22:37 +02:00
2026-07-15 19:47:42 +02:00
2026-04-18 00:06:24 +02:00
2026-07-08 08:08:10 +02:00
2026-05-12 12:18:17 +02:00
2026-04-07 20:46:05 +02:00
2026-05-03 10:56:31 +02:00
2026-05-03 10:56:31 +02:00
2026-05-12 00:00:49 +02:00
2026-02-06 18:04:29 +01:00
2026-07-04 08:24:31 +02:00
2026-05-30 00:22:25 +02:00
2026-06-04 23:11:43 +02:00
2026-03-19 15:17:55 +01:00
2026-05-28 14:55:21 +02:00
2026-06-28 16:12:33 +02:00
2026-05-30 23:27:18 +02:00
2026-07-25 04:47:58 +02:00
2025-04-01 08:41:49 -04:00
2026-06-28 17:02:07 +02:00
2026-06-03 00:04:32 +02:00
2026-04-03 12:38:37 +02:00
2026-03-13 07:59:45 +01:00
2026-06-19 17:07:09 +02:00
2025-11-11 19:51:07 +01:00
2026-04-29 13:00:38 +02:00
2026-06-25 05:38:06 +02:00
2025-11-17 21:51:37 +01:00
2026-07-25 03:35:35 +02:00
2026-07-21 23:29:58 +02:00
2026-06-15 21:43:08 +02:00
2026-01-23 00:27:00 +01:00
2026-07-24 22:45:44 +02:00
2026-07-24 22:45:44 +02:00
2026-05-08 15:15:23 +02:00
2026-05-09 21:55:20 +02:00
2026-02-10 23:14:58 +01:00
2026-05-05 00:47:45 +02:00
2025-05-13 15:53:13 -04:00
2026-06-03 00:37:21 +02:00
2026-07-25 03:35:35 +02:00
2026-07-25 03:35:35 +02:00
2024-07-10 11:22:59 -04:00
2026-05-13 20:07:00 +02:00
2026-05-12 23:45:19 +02:00
2026-07-25 04:54:30 +02:00
2026-07-25 04:54:30 +02:00
2026-07-25 04:54:30 +02:00
2026-07-25 04:54:30 +02:00
2026-07-25 04:54:30 +02:00
2026-07-25 04:54:30 +02:00
2026-07-25 04:54:30 +02:00
2026-03-14 23:56:27 +01:00
2026-05-13 20:07:00 +02:00
2026-05-12 23:45:19 +02:00
2026-06-28 19:47:53 +00:00
2026-07-04 03:13:39 +02:00
2026-06-20 20:33:09 +02:00
2026-05-03 20:33:29 +02:00
2026-07-14 02:19:39 +02:00
2026-07-14 03:16:28 +02:00
2026-07-14 03:16:28 +02:00
2026-06-16 08:32:17 +02:00