Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 9 additions & 7 deletions docs/docs/_generated/model_aliases_google.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
| Model Alias | Maps to | Model Alias | Maps to |
| --- | --- | --- | --- |
| `gemini` | `gemini-3.1-pro-preview` | `gemini2` | `gemini-2.0-flash` |
| `gemini-2.0-flash` | `gemini-2.0-flash` | `gemini25` | `gemini-2.5-flash` |
| `gemini-2.5-flash` | `gemini-2.5-flash` | `gemini25pro` | `gemini-2.5-pro` |
| `gemini-2.5-pro` | `gemini-2.5-pro` | `gemini3` | `gemini-3-pro-preview` |
| `gemini-3-flash-preview` | `gemini-3-flash-preview` | `gemini3.1` | `gemini-3.1-pro-preview` |
| `gemini-3-pro-preview` | `gemini-3-pro-preview` | `gemini3.1flashlite` | `gemini-3.1-flash-lite-preview` |
| `gemini` | `gemini-3.1-pro-preview` | `gemini25` | `gemini-2.5-flash` |
| `gemini-2.0-flash` | `gemini-2.0-flash` | `gemini25pro` | `gemini-2.5-pro` |
| `gemini-2.5-flash` | `gemini-2.5-flash` | `gemini3` | `gemini-3-pro-preview` |
| `gemini-2.5-pro` | `gemini-2.5-pro` | `gemini3.1` | `gemini-3.1-pro-preview` |
| `gemini-3-flash-preview` | `gemini-3-flash-preview` | `gemini3.1flashlite` | `gemini-3.1-flash-lite-preview` |
| `gemini-3-pro-preview` | `gemini-3-pro-preview` | `gemini3.5flash` | `gemini-3.5-flash` |
| `gemini-3.1-flash-lite-preview` | `gemini-3.1-flash-lite-preview` | `gemini31pro` | `gemini-3.1-pro-preview` |
| `gemini-3.1-pro-preview` | `gemini-3.1-pro-preview` | `gemini3flash` | `gemini-3-flash-preview` |
| `gemini-3.1-pro-preview` | `gemini-3.1-pro-preview` | `gemini35` | `gemini-3.5-flash` |
| `gemini-3.5-flash` | `gemini-3.5-flash` | `gemini35flash` | `gemini-3.5-flash` |
| `gemini2` | `gemini-2.0-flash` | `gemini3flash` | `gemini-3-flash-preview` |
15 changes: 11 additions & 4 deletions docs/docs/_generated/models_reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,11 @@
| `gemini25` | `google` | Text, Vision, Document, Audio, Video | `json` (schema) | effort: `auto`, `minimal`, `low`, `medium`, `high`, `off`<br>Example: `gemini25.auto` | — | — |
| `gemini25pro` | `google` | Text, Vision, Document, Audio, Video | `json` (schema) | effort: `auto`, `minimal`, `low`, `medium`, `high`, `off`<br>Example: `gemini25pro.auto` | — | — |
| `gemini2` | `google` | Text, Vision, Document, Audio, Video | `json` (schema) | — | — | — |
| `gemini3.1flashlite` | `google` | Text, Vision, Document, Audio, Video | `json` (schema) | effort: `auto`, `minimal`, `low`, `medium`, `high`, `off`<br>Example: `gemini3.1flashlite.auto` | — | — |
| `gemini3` | `google` | Text, Vision, Document, Audio, Video | `json` (schema) | effort: `auto`, `minimal`, `low`, `medium`, `high`, `off`<br>Example: `gemini3.auto` | — | — |
| `gemini3flash` | `google` | Text, Vision, Document, Audio, Video | `json` (schema) | effort: `auto`, `minimal`, `low`, `medium`, `high`, `off`<br>Example: `gemini3flash.auto` | — | — |
| `gemini` | `google` | Text, Vision, Document, Audio, Video | `json` (schema) | effort: `auto`, `minimal`, `low`, `medium`, `high`, `off`<br>Example: `gemini.auto` | — | — |
| `gemini3.1flashlite` | `google` | Text, Vision, Document, Audio, Video | `json` (schema) | effort: `minimal`, `low`, `medium`, `high`<br>Example: `gemini3.1flashlite.medium` | — | — |
| `gemini35` | `google` | Text, Vision, Document, Audio, Video | `json` (schema) | effort: `minimal`, `low`, `medium`, `high`<br>Example: `gemini35.medium` | — | — |
| `gemini3` | `google` | Text, Vision, Document, Audio, Video | `json` (schema) | effort: `minimal`, `low`, `medium`, `high`<br>Example: `gemini3.medium` | — | — |
| `gemini3flash` | `google` | Text, Vision, Document, Audio, Video | `json` (schema) | effort: `minimal`, `low`, `medium`, `high`<br>Example: `gemini3flash.medium` | — | — |
| `gemini` | `google` | Text, Vision, Document, Audio, Video | `json` (schema) | effort: `minimal`, `low`, `medium`, `high`<br>Example: `gemini.medium` | — | — |
| `groq.deepseek-r1-distill-llama-70b` | `groq` | Text | `json` (object) | — | — | — |
| `groq.qwen/qwen3-32b` | `groq` | Text | `json` (object) | — | — | — |
| `moonshotai/kimi-k2-instruct-0905` | `groq` | Text | `json` (schema) | — | — | — |
Expand All @@ -59,6 +60,12 @@
| `minimax25` | `hf` | Text | `json` (schema) | toggle: `on`, `off`<br>Example: `minimax25?reasoning=off` | — | — |
| `minimax` | `hf` | Text | `json` (schema) | — | — | — |
| `qwen35` | `hf` | Text, Vision | `json` (object) | toggle: `on`, `off`<br>Example: `qwen35?reasoning=off` | — | — |
| `epistem-7b-hermes-2-beta` | `nous` | Text | `json` (object) | — | — | — |
| `hermes-2-405b` | `nous` | Text | `json` (object) | — | — | — |
| `hermes-2-70b` | `nous` | Text | `json` (object) | — | — | — |
| `hermes-3-405b` | `nous` | Text | `json` (object) | — | — | — |
| `hermes-3-70b` | `nous` | Text | `json` (object) | — | — | — |
| `stepfun/step-3.5-flash` | `nous` | Text | `json` (object) | — | — | — |
| `gpt-4.1-2025-04-14` | `openai` | Text, Vision, Document | `json` (schema) | — | — | — |
| `gpt-4.1-mini-2025-04-14` | `openai` | Text, Vision, Document | `json` (schema) | — | — | — |
| `gpt-4.1-mini` | `openai` | Text, Vision, Document | `json` (schema) | — | — | — |
Expand Down
50 changes: 25 additions & 25 deletions docs/docs/_generated/request_params_reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,36 +7,36 @@

