From b935101008fb9803a7c641fca416aa74739f81fd Mon Sep 17 00:00:00 2001 From: Divano Date: Fri, 28 Nov 2025 10:11:51 +0800 Subject: [PATCH] Create test_prompt_ids.py --- tests/ce/server/test_prompt_ids.py | 106 +++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 tests/ce/server/test_prompt_ids.py diff --git a/tests/ce/server/test_prompt_ids.py b/tests/ce/server/test_prompt_ids.py new file mode 100644 index 000000000..e49b974c6 --- /dev/null +++ b/tests/ce/server/test_prompt_ids.py @@ -0,0 +1,106 @@ +#!/bin/env python3 +# -*- coding: utf-8 -*- +# @author DDDivano +# encoding=utf-8 vi:ts=4:sw=4:expandtab:ft=python + +from core import TEMPLATE, URL, build_request_payload, send_request + + +def test_incremental_image_reasoning_consistency(): + """ + 多模态增量推理一致性检查: + 第一次请求携带图片和文本,并打开 return_token_ids。 + 第二次请求拼入 prompt_token_ids,要求输出一致,否则校验失败。 + """ + + # 第一次请求数据 + data_1st = { + "stream": False, + "messages": [ + { + "role": "user", + "content": [ + { + "type": "image_url", + "image_url": { + "url": "https://paddlenlp.bj.bcebos.com/datasets/paddlemix/demo_images/example2.jpg" + } + }, + {"type": "text", "text": "图中的文物属于哪个年代?"} + ], + } + ], + "return_token_ids": True, + } + + print("==== 开始第一次请求 ====") + payload_1st = build_request_payload(TEMPLATE, data_1st) + res1 = send_request(URL, payload_1st) + print(f"第一次请求返回码: {res1.status_code}") + + if res1.status_code != 200: + raise AssertionError(f"首次请求失败: {res1.text}") + + result1 = res1.json() + choice1 = result1["choices"][0] + msg1 = choice1.get("message", {}) + + content1 = msg1.get("content", "") + reasoning1 = msg1.get("reasoning_content", "") + tokens1 = msg1.get("prompt_token_ids", []) + print(f"第一次请求结果: {tokens1}") + + if not tokens1: + raise AssertionError("首次请求未返回 prompt_token_ids!") + + print(f"第一次 content = {content1}") + print(f"第一次 reasoning_content = {reasoning1}") + print(f"第一次 prompt_token_ids 长度 = {len(tokens1)}") + + # 构造第二次请求 + print("\n==== 开始第二次请求(携带 prompt_token_ids)====") + data_2nd = { + "stream": False, + "messages": [ + { + "role": "user", + "content": [ + { + "type": "image_url", + "image_url": { + "url": "https://paddlenlp.bj.bcebos.com/datasets/paddlemix/demo_images/example2.jpg" + } + }, + ], + + } + ], + "prompt_token_ids": tokens1, + } + + payload_2nd = build_request_payload(TEMPLATE, data_2nd) + res2 = send_request(URL, payload_2nd) + print(f"第二次请求返回码: {res2.status_code}") + + if res2.status_code != 200: + raise AssertionError(f"二次请求失败: {res2.text}") + + result2 = res2.json() + choice2 = result2["choices"][0] + msg2 = choice2.get("message", {}) + + content2 = msg2.get("content", "") + reasoning2 = msg2.get("reasoning_content", "") + + print(f"第二次 content = {content2}") + print(f"第二次 reasoning_content = {reasoning2}") + + # 一致性校验 + assert content1 == content2, "content 不一致,增量推理一致性校验失败!" + assert reasoning1 == reasoning2, "reasoning_content 不一致,增量推理一致性校验失败!" + + print("\n 一致性校验通过!增量推理行为正常。") + + +if __name__ == "__main__": + test_incremental_image_reasoning_consistency()