Packages
nous
0.12.3
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/eval/optimizer/strategy.ex
defmodule Nous.Eval.Optimizer.Strategy do
@moduledoc """
Behaviour for optimization strategies.
Strategies define how to explore the search space to find optimal configurations.
## Implementing a Custom Strategy
defmodule MyStrategy do
@behaviour Nous.Eval.Optimizer.Strategy
@impl true
def run(suite, search_space, metric, maximize, opts) do
# Your optimization logic here
# Return {:ok, [trial, ...]} or {:error, reason}
end
end
## Built-in Strategies
- `Nous.Eval.Optimizer.Strategies.GridSearch` - Exhaustive grid search
- `Nous.Eval.Optimizer.Strategies.Random` - Random search
- `Nous.Eval.Optimizer.Strategies.Bayesian` - Bayesian optimization (TPE-inspired)
"""
alias Nous.Eval.{Suite, Optimizer}
alias Nous.Eval.Optimizer.SearchSpace
@type trial :: Optimizer.trial()
@doc """
Run the optimization strategy.
## Parameters
* `suite` - The evaluation suite to optimize
* `search_space` - The parameter search space
* `metric` - The metric to optimize
* `maximize` - Whether to maximize (true) or minimize (false)
* `opts` - Strategy-specific options
## Returns
* `{:ok, trials}` - List of all trials run
* `{:error, reason}` - If optimization fails
"""
@callback run(
suite :: Suite.t(),
search_space :: SearchSpace.t(),
metric :: Optimizer.metric(),
maximize :: boolean(),
opts :: keyword()
) :: {:ok, [trial()]} | {:error, term()}
end