From 94d1039a9ceb973b3a1bca0e0be86c308cb845fb Mon Sep 17 00:00:00 2001 From: Philipp Date: Sun, 7 Apr 2024 22:22:07 +0200 Subject: [PATCH] switch from request to aiohttp, make haste server configurable --- base-config.yaml | 1 + gpt/gpt.py | 42 +++++++++++++++++++++------------------- gpt/history.py | 21 ++++++++++---------- maubot.yaml | 2 +- sh.boehm.gpt-v0.0.4.mbp | Bin 0 -> 8737 bytes 5 files changed, 35 insertions(+), 31 deletions(-) create mode 100644 sh.boehm.gpt-v0.0.4.mbp diff --git a/base-config.yaml b/base-config.yaml index 8680723..6a37b45 100644 --- a/base-config.yaml +++ b/base-config.yaml @@ -5,3 +5,4 @@ model: "dalle" reply_in_thread: True redis_host: "192.168.1.242" redis_port: "6379" +haste_url: "https://haste.snrd.eu/documents" diff --git a/gpt/gpt.py b/gpt/gpt.py index fcf9853..b232903 100644 --- a/gpt/gpt.py +++ b/gpt/gpt.py @@ -3,8 +3,8 @@ import urllib import io import base64 import asyncio -import requests import re +import aiohttp from PIL import Image from typing import Type, Deque, Dict, Generator @@ -26,6 +26,7 @@ class Config(BaseProxyConfig): helper.copy("nickname") helper.copy("redis_host") helper.copy("redis_port") + helper.copy("haste_url") class Gpt(Plugin): @@ -37,7 +38,7 @@ class Gpt(Plugin): self.config.load_and_update() self.name = self.config["name"] self.nickname = self.config["nickname"] - self.history = History(self.config["redis_host"], self.config["redis_port"]) + self.history = History(self.config["redis_host"], self.config["redis_port"], self.config["haste_url"]) @classmethod def get_config_class(cls) -> Type[BaseProxyConfig]: @@ -92,7 +93,6 @@ class Gpt(Plugin): # Call the GPT API to get picture await self.client.set_typing(event.room_id, timeout=99999) messages = await self.history.get(event) - print(messages) response = await self._call_gpt(event.content["body"], messages) @@ -118,24 +118,26 @@ class Gpt(Plugin): "prompt": prompt } - response = requests.post("https://nexra.aryahcr.cc/api/chat/gpt", headers=headers, data=json.dumps(data)) + async with aiohttp.request("POST", "https://nexra.aryahcr.cc/api/chat/gpt", headers=headers, data=json.dumps(data)) as response: + if response.status != 200: + self.log.warning(f"Unexpected status sending request to nexra.aryahcr.cc: {response.status_code}") + return + + count = -1 + response_text = await response.text() + for i in range(len(response_text)): + if count <= -1: + if response_text[i] == "{": + count = i + else: + break - if response.status_code != 200: - self.log.warning(f"Unexpected status sending request to nexra.aryahcr.cc: {response.status_code}") - return - - count = -1 - for i in range(len(response.text)): - if count <= -1: - if response.text[i] == "{": - count = i - else: - break - response_json = json.loads(response.text[count:]) - - content = response_json['gpt'] - - return content + try: + response_json = await response.json(content_type=None) + content = response_json['gpt'] + return content + except e: + return e @command.new(name="export") async def export(self, event: MessageEvent) -> None: diff --git a/gpt/history.py b/gpt/history.py index 1ae8b24..6721a31 100644 --- a/gpt/history.py +++ b/gpt/history.py @@ -1,12 +1,14 @@ import redis.asyncio as redis -import requests +import aiohttp import json class History(): r: redis.Redis() + haste_url: "" - def __init__(self, redis_host, redis_port): + def __init__(self, redis_host, redis_port, haste_url): self.r = redis.Redis(host=redis_host, port=redis_port, db=0) + self.haste_url = haste_url def createCacheKey(self, id): return f"gpt-history-user-{id}" @@ -44,11 +46,10 @@ class History(): for i in range(0, len(history), 2): text += f"You: {history[i]['content']}\nGPT: {history[i+1]['content']}\n\n" - response = requests.post("https://haste.snrd.eu/documents", data=text) - - if response.status_code != 200: - return "Could not export the ChatGPT history! Please try again later!" - else: - haste = json.loads(response.text)['key'] - msg = "Your ChatGPT history: https://haste.snrd.eu/raw/{}".format(haste) - return msg + async with aiohttp.request("POST", self.haste_url, data=text) as response: + if response.status != 200: + return "Could not export the ChatGPT history! Please try again later!" + else: + haste = await response.json() + msg = "Your ChatGPT history: https://haste.snrd.eu/raw/{}".format(haste["key"]) + return msg diff --git a/maubot.yaml b/maubot.yaml index 9d02ec8..45ffff5 100644 --- a/maubot.yaml +++ b/maubot.yaml @@ -1,6 +1,6 @@ maubot: 0.1.0 id: sh.boehm.gpt -version: 0.0.02 +version: 0.0.04 license: MIT modules: - gpt diff --git a/sh.boehm.gpt-v0.0.4.mbp b/sh.boehm.gpt-v0.0.4.mbp new file mode 100644 index 0000000000000000000000000000000000000000..de79bf9c42f6f2fcb3327853f56884fc5f78c4d5 GIT binary patch literal 8737 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 literal 0 HcmV?d00001