@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
JavaScript
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