perplexity-deploy-integration
Instructions and configuration patterns for deploying applications using the Perplexity Sonar API to major cloud platforms.
Install
mkdir -p .claude/skills/perplexity-deploy-integration && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/8031" && unzip -o skill.zip -d .claude/skills/perplexity-deploy-integration && rm skill.zipInstalls to .claude/skills/perplexity-deploy-integration
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.
Deploy Perplexity Sonar API integrations to Vercel, Cloud Run, and Docker.Key capabilities
- →Deploy Perplexity integrations to Vercel Edge
- →Configure Cloud Run containers with secret management
- →Implement Redis caching for search results
- →Set up health check endpoints for production monitoring
- →Manage environment variables for production workloads
How it works
The skill provides deployment configurations for serverless and containerized environments, including secure secret injection and caching strategies.
Inputs & outputs
When to use perplexity-deploy-integration
- →Deploying AI apps to Vercel Edge
- →Configuring secrets for cloud platforms
- →Setting up Perplexity containers
- →Managing production environment variables
About this skill
Perplexity Deploy Integration
Overview
Deploy applications using Perplexity Sonar API to edge and server platforms. Perplexity's OpenAI-compatible endpoint at https://api.perplexity.ai/chat/completions works from any platform that can make HTTPS requests.
Prerequisites
- Perplexity API key stored in
PERPLEXITY_API_KEY - Platform CLI installed (vercel, gcloud, or docker)
- Application tested locally
Instructions
Step 1: Vercel Edge Function
// api/search.ts
import OpenAI from "openai";
export const config = { runtime: "edge" };
const perplexity = new OpenAI({
apiKey: process.env.PERPLEXITY_API_KEY!,
baseURL: "https://api.perplexity.ai",
});
export default async function handler(req: Request) {
const { query, model = "sonar", stream = false } = await req.json();
if (stream) {
const response = await perplexity.chat.completions.create({
model,
messages: [{ role: "user", content: query }],
stream: true,
max_tokens: 2048,
});
return new Response(response.toReadableStream(), {
headers: { "Content-Type": "text/event-stream" },
});
}
const response = await perplexity.chat.completions.create({
model,
messages: [{ role: "user", content: query }],
max_tokens: 2048,
});
return Response.json({
answer: response.choices[0].message.content,
citations: (response as any).citations || [],
model: response.model,
});
}
set -euo pipefail
# Deploy to Vercel
vercel env add PERPLEXITY_API_KEY production
vercel deploy --prod
Step 2: Cloud Run with Redis Cache
// server.ts
import express from "express";
import OpenAI from "openai";
import { createClient } from "redis";
import { createHash } from "crypto";
const app = express();
app.use(express.json());
const perplexity = new OpenAI({
apiKey: process.env.PERPLEXITY_API_KEY!,
baseURL: "https://api.perplexity.ai",
});
const redis = createClient({ url: process.env.REDIS_URL });
await redis.connect();
app.post("/api/search", async (req, res) => {
const { query, model = "sonar" } = req.body;
const cacheKey = `pplx:${createHash("sha256").update(`${model}:${query}`).digest("hex")}`;
// Check cache first
const cached = await redis.get(cacheKey);
if (cached) {
return res.json({ ...JSON.parse(cached), cached: true });
}
const response = await perplexity.chat.completions.create({
model,
messages: [{ role: "user", content: query }],
max_tokens: 2048,
});
const result = {
answer: response.choices[0].message.content,
citations: (response as any).citations || [],
model: response.model,
tokens: response.usage?.total_tokens,
};
// Cache for 1 hour
await redis.setEx(cacheKey, 3600, JSON.stringify(result));
res.json(result);
});
app.listen(8080);
set -euo pipefail
# Deploy to Cloud Run
gcloud secrets create perplexity-api-key --data-file=<(echo -n "$PERPLEXITY_API_KEY")
gcloud run deploy perplexity-search \
--source . \
--set-secrets=PERPLEXITY_API_KEY=perplexity-api-key:latest \
--port=8080 \
--allow-unauthenticated
Step 3: Docker
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --production
COPY . .
RUN npm run build
ENV NODE_ENV=production
EXPOSE 8080
CMD ["node", "dist/server.js"]
Step 4: Vercel Configuration
{
"functions": {
"api/search.ts": {
"maxDuration": 30
}
}
}
Step 5: Health Check
app.get("/health", async (req, res) => {
const start = Date.now();
try {
await perplexity.chat.completions.create({
model: "sonar",
messages: [{ role: "user", content: "ping" }],
max_tokens: 5,
});
res.json({ status: "healthy", latencyMs: Date.now() - start });
} catch {
res.status(503).json({ status: "unhealthy", latencyMs: Date.now() - start });
}
});
Error Handling
| Issue | Cause | Solution |
|---|---|---|
| Edge function timeout | sonar-pro takes >30s | Use sonar or increase maxDuration |
| Cache stale for news | TTL too long | Use search_recency_filter + shorter TTL |
| API key invalid after deploy | Wrong secret reference | Verify vercel env ls or gcloud secrets |
| Stream interrupted | Client disconnect | Handle abort signal gracefully |
Output
- Deployed API endpoint serving Perplexity search
- Cached responses with configurable TTL
- Health check endpoint
- Platform-specific secret management
Resources
Next Steps
For multi-environment setup, see perplexity-multi-env-setup.
When not to use it
- →When the application requires long-running processes exceeding platform timeouts
- →When local development is not yet completed
Prerequisites
Limitations
- →Edge functions may timeout if sonar-pro processing exceeds 30 seconds
- →Requires platform-specific CLI tools
How it compares
It provides platform-specific deployment patterns and secret management workflows rather than generic deployment instructions.
Compared to similar skills
perplexity-deploy-integration side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| perplexity-deploy-integration (this skill) | 0 | 27d | Review | Intermediate |
| cloudflare-manager | 25 | 9mo | Review | Intermediate |
| railway-cli-management | 9 | 8mo | Review | Intermediate |
| azure-functions | 10 | 5mo | Review | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by jeremylongshore
View all by jeremylongshore →You might also like
cloudflare-manager
qdhenry
Comprehensive Cloudflare account management for deploying Workers, KV Storage, R2, Pages, DNS, and Routes. Use when deploying cloudflare services, managing worker containers, configuring KV/R2 storage, or setting up DNS/routing. Requires CLOUDFLARE_API_KEY in .env and Bun runtime with dependencies installed.
railway-cli-management
CaptainCrouton89
Deploy, manage services, view logs, and configure Railway infrastructure. Use when deploying to Railway, managing environment variables, viewing deployment logs, scaling services, or managing volumes.
azure-functions
aj-geddes
Create serverless functions on Azure with triggers, bindings, authentication, and monitoring. Use for event-driven computing without managing infrastructure.
nuxthub-migration
onmax
Use when migrating NuxtHub projects or when user mentions NuxtHub Admin sunset, GitHub Actions deployment removal, self-hosting NuxtHub, or upgrading to v1/nightly. Covers v0.9.X self-hosting (stable) and v1/nightly multi-cloud (experimental, database/blob not ready).
deployment-pipeline-design
wshobson
Design multi-stage CI/CD pipelines with approval gates, security checks, and deployment orchestration. Use when architecting deployment workflows, setting up continuous delivery, or implementing GitOps practices.
terraform-module-library
wshobson
Build reusable Terraform modules for AWS, Azure, and GCP infrastructure following infrastructure-as-code best practices. Use when creating infrastructure modules, standardizing cloud provisioning, or implementing reusable IaC components.