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