This commit is contained in:
youremail@yourdomain.com
2023-12-27 11:36:11 +00:00
parent a593d4994c
commit 66fe324de5
2 changed files with 39 additions and 19 deletions

View File

@@ -185,8 +185,8 @@ function planner_mistral_openorca(a::agentReflex)
"""
<|system|>
$(a.roles[a.role])
The required info you need for wine recommendation:
- type of food: ask the user
Required info you need for wine recommendation:
- food that will be served with wine: ask the user
- occasion: ask the user
- type of wine (Rose, White, Red and Sparkling): ask the user
- user's personal taste of wine characteristic: ask the user
@@ -314,12 +314,14 @@ function actor_mistral_openorca(a::agentReflex, taskrecap="")
"""
#BUG BIG output from winestock cause recap() to fail.
#BUG2 LLM repeat winestock search without recommending wine
toolslist = []
toolnames = ""
toollines = ""
for (toolname, v) in a.tools
toolline = "$toolname: $(v[:description]) $(v[:input]) $(v[:output])\n"
toollines *= toolline
toolnames *= "$toolname, "
push!(toolslist, toolname)
end
# shorttermMemory = dictToString(a.memory[:shortterm], skiplist=["user:"])
@@ -336,11 +338,11 @@ function actor_mistral_openorca(a::agentReflex, taskrecap="")
start = "Thought"
aware = ""
if taskrecap != ""
if length(a.memory[:shortterm]) > 2 # must have User:, Plan:, Thought:, Act:, Actinput:
start = "Self-awareness"
# aware = "Self-awareness: based on the recap, assess your progress against the plan then identify areas where you need to address."
# aware = "Self-awareness: based on the recap and the plan, state your current understanding of the matter in details then identify areas where you need to address."
aware = "Self-awareness: based on earlier conversation with the user, check your progress against the plan then assess the current situation to identify tasks that you need to address."
aware = "Self-awareness: based on earlier conversation with the user, check your progress against the plan then assess the current situation to identify areas where you already achieved and areas where you need to addresss. (focus on your actions and their results)"
end
winestockResult = ""
@@ -366,8 +368,8 @@ function actor_mistral_openorca(a::agentReflex, taskrecap="")
<Your job>
Use the following format:
$aware
Thought: based on the plan and self-awareness, What to do? (P.S.1 pay attention to correct numeral calculation and commonsense.)
Act: an action to take, must be one of [{toolnames}]
Thought: based on self-awareness and the plan, What to do? (pay attention to correct numeral calculation and commonsense and do one thing at a time.)
Act: an action you intend to take based on your thought, must be one of [{toolnames}]
Actinput: your input to the action based on your thought (pay attention to the tool's input)
Obs: observed result of the action
</Your job>
@@ -428,8 +430,16 @@ function actor_mistral_openorca(a::agentReflex, taskrecap="")
@show iskey_Thought = haskey(chunkedtext, "Thought $latestTask:")
@show iskey_Act = haskey(chunkedtext, "Act $latestTask:")
@show iskey_Actinput = haskey(chunkedtext, "Actinput $latestTask:")
istoolnameValid = false
for i in toolslist
if occursin(i, chunkedtext["Act $latestTask:"])
istoolnameValid = true
break
end
end
if iskey_Thought && iskey_Act && iskey_Actinput
if chunkedtext["Thought $latestTask:"] != " " && chunkedtext["Act $latestTask:"] != " " &&
if length(chunkedtext["Thought $latestTask:"]) > 5 && istoolnameValid &&
length(chunkedtext["Actinput $latestTask:"]) > 5
break
end
@@ -705,6 +715,7 @@ function conversation(a::agentReflex, usermsg::String; attemptlimit::Int=3)
@show isuseplan
if isuseplan # use plan before responding
a.memory[:shortterm]["User:"] = usermsg
workstate, response = work(a)
end
@@ -714,6 +725,7 @@ function conversation(a::agentReflex, usermsg::String; attemptlimit::Int=3)
else
response = chat_mistral_openorca(a)
response = split(response, "\n\n")[1]
response = split(response, "\n\n")[1]
end
response = removeTrailingCharacters(response)
@@ -731,7 +743,7 @@ function work(a::agentReflex)
response = nothing
# user answering LLM -> Obs
if length(a.memory[:shortterm]) != 0
if length(a.memory[:shortterm]) > 1
latestTask = shortMemLatestTask(a.memory[:shortterm])
if haskey(a.memory[:shortterm], "Act $latestTask:")
if occursin("chatbox", a.memory[:shortterm]["Act $latestTask:"])
@@ -766,7 +778,7 @@ function work(a::agentReflex)
response = msgToUser
workstate = actorstate
break
elseif actorstate == "all tasks done"
elseif actorstate == "formulateFinalResponse"
println("all tasks done")
response = formulateUserresponse(a)
@@ -859,16 +871,16 @@ function actor(a::agentReflex)
while true # Actor loop
# check whether the current task is completed, skip evaluation if memory has only "Plan 1:"
taskrecap = ""
if length(keys(a.memory[:shortterm])) != 1
taskrecap = recap(a)
end
println("")
@show taskrecap
# taskrecap = ""
# if length(keys(a.memory[:shortterm])) != 1
# taskrecap = recap(a)
# end
# println("")
# @show taskrecap
latestTask = shortMemLatestTask(a.memory[:shortterm]) +1
println(">>> working")
# work
toolname, toolinput, chunkedtext = actor_mistral_openorca(a, taskrecap)
toolname, toolinput, chunkedtext = actor_mistral_openorca(a)
println("")
@show toolname
@show toolinput
@@ -881,8 +893,10 @@ function actor(a::agentReflex)
msgToUser = toolinput
actorState = toolname
break
elseif toolname == "noaction"
elseif toolname == "recommendwine" #WORKING
println(">>> already done")
actorState = "formulateFinalResponse"
break
else # function call
f = a.tools[toolname][:func]
toolresult = f(a, toolinput)
@@ -936,7 +950,7 @@ function writeEvaluationGuideline(a::agentReflex)
wikisearch: Useful for when you need to search an encyclopedia Input is keywords and not a question.
Your work:
$(a.memory[:shortterm]["Objective:"])
$(a.memory[:shortterm]["User:"])
Your job are:
1. Write an evaluation guideline for your work in order to be able to evaluate your response.