Skip to main content
Glama
advanced-intelligence.js15.2 kB
// config/advanced-intelligence.js - Phase 3C: Advanced AI capabilities // Visual similarity, bulk operations, and predictive recommendations import { OpenAI } from 'openai'; const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY }); // Advanced Intelligence Features for Phase 3C export const AdvancedIntelligence = { // Feature 1: Visual Similarity Search async findSimilarAssets(imageUrl, options = {}) { try { const analysis = await openai.chat.completions.create({ model: "gpt-4-vision-preview", messages: [ { role: "user", content: [ { type: "text", text: `Analyze this Breville/Sage asset image and identify: 1. Product type and model (if visible) 2. Asset category (product photo, lifestyle, logo, etc.) 3. Visual style and composition 4. Use case suitability 5. Similar assets that would complement this Respond with structured analysis for finding similar assets.` }, { type: "image_url", image_url: { url: imageUrl } } ] } ], max_tokens: 500 }); const analysis_text = analysis.choices[0].message.content; // Convert visual analysis to search parameters return this.generateSimilaritySearchParams(analysis_text, options); } catch (error) { console.error('Visual similarity analysis failed:', error); return this.fallbackSimilaritySearch(imageUrl, options); } }, generateSimilaritySearchParams(visualAnalysis, options) { // Parse AI visual analysis into actionable search parameters const searchParams = { similarity_type: options.similarity_type || 'visual_style', confidence_threshold: options.confidence_threshold || 0.7, max_results: options.max_results || 10, search_criteria: { visual_style: this.extractVisualStyle(visualAnalysis), product_category: this.extractProductCategory(visualAnalysis), composition_type: this.extractComposition(visualAnalysis), use_case_match: this.extractUseCase(visualAnalysis) } }; return searchParams; }, // Feature 2: Bulk Operations Intelligence async planBulkOperation(requests, operation_type = 'download') { const bulkPlan = { operation_id: `bulk_${Date.now()}`, operation_type, total_requests: requests.length, estimated_time_seconds: requests.length * 2.5, // 2.5s per asset average batches: [], optimization_applied: [], potential_issues: [] }; // Group requests intelligently const groupedRequests = this.groupRequestsIntelligently(requests); // Create optimized batches bulkPlan.batches = await this.createOptimizedBatches(groupedRequests); // Predict potential issues bulkPlan.potential_issues = this.predictBulkIssues(requests); // Suggest optimizations bulkPlan.optimization_applied = this.suggestBulkOptimizations(requests); return bulkPlan; }, groupRequestsIntelligently(requests) { const groups = { by_product: {}, by_section: {}, by_format: {}, by_region: {}, by_use_case: {} }; requests.forEach((request, index) => { // Group by product for efficient searching const product = request.intent?.products?.[0]?.model || 'unknown'; if (!groups.by_product[product]) groups.by_product[product] = []; groups.by_product[product].push({ ...request, index }); // Group by section for batch processing const section = request.intent?.section || 'unknown'; if (!groups.by_section[section]) groups.by_section[section] = []; groups.by_section[section].push({ ...request, index }); // Group by format for format-specific optimizations const formats = request.intent?.formats || ['unknown']; formats.forEach(format => { if (!groups.by_format[format]) groups.by_format[format] = []; groups.by_format[format].push({ ...request, index }); }); }); return groups; }, async createOptimizedBatches(groupedRequests) { const batches = []; const batchSize = 5; // Optimal batch size for Brandfolder API // Process groups with highest efficiency first const productGroups = Object.entries(groupedRequests.by_product) .sort(([,a], [,b]) => b.length - a.length); // Largest groups first for (const [product, requests] of productGroups) { for (let i = 0; i < requests.length; i += batchSize) { const batch = requests.slice(i, i + batchSize); batches.push({ batch_id: `${product}_${Math.floor(i / batchSize)}`, product_focus: product, requests: batch, estimated_time_seconds: batch.length * 2.0, // Optimized time per request in batch optimization_strategy: 'product_focused_search' }); } } return batches; }, predictBulkIssues(requests) { const issues = []; // Check for duplicate requests const duplicates = this.findDuplicateRequests(requests); if (duplicates.length > 0) { issues.push({ type: 'duplicates', severity: 'medium', count: duplicates.length, message: `${duplicates.length} duplicate requests detected`, suggestion: 'Consider deduplicating before processing' }); } // Check for potentially problematic requests const problematic = requests.filter(req => !req.intent?.products || req.intent.confidence < 0.5 ); if (problematic.length > 0) { issues.push({ type: 'low_confidence', severity: 'high', count: problematic.length, message: `${problematic.length} requests have low confidence scores`, suggestion: 'Review and refine these requests before bulk processing' }); } // Check for format conflicts const formatConflicts = this.detectFormatConflicts(requests); if (formatConflicts.length > 0) { issues.push({ type: 'format_conflicts', severity: 'low', conflicts: formatConflicts, message: 'Some requests may have format compatibility issues', suggestion: 'Verify format requirements for each use case' }); } return issues; }, // Feature 3: Predictive Recommendations async generatePredictiveRecommendations(currentRequest, userHistory = []) { const recommendations = { complementary_assets: [], format_suggestions: [], use_case_expansions: [], similar_products: [], trending_assets: [] }; // Analyze current request context const context = this.analyzeRequestContext(currentRequest); // Generate complementary asset recommendations recommendations.complementary_assets = await this.findComplementaryAssets(context); // Suggest optimal formats based on use case recommendations.format_suggestions = this.suggestOptimalFormats(context); // Expand use case possibilities recommendations.use_case_expansions = this.expandUseCases(context); // Find similar products that might be relevant recommendations.similar_products = this.findSimilarProducts(context); // Include trending assets based on analytics recommendations.trending_assets = await this.getTrendingAssets(context); return recommendations; }, analyzeRequestContext(request) { return { primary_product: request.intent?.products?.[0], section: request.intent?.section, use_case: request.intent?.use_case, region: request.intent?.region, brand: request.intent?.brand, formats: request.intent?.formats || [], confidence: request.intent?.confidence || 0, business_context: request.intent?.business_context }; }, async findComplementaryAssets(context) { const complementary = []; // If requesting product photo, suggest lifestyle shots if (context.section === 'Product Photography') { complementary.push({ type: 'lifestyle_photography', reason: 'Lifestyle shots complement product photography', suggested_section: 'Lifestyle Photography', confidence: 0.85 }); } // If requesting logo, suggest brand guidelines if (context.section === 'Logos') { complementary.push({ type: 'brand_guidelines', reason: 'Brand guidelines ensure consistent logo usage', suggested_section: 'Brand Guidelines', confidence: 0.90 }); } // If requesting social assets, suggest multiple formats if (context.section?.includes('Social')) { complementary.push({ type: 'multi_format_social', reason: 'Social campaigns benefit from multiple format variations', suggested_formats: ['JPG', 'PNG', 'MP4', 'GIF'], confidence: 0.88 }); } // Business context complementary assets if (context.business_context === 'amazon') { complementary.push({ type: 'amazon_complete_package', reason: 'Amazon listings perform better with complete asset packages', suggested_assets: ['A+ Content', 'Main Image', 'Lifestyle Images', 'Infographics'], confidence: 0.92 }); } return complementary; }, suggestOptimalFormats(context) { const suggestions = []; // Use case specific format recommendations const formatMatrix = { 'presentation': { primary: ['PNG', 'SVG'], reason: 'Transparency support and scalability for presentations', avoid: ['WEBP'], avoid_reason: 'Limited PowerPoint support' }, 'web': { primary: ['WEBP', 'SVG', 'PNG'], reason: 'Optimized for web performance and quality', consider: ['JPG'], consider_reason: 'For photographs without transparency needs' }, 'print': { primary: ['PDF', 'EPS', 'TIFF'], reason: 'High resolution and CMYK support for print', minimum_dpi: 300, avoid: ['JPG', 'PNG'], avoid_reason: 'RGB color space may not print accurately' }, 'social_media': { primary: ['JPG', 'PNG', 'MP4'], reason: 'Platform-optimized formats with good compression', platform_specific: { 'instagram': ['JPG', 'MP4'], 'facebook': ['JPG', 'PNG', 'MP4'], 'linkedin': ['PNG', 'PDF'] } }, 'email': { primary: ['PNG', 'JPG'], reason: 'Email-safe formats with universal support', max_file_size: '1MB', avoid: ['SVG', 'WEBP'], avoid_reason: 'Limited email client support' } }; const useCase = context.use_case || 'general'; const recommendation = formatMatrix[useCase] || formatMatrix['general']; if (recommendation) { suggestions.push({ use_case: useCase, ...recommendation, confidence: 0.90 }); } return suggestions; }, expandUseCases(context) { const expansions = []; const currentUseCase = context.use_case; // Use case expansion matrix const expansionMatrix = { 'presentation': [ { use_case: 'web', reason: 'Present online or embed in websites', confidence: 0.75 }, { use_case: 'email', reason: 'Email presentation summaries', confidence: 0.65 }, { use_case: 'print', reason: 'Print handouts or reports', confidence: 0.70 } ], 'social_media': [ { use_case: 'web', reason: 'Drive traffic to website', confidence: 0.80 }, { use_case: 'email', reason: 'Email marketing campaigns', confidence: 0.75 }, { use_case: 'print', reason: 'Print advertising materials', confidence: 0.60 } ], 'amazon': [ { use_case: 'web', reason: 'Use on official website', confidence: 0.85 }, { use_case: 'social_media', reason: 'Promote Amazon listings', confidence: 0.80 }, { use_case: 'email', reason: 'Email product announcements', confidence: 0.70 } ] }; const possibleExpansions = expansionMatrix[currentUseCase] || []; possibleExpansions.forEach(expansion => { if (expansion.confidence > 0.6) { expansions.push({ ...expansion, original_use_case: currentUseCase, suggested_assets: this.getAssetsForUseCase(expansion.use_case, context) }); } }); return expansions; }, async getTrendingAssets(context) { // In production, this would query your analytics database // For now, return intelligent trending based on context const trending = [ { asset_type: 'Oracle Jet lifestyle photography', trend_score: 0.95, reason: '23% increase in Oracle Jet requests this month', relevance_to_request: context.primary_product?.name === 'Oracle Jet' ? 0.90 : 0.30 }, { asset_type: 'Amazon A+ content', trend_score: 0.88, reason: '45% growth in Amazon-specific requests', relevance_to_request: context.business_context === 'amazon' ? 0.95 : 0.40 }, { asset_type: 'Social media assets', trend_score: 0.82, reason: 'Consistent high demand across all regions', relevance_to_request: context.use_case === 'social_media' ? 0.90 : 0.50 } ]; // Filter and sort by relevance to current request return trending .filter(asset => asset.relevance_to_request > 0.5) .sort((a, b) => b.relevance_to_request - a.relevance_to_request) .slice(0, 3); }, // Helper functions findDuplicateRequests(requests) { const seen = new Set(); const duplicates = []; requests.forEach((request, index) => { const key = JSON.stringify({ products: request.intent?.products, section: request.intent?.section, formats: request.intent?.formats }); if (seen.has(key)) { duplicates.push({ index, request }); } seen.add(key); }); return duplicates; }, detectFormatConflicts(requests) { // Detect requests that might have conflicting format requirements return requests .filter(req => req.intent?.use_case === 'print' && req.intent?.formats?.includes('RGB')) .map(req => ({ request: req, conflict: 'RGB format requested for print use case', suggestion: 'Consider CMYK formats for print' })); }, getAssetsForUseCase(useCase, context) { // Return suggested asset types for expanded use cases const assetMatrix = { 'web': ['Hero images', 'Product photography', 'Logos'], 'email': ['Compact logos', 'Product highlights', 'Call-to-action assets'], 'print': ['High-resolution photos', 'Vector logos', 'Print-ready layouts'], 'social_media': ['Square formats', 'Story formats', 'Video content'] }; return assetMatrix[useCase] || []; } }; // Export advanced intelligence for integration export default AdvancedIntelligence;

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/vnsavitri/dam-butler-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server