using Revise # remove when this package is completed using YiemAgent, GeneralUtils, JSON3, MQTTClient, Dates, UUIDs, LibPQ, DataStructures, SQLLLM using Base.Threads # ---------------------------------------------- 100 --------------------------------------------- # config = copy(JSON3.read("config.json")) instanceInternalTopic = config[:serviceInternalTopic][:mqtttopic] * "/1" client, connection = MakeConnection(config[:mqttServerInfo][:broker], config[:mqttServerInfo][:port]) receiveUserMsgChannel = Channel{Dict}(4) receiveInternalMsgChannel = Channel{Dict}(4) println(typeof(connection)) msgMeta = GeneralUtils.generate_msgMeta( "N/A", replyTopic = config[:servicetopic][:mqtttopic] # ask frontend reply to this instance_chat_topic ) # commConfig = Dict( # :mqttServerInfo=> config[:mqttServerInfo], # :receivemsg=> Dict( # :prompt=> config[:servicetopic][:mqtttopic], # topic to receive prompt i.e. frontend send msg to this topic # ), # :externalservice=> config[:externalservice], # ) function executeSQL(sql::T) where {T<:AbstractString} DBconnection = LibPQ.Connection("host=192.168.88.12 port=5432 dbname=yiem_wine_assistant user=yiem password=yiem@Postgres_0.0") result = LibPQ.execute(DBconnection, sql) close(DBconnection) return result end function text2textInstructLLM(prompt::String) msgMeta = GeneralUtils.generate_msgMeta( config[:externalservice][:text2textinstruct][:mqtttopic], senderName= "yiemagent", senderId= string(uuid4()), receiverName= "text2textinstruct", mqttBroker= config[:mqttServerInfo][:broker], mqttBrokerPort= config[:mqttServerInfo][:port], ) outgoingMsg = Dict( :msgMeta=> msgMeta, :payload=> Dict( :text=> prompt, :kwargs=> Dict( :max_tokens=> 2048, :stop=> ["<|eot_id|>"], :temperature=> 0.2, ) ) ) _response = GeneralUtils.sendReceiveMqttMsg(outgoingMsg) response = _response[:response][:text] return response end # Instantiate an agent a = YiemAgent.sommelier( text2textInstructLLM, executeSQL; name="assistant", id="testingSessionID", # agent instance id ) # function main() # userinput = "Hello, I would like a get a bottle of wine." # for i in 1:10 # response = YiemAgent.conversation(a, Dict(:text=> userinput)) # println("") # println("--> assistant response: \n", response) # println("") # println("--> user input:") # userinput = readline() # end # end # main() # """ # I'm having a graduation party this evening. I have no budget limit. # I have no idea. The party will be formal. What type of wine people usually get for this occasion? # What about sparkling Rose? # """ # response = YiemAgent.conversation(a, Dict(:text=> "newtopic",) ) # response = YiemAgent.conversation(a, Dict(:text=> "Hello, I would like a get a bottle of wine.")) # println("---> YiemAgent: ", response) # response = YiemAgent.conversation(a, Dict(:text=> "I'm having a graduation party this evening. I'll pay at most 30 bucks.")) # # input = "query=\"off dry, medium tannin, French Rosé\"" # input = "Search the database for wine type: white, country: France, sweetness level: 1" # YiemAgent.winestock(a, input) input = "query=\"medium-bodied dry white wine\"" result = YiemAgent.extractWineAttributes(a, input)