File size: 1,799 Bytes
69fec20 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
"""
thoughtSignature 处理公共模块
提供统一的 thoughtSignature 编码/解码功能,用于在工具调用ID中保留签名信息。
这使得签名能够在客户端往返传输中保留,即使客户端会删除自定义字段。
"""
from typing import Optional, Tuple
# 在工具调用ID中嵌入thoughtSignature的分隔符
# 这使得签名能够在客户端往返传输中保留,即使客户端会删除自定义字段
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
|