summaryrefslogtreecommitdiffstats
path: root/interference/app.py
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--interference/app.py86
1 files changed, 86 insertions, 0 deletions
diff --git a/interference/app.py b/interference/app.py
new file mode 100644
index 00000000..afe15df7
--- /dev/null
+++ b/interference/app.py
@@ -0,0 +1,86 @@
+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)