Skip to content

Commit 402d394

Browse files
committed
add fd case
1 parent f1981a8 commit 402d394

File tree

2 files changed

+170
-0
lines changed

2 files changed

+170
-0
lines changed

framework/fdtest/test_logprobs.py

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
from core import *
2+
import requests
3+
import json
4+
5+
def test_unstream_logprobs():
6+
data = {"stream": False, "messages": [
7+
{
8+
"role": "system",
9+
"content": "You are a helpful assistant."
10+
},
11+
{
12+
"role": "user",
13+
"content": "牛顿的三大运动定律是什么?"
14+
},
15+
16+
],"max_tokens": 3,}
17+
payload = build_request_payload(TEMPLATE, data)
18+
req = send_request(URL, payload)
19+
print(json.dumps(req.json(), indent=2, ensure_ascii=False))
20+
req = req.json()
21+
assert req["choices"][0]["message"]["content"] == "牛顿的"
22+
assert req["choices"][0]["logprobs"]["content"][0]["token"] == "牛顿"
23+
assert req["choices"][0]["logprobs"]["content"][0]["logprob"] == -0.031025361269712448
24+
assert req["choices"][0]["logprobs"]["content"][0]["top_logprobs"][0] == {"token": "牛顿", "logprob": -0.031025361269712448, "bytes": None, "top_logprobs": None}
25+
assert req["usage"] == {"prompt_tokens": 22, "total_tokens": 25, "completion_tokens": 3, "prompt_tokens_details": {"cached_tokens": 0}}
26+
27+
def test_unstream_unlogprobs():
28+
data = {"stream": False, "logprobs": False, "top_logprobs": None, "messages": [
29+
{
30+
"role": "system",
31+
"content": "You are a helpful assistant."
32+
},
33+
{
34+
"role": "user",
35+
"content": "牛顿的三大运动定律是什么?"
36+
},
37+
38+
],"max_tokens": 3,}
39+
payload = build_request_payload(TEMPLATE, data)
40+
req = send_request(URL, payload)
41+
print(json.dumps(req.json(), indent=2, ensure_ascii=False))
42+
req = req.json()
43+
assert req["choices"][0]["message"]["content"] == "牛顿的"
44+
assert req["choices"][0]["logprobs"] == None
45+
assert req["usage"] == {"prompt_tokens": 22, "total_tokens": 25, "completion_tokens": 3, "prompt_tokens_details": {"cached_tokens": 0}}
46+
47+
def test_stream_logprobs():
48+
data = {"stream": True, "messages": [
49+
{
50+
"role": "system",
51+
"content": "You are a helpful assistant."
52+
},
53+
{
54+
"role": "user",
55+
"content": "牛顿的三大运动定律是什么?"
56+
},
57+
58+
],"max_tokens": 3,}
59+
payload = build_request_payload(TEMPLATE, data)
60+
req = send_request(URL, payload)
61+
result_dic = {}
62+
for line in req.iter_lines():
63+
if not line:
64+
continue
65+
decoded = line.decode("utf-8").removeprefix("data: ")
66+
if decoded == "[DONE]":
67+
break
68+
69+
chunk = json.loads(decoded)
70+
content = chunk["choices"][0]["delta"].get("content")
71+
if content:
72+
result_dic = chunk
73+
print(json.dumps(result_dic, indent=2, ensure_ascii=False))
74+
break
75+
76+
assert result_dic["choices"][0]["delta"]["content"] == "牛顿"
77+
assert result_dic["choices"][0]["logprobs"]["content"][0]["token"] == "牛顿"
78+
assert result_dic["choices"][0]["logprobs"]["content"][0]["logprob"] == -0.031025361269712448
79+
assert result_dic["choices"][0]["logprobs"]["content"][0]["top_logprobs"][0] == {"token": "牛顿", "logprob": -0.031025361269712448}
80+
81+
def test_stream_unlogprobs():
82+
data = {"stream": True, "logprobs": False, "top_logprobs": None, "messages": [
83+
{
84+
"role": "system",
85+
"content": "You are a helpful assistant."
86+
},
87+
{
88+
"role": "user",
89+
"content": "牛顿的三大运动定律是什么?"
90+
},
91+
92+
],"max_tokens": 3,}
93+
payload = build_request_payload(TEMPLATE, data)
94+
req = send_request(URL, payload)
95+
result_dic = {}
96+
for line in req.iter_lines():
97+
if not line:
98+
continue
99+
decoded = line.decode("utf-8").removeprefix("data: ")
100+
if decoded == "[DONE]":
101+
break
102+
103+
chunk = json.loads(decoded)
104+
content = chunk["choices"][0]["delta"].get("content")
105+
if content:
106+
result_dic = chunk
107+
print(json.dumps(result_dic, indent=2, ensure_ascii=False))
108+
break
109+
110+
assert result_dic["choices"][0]["delta"]["content"] == "牛顿"
111+
assert result_dic["choices"][0]["logprobs"] == None
112+
113+
if __name__ == '__main__':
114+
test_stream_unlogprobs()

framework/fdtest/test_stream.py

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
from core import *
2+
import requests
3+
import json
4+
5+
def test_stream_and_not_stream():
6+
data = {"stream": True, "messages": [
7+
{
8+
"role": "system",
9+
"content": "You are a helpful assistant."
10+
},
11+
{
12+
"role": "user",
13+
"content": "牛顿的三大运动定律是什么?"
14+
},
15+
16+
],"max_tokens": 100,}
17+
payload = build_request_payload(TEMPLATE, data)
18+
req = send_request(URL, payload)
19+
resp_chunks = []
20+
for line in req.iter_lines():
21+
if line:
22+
# OpenAI 风格流响应前缀是 "data: ...", 去掉前缀
23+
decoded = line.decode("utf-8")
24+
if decoded.startswith("data: "):
25+
decoded = decoded[len("data: "):]
26+
if decoded == "[DONE]":
27+
break
28+
resp_chunks.append(json.loads(decoded))
29+
final_content = "".join([
30+
chunk["choices"][0]["delta"]["content"]
31+
for chunk in resp_chunks
32+
if "choices" in chunk and "delta" in chunk["choices"][0] and "content" in chunk["choices"][0]["delta"]
33+
])
34+
print(final_content)
35+
36+
data = {"stream": False, "messages": [
37+
{
38+
"role": "system",
39+
"content": "You are a helpful assistant."
40+
},
41+
{
42+
"role": "user",
43+
"content": "牛顿的三大运动定律是什么?"
44+
},
45+
46+
],"max_tokens": 100,}
47+
payload = build_request_payload(TEMPLATE, data)
48+
req = send_request(URL, payload)
49+
print(json.dumps(req.json(), indent=2, ensure_ascii=False))
50+
req = req.json()
51+
52+
assert final_content == req["choices"][0]["message"]["content"]
53+
54+
55+
if __name__ == '__main__':
56+
test_stream_and_not_stream()

0 commit comments

Comments
 (0)