This commit is contained in:
2026-07-31 11:41:53 +07:00
parent c9a7661e93
commit 7876ff21eb
8 changed files with 1671 additions and 2168 deletions
+15 -12
View File
@@ -36,8 +36,8 @@ end
# Create agent with options
agent = Agent(Dict{Symbol, Any}(
:systemPrompt => "You are a helpful assistant",
:model => Model(...),
:thinkingLevel => THINKING_MEDIUM,
:model => Model("", "", "unknown", "unknown", "", false, String[], ModelCost(0.0, 0.0, 0.0, 0.0), 0, 0),
:thinkingLevel => THINKING_OFF,
:tools => [bash_tool, read_tool],
:steeringMode => QUEUE_ONE_AT_A_TIME,
:followUpMode => QUEUE_ONE_AT_A_TIME,
@@ -290,7 +290,7 @@ agent = Agent(Dict(:transformContext => myTransformContext))
# Hook before tool execution
function myBeforeToolCall(context, signal)
println("About to execute: $(context.tool_call.name)")
return nothing # Return block=true to prevent execution
return BeforeToolCallResult(nothing, nothing) # Return BeforeToolCallResult(true, "reason") to block
end
agent = Agent(Dict(:beforeToolCall => myBeforeToolCall))
@@ -303,8 +303,11 @@ agent = Agent(Dict(:beforeToolCall => myBeforeToolCall))
function myAfterToolCall(context, signal)
# Can modify tool result
return AfterToolCallResult(
content = context.result.content,
terminate = context.result.terminate
context.result.content,
context.result.details,
nothing,
nothing,
context.result.terminate
)
end
@@ -319,9 +322,9 @@ function myPrepareNextTurn(context, signal)
# context: PrepareNextTurnContext
# Returns AgentLoopTurnUpdate or nothing
return AgentLoopTurnUpdate(
context = context.context,
model = context.context.model, # Can change model
thinking_level = THINKING_HIGH # Can change thinking level
context.context, # context
context.context.model, # model - can change
THINKING_HIGH # thinking_level - can change
)
end
@@ -334,11 +337,11 @@ agent = Agent(Dict(:prepareNextTurn => myPrepareNextTurn))
# Check if agent is busy
if !isnothing(agent.active_run)
# Agent is processing
abort(agent) # Abort current run
abort(agent) # Abort current run (NOTE: implementation is a TODO stub)
end
# Wait for completion
wait_for_idle(agent) # Returns Promise
waitForIdle(agent) # Returns Promise
```
## Complete Example
@@ -367,7 +370,7 @@ end
prompt(agent, "What's in the current directory?")
# 4. Wait for completion
wait_for_idle(agent)
waitForIdle(agent)
# 5. Check final state
state = get_state(agent)
@@ -375,7 +378,7 @@ println("Total messages: $(length(state.messages))")
# 6. Continue with steering
steer(agent, UserMessage(...))
wait_for_idle(agent)
waitForIdle(agent)
# 7. Clean up
unsubscribe() # Stop listening