Adapt Bayesian¶
adapt_bayesian — mvp.adapt_bayesian
Cluster: ML & Optimisation | Type: component | MCP Tools: 48
Overview¶
Bayesian probabilistic modelling block that computes posterior distributions for Gaussian, Bernoulli, and Poisson models using analytic conjugate priors — no MCMC required. When PyMC is installed it can be extended to full HMC/NUTS sampling; without it the block falls back to pure-Python closed-form conjugate updates with Box-Muller posterior sampling and credible interval calculation. Results include the posterior mean, standard deviation, and a configurable credible interval.
When to use:
- Estimating the posterior mean of a measurement process from observed samples
- Computing credible intervals for A/B test conversion rates (Bernoulli model)
- Modelling event-rate uncertainty in count data (Poisson model)
- Integrating uncertainty estimates into a goal-engine planning loop
Example:
from mvp.adapt_bayesian import AdaptBayesianBlock, BayesianInput
block = AdaptBayesianBlock(name="bayes")
result = block.infer(BayesianInput(
data=[0.82, 0.79, 0.85, 0.88, 0.76],
model_type="gaussian",
prior_mean=0.8,
prior_std=0.1,
credible_interval=0.95,
))
# result.value.posterior_mean → ~0.82; result.value.credible_interval_high → upper bound
Works well with: adapt_sklearn, align_evals, adapt_learning
Public API¶
BayesianPriorRecommendation¶
Validated prior + likelihood recommendation decision record.
| Field | Type | Default |
|---|---|---|
prior | dict[str, Any] | required |
likelihood | str | required |
reasoning | str | required |
source | str | required |
notes | str | '' |
context | str | '' |
Methods:
distribution() -> str¶
to_dict() -> dict[str, Any]¶
The advisory payload as
elicitation.handle_suggest_priorreturns it.
to_metadata() -> dict[str, Any]¶
BayesianDecisionError(ValueError)¶
The LLM did not produce a usable, validated prior recommendation.
LLMBayesianRuntime¶
Provider-neutral prior + likelihood recommendation runtime over G6's LLM caller.
Constructor:
| Parameter | Type | Default |
|---|---|---|
llm | LLMCaller \| None | None |
Methods:
recommend(data: list[float], context: str = '') -> Result[dict]¶
BayesianPriorPlanner¶
Runtime-first facade with the deterministic floor as honest fallback.
Constructor:
| Parameter | Type | Default |
|---|---|---|
runtime | BayesianRuntime \| None | None |
Methods:
recommend(data: list[float], context: str = '') -> BayesianPriorRecommendation¶
AdaptBayesianBlock(AIBlock[BayesianInput, BayesianOutput, None])¶
Bayesian probabilistic modelling.
| Field | Type | Default |
|---|---|---|
name | str | 'adapt_bayesian' |
resource_bounds | ResourceBounds \| None | None |
usage | ResourceUsage | field(default_factory=ResourceUsage) |
Methods:
infer(data: BayesianInput) -> Result[BayesianOutput]¶
BayesianInput(BaseModel)¶
Input to AdaptBayesianBlock.
| Field | Type | Default |
|---|---|---|
data | list[float] | required |
model_type | Literal['gaussian', 'bernoulli', 'poisson'] | 'gaussian' |
prior_mean | float | 0.0 |
prior_std | float | 1.0 |
n_samples | int | 1000 |
credible_interval | float | 0.95 |
random_seed | int \| None | 42 |
BayesianOutput(BaseModel)¶
Output from AdaptBayesianBlock.
| Field | Type | Default |
|---|---|---|
posterior_mean | float | required |
posterior_std | float | required |
credible_interval_low | float | required |
credible_interval_high | float | required |
n_samples | int | required |
model_type | str | required |
backend | str | required |
interpretation | str | '' |
diagnostic | DiagnosticReport | Field(default_factory=DiagnosticReport) |
degraded | bool | False |
degradation_reason | str \| None | None |
Methods:
credible_interval() -> tuple[float, float]¶
Backward-compatible combined interval used by older integrations.
AdaptBayesianMCPBlock(AIBlock[MCPBayesInput, MCPBayesOutput, dict])¶
Full-featured Bayesian inference block with SQLite persistence.
| Field | Type | Default |
|---|---|---|
name | str | 'adapt_bayesian_mcp' |
state | dict \| None | None |
db_path | str | ':memory:' |
traces_dir | str | '' |
resource_bounds | ResourceBounds \| None | None |
usage | ResourceUsage | field(default_factory=ResourceUsage) |
Methods:
close() -> None¶
Release resources (DB connection).
infer(data: MCPBayesInput) -> Result[MCPBayesOutput]¶
MCPBayesInput(BaseModel)¶
| Field | Type | Default |
|---|---|---|
op | Literal['model_define', 'model_list', 'model_info', 'model_delete', 'sample', 'sample_prior', 'sample_posterior_predictive', 'find_map', 'summary', 'diagnose', 'compare', 'predict', 'observation_add', 'observation_list', 'observation_delete', 'trace_save', 'trace_load', 'trace_list', 'trace_delete', 'ema_update', 'ema_query', 'ema_reset', 'ab_create', 'ab_record', 'ab_status', 'ab_conclude', 'suggest_prior', 'list_templates', 'list_conjugates', 'list_patterns', 'batch_sample', 'get_info', 'sensitivity', 'conjugate_update', 'query_posterior', 'bayes_factor', 'regression_fit', 'gp_fit', 'gp_predict', 'gp_optimize', 'model_export', 'model_import', 'plot_posterior', 'plot_trace', 'plot_ppc', 'bayes_discover_capabilities', 'bayes_dependency_health', 'bayes_backend_native_op'] | required |
request_id | str | '' |
name | str | '' |
spec_json | str | '{}' |
obs_name | str | '' |
data_json | str | '[]' |
trace_name | str | '' |
compare_models | list[str] | Field(default_factory=list) |
new_obs_json | str | '{}' |
n_samples | int | 1000 |
n_chains | int | 2 |
tune | int | 500 |
target_accept | float | 0.9 |
random_seed | int | 42 |
limit | int | 20 |
notes | str | '' |
max_seconds | float | 120.0 |
value | float | 0.0 |
alpha | float | 0.1 |
variants_json | str | '[]' |
variant | str | '' |
success | bool | False |
significance | float | 0.05 |
data | list[float] | Field(default_factory=list) |
conjugate_type | str | '' |
query_type | str | '' |
threshold | float | 0.0 |
bound_lower | float | 0.0 |
bound_upper | float | 0.0 |
param_a | str | '' |
param_b | str | '' |
model_a | str | '' |
model_b | str | '' |
formula | str | '' |
standardize | bool | False |
kernel | str | 'rbf' |
x_json | str | '[]' |
y_json | str | '[]' |
x_pred_json | str | '[]' |
export_format | str | 'json' |
include_samples | bool | False |
figsize_json | str | '[8, 6]' |
native_backend | str | '' |
native_operation | str | '' |
native_params_json | str | '{}' |
safety_context_json | str | '{}' |
MCPBayesOutput(BaseModel)¶
| Field | Type | Default |
|---|---|---|
op | str | required |
ok | bool | True |
request_id | str | '' |
name | str | '' |
backend | str | '' |
summary | str | '' |
message | str | '' |
models | list[dict[str, Any]] | Field(default_factory=list) |
traces | list[dict[str, Any]] | Field(default_factory=list) |
observations | list[dict[str, Any]] | Field(default_factory=list) |
experiments | list[dict[str, Any]] | Field(default_factory=list) |
stats | dict[str, Any] | Field(default_factory=dict) |
diagnostics | dict[str, Any] | Field(default_factory=dict) |
predictions | list[Any] | Field(default_factory=list) |
map_estimates | dict[str, Any] | Field(default_factory=dict) |
count | int | 0 |
metadata | dict[str, Any] | Field(default_factory=dict) |
figure_base64 | str | '' |
export_data | str | '' |
degraded | bool | False |
degradation_reason | str \| None | None |
degradation | DegradationNotice \| None | None |
available_with | list[str] | Field(default_factory=list) |
completion_state | Literal['verified', 'qualified-draft', 'blocked-escalated'] | 'qualified-draft' |
warning_card | WarningCard \| None | None |
evidence | list[dict[str, Any]] | Field(default_factory=list) |
task_id | str | '' |
run_id | str | '' |
assumption_card | BayesianAssumptionCard \| None | None |
prior_sensitivity | PriorSensitivityReport \| None | None |
likelihood_assessment | LikelihoodAssessment \| None | None |
interpretation_limits | PosteriorInterpretationLimits \| None | None |
computational_diagnostics | ComputationalDiagnostics \| None | None |
capability_discovery | BayesianCapabilityDiscovery \| None | None |
BayesianStore¶
Sync SQLite store with 6 tables for Bayesian metadata.
Constructor:
| Parameter | Type | Default |
|---|---|---|
db_path | str | ':memory:' |
Methods:
close() -> None¶
Close the database connection (idempotent).
upsert_model(name: str, spec: dict, backend: str) -> int¶
get_model(name: str) -> dict[str, Any] | None¶
list_models(limit: int = 50) -> list[dict[str, Any]]¶
delete_model(name: str) -> bool¶
delete_model_cascade(name: str) -> tuple[bool, list[str]]¶
Delete a model and every row that references it, atomically.
count_model_traces(name: str) -> int¶
upsert_trace(name: str, model_name: str, n_samples: int, n_chains: int, path: str, backend: str, summary: dict) -> int¶
get_trace(name: str) -> dict[str, Any] | None¶
list_traces(limit: int = 50) -> list[dict[str, Any]]¶
delete_trace(name: str) -> dict[str, Any] | None¶
upsert_observation(name: str, data: list, shape: list, dtype: str, x_data: list | None = None) -> int¶
get_observation(name: str) -> dict[str, Any] | None¶
list_observations(limit: int = 50) -> list[dict[str, Any]]¶
delete_observation(name: str) -> bool¶
add_experiment(model_name: str, obs_name: str, waic: float, loo: float, backend: str, notes: str) -> int¶
list_experiments(limit: int = 50) -> list[dict[str, Any]]¶
count_all() -> dict[str, int]¶
upsert_ema(name: str, alpha: float, value: float, count: int) -> int¶
get_ema(name: str) -> dict[str, Any] | None¶
delete_ema(name: str) -> bool¶
create_ab_experiment(name: str, variants: list[str]) -> int¶
get_ab_variants(name: str) -> list[dict[str, Any]]¶
record_ab_outcome(name: str, variant: str, success: bool) -> None¶
get_conjugate_state(name: str) -> dict[str, Any] | None¶
upsert_conjugate_state(name: str, conj_type: str, params: dict, n_obs: int) -> int¶
delete_conjugate_state(name: str) -> bool¶
delete_ab_experiment(name: str) -> bool¶
Functions¶
agentic_planner_enabled(default_enabled: bool = True) -> bool¶
Decide whether the agentic bayesian prior-planner should be used.
validate_prior_recommendation(rec: dict) -> dict¶
Reject any prior recommendation outside the canonical shape / bounds.
recommend_prior_floor(data: list[float], context: str = '') -> BayesianPriorRecommendation¶
Deterministic heuristic prior selector (the honest floor).
MCP Tools¶
| Operation | Source |
|---|---|
model_define | bayesian_mcp |
model_list | bayesian_mcp |
model_info | bayesian_mcp |
model_delete | bayesian_mcp |
sample | bayesian_mcp |
sample_prior | bayesian_mcp |
sample_posterior_predictive | bayesian_mcp |
find_map | bayesian_mcp |
summary | bayesian_mcp |
diagnose | bayesian_mcp |
compare | bayesian_mcp |
predict | bayesian_mcp |
observation_add | bayesian_mcp |
observation_list | bayesian_mcp |
observation_delete | bayesian_mcp |
trace_save | bayesian_mcp |
trace_load | bayesian_mcp |
trace_list | bayesian_mcp |
trace_delete | bayesian_mcp |
ema_update | bayesian_mcp |
ema_query | bayesian_mcp |
ema_reset | bayesian_mcp |
ab_create | bayesian_mcp |
ab_record | bayesian_mcp |
ab_status | bayesian_mcp |
ab_conclude | bayesian_mcp |
suggest_prior | bayesian_mcp |
list_templates | bayesian_mcp |
list_conjugates | bayesian_mcp |
list_patterns | bayesian_mcp |
batch_sample | bayesian_mcp |
get_info | bayesian_mcp |
sensitivity | bayesian_mcp |
conjugate_update | bayesian_mcp |
query_posterior | bayesian_mcp |
bayes_factor | bayesian_mcp |
regression_fit | bayesian_mcp |
gp_fit | bayesian_mcp |
gp_predict | bayesian_mcp |
gp_optimize | bayesian_mcp |
model_export | bayesian_mcp |
model_import | bayesian_mcp |
plot_posterior | bayesian_mcp |
plot_trace | bayesian_mcp |
plot_ppc | bayesian_mcp |
bayes_discover_capabilities | bayesian_mcp |
bayes_dependency_health | bayesian_mcp |
bayes_backend_native_op | bayesian_mcp |