add method
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user