๐Ÿ“… let's chat! explore the endless possibilities creating industries that don't exist. click here

mistral-multi-env-setup

Configure Mistral AI across development, staging, and production environments. Use when setting up multi-environment deployments, configuring per-environment secrets, or implementing environment-specific Mistral AI configurations. Trigger with phrases like "mistral environments", "mistral staging", "mistral dev prod", "mistral environment setup", "mistral config by env". allowed-tools: Read, Write, Edit, Bash(aws:*), Bash(gcloud:*), Bash(vault:*) version: 1.0.0 license: MIT author: Jeremy Longshore <jeremy@intentsolutions.io>

Allowed Tools

No tools specified

Provided by Plugin

mistral-pack

Claude Code skill pack for Mistral AI (24 skills)

saas packs v1.0.0
View Plugin

Installation

This skill is included in the mistral-pack plugin:

/plugin install mistral-pack@claude-code-plugins-plus

Click to copy

Instructions

# Mistral AI Multi-Environment Setup ## Overview Configure Mistral AI across development, staging, and production environments. ## Prerequisites - Separate Mistral AI API keys per environment - Secret management solution (Vault, AWS Secrets Manager, GCP Secret Manager) - CI/CD pipeline with environment variables - Environment detection in application ## Environment Strategy | Environment | Purpose | API Keys | Model Selection | |-------------|---------|----------|-----------------| | Development | Local dev | Test keys | mistral-small-latest | | Staging | Pre-prod testing | Staging keys | Same as prod | | Production | Live traffic | Production keys | Optimized selection | ## Instructions ### Step 1: Configuration Structure ``` config/ โ”œโ”€โ”€ mistral/ โ”‚ โ”œโ”€โ”€ base.ts # Shared configuration โ”‚ โ”œโ”€โ”€ development.ts # Dev overrides โ”‚ โ”œโ”€โ”€ staging.ts # Staging overrides โ”‚ โ””โ”€โ”€ production.ts # Prod overrides ``` ### Step 2: Base Configuration ```typescript // config/mistral/base.ts export const baseConfig = { defaultModel: 'mistral-small-latest', timeout: 30000, maxRetries: 3, cache: { enabled: true, ttlSeconds: 300, }, rateLimits: { requestsPerMinute: 60, tokensPerMinute: 500000, }, }; ``` ### Step 3: Environment-Specific Configs ```typescript // config/mistral/development.ts import { baseConfig } from './base'; export const developmentConfig = { ...baseConfig, apiKey: process.env.MISTRAL_API_KEY_DEV, debug: true, cache: { enabled: false, // Disable cache in dev for testing ttlSeconds: 60, }, rateLimits: { requestsPerMinute: 10, tokensPerMinute: 100000, }, }; ``` ```typescript // config/mistral/staging.ts import { baseConfig } from './base'; export const stagingConfig = { ...baseConfig, apiKey: process.env.MISTRAL_API_KEY_STAGING, debug: false, cache: { enabled: true, ttlSeconds: 300, }, }; ``` ```typescript // config/mistral/production.ts import { baseConfig } from './base'; export const productionConfig = { ...baseConfig, apiKey: process.env.MISTRAL_API_KEY_PROD, debug: false, timeout: 60000, maxRetries: 5, cache: { enabled: true, ttlSeconds: 600, }, }; ``` ### Step 4: Environment Detection ```typescript // config/mistral/index.ts import { developmentConfig } from './development'; import { stagingConfig } from './staging'; import { productionConfig } from './production'; type Environment = 'development' | 'staging' | 'production'; const configs = { development: developmentConfig, staging: stagingConfig, production: productionConfig, }; export function detectEnvironment(): Environment { const env = process.env.NODE_ENV || 'development'; if (env === 'production') return 'production'; if (env === 'staging' || process.env.VERCEL_ENV === 'preview') return 'staging'; return 'development'; } export function getMistralConfig() { const env = detectEnvironment(); const config = configs[env]; if (!config.apiKey) { throw new Error(`MISTRAL_API_KEY not set for environment: ${env}`); } return { ...config, environment: env, }; } ``` ### Step 5: Secret Management **Local Development (.env.local)** ```bash # .env.local (git-ignored) MISTRAL_API_KEY_DEV=your-dev-api-key ``` **GitHub Actions (secrets)** ```yaml # .github/workflows/deploy.yml jobs: deploy-staging: environment: staging env: MISTRAL_API_KEY_STAGING: ${{ secrets.MISTRAL_API_KEY_STAGING }} deploy-production: environment: production env: MISTRAL_API_KEY_PROD: ${{ secrets.MISTRAL_API_KEY_PROD }} ``` **AWS Secrets Manager** ```bash # Store secrets aws secretsmanager create-secret \ --name mistral/production/api-key \ --secret-string "your-api-key" # Retrieve in code aws secretsmanager get-secret-value \ --secret-id mistral/production/api-key ``` ```typescript import { SecretsManager } from '@aws-sdk/client-secrets-manager'; const sm = new SecretsManager({ region: 'us-east-1' }); async function getMistralApiKey(env: string): Promise { const { SecretString } = await sm.getSecretValue({ SecretId: `mistral/${env}/api-key`, }); return SecretString!; } ``` **GCP Secret Manager** ```bash # Store secret echo -n "your-api-key" | gcloud secrets create mistral-api-key-prod --data-file=- # Grant access gcloud secrets add-iam-policy-binding mistral-api-key-prod \ --member="serviceAccount:your-sa@project.iam.gserviceaccount.com" \ --role="roles/secretmanager.secretAccessor" ``` ```typescript import { SecretManagerServiceClient } from '@google-cloud/secret-manager'; const client = new SecretManagerServiceClient(); async function getMistralApiKey(env: string): Promise { const [version] = await client.accessSecretVersion({ name: `projects/my-project/secrets/mistral-api-key-${env}/versions/latest`, }); return version.payload?.data?.toString()!; } ``` ### Step 6: Environment Isolation ```typescript // Prevent accidental cross-environment operations function validateEnvironment(operation: string, requiredEnv: Environment): void { const currentEnv = detectEnvironment(); if (currentEnv !== requiredEnv) { throw new Error( `Operation "${operation}" requires ${requiredEnv} but running in ${currentEnv}` ); } } // Protect production-only operations function requireProduction(operation: string): void { validateEnvironment(operation, 'production'); } // Usage async function deployModel() { requireProduction('deployModel'); // Production-only code } ``` ### Step 7: Feature Flags by Environment ```typescript interface FeatureFlags { useNewModel: boolean; enableFunctionCalling: boolean; maxConcurrentRequests: number; } const featureFlags: Record = { development: { useNewModel: true, enableFunctionCalling: true, maxConcurrentRequests: 2, }, staging: { useNewModel: true, enableFunctionCalling: true, maxConcurrentRequests: 5, }, production: { useNewModel: false, // Gradual rollout enableFunctionCalling: true, maxConcurrentRequests: 10, }, }; export function getFeatureFlags(): FeatureFlags { const env = detectEnvironment(); return featureFlags[env]; } ``` ## Output - Multi-environment config structure - Environment detection logic - Secure secret management - Production safeguards enabled ## Error Handling | Issue | Cause | Solution | |-------|-------|----------| | Wrong environment | Missing NODE_ENV | Set environment variable | | Secret not found | Wrong secret path | Verify secret manager config | | Config validation | Invalid settings | Use Zod schema validation | | Cross-env leak | Missing guards | Add environment checks | ## Examples ### Quick Environment Check ```typescript const config = getMistralConfig(); console.log(`Running in ${config.environment}`); console.log(`Model: ${config.defaultModel}`); console.log(`Cache enabled: ${config.cache.enabled}`); ``` ### Vercel Environment Detection ```typescript function getVercelEnvironment(): Environment { const vercelEnv = process.env.VERCEL_ENV; if (vercelEnv === 'production') return 'production'; if (vercelEnv === 'preview') return 'staging'; return 'development'; } ``` ## Resources - [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/) - [GCP Secret Manager](https://cloud.google.com/secret-manager) - [12-Factor App Config](https://12factor.net/config) ## Next Steps For observability setup, see `mistral-observability`.

Skill file: plugins/saas-packs/mistral-pack/skills/mistral-multi-env-setup/SKILL.md