Presets
Create reusable configurations for consistent AI responses across your applications
What are Presets?
Presets are saved configurations that include model settings, system prompts, parameters, and routing rules. They ensure consistency across your application and make it easy to manage different AI behaviors.
Save Configurations
Store complete model settings for reuse
Share Across Teams
Collaborate with shared preset libraries
Version Control
Track changes and roll back when needed
Creating Presets
Create presets via API or dashboard to standardize your AI configurations:
import requests
# Create a customer support preset
preset = {
"name": "customer-support-agent",
"description": "Friendly and helpful customer support assistant",
"config": {
"model": "gpt-4-turbo-preview",
"temperature": 0.7,
"max_tokens": 500,
"system_prompt": """You are a friendly customer support agent for TechCorp.
Always be helpful, empathetic, and professional.
If you don't know something, offer to escalate to a human agent.""",
"parameters": {
"top_p": 0.9,
"frequency_penalty": 0.3,
"presence_penalty": 0.3
},
"routing": {
"strategy": "quality-optimized",
"fallback_models": ["claude-3-opus", "gpt-4"],
"provider_preference": ["openai", "anthropic"]
},
"features": {
"streaming": True,
"log_level": "info",
"pii_detection": True,
"response_format": "text"
}
},
"metadata": {
"team": "support",
"version": "1.0",
"tags": ["customer-service", "production"]
}
}
response = requests.post(
"https://api.parrotrouter.com/v1/presets",
headers={
"Authorization": "Bearer your-api-key",
"Content-Type": "application/json"
},
json=preset
)
preset_data = response.json()
print(f"Preset created: {preset_data['id']}")
print(f"Preset URL: {preset_data['url']}")
Using Presets
Apply presets to your requests with a single parameter:
Basic Usage
from openai import OpenAI
client = OpenAI(
base_url="https://api.parrotrouter.com/v1",
api_key="your-api-key"
)
# Use preset by ID
response = client.chat.completions.create(
preset="customer-support-agent",
messages=[{
"role": "user",
"content": "I can't log into my account"
}]
)
# Use preset by name
response = client.chat.completions.create(
preset="@support/customer-agent:v1.0",
messages=[{
"role": "user",
"content": "How do I reset my password?"
}]
)
# Override preset settings
response = client.chat.completions.create(
preset="customer-support-agent",
messages=[{
"role": "user",
"content": "Tell me a joke" # This might be blocked by preset
}],
temperature=0.9, # Override preset temperature
max_tokens=100 # Override preset max_tokens
)
Preset Inheritance
# Create a base preset
base_preset = {
"name": "company-base",
"config": {
"model": "gpt-4-turbo-preview",
"temperature": 0.7,
"system_prompt": "You work for TechCorp. Always be professional.",
"features": {
"pii_detection": True,
"log_level": "info"
}
}
}
# Create specialized presets that inherit from base
support_preset = {
"name": "support-agent",
"extends": "company-base",
"config": {
"system_prompt": """{{parent.system_prompt}}
You are a customer support specialist. Be empathetic and helpful.""",
"max_tokens": 500,
"parameters": {
"frequency_penalty": 0.3
}
}
}
sales_preset = {
"name": "sales-agent",
"extends": "company-base",
"config": {
"system_prompt": """{{parent.system_prompt}}
You are a sales representative. Focus on benefits and value.""",
"temperature": 0.8,
"max_tokens": 1000
}
}
Preset Templates
Use our pre-built templates or create your own:
Code Assistant
Optimized for code generation and debugging
{
"name": "code-assistant",
"config": {
"model": "claude-3-opus",
"temperature": 0.2,
"system_prompt": "You are an expert programmer...",
"parameters": {
"top_p": 0.95,
"stop_sequences": ["```", "</code>"]
},
"features": {
"response_format": "markdown",
"syntax_highlighting": true
}
}
}
Content Writer
Configured for creative writing tasks
{
"name": "content-writer",
"config": {
"model": "gpt-4-turbo-preview",
"temperature": 0.8,
"system_prompt": "You are a creative writer...",
"parameters": {
"top_p": 0.9,
"frequency_penalty": 0.5,
"presence_penalty": 0.5
},
"max_tokens": 2000
}
}
Data Analyst
Structured for data analysis and insights
{
"name": "data-analyst",
"config": {
"model": "gpt-4-turbo-preview",
"temperature": 0.3,
"system_prompt": "You are a data analyst...",
"features": {
"response_format": "json_object",
"structured_output": true
}
}
}
Translator
Fine-tuned for accurate translations
{
"name": "translator",
"config": {
"model": "gpt-3.5-turbo",
"temperature": 0.1,
"system_prompt": "You are a professional translator...",
"parameters": {
"top_p": 1.0
}
}
}
Dynamic Presets
Create presets with variables for dynamic configuration:
# Create preset with variables
dynamic_preset = {
"name": "multi-language-support",
"config": {
"model": "gpt-4-turbo-preview",
"system_prompt": """You are a {{role}} assistant.
Respond in {{language}}.
Your tone should be {{tone}}.
{{#if company_info}}
Company details: {{company_info}}
{{/if}}""",
"temperature": "{{temperature}}",
"max_tokens": "{{max_tokens}}"
},
"variables": {
"role": {
"type": "string",
"default": "helpful",
"enum": ["support", "sales", "technical"]
},
"language": {
"type": "string",
"default": "English",
"required": true
},
"tone": {
"type": "string",
"default": "professional"
},
"temperature": {
"type": "number",
"default": 0.7,
"min": 0,
"max": 1
},
"max_tokens": {
"type": "integer",
"default": 500
},
"company_info": {
"type": "string",
"required": false
}
}
}
# Use dynamic preset
response = client.chat.completions.create(
preset="multi-language-support",
messages=[{"role": "user", "content": "Hello!"}],
preset_variables={
"role": "support",
"language": "Spanish",
"tone": "friendly",
"temperature": 0.8,
"company_info": "TechCorp - Leading software solutions"
}
)
Preset Management
Version Control
# Create new version
response = requests.post(
f"https://api.parrotrouter.com/v1/presets/{preset_id}/versions",
headers={"Authorization": "Bearer your-api-key"},
json={
"config": updated_config,
"changelog": "Improved error handling prompts"
}
)
# List versions
versions = requests.get(
f"https://api.parrotrouter.com/v1/presets/{preset_id}/versions",
headers={"Authorization": "Bearer your-api-key"}
).json()
# Rollback to previous version
rollback = requests.post(
f"https://api.parrotrouter.com/v1/presets/{preset_id}/rollback",
headers={"Authorization": "Bearer your-api-key"},
json={"version": "1.0"}
)
Access Control
# Share preset with team
response = requests.post(
f"https://api.parrotrouter.com/v1/presets/{preset_id}/share",
headers={"Authorization": "Bearer your-api-key"},
json={
"team_id": "team-123",
"permission": "read", # or "write", "admin"
"expiry": "2024-12-31"
}
)
# Make preset public
response = requests.patch(
f"https://api.parrotrouter.com/v1/presets/{preset_id}",
headers={"Authorization": "Bearer your-api-key"},
json={
"visibility": "public",
"license": "MIT"
}
}
Analytics
# Get preset usage analytics
analytics = requests.get(
f"https://api.parrotrouter.com/v1/presets/{preset_id}/analytics",
headers={"Authorization": "Bearer your-api-key"},
params={
"start_date": "2024-01-01",
"end_date": "2024-01-31"
}
).json()
print(f"Total uses: {analytics['total_uses']}")
print(f"Unique users: {analytics['unique_users']}")
print(f"Avg tokens: {analytics['avg_tokens']}")
print(f"Success rate: {analytics['success_rate']}%")
# Most common overrides
for override in analytics['common_overrides']:
print(f"{override['parameter']}: {override['count']} times")
Best Practices
- 1.Start with Templates
Use pre-built templates and customize as needed
- 2.Version Your Changes
Always create new versions instead of modifying production presets
- 3.Use Variables for Flexibility
Make presets dynamic with variables instead of creating many similar ones
- 4.Monitor Usage Patterns
Track how presets are used to optimize configurations