| Field | Type | Default | Description |
| --- | --- | --- | --- |
| `task` | `mcp.types.TaskMetadata | None` | `None` | |
| `meta` | `mcp.types.RequestParams.Meta | None` | `None` | |
| `task` | `Union` | `None` | |
| `meta` | `Union` | `None` | |
| `messages` | `list` | `[]` | |
| `modelPreferences` | `mcp.types.ModelPreferences | None` | `None` | |
| `systemPrompt` | `str | None` | `None` | |
| `includeContext` | `Optional` | `None` | |
| `temperature` | `float | None` | `None` | |
| `modelPreferences` | `Union` | `None` | |
| `systemPrompt` | `Union` | `None` | |
| `includeContext` | `Union` | `None` | |
| `temperature` | `Union` | `None` | |
| `maxTokens` | `int` | `2048` | |
| `stopSequences` | `list[str] | None` | `None` | |
| `metadata` | `dict[str, typing.Any] | None` | `None` | |
| `tools` | `list[mcp.types.Tool] | None` | `None` | |
| `toolChoice` | `mcp.types.ToolChoice | None` | `None` | |
| `model` | `str | None` | `None` | |
| `stopSequences` | `Union` | `None` | |
| `metadata` | `Union` | `None` | |
| `tools` | `Union` | `None` | |
| `toolChoice` | `Union` | `None` | |
| `model` | `Union` | `None` | |
| `use_history` | `bool` | `True` | |
| `max_iterations` | `int` | `99` | |
| `max_iterations` | `int` | `199` | |
| `parallel_tool_calls` | `bool` | `True` | |
| `response_format` | `typing.Any | None` | `None` | |
| `structured_schema` | `dict[str, typing.Any] | None` | `None` | |
| `response_format` | `Union` | `None` | |
| `structured_schema` | `Union` | `None` | |
| `structured_tool_policy` | `Literal` | `'auto'` | |
| `template_vars` | `dict` | `PydanticUndefined` | |
| `mcp_metadata` | `dict[str, typing.Any] | None` | `None` | |
| `tool_execution_handler` | `typing.Any | None` | `None` | |
| `mcp_metadata` | `Union` | `None` | |
| `tool_execution_handler` | `Union` | `None` | |
| `emit_loop_progress` | `bool` | `False` | |
| `tool_result_mode` | `Literal` | `'postprocess'` | |
| `batch_context` | `fast_agent.llm.request_params.BatchRequestContext | None` | `None` | |
| `streaming_timeout` | `float | None` | `300.0` | |
| `top_p` | `float | None` | `None` | |
| `top_k` | `int | None` | `None` | |
| `min_p` | `float | None` | `None` | |
| `presence_penalty` | `float | None` | `None` | |
| `frequency_penalty` | `float | None` | `None` | |
| `repetition_penalty` | `float | None` | `None` | |
| `service_tier` | `Optional` | `None` | |
| `batch_context` | `Union` | `None` | |
| `streaming_timeout` | `Union` | `300.0` | |
| `top_p` | `Union` | `None` | |
| `top_k` | `Union` | `None` | |
| `min_p` | `Union` | `None` | |
| `presence_penalty` | `Union` | `None` | |
| `frequency_penalty` | `Union` | `None` | |
| `repetition_penalty` | `Union` | `None` | |
| `service_tier` | `Union` | `None` | |
14 changes: 7 additions & 7 deletions docs/docs/_generated/workflows_reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,35 +10,35 @@ These signatures are generated from the installed `fast_agent` package to preven
### `chain`

