SimpleChatTC:ChatSessionID through the tool call cycle
Pass chatId to tool call, and use chatId in got tool call resp, to decide as to to which chat session the async tool call resp belongs and inturn if auto submit timer should be started if auto is enabled.
This commit is contained in:
parent
13d312fe0d
commit
734beb08f5
|
|
@ -721,7 +721,7 @@ class SimpleChat {
|
||||||
return "Tool/Function call name not specified"
|
return "Tool/Function call name not specified"
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
return await tools.tool_call(toolcallid, toolname, toolargs)
|
return await tools.tool_call(this.chatId, toolcallid, toolname, toolargs)
|
||||||
} catch (/** @type {any} */error) {
|
} catch (/** @type {any} */error) {
|
||||||
return `Tool/Function call raised an exception:${error.name}:${error.message}`
|
return `Tool/Function call raised an exception:${error.name}:${error.message}`
|
||||||
}
|
}
|
||||||
|
|
@ -847,10 +847,11 @@ class MultiChatUI {
|
||||||
*/
|
*/
|
||||||
chat_show(chatId, bClear=true, bShowInfoAll=false) {
|
chat_show(chatId, bClear=true, bShowInfoAll=false) {
|
||||||
if (chatId != this.curChatId) {
|
if (chatId != this.curChatId) {
|
||||||
return
|
return false
|
||||||
}
|
}
|
||||||
let chat = this.simpleChats[this.curChatId];
|
let chat = this.simpleChats[this.curChatId];
|
||||||
chat.show(this.elDivChat, this.elInUser, bClear, bShowInfoAll)
|
chat.show(this.elDivChat, this.elInUser, bClear, bShowInfoAll)
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -897,21 +898,19 @@ class MultiChatUI {
|
||||||
})
|
})
|
||||||
|
|
||||||
// Handle messages from Tools web worker
|
// Handle messages from Tools web worker
|
||||||
tools.setup((id, name, data)=>{
|
tools.setup((cid, tcid, name, data)=>{
|
||||||
clearTimeout(this.timers.toolcallResponseTimeout)
|
clearTimeout(this.timers.toolcallResponseTimeout)
|
||||||
this.timers.toolcallResponseTimeout = undefined
|
this.timers.toolcallResponseTimeout = undefined
|
||||||
// TODO: Check for chat id in future so as to
|
let chat = this.simpleChats[cid];
|
||||||
// identify the right chat session to add the tc response to
|
chat.add(new ChatMessageEx(Roles.ToolTemp, ChatMessageEx.createToolCallResultAllInOne(tcid, name, data)))
|
||||||
// as well as to decide whether to show this chat currently or not and same with auto submit
|
if (this.chat_show(cid)) {
|
||||||
let chat = this.simpleChats[this.curChatId]; // rather we should pick chat based on tool response's chatId
|
if (gMe.tools.auto > 0) {
|
||||||
chat.add(new ChatMessageEx(Roles.ToolTemp, ChatMessageEx.createToolCallResultAllInOne(id, name, data)))
|
this.timers.toolcallResponseSubmitClick = setTimeout(()=>{
|
||||||
this.chat_show(chat.chatId) // one needs to use tool response's chatId
|
this.elBtnUser.click()
|
||||||
this.ui_reset_userinput(false)
|
}, gMe.tools.auto*this.TimePeriods.ToolCallAutoTimeUnit)
|
||||||
if (gMe.tools.auto > 0) {
|
}
|
||||||
this.timers.toolcallResponseSubmitClick = setTimeout(()=>{
|
|
||||||
this.elBtnUser.click()
|
|
||||||
}, gMe.tools.auto*this.TimePeriods.ToolCallAutoTimeUnit)
|
|
||||||
}
|
}
|
||||||
|
this.ui_reset_userinput(false)
|
||||||
})
|
})
|
||||||
|
|
||||||
this.elInUser.addEventListener("keyup", (ev)=> {
|
this.elInUser.addEventListener("keyup", (ev)=> {
|
||||||
|
|
|
||||||
|
|
@ -49,11 +49,11 @@ export function meta() {
|
||||||
/**
|
/**
|
||||||
* Setup the callback that will be called when ever message
|
* Setup the callback that will be called when ever message
|
||||||
* is recieved from the Tools Web Worker.
|
* is recieved from the Tools Web Worker.
|
||||||
* @param {(id: string, name: string, data: string) => void} cb
|
* @param {(chatId: string, toolCallId: string, name: string, data: string) => void} cb
|
||||||
*/
|
*/
|
||||||
export function setup(cb) {
|
export function setup(cb) {
|
||||||
gToolsWorker.onmessage = function (ev) {
|
gToolsWorker.onmessage = function (ev) {
|
||||||
cb(ev.data.id, ev.data.name, ev.data.data)
|
cb(ev.data.cid, ev.data.tcid, ev.data.name, ev.data.data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -62,15 +62,16 @@ export function setup(cb) {
|
||||||
* Try call the specified tool/function call.
|
* Try call the specified tool/function call.
|
||||||
* Returns undefined, if the call was placed successfully
|
* Returns undefined, if the call was placed successfully
|
||||||
* Else some appropriate error message will be returned.
|
* Else some appropriate error message will be returned.
|
||||||
|
* @param {string} chatid
|
||||||
* @param {string} toolcallid
|
* @param {string} toolcallid
|
||||||
* @param {string} toolname
|
* @param {string} toolname
|
||||||
* @param {string} toolargs
|
* @param {string} toolargs
|
||||||
*/
|
*/
|
||||||
export async function tool_call(toolcallid, toolname, toolargs) {
|
export async function tool_call(chatid, toolcallid, toolname, toolargs) {
|
||||||
for (const fn in tc_switch) {
|
for (const fn in tc_switch) {
|
||||||
if (fn == toolname) {
|
if (fn == toolname) {
|
||||||
try {
|
try {
|
||||||
tc_switch[fn]["handler"](toolcallid, fn, JSON.parse(toolargs))
|
tc_switch[fn]["handler"](chatid, toolcallid, fn, JSON.parse(toolargs))
|
||||||
return undefined
|
return undefined
|
||||||
} catch (/** @type {any} */error) {
|
} catch (/** @type {any} */error) {
|
||||||
return `Tool/Function call raised an exception:${error.name}:${error.message}`
|
return `Tool/Function call raised an exception:${error.name}:${error.message}`
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue