Mercurial Hosting > lang
diff src/lib/Chat.luan @ 5:a970b7a01a74
start ai
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Wed, 16 Jul 2025 15:08:14 -0600 |
parents | b1adec083e44 |
children | 025bb19b65b1 |
line wrap: on
line diff
--- a/src/lib/Chat.luan Tue Jul 08 22:15:41 2025 -0600 +++ b/src/lib/Chat.luan Wed Jul 16 15:08:14 2025 -0600 @@ -8,6 +8,8 @@ local Html = require "luan:Html.luan" local html_encode = Html.encode or error() local Db = require "site:/lib/Db.luan" +local run_in_transaction = Db.run_in_transaction or error() +local Ai = require "site:/lib/ai/Ai.luan" local Chat = {} @@ -19,7 +21,8 @@ user_id = doc.chat_user_id updated = doc.chat_updated name = doc.name - ai_key = doc.ai_key + ai_name = doc.ai_name + ai_thread = doc.ai_thread } end @@ -30,12 +33,15 @@ chat_user_id = long(chat.user_id) chat_updated = long(chat.updated) name = chat.name or error() - ai_key = chat.ai_key -- or error() + ai_name = chat.ai_name or error() + ai_thread = chat.ai_thread -- or error() } end function Chat.new(chat) chat.updated = chat.updated or time_now() + chat.ai_name = chat.ai_name or "chatgpt" + chat.ai = Ai[chat.ai_name]["Chat.luan"] or error() function chat.save() local doc = to_doc(chat) @@ -43,6 +49,10 @@ chat.id = doc.id end + function chat.reload() + return Chat.get_by_id(chat.id) or error(chat.id) + end + function chat.delete() Db.delete("id:"..chat.id) end @@ -51,6 +61,22 @@ return html_encode(chat.name) end + function chat.output_messages_html() + chat.ai.output_messages_html(chat.ai_thread) + end + + function chat.ask(input) + local ai_thread = chat.ai.ask(chat.ai_thread,input) + if chat.ai_thread ~= ai_thread then + run_in_transaction( function() + chat = chat.reload() + chat.ai_thread = ai_thread + chat.save() + end ) + end + return `chat.ai.output_messages_html(ai_thread)` + end + return chat end