```python
fast.chain(name: str, *, sequence: list[str], instruction: str | pathlib._local.Path | pydantic.networks.AnyUrl | None = None, cumulative: bool = False, default: bool = False) -> Callable[[Callable[~P, collections.abc.Coroutine[Any, Any, +R]]], Callable[~P, collections.abc.Coroutine[Any, Any, +R]]]
fast.chain(name: str, *, sequence: list[str], instruction: str | pathlib.Path | pydantic.networks.AnyUrl | None = None, cumulative: bool = False, default: bool = False) -> Callable[[Callable[~P, collections.abc.Coroutine[Any, Any, +R]]], Callable[~P, collections.abc.Coroutine[Any, Any, +R]]]
```
### `parallel`

```python
fast.parallel(name: str, *, fan_out: list[str], fan_in: str | None = None, instruction: str | pathlib._local.Path | pydantic.networks.AnyUrl | None = None, include_request: bool = True, default: bool = False) -> Callable[[Callable[~P, collections.abc.Coroutine[Any, Any, +R]]], Callable[~P, collections.abc.Coroutine[Any, Any, +R]]]
fast.parallel(name: str, *, fan_out: list[str], fan_in: str | None = None, instruction: str | pathlib.Path | pydantic.networks.AnyUrl | None = None, include_request: bool = True, default: bool = False) -> Callable[[Callable[~P, collections.abc.Coroutine[Any, Any, +R]]], Callable[~P, collections.abc.Coroutine[Any, Any, +R]]]
```
### `evaluator_optimizer`

```python
fast.evaluator_optimizer(name: str, *, generator: str, evaluator: str, instruction: str | pathlib._local.Path | pydantic.networks.AnyUrl | None = None, min_rating: str = 'GOOD', max_refinements: int = 3, refinement_instruction: str | None = None, default: bool = False) -> Callable[[Callable[~P, collections.abc.Coroutine[Any, Any, +R]]], Callable[~P, collections.abc.Coroutine[Any, Any, +R]]]
fast.evaluator_optimizer(name: str, *, generator: str, evaluator: str, instruction: str | pathlib.Path | pydantic.networks.AnyUrl | None = None, min_rating: str = 'GOOD', max_refinements: int = 3, refinement_instruction: str | None = None, default: bool = False) -> Callable[[Callable[~P, collections.abc.Coroutine[Any, Any, +R]]], Callable[~P, collections.abc.Coroutine[Any, Any, +R]]]
```
### `router`

