Configuration for reasoning models.
Set reasoning_start_str and reasoning_end_str to the strings that delimit the reasoning block (e.g. "<think>" and "</think>"). The corresponding token IDs are derived automatically via initialize_token_ids and are not intended to be set directly.
Source code in vllm/config/reasoning.py
| @config
class ReasoningConfig:
"""Configuration for reasoning models.
Set `reasoning_start_str` and `reasoning_end_str` to the strings that delimit
the reasoning block (e.g. `"<think>"` and `"</think>"`). The
corresponding token IDs are derived automatically via
`initialize_token_ids` and are not intended to be set directly.
"""
reasoning_parser: str = ""
"""The name of the ReasoningParser to use for this model."""
reasoning_start_str: str = ""
"""String that indicates the start of reasoning."""
reasoning_end_str: str = ""
"""String that indicates the end of reasoning content."""
_reasoning_start_token_ids: list[int] | None = field(
default=None, init=False, repr=False
)
"""Private backing field for `reasoning_start_token_ids`. Set by
`initialize_token_ids`. Not intended to be configured directly."""
_reasoning_end_token_ids: list[int] | None = field(
default=None, init=False, repr=False
)
"""Private backing field for `reasoning_end_token_ids`. Set by
`initialize_token_ids`. Not intended to be configured directly."""
_enabled: bool = field(default=False, init=False, repr=False)
"""Private field indicating whether reasoning token IDs have been initialized.
Set to True by `initialize_token_ids` once token IDs are initialized."""
@property
def enabled(self) -> bool:
"""Returns True if reasoning is enabled (i.e. if token IDs have been
initialized), False otherwise."""
return self._enabled
@property
def reasoning_start_token_ids(self) -> list[int] | None:
"""Token IDs derived from `reasoning_start_str`. Set automatically by
`initialize_token_ids`. Not intended to be configured directly."""
return self._reasoning_start_token_ids
@property
def reasoning_end_token_ids(self) -> list[int] | None:
"""Token IDs derived from `reasoning_end_str`. Set automatically by
`initialize_token_ids`. Not intended to be configured directly."""
return self._reasoning_end_token_ids
def initialize_token_ids(self, model_config: ModelConfig) -> None:
"""Initialize reasoning token IDs from strings using the tokenizer."""
if (
self._reasoning_start_token_ids is not None
and self._reasoning_end_token_ids is not None
):
self._enabled = True
return # Already initialized
tokenizer = cached_tokenizer_from_config(model_config=model_config)
reasoning_start_str = self.reasoning_start_str
reasoning_end_str = self.reasoning_end_str
if self.reasoning_parser is not None and (
not reasoning_start_str or not reasoning_end_str
):
parser_cls = ReasoningParserManager.get_reasoning_parser(
self.reasoning_parser
)
reasoning_parser = parser_cls(tokenizer)
start_token = reasoning_parser.reasoning_start_str
if start_token and not reasoning_start_str:
reasoning_start_str = start_token
end_token = reasoning_parser.reasoning_end_str
if end_token and not reasoning_end_str:
reasoning_end_str = end_token
if not reasoning_start_str or not reasoning_end_str:
# If we don't have valid strings to tokenize,
# we can't initialize the token IDs.
return
self._reasoning_start_token_ids = tokenizer.encode(
reasoning_start_str, add_special_tokens=False
)
self._reasoning_end_token_ids = tokenizer.encode(
reasoning_end_str, add_special_tokens=False
)
if not self._reasoning_start_token_ids or not self._reasoning_end_token_ids:
raise ValueError(
f"ReasoningConfig: failed to tokenize reasoning strings: "
f"reasoning_start_str='{self.reasoning_start_str}', "
f"reasoning_end_str='{self.reasoning_end_str}'. "
"Ensure the strings are valid tokens in the model's vocabulary."
)
self._enabled = True
|
_enabled class-attribute instance-attribute
_enabled: bool = field(
default=False, init=False, repr=False
)
Private field indicating whether reasoning token IDs have been initialized. Set to True by initialize_token_ids once token IDs are initialized.
_reasoning_end_token_ids class-attribute instance-attribute
_reasoning_end_token_ids: list[int] | None = field(
default=None, init=False, repr=False
)
Private backing field for reasoning_end_token_ids. Set by initialize_token_ids. Not intended to be configured directly.
_reasoning_start_token_ids class-attribute instance-attribute
_reasoning_start_token_ids: list[int] | None = field(
default=None, init=False, repr=False
)
Private backing field for reasoning_start_token_ids. Set by initialize_token_ids. Not intended to be configured directly.
enabled property
Returns True if reasoning is enabled (i.e. if token IDs have been initialized), False otherwise.
reasoning_end_str class-attribute instance-attribute
reasoning_end_str: str = ''
String that indicates the end of reasoning content.
reasoning_end_token_ids property
reasoning_end_token_ids: list[int] | None
Token IDs derived from reasoning_end_str. Set automatically by initialize_token_ids. Not intended to be configured directly.
reasoning_parser class-attribute instance-attribute
reasoning_parser: str = ''
The name of the ReasoningParser to use for this model.
reasoning_start_str class-attribute instance-attribute
reasoning_start_str: str = ''
String that indicates the start of reasoning.
reasoning_start_token_ids property
reasoning_start_token_ids: list[int] | None
Token IDs derived from reasoning_start_str. Set automatically by initialize_token_ids. Not intended to be configured directly.
initialize_token_ids
initialize_token_ids(model_config: ModelConfig) -> None
Initialize reasoning token IDs from strings using the tokenizer.
Source code in vllm/config/reasoning.py
| def initialize_token_ids(self, model_config: ModelConfig) -> None:
"""Initialize reasoning token IDs from strings using the tokenizer."""
if (
self._reasoning_start_token_ids is not None
and self._reasoning_end_token_ids is not None
):
self._enabled = True
return # Already initialized
tokenizer = cached_tokenizer_from_config(model_config=model_config)
reasoning_start_str = self.reasoning_start_str
reasoning_end_str = self.reasoning_end_str
if self.reasoning_parser is not None and (
not reasoning_start_str or not reasoning_end_str
):
parser_cls = ReasoningParserManager.get_reasoning_parser(
self.reasoning_parser
)
reasoning_parser = parser_cls(tokenizer)
start_token = reasoning_parser.reasoning_start_str
if start_token and not reasoning_start_str:
reasoning_start_str = start_token
end_token = reasoning_parser.reasoning_end_str
if end_token and not reasoning_end_str:
reasoning_end_str = end_token
if not reasoning_start_str or not reasoning_end_str:
# If we don't have valid strings to tokenize,
# we can't initialize the token IDs.
return
self._reasoning_start_token_ids = tokenizer.encode(
reasoning_start_str, add_special_tokens=False
)
self._reasoning_end_token_ids = tokenizer.encode(
reasoning_end_str, add_special_tokens=False
)
if not self._reasoning_start_token_ids or not self._reasoning_end_token_ids:
raise ValueError(
f"ReasoningConfig: failed to tokenize reasoning strings: "
f"reasoning_start_str='{self.reasoning_start_str}', "
f"reasoning_end_str='{self.reasoning_end_str}'. "
"Ensure the strings are valid tokens in the model's vocabulary."
)
self._enabled = True
|