[BUG] Tools whose sanitized name starts with a digit crash every provider's tool conversion before the LLM call

オープン
#9,250 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

@HhH666-ux がすでに取り組んでいます。

2026年11月8日 から。

  • #9251 @HhH666-ux による — オープン
  • #9263 @2Zest による — オープン

評価

難易度
2/5
見積もり時間
1〜3時間
初心者へのやさしさ
35/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
停滞
技術スタック
python

調査の方向性

Start with sanitize_tool_name() in lib/crewai/src/crewai/utilities/string_utils.py, then trace how its result reaches validate_function_name() in lib/crewai/src/crewai/llms/providers/utils/common.py. Reproduce the failure using the offline example in the issue and inspect related tool conversion code in lib/crewai/src/crewai/utilities/agent_utils.py. Done means digit-leading sanitized names pass conversion while ordinary names still work; two open pull requests already address this issue.

索引モデルが issue の本文から書いたものです。

説明

Bug Description

sanitize_tool_name() (lib/crewai/src/crewai/utilities/string_utils.py) lowercases, strips disallowed characters, and removes leading underscores — but it happily returns a name starting with a digit: '3D Renderer' → '3d_renderer', '2FA Verifier' → '2fa_verifier'.

convert_tools_to_openai_schema() (lib/crewai/src/crewai/utilities/agent_utils.py:292) builds every provider's tool schema from that sanitized name, and safe_tool_conversion() → validate_function_name() (lib/crewai/src/crewai/llms/providers/utils/common.py:25) then rejects it:

ValueError: OpenAI function name '3d_renderer' must start with a letter or underscore

This happens locally, before any HTTP request, on every function-calling run for such tools — openai, azure, anthropic, bedrock and gemini all funnel through safe_tool_conversion. Meanwhile OpenAI/Anthropic/Bedrock's published name specs (^[a-zA-Z0-9_-]{1,64}$-style) all allow leading digits, so the sanitizer creates a name the providers would accept but crewAI's own validator refuses.

Steps to Reproduce

Offline, no API key — the failing path is sanitize_tool_name + safe_tool_conversion:

from crewai.utilities.string_utils import sanitize_tool_name
from crewai.utilities.agent_utils import convert_tools_to_openai_schema

class T:
    name = "3D Renderer"
    description = "renders"
    args_schema = None
    parameters_verify_mode = None
    max_usage_count = None

convert_tools_to_openai_schema([T()])   # ValueError

Tools named '3D Renderer', '2024 Sales Analyzer', '2FA Verifier' all crash; a normal name is unaffected.

Expected behavior

The sanitized name should be usable by every provider's validator — e.g. prefix an underscore when the sanitized result starts with a digit ('3d_renderer' → '_3d_renderer'), consistent with how the MCP tool resolver already prefixes mcp_ to satisfy the same validation.

Screenshots/Code snippets
sanitize_tool_name("3D Renderer")      # '3d_renderer'  -> validate_function_name raises
sanitize_tool_name("2024 Sales Analyzer")  # '2024_sales_analyzer' -> raises
sanitize_tool_name("get_weather")      # 'get_weather'  -> fine
Operating System

Windows 11

Python Version

3.12

crewAI Version

main 2fba413 (1.15.x)

主要言語
Python
スター
60.6k
フォーク
9.1k
平均マージ
1日 9時間
マージ済み PR(30日)
218

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

crewAIInc/crewAI のほかの issue

crewAIInc/crewAI の issue をすべて見る

似ている issue

Python の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。