changeset 71:44bec62c49e2

split ask
author Franklin Schmidt <fschmidt@gmail.com>
date Sun, 24 Aug 2025 08:32:08 -0600
parents 4a73af8f2203
children 5d274f7a4637
files src/ai_ask.js.luan src/ai_ask1.js.luan src/ai_ask2.js.luan src/chat.html.luan src/chat.js src/lib/Chat.luan src/lib/ai/claude/Ai_chat.luan
diffstat 7 files changed, 106 insertions(+), 54 deletions(-) [+]
line wrap: on
line diff
diff -r 4a73af8f2203 -r 44bec62c49e2 src/ai_ask.js.luan
--- a/src/ai_ask.js.luan	Sat Aug 23 12:00:16 2025 -0600
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-local Luan = require "luan:Luan.luan"
-local error = Luan.error
-local Parsers = require "luan:Parsers.luan"
-local json_string = Parsers.json_string or error()
-local Io = require "luan:Io.luan"
-local Http = require "luan:http/Http.luan"
-local User = require "site:/lib/User.luan"
-local current_user = User.current or error()
-local Chat = require "site:/lib/Chat.luan"
-local get_chat_by_id = Chat.get_by_id or error()
-
-
-return function()
-	Io.stdout = Http.response.text_writer()
-	local parameters = Http.request.parameters
-	local chat = parameters.chat or error()
-	chat = get_chat_by_id(chat) or error()
-	chat.user_id == current_user().id or error()
-	local input = parameters.input or error()
-	if input == "" then
-%>
-		hideWaitingAiIcon();
-<%
-		return
-	end
-	local html = chat.ask(input)
-%>
-	updateAi(<%=json_string(html)%>);
-<%
-end
diff -r 4a73af8f2203 -r 44bec62c49e2 src/ai_ask1.js.luan
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ai_ask1.js.luan	Sun Aug 24 08:32:08 2025 -0600
@@ -0,0 +1,27 @@
+local Luan = require "luan:Luan.luan"
+local error = Luan.error
+local Parsers = require "luan:Parsers.luan"
+local json_string = Parsers.json_string or error()
+local Io = require "luan:Io.luan"
+local Http = require "luan:http/Http.luan"
+local User = require "site:/lib/User.luan"
+local current_user = User.current or error()
+local Chat = require "site:/lib/Chat.luan"
+local get_chat_by_id = Chat.get_by_id or error()
+
+
+return function()
+	Io.stdout = Http.response.text_writer()
+	local parameters = Http.request.parameters
+	local chat = parameters.chat or error()
+	chat = get_chat_by_id(chat) or error()
+	chat.user_id == current_user().id or error()
+	local input = parameters.input or error()
+	if input == "" then
+		return
+	end
+	local html = chat.ai_add(input)
+%>
+	askAi2(<%=json_string(html)%>);
+<%
+end
diff -r 4a73af8f2203 -r 44bec62c49e2 src/ai_ask2.js.luan
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ai_ask2.js.luan	Sun Aug 24 08:32:08 2025 -0600
@@ -0,0 +1,23 @@
+local Luan = require "luan:Luan.luan"
+local error = Luan.error
+local Parsers = require "luan:Parsers.luan"
+local json_string = Parsers.json_string or error()
+local Io = require "luan:Io.luan"
+local Http = require "luan:http/Http.luan"
+local User = require "site:/lib/User.luan"
+local current_user = User.current or error()
+local Chat = require "site:/lib/Chat.luan"
+local get_chat_by_id = Chat.get_by_id or error()
+
+
+return function()
+	Io.stdout = Http.response.text_writer()
+	local parameters = Http.request.parameters
+	local chat = parameters.chat or error()
+	chat = get_chat_by_id(chat) or error()
+	chat.user_id == current_user().id or error()
+	local html = chat.ai_respond()
+%>
+	updateAi(<%=json_string(html)%>);
+<%
+end
diff -r 4a73af8f2203 -r 44bec62c49e2 src/chat.html.luan
--- a/src/chat.html.luan	Sat Aug 23 12:00:16 2025 -0600
+++ b/src/chat.html.luan	Sun Aug 24 08:32:08 2025 -0600
@@ -63,7 +63,7 @@
 				<div buttons>
 					<audio controls preload=none></audio>
 					<button record onclick="toggleRecording()">Record</button>
-					<button onclick="askAi()" title="Send"><img src="/images/send.svg"></button>
+					<button onclick="askAi1()" title="Send"><img src="/images/send.svg"></button>
 				</div>
 			</div>
 <%	end %>
diff -r 4a73af8f2203 -r 44bec62c49e2 src/chat.js
--- a/src/chat.js	Sat Aug 23 12:00:16 2025 -0600
+++ b/src/chat.js	Sun Aug 24 08:32:08 2025 -0600
@@ -73,22 +73,12 @@
 	window.scrollTo(0, document.body.scrollHeight);
 }
 
