import ast
import re
import unittest
from pathlib import Path
def load_sanitizer():
source = Path(__file__).resolve().parents[1] / "ui_server.py"
tree = ast.parse(source.read_text(encoding="utf-8"))
function = next(
node
for node in tree.body
if isinstance(node, ast.FunctionDef) and node.name == "_sanitize_final_answer"
)
namespace = {"re": re}
exec(compile(ast.Module(body=[function], type_ignores=[]), str(source), "exec"), namespace)
return namespace["_sanitize_final_answer"]
sanitize = load_sanitizer()
class OutputSanitizerTests(unittest.TestCase):
def test_rejects_literal_function_call_markup(self):
raw = '''我需要查询数据,让我调用工具。
IATTC
'''
self.assertEqual(sanitize(raw), "")
def test_keeps_final_answer_and_removes_trailing_markup(self):
raw = '''【FINAL】IATTC 数据已确认存在。
'''
self.assertEqual(sanitize(raw), "IATTC 数据已确认存在。")
def test_keeps_normal_answer(self):
self.assertEqual(sanitize("【FINAL】正常回答"), "正常回答")
if __name__ == "__main__":
unittest.main()