From 2f5800348f92ad87b7e4b1af0795a704523d959c Mon Sep 17 00:00:00 2001 From: narawat lamaiin Date: Thu, 18 Apr 2024 13:27:29 +0700 Subject: [PATCH] update --- src/interface.jl | 108 +++++++++++++++++++++++++++++------------------ src/type.jl | 82 ++++++++++++++++++----------------- 2 files changed, 109 insertions(+), 81 deletions(-) diff --git a/src/interface.jl b/src/interface.jl index 8cc240e..493d0ef 100644 --- a/src/interface.jl +++ b/src/interface.jl @@ -85,59 +85,83 @@ using ..type, ..util, ..llmfunction Signature\n ----- """ #TODO update document -function conversation(a::T, usermsg::String) where {T<:agent} - #TODO add "newtopic" command to delete history - - # add usermsg to a.chathistory - addNewMessage(a, "user", usermsg) +function conversation(a::T) where {T<:agent} + while true + println("---> conversation loop") + println("---> a.receiveUserMsgChannel ready = $(isready(a.receiveUserMsgChannel))") + #TODO add "newtopic" command to delete history + # check for incoming user message + if isready(a.receiveUserMsgChannel) + incomingMsg = take!(a.receiveUserMsgChannel) + @show incomingMsg + end + + + # # if new user message available + + # # if new message == "newtopic" + # #TODO add "newtopic" command to delete history - #WORKING if the last used tool is a chatbox - if a.plan[:currenttrajectory][end][:action] == "chatbox" - # usermsg -> observation and continue actor loop as planned - else # a new thinking - end + # # else + # # add usermsg to a.chathistory + # addNewMessage(a, "user", usermsg) + # #WORKING if the last used tool is a chatbox + # # if a.plan[:currenttrajectory][end][:action] == "chatbox" + # # usermsg -> observation and continue actor loop as planned + + # # else # a new thinking + # # planning with MCTS() -> best plan + # # actor loop(best plan) - - - - - - - workstate = nothing - response = nothing - - _ = addNewMessage(a, "user", usermsg) - isuseplan = isUsePlans(a) - # newinfo = extractinfo(a, usermsg) - # a.env = newinfo !== nothing ? updateEnvState(a, newinfo) : a.env - @show isuseplan - - if isuseplan # use plan before responding - if haskey(a.memory[:shortterm], "User:") == false #TODO should change role if user want to buy wine. - a.memory[:shortterm]["User:"] = usermsg - end - workstate, response = work(a) - end - - # if LLM using askbox, use returning msg form askbox as conversation response - if workstate == "askbox" || workstate == "formulatedUserResponse" - #TODO paraphrase msg so that it is human friendlier word. - else - response = chat_mistral_openorca(a) - response = split(response, "\n\n")[1] - response = split(response, "\n\n")[1] + # # end + sleep(3) end - response = removeTrailingCharacters(response) - _ = addNewMessage(a, "assistant", response) - return response + + + + + + + + + + # workstate = nothing + # response = nothing + + # _ = addNewMessage(a, "user", usermsg) + # isuseplan = isUsePlans(a) + # # newinfo = extractinfo(a, usermsg) + # # a.env = newinfo !== nothing ? updateEnvState(a, newinfo) : a.env + # @show isuseplan + + # if isuseplan # use plan before responding + # if haskey(a.memory[:shortterm], "User:") == false #TODO should change role if user want to buy wine. + # a.memory[:shortterm]["User:"] = usermsg + # end + # workstate, response = work(a) + # end + + # # if LLM using askbox, use returning msg form askbox as conversation response + # if workstate == "askbox" || workstate == "formulatedUserResponse" + # #TODO paraphrase msg so that it is human friendlier word. + # else + # response = chat_mistral_openorca(a) + # response = split(response, "\n\n")[1] + # response = split(response, "\n\n")[1] + # end + + # response = removeTrailingCharacters(response) + # _ = addNewMessage(a, "assistant", response) + + end diff --git a/src/type.jl b/src/type.jl index 9cf2fab..b24b0d2 100644 --- a/src/type.jl +++ b/src/type.jl @@ -76,7 +76,7 @@ abstract type agent end Signature\n ----- -""" #TODO update document +""" #TODO update docstring @kwdef mutable struct sommelier <: agent name::String id::String @@ -113,39 +113,41 @@ abstract type agent end msgMeta::Dict{Symbol, Any} # a template for msgMeta # put incoming message here. waiting for further processing - incomingUserMsg::Channel{Dict} = Channel{Dict}(8) # for user communication - internalMsg::Channel{Dict} = Channel{Dict}(8) # for internal communication + receiveUserMsgChannel::Channel{Dict} = Channel{Dict}(8) # for incoming user communication + receiveInternalMsgChannel::Channel{Dict} = Channel{Dict}(8) # for internal communication end function sommelier( - mqttClient, - msgMeta::Dict= GeneralUtils.generate_msgMeta("N/A"), - config::Dict = Dict( - :frontend=> Dict( - :mqtttopic=> nothing + receiveUserMsgChannel::Channel, + receiveInternalMsgChannel::Channel, + mqttClient, + msgMeta::Dict= GeneralUtils.generate_msgMeta("N/A"), + config::Dict = Dict( + :frontend=> Dict( + :mqtttopic=> nothing + ), + :internal=> Dict( + :mqtttopic=> nothing + ), + :text2text=> Dict( + :mqtttopic=> "txt2text/api/v1/prompt/gpu", + ), + ) + ; + name::String= "Assistant", + id::String= string(uuid4()), + tools::Dict= Dict( + :chatbox=> Dict( + :name => "chatbox", + :description => "Useful for when you need to communicate with the user.", + :input => "Input should be a conversation to the user.", + :output => "" , + :func => nothing, + ), ), - :internal=> Dict( - :mqtttopic=> nothing - ), - :text2text=> Dict( - :mqtttopic=> "txt2text/api/v1/prompt/gpu", - ), - ) - ; - name::String= "Assistant", - id::String= string(uuid4()), - tools::Dict= Dict( - :chatbox=> Dict( - :name => "chatbox", - :description => "Useful for when you need to communicate with the user.", - :input => "Input should be a conversation to the user.", - :output => "" , - :func => nothing, - ), - ), - maxHistoryMsg::Integer= 20, - thinkinglimit::Integer= 5, - thinkingcount::Integer= 0, + maxHistoryMsg::Integer= 20, + thinkinglimit::Integer= 5, + thinkingcount::Integer= 0, ) #NEXTVERSION publish to a.config[:configtopic] to get a config. @@ -153,15 +155,17 @@ function sommelier( #NEXTVERSION set agent according to config newAgent = sommelier( - name = name, - id = id, - config = config, - mqttClient = mqttClient, - msgMeta = msgMeta, - maxHistoryMsg = maxHistoryMsg, - tools = tools, - thinkinglimit = thinkinglimit, - thinkingcount = thinkingcount, + receiveUserMsgChannel= receiveUserMsgChannel, + receiveInternalMsgChannel= receiveInternalMsgChannel, + name= name, + id= id, + config= config, + mqttClient= mqttClient, + msgMeta= msgMeta, + maxHistoryMsg= maxHistoryMsg, + tools= tools, + thinkinglimit= thinkinglimit, + thinkingcount= thinkingcount, ) return newAgent