"""AUTO-GENERATED by adk-fluent generator -- do not edit manually
Generated from google-adk 1.25.0 (manifest ee6c926313c5)"""

from collections.abc import AsyncIterator, Awaitable, Callable
from typing import Any, Literal, Self

from google.adk.agents.base_agent import BaseAgent as _ADK_BaseAgent
from google.adk.agents.llm_agent import LlmAgent
from google.adk.agents.readonly_context import ReadonlyContext
from google.adk.agents.remote_a2a_agent import RemoteA2aAgent as _ADK_RemoteA2aAgent
from google.adk.code_executors.base_code_executor import BaseCodeExecutor
from google.adk.models.base_llm import BaseLlm
from google.adk.planners.base_planner import BasePlanner
from google.genai.types import Content, File, GenerateContentConfig, Part
from pydantic import BaseModel

from adk_fluent._base import BuilderBase

class BaseAgent(BuilderBase):
    """Base class for all agents in Agent Development Kit."""
    def __init__(self, name: str) -> None: ...
    def describe(self, value: str) -> Self: ...
    def after_agent(self, *fns: Callable[..., Any]) -> Self: ...
    def after_agent_if(self, condition: bool, fn: Callable[..., Any]) -> Self: ...
    def before_agent(self, *fns: Callable[..., Any]) -> Self: ...
    def before_agent_if(self, condition: bool, fn: Callable[..., Any]) -> Self: ...
    def sub_agents(self, value: list[_ADK_BaseAgent]) -> Self: ...
    def sub_agent(self, value: _ADK_BaseAgent) -> Self: ...
    def build(self) -> _ADK_BaseAgent: ...

