| """ |
| thoughtSignature 处理公共模块 |
| |
| 提供统一的 thoughtSignature 编码/解码功能,用于在工具调用ID中保留签名信息。 |
| 这使得签名能够在客户端往返传输中保留,即使客户端会删除自定义字段。 |
| """ |
|
|
| from typing import Optional, Tuple |
|
|
| |
| |
| THOUGHT_SIGNATURE_SEPARATOR = "__thought__" |
|
|
|
|
| def encode_tool_id_with_signature(tool_id: str, signature: Optional[str]) -> str: |
| """ |
| 将 thoughtSignature 编码到工具调用ID中,以便往返保留。 |
| |
| Args: |
| tool_id: 原始工具调用ID |
| signature: thoughtSignature(可选) |
| |
| Returns: |
| 编码后的工具调用ID |
| |
| Examples: |
| >>> encode_tool_id_with_signature("call_123", "abc") |
| 'call_123__thought__abc' |
| >>> encode_tool_id_with_signature("call_123", None) |
| 'call_123' |
| """ |
| if not signature: |
| return tool_id |
| return f"{tool_id}{THOUGHT_SIGNATURE_SEPARATOR}{signature}" |
|
|
|
|
| def decode_tool_id_and_signature(encoded_id: str) -> Tuple[str, Optional[str]]: |
| """ |
| 从编码的ID中提取原始工具ID和thoughtSignature。 |
| |
| Args: |
| encoded_id: 编码的工具调用ID |
| |
| Returns: |
| (原始工具ID, thoughtSignature) 元组 |
| |
| Examples: |
| >>> decode_tool_id_and_signature("call_123__thought__abc") |
| ('call_123', 'abc') |
| >>> decode_tool_id_and_signature("call_123") |
| ('call_123', None) |
| """ |
| if not encoded_id or THOUGHT_SIGNATURE_SEPARATOR not in encoded_id: |
| return encoded_id, None |
| parts = encoded_id.split(THOUGHT_SIGNATURE_SEPARATOR, 1) |
| return parts[0], parts[1] if len(parts) == 2 else None |
|
|