Spaces:
Running
Running
File size: 5,831 Bytes
b064311 |
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 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 |
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
import json
import time
import sys
import base64
import os
# 设置UTF-8编码
if sys.platform.startswith('win'):
os.system("chcp 65001")
if hasattr(sys.stdout, 'reconfigure'):
sys.stdout.reconfigure(encoding='utf-8')
API_URL = "http://127.0.0.1:8890/v1/chat/completions"
API_KEY = "sk-123456" # 替换为实际的API key
def test_text_to_image(prompt="生成一只可爱的猫咪", stream=False):
"""测试文本到图像生成"""
print(f"\n===== 测试文本到图像生成 =====")
try:
print(f"提示词: '{prompt}'")
except UnicodeEncodeError:
print(f"提示词: [包含非ASCII字符]")
print(f"流式响应: {stream}")
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {API_KEY}"
}
payload = {
"model": "sora-1.0",
"messages": [
{"role": "user", "content": prompt}
],
"n": 1,
"stream": stream
}
start_time = time.time()
response = requests.post(
API_URL,
headers=headers,
json=payload,
stream=stream
)
if response.status_code != 200:
print(f"错误: 状态码 {response.status_code}")
print(response.text)
return
if stream:
# 处理流式响应
print("流式响应内容:")
for line in response.iter_lines():
if line:
line = line.decode('utf-8')
if line.startswith("data: "):
data = line[6:]
if data == "[DONE]":
print("[完成]")
else:
try:
json_data = json.loads(data)
if 'choices' in json_data and json_data['choices'] and 'delta' in json_data['choices'][0]:
delta = json_data['choices'][0]['delta']
if 'content' in delta:
print(f"接收内容: {delta['content']}")
except Exception as e:
print(f"解析响应时出错: {e}")
else:
# 处理普通响应
try:
data = response.json()
print(f"响应内容:")
print(json.dumps(data, indent=2, ensure_ascii=False))
if 'choices' in data and data['choices']:
image_url = None
content = data['choices'][0]['message']['content']
if "[1].split(")")[0]
print(f"\n生成的图片URL: {image_url}")
except Exception as e:
print(f"解析响应时出错: {e}")
elapsed = time.time() - start_time
print(f"请求耗时: {elapsed:.2f}秒")
def test_image_to_image(image_path, prompt="将这张图片变成动漫风格"):
"""测试图像到图像生成(Remix)"""
print(f"\n===== 测试图像到图像生成 =====")
print(f"图片路径: '{image_path}'")
print(f"提示词: '{prompt}'")
# 读取并转换图片为base64
try:
with open(image_path, "rb") as image_file:
base64_image = base64.b64encode(image_file.read()).decode('utf-8')
except Exception as e:
print(f"读取图片失败: {e}")
return
# 构建请求
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {API_KEY}"
}
payload = {
"model": "sora-1.0",
"messages": [
{"role": "user", "content": f"data:image/jpeg;base64,{base64_image}\n{prompt}"}
],
"n": 1,
"stream": False
}
start_time = time.time()
response = requests.post(
API_URL,
headers=headers,
json=payload
)
if response.status_code != 200:
print(f"错误: 状态码 {response.status_code}")
print(response.text)
return
# 处理响应
try:
data = response.json()
print(f"响应内容:")
print(json.dumps(data, indent=2, ensure_ascii=False))
if 'choices' in data and data['choices']:
image_url = None
content = data['choices'][0]['message']['content']
if "[1].split(")")[0]
print(f"\n生成的图片URL: {image_url}")
except Exception as e:
print(f"解析响应时出错: {e}")
elapsed = time.time() - start_time
print(f"请求耗时: {elapsed:.2f}秒")
def main():
"""主函数"""
if len(sys.argv) < 2:
print("用法: python test_client.py <测试类型> [参数...]")
print("测试类型:")
print(" text2img <提示词> [stream=true/false]")
print(" img2img <图片路径> <提示词>")
return
test_type = sys.argv[1].lower()
if test_type == "text2img":
prompt = sys.argv[2] if len(sys.argv) > 2 else "生成一只可爱的猫咪"
stream = False
if len(sys.argv) > 3 and sys.argv[3].lower() == "stream=true":
stream = True
test_text_to_image(prompt, stream)
elif test_type == "img2img":
if len(sys.argv) < 3:
print("错误: 需要图片路径")
return
image_path = sys.argv[2]
prompt = sys.argv[3] if len(sys.argv) > 3 else "将这张图片变成动漫风格"
test_image_to_image(image_path, prompt)
else:
print(f"错误: 未知的测试类型 '{test_type}'")
if __name__ == "__main__":
main() |