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']*>.*?', '', text, flags=re.DOTALL | re.IGNORECASE) text = re.sub(r']*>.*?', '', 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