mirror of
https://github.com/xtekky/gpt4free.git
synced 2024-11-05 00:01:00 +00:00
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)
|