103 lines
2.9 KiB
Julia
103 lines
2.9 KiB
Julia
using Revise # remove when this package is completed
|
|
using YiemAgent, GeneralUtils, JSON3, MQTTClient, Dates, UUIDs
|
|
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)
|
|
|
|
msgMeta = GeneralUtils.generate_msgMeta(
|
|
"N/A",
|
|
replyTopic = config[:servicetopic][:mqtttopic] # ask frontend reply to this instance_chat_topic
|
|
)
|
|
|
|
agentConfig = Dict(
|
|
:mqttServerInfo=> config[:mqttServerInfo],
|
|
:receivemsg=> Dict(
|
|
:prompt=> config[:servicetopic][:mqtttopic], # topic to receive prompt i.e. frontend send msg to this topic
|
|
:internal=> instanceInternalTopic,
|
|
),
|
|
:externalservice=> config[:externalservice],
|
|
)
|
|
|
|
# Instantiate an agent
|
|
tools=Dict( # update input format
|
|
"askbox"=> Dict(
|
|
:description => "<askbox tool description>Useful for when you need to ask the user for more context. Do not ask the user their own question.</askbox tool description>",
|
|
:input => """<input>Input is a text in JSON format.</input><input example>{\"Q1\": \"How are you doing?\", \"Q2\": \"How may I help you?\"}</input example>""",
|
|
:output => "" ,
|
|
:func => nothing,
|
|
),
|
|
# "winestock"=> Dict(
|
|
# :description => "<winestock tool description>A handy tool for searching wine in your inventory that match the user preferences.</winestock tool description>",
|
|
# :input => """<input>Input is a JSON-formatted string that contains a detailed and precise search query.</input><input example>{\"wine type\": \"rose\", \"price\": \"max 35\", \"sweetness level\": \"sweet\", \"intensity level\": \"light bodied\", \"Tannin level\": \"low\", \"Acidity level\": \"low\"}</input example>""",
|
|
# :output => """<output>Output are wines that match the search query in JSON format.""",
|
|
# :func => ChatAgent.winestock,
|
|
# ),
|
|
"finalanswer"=> Dict(
|
|
:description => "<tool description>Useful for when you are ready to recommend wines to the user.</tool description>",
|
|
:input => """<input format>{\"finalanswer\": \"some text\"}.</input format><input example>{\"finalanswer\": \"I recommend Zena Crown Vista\"}</input example>""",
|
|
:output => "" ,
|
|
:func => nothing,
|
|
),
|
|
)
|
|
|
|
a = YiemAgent.sommelier(
|
|
receiveUserMsgChannel,
|
|
receiveInternalMsgChannel,
|
|
agentConfig,
|
|
name= "assistant",
|
|
id= "testingSessionID", # agent instance id
|
|
tools=tools,
|
|
)
|
|
|
|
response = YiemAgent.conversation(a, Dict(:text=> "Hello, I would like a get a bottle of wine",) )
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"It will be Thai dishes."
|
|
"I like medium-bodied with low tannin."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|