Feature

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:

Create a Presetpython
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:

Dynamic Configurationpython
# 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

Related Features