mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-05-31 19:45:15 +02:00
67 lines
2.3 KiB
Python
67 lines
2.3 KiB
Python
|
|
"""``AgentTaskActionConfig`` — config for the ``agent_task`` action type."""
|
||
|
|
|
||
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
from typing import Any
|
||
|
|
|
||
|
|
from pydantic import BaseModel, ConfigDict, Field
|
||
|
|
|
||
|
|
|
||
|
|
class AgentTaskActionConfig(BaseModel):
|
||
|
|
"""Config for an ``agent_task`` plan step.
|
||
|
|
|
||
|
|
Validated against ``PlanStep.config`` whenever the step's
|
||
|
|
``action`` is ``agent_task``. The step instructs the LangGraph
|
||
|
|
Deep Agent runtime to:
|
||
|
|
|
||
|
|
1. Receive ``prompt`` (with all preceding-step outputs and inputs
|
||
|
|
already rendered by the template engine).
|
||
|
|
2. Run the agent with access to *exactly* the capabilities named
|
||
|
|
in ``tools`` — nothing else from the registry is visible to
|
||
|
|
this agent invocation.
|
||
|
|
3. Return a JSON object matching ``output_schema`` (recommended;
|
||
|
|
the executor validates and re-prompts on mismatch).
|
||
|
|
|
||
|
|
``output_schema`` is the design's "dynamic output contract" —
|
||
|
|
instead of locking the output shape on the ActionDefinition (as
|
||
|
|
tight actions do), the user declares the shape they want for this
|
||
|
|
specific step, and the agent has to match it.
|
||
|
|
"""
|
||
|
|
|
||
|
|
model_config = ConfigDict(extra="forbid")
|
||
|
|
|
||
|
|
prompt: str = Field(
|
||
|
|
...,
|
||
|
|
description=(
|
||
|
|
"The task prompt rendered through the Jinja sandbox. May "
|
||
|
|
"reference automation inputs and prior-step outputs."
|
||
|
|
),
|
||
|
|
min_length=1,
|
||
|
|
)
|
||
|
|
tools: list[str] = Field(
|
||
|
|
default_factory=list,
|
||
|
|
description=(
|
||
|
|
"Allowlist of capability IDs the agent may call (e.g., "
|
||
|
|
"'search_space.query'). Empty list = no tool access; the "
|
||
|
|
"agent must answer from the prompt alone."
|
||
|
|
),
|
||
|
|
)
|
||
|
|
model: str | None = Field(
|
||
|
|
default=None,
|
||
|
|
description=(
|
||
|
|
"Optional LiteLLM model identifier (e.g., "
|
||
|
|
"'anthropic/claude-sonnet-4-7'). Omitted means the "
|
||
|
|
"automation falls back to the search space's default "
|
||
|
|
"agent_llm_id."
|
||
|
|
),
|
||
|
|
)
|
||
|
|
output_schema: dict[str, Any] | None = Field(
|
||
|
|
default=None,
|
||
|
|
description=(
|
||
|
|
"Optional JSON Schema declaring the shape the agent must "
|
||
|
|
"return. Strongly recommended; the editor warns when "
|
||
|
|
"missing. Validated by the executor before binding to "
|
||
|
|
"``output_as``."
|
||
|
|
),
|
||
|
|
)
|