using Revise, JSON, Dates, UUIDs, PrettyPrinting, LibPQ, Base64, DataFrames, DataStructures, HTTP, Base64, NATS, Base.Threads using YiemAgent, GeneralUtils, msghandler """ Debug using JSON, NATS, msghandler using NATS conn = NATS.connect("nats.yiem.cc") sub = NATS.subscribe(conn, "sommanion.debug") do msg payload = NATS.payload(msg) @info "debug" payload open("./log/error.log", "a") do io println(io, payload) end end NATS.publish(conn, "sommanion.debug", "order-123") # ---------------------------- inject this code into codebase to debug --------------------------- # try batch = someFunction(x, y, z) catch e bt = catch_backtrace() err_msg = sprint() do io showerror(io, e, bt) println(io) end agentEventSink(err_msg) end """ struct text2textInstructLLM natsConn::NATS.Connection topic::String senderID::String fileserver_url::String end function (t::text2textInstructLLM)(openai_msg::Dict{String, Any}) payloads = [("msg", openai_msg, "dictionary")] # List of tuples _, msg_envelope_json_str = msghandler.smartpack( t.topic, payloads; sender_id=t.senderID, msg_purpose="text2text", fileserver_url=t.fileserver_url) reply = NATS.request(t.natsConn, t.topic, msg_envelope_json_str, timeout=180) incoming_env_json_str = String(reply.payload) incoming_env = msghandler.smartunpack(incoming_env_json_str) _llm_response = incoming_env["payloads"][1][2] llm_response = _llm_response["choices"][1] return llm_response end struct agentEventSink natsConn::NATS.Connection topic::String senderID::String end function (aes::agentEventSink)(msg::String) NATS.publish(aes.natsConn, aes.topic, msg) end config = JSON.parsefile("./appconfig.json") agent_conn = NATS.connect(config["nats_server_info"]["url"]) #WORKING load tools text2text_llm = text2textInstructLLM(agent_conn, config["externalservice"]["servicesloadbalancer"]["nats"], "sender", config["externalservice"]["fileserver"]["url"]) debugNats = agentEventSink(agent_conn, "sommanion.debug", "sender") agent = YiemAgent.yiemAgent( text2text_llm; agentEventSink=debugNats ) msg = Dict( "role" => "user", "content" => [ Dict("type" => "text", "text" => "What's the weather in Bangkok?"), # Dict( # "type" => "image_url", # "image_url" => Dict("url" => "data:mime_type;base64,image2_base64_string") # ), ] ) push!(agent.inputChannel, msg)