Skip to content

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