From 79648e73a83cc334e793ffd46c5698a79bed6afa Mon Sep 17 00:00:00 2001 From: abc <98614666+xtekky@users.noreply.github.com> Date: Sat, 13 May 2023 10:52:51 +0100 Subject: [PATCH] interference openai proxy --- interference/app.py | 103 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 interference/app.py diff --git a/interference/app.py b/interference/app.py new file mode 100644 index 0000000..ce29ccd --- /dev/null +++ b/interference/app.py @@ -0,0 +1,103 @@ +import os +import time +import json +import random + +from g4f import Models, ChatCompletion, Providers +from flask import Flask, request + +app = Flask(__name__) +app.config['JSONIFY_PRETTYPRINT_REGULAR'] = True + +class website: + def __init__(self) -> None: + self.routes = { + '/chat/completions': { + 'function': self.chat_completions, + 'methods': ['POST', 'GET'] + } + } + + self.config = { + 'host': '0.0.0.0', + 'port': 5432 if os.name == 'nt' else 1447, + 'debug': True + } + + def chat_completions(self): + 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=Models.gpt_35_turbo, stream=streaming, + messages=messages) + + if not streaming: + + 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__': + website = website() + + for route in website.routes: + app.add_url_rule( + route, + view_func=website.routes[route]['function'], + methods=website.routes[route]['methods'] + ) + + app.run(**website.config) \ No newline at end of file