"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""

from __future__ import annotations
from .webfetchengineenum import WebFetchEngineEnum
from openrouter.types import BaseModel
from openrouter.utils import validate_open_enum
from pydantic.functional_validators import PlainValidator
from typing import List, Optional
from typing_extensions import Annotated, NotRequired, TypedDict


class WebFetchServerToolConfigTypedDict(TypedDict):
    r"""Configuration for the openrouter:web_fetch server tool"""

    allowed_domains: NotRequired[List[str]]
    r"""Only fetch from these domains."""
    blocked_domains: NotRequired[List[str]]
    r"""Never fetch from these domains."""
    engine: NotRequired[WebFetchEngineEnum]
    r"""Which fetch engine to use. \"auto\" (default) uses native if the provider supports it, otherwise Exa. \"native\" forces the provider's built-in fetch. \"exa\" uses Exa Contents API. \"openrouter\" uses direct HTTP fetch. \"firecrawl\" uses Firecrawl scrape (requires BYOK). \"parallel\" uses the Parallel extract API."""
    max_content_tokens: NotRequired[int]
    r"""Maximum content length in approximate tokens. Content exceeding this limit is truncated."""
    max_uses: NotRequired[int]
    r"""Maximum number of web fetches per request. Once exceeded, the tool returns an error."""


class WebFetchServerToolConfig(BaseModel):
    r"""Configuration for the openrouter:web_fetch server tool"""

    allowed_domains: Optional[List[str]] = None
    r"""Only fetch from these domains."""

    blocked_domains: Optional[List[str]] = None
    r"""Never fetch from these domains."""

    engine: Annotated[
        Optional[WebFetchEngineEnum], PlainValidator(validate_open_enum(False))
    ] = None
    r"""Which fetch engine to use. \"auto\" (default) uses native if the provider supports it, otherwise Exa. \"native\" forces the provider's built-in fetch. \"exa\" uses Exa Contents API. \"openrouter\" uses direct HTTP fetch. \"firecrawl\" uses Firecrawl scrape (requires BYOK). \"parallel\" uses the Parallel extract API."""

    max_content_tokens: Optional[int] = None
    r"""Maximum content length in approximate tokens. Content exceeding this limit is truncated."""

    max_uses: Optional[int] = None
    r"""Maximum number of web fetches per request. Once exceeded, the tool returns an error."""
