Last commit not found
from flask import Flask, request, jsonify, Response | |
import requests | |
import json | |
import time | |
import random | |
app = Flask(__name__) | |
def index(): | |
return "text-to-image with siliconflow", 200 | |
def handle_request(): | |
try: | |
body = request.json | |
model = body.get('model') | |
messages = body.get('messages') | |
stream = body.get('stream', False) | |
if not model or not messages or len(messages) == 0: | |
return jsonify({"error": "Bad Request: Missing required fields"}), 400 | |
prompt = messages[-1]['content'] | |
new_url = f'https://api.siliconflow.cn/v1/{model}/text-to-image' | |
new_request_body = { | |
"prompt": prompt, | |
"image_size": "1024x1024", | |
"batch_size": 1, | |
"num_inference_steps": 4, | |
"guidance_scale": 1 | |
} | |
# 从传入的 Authorization 头中随机选择一个 token | |
authorization_header = request.headers.get('Authorization') | |
if authorization_header: | |
# 去掉 "Bearer " 前缀并分割 token | |
tokens = authorization_header.replace("Bearer ", "").split(',') | |
if len(tokens) > 1: | |
selected_token = random.choice(tokens).strip() | |
else: | |
selected_token = tokens[0].strip() | |
# 重新格式化为 "Bearer 随机选择的token" | |
selected_token = f"Bearer {selected_token}" | |
else: | |
return jsonify({"error": "Unauthorized: Missing Authorization header"}), 401 | |
headers = { | |
'accept': 'application/json', | |
'content-type': 'application/json', | |
'Authorization': selected_token | |
} | |
response = requests.post(new_url, headers=headers, json=new_request_body) | |
response_body = response.json() | |
image_url = response_body['images'][0]['url'] | |
unique_id = int(time.time() * 1000) | |
current_timestamp = unique_id // 1000 | |
if stream: | |
response_payload = { | |
"id": unique_id, | |
"object": "chat.completion.chunk", | |
"created": current_timestamp, | |
"model": model, | |
"choices": [ | |
{ | |
"index": 0, | |
"delta": { | |
"content": f"" | |
}, | |
"finish_reason": "stop" | |
} | |
] | |
} | |
data_string = json.dumps(response_payload) | |
return Response(f"data: {data_string}\n\n", content_type='text/event-stream') | |
else: | |
response_payload = { | |
"id": unique_id, | |
"object": "chat.completion", | |
"created": current_timestamp, | |
"model": model, | |
"choices": [ | |
{ | |
"index": 0, | |
"message": { | |
"role": "assistant", | |
"content": f"" | |
}, | |
"logprobs": None, | |
"finish_reason": "length" | |
} | |
], | |
"usage": { | |
"prompt_tokens": len(prompt), | |
"completion_tokens": len(image_url), | |
"total_tokens": len(prompt) + len(image_url) | |
} | |
} | |
data_string = json.dumps(response_payload) | |
return Response(f"{data_string}\n\n", content_type='text/event-stream') | |
except Exception as e: | |
return jsonify({"error": f"Internal Server Error: {str(e)}"}), 500 | |
if __name__ == '__main__': | |
app.run(host='0.0.0.0', port=8000) |