- Remove Tone Agent (tone is now part of Brand specs) - Split Channel Agent into Channel Best Practices Agent and Channel Tech Specs Agent - Convert Legal Agent from stub to full Gemini-powered implementation - Add new prompt files for channel_best_practices.md, channel_tech_specs.md, legal.md - Update ReferenceDocsService with new methods for loading specs - Update schemas and analysis service to use new agent structure - Update all frontend components to use new agent names and properties - Update mock data in Projects.tsx and Campaigns.tsx Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
101 lines
3.9 KiB
Python
101 lines
3.9 KiB
Python
from typing import List, Tuple
|
|
|
|
from app.agents.base_agent import BaseAgent
|
|
from app.models.schemas import SubReview
|
|
from app.services.gemini_service import GeminiService
|
|
from app.services.reference_docs import ReferenceDocsService
|
|
|
|
|
|
class ChannelTechSpecsAgent(BaseAgent):
|
|
"""Channel Tech Specs Agent - analyzes proofs for technical specifications and format requirements using Gemini."""
|
|
|
|
name = "Channel Tech Specs Agent"
|
|
|
|
def __init__(self, gemini_service: GeminiService, reference_docs: ReferenceDocsService):
|
|
"""
|
|
Initialize the Channel Tech Specs Agent.
|
|
|
|
Args:
|
|
gemini_service: Service for making Gemini API calls
|
|
reference_docs: Service for loading reference documents
|
|
"""
|
|
self.gemini = gemini_service
|
|
self.reference_docs = reference_docs
|
|
|
|
async def analyze(self, images: List[Tuple[bytes, str]]) -> SubReview:
|
|
"""
|
|
Analyze the proof for technical specifications compliance.
|
|
|
|
Args:
|
|
images: List of (file_data, mime_type) tuples representing the proof
|
|
|
|
Returns:
|
|
SubReview with technical specifications assessment
|
|
"""
|
|
# Get the channel tech specs specification
|
|
tech_specs_context = self.reference_docs.get_channel_tech_specs_spec()
|
|
|
|
prompt = f"""You are a digital channel technical specifications specialist for Barclays Bank. Your role is to analyze marketing proofs for technical compliance with platform specifications, dimensions, file formats, and character limits.
|
|
|
|
Here are the channel technical specifications to use for your analysis:
|
|
|
|
{tech_specs_context}
|
|
|
|
---
|
|
|
|
Analyze the uploaded proof for technical specification compliance, checking:
|
|
|
|
1. **Dimensions & Resolution**:
|
|
- Does the asset meet the required dimensions for the target platform?
|
|
- Is the resolution appropriate (DPI/PPI requirements)?
|
|
- Are aspect ratios correct for the intended placement?
|
|
|
|
2. **File Format Requirements**:
|
|
- Is the file format suitable for the platform?
|
|
- Are file size limits being respected?
|
|
- Is compression appropriate for quality vs. performance?
|
|
|
|
3. **Typography Specifications**:
|
|
- Are minimum font sizes met for the platform?
|
|
- Character counts within platform limits (headlines, body, etc.)?
|
|
- Is text readable at the intended display size?
|
|
|
|
4. **Digital Grid System**:
|
|
- Desktop: 12-column grid compliance
|
|
- Tablet: 12-column grid compliance
|
|
- Mobile: 6-column grid compliance
|
|
- 8px baseline grid adherence
|
|
|
|
5. **Accessibility Requirements**:
|
|
- Color contrast meets WCAG requirements?
|
|
- Only documented color pairings are used?
|
|
- Text is legible at intended display sizes?
|
|
|
|
6. **Platform-Specific Technical Requirements**:
|
|
- Safe zone compliance for interactive elements
|
|
- Video/animation format requirements (if applicable)
|
|
- Frame rate and duration limits (if applicable)
|
|
|
|
Provide your analysis as a JSON object. Be specific about any technical issues and reference the relevant specification.
|
|
|
|
RAG Status Guidelines:
|
|
- **Green**: Fully compliant with all technical specifications
|
|
- **Amber**: Minor technical adjustments needed but content is deployable
|
|
- **Red**: Significant technical issues that will prevent proper display or deployment
|
|
|
|
If the proof is nonsensical, not a marketing material, or cannot be analyzed, set analysisStatus to 'low_confidence'.
|
|
|
|
**Response Format:**
|
|
- Keep feedback brief and scannable
|
|
- Use bullet points for each finding
|
|
- Each bullet should be one actionable sentence
|
|
- Start with the issue, then the specification requirement
|
|
- Example: "Image resolution 72dpi - increase to minimum 150dpi for print quality"
|
|
"""
|
|
|
|
# Use single-image or multi-image analysis depending on input
|
|
if len(images) == 1:
|
|
file_data, file_type = images[0]
|
|
return await self.gemini.analyze_with_image(prompt, file_data, file_type)
|
|
else:
|
|
return await self.gemini.analyze_with_images(prompt, images)
|