"""Type stubs for yosoi public API."""

from typing import Any

from yosoi.core.configs import DebugConfig as DebugConfig
from yosoi.core.configs import TelemetryConfig as TelemetryConfig
from yosoi.core.configs import YosoiConfig as YosoiConfig
from yosoi.core.configs import auto_config as auto_config
from yosoi.core.discovery import LLMConfig as LLMConfig
from yosoi.core.discovery.config import LLMBuilder as LLMBuilder
from yosoi.core.pipeline import Pipeline as Pipeline
from yosoi.models.contract import Contract as Contract
from yosoi.models.defaults import JobPosting as JobPosting
from yosoi.models.defaults import NewsArticle as NewsArticle
from yosoi.models.defaults import Product as Product
from yosoi.models.defaults import Video as Video
from yosoi.models.selectors import FieldSelectors as FieldSelectors
from yosoi.models.selectors import SelectorEntry as SelectorEntry
from yosoi.models.selectors import SelectorLevel as SelectorLevel
from yosoi.models.snapshot import CacheVerdict as CacheVerdict
from yosoi.models.snapshot import SelectorSnapshot as SelectorSnapshot
from yosoi.models.snapshot import SnapshotMap as SnapshotMap
from yosoi.types.base import YosoiType as YosoiType
from yosoi.types.field import Field as Field
from yosoi.types.registry import register_coercion as register_coercion
from yosoi.utils.contracts import resolve_contract as resolve_contract
from yosoi.utils.urls import load_urls_from_file as load_urls_from_file

def css(value: str) -> SelectorEntry: ...
def xpath(value: str) -> SelectorEntry: ...
def regex(value: str) -> SelectorEntry: ...
def jsonld(value: str) -> SelectorEntry: ...

# Semantic type factories — override the dynamic signatures produced by @register_coercion
# Return Any (not FieldInfo) so assignments like `name: str = ys.Title()` pass type checking,
# matching pydantic.Field()'s own stub convention.
def Title(description: str = ..., **kwargs: Any) -> Any: ...
def Price(
    description: str = ..., *, currency_symbol: str | None = ..., require_decimals: bool = ..., **kwargs: Any
) -> Any: ...
def Rating(description: str = ..., *, as_float: bool = ..., scale: int = ..., **kwargs: Any) -> Any: ...
def BodyText(description: str = ..., **kwargs: Any) -> Any: ...
def Author(description: str = ..., **kwargs: Any) -> Any: ...
def Url(description: str = ..., *, require_https: bool = ..., strip_tracking: bool = ..., **kwargs: Any) -> Any: ...
def Datetime(
    description: str = ..., *, assume_utc: bool = ..., past_only: bool = ..., as_iso: bool = ..., **kwargs: Any
) -> Any: ...

# Selector helpers
def discover() -> SelectorEntry: ...

# Provider helpers
def alibaba(model_name: str, api_key: str | None = ..., **kwargs: Any) -> LLMConfig: ...
def anthropic(model_name: str, api_key: str | None = ..., **kwargs: Any) -> LLMConfig: ...
def azure(model_name: str, api_key: str | None = ..., **kwargs: Any) -> LLMConfig: ...
def bedrock(model_name: str, api_key: str | None = ..., **kwargs: Any) -> LLMConfig: ...
def cerebras(model_name: str, api_key: str | None = ..., **kwargs: Any) -> LLMConfig: ...
def deepseek(model_name: str, api_key: str | None = ..., **kwargs: Any) -> LLMConfig: ...
def fireworks(model_name: str, api_key: str | None = ..., **kwargs: Any) -> LLMConfig: ...
def gemini(model_name: str, api_key: str | None = ..., **kwargs: Any) -> LLMConfig: ...
def github(model_name: str, api_key: str | None = ..., **kwargs: Any) -> LLMConfig: ...
def grok(model_name: str, api_key: str | None = ..., **kwargs: Any) -> LLMConfig: ...
def groq(model_name: str, api_key: str | None = ..., **kwargs: Any) -> LLMConfig: ...
def heroku(model_name: str, api_key: str | None = ..., **kwargs: Any) -> LLMConfig: ...
def huggingface(model_name: str, api_key: str | None = ..., **kwargs: Any) -> LLMConfig: ...
def litellm(model_name: str, api_key: str | None = ..., **kwargs: Any) -> LLMConfig: ...
def mistral(model_name: str, api_key: str | None = ..., **kwargs: Any) -> LLMConfig: ...
def moonshotai(model_name: str, api_key: str | None = ..., **kwargs: Any) -> LLMConfig: ...
def nebius(model_name: str, api_key: str | None = ..., **kwargs: Any) -> LLMConfig: ...
def ollama(model_name: str, **kwargs: Any) -> LLMConfig: ...
def openai(model_name: str, api_key: str | None = ..., **kwargs: Any) -> LLMConfig: ...
def openrouter(model_name: str, api_key: str | None = ..., **kwargs: Any) -> LLMConfig: ...
def ovhcloud(model_name: str, api_key: str | None = ..., **kwargs: Any) -> LLMConfig: ...
def provider(model_string: str, api_key: str | None = ..., **kwargs: Any) -> LLMConfig: ...
def sambanova(model_name: str, api_key: str | None = ..., **kwargs: Any) -> LLMConfig: ...
def together(model_name: str, api_key: str | None = ..., **kwargs: Any) -> LLMConfig: ...
def vercel(model_name: str, api_key: str | None = ..., **kwargs: Any) -> LLMConfig: ...
def vertexai(model_name: str, **kwargs: Any) -> LLMConfig: ...
def xai(model_name: str, api_key: str | None = ..., **kwargs: Any) -> LLMConfig: ...

__version__: str
__all__: list[str]
