update
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
module interface
|
module interface
|
||||||
|
|
||||||
export addNewMessage, conversation, decisionMaker, evaluator, reflector, generatechat,
|
export addNewMessage, conversation, decisionMaker, evaluator, reflector, generatechat,
|
||||||
generalconversation
|
generalconversation, detectWineryName
|
||||||
|
|
||||||
using JSON3, DataStructures, Dates, UUIDs, HTTP, Random, PrettyPrinting, Serialization
|
using JSON3, DataStructures, Dates, UUIDs, HTTP, Random, PrettyPrinting, Serialization
|
||||||
using GeneralUtils
|
using GeneralUtils
|
||||||
@@ -169,7 +169,7 @@ function decisionMaker(a::T; recent::Integer=5)::Dict{Symbol,Any} where {T<:agen
|
|||||||
Your Q&A: the question and answer you have asked yourself
|
Your Q&A: the question and answer you have asked yourself
|
||||||
|
|
||||||
You must follow the following guidelines:
|
You must follow the following guidelines:
|
||||||
- Generally speaking, your inventory has some wines from France, the United States, Australia, Spain, and Italy, but you won't know which wines your store carries until you check your inventory.
|
- Generally speaking, your inventory has some wines from France, the United States, Australia, Spain, and Italy, but you won't know exactly until you check your inventory.
|
||||||
- All wines in your inventory are always in stock.
|
- All wines in your inventory are always in stock.
|
||||||
- If the user interrupts, prioritize the user
|
- If the user interrupts, prioritize the user
|
||||||
- Do not ask the user about wine's flavor e.g. floral, citrusy, nutty or some thing similar as these terms cannot be used to search the database.
|
- Do not ask the user about wine's flavor e.g. floral, citrusy, nutty or some thing similar as these terms cannot be used to search the database.
|
||||||
@@ -217,6 +217,7 @@ function decisionMaker(a::T; recent::Integer=5)::Dict{Symbol,Any} where {T<:agen
|
|||||||
winenames = df[:, :wine_name]
|
winenames = df[:, :wine_name]
|
||||||
for winename in winenames
|
for winename in winenames
|
||||||
if !occursin(winename, chathistory)
|
if !occursin(winename, chathistory)
|
||||||
|
println("\n~~~ Yiem decisionMaker() found wines from DB ", @__FILE__, " ", @__LINE__)
|
||||||
return Dict(:action_name=> "PRESENTBOX",
|
return Dict(:action_name=> "PRESENTBOX",
|
||||||
:action_input=> """
|
:action_input=> """
|
||||||
1) Provide detailed introductions of the wines you just found to help the user make an informed choice.
|
1) Provide detailed introductions of the wines you just found to help the user make an informed choice.
|
||||||
@@ -817,7 +818,7 @@ function think(a::T)::NamedTuple{(:actionname, :result),Tuple{String,String}} wh
|
|||||||
end
|
end
|
||||||
|
|
||||||
elseif actionname == "CHECKINVENTORY"
|
elseif actionname == "CHECKINVENTORY"
|
||||||
if haskey(a.memory[:shortmem], :available_wine)
|
if haskey(a.memory[:shortmem], :available_wine) # store wines in dataframe format
|
||||||
df = a.memory[:shortmem][:available_wine]
|
df = a.memory[:shortmem][:available_wine]
|
||||||
a.memory[:shortmem][:available_wine] = vcat(df, rawresponse)
|
a.memory[:shortmem][:available_wine] = vcat(df, rawresponse)
|
||||||
elseif rawresponse !== nothing
|
elseif rawresponse !== nothing
|
||||||
@@ -896,13 +897,16 @@ function generatechat(a::sommelier, thought::T) where {T<:AbstractString}
|
|||||||
You should only respond in format as described below:
|
You should only respond in format as described below:
|
||||||
Chat: ...
|
Chat: ...
|
||||||
|
|
||||||
|
Here are some examples of response format:
|
||||||
|
Chat: "I see. Let me think about it. I'll get back to you with my recommendation."
|
||||||
|
|
||||||
Let's begin!
|
Let's begin!
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# a.memory[:shortmem][:available_wine] is a dataframe.
|
# a.memory[:shortmem][:available_wine] is a dataframe.
|
||||||
context =
|
context =
|
||||||
if haskey(a.memory[:shortmem], :available_wine)
|
if haskey(a.memory[:shortmem], :available_wine)
|
||||||
"Available wine $(GeneralUtils.dfToString(a.memory[:shortmem][:available_wine]))"
|
"Available wines $(GeneralUtils.dfToString(a.memory[:shortmem][:available_wine]))"
|
||||||
else
|
else
|
||||||
"None"
|
"None"
|
||||||
end
|
end
|
||||||
@@ -932,7 +936,15 @@ function generatechat(a::sommelier, thought::T) where {T<:AbstractString}
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
try
|
try
|
||||||
response = a.func[:text2textInstructLLM](prompt)
|
response_1 = a.func[:text2textInstructLLM](prompt)
|
||||||
|
# sometime the model response like this "here's how I would respond: ..."
|
||||||
|
if occursin("respond:", response_1)
|
||||||
|
errornote = "You don't need to intro your response"
|
||||||
|
error("generatechat() response contain : ", @__FILE__, " ", @__LINE__)
|
||||||
|
end
|
||||||
|
response_2 = replace(response_1, '*' => "")
|
||||||
|
response_3 = replace(response_2, '$' => "USD")
|
||||||
|
response = replace(response_3, '`' => "")
|
||||||
responsedict = GeneralUtils.textToDict(response, ["Chat"],
|
responsedict = GeneralUtils.textToDict(response, ["Chat"],
|
||||||
rightmarker=":", symbolkey=true, lowercasekey=true)
|
rightmarker=":", symbolkey=true, lowercasekey=true)
|
||||||
|
|
||||||
@@ -1325,6 +1337,9 @@ function detectWineryName(a, text)
|
|||||||
At each round of conversation, you will be given the situation:
|
At each round of conversation, you will be given the situation:
|
||||||
Text: a text describing the situation.
|
Text: a text describing the situation.
|
||||||
|
|
||||||
|
Tips:
|
||||||
|
- Winery usually contains Château, Chateau, Domaine, Côte, Cote, St. de, or a combination of these words.
|
||||||
|
|
||||||
You should then respond to the user with:
|
You should then respond to the user with:
|
||||||
Winery_names: A list of winery names mentioned in the text or "None" if no winery name is mentioned.
|
Winery_names: A list of winery names mentioned in the text or "None" if no winery name is mentioned.
|
||||||
|
|
||||||
@@ -1332,7 +1347,7 @@ function detectWineryName(a, text)
|
|||||||
Winery_names: ...
|
Winery_names: ...
|
||||||
|
|
||||||
Here are some examples:
|
Here are some examples:
|
||||||
Winery_names: Domaine Courbis, Chateau Lafite Rothschild, Matarromera Domaine Roulot
|
Winery_names: Domaine Courbis, Chateau Lafite Rothschild, Matarromera Domaine Roulot, Château
|
||||||
|
|
||||||
Let's begin!
|
Let's begin!
|
||||||
"""
|
"""
|
||||||
|
|||||||
Reference in New Issue
Block a user