Mercurial Hosting > lang
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
--- 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
--- /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
--- /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
--- 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 %>
--- 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');
--- 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
--- 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