35 lines
1.2 KiB
Python
35 lines
1.2 KiB
Python
import re
|
|
|
|
def tools_mapping(schema, handler, name=None):
|
|
tool_name = name or schema["function"]["name"]
|
|
return {"name": tool_name, "schema": schema, "handler": handler}
|
|
|
|
def tool_schemas(tools_definition):
|
|
return [t["schema"] for t in tools_definition]
|
|
|
|
def tool_handlers(tools_definition):
|
|
return {t["name"]: t["handler"] for t in tools_definition}
|
|
|
|
def strip_thinking(text: str) -> str:
|
|
if not text:
|
|
return text
|
|
# Strip XML-style thinking blocks (case-insensitive, DOTALL for multiline)
|
|
text = re.sub(r'<think[^>]*>.*?</think>', '', text, flags=re.DOTALL | re.IGNORECASE)
|
|
text = re.sub(r'<reasoning[^>]*>.*?</reasoning>', '', text, flags=re.DOTALL | re.IGNORECASE)
|
|
# Strip lines starting with Thinking: / Reasoning: / Let me think...
|
|
lines = text.splitlines()
|
|
cleaned = []
|
|
skip_block = False
|
|
for line in lines:
|
|
stripped = line.strip().lower()
|
|
if stripped.startswith(('thinking:', 'reasoning:', 'let me thought', 'let me think')):
|
|
skip_block = True
|
|
continue
|
|
if skip_block and not stripped:
|
|
skip_block = False
|
|
continue
|
|
if not skip_block:
|
|
cleaned.append(line)
|
|
result = '\n'.join(cleaned).strip()
|
|
return result
|