diff --git a/src/connection_handler.py b/src/connection_handler.py index e687df6..5b01781 100644 --- a/src/connection_handler.py +++ b/src/connection_handler.py @@ -1,6 +1,6 @@ -# connectionhandler.py +# connection_handler.py import json, requests - +#OK=200 response.status_code url = None bearer_token = None @@ -13,44 +13,13 @@ def get_headers(include_json:bool) -> dict: return headers if len(headers.keys()) > 0 else None def simple_get(connection_url:str) -> dict: - try: - response = requests.get(connection_url, headers=get_headers(False)) - if response.status_code == 200: - return {"status": "ok", "text": response.text, "status_code": response.status_code} - else: - return {"status": "error", "status_code": response.status_code} - except Exception as e: - return {"status": "error", "status_code": 0} + return requests.get(connection_url, headers=get_headers(False)) def simple_post(connection_url:str, data) -> dict: - try: - response = requests.post(connection_url, headers=get_headers(True), data=data, stream=False) - if response.status_code == 200: - return {"status": "ok", "text": response.text, "status_code": response.status_code} - else: - return {"status": "error", "status_code": response.status_code} - except Exception as e: - return {"status": "error", "status_code": 0} + return requests.post(connection_url, headers=get_headers(True), data=data, stream=False) def simple_delete(connection_url:str, data) -> dict: - try: - response = requests.delete(connection_url, headers=get_headers(False), json=data) - if response.status_code == 200: - return {"status": "ok", "status_code": response.status_code} - else: - return {"status": "error", "text": "Failed to delete", "status_code": response.status_code} - except Exception as e: - return {"status": "error", "status_code": 0} + return requests.delete(connection_url, headers=get_headers(False), json=data) def stream_post(connection_url:str, data, callback:callable) -> dict: - try: - response = requests.post(connection_url, headers=get_headers(True), data=data, stream=True) - if response.status_code == 200: - for line in response.iter_lines(): - if line: - callback(json.loads(line.decode("utf-8"))) - return {"status": "ok", "status_code": response.status_code} - else: - return {"status": "error", "status_code": response.status_code} - except Exception as e: - return {"status": "error", "status_code": 0} + return requests.post(connection_url, headers=get_headers(True), data=data, stream=True) diff --git a/src/dialogs.py b/src/dialogs.py index 796cc05..961b7e3 100644 --- a/src/dialogs.py +++ b/src/dialogs.py @@ -318,19 +318,24 @@ def youtube_caption(self, video_url): def attach_website_response(self, dialog, task, url): if dialog.choose_finish(task) == "accept": - html = connection_handler.simple_get(url)['text'] - md = html2text(html) - buffer = self.message_text_view.get_buffer() - textview_text = buffer.get_text(buffer.get_start_iter(), buffer.get_end_iter(), False).replace(url, "") - buffer.delete(buffer.get_start_iter(), buffer.get_end_iter()) - buffer.insert(buffer.get_start_iter(), textview_text, len(textview_text)) - if not os.path.exists('/tmp/alpaca/websites/'): - os.makedirs('/tmp/alpaca/websites/') - md_name = self.generate_numbered_name('website.md', os.listdir('/tmp/alpaca/websites')) - file_path = os.path.join('/tmp/alpaca/websites/', md_name) - with open(file_path, 'w+') as f: - f.write('{}\n\n{}'.format(url, md)) - self.attach_file(file_path, 'website') + response = connection_handler.simple_get(url) + if response.status_code == 200: + html = response.text + md = html2text(html) + buffer = self.message_text_view.get_buffer() + textview_text = buffer.get_text(buffer.get_start_iter(), buffer.get_end_iter(), False).replace(url, "") + buffer.delete(buffer.get_start_iter(), buffer.get_end_iter()) + buffer.insert(buffer.get_start_iter(), textview_text, len(textview_text)) + if not os.path.exists('/tmp/alpaca/websites/'): + os.makedirs('/tmp/alpaca/websites/') + md_name = self.generate_numbered_name('website.md', os.listdir('/tmp/alpaca/websites')) + file_path = os.path.join('/tmp/alpaca/websites/', md_name) + with open(file_path, 'w+') as f: + f.write('{}\n\n{}'.format(url, md)) + self.attach_file(file_path, 'website') + else: + self.show_toast(_("An error occurred while extracting text from the website"), self.main_overlay) + def attach_website(self, url): dialog = Adw.AlertDialog( diff --git a/src/window.py b/src/window.py index 66d6cbb..eaba275 100644 --- a/src/window.py +++ b/src/window.py @@ -407,8 +407,8 @@ class AlpacaWindow(Adw.ApplicationWindow): template = "" if not file: response = connection_handler.simple_post(f"{connection_handler.url}/api/show", json.dumps({"name": model})) - if 'text' in response: - data = json.loads(response['text']) + if response.status_code == 200: + data = json.loads(response.text) for line in data['modelfile'].split('\n'): if line.startswith('SYSTEM'): @@ -532,7 +532,7 @@ Generate a title following these rules: data = {"model": current_model, "prompt": prompt, "stream": False} if 'images' in message: data["images"] = message['images'] response = connection_handler.simple_post(f"{connection_handler.url}/api/generate", data=json.dumps(data)) - new_chat_name = json.loads(response['text'])["response"].strip().removeprefix("Title: ").removeprefix("title: ").strip('\'"').title() + new_chat_name = json.loads(response.text)["response"].strip().removeprefix("Title: ").removeprefix("title: ").strip('\'"').title() new_chat_name = new_chat_name[:50] + (new_chat_name[50:] and '...') self.rename_chat(label_element.get_name(), new_chat_name, label_element) @@ -704,13 +704,13 @@ Generate a title following these rules: response = connection_handler.simple_get(f"{connection_handler.url}/api/tags") for i in range(self.model_string_list.get_n_items() -1, -1, -1): self.model_string_list.remove(i) - if response['status'] == 'ok': + if response.status_code == 200: self.local_model_list_box.remove_all() - if len(json.loads(response['text'])['models']) == 0: + if len(json.loads(response.text)['models']) == 0: self.local_model_list_box.set_visible(False) else: self.local_model_list_box.set_visible(True) - for model in json.loads(response['text'])['models']: + for model in json.loads(response.text)['models']: model_row = Adw.ActionRow( title = "{}".format(model["name"].split(":")[0].replace("-", " ").title()), subtitle = model["name"].split(":")[1] @@ -740,8 +740,8 @@ Generate a title following these rules: def verify_connection(self): response = connection_handler.simple_get(connection_handler.url) - if response['status'] == 'ok': - if "Ollama is running" in response['text']: + if response.status_code == 200: + if "Ollama is running" in response.text: self.save_server_config() self.update_list_local_models() return True @@ -906,7 +906,7 @@ Generate a title following these rules: if self.loading_spinner: GLib.idle_add(self.chat_container.remove, self.loading_spinner) self.loading_spinner = None - if response['status'] == 'error': + if response.status_code != 200: GLib.idle_add(self.connection_error) def pull_model_update(self, data, model_name): @@ -922,7 +922,6 @@ Generate a title following these rules: GLib.idle_add(self.pulling_model_list_box.set_visible, False) def pull_model_process(self, model, modelfile): - response = {} if modelfile: data = {"name": model, "modelfile": modelfile} response = connection_handler.stream_post(f"{connection_handler.url}/api/create", data=json.dumps(data), callback=lambda data, model_name=model: self.pull_model_update(data, model_name)) @@ -931,7 +930,7 @@ Generate a title following these rules: response = connection_handler.stream_post(f"{connection_handler.url}/api/pull", data=json.dumps(data), callback=lambda data, model_name=model: self.pull_model_update(data, model_name)) GLib.idle_add(self.update_list_local_models) - if response['status'] == 'ok': + if response.status_code == 200: GLib.idle_add(self.show_notification, _("Task Complete"), _("Model '{}' pulled successfully.").format(model), Gio.ThemedIcon.new("emblem-ok-symbolic")) GLib.idle_add(self.show_toast, "good", 1, self.manage_models_overlay) GLib.idle_add(self.pulling_models[model]['overlay'].get_parent().get_parent().remove, self.pulling_models[model]['overlay'].get_parent()) @@ -1115,7 +1114,7 @@ Generate a title following these rules: def delete_model(self, model_name): response = connection_handler.simple_delete(f"{connection_handler.url}/api/delete", data={"name": model_name}) self.update_list_local_models() - if response['status'] == 'ok': + if response.status_code == 200: self.show_toast(_("Model deleted successfully"), self.manage_models_overlay) else: self.manage_models_dialog.close()