1 line
7.5 KiB
JSON
1 line
7.5 KiB
JSON
{"repo": "ayanzadeh93/benchmark-accessibility", "files": {"vlm_factory.py": {"501a3536d9f6129392f74e262f34d3201d05775b": {"t": 1785674522.176054, "n": 7004, "h": "3d17ba055b46ec6d", "c": "#!/usr/bin/env python3\n\"\"\"\nVLM Factory - Easy switching between GPT-4o and Qwen3-VL\n\"\"\"\n\nimport logging\nfrom typing import Optional\nfrom vlm_base import BaseVLMExtractor\n\nlogging.basicConfig(level=logging.INFO)\nlogger = logging.getLogger(__name__)\n\n\nclass VLMFactory:\n \"\"\"Factory for creating VLM extractors.\"\"\"\n \n @staticmethod\n def create_extractor(\n model_type: str = \"qwen\",\n api_key: Optional[str] = None,\n device: str = \"auto\"\n ) -> BaseVLMExtractor:\n \"\"\"\n Create VLM extractor.\n \n Args:\n model_type: \"qwen\", \"florence2\", \"gpt4o\", \"gpt5nano\"\n api_key: API key for GPT models\n device: \"auto\", \"cuda\", or \"cpu\"\n \n Returns:\n VLM extractor instance\n \n Examples:\n # Use Florence-2 (FASTEST, free, local GPU)\n extractor = VLMFactory.create_extractor(\"florence2\", device=\"cuda\")\n \n # Use Qwen (free, local GPU)\n extractor = VLMFactory.create_extractor(\"qwen\", device=\"cuda\")\n \n # Use GPT-4o (API)\n extractor = VLMFactory.create_extractor(\"gpt4o\", api_key=\"sk-...\")\n \"\"\"\n model_type = model_type.lower().strip()\n \n if model_type in [\"florence2\", \"florence\", \"florence-2\"]:\n logger.info(\"Creating Florence-2 extractor (FASTEST, GPU-accelerated)\")\n from vlm_florence2 import Florence2Extractor\n return Florence2Extractor(\n device=device,\n model_size=\"base\" # base is faster than large\n )\n \n elif model_type in [\"qwen\", \"qwen3\", \"qwen3vl\", \"qwen-vl\"]:\n logger.info(\"Creating Qwen3-VL extractor (GPU-accelerated)\")\n from vlm_qwen import Qwen3VLExtractor\n return Qwen3VLExtractor(\n device=device\n )\n \n elif model_type in [\"llava\", \"llava15\", \"llava-1.5\", \"llava1.5\"]:\n logger.info(\"Creating LLaVA-1.5-7B extractor (GPU-accelerated)\")\n from vlm_llava import LLaVAExtractor\n return LLaVAExtractor(\n device=device\n )\n \n elif model_type in [\"gpt4o\", \"gpt-4o\", \"openai\"]:\n logger.info(\"Creating GPT-4o extractor (API)\")\n from vlm_gpt4o import GPT4oExtractor\n return GPT4oExtractor(api_key=api_key, model_name=\"gpt-4o\")\n \n elif model_type in [\"gpt5nano\", \"gpt-5-nano\", \"gpt5-nano\", \"gptnano\"]:\n logger.info(\"Creating GPT-5 Nano extractor (API)\")\n from vlm_gpt4o import GPT4oExtractor\n return GPT4oExtractor(api_key=api_key, model_name=\"gpt-5-nano-2025-08-07\")\n \n elif model_type in [\"gpt5mini\", \"gpt-5-mini\", \"gpt5-mini\", \"gptmini\"]:\n logger.info(\"Creating GPT-5 Mini extractor (API, CHEAPEST)\")\n from vlm_gpt4o import GPT4oExtractor\n return GPT4oExtractor(api_key=api_key, model_name=\"gpt-5-mini-2025-08-07\")\n\n elif model_type in [\n \"openrouter_trinity\",\n \"openrouter_llama32_11b_vision\",\n \"openrouter_llama4_maverick\",\n \"openrouter_molmo_8b\",\n \"openrouter_ministral_3b\",\n \"openrouter_gpt_oss_safeguard_20b\",\n \"openrouter_qwen3_vl_235b\",\n \"openrouter_qwen3_vl_8b\",\n \"openrouter_qwen_vl_plus\",\n \"qwen8b\", # Alias for openrouter_qwen3_vl_8b\n \"openrouter\",\n ]:\n from vlm_openrouter import OpenRouterExtractor\n\n # Map friendly names to OpenRouter model ids\n model_map = {\n \"openrouter_trinity\": \"arcee-ai/trinity-large-preview:free\",\n \"openrouter_llama32_11b_vision\": \"meta-llama/llama-3.2-11b-vision-instruct\",\n \"openrouter_llama4_maverick\": \"meta-llama/llama-4-maverick\",\n \"openrouter_molmo_8b\": \"allenai/molmo-2-8b:free\",\n \"openrouter_ministral_3b\": \"mistralai/ministral-3b-2512\",\n \"openrouter_gpt_oss_safeguard_20b\": \"openai/gpt-oss-safeguard-20b\",\n \"openrouter_qwen3_vl_235b\": \"qwen/qwen3-vl-235b-a22b-instruct\",\n \"openrouter_qwen3_vl_8b\": \"qwen/qwen3-vl-8b-instruct\",\n \"qwen8b\": \"qwen/qwen3-vl-8b-instruct\",\n \"openrouter_qwen_vl_plus\": \"qwen/qwen-vl-plus\",\n }\n # qwen8b -> use openrouter_qwen3_vl_8b model id\n model_id = model_map.get(model_type, model_type)\n logger.info(f\"Creating OpenRouter extractor (model: {model_id})\")\n return OpenRouterExtractor(api_key=api_key, model_id=model_id)\n \n else:\n raise ValueError(f\"Unknown model type: {model_type}. Use 'florence2', 'qwen', 'llava', 'gpt4o', 'gpt5nano', or 'gpt5mini'\")\n \n @staticmethod\n def list_available_models():\n \"\"\"List available VLM models.\"\"\"\n print(\"\\n\" + \"=\"*60)\n print(\"Available VLM Models\")\n print(\"=\"*60)\n \n print(\"\\n1. Florence-2 (florence2) ⭐ FASTEST\")\n print(\" - Local GPU (FREE)\")\n print(\" - Speed: 1-2 seconds per image on RTX GPU\")\n print(\" - Size: 230M params (tiny!)\")\n print(\" - Optimized for: Object detection, grounding, captioning\")\n \n print(\"\\n2. LLaVA-1.5-7B (llava)\")\n print(\" - Local GPU (FREE)\")\n print(\" - Speed: 3-5 seconds per image on RTX GPU\")\n print(\" - Size: 7B params\")\n print(\" - Optimized for: VQA, detailed image understanding\")\n print(\" - Usage: VLMFactory.create_extractor('florence2', device='cuda')\")\n \n print(\"\\n2. Qwen3-VL-2B (qwen)\")\n print(\" - Local GPU (FREE)\")\n print(\" - Speed: 2-3 seconds per image\")\n print(\" - Size: 2B params\")\n print(\" - Usage: VLMFactory.create_extractor('qwen', device='cuda')\")\n\n print(\"\\n3. GPT-4o (gpt4o)\")\n print(\" - API-based (paid)\")\n print(\" - Requires: OpenAI API key\")\n print(\" - Cost: ~$0.005 per image\")\n print(\" - Usage: VLMFactory.create_extractor('gpt4o', api_key='sk-...')\")\n \n print(\"\\n4. GPT-5 Nano (gpt5nano)\")\n print(\" - API-based (paid, cheaper than GPT-4o)\")\n print(\" - Requires: OpenAI API key\")\n print(\" - Cost: ~$0.00005 per image (input), ~$0.0004 per image (output)\")\n print(\" - Usage: VLMFactory.create_extractor('gpt5nano', api_key='sk-...')\")\n \n print(\"\\n\" + \"=\"*60)\n\n\n# Convenience functions\ndef create_qwen_extractor(device: str = \"auto\") -> BaseVLMExtractor:\n \"\"\"Create Qwen3-VL extractor (shortcut).\"\"\"\n return VLMFactory.create_extractor(\"qwen\", device=device)\n\n\ndef create_gpt4o_extractor(api_key: Optional[str] = None) -> BaseVLMExtractor:\n \"\"\"Create GPT-4o extractor (shortcut).\"\"\"\n return VLMFactory.create_extractor(\"gpt4o\", api_key=api_key)\n\n\nif __name__ == \"__main__\":\n VLMFactory.list_available_models()"}}}} |