Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions vllm/entrypoints/openai/serving_chat.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
from vllm.outputs import CompletionOutput, RequestOutput
from vllm.sampling_params import BeamSearchParams, SamplingParams
from vllm.sequence import Logprob
from vllm.utils import generate_valid_mistral_tool_id
from vllm.transformers_utils.tokenizer import AnyTokenizer, MistralTokenizer
from vllm.transformers_utils.tokenizers import maybe_serialize_tool_calls

Expand Down Expand Up @@ -710,6 +711,11 @@
"completion.")
message = ChatMessage(role=role, content=output.text)

if isinstance(tokenizer, MistralTokenizer):
for tool_call in message.tool_calls:
tool_call.id = generate_valid_mistral_tool_id()
logger.warning(f"Assigned new tool_id: {tool_call.id} for tool: {tool_call}")

Check failure on line 718 in vllm/entrypoints/openai/serving_chat.py

View workflow job for this annotation

GitHub Actions / pre-commit

Ruff (G004)

vllm/entrypoints/openai/serving_chat.py:718:25: G004 Logging statement uses f-string

Check failure on line 718 in vllm/entrypoints/openai/serving_chat.py

View workflow job for this annotation

GitHub Actions / pre-commit

Ruff (E501)

vllm/entrypoints/openai/serving_chat.py:718:81: E501 Line too long (85 > 80)
choice_data = ChatCompletionResponseChoice(
index=output.index,
message=message,
Expand Down
4 changes: 3 additions & 1 deletion vllm/transformers_utils/tokenizers/mistral.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
Tekkenizer)

from vllm.logger import init_logger
from vllm.utils import is_list_of
from vllm.utils import is_list_of, generate_valid_mistral_tool_id

if TYPE_CHECKING:
from vllm.entrypoints.chat_utils import ChatCompletionMessageParam
Expand Down Expand Up @@ -61,7 +61,9 @@
while True:
try:
tool_call = next(tool_calls_validator) # type: ignore
tool_call['id'] = generate_valid_mistral_tool_id()
logger.warning(f"Assigned new tool_id: {tool_call['id']} for tool: {tool_call}")
validated_tool_calls.append(tool_call)

Check failure on line 66 in vllm/transformers_utils/tokenizers/mistral.py

View workflow job for this annotation

GitHub Actions / pre-commit

Ruff (G004)

vllm/transformers_utils/tokenizers/mistral.py:66:25: G004 Logging statement uses f-string

Check failure on line 66 in vllm/transformers_utils/tokenizers/mistral.py

View workflow job for this annotation

GitHub Actions / pre-commit

Ruff (E501)

vllm/transformers_utils/tokenizers/mistral.py:66:81: E501 Line too long (88 > 80)
except StopIteration:
break

Expand Down
10 changes: 10 additions & 0 deletions vllm/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,16 @@
import vllm.envs as envs
from vllm.logger import enable_trace_function_call, init_logger

from random import choices
from string import ascii_letters, digits

if TYPE_CHECKING:
from vllm.config import VllmConfig

logger = init_logger(__name__)

ALPHANUMERIC = ascii_letters + digits

# Exception strings for non-implemented encoder/decoder scenarios

# Reminder: Please update docs/source/features/compatibility_matrix.md
Expand Down Expand Up @@ -2206,3 +2211,8 @@ def run_method(obj: Any, method: Union[str, bytes, Callable], args: Tuple[Any],
else:
func = partial(method, obj) # type: ignore
return func(*args, **kwargs)

def generate_valid_mistral_tool_id():
# Mistral Tool Call Ids must be alphanumeric with a maximum length of 9.
# https://github.com/mistralai/mistral-common/blob/21ee9f6cee3441e9bb1e6ed2d10173f90bd9b94b/src/mistral_common/protocol/instruct/validator.py#L299
return "".join(choices(ALPHANUMERIC, k=9))
Loading