XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet
公开
关注 0 Fork 0 Star 1
返回提交历史

XFEstudio/gpt4free

Update api.py

0a721eaf
H Lohaus <hlohaus@users.noreply.github.com>
提交于

代码差异

1 个文件 +0 -98
Modified g4f/gui/server/api.py +0 -98
@@ -2,36 +2,7 @@ from __future__ import annotations
2 2
3 3 import logging
4 4 import json
5 import os.path
6 5 from typing import Iterator
7 from uuid import uuid4
8 from functools import partial
9
10 try:
11 import webview
12 import platformdirs
13 from plyer import camera
14 from plyer import filechooser
15 app_storage_path = platformdirs.user_pictures_dir
16 user_select_image = partial(
17 filechooser.open_file,
18 path=platformdirs.user_pictures_dir(),
19 filters=[["Image", "*.jpg", "*.jpeg", "*.png", "*.webp", "*.svg"]],
20 )
21 has_plyer = True
22 except ImportError:
23 has_plyer = False
24 try:
25 from android.runnable import run_on_ui_thread
26 import android.permissions
27 from android.permissions import Permission
28 from android.permissions import _RequestPermissionsManager
29 _RequestPermissionsManager.register_callback()
30 from .android_gallery import user_select_image
31 has_android = True
32 except:
33 run_on_ui_thread = lambda a : a
34 has_android = False
35 6
36 7 from g4f import version, models
37 8 from g4f import get_last_provider, ChatCompletion
@@ -100,75 +71,6 @@ class Api():
100 71 """
101 72 return {'title': ''}
102 73
103 def get_conversation(self, options: dict, **kwargs) -> Iterator:
104 window = webview.windows[0]
105 if hasattr(self, "image") and self.image is not None:
106 kwargs["image"] = open(self.image, "rb")
107 for message in self._create_response_stream(
108 self._prepare_conversation_kwargs(options, kwargs),
109 options.get("conversation_id"),
110 options.get('provider')
111 ):
112 if not window.evaluate_js(f"if (!this.abort) this.add_message_chunk({json.dumps(message)}); !this.abort && !this.error;"):
113 break
114 self.image = None
115 self.set_selected(None)
116
117 @run_on_ui_thread
118 def choose_file(self):
119 self.request_permissions()
120 filechooser.open_file(
121 path=platformdirs.user_pictures_dir(),
122 on_selection=print
123 )
124
125 @run_on_ui_thread
126 def choose_image(self):
127 self.request_permissions()
128 user_select_image(
129 on_selection=self.on_image_selection
130 )
131
132 @run_on_ui_thread
133 def take_picture(self):
134 self.request_permissions()
135 filename = os.path.join(app_storage_path(), f"chat-{uuid4()}.png")
136 camera.take_picture(filename=filename, on_complete=self.on_camera)
137
138 def on_image_selection(self, filename):
139 filename = filename[0] if isinstance(filename, list) and filename else filename
140 if filename and os.path.exists(filename):
141 self.image = filename
142 else:
143 self.image = None
144 self.set_selected(None if self.image is None else "image")
145
146 def on_camera(self, filename):
147 if filename is not None and os.path.exists(filename):
148 self.image = filename
149 else:
150 self.image = None
151 self.set_selected(None if self.image is None else "camera")
152
153 def set_selected(self, input_id: str = None):
154 window = webview.windows[0]
155 if window is not None:
156 window.evaluate_js(
157 f"document.querySelector(`.image-label.selected`)?.classList.remove(`selected`);"
158 )
159 if input_id is not None and input_id in ("image", "camera"):
160 window.evaluate_js(
161 f'document.querySelector(`label[for="{input_id}"]`)?.classList.add(`selected`);'
162 )
163
164 def request_permissions(self):
165 if has_android:
166 android.permissions.request_permissions([
167 Permission.CAMERA,
168 Permission.READ_EXTERNAL_STORAGE,
169 Permission.WRITE_EXTERNAL_STORAGE
170 ])
171
172 74 def _prepare_conversation_kwargs(self, json_data: dict, kwargs: dict):
173 75 """
174 76 Prepares arguments for chat completion based on the request data.