Changelog¶
All notable changes to this project will be documented in this file.
The format follows Keep a Changelog and this project adheres to Semantic Versioning.
[0.2.2] - 2026-08-05¶
Changed¶
anyask --version/anyask versionnow printanyask v<version>(e.g.anyask v0.2.2) instead ofanyask <version>, matching this repo'svX.Y.Zgit tag convention.
[0.2.1] - 2026-08-05¶
Changed¶
- Simplified
README.md: restructured around description / features / installation / supported providers / what is anyask / why do you need anyask, trimming the detailed API/Errors/CLI reference sections down to pointers at the hosted docs (docs/reference,docs/cli,docs/providersalready cover that ground) instead of duplicating it.
Fixed¶
README.md'sSPEC.mdlinks used repo-relative paths, which break on PyPI (README.md also serves as the PyPI project description, and PyPI has no repo tree to resolve a relative link against — it just 404s). Switched to absolute GitHub blob URLs, matching the pattern already used for the same file indocs/index.md.
[0.2.0] - 2026-08-05¶
Added¶
SPEC.md— architecture, the full public API contract, and seven Mermaid diagrams (component overview, a singleask()call as a sequence diagram, lazy per-provider imports, the Provider/AskResponse/error class hierarchy, the construction-kwargs split, thereasoning=Trueper-provider decision flow, and the release pipeline), plus an explicit out-of-scope list.- "What anyask does (and doesn't) do" section in
README.md/docs/index.md: documents thatprompt/AskResponse.contentare always plain strings, so there's no multi-turn conversation state, no normalized system-prompt support, no multi-modal input/output, and no streaming — spelled out explicitly rather than left implicit.
Changed¶
pyproject.toml's description now says "single text prompt" / "raw text response" instead of just "raw response", matching the capabilities clarification above.- Fixed the provider count from 17 to 18 everywhere (
pyproject.toml,README.md,SPEC.md,CHANGELOG.md, and three docs pages) — the actual registry has 18 named vendor providers plus the internalopenai_compatbase, which was never meant to be counted; "17" was wrong from the first release and had just been copied forward since.
Removed¶
scripts/verify-version.ps1— unreferenced anywhere in the repo, and unlike this repo's other.ps1scripts (which exist because their bash counterparts need a native-PowerShell equivalent),verify-version.pyalready runs identically on Windows with no bash dependency to work around. Also a strictly weaker check (missing.bumpversion.cfg).scripts/verify-version.pyand its two references (the local pre-commit hook, the Makefile'sverify-versiontarget). Version-drift detection now relies solely ontests/unit/test_version_consistency.py, which already runs automatically in CI viatoxon every push..pre-commit-config.yaml— not installed (missing from thedevextra), not documented, not invoked by CI. Everything it checked (ruff, ruff-format, black, mypy) is the same tooling at the same pinned versions already enforced viatox -e lint/format/typecheck.
Fixed¶
- Replaced the
Makefile'stomllib/tomli-fallback version extraction (which assumedtomliwas installed on Python <3.11, but never declared it as a dependency anywhere) andscripts/release.ps1's equivalent (which had no fallback at all) with a plain regex against the raw file text — no stdlib-version gate, no extra dependency, and now also supports single-quotedversion = '0.1.1'in addition to double-quoted.
[0.1.1] - 2026-08-04¶
Added¶
anyaskconsole script:anyask --version/anyask version,anyask check <provider>(construct one provider without a network call, reporting whether its SDK is installed and credentials resolve; exits 0/1), andanyask ready(sweep every provider using only environment-variable credentials; always exits 0 - a status report, not a gate). Built on stdlibargparse, notclick, to keep the bare install at 2 packages.- Consistent
temperature=0.2/max_tokens=2048defaults across all 18 providers (previously only Anthropic, Mistral, Cohere, Bedrock, and OCI set these; OpenAI, the 9 OpenAI-compatible vendors, Gemini, Vertex AI, and Azure passed calls through with no default, meaning identicalask()calls could get very different sampling behavior purely depending on provider). Skipped for OpenAI/OpenAI-compatible vendors whenreasoning=True, since reasoning models on some of them reject a temperature override and usemax_completion_tokensinstead ofmax_tokens. reasoning: bool = Falseonask()/ask_async()— enables extended/ deliberate reasoning using each provider's own real mechanism (Anthropic extended thinking, OpenAI/OpenAI-compatiblereasoning_effort, Gemini/Vertex AI thinking budgets, Bedrock's Claude thinking field). Providers with no such mechanism (Azure, Mistral, Cohere, OCI) raiseProviderNotFoundErrorrather than silently ignoring it. Seedocs/providers/index.md's Reasoning support table.
[0.1.0] - 2026-08-04¶
Added¶
- Initial extraction release:
ask(),ask_async(),list_models(),list_models_async(), andget_provider()— one normalizedAskResponseshape across 18 providers (OpenAI, Anthropic, Gemini, Vertex AI, Azure, Mistral, Bedrock, Cohere, OCI, and nine OpenAI-compatible vendors: DeepSeek, Groq, xAI, Together AI, Fireworks AI, Cerebras, Perplexity, OpenRouter, Moonshot) - Lazy per-provider SDK imports (
anyask/registry.py) —import anyasknever requires any provider SDK to be installed; each provider's extra is only needed once that provider is actually used AskLLMError/ProviderNotFoundError/ProviderError/ProviderAuthErrorerror hierarchy — every provider call failure is raised withfrom exc, preserving the original SDK exception as__cause__- No routing, fallback, or retry logic —
providerandmodelare always explicit, required arguments