diff --git a/src/interface.jl b/src/interface.jl index bb06717..d25ebb5 100644 --- a/src/interface.jl +++ b/src/interface.jl @@ -2,7 +2,7 @@ module interface export addNewMessage, conversation -using JSON3, DataStructures, Dates, UUIDs, HTTP, Random +using JSON3, DataStructures, Dates, UUIDs, HTTP, Random, MQTTClient using GeneralUtils using ..type, ..util, ..llmfunction @@ -89,18 +89,45 @@ 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) - println("---> success 1") incomingMsg = take!(a.receiveUserMsgChannel) - println("---> success 2") - @show incomingMsg + incomingPayload = incomingMsg[:payload] + if incomingPayload[:text] == "newtopic" + clearhistory(a) + @show incomingMsg + msgMeta = deepcopy(a.msgMeta) + msgMeta[:sendTopic] = incomingMsg[:msgMeta][:replyTopic] + msgMeta[:senderName] = "agent-backend" + msgMeta[:senderId] = a.id + msgMeta[:receiverName] = "agent-frontend" + msgMeta[:receiverId] = incomingMsg[:msgMeta][:senderId] + msgMeta[:replyTopic] = a.config[:receivemsg][:prompt] + msgMeta[:msgId] = string(uuid4()) + msgMeta[:replyToMsgId] = incomingMsg[:msgMeta][:msgId] + + outgoingMsg = Dict( + :msgMeta=> msgMeta, + :payload=> Dict( + :name=> a.name, # will be shown in frontend as agent name + :text => "Okay. What shall we talk about?", + ) + ) + client, connection = MakeConnection(a.config[:mqttinfo][:broker], + a.config[:mqttinfo][:port]) + connect(client, connection) + + @show outgoingMsg + publish(client, outgoingMsg[:msgMeta][:sendTopic], + JSON3.write(outgoingMsg)) + disconnect(client) + println("published") + else + + end end - # # if new user message available - # # if new message == "newtopic" # #TODO add "newtopic" command to delete history diff --git a/src/type.jl b/src/type.jl index b24b0d2..f296d17 100644 --- a/src/type.jl +++ b/src/type.jl @@ -109,7 +109,6 @@ abstract type agent end ) # communication - mqttClient::Any= nothing # store mqtt client for use in various internal functions msgMeta::Dict{Symbol, Any} # a template for msgMeta # put incoming message here. waiting for further processing @@ -120,7 +119,6 @@ end function sommelier( receiveUserMsgChannel::Channel, receiveInternalMsgChannel::Channel, - mqttClient, msgMeta::Dict= GeneralUtils.generate_msgMeta("N/A"), config::Dict = Dict( :frontend=> Dict( @@ -160,7 +158,6 @@ function sommelier( name= name, id= id, config= config, - mqttClient= mqttClient, msgMeta= msgMeta, maxHistoryMsg= maxHistoryMsg, tools= tools,