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)