diff --git a/llmage/init.py b/llmage/init.py index aef56ae..7d74a80 100644 --- a/llmage/init.py +++ b/llmage/init.py @@ -3,6 +3,9 @@ from llmage.llmclient import ( inference, get_llmcatelogs, get_llms_by_catelog, +) +from llmage.messages import ( + SessionMessages, default_sysmessage, default_usrmessage, default_llmmessage @@ -18,4 +21,5 @@ def load_llmage(): env.default_sysmessage = default_sysmessage env.default_usrmessage = default_usrmessage env.default_llmmessage = default_llmmessage + env.SessageMessages = SessionMessages diff --git a/llmage/llmclient.py b/llmage/llmclient.py index 229e06a..7cfa6be 100644 --- a/llmage/llmclient.py +++ b/llmage/llmclient.py @@ -5,24 +5,6 @@ from appPublic.log import debug, exception from uapi.appapi import UAPI, sor_get_callerid, sor_get_uapi from ahserver.serverenv import get_serverenv -def default_sysmessage(): - return """{ - "role":"system", - "content":"{{content}}" - }""" - -def default_usrmessage(): - return """{ - "role":"user", - "content":"{{content}}" - }""" - -def default_llmmessage(): - return """{ - "role":"assisant", - "content":"{{content}}" - }""" - async def get_llmcatelogs(): db = DBPools() dbname = get_serverenv('get_module_dbname')('llmage') @@ -78,12 +60,8 @@ async def inference(request, env): dbname = env.get_module_dbname('llmage') db = env.DBPools() async with db.sqlorContext(dbname) as sor: - llms = await sor.R('llm', {'id':llmid}) - if len(llms) == 0: - e = Exception(f'{llmid=} not found') - exception(f'{e}\n{format_exc()}') - raise e - llm = llms[0] + llm = await get_llm(llmid) + env.update(llm) uapi = UAPI(request, env=env, sor=sor) userid = await env.get_user() f = partial(uapi.stream_linify, llm.upappid, llm.apiname, userid) diff --git a/llmage/messages.py b/llmage/messages.py new file mode 100644 index 0000000..d11662a --- /dev/null +++ b/llmage/messages.py @@ -0,0 +1,69 @@ +from appPublic.myTE import MyTemplateEngine + +def default_sysmessage(): + return """{ + "role":"system", + "content":"{{content}}" + }""" + +def default_usrmessage(): + return """{ + "role":"user", + "content":"{{prompt}}" + }""" + +def default_llmmessage(): + return """{ + "role":"assisant", + "content":"{{content}}" + }""" + +class BaseMessages: + def __init__(self, request, llmid, sys_message, usr_message, llm_message): + self.request = request + self.llmid = llmid + self.sys_message = sys_message + self.usr_message = usr_message + self.llm_message = llm_message + self.te = MyTemplateEngine([]) + + async def append_meessages(self, msg_format, **kw): + m = self.te.renders(msg_format, kw) + msgs = await self.get_messages() + msgs.append(m) + await self.set_message(msgs) + return msgs + + async def append_usr_messages(self, **kw): + return await self.append_messages(self.usr_message, **kw) + + async def append_sys_messages(self, **kw): + return await self.append_messages(self.sys_message, **kw) + + async def append_llm_messages(self, **kw): + return await self.append_messages(self.llm_message, **kw) + + async def get_messages(self): + pass + + async def set_messages(self, msgs): + pass + +class SessionMessages(BaseMessages): + async def get_messages(self): + env = self.request['run_ns'] + s = await env.get_session() + userid = await env.get_user() + mk = f'{self.llmid}_{userid}_msgs' + msgs = s[mk] + if not msgs: + msgs = [] + return msgs + + async def set_messages(self, msgs): + env = self.request['run_ns'] + s = await env.get_session() + userid = await env.get_user() + mk = f'{self.llmid}_{userid}_msgs' + s[mk] = msgs +