tianlong12 commited on
Commit
8d1ecb1
·
verified ·
1 Parent(s): bbefe7b

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +73 -0
app.py ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import requests
3
+ from flask import Flask, request, Response, stream_with_context, jsonify
4
+ import json
5
+
6
+ app = Flask(__name__)
7
+
8
+ DEEPINFRA_API_URL = "https://api.deepinfra.com/v1/openai/chat/completions"
9
+ API_KEY = os.environ.get("API_KEY")
10
+
11
+ def authenticate():
12
+ auth_header = request.headers.get("Authorization")
13
+ if not auth_header or not auth_header.startswith("Bearer "):
14
+ return False
15
+ token = auth_header.split(" ")[1]
16
+ return token == API_KEY
17
+
18
+ @app.route('/v1/chat/completions', methods=['POST'])
19
+ def chat_completions():
20
+ if not authenticate():
21
+ return jsonify({"error": "Unauthorized"}), 401
22
+
23
+ # 获取OpenAI格式的请求
24
+ openai_request = request.json
25
+
26
+ # 转换为DeepInfra格式
27
+ deepinfra_request = {
28
+ "model": openai_request.get("model", "meta-llama/Meta-Llama-3.1-70B-Instruct"),
29
+ "temperature": openai_request.get("temperature", 0.7),
30
+ "max_tokens": openai_request.get("max_tokens", 1000),
31
+ "stream": openai_request.get("stream", False),
32
+ "messages": openai_request.get("messages", [])
33
+ }
34
+
35
+ headers = {
36
+ "Content-Type": "application/json",
37
+ "Accept": "text/event-stream" if deepinfra_request["stream"] else "application/json"
38
+ }
39
+
40
+ # 发送请求到DeepInfra API
41
+ response = requests.post(DEEPINFRA_API_URL, json=deepinfra_request, headers=headers, stream=True)
42
+
43
+ if deepinfra_request["stream"]:
44
+ # 流式响应
45
+ def generate():
46
+ for line in response.iter_lines():
47
+ if line:
48
+ yield f"data: {line.decode('utf-8')}\n\n"
49
+ return Response(stream_with_context(generate()), content_type='text/event-stream')
50
+ else:
51
+ # 非流式响应
52
+ deepinfra_response = response.json()
53
+ openai_response = {
54
+ "id": deepinfra_response.get("id", ""),
55
+ "object": "chat.completion",
56
+ "created": deepinfra_response.get("created", 0),
57
+ "model": deepinfra_response.get("model", ""),
58
+ "choices": [
59
+ {
60
+ "index": 0,
61
+ "message": {
62
+ "role": "assistant",
63
+ "content": deepinfra_response["choices"][0]["message"]["content"]
64
+ },
65
+ "finish_reason": deepinfra_response["choices"][0].get("finish_reason", "stop")
66
+ }
67
+ ],
68
+ "usage": deepinfra_response.get("usage", {})
69
+ }
70
+ return json.dumps(openai_response), 200, {'Content-Type': 'application/json'}
71
+
72
+ if __name__ == '__main__':
73
+ app.run(host='0.0.0.0', port=7860)