perplexity-multi-env-setup
A configuration strategy for managing Perplexity API keys and model routing across environment tiers.
Install
mkdir -p .claude/skills/perplexity-multi-env-setup && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/2755" && unzip -o skill.zip -d .claude/skills/perplexity-multi-env-setup && rm skill.zipInstalls to .claude/skills/perplexity-multi-env-setup
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Configure Perplexity Sonar API across development, staging, and productionKey capabilities
- →Define environment-specific configurations for Perplexity API
- →Control allowed models (sonar vs sonar-pro) per environment
- →Set rate limits and cost caps for development, staging, and production
- →Integrate with secret managers for production API keys
- →Route models based on query depth (quick or deep)
How it works
The skill uses an environment resolver to load configurations based on the current environment. It then applies environment-specific settings for API keys, models, rate limits, and cost caps.
Inputs & outputs
When to use perplexity-multi-env-setup
- →Isolate Perplexity API keys by environment
- →Apply model cost caps per environment
- →Configure environment-specific search limits
- →Standardize API integration across deployment stages
About this skill
Perplexity Multi-Environment Setup
Overview
Configure Perplexity Sonar API across dev/staging/prod. Key decisions per environment: which models are allowed (sonar vs sonar-pro), rate limits, and cost caps. All environments use the same base URL (https://api.perplexity.ai) but different API keys with different budget limits.
Environment Strategy
| Environment | Model | Rate Limit | Key Source | Monthly Budget |
|---|---|---|---|---|
| Development | sonar only | 5 RPM self-imposed | .env.local | $10 |
| Staging | sonar only | 20 RPM | CI secrets | $50 |
| Production | sonar + sonar-pro | 50 RPM | Secret manager | $500+ |
Prerequisites
- Separate Perplexity API keys per environment
openaipackage installed- Secret management (env files for dev, vault/KMS for prod)
Instructions
Step 1: Configuration Structure
config/
perplexity/
base.ts # OpenAI client + base URL
development.ts # Dev: sonar only, low limits
staging.ts # Staging: sonar only, moderate limits
production.ts # Prod: full model access
index.ts # Environment resolver
Step 2: Base Configuration
// config/perplexity/base.ts
import OpenAI from "openai";
export const PERPLEXITY_BASE_URL = "https://api.perplexity.ai";
export function createPerplexityClient(apiKey: string): OpenAI {
if (!apiKey) throw new Error("Perplexity API key is required");
if (!apiKey.startsWith("pplx-")) throw new Error("Invalid Perplexity API key format");
return new OpenAI({ apiKey, baseURL: PERPLEXITY_BASE_URL });
}
Step 3: Environment Configs
// config/perplexity/development.ts
export const devConfig = {
apiKey: process.env.PERPLEXITY_API_KEY!,
defaultModel: "sonar" as const,
deepModel: "sonar" as const, // No sonar-pro in dev (cost)
maxTokens: 512,
maxConcurrentRequests: 1,
cacheTTLMs: 24 * 3600_000, // Long cache in dev
};
// config/perplexity/staging.ts
export const stagingConfig = {
apiKey: process.env.PERPLEXITY_API_KEY_STAGING!,
defaultModel: "sonar" as const,
deepModel: "sonar" as const, // Keep sonar in staging
maxTokens: 1024,
maxConcurrentRequests: 2,
cacheTTLMs: 4 * 3600_000,
};
// config/perplexity/production.ts
export const productionConfig = {
apiKey: process.env.PERPLEXITY_API_KEY_PROD!,
defaultModel: "sonar" as const, // Fast queries use sonar
deepModel: "sonar-pro" as const, // Research queries use sonar-pro
maxTokens: 4096,
maxConcurrentRequests: 10,
cacheTTLMs: 1 * 3600_000, // Shorter cache in prod (freshness)
};
Step 4: Environment Resolver
// config/perplexity/index.ts
import { createPerplexityClient } from "./base";
import { devConfig } from "./development";
import { stagingConfig } from "./staging";
import { productionConfig } from "./production";
type SearchDepth = "quick" | "deep";
const configs = {
development: devConfig,
staging: stagingConfig,
production: productionConfig,
};
export function getConfig() {
const env = process.env.NODE_ENV || "development";
const config = configs[env as keyof typeof configs];
if (!config) throw new Error(`Unknown environment: ${env}`);
if (!config.apiKey) throw new Error(`PERPLEXITY_API_KEY not set for ${env}`);
return config;
}
export function getClient() {
return createPerplexityClient(getConfig().apiKey);
}
export function getModelForDepth(depth: SearchDepth): string {
const cfg = getConfig();
return depth === "deep" ? cfg.deepModel : cfg.defaultModel;
}
Step 5: Usage with Environment-Aware Search
// lib/search.ts
import { getClient, getModelForDepth, getConfig } from "../config/perplexity";
export async function search(query: string, depth: "quick" | "deep" = "quick") {
const client = getClient();
const model = getModelForDepth(depth);
const config = getConfig();
const result = await client.chat.completions.create({
model,
messages: [
{ role: "system", content: "Provide accurate, well-sourced answers." },
{ role: "user", content: query },
],
max_tokens: depth === "deep" ? config.maxTokens : Math.min(512, config.maxTokens),
});
return {
answer: result.choices[0].message.content,
citations: (result as any).citations || [],
model,
environment: process.env.NODE_ENV,
usage: result.usage,
};
}
Step 6: Secret Manager Integration (Production)
set -euo pipefail
# Google Cloud Secret Manager
gcloud secrets create perplexity-api-key-prod \
--data-file=<(echo -n "$PERPLEXITY_API_KEY_PROD")
# AWS Secrets Manager
aws secretsmanager create-secret \
--name perplexity/api-key-prod \
--secret-string "$PERPLEXITY_API_KEY_PROD"
# HashiCorp Vault
vault kv put secret/perplexity api_key="$PERPLEXITY_API_KEY_PROD"
Error Handling
| Issue | Cause | Solution |
|---|---|---|
401 in staging | Wrong API key for environment | Verify PERPLEXITY_API_KEY_STAGING |
429 in dev | Exceeding self-imposed limit | Add request queuing |
| sonar-pro in dev | Config not restricting models | Set deepModel: "sonar" in dev config |
| High dev costs | Using production config locally | Ensure NODE_ENV=development is set |
Output
- Environment-specific Perplexity configurations
- Model routing by environment and query depth
- Secret manager integration for production keys
- Cost controls per environment
Resources
Next Steps
For deployment configuration, see perplexity-deploy-integration.
When not to use it
- →When only a single environment is used for Perplexity API integration
- →When Perplexity API keys and configurations do not need to be isolated
Prerequisites
Limitations
- →The skill requires separate Perplexity API keys for each environment
- →The skill requires setting deepModel: "sonar" in dev config to restrict models
- →The skill requires ensuring NODE_ENV=development is set to avoid high dev costs
How it compares
This skill provides a structured approach to manage Perplexity API configurations across multiple environments, unlike a single, hardcoded configuration.
Compared to similar skills
perplexity-multi-env-setup side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| perplexity-multi-env-setup (this skill) | 2 | 27d | Review | Intermediate |
| deepgram-performance-tuning | 3 | 27d | Review | Intermediate |
| graphql | 6 | 6mo | No flags | Advanced |
| guidewire-sdk-patterns | 2 | 27d | Review | Advanced |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by jeremylongshore
View all by jeremylongshore →You might also like
deepgram-performance-tuning
jeremylongshore
Optimize Deepgram API performance for faster transcription and lower latency. Use when improving transcription speed, reducing latency, or optimizing audio processing pipelines. Trigger with phrases like "deepgram performance", "speed up deepgram", "optimize transcription", "deepgram latency", "deepgram faster".
graphql
davila7
GraphQL gives clients exactly the data they need - no more, no less. One endpoint, typed schema, introspection. But the flexibility that makes it powerful also makes it dangerous. Without proper controls, clients can craft queries that bring down your server. This skill covers schema design, resolvers, DataLoader for N+1 prevention, federation for microservices, and client integration with Apollo/urql. Key insight: GraphQL is a contract. The schema is the API documentation. Design it carefully.
guidewire-sdk-patterns
jeremylongshore
Master Guidewire SDK patterns including Digital SDK, REST API Client, and Gosu best practices. Use when implementing integrations, building frontends with Jutro, or writing server-side Gosu code. Trigger with phrases like "guidewire sdk", "digital sdk", "jutro sdk", "guidewire patterns", "gosu best practices", "rest api client".
groq-performance-tuning
jeremylongshore
Optimize Groq API performance with caching, batching, and connection pooling. Use when experiencing slow API responses, implementing caching strategies, or optimizing request throughput for Groq integrations. Trigger with phrases like "groq performance", "optimize groq", "groq latency", "groq caching", "groq slow", "groq batch".
openrouter-streaming-setup
jeremylongshore
Implement streaming responses with OpenRouter. Use when building real-time chat interfaces or reducing time-to-first-token. Trigger with phrases like 'openrouter streaming', 'openrouter sse', 'stream response', 'real-time openrouter'.
serving-llms-vllm
davila7
Serves LLMs with high throughput using vLLM's PagedAttention and continuous batching. Use when deploying production LLM APIs, optimizing inference latency/throughput, or serving models with limited GPU memory. Supports OpenAI-compatible endpoints, quantization (GPTQ/AWQ/FP8), and tensor parallelism.