103 lines
3.1 KiB
Julia
103 lines
3.1 KiB
Julia
module interface
|
|
|
|
export add_new_message
|
|
|
|
using JSON3, DataStructures, Dates, UUIDs, HTTP, Random
|
|
using GeneralUtils
|
|
using ..type, ..util, ..llmfunction
|
|
|
|
# ------------------------------------------------------------------------------------------------ #
|
|
# pythoncall setting #
|
|
# ------------------------------------------------------------------------------------------------ #
|
|
# Ref: https://github.com/JuliaPy/PythonCall.jl/issues/252
|
|
# by setting the following variables, PythonCall.jl will use:
|
|
# 1. system's python and packages installed by system (via apt install)
|
|
# or 2. conda python and packages installed by conda
|
|
# if these setting are not set (comment out), PythonCall will use its own python and packages that
|
|
# installed by CondaPkg.jl (from env_preparation.jl)
|
|
# ENV["JULIA_CONDAPKG_BACKEND"] = "Null" # set condapkg backend = none
|
|
# systemPython = split(read(`which python`, String), "\n")[1] # system's python path
|
|
# ENV["JULIA_PYTHONCALL_EXE"] = systemPython # find python location with $> which python ex. raw"/root/conda/bin/python"
|
|
|
|
# using PythonCall
|
|
# const py_agents = PythonCall.pynew()
|
|
# const py_llms = PythonCall.pynew()
|
|
# function __init__()
|
|
# # PythonCall.pycopy!(py_cv2, pyimport("cv2"))
|
|
|
|
# # equivalent to from urllib.request import urlopen in python
|
|
# PythonCall.pycopy!(py_agents, pyimport("langchain.agents"))
|
|
# PythonCall.pycopy!(py_llms, pyimport("langchain.llms"))
|
|
# end
|
|
|
|
# ---------------------------------------------- 100 --------------------------------------------- #
|
|
|
|
|
|
|
|
""" Add new message to agent.
|
|
|
|
Arguments\n
|
|
-----
|
|
a::agent
|
|
an agent
|
|
role::String
|
|
message sender role i.e. system, user or assistant
|
|
text::String
|
|
message text
|
|
|
|
Return\n
|
|
-----
|
|
nothing
|
|
|
|
Example\n
|
|
-----
|
|
```jldoctest
|
|
julia> using YiemAgent, MQTTClient, GeneralUtils
|
|
julia> client, connection = MakeConnection("test.mosquitto.org", 1883)
|
|
julia> connect(client, connection)
|
|
julia> msgMeta = GeneralUtils.generate_msgMeta("testtopic")
|
|
julia> agentConfig = Dict(
|
|
:receiveprompt=>Dict(
|
|
:mqtttopic=> "testtopic/receive",
|
|
),
|
|
:receiveinternal=>Dict(
|
|
:mqtttopic=> "testtopic/internal",
|
|
),
|
|
:text2text=>Dict(
|
|
:mqtttopic=> "testtopic/text2text",
|
|
),
|
|
)
|
|
julia> a = YiemAgent.sommelier(
|
|
client,
|
|
msgMeta,
|
|
agentConfig,
|
|
)
|
|
julia> YiemAgent.add_new_message(a, "user", "hello")
|
|
```
|
|
|
|
Signature\n
|
|
-----
|
|
"""
|
|
function add_new_message(a::T1, role::String, text::T2;
|
|
maximumMsg::Integer=20) where {T1<:agent, T2<:AbstractString}
|
|
if role ∉ ["system", "user", "assistant"] # guard against typo
|
|
error("role is not in agent.availableRole $(@__LINE__)")
|
|
end
|
|
|
|
#TODO summarize the oldest 10 message
|
|
if length(a.chathistory) > maximumMsg
|
|
summarize(a.chathistory)
|
|
else
|
|
d = Dict(:role=> role, :text=> text, :timestamp=> Dates.now())
|
|
push!(a.chathistory, d)
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
end # module interface |