Simplified connection_handler
This commit is contained in:
parent
35869c0fbf
commit
6cd813c146
@ -1,6 +1,6 @@
|
|||||||
# connectionhandler.py
|
# connection_handler.py
|
||||||
import json, requests
|
import json, requests
|
||||||
|
#OK=200 response.status_code
|
||||||
url = None
|
url = None
|
||||||
bearer_token = None
|
bearer_token = None
|
||||||
|
|
||||||
@ -13,44 +13,13 @@ def get_headers(include_json:bool) -> dict:
|
|||||||
return headers if len(headers.keys()) > 0 else None
|
return headers if len(headers.keys()) > 0 else None
|
||||||
|
|
||||||
def simple_get(connection_url:str) -> dict:
|
def simple_get(connection_url:str) -> dict:
|
||||||
try:
|
return requests.get(connection_url, headers=get_headers(False))
|
||||||
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}
|
|
||||||
|
|
||||||
def simple_post(connection_url:str, data) -> dict:
|
def simple_post(connection_url:str, data) -> dict:
|
||||||
try:
|
return requests.post(connection_url, headers=get_headers(True), data=data, stream=False)
|
||||||
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}
|
|
||||||
|
|
||||||
def simple_delete(connection_url:str, data) -> dict:
|
def simple_delete(connection_url:str, data) -> dict:
|
||||||
try:
|
return requests.delete(connection_url, headers=get_headers(False), json=data)
|
||||||
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}
|
|
||||||
|
|
||||||
def stream_post(connection_url:str, data, callback:callable) -> dict:
|
def stream_post(connection_url:str, data, callback:callable) -> dict:
|
||||||
try:
|
return requests.post(connection_url, headers=get_headers(True), data=data, stream=True)
|
||||||
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}
|
|
||||||
|
@ -318,19 +318,24 @@ def youtube_caption(self, video_url):
|
|||||||
|
|
||||||
def attach_website_response(self, dialog, task, url):
|
def attach_website_response(self, dialog, task, url):
|
||||||
if dialog.choose_finish(task) == "accept":
|
if dialog.choose_finish(task) == "accept":
|
||||||
html = connection_handler.simple_get(url)['text']
|
response = connection_handler.simple_get(url)
|
||||||
md = html2text(html)
|
if response.status_code == 200:
|
||||||
buffer = self.message_text_view.get_buffer()
|
html = response.text
|
||||||
textview_text = buffer.get_text(buffer.get_start_iter(), buffer.get_end_iter(), False).replace(url, "")
|
md = html2text(html)
|
||||||
buffer.delete(buffer.get_start_iter(), buffer.get_end_iter())
|
buffer = self.message_text_view.get_buffer()
|
||||||
buffer.insert(buffer.get_start_iter(), textview_text, len(textview_text))
|
textview_text = buffer.get_text(buffer.get_start_iter(), buffer.get_end_iter(), False).replace(url, "")
|
||||||
if not os.path.exists('/tmp/alpaca/websites/'):
|
buffer.delete(buffer.get_start_iter(), buffer.get_end_iter())
|
||||||
os.makedirs('/tmp/alpaca/websites/')
|
buffer.insert(buffer.get_start_iter(), textview_text, len(textview_text))
|
||||||
md_name = self.generate_numbered_name('website.md', os.listdir('/tmp/alpaca/websites'))
|
if not os.path.exists('/tmp/alpaca/websites/'):
|
||||||
file_path = os.path.join('/tmp/alpaca/websites/', md_name)
|
os.makedirs('/tmp/alpaca/websites/')
|
||||||
with open(file_path, 'w+') as f:
|
md_name = self.generate_numbered_name('website.md', os.listdir('/tmp/alpaca/websites'))
|
||||||
f.write('{}\n\n{}'.format(url, md))
|
file_path = os.path.join('/tmp/alpaca/websites/', md_name)
|
||||||
self.attach_file(file_path, 'website')
|
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):
|
def attach_website(self, url):
|
||||||
dialog = Adw.AlertDialog(
|
dialog = Adw.AlertDialog(
|
||||||
|
@ -407,8 +407,8 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
template = ""
|
template = ""
|
||||||
if not file:
|
if not file:
|
||||||
response = connection_handler.simple_post(f"{connection_handler.url}/api/show", json.dumps({"name": model}))
|
response = connection_handler.simple_post(f"{connection_handler.url}/api/show", json.dumps({"name": model}))
|
||||||
if 'text' in response:
|
if response.status_code == 200:
|
||||||
data = json.loads(response['text'])
|
data = json.loads(response.text)
|
||||||
|
|
||||||
for line in data['modelfile'].split('\n'):
|
for line in data['modelfile'].split('\n'):
|
||||||
if line.startswith('SYSTEM'):
|
if line.startswith('SYSTEM'):
|
||||||
@ -532,7 +532,7 @@ Generate a title following these rules:
|
|||||||
data = {"model": current_model, "prompt": prompt, "stream": False}
|
data = {"model": current_model, "prompt": prompt, "stream": False}
|
||||||
if 'images' in message: data["images"] = message['images']
|
if 'images' in message: data["images"] = message['images']
|
||||||
response = connection_handler.simple_post(f"{connection_handler.url}/api/generate", data=json.dumps(data))
|
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 '...')
|
new_chat_name = new_chat_name[:50] + (new_chat_name[50:] and '...')
|
||||||
self.rename_chat(label_element.get_name(), new_chat_name, label_element)
|
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")
|
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):
|
for i in range(self.model_string_list.get_n_items() -1, -1, -1):
|
||||||
self.model_string_list.remove(i)
|
self.model_string_list.remove(i)
|
||||||
if response['status'] == 'ok':
|
if response.status_code == 200:
|
||||||
self.local_model_list_box.remove_all()
|
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)
|
self.local_model_list_box.set_visible(False)
|
||||||
else:
|
else:
|
||||||
self.local_model_list_box.set_visible(True)
|
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(
|
model_row = Adw.ActionRow(
|
||||||
title = "<b>{}</b>".format(model["name"].split(":")[0].replace("-", " ").title()),
|
title = "<b>{}</b>".format(model["name"].split(":")[0].replace("-", " ").title()),
|
||||||
subtitle = model["name"].split(":")[1]
|
subtitle = model["name"].split(":")[1]
|
||||||
@ -740,8 +740,8 @@ Generate a title following these rules:
|
|||||||
|
|
||||||
def verify_connection(self):
|
def verify_connection(self):
|
||||||
response = connection_handler.simple_get(connection_handler.url)
|
response = connection_handler.simple_get(connection_handler.url)
|
||||||
if response['status'] == 'ok':
|
if response.status_code == 200:
|
||||||
if "Ollama is running" in response['text']:
|
if "Ollama is running" in response.text:
|
||||||
self.save_server_config()
|
self.save_server_config()
|
||||||
self.update_list_local_models()
|
self.update_list_local_models()
|
||||||
return True
|
return True
|
||||||
@ -906,7 +906,7 @@ Generate a title following these rules:
|
|||||||
if self.loading_spinner:
|
if self.loading_spinner:
|
||||||
GLib.idle_add(self.chat_container.remove, self.loading_spinner)
|
GLib.idle_add(self.chat_container.remove, self.loading_spinner)
|
||||||
self.loading_spinner = None
|
self.loading_spinner = None
|
||||||
if response['status'] == 'error':
|
if response.status_code != 200:
|
||||||
GLib.idle_add(self.connection_error)
|
GLib.idle_add(self.connection_error)
|
||||||
|
|
||||||
def pull_model_update(self, data, model_name):
|
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)
|
GLib.idle_add(self.pulling_model_list_box.set_visible, False)
|
||||||
|
|
||||||
def pull_model_process(self, model, modelfile):
|
def pull_model_process(self, model, modelfile):
|
||||||
response = {}
|
|
||||||
if modelfile:
|
if modelfile:
|
||||||
data = {"name": model, "modelfile": 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))
|
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))
|
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)
|
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_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.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())
|
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):
|
def delete_model(self, model_name):
|
||||||
response = connection_handler.simple_delete(f"{connection_handler.url}/api/delete", data={"name": model_name})
|
response = connection_handler.simple_delete(f"{connection_handler.url}/api/delete", data={"name": model_name})
|
||||||
self.update_list_local_models()
|
self.update_list_local_models()
|
||||||
if response['status'] == 'ok':
|
if response.status_code == 200:
|
||||||
self.show_toast(_("Model deleted successfully"), self.manage_models_overlay)
|
self.show_toast(_("Model deleted successfully"), self.manage_models_overlay)
|
||||||
else:
|
else:
|
||||||
self.manage_models_dialog.close()
|
self.manage_models_dialog.close()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user