Packages
nous
0.5.0
0.17.0
0.16.6
0.16.5
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.8
0.15.7
0.15.6
0.15.5
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.3
0.14.2
0.14.1
0.14.0
0.13.3
0.13.2
0.13.1
0.13.0
0.12.17
0.12.16
0.12.15
0.12.14
0.12.13
0.12.12
0.12.11
0.12.9
0.12.7
0.12.6
0.12.5
0.12.3
0.12.2
0.12.0
0.11.3
0.11.0
0.10.1
0.10.0
0.9.0
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.5.0
AI agent framework for Elixir with multi-provider LLM support
Current section
Files
Jump to
Current section
Files
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