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 joining a graduation party this evening. I have unlimited budget and I'm ok with wines in all price range. I want a bottle of full bodied, dry white wine. Well, it is a small casual party with close friends and no food serving. I'm open to suggestion since I have no specific idea about wine. """ # 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 = "French dry white wines with medium body" # input = "query=\"medium-bodied dry white wine\"" # # input = "the customer is looking for a medium-bodied, dry white wine." # result = YiemAgent.checkinventory(a, input)