
Security News
Crates.io Implements Trusted Publishing Support
Crates.io adds Trusted Publishing support, enabling secure GitHub Actions-based crate releases without long-lived API tokens.
llm-prompt-optimizer
Advanced tools
A comprehensive framework for systematic A/B testing, optimization, and performance analytics of LLM prompts across multiple providers
A comprehensive framework for systematic A/B testing, optimization, and performance analytics of LLM prompts across multiple providers (OpenAI, Anthropic, Google, HuggingFace, local models).
Sherin Joseph Roy
pip install llm-prompt-optimizer
Or install from source:
git clone https://github.com/Sherin-SEF-AI/prompt-optimizer.git
cd prompt-optimizer
pip install -e .
from prompt_optimizer import PromptOptimizer
from prompt_optimizer.types import OptimizerConfig, ExperimentConfig, ProviderType
# Initialize the optimizer
config = OptimizerConfig(
database_url="sqlite:///prompt_optimizer.db",
default_provider=ProviderType.OPENAI,
api_keys={"openai": "your-api-key"}
)
optimizer = PromptOptimizer(config)
# Create an A/B test experiment
experiment_config = ExperimentConfig(
name="email_subject_test",
traffic_split={"control": 0.5, "variant": 0.5},
provider=ProviderType.OPENAI,
model="gpt-3.5-turbo"
)
experiment = optimizer.create_experiment(
name="Email Subject Line Test",
description="Testing different email subject line prompts",
variants=[
"Write an engaging subject line for: {topic}",
"Create a compelling email subject about: {topic}"
],
config=experiment_config
)
# Test prompts
result = await optimizer.test_prompt(
experiment_id=experiment.id,
user_id="user123",
input_data={"topic": "AI in healthcare"}
)
# Analyze results
analysis = optimizer.analyze_experiment(experiment.id)
print(f"Best variant: {analysis.best_variant}")
print(f"Confidence: {analysis.confidence_level:.2%}")
# List experiments
prompt-optimizer list-experiments
# Create experiment
prompt-optimizer create-experiment --name "Test" --variants "prompt1" "prompt2"
# Run analysis
prompt-optimizer analyze --experiment-id exp_123
# Optimize prompt
prompt-optimizer optimize --prompt "Your prompt here"
Start the server:
uvicorn prompt_optimizer.api.server:app --reload
Access the API at http://localhost:8000 and interactive docs at http://localhost:8000/docs.
prompt-optimizer/
├── core/ # Core optimization engine
├── testing/ # A/B testing framework
├── providers/ # LLM provider integrations
├── analytics/ # Performance analytics
├── optimization/ # Genetic algorithms, RLHF
├── storage/ # Database and caching
├── api/ # FastAPI server
├── cli/ # Command-line interface
├── visualization/ # Dashboards and charts
└── types.py # Type definitions
export PROMPT_OPTIMIZER_DATABASE_URL="postgresql://user:pass@localhost/prompt_opt"
export PROMPT_OPTIMIZER_REDIS_URL="redis://localhost:6379"
export OPENAI_API_KEY="your-openai-key"
export ANTHROPIC_API_KEY="your-anthropic-key"
export GOOGLE_API_KEY="your-google-key"
Create config.yaml
:
database:
url: "sqlite:///prompt_optimizer.db"
pool_size: 10
max_overflow: 20
redis:
url: "redis://localhost:6379"
ttl: 3600
providers:
openai:
api_key: "${OPENAI_API_KEY}"
default_model: "gpt-3.5-turbo"
anthropic:
api_key: "${ANTHROPIC_API_KEY}"
default_model: "claude-3-sonnet-20240229"
optimization:
max_iterations: 50
population_size: 20
mutation_rate: 0.1
crossover_rate: 0.8
testing:
default_significance_level: 0.05
min_sample_size: 100
max_duration_days: 14
# Create experiment for email subject lines
experiment = optimizer.create_experiment(
name="Email Subject Optimization",
description="Testing different email subject line prompts",
variants=[
"Subject: {topic} - You won't believe what we found!",
"Subject: Discover the latest in {topic}",
"Subject: {topic} insights that will change everything"
],
config=ExperimentConfig(
traffic_split={"v1": 0.33, "v2": 0.33, "v3": 0.34},
min_sample_size=50,
significance_level=0.05
)
)
# Run tests
for i in range(100):
result = await optimizer.test_prompt(
experiment_id=experiment.id,
user_id=f"user_{i}",
input_data={"topic": "artificial intelligence"}
)
# Analyze results
analysis = optimizer.analyze_experiment(experiment.id)
print(f"Best performing variant: {analysis.best_variant}")
# Optimize a customer service prompt
optimized = await optimizer.optimize_prompt(
base_prompt="Help the customer with their issue",
optimization_config=OptimizationConfig(
max_iterations=30,
target_metrics=[MetricType.QUALITY, MetricType.COST],
constraints={"max_tokens": 100}
)
)
print(f"Original: {optimized.original_prompt}")
print(f"Optimized: {optimized.optimized_prompt}")
print(f"Improvement: {optimized.improvement_score:.2%}")
from prompt_optimizer.analytics import QualityScorer
scorer = QualityScorer()
score = await scorer.score_response(
prompt="Explain machine learning",
response="Machine learning is a subset of AI that enables computers to learn from data."
)
print(f"Overall Score: {score.overall_score:.3f}")
print(f"Relevance: {score.relevance:.3f}")
print(f"Coherence: {score.coherence:.3f}")
print(f"Accuracy: {score.accuracy:.3f}")
Run the test suite:
# Install development dependencies
pip install -e ".[dev]"
# Run tests
pytest tests/
# Run with coverage
pytest --cov=prompt_optimizer tests/
# Run specific test
pytest tests/test_ab_testing.py::test_experiment_creation
git checkout -b feature/amazing-feature
git commit -m 'Add amazing feature'
git push origin feature/amazing-feature
This project is licensed under the MIT License - see the LICENSE file for details.
Made with ❤️ by Sherin Joseph Roy
FAQs
A comprehensive framework for systematic A/B testing, optimization, and performance analytics of LLM prompts across multiple providers
We found that llm-prompt-optimizer demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Crates.io adds Trusted Publishing support, enabling secure GitHub Actions-based crate releases without long-lived API tokens.
Research
/Security News
Undocumented protestware found in 28 npm packages disrupts UI for Russian-language users visiting Russian and Belarusian domains.
Research
/Security News
North Korean threat actors deploy 67 malicious npm packages using the newly discovered XORIndex malware loader.