Current section

Files

Jump to
nous lib nous run_context.ex
Raw

lib/nous/run_context.ex

defmodule Nous.RunContext do
@moduledoc """
Context passed to tools and dynamic prompts during agent execution.
The RunContext provides access to:
- Dependencies (deps) - User-provided data like database connections
- Retry count - Number of times this tool has been retried
- Usage information - Token and request counts so far
## Example with Tool
defmodule MyTools do
def search_database(ctx, query) do
# Access database from dependencies
ctx.deps.database
|> Database.search(query)
|> format_results()
end
end
# Pass deps when running agent
deps = %{database: MyApp.Database}
{:ok, result} = Agent.run(agent, "Search for users", deps: deps)
"""
alias Nous.Usage
@type t(deps) :: %__MODULE__{
deps: deps,
retry: non_neg_integer(),
usage: Usage.t()
}
@type t :: t(any())
@enforce_keys [:deps]
defstruct [:deps, retry: 0, usage: %Usage{}]
@doc """
Create a new run context with dependencies.
## Options
* `:retry` - Current retry count (default: 0)
* `:usage` - Current usage information (default: empty Usage)
## Example
deps = %{database: MyApp.Database, api_key: "secret"}
ctx = RunContext.new(deps)
# Access in tools: ctx.deps.database
"""
@spec new(deps :: any(), opts :: keyword()) :: t(any())
def new(deps, opts \\ []) do
%__MODULE__{
deps: deps,
retry: Keyword.get(opts, :retry, 0),
usage: Keyword.get(opts, :usage, Usage.new())
}
end
end