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

mistral-local-dev-loop

Configure Mistral AI local development with hot reload and testing. Use when setting up a development environment, configuring test workflows, or establishing a fast iteration cycle with Mistral AI. Trigger with phrases like "mistral dev setup", "mistral local development", "mistral dev environment", "develop with mistral". allowed-tools: Read, Write, Edit, Bash(npm:*), Bash(pnpm:*), Grep 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 Local Dev Loop ## Overview Set up a fast, reproducible local development workflow for Mistral AI integrations. ## Prerequisites - Completed `mistral-install-auth` setup - Node.js 18+ with npm/pnpm - Code editor with TypeScript support - Git for version control ## Instructions ### Step 1: Create Project Structure ``` my-mistral-project/ โ”œโ”€โ”€ src/ โ”‚ โ”œโ”€โ”€ mistral/ โ”‚ โ”‚ โ”œโ”€โ”€ client.ts # Mistral client wrapper โ”‚ โ”‚ โ”œโ”€โ”€ config.ts # Configuration management โ”‚ โ”‚ โ”œโ”€โ”€ types.ts # TypeScript types โ”‚ โ”‚ โ””โ”€โ”€ utils.ts # Helper functions โ”‚ โ””โ”€โ”€ index.ts โ”œโ”€โ”€ tests/ โ”‚ โ”œโ”€โ”€ unit/ โ”‚ โ”‚ โ””โ”€โ”€ mistral.test.ts โ”‚ โ””โ”€โ”€ integration/ โ”‚ โ””โ”€โ”€ mistral.integration.test.ts โ”œโ”€โ”€ .env.local # Local secrets (git-ignored) โ”œโ”€โ”€ .env.example # Template for team โ”œโ”€โ”€ tsconfig.json โ”œโ”€โ”€ vitest.config.ts โ””โ”€โ”€ package.json ``` ### Step 2: Configure Environment ```bash # Create environment template cat > .env.example << 'EOF' MISTRAL_API_KEY=your-api-key-here MISTRAL_MODEL=mistral-small-latest LOG_LEVEL=debug EOF # Copy for local development cp .env.example .env.local # Add to .gitignore echo '.env.local' >> .gitignore echo '.env' >> .gitignore ``` ### Step 3: Setup Hot Reload **package.json** ```json { "scripts": { "dev": "tsx watch src/index.ts", "build": "tsc", "test": "vitest", "test:watch": "vitest --watch", "test:integration": "vitest run --config vitest.integration.config.ts", "lint": "eslint src --ext .ts", "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/node": "^20.0.0", "dotenv": "^16.0.0", "tsx": "^4.0.0", "typescript": "^5.0.0", "vitest": "^1.0.0" }, "dependencies": { "@mistralai/mistralai": "^1.0.0" } } ``` **tsconfig.json** ```json { "compilerOptions": { "target": "ES2022", "module": "NodeNext", "moduleResolution": "NodeNext", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "outDir": "dist", "rootDir": "src" }, "include": ["src/**/*"], "exclude": ["node_modules", "dist"] } ``` ### Step 4: Configure Testing **vitest.config.ts** ```typescript import { defineConfig } from 'vitest/config'; export default defineConfig({ test: { globals: true, environment: 'node', include: ['tests/unit/**/*.test.ts'], coverage: { provider: 'v8', reporter: ['text', 'json', 'html'], }, setupFiles: ['./tests/setup.ts'], }, }); ``` **tests/setup.ts** ```typescript import 'dotenv/config'; import { beforeAll, afterAll, vi } from 'vitest'; beforeAll(() => { // Global setup }); afterAll(() => { vi.restoreAllMocks(); }); ``` **tests/unit/mistral.test.ts** ```typescript import { describe, it, expect, vi, beforeEach } from 'vitest'; import { getMistralClient } from '../../src/mistral/client'; // Mock the Mistral SDK vi.mock('@mistralai/mistralai', () => ({ default: vi.fn().mockImplementation(() => ({ chat: { complete: vi.fn().mockResolvedValue({ choices: [{ message: { content: 'Mocked response' } }], }), }, models: { list: vi.fn().mockResolvedValue({ data: [] }), }, })), })); describe('Mistral Client', () => { beforeEach(() => { vi.clearAllMocks(); }); it('should initialize with API key', () => { const client = getMistralClient(); expect(client).toBeDefined(); }); it('should complete chat successfully', async () => { const client = getMistralClient(); const response = await client.chat.complete({ model: 'mistral-small-latest', messages: [{ role: 'user', content: 'Test' }], }); expect(response.choices?.[0]?.message?.content).toBe('Mocked response'); }); }); ``` ### Step 5: Create Client Wrapper **src/mistral/client.ts** ```typescript import Mistral from '@mistralai/mistralai'; import 'dotenv/config'; let instance: Mistral | null = null; export function getMistralClient(): Mistral { if (!instance) { const apiKey = process.env.MISTRAL_API_KEY; if (!apiKey) { throw new Error('MISTRAL_API_KEY environment variable is required'); } instance = new Mistral({ apiKey }); } return instance; } // Reset for testing export function resetClient(): void { instance = null; } ``` ## Output - Working development environment with hot reload - Configured test suite with mocking - Environment variable management - Fast iteration cycle for Mistral development ## Error Handling | Error | Cause | Solution | |-------|-------|----------| | Module not found | Missing dependency | Run `npm install` | | Env not loaded | Missing .env.local | Copy from .env.example | | Test timeout | Slow network | Increase test timeout | | Type errors | Missing types | Check @types packages | ## Examples ### Mock Mistral Responses in Tests ```typescript import { vi } from 'vitest'; vi.mock('@mistralai/mistralai', () => ({ default: vi.fn().mockImplementation(() => ({ chat: { complete: vi.fn().mockResolvedValue({ id: 'test-id', object: 'chat.completion', model: 'mistral-small-latest', choices: [{ index: 0, message: { role: 'assistant', content: 'Mocked!' }, finishReason: 'stop', }], usage: { promptTokens: 10, completionTokens: 5, totalTokens: 15 }, }), stream: vi.fn().mockImplementation(async function* () { yield { data: { choices: [{ delta: { content: 'Streaming ' } }] } }; yield { data: { choices: [{ delta: { content: 'response' } }] } }; }), }, })), })); ``` ### Debug Mode ```bash # Enable verbose logging DEBUG=mistral:* npm run dev # Or in code const client = new Mistral({ apiKey: process.env.MISTRAL_API_KEY, // Enable debug logging }); ``` ## Resources - [Mistral AI SDK Reference](https://docs.mistral.ai/api/) - [Vitest Documentation](https://vitest.dev/) - [tsx Documentation](https://github.com/esbuild-kit/tsx) ## Next Steps See `mistral-sdk-patterns` for production-ready code patterns.

Skill file: plugins/saas-packs/mistral-pack/skills/mistral-local-dev-loop/SKILL.md