Simplified connection_handler

This commit is contained in:
jeffser 2024-07-07 20:41:25 -06:00
parent 35869c0fbf
commit 6cd813c146
3 changed files with 35 additions and 62 deletions

View File

@ -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)

View File

@ -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(

View File

@ -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 = "<b>{}</b>".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()