class Agent(BuilderBase):
    """LLM-based Agent."""
    def __init__(self, name: str, model: str | None = None) -> None: ...
    def describe(self, value: str) -> Self: ...
    def global_instruct(self, value: str | Callable[[ReadonlyContext], str | Awaitable[str]]) -> Self: ...
    def static(self, value: Content | str | File | Part | list[str | File | Part] | None) -> Self: ...
    def delegate(self, value: Any) -> Self: ...
    def guardrail(self, value: Any) -> Self: ...
    def history(self, value: Literal["default", "none"]) -> Self: ...
    def include_history(self, value: Literal["default", "none"]) -> Self: ...
    def inject_context(self, value: Any) -> Self: ...
    def input_schema(self, value: type[BaseModel] | None) -> Self: ...
    def output_key(self, value: str | None) -> Self: ...
    def output_schema(self, value: type[BaseModel] | None) -> Self: ...
    def outputs(self, value: str | None) -> Self: ...
    def retry_if(self, value: Any) -> Self: ...
    def save_as(self, value: str | None) -> Self: ...
    def static_instruct(self, value: Content | str | File | Part | list[str | File | Part] | None) -> Self: ...
    def after_agent(self, *fns: Callable[..., Any]) -> Self: ...
    def after_agent_if(self, condition: bool, fn: Callable[..., Any]) -> Self: ...
    def after_model(self, *fns: Callable[..., Any]) -> Self: ...
    def after_model_if(self, condition: bool, fn: Callable[..., Any]) -> Self: ...
    def after_tool(self, *fns: Callable[..., Any]) -> Self: ...
    def after_tool_if(self, condition: bool, fn: Callable[..., Any]) -> Self: ...
    def before_agent(self, *fns: Callable[..., Any]) -> Self: ...
    def before_agent_if(self, condition: bool, fn: Callable[..., Any]) -> Self: ...
    def before_model(self, *fns: Callable[..., Any]) -> Self: ...
    def before_model_if(self, condition: bool, fn: Callable[..., Any]) -> Self: ...
    def before_tool(self, *fns: Callable[..., Any]) -> Self: ...
    def before_tool_if(self, condition: bool, fn: Callable[..., Any]) -> Self: ...
    def on_model_error(self, *fns: Callable[..., Any]) -> Self: ...
    def on_model_error_if(self, condition: bool, fn: Callable[..., Any]) -> Self: ...
    def on_tool_error(self, *fns: Callable[..., Any]) -> Self: ...
    def on_tool_error_if(self, condition: bool, fn: Callable[..., Any]) -> Self: ...
    def sub_agents(self, value: list[_ADK_BaseAgent]) -> Self: ...
    def model(self, value: str | BaseLlm) -> Self: ...
    def generate_content_config(self, value: GenerateContentConfig | None) -> Self: ...
    def disallow_transfer_to_parent(self, value: bool) -> Self: ...
    def disallow_transfer_to_peers(self, value: bool) -> Self: ...
    def planner(self, value: BasePlanner | None) -> Self: ...
    def code_executor(self, value: BaseCodeExecutor | None) -> Self: ...
    def sub_agent(self, value: _ADK_BaseAgent) -> Self: ...
    def tool(self, fn_or_tool: Any, *, require_confirmation: bool = False) -> Self: ...
    def tools(self, value: Any) -> Self: ...
    def ui(self, spec: Any) -> Self: ...
    def guard(self, value: Any) -> Self: ...
    def ask(self, prompt: str) -> str: ...
    async def ask_async(self, prompt: str) -> str: ...
    async def stream(self, prompt: str) -> AsyncIterator[str]: ...
    def test(
        self, prompt: str, *, contains: str | None = None, matches: str | None = None, equals: str | None = None
    ) -> Self: ...
    def session(self) -> Any: ...
    def map(self, prompts: list[str], *, concurrency: int = 5) -> list[str]: ...
    async def map_async(self, prompts: list[str], *, concurrency: int = 5) -> list[str]: ...
    async def events(self, prompt: str) -> AsyncIterator[Any]: ...
    def instruct(self, value: str | Callable[[ReadonlyContext], str | Awaitable[str]]) -> Self: ...
    def context(self, spec: Any) -> Self: ...
    def show(self) -> Self: ...
    def hide(self) -> Self: ...
    def memory(self, mode: str = "preload") -> Self: ...
    def memory_auto_save(self) -> Self: ...
    def agent_tool(self, agent: Any) -> Self: ...
    def isolate(self) -> Self: ...
    def stay(self) -> Self: ...
    def no_peers(self) -> Self: ...
    def artifacts(self, *transforms: Any) -> Self: ...
    def tool_schema(self, schema: type) -> Self: ...
    def callback_schema(self, schema: type) -> Self: ...
    def prompt_schema(self, schema: type) -> Self: ...
    def artifact_schema(self, schema: type) -> Self: ...
    def eval(self, prompt: str, *, expect: str | None = None, criteria: Any | None = None) -> Any: ...
    def eval_suite(self) -> Any: ...
    def to_ir(self) -> Any: ...
    def skill(
        self,
        skill_id: str,
        name: str,
        *,
        description: str = "",
        tags: list[str] | None = None,
        examples: list[str] | None = None,
        input_modes: list[str] | None = None,
        output_modes: list[str] | None = None,
    ) -> Self: ...
    def publish(self, *, port: int = 8000, host: str = "0.0.0.0") -> Any: ...
    def build(self) -> LlmAgent: ...

class RemoteA2aAgent(BuilderBase):
    """Agent that communicates with a remote A2A agent via A2A client."""
    def __init__(self, name: str) -> None: ...
    def describe(self, value: str) -> Self: ...
    def after_agent(self, *fns: Callable[..., Any]) -> Self: ...
    def after_agent_if(self, condition: bool, fn: Callable[..., Any]) -> Self: ...
    def before_agent(self, *fns: Callable[..., Any]) -> Self: ...
    def before_agent_if(self, condition: bool, fn: Callable[..., Any]) -> Self: ...
    def sub_agents(self, value: list[_ADK_BaseAgent]) -> Self: ...
    def sub_agent(self, value: _ADK_BaseAgent) -> Self: ...
    def build(self) -> _ADK_RemoteA2aAgent: ...
