]> git.99rst.org Git - irssi-scripts.irssi.org.git/commitdiff
added a new provider, ollama along with some more new options, the notable one is...
authorterminaldweller <redacted>
Sat, 18 Nov 2023 01:06:11 +0000 (20:06 -0500)
committerterminaldweller <redacted>
Sat, 18 Nov 2023 01:06:11 +0000 (20:06 -0500)
scripts/transformer.py

index 95de5bc659e7f09c7e8c619e9bb20eb765297710..495d657a2aa435b4ab027f169efc57837b8e640c 100644 (file)
@@ -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)
 
git clone https://git.99rst.org/PROJECT