Spaces:
Paused
Paused
import os | |
from flask import Flask, request, jsonify | |
from functools import wraps | |
import requests | |
app = Flask(__name__) | |
AZURE_API_KEY = os.environ.get("AZURE_API_KEY") | |
AZURE_API_BASE = "https://openai-skyline-jp.openai.azure.com" | |
AZURE_API_VERSION = "2023-05-15" | |
AZURE_DEPLOYMENT_NAME = "GPT-4" | |
API_TOKEN = os.environ.get("API_TOKEN") # 从环境变量获取 API Token | |
def token_required(f): | |
def decorated(*args, **kwargs): | |
token = None | |
if 'Authorization' in request.headers: | |
auth_header = request.headers['Authorization'] | |
try: | |
token = auth_header.split(" ")[1] | |
except IndexError: | |
return jsonify({"error": "Invalid token format"}), 401 | |
if not token: | |
return jsonify({"error": "Token is missing"}), 401 | |
if token != API_TOKEN: | |
return jsonify({"error": "Invalid token"}), 401 | |
return f(*args, **kwargs) | |
return decorated | |
def chat_completions(): | |
openai_data = request.json | |
azure_url = f"{AZURE_API_BASE}/openai/deployments/{AZURE_DEPLOYMENT_NAME}/chat/completions?api-version={AZURE_API_VERSION}" | |
headers = { | |
"Content-Type": "application/json", | |
"api-key": AZURE_API_KEY | |
} | |
response = requests.post(azure_url, json=openai_data, headers=headers) | |
if response.status_code == 200: | |
azure_response = response.json() | |
openai_response = { | |
"id": azure_response.get("id", ""), | |
"object": "chat.completion", | |
"created": azure_response.get("created", 0), | |
"model": openai_data.get("model", "gpt-4"), | |
"choices": azure_response.get("choices", []), | |
"usage": azure_response.get("usage", {}) | |
} | |
return jsonify(openai_response), 200 | |
else: | |
return jsonify({"error": "Azure OpenAI API request failed", "details": response.text}), response.status_code | |
if __name__ == "__main__": | |
app.run(host="0.0.0.0", port=7860) |