UNPKG

@mantisware/peepit-mcp

Version:

Give your AI agents super-vision: blazing-fast macOS screenshots, smart window targeting, and local or cloud AI image analysis—all via a friendly Node.js MCP server.

51 lines • 2.14 kB
import fs from "fs/promises"; import path from "path"; import os from "os"; import { parseAIProviders, analyzeImageWithProvider } from "./ai-providers.js"; export async function performAutomaticAnalysis(base64Image, question, logger, availableProvidersEnv) { const providers = parseAIProviders(availableProvidersEnv); if (!providers.length) { return { error: "Analysis skipped: No AI providers configured", }; } // Try each provider in order until one succeeds for (const provider of providers) { try { logger.debug({ provider: `${provider.provider}/${provider.model}` }, "Attempting analysis with provider"); // Create a temporary file for the provider (some providers need file paths) const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), "peepit-analysis-")); const tempPath = path.join(tempDir, "image.png"); const imageBuffer = Buffer.from(base64Image, "base64"); await fs.writeFile(tempPath, imageBuffer); try { const analysisText = await analyzeImageWithProvider(provider, tempPath, base64Image, question, logger); // Clean up temp file await fs.unlink(tempPath); await fs.rmdir(tempDir); return { analysisText, modelUsed: `${provider.provider}/${provider.model}`, }; } finally { // Ensure cleanup even if analysis fails try { await fs.unlink(tempPath); await fs.rmdir(tempDir); } catch { // Ignore cleanup errors } } } catch (error) { logger.debug({ error, provider: `${provider.provider}/${provider.model}` }, "Provider failed, trying next"); // Continue to next provider } } return { error: "Analysis failed: All configured AI providers failed or are unavailable", }; } //# sourceMappingURL=image-analysis.js.map