53 lines
2.0 KiB
Julia
53 lines
2.0 KiB
Julia
"""
|
|
Execute the getWeather tool.
|
|
|
|
# Arguments
|
|
- `toolCallId::String`: Unique identifier for this tool call
|
|
- `args::Dict{String,Any}`: Parsed arguments from the LLM
|
|
- `signal::Union{Nothing,abortSignal}`: Optional abort signal
|
|
- `onPartialResult::Function`: Callback for streaming partial results
|
|
|
|
# Returns
|
|
- `agentToolResult`: Result content with weather data
|
|
"""
|
|
function executeTool(toolCallId::String, args::Dict{String,Any}, signal::Union{Nothing,abortSignal}, onPartialResult::Function)::agentToolResult
|
|
city = get(args, "city", "")
|
|
units = get(args, "units", "celsius")
|
|
|
|
# Simulate weather fetch — replace with actual API call
|
|
# You can call onPartialResult() here for streaming progress updates:
|
|
# onPartialResult(Dict("status" => "Fetching weather data..."))
|
|
# onPartialResult(Dict("status" => "Processing..."))
|
|
|
|
temp = units == "fahrenheit" ? "72" : "22"
|
|
unit_symbol = units == "celsius" ? "°C" : "°F"
|
|
|
|
return agentToolResult(
|
|
[textContent("Weather in $(city): Sunny, $(temp)$(unit_symbol)")],
|
|
Dict{Any,Any}(), nothing, false
|
|
)
|
|
end
|
|
|
|
"""
|
|
Define and return the getWeather agentTool.
|
|
"""
|
|
function getTool()::agentTool
|
|
return agentTool(
|
|
name = "getWeather",
|
|
label = "Weather Lookup",
|
|
description = "Fetch current weather and forecast for a given city.",
|
|
inputSchema = Dict{String,Any}(
|
|
"type" => "object",
|
|
"properties" => Dict(
|
|
"city" => Dict("type" => "string", "description" => "City and country, e.g., 'San Francisco, CA' or 'Tokyo, Japan'"),
|
|
"units" => Dict("type" => "string", "enum" => ["celsius", "fahrenheit"], "default" => "celsius", "description" => "Temperature scale")
|
|
),
|
|
"required" => ["city"]
|
|
),
|
|
execute = executeTool, # reference the function defined above
|
|
prepareArguments = nothing,
|
|
validateRequiredArgs = nothing,
|
|
parallelToolExecute = false
|
|
)
|
|
end
|