tianlong12 commited on
Commit
4d7cb47
·
verified ·
1 Parent(s): 3be7278

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +43 -26
app.py CHANGED
@@ -1,5 +1,6 @@
1
- from flask import Flask, request, jsonify
2
  import requests
 
3
  import time
4
 
5
  app = Flask(__name__)
@@ -34,49 +35,65 @@ def req_flux(token, prompt_value, aspect_ratio="1:1", output_format="webp", num_
34
  print(f"Error making request: {e}")
35
  return None
36
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
  @app.route('/hf/v1/chat/completions', methods=['POST'])
38
  def chat_completions():
39
  data = request.json
40
  messages = data.get('messages', [])
 
41
 
42
  # Extract the prompt from the last user message
43
  prompt = next((msg['content'] for msg in reversed(messages) if msg['role'] == 'user'), None)
44
 
45
  if not prompt:
46
- return jsonify({'error': 'No valid prompt provided'}), 400
47
 
48
  token = get_token()
49
  if not token:
50
- return jsonify({'error': 'Failed to get token'}), 500
51
 
52
  image_url = req_flux(token, prompt)
53
  if not image_url:
54
- return jsonify({'error': 'Failed to generate image'}), 500
55
 
56
- # Construct response in ChatCompletion format
57
- response = {
58
- "id": f"chatcmpl-{int(time.time())}",
59
- "object": "chat.completion",
60
- "created": int(time.time()),
61
- "model": "flux-ai-image-generator",
62
- "choices": [
63
- {
64
- "index": 0,
65
- "message": {
66
- "role": "assistant",
67
- "content": f"I've generated an image based on your prompt. You can view it here: {image_url}"
68
- },
69
- "finish_reason": "stop"
 
 
 
 
 
 
 
 
70
  }
71
- ],
72
- "usage": {
73
- "prompt_tokens": len(prompt.split()),
74
- "completion_tokens": 20, # Approximate
75
- "total_tokens": len(prompt.split()) + 20
76
  }
77
- }
78
-
79
- return jsonify(response)
80
 
81
  if __name__ == '__main__':
82
  app.run(host='0.0.0.0', port=7860)
 
1
+ from flask import Flask, request, Response
2
  import requests
3
+ import json
4
  import time
5
 
6
  app = Flask(__name__)
 
35
  print(f"Error making request: {e}")
36
  return None
37
 
38
+ def generate_fake_stream(image_url):
39
+ chunks = [
40
+ "I'm generating an image based on your prompt...",
41
+ "The image is being processed...",
42
+ "Almost there...",
43
+ f"Image generated successfully! You can view it here: {image_url}"
44
+ ]
45
+
46
+ for i, chunk in enumerate(chunks):
47
+ yield f"data: {json.dumps({'id': f'chatcmpl-{int(time.time())}', 'object': 'chat.completion.chunk', 'created': int(time.time()), 'model': 'flux-ai-image-generator', 'choices': [{'index': 0, 'delta': {'role': 'assistant' if i == 0 else None, 'content': chunk}, 'finish_reason': None if i < len(chunks) - 1 else 'stop'}]})}\n\n"
48
+ time.sleep(1) # Simulate processing time
49
+
50
+ yield "data: [DONE]\n\n"
51
+
52
  @app.route('/hf/v1/chat/completions', methods=['POST'])
53
  def chat_completions():
54
  data = request.json
55
  messages = data.get('messages', [])
56
+ stream = data.get('stream', False)
57
 
58
  # Extract the prompt from the last user message
59
  prompt = next((msg['content'] for msg in reversed(messages) if msg['role'] == 'user'), None)
60
 
61
  if not prompt:
62
+ return Response(json.dumps({'error': 'No valid prompt provided'}), status=400, mimetype='application/json')
63
 
64
  token = get_token()
65
  if not token:
66
+ return Response(json.dumps({'error': 'Failed to get token'}), status=500, mimetype='application/json')
67
 
68
  image_url = req_flux(token, prompt)
69
  if not image_url:
70
+ return Response(json.dumps({'error': 'Failed to generate image'}), status=500, mimetype='application/json')
71
 
72
+ if stream:
73
+ return Response(generate_fake_stream(image_url), mimetype='text/event-stream')
74
+ else:
75
+ response = {
76
+ "id": f"chatcmpl-{int(time.time())}",
77
+ "object": "chat.completion",
78
+ "created": int(time.time()),
79
+ "model": "flux-ai-image-generator",
80
+ "choices": [
81
+ {
82
+ "index": 0,
83
+ "message": {
84
+ "role": "assistant",
85
+ "content": f"I've generated an image based on your prompt. You can view it here: {image_url}"
86
+ },
87
+ "finish_reason": "stop"
88
+ }
89
+ ],
90
+ "usage": {
91
+ "prompt_tokens": len(prompt.split()),
92
+ "completion_tokens": 20, # Approximate
93
+ "total_tokens": len(prompt.split()) + 20
94
  }
 
 
 
 
 
95
  }
96
+ return Response(json.dumps(response), mimetype='application/json')
 
 
97
 
98
  if __name__ == '__main__':
99
  app.run(host='0.0.0.0', port=7860)