"""Provider package.

Every AI provider client in this package follows the same shape:
  - async high-level method for the pipeline stage (e.g. `fact_check(...)`).
  - all credentials from `app.config.settings` via env vars — never inline.
  - semaphore-bounded to respect the configured `*_MAX_CONCURRENCY`.
  - returns a typed Pydantic model from `app.models` (not raw dicts).

The shared HTTP + JSON-extraction helpers live in `_common.py`.
"""

from app.providers._common import (
    JsonExtractionError,
    NonRetryableProviderError,
    ProviderHttpError,
    RetryableProviderError,
    bounded,
    complete_chat,
    extract_json,
    http_post_json,
)

__all__ = [
    "bounded",
    "complete_chat",
    "extract_json",
    "http_post_json",
    "JsonExtractionError",
    "NonRetryableProviderError",
    "ProviderHttpError",
    "RetryableProviderError",
]