| import os |
| import time |
| import json |
| import random |
|
|
| from g4f import Model, ChatCompletion, Provider |
| from flask import Flask, request, Response |
| from flask_cors import CORS |
|
|
| app = Flask(__name__) |
| CORS(app) |
|
|
| @app.route("/chat/completions", methods=['POST']) |
| def chat_completions(): |
| streaming = request.json.get('stream', False) |
| model = request.json.get('model', 'gpt-3.5-turbo') |
| messages = request.json.get('messages') |
| |
| response = ChatCompletion.create(model=model, stream=streaming, |
| messages=messages) |
| |
| if not streaming: |
| while 'curl_cffi.requests.errors.RequestsError' in response: |
| response = ChatCompletion.create(model=model, stream=streaming, |
| messages=messages) |
|
|
| completion_timestamp = int(time.time()) |
| completion_id = ''.join(random.choices( |
| 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', k=28)) |
|
|
| return { |
| 'id': 'chatcmpl-%s' % completion_id, |
| 'object': 'chat.completion', |
| 'created': completion_timestamp, |
| 'model': model, |
| 'usage': { |
| 'prompt_tokens': None, |
| 'completion_tokens': None, |
| 'total_tokens': None |
| }, |
| 'choices': [{ |
| 'message': { |
| 'role': 'assistant', |
| 'content': response |
| }, |
| 'finish_reason': 'stop', |
| 'index': 0 |
| }] |
| } |
|
|
| def stream(): |
| for token in response: |
| completion_timestamp = int(time.time()) |
| completion_id = ''.join(random.choices( |
| 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', k=28)) |
|
|
| completion_data = { |
| 'id': f'chatcmpl-{completion_id}', |
| 'object': 'chat.completion.chunk', |
| 'created': completion_timestamp, |
| 'model': 'gpt-3.5-turbo-0301', |
| 'choices': [ |
| { |
| 'delta': { |
| 'content': token |
| }, |
| 'index': 0, |
| 'finish_reason': None |
| } |
| ] |
| } |
|
|
| yield 'data: %s\n\n' % json.dumps(completion_data, separators=(',' ':')) |
| time.sleep(0.1) |
|
|
| return app.response_class(stream(), mimetype='text/event-stream') |
|
|
|
|
| if __name__ == '__main__': |
| config = { |
| 'host': '0.0.0.0', |
| 'port': 1337, |
| 'debug': True |
| } |
|
|
| app.run(**config) |
|
|