Skip to content

Releases: TheTsungYing/AnnealBridge

v0.4.0

Choose a tag to compare

@TheTsungYing TheTsungYing released this 02 Oct 07:12

Two new problem schema versions, opt-in post-processing, wall-clock limits and
cancellation. Existing 1.0 / 1.1 problem documents keep working unchanged.

Before upgrading

  • Dependency floors raised: pydantic>=2.10, numpy>=2.0,
    dimod>=0.12.19, dwave-samplers>=1.3, typer>=0.26; with extras
    mcp>=2.1,<3, dwave-system>=1.26.
  • MCP schema errors are no longer tool errors: they now return a structured
    invalid_problem / valid: false result instead of isError: true.
  • New output fields (source, postprocess, wall_clock_limit_reached,
    supports_interrupt, new limits); schema_version is now "1.3" and the
    error catalog grows from 48 to 64 codes.
  • CLI --json output is always UTF-8, also on Windows.

Highlights

  • Schema 1.2: cardinality constraints (one-hot, at-most-k, at-least-k).
  • Schema 1.3: templates for large regular models, plus annealbridge expand.
  • Opt-in post-processing: repair and local search, with every result re-validated.
  • Wall-clock limit and cancellation for the local heuristic backends.
  • CLI: annealbridge example, capabilities --json, and stdin input with -.

Upgrading

pip install --upgrade "annealbridge[mcp]". With uvx, run
uv cache clean annealbridge and restart the host.


Full changelog: https://github.com/TheTsungYing/AnnealBridge/blob/main/CHANGELOG.md#040---2026-09-29 · Compare: v0.3.0...v0.4.0

v0.3.0

Choose a tag to compare

@TheTsungYing TheTsungYing released this 23 Sep 03:22

Two new local backends, shape-aware backend recommendations, and an MCP server
that is easier for an agent to use and for a user to discover. The problem
contract (1.0 / 1.1) is unchanged: no existing problem document needs to
change.

Added

  • tabu backend, a multistart tabu search on dwave-samplers. It is
    strong on dense QUBOs, needs no extra and no credential, and its result
    depends on (problem, num_reads, seed) alone, never on the wall clock.
  • simulated_bifurcation backend, the classical-mechanics heuristic of
    Goto et al. (2021) implemented on numpy. On dense 1000-variable instances
    it matched the best energy the other heuristics found in 3.9 s against
    their 11.6 s and 33 s. An optional gpu extra runs it on CUDA and never
    falls back to the CPU silently.
  • Shape-aware recommend. Local heuristics are now ordered by problem
    shape. R_DENSE_STRENGTH marks the faster choice on large dense
    unconstrained problems, and R_PENALTY_WEAKNESS marks a weaker one once
    hard constraints become penalties. A fitting exact still ranks first.
  • MCP prompts and resources. Three prompts (pick_subset, assign,
    schedule_shifts) appear in a host's input menu. Five resources serve the
    example problems and the full schema (annealbridge://examples/...,
    annealbridge://schema).
  • Solve progress. A host that sends a progress token gets a notification
    as each stage of each attempt starts, such as
    attempt 2 of 3: solving on simulated_annealing.
  • A summary sentence on success. SolveResult.message now holds one
    deterministic sentence an agent can relay as is, for example
    exact proved optimality: rank 1 has objective 17 (maximize); ....
  • annealbridge_version in capabilities, so a capabilities response names
    the build that produced it.

Changed

  • get_optimization_capabilities no longer returns the JSON schema by
    default.
    Pass include_schema: true to get it. The plain call is now
    about a quarter of its former size. problem_json_schema is null
    otherwise, and the CLI capabilities command still prints the full schema.
  • Fewer tool calls for simple problems. The server instructions let an
    agent solve directly on a local backend, since an invalid document comes
    back as invalid_problem with the same errors validation would give. A
    remote backend or a large problem is still validated first. On hosts that
    ask the user to approve every tool call, a simple problem now needs one or
    two approvals instead of four.
  • When several local backends fit and the user named none, the agent is
    told to show the top entries and ask which to run.

Upgrading

pip install --upgrade annealbridge

Through uvx, the MCP server keeps running the version it first resolved. Run
uv cache clean annealbridge and restart the host. annealbridge-mcp --version
shows the version that actually runs.


Full changelog: https://github.com/TheTsungYing/AnnealBridge/blob/main/CHANGELOG.md#030---2026-09-22 · Compare: v0.2.1...v0.3.0

v0.2.1

Choose a tag to compare

@TheTsungYing TheTsungYing released this 16 Sep 07:43

AnnealBridge is now on the MCP Registry
as io.github.TheTsungYing/annealbridge. No optimization behaviour changed.

Added

  • annealbridge mcp runs the MCP server, exactly as the annealbridge-mcp
    console script does. Every argument reaches the same parser, --help and
    --version included, and a missing [mcp] extra ends both the same way.
  • server.json describes the server for the MCP Registry. A registry
    client resolves it to uvx --from=annealbridge[mcp] annealbridge mcp.

The subcommand exists because the registry composes a package command as
<runtimeHint> <runtimeArguments> <identifier> <packageArguments>, and
identifier has to be the PyPI project name for the registry's ownership
check — so a console script named differently from the project is unreachable.
Both entry points remain supported; a hand-written host configuration is
shorter with annealbridge-mcp.

Installing from the registry

A registry-aware client picks this up on its own. By hand, nothing changes:

uvx --from "annealbridge[mcp]" annealbridge-mcp

Upgrading an existing uvx install still needs uv cache clean annealbridge
and a host restart — it reuses the environment it first resolved.


Full changelog: https://github.com/TheTsungYing/AnnealBridge/blob/main/CHANGELOG.md#021---2026-09-16 · Compare: v0.2.0...v0.2.1

v0.2.0

Choose a tag to compare

@TheTsungYing TheTsungYing released this 16 Sep 06:18

A maintenance and hardening release. The problem contract (1.0 / 1.1), the
six backends, the CLI and the MCP tools are unchanged — no existing problem
document needs to change.

  • Corrected dependency floors (pydantic-settings>=2.7,
    dwave-system>=1.10). Under 0.1.0 an older version installed cleanly and then
    failed on import or on the first hybrid CQM solve. This is the main reason to
    upgrade.
  • --version on annealbridge and annealbridge-mcp, answered before any
    ANNEALBRIDGE_* setting is read.
  • seed_min / seed_max in get_optimization_capabilities. An
    out-of-range solver.seed is refused before the backend is called.
  • One failing backend no longer breaks the capabilities view. It is listed
    as unavailable with a redacted reason instead of failing the whole call.
  • Clearer MCP failures. A settings error exits 2 with one Error: line
    instead of a traceback, and metadata.timing_us no longer emits non-finite
    values that made strict clients reject an otherwise good result.
  • Faster compilation, validation, deduplication and ranking, with
    bit-for-bit identical output. A 200-integer-variable, 25-constraint problem
    compiles in ~31 ms instead of ~65.

Upgrading

pip install --upgrade annealbridge

Through uvx, the MCP server keeps running the version it first resolved. Run
uv cache clean annealbridge and restart the host; annealbridge-mcp --version
shows what is actually running.

Full changelog: https://github.com/TheTsungYing/AnnealBridge/blob/main/CHANGELOG.md#020---2026-09-16 · Compare: v0.1.0...v0.2.0