134 lines
3.4 KiB
Julia
134 lines
3.4 KiB
Julia
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\""
|
|
# input = "the customer is looking for a medium-bodied, dry white wine."
|
|
result = YiemAgent.checkinventory(a, input)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|