```python
fast.router(name: str, *, agents: list[str], instruction: str | pathlib._local.Path | pydantic.networks.AnyUrl | None = None, servers: list[str] = [], tools: dict[str, list[str]] | None = None, resources: dict[str, list[str]] | None = None, prompts: dict[str, list[str]] | None = None, model: str | None = None, use_history: bool = False, request_params: fast_agent.llm.request_params.RequestParams | None = None, human_input: bool = False, default: bool = False, elicitation_handler: mcp.client.session.ElicitationFnT | None = None, api_key: str | None = None) -> Callable[[Callable[~P, collections.abc.Coroutine[Any, Any, +R]]], Callable[~P, collections.abc.Coroutine[Any, Any, +R]]]
fast.router(name: str, *, agents: list[str], instruction: str | pathlib.Path | pydantic.networks.AnyUrl | None = None, servers: list[str] = [], tools: dict[str, list[str]] | None = None, resources: dict[str, list[str]] | None = None, prompts: dict[str, list[str]] | None = None, model: str | None = None, use_history: bool = False, request_params: fast_agent.llm.request_params.RequestParams | None = None, human_input: bool = False, default: bool = False, elicitation_handler: mcp.client.session.ElicitationFnT | None = None, api_key: str | None = None) -> Callable[[Callable[~P, collections.abc.Coroutine[Any, Any, +R]]], Callable[~P, collections.abc.Coroutine[Any, Any, +R]]]
```
### `orchestrator`

```python
fast.orchestrator(name: str, *, agents: list[str], instruction: str | pathlib._local.Path | pydantic.networks.AnyUrl = '\n You are an expert planner. Given an objective task and a list of Agents\n (which are collections of capabilities), your job is to break down the objective\n into a series of steps, which can be performed by these agents.\n ', model: str | None = None, request_params: fast_agent.llm.request_params.RequestParams | None = None, use_history: bool = False, human_input: bool = False, plan_type: Literal['full', 'iterative'] = 'full', plan_iterations: int = 5, default: bool = False, api_key: str | None = None) -> Callable[[Callable[~P, collections.abc.Coroutine[Any, Any, +R]]], Callable[~P, collections.abc.Coroutine[Any, Any, +R]]]
fast.orchestrator(name: str, *, agents: list[str], instruction: str | pathlib.Path | pydantic.networks.AnyUrl = '\n You are an expert planner. Given an objective task and a list of Agents\n (which are collections of capabilities), your job is to break down the objective\n into a series of steps, which can be performed by these agents.\n ', model: str | None = None, request_params: fast_agent.llm.request_params.RequestParams | None = None, use_history: bool = False, human_input: bool = False, plan_type: Literal['full', 'iterative'] = 'full', plan_iterations: int = 5, default: bool = False, api_key: str | None = None) -> Callable[[Callable[~P, collections.abc.Coroutine[Any, Any, +R]]], Callable[~P, collections.abc.Coroutine[Any, Any, +R]]]
```
### `iterative_planner`

```python
fast.iterative_planner(name: str, *, agents: list[str], instruction: str | pathlib._local.Path | pydantic.networks.AnyUrl = "\nYou are an expert planner, able to Orchestrate complex tasks by breaking them down in to\nmanageable steps, and delegating tasks to Agents.\n\nYou work iteratively - given an Objective, you consider the current state of the plan,\ndecide the next step towards the goal. You document those steps and create clear instructions\nfor execution by the Agents, being specific about what you need to know to assess task completion. \n\nNOTE: A 'Planning Step' has a description, and a list of tasks that can be delegated \nand executed in parallel.\n\nAgents have a 'description' describing their primary function, and a set of 'skills' that\nrepresent Tools they can use in completing their function.\n\nThe following Agents are available to you:\n\n{{agents}}\n\nYou must specify the Agent name precisely when generating a Planning Step. \n\n", model: str | None = None, request_params: fast_agent.llm.request_params.RequestParams | None = None, plan_iterations: int = -1, default: bool = False, api_key: str | None = None) -> Callable[[Callable[~P, collections.abc.Coroutine[Any, Any, +R]]], Callable[~P, collections.abc.Coroutine[Any, Any, +R]]]
fast.iterative_planner(name: str, *, agents: list[str], instruction: str | pathlib.Path | pydantic.networks.AnyUrl = "\nYou are an expert planner, able to Orchestrate complex tasks by breaking them down in to\nmanageable steps, and delegating tasks to Agents.\n\nYou work iteratively - given an Objective, you consider the current state of the plan,\ndecide the next step towards the goal. You document those steps and create clear instructions\nfor execution by the Agents, being specific about what you need to know to assess task completion. \n\nNOTE: A 'Planning Step' has a description, and a list of tasks that can be delegated \nand executed in parallel.\n\nAgents have a 'description' describing their primary function, and a set of 'skills' that\nrepresent Tools they can use in completing their function.\n\nThe following Agents are available to you:\n\n{{agents}}\n\nYou must specify the Agent name precisely when generating a Planning Step. \n\n", model: str | None = None, request_params: fast_agent.llm.request_params.RequestParams | None = None, plan_iterations: int = -1, default: bool = False, api_key: str | None = None) -> Callable[[Callable[~P, collections.abc.Coroutine[Any, Any, +R]]], Callable[~P, collections.abc.Coroutine[Any, Any, +R]]]
```
### `maker`

