Skip to main content

MIPRO: Multi-Instruction Prompt Optimization

MIPRO uses Bayesian optimization (TPE) to jointly optimize instructions and few-shot demonstrations for multi-stage LLM programs.

When to Use

  • Instruction-following tasks with clear structure
  • Tasks where few-shot examples improve performance
  • When you want faster convergence than genetic methods
  • When demo selection matters

Config Reference

[prompt_learning]
algorithm = "mipro"
task_app_url = "https://your-tunnel.trycloudflare.com"
task_app_api_key = "$ENVIRONMENT_API_KEY"
task_app_id = "your-task"

[prompt_learning.initial_prompt]
id = "my_prompt"
name = "My MIPRO Prompt"

[[prompt_learning.initial_prompt.messages]]
role = "system"
pattern = "You are a classifier."
order = 0

[[prompt_learning.initial_prompt.messages]]
role = "user"
pattern = "{query}"
order = 1

[prompt_learning.policy]
model = "gpt-4o-mini"
provider = "openai"
temperature = 0.0
max_completion_tokens = 128

[prompt_learning.mipro]
env_name = "my-task"
num_iterations = 20
num_evaluations_per_iteration = 5
batch_size = 32
max_concurrent = 20
meta_model = "gpt-4o-mini"
meta_model_provider = "openai"
few_shot_score_threshold = 0.8
proposer_effort = "LOW"
proposer_output_tokens = "FAST"

# Seed pools
bootstrap_train_seeds = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
online_pool = [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
test_pool = [20, 21, 22, 23, 24]

[prompt_learning.mipro.tpe]
gamma = 0.25
n_candidates = 32
n_startup_trials = 5
epsilon = 0.1
alpha = 1.0

[prompt_learning.mipro.demo]
max_few_shot_examples = 3
sets_per_size = 4
include_empty = true

[prompt_learning.mipro.grounding]
n = 8
temperature = 0.7
max_tokens = 600

[prompt_learning.mipro.meta_update]
enabled = true
every_iterations = 3
topk_success = 3
topk_failure = 3
validate_on_batch = 16
keep_k = 8
dedup_token_overlap = 0.8
regen_temperature_decay = 0.95

Top-Level Parameters

ParameterTypeDefaultDescription
algorithmstring-Must be "mipro"
task_app_urlstring-URL of your task app (tunnel URL)
task_app_api_keystring-Environment API key for auth
task_app_idstring-Identifier for your task

MIPRO Section [prompt_learning.mipro]

ParameterTypeDefaultDescription
env_namestring"banking77"Environment/task name
num_iterationsint20TPE optimization iterations
num_evaluations_per_iterationint5Evaluations per iteration
batch_sizeint32Batch size for evaluation
max_concurrentint20Max concurrent rollouts
meta_modelstring"gpt-4o-mini"Model for instruction generation
meta_model_providerstring"openai"Provider for meta model
meta_model_inference_urlstringnullCustom inference URL
few_shot_score_thresholdfloat0.8Threshold for demo selection
proposer_effortstring"LOW"Model quality: "LOW_CONTEXT", "LOW", "MEDIUM", "HIGH"
proposer_output_tokensstring"FAST"Token limit: "RAPID", "FAST", "SLOW"
metapromptstringnullCustom metaprompt
max_wall_clock_secondsfloatnullMax runtime in seconds
max_total_tokensintnullMax tokens across all rollouts
max_token_limitintnullTotal token budget
max_spend_usdfloatnullMaximum spend in USD
token_counting_modelstring"gpt-4"Model for token estimation
enforce_token_limitbooltrueHalt if limit exceeded

Seed Pools

ParameterTypeDescription
bootstrap_train_seedslist[int]Seeds for initial instruction generation
online_poollist[int]Seeds for TPE optimization
test_poollist[int]Held-out seeds for final evaluation
val_seedslist[int]Seeds for top-K validation
reference_poollist[int]Seeds for meta-prompt context

TPE Config [prompt_learning.mipro.tpe]

ParameterTypeDefaultDescription
gammafloat0.25Quantile for good/bad split
n_candidatesint32Candidates for Expected Improvement
n_startup_trialsint5Random trials before TPE
epsilonfloat0.1Exploration probability
alphafloat1.0KDE smoothing parameter

Demo Config [prompt_learning.mipro.demo]

ParameterTypeDefaultDescription
max_few_shot_examplesint3Max demos in prompt
sets_per_sizeint4Demo sets per size
include_emptybooltrueInclude zero-shot option

Grounding Config [prompt_learning.mipro.grounding]

ParameterTypeDefaultDescription
nint8Number of instruction proposals
temperaturefloat0.7LLM temperature for proposals
max_tokensint600Max tokens per proposal

Meta-Update Config [prompt_learning.mipro.meta_update]

ParameterTypeDefaultDescription
enabledbooltrueEnable periodic regeneration
every_iterationsint3Regenerate every N iterations
topk_successint3Top success examples for grounding
topk_failureint3Top failure examples for grounding
validate_on_batchint16Batch size for validation
keep_kint8Max instruction variants to keep
dedup_token_overlapfloat0.8Deduplication threshold
regen_temperature_decayfloat0.95Temperature decay per update

Policy Config [prompt_learning.policy]

ParameterTypeDefaultDescription
modelstring-Model name (e.g., "gpt-4o-mini")
providerstring-Provider: "openai", "groq", "synth"
temperaturefloat0.0Sampling temperature
max_completion_tokensint128Max output tokens
inference_modestring"synth_hosted"Inference mode

Returns

from synth_ai.sdk.api.train.prompt_learning import PromptLearningJob

job = PromptLearningJob.from_config("mipro.toml")
job.submit()
result = job.poll_until_complete()

# Get results
results = job.get_results()
print(f"Best Score: {results['best_score']}")

# Get best prompt text
best_prompt = job.get_best_prompt_text(rank=1)
print(best_prompt)

Results Structure

{
    "best_prompt": {...},     # Optimized instruction + selected demos
    "best_score": 0.92,       # Accuracy on validation
    "top_prompts": [...],     # Top K configurations by score
    "optimized_candidates": [...],  # All TPE candidates
    "attempted_candidates": [...],  # All evaluated candidates
    "validation_results": {...},    # Per-seed validation scores
}

Download via CLI

# Download best prompt as JSON
uvx synth-ai artifacts download pl_71c12c4c7c474c34

# Download as YAML
uvx synth-ai artifacts download pl_71c12c4c7c474c34 --format yaml

# Save to file
uvx synth-ai artifacts download pl_71c12c4c7c474c34 --output prompt.json