import os from dotenv import load_dotenv from .ai import gemini, claude # Load environment variables from the directory where this file resides base_dir = os.path.dirname(os.path.abspath(__file__)) dotenv_path = os.path.join(base_dir, ".env") load_dotenv(dotenv_path) def extract_label_info(image_bytes: bytes): """ Orchestrates extraction across multiple AI providers. Order: Gemini (Flash/Pro) -> Claude (Haiku/Sonnet) """ prompt = """ Extract technical inventory information from this label image. CRITICAL INSTRUCTIONS: 1. Look at the most prominent text (usually top 1-2 rows). This is the product NAME and MODEL. 2. Extract the PART NUMBER (P/N, Model No, Type). If no explicit Part Number is found, synthesize one from the most unique identifier in the header (e.g. 'OM4-MMF-DX'). 3. Separate the COLOR (e.g. Turquoise, Yellow, Black). 4. Extract CATEGORY based on the item type (e.g. Patchcord, SFP, Connector). 5. Extract technical SPECS (e.g. '2.0mm', '10G', '850nm'). Return ONLY a valid JSON object: { "name": "Full descriptive name from header", "part_number": "Unique identifier for fast scanning", "category": "Broad category", "color": "Color if present", "specs": "Brief tech specs list", "barcode": "Barcode value if visible", "quantity": 1 } """ # 1. Try Gemini result = gemini.extract(image_bytes, prompt) if result: return result # 2. Try Claude (Fallback) result = claude.extract(image_bytes, prompt) if result: return result return {"error": "All AI providers failed or no API keys configured. Check your .env file."}