add: 添加ollama调用AI chat逻辑
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
import re
|
import re
|
||||||
|
|
||||||
from typing import Type
|
from typing import Type
|
||||||
from maubot.handlers import event
|
from maubot.handlers import command, event
|
||||||
from maubot import Plugin, MessageEvent
|
from maubot import Plugin, MessageEvent
|
||||||
from mautrix.types import Format, TextMessageEventContent, EventType, MessageType, RelationType
|
from mautrix.types import Format, TextMessageEventContent, EventType, MessageType, RelationType
|
||||||
from mautrix.util import markdown
|
from mautrix.util import markdown
|
||||||
@@ -15,6 +15,7 @@ from maubot_llmplus.thrid_platform import OpenAi, Anthropic
|
|||||||
配置文件加载
|
配置文件加载
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
class Config(BaseProxyConfig):
|
class Config(BaseProxyConfig):
|
||||||
def do_update(self, helper: ConfigUpdateHelper) -> None:
|
def do_update(self, helper: ConfigUpdateHelper) -> None:
|
||||||
helper.copy("allowed_users")
|
helper.copy("allowed_users")
|
||||||
@@ -28,7 +29,6 @@ class Config(BaseProxyConfig):
|
|||||||
|
|
||||||
|
|
||||||
class AiBotPlugin(Plugin):
|
class AiBotPlugin(Plugin):
|
||||||
|
|
||||||
name: str
|
name: str
|
||||||
|
|
||||||
async def start(self) -> None:
|
async def start(self) -> None:
|
||||||
@@ -105,19 +105,18 @@ class AiBotPlugin(Plugin):
|
|||||||
if parent_event.sender == self.client.mxid:
|
if parent_event.sender == self.client.mxid:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
@event.on(EventType.ROOM_MESSAGE)
|
@event.on(EventType.ROOM_MESSAGE)
|
||||||
async def on_message(self, event: MessageEvent) -> None:
|
async def on_message(self, event: MessageEvent) -> None:
|
||||||
if not await self.should_respond(event):
|
if not await self.should_respond(event):
|
||||||
return
|
return
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.log.debug("开始发送消息")
|
|
||||||
await event.mark_read()
|
await event.mark_read()
|
||||||
await self.client.set_typing(event.room_id, timeout=99999)
|
await self.client.set_typing(event.room_id, timeout=99999)
|
||||||
platform = self.get_ai_platform()
|
platform = self.get_ai_platform()
|
||||||
chat_completion = await platform.create_chat_completion(self, event)
|
chat_completion = await platform.create_chat_completion(self, event)
|
||||||
self.log.debug(f"发送结果 {chat_completion.message}, {chat_completion.model}, {chat_completion.finish_reason}")
|
self.log.debug(
|
||||||
|
f"发送结果 {chat_completion.message}, {chat_completion.model}, {chat_completion.finish_reason}")
|
||||||
# ai gpt调用
|
# ai gpt调用
|
||||||
# 关闭typing提示
|
# 关闭typing提示
|
||||||
await self.client.set_typing(event.room_id, timeout=0)
|
await self.client.set_typing(event.room_id, timeout=0)
|
||||||
@@ -126,7 +125,6 @@ class AiBotPlugin(Plugin):
|
|||||||
response = TextMessageEventContent(msgtype=MessageType.TEXT, body=resp_content, format=Format.HTML,
|
response = TextMessageEventContent(msgtype=MessageType.TEXT, body=resp_content, format=Format.HTML,
|
||||||
formatted_body=markdown.render(resp_content))
|
formatted_body=markdown.render(resp_content))
|
||||||
await event.respond(response, in_thread=self.config['reply_in_thread'])
|
await event.respond(response, in_thread=self.config['reply_in_thread'])
|
||||||
self.log.debug("发送结束")
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.log.exception(f"Something went wrong: {e}")
|
self.log.exception(f"Something went wrong: {e}")
|
||||||
await event.respond(f"Something went wrong: {e}")
|
await event.respond(f"Something went wrong: {e}")
|
||||||
|
|||||||
@@ -25,9 +25,6 @@ class Ollama(Platform):
|
|||||||
endpoint = f"{self.url}/api/chat"
|
endpoint = f"{self.url}/api/chat"
|
||||||
req_body = {'model': self.model, 'messages': full_context, 'stream': False}
|
req_body = {'model': self.model, 'messages': full_context, 'stream': False}
|
||||||
headers = {'Content-Type': 'application/json'}
|
headers = {'Content-Type': 'application/json'}
|
||||||
if self.api_key is not None:
|
|
||||||
headers['Authorization'] = self.api_key
|
|
||||||
plugin.log.debug(f"{json.dumps(req_body)}")
|
|
||||||
async with self.http.post(endpoint, headers=headers, json=req_body) as response:
|
async with self.http.post(endpoint, headers=headers, json=req_body) as response:
|
||||||
# plugin.log.debug(f"响应内容:{response.status}, {await response.json()}")
|
# plugin.log.debug(f"响应内容:{response.status}, {await response.json()}")
|
||||||
if response.status != 200:
|
if response.status != 200:
|
||||||
@@ -36,8 +33,6 @@ class Ollama(Platform):
|
|||||||
finish_reason=f"http status {response.status}",
|
finish_reason=f"http status {response.status}",
|
||||||
model=None
|
model=None
|
||||||
)
|
)
|
||||||
text = await response.text()
|
|
||||||
plugin.log.debug(f"解析后的响应内容: {text}")
|
|
||||||
response_json = await response.json()
|
response_json = await response.json()
|
||||||
return ChatCompletion(
|
return ChatCompletion(
|
||||||
message=response_json['message'],
|
message=response_json['message'],
|
||||||
|
|||||||
Reference in New Issue
Block a user