-function updateAi(html) {
-	hideWaitingAiIcon();
-	document.querySelector('div[messages]').insertAdjacentHTML('beforeend',html);
-	handleChatMarkdown();
-	document.querySelector('textarea').focus();
-	scrollToEnd();
-	if( chat.autoplay )
-		playLastMessage();
-}
-
 const isMobile = 'ontouchstart' in window || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0;
 
 function textareaKey(event) {
 	if( event.keyCode===13 && !event.shiftKey && !event.ctrlKey && !isMobile ) {
 		event.preventDefault();
-		askAi();
+		askAi1();
 	}
 }
 
@@ -102,15 +92,34 @@
 	audio.src = `/tts.mp3?voice=${chat.voice}&instructions=${encodeURIComponent(chat.tts_instructions)}&text=${encodeURIComponent(textarea.value)}`;
 }
 
-function askAi() {
+function askAi1() {
 	let input = document.querySelector('textarea');
-	let url = `ai_ask.js?chat=${chat.id}&input=${encodeURIComponent(input.value)}`;
+	let url = `ai_ask1.js?chat=${chat.id}&input=${encodeURIComponent(input.value)}`;
 	ajax(url);
 	input.value = '';
 	fixChatTextarea(input);
+}
+
+function askAi2(html) {
+	document.querySelector('div[messages]').insertAdjacentHTML('beforeend',html);
+	handleChatMarkdown();
+	document.querySelector('textarea').focus();
+	scrollToEnd();
+	let url = `ai_ask2.js?chat=${chat.id}`;
+	ajax(url);
 	showWaitingAiIcon();
 }
 
+function updateAi(html) {
+	hideWaitingAiIcon();
+	document.querySelector('div[messages]').insertAdjacentHTML('beforeend',html);
+	handleChatMarkdown();
+	document.querySelector('textarea').focus();
+	scrollToEnd();
+	if( chat.autoplay )
+		playLastMessage();
+}
+
 
 function setText(text) {
 	let textarea = document.querySelector('textarea');
diff -r 4a73af8f2203 -r 44bec62c49e2 src/lib/Chat.luan
--- a/src/lib/Chat.luan	Sat Aug 23 12:00:16 2025 -0600
+++ b/src/lib/Chat.luan	Sun Aug 24 08:32:08 2025 -0600
@@ -137,9 +137,20 @@
 		Ai_chat.output_messages_html(assistant_controls(),chat.ai_thread)
 	end
 
-	function chat.ask(input)
+	function chat.ai_add(input)
 		local old_thread = chat.ai_thread
-		local ai_thread = Ai_chat.ask(old_thread,input)
+		local ai_thread = Ai_chat.add(old_thread,input)
+		run_in_transaction( function()
+			chat = chat.reload()
+			chat.ai_thread = ai_thread
+			chat.save()
+		end )
+		return `Ai_chat.output_messages_html(assistant_controls(),ai_thread,old_thread)`
+	end
+
+	function chat.ai_respond()
+		local old_thread = chat.ai_thread
+		local ai_thread = Ai_chat.respond(old_thread)
 		run_in_transaction( function()
 			chat = chat.reload()
 			chat.ai_thread = ai_thread
diff -r 4a73af8f2203 -r 44bec62c49e2 src/lib/ai/claude/Ai_chat.luan
--- a/src/lib/ai/claude/Ai_chat.luan	Sat Aug 23 12:00:16 2025 -0600
+++ b/src/lib/ai/claude/Ai_chat.luan	Sun Aug 24 08:32:08 2025 -0600
@@ -10,6 +10,7 @@
 local Parsers = require "luan:Parsers.luan"
 local json_parse = Parsers.json_parse or error()
 local json_string = Parsers.json_string or error()
+local Thread = require "luan:Thread.luan"
 local Claude = require "site:/lib/ai/claude/Claude.luan"
 local claude_chat = Claude.chat or error()
 local Logging = require "luan:logging/Logging.luan"
@@ -163,12 +164,8 @@
 	return #thread.messages > 0
 end
 
-local function ask(thread,content)
+local function ask(thread)
 	local messages = thread.messages or error
-	messages[#messages+1] = {
-		role = "user"
-		content = content
-	}
 --[=[
 	messages[#messages+1] = {
 		role = "assistant"
@@ -176,6 +173,7 @@
 hello
 ]]
 	}
+	Thread.sleep(2000)
 	if true then
 		return
 	end
@@ -208,15 +206,29 @@
 				}
 			end
 		end
-		ask(thread,response)
+		messages[#messages+1] = {
+			role = "user"
+			content = response
+		}
+		ask(thread)
 	else
 		error(stop_reason)
 	end
 end
 
-function Ai_chat.ask(thread,input)
+function Ai_chat.add(thread,input)
 	thread = json_parse(thread)
-	ask(thread,input)
+	local messages = thread.messages or error
+	messages[#messages+1] = {
+		role = "user"
+		content = input
+	}
+	return json_string(thread)
+end
+
+function Ai_chat.respond(thread)
+	thread = json_parse(thread)
+	ask(thread)
 	return json_string(thread)
 end