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