# Tool Call Parsers
Twinkle's template system includes a modular tool-call parsing framework for training models with function calling capabilities.
## Architecture
```
ToolCallRegistry
├── HermesQwenParser — Hermes/Qwen style ...
├── ReActParser — ReAct Thought/Action/Observation
├── ClineParser — Cline XML-based tool calls
└── VCPParser — VCP protocol
```
## ToolCallParser Interface
```python
from twinkle.template.tools import ToolCallParser
class ToolCallParser(ABC):
name: str = ''
open_marker: str | None = None
close_marker: str | None = None
def detect(self, text: str) -> bool:
"""Check if text contains this format's markup."""
...
def parse(self, text: str) -> List[Dict[str, Any]]:
"""Extract tool calls in OpenAI format."""
...
def clean(self, text: str) -> str:
"""Strip markup, return plain content."""
...
```
## ToolCallRegistry
The registry auto-discovers parsers and routes detection:
```python
from twinkle.template.tools import ToolCallRegistry
# Detect which format a completion uses
parser = ToolCallRegistry.detect_first(completion_text)
if parser:
tool_calls = parser.parse(completion_text)
clean_text = parser.clean(completion_text)
```
## Built-in Parsers
### HermesQwenParser
Parses Hermes/Qwen-style function calls:
```xml
{"name": "get_weather", "arguments": {"city": "Shanghai"}}
```
### ReActParser
Parses ReAct-style reasoning traces:
```
Thought: I need to check the weather
Action: get_weather
Action Input: {"city": "Shanghai"}
Observation: ...
```
### ClineParser
Parses Cline XML-based tool invocations with structured parameters.
### VCPParser
Parses VCP (Visual Code Protocol) tool calls.
## Usage in Training
Tool call parsers integrate with the Template during preprocessing:
```python
from twinkle.template import Template
template = Template(
model_id='ms://Qwen/Qwen3.5-4B',
enable_thinking=True,
)
# Template automatically uses ToolCallRegistry for
# tool-call aware tokenization during encoding
features = template.encode(messages, tools=tool_definitions)
```