Skip to main content
Try prompt optimization for free with our free tier. Perfect for experimentation and learning before committing to paid usage.

How It Works

  1. Add free_tier = true to your training config
  2. Set proposer_effort to LOW or MEDIUM (required for free tier)
  3. Your job runs using cost-effective models automatically selected by the backend
  4. Usage counts against your organization’s free tier limits
  5. When limits are reached, simply remove free_tier = true to run as paid

Eligible Proposer Effort Levels

Free tier jobs must use one of the following proposer_effort levels:
LevelDescription
LOW_CONTEXTFastest and cheapest. Uses minimal context for proposals.
LOWGood balance of speed and quality. Default for free tier.
MEDIUMHigher quality proposals with moderate cost.
proposer_effort = "HIGH" is not available on free tier. If you need higher quality proposals, remove free_tier = true to run as a paid job.

Rate Limits (Per Organization)

ResourceDaily LimitMonthly Limit
Jobs550
Rollouts2,00020,000
Proposals4004,000
Spend$20$100
These limits are per organization, not per user. All users in your organization share the same free tier quota.

Usage

Basic Example (GEPA)

Add free_tier = true to your training config:
[prompt_learning]
algorithm = "gepa"
task_app_url = "https://your-task-app.example.com"
free_tier = true  # Enable free tier

[prompt_learning.policy]
model = "openai/gpt-oss-20b"
provider = "groq"

[prompt_learning.gepa]
env_name = "your-task"
proposer_effort = "LOW"  # Required: LOW_CONTEXT, LOW, or MEDIUM

[prompt_learning.gepa.rollout]
budget = 500

[prompt_learning.gepa.evaluation]
seeds = { start = 0, end = 100 }

# ... rest of your config

MIPRO Example

[prompt_learning]
algorithm = "mipro"
task_app_url = "https://your-task-app.example.com"
free_tier = true

[prompt_learning.policy]
model = "openai/gpt-oss-20b"
provider = "groq"

[prompt_learning.mipro]
env_name = "your-task"
proposer_effort = "MEDIUM"  # Higher quality proposals (still free tier eligible)
num_iterations = 10
batch_size = 32

Running with CLI

synth train --config my-config.toml
The CLI will automatically detect free_tier = true and validate your configuration.

What Happens When Limits Are Exceeded

When you exceed your free tier limits, new jobs are rejected with a clear error message:
{
  "error": "free_tier_limit_exceeded",
  "message": "Monthly free tier job limit (50) exceeded.",
  "usage": {
    "jobs_this_month": 50,
    "rollouts_this_month": 15000,
    "spend_this_month_usd": 45.00
  },
  "hint": "Remove 'free_tier = true' from your config to run as a paid job with no limits."
}
To continue:
  1. Wait for limits to reset (daily limits reset at midnight UTC, monthly limits roll over 31 days)
  2. Remove free_tier = true from your config to run as a paid job

Upgrading to Paid

Simply remove free_tier = true from your config:
[prompt_learning]
algorithm = "gepa"
# free_tier = true  # Remove or comment out this line

[prompt_learning.policy]
model = "gpt-4o"  # Use any model you want
provider = "openai"

[prompt_learning.gepa]
proposer_effort = "HIGH"  # Unlock best proposer models
Paid jobs have:
  • No rate limits
  • Access to all proposer effort levels including HIGH
  • Priority scheduling

FAQ

No! Free tier is available to all signed-in users. You only need payment info when you want to run paid jobs.
Free tier supports LOW_CONTEXT, LOW, and MEDIUM proposer effort levels. If you set proposer_effort = "HIGH" with free_tier = true, your job will be rejected. Either use a lower effort level or remove free_tier = true to run as paid.
Jobs are not interrupted mid-execution. Limits are checked at job start time. If your job exceeds spend limits during execution, it will complete but count against your limits.
Contact us at support@synth.com to discuss custom limits for your organization.
No, both algorithms share the same free tier limits. The limits are based on resource usage (jobs, rollouts, proposals, spend), not algorithm type.