tianlong12 commited on
Commit
531dd91
·
verified ·
1 Parent(s): 8e95cf7

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +79 -27
app.py CHANGED
@@ -2,8 +2,10 @@ 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")
@@ -20,12 +22,11 @@ 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),
@@ -37,37 +38,88 @@ def chat_completions():
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)
 
2
  import requests
3
  from flask import Flask, request, Response, stream_with_context, jsonify
4
  import json
5
+ import logging
6
 
7
  app = Flask(__name__)
8
+ logging.basicConfig(level=logging.INFO)
9
 
10
  DEEPINFRA_API_URL = "https://api.deepinfra.com/v1/openai/chat/completions"
11
  API_KEY = os.environ.get("API_KEY")
 
22
  if not authenticate():
23
  return jsonify({"error": "Unauthorized"}), 401
24
 
 
25
  openai_request = request.json
26
+ logging.info(f"Received request: {openai_request}")
27
 
 
28
  deepinfra_request = {
29
+ "model": openai_request.get("model", "meta-llama/Meta-Llama-3.1-405B-Instruct"),
30
  "temperature": openai_request.get("temperature", 0.7),
31
  "max_tokens": openai_request.get("max_tokens", 1000),
32
  "stream": openai_request.get("stream", False),
 
38
  "Accept": "text/event-stream" if deepinfra_request["stream"] else "application/json"
39
  }
40
 
41
+ try:
42
+ response = requests.post(DEEPINFRA_API_URL, json=deepinfra_request, headers=headers, stream=deepinfra_request["stream"])
43
+ response.raise_for_status()
44
+ except requests.RequestException as e:
45
+ logging.error(f"Error calling DeepInfra API: {str(e)}")
46
+ return jsonify({"error": "Failed to call DeepInfra API"}), 500
47
 
48
  if deepinfra_request["stream"]:
 
49
  def generate():
50
+ full_content = ""
51
  for line in response.iter_lines():
52
  if line:
53
+ data = json.loads(line.decode('utf-8').split('data: ')[1])
54
+ if data == "[DONE]":
55
+ yield f"data: [DONE]\n\n"
56
+ break
57
+
58
+ delta_content = data['choices'][0]['delta'].get('content', '')
59
+ full_content += delta_content
60
+
61
+ openai_format = {
62
+ "id": data['id'],
63
+ "object": "chat.completion.chunk",
64
+ "created": data['created'],
65
+ "model": data['model'],
66
+ "choices": [
67
+ {
68
+ "index": 0,
69
+ "delta": {
70
+ "content": delta_content
71
+ },
72
+ "finish_reason": data['choices'][0].get('finish_reason')
73
+ }
74
+ ]
75
+ }
76
+ yield f"data: {json.dumps(openai_format)}\n\n"
77
+
78
+ # Send the final usage information
79
+ if 'usage' in data:
80
+ final_chunk = {
81
+ "id": data['id'],
82
+ "object": "chat.completion.chunk",
83
+ "created": data['created'],
84
+ "model": data['model'],
85
+ "choices": [{"index": 0, "delta": {}, "finish_reason": "stop"}],
86
+ "usage": data['usage']
87
+ }
88
+ yield f"data: {json.dumps(final_chunk)}\n\n"
89
+
90
  return Response(stream_with_context(generate()), content_type='text/event-stream')
91
  else:
92
+ try:
93
+ deepinfra_response = response.json()
94
+ logging.info(f"Received response from DeepInfra: {deepinfra_response}")
95
+
96
+ if 'error' in deepinfra_response:
97
+ return jsonify({"error": deepinfra_response['error']}), 400
98
+
99
+ if 'choices' not in deepinfra_response or not deepinfra_response['choices']:
100
+ return jsonify({"error": "Unexpected response format from DeepInfra"}), 500
101
+
102
+ openai_response = {
103
+ "id": deepinfra_response.get("id", ""),
104
+ "object": "chat.completion",
105
+ "created": deepinfra_response.get("created", 0),
106
+ "model": deepinfra_response.get("model", ""),
107
+ "choices": [
108
+ {
109
+ "index": 0,
110
+ "message": {
111
+ "role": "assistant",
112
+ "content": deepinfra_response["choices"][0]["message"]["content"]
113
+ },
114
+ "finish_reason": deepinfra_response["choices"][0].get("finish_reason", "stop")
115
+ }
116
+ ],
117
+ "usage": deepinfra_response.get("usage", {})
118
+ }
119
+ return json.dumps(openai_response), 200, {'Content-Type': 'application/json'}
120
+ except Exception as e:
121
+ logging.error(f"Error processing DeepInfra response: {str(e)}")
122
+ return jsonify({"error": "Failed to process DeepInfra response"}), 500
123
 
124
  if __name__ == '__main__':
125
  app.run(host='0.0.0.0', port=7860)