Adapt Eurisko¶
Adapt Eurisko — mvp.adapt_eurisko
Cluster: ML & Optimisation | Type: component | MCP Tools: 35
Overview¶
EURISKO-inspired heuristic discovery engine that maintains a library of scored, categorised heuristics and applies them to problem contexts to generate ranked discoveries and recommendations. Heuristics track Bayesian confidence via a Beta-Binomial model — confidence updates after each application, rewarding successful use and down-weighting failures over time. Supports self-modification guardrails (frozen flag, generation depth cap) and three execution types: recommendation, registered transform, and LLM-guided.
When to use:
- Augmenting a solver or goal-engine step with heuristic guidance drawn from a curated knowledge base
- Discovering which problem-solving strategies are most relevant given a context dictionary
- Evaluating proposed solutions against problem objectives using registered evaluator transforms
- Building a self-improving heuristic library that adapts its confidence scores from live feedback
Example:
from mvp.adapt_eurisko import AdaptEuriskoBlock, EuriskoInput
block = AdaptEuriskoBlock(name="eurisko")
result = block.infer(EuriskoInput(
operation="discover",
problem={"domain": "optimisation", "constraint": "non-convex", "budget": "small"},
top_k=3,
))
# result.value.discoveries → list of top-3 heuristic recommendations
# result.value.confidence_updates → updated confidence per applied heuristic
Works well with: goal_engine, adapt_experta, cegis
Public API¶
AdaptEuriskoBlock(AIBlock[EuriskoInput, EuriskoOutput, dict])¶
EURISKO-inspired heuristic discovery engine.
| Field | Type | Default |
|---|---|---|
name | str | 'adapt_eurisko' |
resource_bounds | ResourceBounds \| None | None |
registry | TransformRegistry \| None | None |
Methods:
infer(data: EuriskoInput) -> Result[EuriskoOutput]¶
Heuristic(BaseModel)¶
A single heuristic rule with confidence tracking.
| Field | Type | Default |
|---|---|---|
name | str | required |
description | str | required |
condition_keys | list[str] | Field(default_factory=list) |
action | str | required |
confidence | float | 0.5 |
n_applications | int | 0 |
n_successes | int | 0 |
category | str | '' |
worth | int | 500 |
expanded_context | dict[str, Any] | Field(default_factory=dict) |
llm_prompt_template | dict[str, str] | Field(default_factory=dict) |
source_id | str | '' |
domain | str | '' |
tags | list[str] | Field(default_factory=list) |
frozen | bool | False |
generation | int | 0 |
alpha | float | 1.0 |
beta_param | float | 1.0 |
execution_type | Literal['recommendation', 'transform', 'llm'] | 'recommendation' |
transform_spec | dict | Field(default_factory=dict) |
last_applied_at | float | 0.0 |
Methods:
bayesian_confidence() -> float¶
Posterior mean of Beta(alpha, beta_param).
uncertainty() -> float¶
Approximate width of 95% credible interval.
EuriskoInput(BaseModel)¶
Input to AdaptEuriskoBlock.
| Field | Type | Default |
|---|---|---|
operation | Literal['discover', 'apply', 'add', 'list', 'evaluate'] | 'discover' |
problem | dict[str, object] | Field(default_factory=dict) |
solution | dict[str, object] | Field(default_factory=dict) |
heuristic_name | str | '' |
new_heuristic | Heuristic \| None | None |
top_k | int | 3 |
evaluator_name | str | '' |
EuriskoOutput(BaseModel)¶
Output from AdaptEuriskoBlock.
| Field | Type | Default |
|---|---|---|
heuristics_applied | list[str] | required |
discoveries | list[str] | required |
confidence_updates | dict[str, float] | required |
degraded | bool | False |
degradation_reason | str | '' |
degraded_dependencies | list[str] | Field(default_factory=list) |
completion_state | str | 'qualified-draft' |
warning_card | dict[str, Any] | Field(default_factory=dict) |
metadata | dict[str, Any] | Field(default_factory=dict) |
result | dict[str, object] | required |
n_heuristics_total | int | required |
AdaptEuriskoMCPBlock(AIBlock[MCPEuriskoInput, MCPEuriskoOutput, dict])¶
29-op EURISKO heuristic engine with SQLite persistence.
| Field | Type | Default |
|---|---|---|
name | str | 'adapt_eurisko_mcp' |
state | dict \| None | None |
db_path | str | ':memory:' |
resource_bounds | ResourceBounds \| None | None |
Methods:
infer(data: MCPEuriskoInput) -> Result[MCPEuriskoOutput]¶
MCPEuriskoInput(BaseModel)¶
| Field | Type | Default |
|---|---|---|
op | Literal['discover', 'apply', 'add', 'list', 'evaluate', 'save_session', 'load_session', 'list_sessions', 'delete_session', 'create_unit', 'get_unit', 'update_unit', 'list_units', 'submit_task', 'get_task', 'list_tasks', 'record_outcome', 'query_outcomes', 'summarize_outcomes', 'specialize', 'generalize', 'mutate', 'search', 'search_units', 'info', 'execute', 'suggest_mutations', 'domain_summary', 'auto_mutate', 'list_patterns', 'source_capabilities', 'source_info', 'source_schema', 'source_query', 'source_execute'] | required |
problem | dict | Field(default_factory=dict) |
solution | dict | Field(default_factory=dict) |
heuristic_name | str | '' |
top_k | int | 3 |
name | str | '' |
description | str | '' |
action | str | '' |
condition_keys | list[str] | Field(default_factory=list) |
confidence | float | 0.5 |
notes | str | '' |
unit_name | str | '' |
isa | list[str] | Field(default_factory=list) |
worth | int | 500 |
english_description | str | '' |
slots_json | str | '' |
isa_filter | str | '' |
task_op | str | '' |
params_json | str | '' |
priority | int | 0 |
task_id | str | '' |
reasons | list[str] | Field(default_factory=list) |
status_filter | str | '' |
success | bool | True |
problem_json | str | '' |
outcome_notes | str | '' |
limit | int | 50 |
add_condition_keys | list[str] | Field(default_factory=list) |
remove_condition_keys | list[str] | Field(default_factory=list) |
new_name | str | '' |
new_action | str | '' |
new_description | str | '' |
confidence_delta | float | 0.0 |
query | str | '' |
search_top_k | int | 5 |
context | dict | Field(default_factory=dict) |
execution_mode | str | 'auto' |
domain | str | '' |
tags | list[str] | Field(default_factory=list) |
analysis_window | int | 20 |
run_context | dict | Field(default_factory=dict) |
guardrail_config | dict | Field(default_factory=dict) |
source | str | '' |
source_action | str | '' |
source_params | dict | Field(default_factory=dict) |
MCPEuriskoOutput(BaseModel)¶
| Field | Type | Default |
|---|---|---|
op | str | '' |
key | str | '' |
value | Any | None |
found | bool | False |
count | int | 0 |
records | list[MCPEuriskoRecord] | Field(default_factory=list) |
retrieved | list[Any] | Field(default_factory=list) |
summary | str | '' |
message | str | '' |
heuristics | list[dict] | Field(default_factory=list) |
discoveries | list[str] | Field(default_factory=list) |
confidence_updates | dict | Field(default_factory=dict) |
n_heuristics_total | int | 0 |
metadata | dict | Field(default_factory=dict) |
execution_result | str | '' |
uncertainty | float | 0.0 |
domain_stats | dict | Field(default_factory=dict) |
mutation_suggestions | list[dict] | Field(default_factory=list) |
degraded | bool | False |
degradation_reason | str | '' |
degraded_dependencies | list[str] | Field(default_factory=list) |
completion_state | str | 'qualified-draft' |
warning_card | dict | Field(default_factory=dict) |
EuriskoStore¶
Sync SQLite store with 6 tables.
Constructor:
| Parameter | Type | Default |
|---|---|---|
db_path | str | ':memory:' |
Methods:
save_session(name: str, heuristics_json: str, units_json: str, notes: str) -> str¶
load_session(name: str) -> dict[str, Any] | None¶
list_sessions() -> list[dict[str, Any]]¶
delete_session(name: str) -> bool¶
create_unit(name: str, isa_json: str, worth: int, english_description: str, slots_json: str) -> str¶
get_unit(name: str) -> dict[str, Any] | None¶
update_unit(name: str, slots_json: str | None = None, worth: int | None = None) -> bool¶
list_units(isa_filter: str = '') -> list[dict[str, Any]]¶
add_task(op: str, params_json: str, priority: int, reasons_json: str) -> str¶
get_task(task_id: str) -> dict[str, Any] | None¶
update_task(task_id: str, status: str, result_json: str) -> None¶
list_tasks(status_filter: str = '') -> list[dict[str, Any]]¶
add_outcome(heuristic_name: str, success: bool, problem_json: str, notes: str, domain: str = '') -> str¶
query_outcomes(heuristic_name: str = '', limit: int = 50) -> list[dict[str, Any]]¶
summarize_outcomes(heuristic_name: str = '') -> dict[str, Any]¶
summarize_outcomes_weighted(heuristic_name: str = '', decay: float = 0.95) -> dict[str, Any]¶
Recency-weighted outcome summary. Recent outcomes weighted more.
summarize_outcomes_by_domain(heuristic_name: str = '') -> list[dict[str, Any]]¶
Per-domain success rate breakdown.
add_mutation(parent_name: str, child_name: str, mutation_type: str, description: str) -> str¶
list_mutations(parent_name: str = '') -> list[dict[str, Any]]¶
get_generation_depth(heuristic_name: str) -> int¶
Walk mutation lineage via recursive CTE, return max depth.
count_mutations_since(since_iso: str) -> int¶
Count mutations recorded after the given ISO timestamp.
record_verification(heuristic_name: str, transform_name: str, domain: str, retracted: bool, reason: str) -> str¶
list_verifications(heuristic_name: str = '') -> list[dict[str, Any]]¶
text_search(query: str, top_k: int = 5) -> list[dict[str, Any]]¶
search_units(query: str, top_k: int = 5) -> list[dict[str, Any]]¶
count_all() -> dict[str, int]¶
MCP Tools¶
| Operation | Source |
|---|---|
discover | eurisko_mcp |
apply | eurisko_mcp |
add | eurisko_mcp |
list | eurisko_mcp |
evaluate | eurisko_mcp |
save_session | eurisko_mcp |
load_session | eurisko_mcp |
list_sessions | eurisko_mcp |
delete_session | eurisko_mcp |
create_unit | eurisko_mcp |
get_unit | eurisko_mcp |
update_unit | eurisko_mcp |
list_units | eurisko_mcp |
submit_task | eurisko_mcp |
get_task | eurisko_mcp |
list_tasks | eurisko_mcp |
record_outcome | eurisko_mcp |
query_outcomes | eurisko_mcp |
summarize_outcomes | eurisko_mcp |
specialize | eurisko_mcp |
generalize | eurisko_mcp |
mutate | eurisko_mcp |
search | eurisko_mcp |
search_units | eurisko_mcp |
info | eurisko_mcp |
execute | eurisko_mcp |
suggest_mutations | eurisko_mcp |
domain_summary | eurisko_mcp |
auto_mutate | eurisko_mcp |
list_patterns | eurisko_mcp |
source_capabilities | eurisko_mcp |
source_info | eurisko_mcp |
source_schema | eurisko_mcp |
source_query | eurisko_mcp |
source_execute | eurisko_mcp |