Files
YiemAgent/src/type.jl
T
2026-08-01 17:56:16 +07:00

190 lines
4.8 KiB
Julia

module type
export agent, sommelier, companion, virtualcustomer, agentContext
using Dates, UUIDs, DataStructures, JSON, NATS
using GeneralUtils
# ---------------------------------------------- 100 --------------------------------------------- #
# ============================================================================
# Message types
# ============================================================================
abstract type agentMessage end
struct userMessage <: agentMessage
role::String
content::Vector{messageContent}
timestamp::Timestamp
end
struct assistantMessage <: agentMessage
role::String
content::Vector{messageContent}
api::String
provider::String
model::String
usage::Usage
stop_reason::String
error_message::Union{String, Nothing}
timestamp::Timestamp
end
struct toolResultMessage <: agentMessage
role::String
tool_call_id::String
tool_name::String
content::Vector{messageContent}
details::Any
usage::Union{Usage, Nothing}
added_tool_names::Union{Vector{String}, Nothing}
is_error::Bool
timestamp::Timestamp
end
# ============================================================================
# Message content types
# ============================================================================
abstract type messageContent end
struct textContent <: messageContent
text::String
end
struct imageContent <: messageContent
data::String
mime_type::String
end
# ============================================================================
# Tool types
# ============================================================================
struct agentTool{TParameters, TDetails}
name::String
label::String
description::String
parameters::TParameters
execute::Function
prepare_arguments::Union{Function, Nothing}
execution_mode::Union{ToolExecutionMode, Nothing}
end
# ============================================================================
# Agent context
# ============================================================================
struct agentContext
system_prompt::String
messages::Vector{agentMessage}
tools::Union{Vector{agentTool}, Nothing}
end
# ============================================================================
# Assistant message event types
# ============================================================================
abstract type assistantMessageEvent end
struct startEvent <: assistantMessageEvent
partial::assistantMessage
end
struct textStartEvent <: assistantMessageEvent
content_index::Int64
partial::assistantMessage
end
struct textDeltaEvent <: assistantMessageEvent
content_index::Int64
delta::String
partial::assistantMessage
end
struct textEndEvent <: assistantMessageEvent
content_index::Int64
content::String
partial::assistantMessage
end
struct doneEvent <: assistantMessageEvent
reason::String
usage::Usage
message::assistantMessage
end
struct errorEvent <: assistantMessageEvent
reason::String
error_message::Union{String, Nothing}
usage::Usage
error::assistantMessage
end
# ============================================================================
# Agent state
# ============================================================================
mutable struct agentState
system_prompt::String
model::Model
thinking_level::ThinkingLevel
tools::Vector{agentTool}
messages::Vector{agentMessage}
is_streaming::Bool
streaming_message::Union{agentMessage, Nothing}
pending_tool_calls::Set{String}
error_message::Union{String, Nothing}
function agentState(
system_prompt::String="",
model::Model=Model("", "", "unknown", "unknown", "", false, String[], ModelCost(0.0, 0.0, 0.0, 0.0), 0, 0),
thinking_level::ThinkingLevel=THINKING_OFF,
tools::Vector{agentTool}=agentTool[],
messages::Vector{agentMessage}=agentMessage[],
)
new(
system_prompt,
model,
thinking_level,
copy(tools),
copy(messages),
false,
nothing,
Set{String}(),
nothing,
)
end
end
# ============================================================================
# Tool call types
# ============================================================================
struct toolCall
type::String
id::String
name::String
arguments::Dict{String, Any}
partial_json::Union{String, Nothing}
end
# ============================================================================
# Next turn context
# ============================================================================
struct nextTurnContext
message::assistantMessage
tool_results::Vector{toolResultMessage}
context::agentContext
new_messages::Vector{agentMessage}
end
end # module type