From: terminaldweller Date: Sat, 18 Nov 2023 01:06:11 +0000 (-0500) Subject: added a new provider, ollama along with some more new options, the notable one is... X-Git-Url: http://git.99rst.org/?a=commitdiff_plain;h=02390eaadd82242ad4035a582b0335b3d8e8dd50;p=irssi-scripts.irssi.org.git added a new provider, ollama along with some more new options, the notable one is adding a timeout, because duh --- diff --git a/scripts/transformer.py b/scripts/transformer.py index 95de5bc..495d657 100644 --- a/scripts/transformer.py +++ b/scripts/transformer.py @@ -1,12 +1,13 @@ import irssi import json +import typing import urllib -from urllib import request +from urllib import request, parse -__version__ = "0.1.0" +__version__ = "1.0.0" IRSSI = { - "authors": "terminaldweller", + "author": "terminaldweller", "contact": "https://terminaldweller.com", "name": "transformer", "description": "transforms incoming text in the channel", @@ -15,42 +16,80 @@ IRSSI = { } -def do_post(url: str, content: bytes, target: bytes, nick: bytes) -> None: - api_key = irssi.settings_get_str(b"transformer_api_key") - api_key = api_key.decode("utf-8") +def do_post(content: bytes, target: bytes, nick: bytes) -> None: model = irssi.settings_get_str(b"transformer_model") temp = irssi.settings_get_int(b"transformer_temperature") n = irssi.settings_get_int(b"transformer_n") + debug = irssi.settings_get_bool(b"transformer_debug") prompt_system = irssi.settings_get_str(b"transformer_prompt_system") prompt_user = irssi.settings_get_str(b"transformer_prompt_user") + provider = irssi.settings_get_str(b"transformer_provider") + provider = provider.decode("utf-8") + server_url = irssi.settings_get_str(b"transformer_server_address") + server_url = server_url.decode("utf-8") + timeout = irssi.settings_get_int(b"transformer_timeout") - headers = {"Content-Type": "application/json", "Authorization": f"Bearer {api_key}"} - - data = { - "model": model.decode("utf-8"), - "temperature": temp / 1000.0, - "n": n, - "messages": [ - { - "role": "system", - "content": prompt_system.decode("utf-8") + content.decode("utf-8"), - }, - { - "role": "user", - "content": prompt_user.decode("utf-8") + content.decode("utf-8"), + data = {} + headers = {} + if provider == "chatgpt": + api_key = irssi.settings_get_str(b"transformer_api_key") + api_key = api_key.decode("utf-8") + headers = {"Content-Type": "application/json", "Authorization": f"Bearer {api_key}"} + role = irssi.settings_get_str(b"transformer_role") + data = { + "model": model.decode("utf-8"), + "temperature": temp / 1000.0, + "n": n, + "messages": [ + { + "role": "system", + "content": prompt_system.decode("utf-8") + }, + { + "role": "user", + "content": prompt_user.decode("utf-8") + content.decode("utf-8"), + }, + ], + } + elif provider == "ollama": + headers = {"Content-Type": "application/json"} + data = { + "model": model.decode("utf-8"), + "system": prompt_system.decode("utf-8"), + "prompt": prompt_user.decode("utf-8") + content.decode("utf-8"), + "stream": False, + "format": "json", + "options": { + "temperature": temp / 1000.0, }, - ], - } + } + else: + pass result = "" post_data = json.dumps(data).encode("utf-8") - req = request.Request(url, post_data, headers, method="POST") + req = request.Request(server_url, post_data, headers, method="POST") try: - resp = request.urlopen(req) + resp = request.urlopen(req, timeout=timeout) json_response = json.load(resp) + print(json_response) window = irssi.window_find_item(target) - for choice in json_response["choices"]: - result = choice["message"]["content"] + trans_header = irssi.settings_get_str(b"transformer_header") + trans_header = trans_header.decode("utf-8") + if trans_header: + window.prnt(bytes(trans_header, encoding="utf-8")) + # window.prnt( + # bytes("%N%z005faf%k %9Transformed %N%Z005faf%0%N", encoding="utf-8") + # ) + if provider == "chatgpt": + for choice in json_response["choices"]: + result = choice["message"]["content"] + if result != "": + window.prnt( + bytes(nick.decode("utf-8") + " >>> " + result, encoding="utf-8") + ) + elif provider == "ollama": + result = json_response["response"] if result != "": window.prnt( bytes(nick.decode("utf-8") + " >>> " + result, encoding="utf-8") @@ -62,17 +101,17 @@ def do_post(url: str, content: bytes, target: bytes, nick: bytes) -> None: def transformer_sig_handler(*args, **kwargs) -> None: - URL = "https://api.openai.com/v1/chat/completions" server = args[0] msg = args[1] nick = args[2] + address = args[3] target = args[4] channels = ( irssi.settings_get_str(b"transformer_channel_list").decode("utf-8").split(" ") ) source = server.tag + b"/" + target if any(source.decode("utf-8") in channel for channel in channels): - do_post(URL, msg, target, nick) + do_post(msg, target, nick) def run_on_script_load() -> None: @@ -109,12 +148,7 @@ def run_on_script_load() -> None: irssi.settings_add_str( b"misc", b"transformer_prompt_system", - ( - b"if you can't translate parts of the provided text use the original" - b" piece of text. the text will ocassionally inlcude URLs. if the original" - b" text is in the target language, return an empty response." - b" Do not ask for follow up question." - ), + b"if you can't translate parts of the provided text use the original piece of text. the text will ocassionally inlcude URLs. if the original text is in the target language, return an empty response. Do not ask for follow up question.", ) irssi.settings_add_str( b"misc", @@ -126,6 +160,26 @@ def run_on_script_load() -> None: b"transformer_channel_list", b"", ) + irssi.settings_add_str( + b"misc", + b"transformer_provider", + b"ollama", + ) + irssi.settings_add_str( + b"misc", + b"transformer_server_address", + b"https://api.openai.com/v1/chat/completions", + ) + irssi.settings_add_int( + b"misc", + b"transformer_timeout", + 5, + ) + irssi.settings_add_str( + b"misc", + b"transformer_header", + b"", + ) irssi.signal_add(b"message public", transformer_sig_handler)