mirror of https://github.com/xtekky/gpt4free.git
87 lines
2.6 KiB
Python
87 lines
2.6 KiB
Python
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)
|