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

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


WebSearchPluginID = Literal["web",]


class WebSearchPluginTypedDict(TypedDict):
    id: WebSearchPluginID
    enabled: NotRequired[bool]
    r"""Set to false to disable the web-search plugin for this request. Defaults to true."""
    engine: NotRequired[WebSearchEngine]
    r"""The search engine to use for web search."""
    exclude_domains: NotRequired[List[str]]
    r"""A list of domains to exclude from web search results. Supports wildcards (e.g. \"*.substack.com\") and path filtering (e.g. \"openai.com/blog\")."""
    include_domains: NotRequired[List[str]]
    r"""A list of domains to restrict web search results to. Supports wildcards (e.g. \"*.substack.com\") and path filtering (e.g. \"openai.com/blog\")."""
    max_results: NotRequired[int]
    search_prompt: NotRequired[str]


class WebSearchPlugin(BaseModel):
    id: WebSearchPluginID

    enabled: Optional[bool] = None
    r"""Set to false to disable the web-search plugin for this request. Defaults to true."""

    engine: Annotated[
        Optional[WebSearchEngine], PlainValidator(validate_open_enum(False))
    ] = None
    r"""The search engine to use for web search."""

    exclude_domains: Optional[List[str]] = None
    r"""A list of domains to exclude from web search results. Supports wildcards (e.g. \"*.substack.com\") and path filtering (e.g. \"openai.com/blog\")."""

    include_domains: Optional[List[str]] = None
    r"""A list of domains to restrict web search results to. Supports wildcards (e.g. \"*.substack.com\") and path filtering (e.g. \"openai.com/blog\")."""

    max_results: Optional[int] = None

    search_prompt: Optional[str] = None
