Spaces:
Sleeping
Sleeping
| import os | |
| import subprocess | |
| def fix_vision_core(): | |
| # Content for agents/visual_analyst.py | |
| content = """import os | |
| import json | |
| import asyncio | |
| import google.generativeai as genai | |
| from PIL import Image | |
| from dotenv import load_dotenv | |
| load_dotenv() | |
| class VisualAnalyst: | |
| def __init__(self): | |
| api_key = os.getenv("GEMINI_API_KEY") | |
| if not api_key: | |
| print("β οΈ GEMINI_API_KEY missing") | |
| genai.configure(api_key=api_key) | |
| # Use the modern, faster Flash model | |
| self.model = genai.GenerativeModel('gemini-1.5-flash') | |
| async def analyze_image(self, image_path: str): | |
| print(f"ποΈ Analyzing image: {image_path}") | |
| try: | |
| # 1. Load image properly with Pillow (Fixes format issues) | |
| img = Image.open(image_path) | |
| # 2. Define the prompt | |
| prompt = \"\"\" | |
| Analyze this product image for an e-commerce listing. | |
| Return ONLY a raw JSON object (no markdown formatting) with this structure: | |
| { | |
| "main_color": "string", | |
| "product_type": "string", | |
| "design_style": "string (minimalist, streetwear, vintage, etc)", | |
| "visual_features": ["list", "of", "visible", "features"], | |
| "suggested_title": "creative product title", | |
| "condition_guess": "new/used" | |
| } | |
| \"\"\" | |
| # 3. Run in a thread to prevent blocking (Sync to Async wrapper) | |
| response = await asyncio.to_thread( | |
| self.model.generate_content, | |
| [prompt, img] | |
| ) | |
| # 4. Clean and Parse JSON | |
| text_response = response.text.replace('```json', '').replace('```', '').strip() | |
| return json.loads(text_response) | |
| except Exception as e: | |
| print(f"β Vision Error: {e}") | |
| # Return a Safe Fallback (Simulation) | |
| return { | |
| "main_color": "Unknown", | |
| "product_type": "Unidentified Item", | |
| "design_style": "Standard", | |
| "visual_features": ["Error analyzing image"], | |
| "suggested_title": "Manual Review Needed", | |
| "condition_guess": "New" | |
| } | |
| """ | |
| # Write the file | |
| os.makedirs("agents", exist_ok=True) | |
| with open("agents/visual_analyst.py", "w", encoding="utf-8") as f: | |
| f.write(content) | |
| print("β agents/visual_analyst.py updated.") | |
| # Git operations | |
| print("π Pushing to HuggingFace...") | |
| commands = [ | |
| ["git", "add", "agents/visual_analyst.py"], | |
| ["git", "commit", "-m", "Fix vision core and error handling"], | |
| ["git", "push", "space", "clean_deploy:main"] | |
| ] | |
| for cmd in commands: | |
| try: | |
| print(f"Running: {' '.join(cmd)}") | |
| subprocess.run(cmd, check=True) | |
| except subprocess.CalledProcessError as e: | |
| print(f"β οΈ Command failed: {e}") | |
| # Continue even if commit fails (e.g. prompt already applied) | |
| if __name__ == "__main__": | |
| fix_vision_core() | |