[6.x]: AI tool-calling check fails with a 400 on Anthropic, so Ask AI can't use Claude models
Los mantenedores suelen responder en 1 día
@riasvdv ya está trabajando en esto.
Desde el 3/11/2026.
Evaluación
- Dificultad
- 1/5
- Tiempo estimado
- Menos de una hora
- Aptitud para principiantes
- 78/100
Línea de trabajo
La comprobación que falla es la herramienta anónima de src/Ai/Agents/ToolCallingProbe.php, alrededor de la línea 34, que no tiene un método name(), así que laravel/ai recurre a un class_basename que Anthropic rechaza. Empieza leyendo ese archivo y compáralo con las otras herramientas de asistente de Craft que sí definen name(). Estará listo cuando la sonda declare un name() como get_verification_code y la comprobación de llamadas a herramientas pase con claude-sonnet-5-5.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
What happened?
Steps to reproduce
- Add an Anthropic provider to
config/ai.php(the stocklaravel/aiconfig has one) and setANTHROPIC_API_KEY. - In Settings → Extend → Connections, set the default text provider to
anthropicand the model toclaude-sonnet-5-5. - Save.
Expected behavior
Craft confirms the model supports tool calling, and the AI assistant task becomes available.
Actual behavior
The check fails, and the AI assistant task is reported as unavailable:
Craft couldn’t check whether the claude-sonnet-5-5 model on the anthropic provider supports tool calling, which AI assistant needs: HTTP request returned status code 400: {"type":"error","error":{"type":"invalid_request_error","message":"tools.0.custom.name: String should match pattern '^[a (truncated...)
Cause
The test tool in src/Ai/Agents/ToolCallingProbe.php:34 is an anonymous class without a name() method. laravel/ai's ToolNameResolver falls back to class_basename(), which for an anonymous class gives a name like ToolCallingProbe.php:34$398. Anthropic rejects the ., : and $. Craft's other assistant tools all define name(), so only this check is affected.
Suggested fix
- Add a
name()method to the anonymous tool, e.g. returningget_verification_code.
Notes
With that method added locally, the tool name resolves to get_verification_code and the check passes with claude-sonnet-5-5. config/ai.php is the stock laravel/ai config, so the config isn't involved.
Craft CMS version
6.x-dev (395aae2)
PHP version
No response
Operating system and version
No response
Database type and version
No response
Image driver and version
No response
Installed plugins and versions
- Lenguaje dominante
- PHP
- Estrellas
- 3.6k
- Forks
- 712
- Merge medio
- 13 h 20 min
- PR fusionados (30 d)
- 357
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de craftcms/cms
-
bug repo:cms
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
craftcms/cms#20205 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
[6.x]: Element index View menu: sort direction buttons only update after the table has loadedAbiertobug repo:cms
Dificultad 2/5 1-3 horas Aptitud para principiantes 64/100
craftcms/cms#20203 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
[5.x]: Moving an asset with “Replace it” throws TypeError: volumeUid must be of type string, null givenPosiblemente ocupada @i-just la tomó hace 6 días. Abiertobug repo:cms
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
craftcms/cms#20128 · 2 comentarios · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
"New entry" menu ignores `Entry::EVENT_DEFINE_ENTRY_TYPES`, so a filtered type leads to a 400Abiertorepo:cms
Dificultad 3/5 1-2 días Aptitud para principiantes 55/100
craftcms/cms#20322 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
[5.x]: Passing `withProvisionalDrafts` on a Matrix field throws `array_intersect()` TypeErrorPosiblemente ocupada @brandonkelly la tomó hoy. Abiertobug repo:cms
craftcms/cms#20308 · 1 comentario · 1 asignado ·
Los mantenedores suelen responder en 1 día
Todos los issues de craftcms/cms
Issues similares
-
cleanup
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
-
[Bug]: Detection::detectString() / detectContent() never use finfo – missing use finfo; (regression from #54077)Posiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abierto0. Needs triage 35-feedback bug
Dificultad 1/5 Menos de una hora Aptitud para principiantes 62/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
getgrav/grav-plugin-api#74 ·