diff --git a/src/interface.jl b/src/interface.jl
index 8e93404..af761ee 100755
--- a/src/interface.jl
+++ b/src/interface.jl
@@ -48,6 +48,7 @@ julia> addNewMessage(agent1, "user", "Where should I go to buy snacks")
```
"""
function addNewMessage(a::T1, name::String, content::T2) where {T1<:agent, T2<:AbstractString}
+
if name ∉ a.availableRole # guard against typo
error("name is not in agent.availableRole $(@__LINE__)")
end
@@ -181,18 +182,14 @@ function chat_mistral_openorca(a::agentReflex, prompttemplate="llama3")
{longterm memory}
"
"""
-
conversation = formatLLMtext(a.messages, "llama3instruct")
-
prompt =
"""
$conversation
"""
-
- response = sendReceivePrompt(a, prompt, a.config[:text2textchat][:mqtttopic],
+ _response = sendReceivePrompt(a, prompt, a.config[:text2textchat][:mqtttopic],
timeout=180, stopword=["<|", ""])
- response = split(response, "<|")[1]
- response = split(response, "")[1]
+ response = _response
return response
end
@@ -1275,20 +1272,17 @@ function conversation(a::agentReflex, usermsg::String; attemptlimit::Int=3)
a.attemptlimit = attemptlimit
workstate = nothing
response = nothing
-
_ = addNewMessage(a, "user", usermsg)
isuseplan = isUsePlans(a)
# newinfo = extractinfo(a, usermsg)
# a.env = newinfo !== nothing ? updateEnvState(a, newinfo) : a.env
@show isuseplan
-
if isuseplan # use plan before responding
if haskey(a.memory[:shortterm], "User:") == false #TODO should change role if user want to buy wine.
a.memory[:shortterm]["User:"] = usermsg
end
workstate, response = work(a)
end
-
# if LLM using askbox, use returning msg form askbox as conversation response
if workstate == "askbox" || workstate == "formulatedUserResponse"
#TODO paraphrase msg so that it is human friendlier word.
@@ -1297,10 +1291,8 @@ function conversation(a::agentReflex, usermsg::String; attemptlimit::Int=3)
response = split(response, "\n\n")[1]
response = split(response, "\n\n")[1]
end
-
response = removeTrailingCharacters(response)
_ = addNewMessage(a, "assistant", response)
-
return response
end
diff --git a/src/type.jl b/src/type.jl
index d58c243..05827c7 100644
--- a/src/type.jl
+++ b/src/type.jl
@@ -230,7 +230,7 @@ function agentReflex(
roleSpecificInstruction = roleSpecificInstruction,
)
- systemChatMsg = Dict(:name=> "system",:text=> "You are a helpful, respectful and honest assistant.",)
+ systemChatMsg = Dict(:name=> "system", :text=> "You are a helpful, respectful and honest assistant.",)
push!(newAgent.messages, systemChatMsg)
diff --git a/src/utils.jl b/src/utils.jl
index d122cd4..aecd372 100644
--- a/src/utils.jl
+++ b/src/utils.jl
@@ -53,7 +53,6 @@ function sendReceivePrompt(a::T1, prompt::String, sendtopic::String;
max_tokens::Integer=256, timeout::Integer=120, temperature::AbstractFloat=0.2,
stopword::T2=["nostopwordyet"],
seed=nothing) where {T1<:agent, T2<:Vector{<:AbstractString}}
- println("---> 4")
# copy a.msgMeta instead of using GeneralUtils.generate_msgMeta because if I want to custom
# msgMeta for some communication I can do it during that agent instantiation and the custom
# msgMeta will effect all of the communication in that agent without effecting all agent
@@ -379,50 +378,6 @@ end
2. objective # what LLM going to do
"""
function isUsePlans(a::agentReflex)
- toollines = ""
- for (toolname, v) in a.tools
- if toolname ∉ ["chatbox"] # LLM will always use chatbox
- toolline = "$toolname is $(v[:description])\n"
- toollines *= toolline
- end
- end
-
- conversation = messagesToString(a.messages)
-
- aboutYourself =
- """
- Your name is $(a.name)
- $(a.roles[a.role])
- """
-
- prompt =
- """
- <|system|>
-
- $aboutYourself
-
-
- $toollines
-
-
- $conversation
-
-
- Your job is to decide whether you need think thoroughly or use tools in order to respond to the user.
- Use the following format:
- Thought: Do you need to think thoroughly or use tools before responding to the user?
-
-
- user: Hello!. How are you?
- assistant: The user is greeting me, I don't need to think about it.
-
-
- user: "What's tomorrow weather like?"
- assistant: I will need to use weather tools to check for tomorrow's temperature.
-
-
- <|assistant|>
- """
isuseplan = false
@show a.role
if length(a.memory[:shortterm]) != 0
@@ -432,6 +387,51 @@ function isUsePlans(a::agentReflex)
elseif a.role == :sommelier
isuseplan = true
else
+ toollines = ""
+ for (toolname, v) in a.tools
+ if toolname ∉ ["chatbox"] # LLM will always use chatbox
+ toolline = "$toolname is $(v[:description])\n"
+ toollines *= toolline
+ end
+ end
+
+ conversation = messagesToString(a.messages)
+
+ aboutYourself =
+ """
+ Your name is $(a.name)
+ $(a.roles[a.role])
+ """
+
+ prompt =
+ """
+ <|system|>
+
+ $aboutYourself
+
+
+ $toollines
+
+
+ $conversation
+
+
+ Your job is to decide whether you need think thoroughly or use tools in order to respond to the user.
+ Use the following format:
+ Thought: Do you need to think thoroughly or use tools before responding to the user?
+
+
+ user: Hello!. How are you?
+ assistant: The user is greeting me, I don't need to think about it.
+
+
+ user: "What's tomorrow weather like?"
+ assistant: I will need to use weather tools to check for tomorrow's temperature.
+
+
+ <|assistant|>
+ """
+
# if LLM mentions any tools, use Plan/Thought/Act loop
response = sendReceivePrompt(a, prompt, a.config[:text2textchat][:mqtttopic], max_tokens=64,
timeout=180, stopword=["<|", ""])
@@ -706,7 +706,7 @@ function removeTrailingCharacters(text; charTobeRemoved::AbstractVector{T}=['\n'
end
end
- return text[1:end-nouse]
+ return String(text[1:end-nouse])
end
@@ -1174,6 +1174,7 @@ function formatLLMtext(messages::Vector{Dict{Symbol, T}},
for t in messages
str *= f(t[:name], t[:text])
end
+
return str
end