feat:初版

This commit is contained in:
2025-12-03 15:48:44 +08:00
commit b4df26f61d
199 changed files with 23434 additions and 0 deletions

View File

@@ -0,0 +1,110 @@
"""
Sora2API 测试脚本
用于诊断长提示词问题
"""
import asyncio
import httpx
import json
from pathlib import Path
import tomllib
async def test_sora_api():
"""测试 Sora API"""
# 读取配置
config_path = Path(__file__).parent / "config.toml"
with open(config_path, "rb") as f:
config = tomllib.load(f)
api_config = config["api"]
# 测试用例
test_cases = [
{
"name": "短提示词",
"prompt": "一个美丽的日落场景",
"model": "sora-video-portrait-15s"
},
{
"name": "中等提示词",
"prompt": "一个美丽的日落场景,天空中有橙色和粉色的云彩,海浪轻轻拍打着沙滩,远处有几只海鸥在飞翔",
"model": "sora-video-portrait-15s"
},
{
"name": "长提示词",
"prompt": "之前去饭店,点了鳕鱼,商家拿油鱼冒充,吃完感觉有点腻,上车把老婆刚买的西梅汁一口干了,当时觉得挺解腻的。结果开车没多久,肚子就开始不对劲,咕噜咕噜响,然后就是一阵阵的绞痛。我赶紧找了个加油站,冲进厕所,那场面简直了,像开闸放水一样,根本控制不住。更尴尬的是,裤子都来不及脱,直接就喷了,油鱼的油脂混着西梅汁,那个味道,简直让人窒息。",
"model": "sora-video-portrait-15s"
}
]
for test_case in test_cases:
print(f"\n{'='*60}")
print(f"测试: {test_case['name']}")
print(f"提示词长度: {len(test_case['prompt'])} 字符")
print(f"{'='*60}")
try:
url = f"{api_config['base_url'].rstrip('/')}/v1/chat/completions"
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {api_config['token']}"
}
payload = {
"model": test_case["model"],
"messages": [{"role": "user", "content": test_case["prompt"]}],
"stream": True
}
print(f"请求URL: {url}")
print(f"Payload大小: {len(json.dumps(payload, ensure_ascii=False))} 字节")
print(f"开始请求...")
timeout = httpx.Timeout(connect=10.0, read=60.0, write=10.0, pool=10.0)
async with httpx.AsyncClient(timeout=timeout) as client:
async with client.stream("POST", url, json=payload, headers=headers) as response:
print(f"响应状态码: {response.status_code}")
print(f"响应头: {dict(response.headers)}")
if response.status_code == 200:
print("开始接收流式响应...")
line_count = 0
async for line in response.aiter_lines():
line_count += 1
if line.startswith("data: "):
data_str = line[6:]
if data_str == "[DONE]":
print(f"收到 [DONE] 标记")
break
try:
data = json.loads(data_str)
if "choices" in data and data["choices"]:
delta = data["choices"][0].get("delta", {})
content = delta.get("content", "")
if content:
print(f"收到内容片段: {content[:100]}...")
except json.JSONDecodeError as e:
print(f"JSON解析失败: {e}, 数据: {data_str[:100]}...")
print(f"✅ 测试成功!共收到 {line_count} 行响应")
else:
error_text = await response.aread()
print(f"❌ 请求失败: {response.status_code}")
print(f"错误信息: {error_text.decode('utf-8', errors='ignore')[:500]}")
except Exception as e:
import traceback
print(f"❌ 异常: {type(e).__name__}: {str(e)}")
print(f"详细信息:\n{traceback.format_exc()}")
# 等待一下再进行下一个测试
await asyncio.sleep(2)
print(f"\n{'='*60}")
print("所有测试完成")
print(f"{'='*60}")
if __name__ == "__main__":
asyncio.run(test_sora_api())