12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- 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')
- models = {
- 'gpt-3.5-turbo': 'gpt-3.5-turbo-0301'
- }
- response = ChatCompletion.create(model=Model.gpt_35_turbo, stream=streaming,
- messages=messages)
- if not streaming:
- while 'curl_cffi.requests.errors.RequestsError' in response:
- response = ChatCompletion.create(model=Model.gpt_35_turbo, 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': models[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)
|