```python
fast.maker(name: str, *, worker: str, k: int = 3, max_samples: int = 50, match_strategy: str = 'exact', red_flag_max_length: int | None = None, instruction: str | pathlib._local.Path | pydantic.networks.AnyUrl | None = None, default: bool = False) -> Callable[[Callable[~P, collections.abc.Coroutine[Any, Any, +R]]], Callable[~P, collections.abc.Coroutine[Any, Any, +R]]]
fast.maker(name: str, *, worker: str, k: int = 3, max_samples: int = 50, match_strategy: str = 'exact', red_flag_max_length: int | None = None, instruction: str | pathlib.Path | pydantic.networks.AnyUrl | None = None, default: bool = False) -> Callable[[Callable[~P, collections.abc.Coroutine[Any, Any, +R]]], Callable[~P, collections.abc.Coroutine[Any, Any, +R]]]
```
2 changes: 1 addition & 1 deletion docs/docs/agents/defining.md
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ from fast_agent.types import RequestParams
| `maxTokens` | `int` | `2048` | The maximum number of tokens to sample, as requested by the server |
| `model` | `string` | `None` | The model to use for the LLM generation. Can only be set at Agent creation time |
| `use_history` | `bool` | `True` | Agent/LLM maintains conversation history. Does not include applied Prompts |
| `max_iterations` | `int` | `99` | The maximum number of tool calls allowed in a conversation turn |
| `max_iterations` | `int` | `199` | The maximum number of tool calls allowed in a conversation turn |
| `parallel_tool_calls` | `bool` | `True` | Whether to allow simultaneous tool calls |
| `response_format` | `Any` | `None` | Response format for structured calls (advanced use). Prefer to use `structured` with a Pydantic model instead |
| `template_vars` | `Dict[str,Any]` | `{}` | Dictionary of template values for dynamic templates. Currently only supported for TensorZero provider |
Expand Down
26 changes: 26 additions & 0 deletions src/fast_agent/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -1071,6 +1071,29 @@ class DeepSeekSettings(BaseModel):
model_config = ConfigDict(extra="allow", arbitrary_types_allowed=True)


class NousSettings(BaseModel):
"""Settings for using Nous Research Portal provider in the fast-agent application."""

api_key: str | None = Field(default=None, description="Nous API key")
base_url: str | None = Field(
default="https://inference.nousresearch.com/v1",
description="Nous Portal API endpoint (default: https://inference.nousresearch.com/v1)",
)
default_model: str | None = Field(
default=None,
description="Default Nous model when Nous provider is selected without an explicit model",
)
default_headers: dict[str, str] | None = Field(
default=None,
description="Custom headers for all Nous API requests",
)
# Hermes passthrough: product=hermes-agent tag injected automatically in fast-agent
# as product=fast-agent; this field is not exposed in config schema — it is derived
# from the NousPortalAttributionPolicy in fast-agent 0.8+.

model_config = ConfigDict(extra="allow", arbitrary_types_allowed=True)


class GoogleSettings(BaseModel):
"""Settings for using Google models in the fast-agent application."""

Expand Down Expand Up @@ -1655,6 +1678,9 @@ class Settings(BaseSettings):
deepseek: DeepSeekSettings | None = None
"""Settings for using DeepSeek models in the fast-agent application"""

nous: NousSettings | None = None
"""Settings for using Nous Research Portal in the fast-agent application"""

google: GoogleSettings | None = None
"""Settings for using DeepSeek models in the fast-agent application"""

Expand Down
Loading
Loading