summaryrefslogtreecommitdiffstats
path: root/g4f/gui/server/backend.py
diff options
context:
space:
mode:
Diffstat (limited to 'g4f/gui/server/backend.py')
-rw-r--r--g4f/gui/server/backend.py52
1 files changed, 52 insertions, 0 deletions
diff --git a/g4f/gui/server/backend.py b/g4f/gui/server/backend.py
new file mode 100644
index 00000000..9a1dbbf8
--- /dev/null
+++ b/g4f/gui/server/backend.py
@@ -0,0 +1,52 @@
+import g4f
+
+from flask import request
+from threading import Thread
+from .internet import search
+from .config import special_instructions
+
+class Backend_Api:
+ def __init__(self, app) -> None:
+ self.app = app
+ self.routes = {
+ '/backend-api/v2/conversation': {
+ 'function': self._conversation,
+ 'methods': ['POST']
+ },
+ '/backend-api/v2/gen.set.summarize:title': {
+ 'function': self._gen_title,
+ 'methods': ['POST']
+ },
+ }
+
+ def _gen_title(self):
+ return {
+ 'title': ''
+ }
+
+ def _conversation(self):
+ try:
+ jailbreak = request.json['jailbreak']
+ internet_access = request.json['meta']['content']['internet_access']
+ conversation = request.json['meta']['content']['conversation']
+ prompt = request.json['meta']['content']['parts'][0]
+ model = request.json['model']
+
+ messages = special_instructions[jailbreak] + conversation + search(internet_access, prompt) + [prompt]
+
+ def stream():
+ answer = g4f.ChatCompletion.create(model = model,
+ messages = messages, stream=True)
+
+ for token in answer:
+ yield token
+
+ return self.app.response_class(stream(), mimetype='text/event-stream')
+
+ except Exception as e:
+ print(e)
+ return {
+ '_token': 'anerroroccuredmf',
+ '_action': '_ask',
+ 'success': False,
+ "error": f"an error occured {str(e)}"}, 400 \ No newline at end of file