add method

This commit is contained in:
2023-10-09 13:53:07 +00:00
parent 354b8a33b8
commit cda177a270
2 changed files with 54 additions and 13 deletions

View File

@@ -1,7 +1,7 @@
module interface
# export
export agent, addNewMessage, clearMessage
using JSON3, DataStructures
@@ -11,7 +11,7 @@ using JSON3, DataStructures
@kwdef mutable struct agent
sessionId::Int= 1
maxConversation::Int= 10
maxUserMsg::Int= 10
""" Dict(Role=> Content) ; Role can be system, user, assistant
Example:
@@ -26,26 +26,67 @@ using JSON3, DataStructures
messages=[Dict(:role=>"system", :content=> "You are a helpful assistant."),]
end
"""
add new message to agent
# Example
```jldoctest
julia> addNewMessage(agent1, "user", "no")
````
"""
function addNewMessage(a::agent, role::String, content::String)
d = Dict(:role=> role, :content=> content)
push!(a.messages, d)
# check whether user messages exceed limit
userMsg = 0
for i in a.messages
if i[:role] == "user"
userMsg += 1
end
end
messageleft = 0
if userMsg > a.maxUserMsg # delete all conversation
clearMessage(a)
messageleft = a.maxUserMsg
else
userMsg += 1
d = Dict(:role=> role, :content=> content)
push!(a.messages, d)
messageleft = a.maxUserMsg - userMsg
end
return messageleft
end
function clearMessage(a::agent)
for i in eachindex(a.messages)
pop!(a.messages)
if length(a.messages) > 1 # system instruction will NOT be deleted
pop!(a.messages)
else
break
end
end
end
function generatePromt(a::agent,
userToken::String=" [/INST]", assistantToken=" [INST]",
systemToken="[INST]<<SYS>> content <</SYS>>")
prompt = nothing
for msg in a.messages
role = msg[:role]
content = msg[:content]
if role == "system"
prompt = replace(systemToken, "content" => content)
elseif role == "user"
prompt *= content * userToken
elseif role == "assistant"
prompt *= content * assistantToken
else
error("undefied condition role = $role")
end
return prompt
end