Spaces:
Running
Running
| # Configuration file for MapCrunch benchmark | |
| from pydantic import SecretStr, Field | |
| from typing import Optional | |
| import os | |
| SUCCESS_THRESHOLD_KM = 100 | |
| # MapCrunch settings | |
| MAPCRUNCH_URL = "https://www.mapcrunch.com" | |
| # UI element selectors | |
| SELECTORS = { | |
| "go_button": "#go-button", | |
| "pano_container": "#pano", | |
| "address_element": "#address", | |
| } | |
| # Data collection settings | |
| DATA_COLLECTION_CONFIG = { | |
| "wait_after_go": 3, | |
| "thumbnail_size": (320, 240), | |
| } | |
| # Benchmark settings | |
| BENCHMARK_CONFIG = { | |
| "data_collection_samples": 50, | |
| } | |
| # MapCrunch options | |
| MAPCRUNCH_OPTIONS = {} | |
| # Default settings | |
| DEFAULT_MODEL = "gemini-2.5-pro" | |
| DEFAULT_TEMPERATURE = 1.0 | |
| # Model configurations | |
| MODELS_CONFIG = { | |
| "gpt-4o": { | |
| "class": "ChatOpenAI", | |
| "model_name": "gpt-4o", | |
| "description": "OpenAI GPT-4o", | |
| }, | |
| "gpt-4o-mini": { | |
| "class": "ChatOpenAI", | |
| "model_name": "gpt-4o-mini", | |
| "description": "OpenAI GPT-4o Mini", | |
| }, | |
| "claude-3-7-sonnet": { | |
| "class": "ChatAnthropic", | |
| "model_name": "claude-3-7-sonnet-20250219", | |
| "description": "Anthropic Claude 3.7 Sonnet", | |
| }, | |
| "claude-4-sonnet": { | |
| "class": "ChatAnthropic", | |
| "model_name": "claude-4-sonnet-20250514", | |
| "description": "Anthropic Claude 4 Sonnet", | |
| }, | |
| "gemini-1.5-pro": { | |
| "class": "ChatGoogleGenerativeAI", | |
| "model_name": "gemini-1.5-pro-latest", | |
| "description": "Google Gemini 1.5 Pro", | |
| }, | |
| "gemini-2.0-flash-exp": { | |
| "class": "ChatGoogleGenerativeAI", | |
| "model_name": "gemini-2.0-flash-exp", | |
| "description": "Google Gemini 2.0 Flash Exp", | |
| }, | |
| "gemini-2.5-pro": { | |
| "class": "ChatGoogleGenerativeAI", | |
| "model_name": "gemini-2.5-pro-preview-06-05", | |
| "description": "Google Gemini 2.5 Pro", | |
| }, | |
| "qwen-vl-max": { | |
| "class": "OpenRouter", | |
| "model_name": "qwen/qwen-vl-max", | |
| "description": "Qwen VL Max - OpenRouter (Best Performance)", | |
| }, | |
| "qwen2.5-vl-32b-free": { | |
| "class": "OpenRouter", | |
| "model_name": "qwen/qwen2.5-vl-32b-instruct", | |
| "description": "Qwen2.5 VL 32B - OpenRouter (FREE!)", | |
| }, | |
| "qwen2.5-vl-7b": { | |
| "class": "OpenRouter", | |
| # This model name is different from others, this one has a dash. | |
| # Do not change this. | |
| "model_name": "qwen/qwen-2.5-vl-7b-instruct", | |
| "description": "Qwen2.5 VL 7B - OpenRouter", | |
| }, | |
| "qwen2.5-vl-3b": { | |
| "class": "OpenRouter", | |
| "model_name": "qwen/qwen2.5-vl-3b-instruct:free", | |
| "description": "Qwen2.5 VL 3B - OpenRouter (Fastest)", | |
| }, | |
| } | |
| POSSIBLE_API_KEYS = [ | |
| "OPENAI_API_KEY", | |
| "ANTHROPIC_API_KEY", | |
| "GOOGLE_API_KEY", | |
| "HF_TOKEN", | |
| "OPENROUTER_API_KEY", | |
| ] | |
| def setup_environment_variables(st_secrets=None): | |
| for key in POSSIBLE_API_KEYS: | |
| # Try Streamlit secrets first if provided | |
| if st_secrets and key in st_secrets: | |
| os.environ[key] = st_secrets[key] | |
| elif key in os.environ: | |
| continue | |
| def get_model_class(class_name): | |
| """Get actual model class from string name""" | |
| if class_name == "ChatOpenAI": | |
| from langchain_openai import ChatOpenAI | |
| return ChatOpenAI | |
| elif class_name == "ChatAnthropic": | |
| from langchain_anthropic import ChatAnthropic | |
| return ChatAnthropic | |
| elif class_name == "ChatGoogleGenerativeAI": | |
| from langchain_google_genai import ChatGoogleGenerativeAI | |
| return ChatGoogleGenerativeAI | |
| elif class_name == "HuggingFaceChat": | |
| from hf_chat import HuggingFaceChat | |
| return HuggingFaceChat | |
| elif class_name == "OpenRouter": | |
| from langchain_openai import ChatOpenAI | |
| from langchain_core.utils.utils import secret_from_env | |
| # LangChain does not support OpenRouter directly, so we need to create a custom class | |
| # See https://github.com/langchain-ai/langchain/discussions/27964. | |
| class ChatOpenRouter(ChatOpenAI): | |
| openai_api_key: Optional[SecretStr] = Field( | |
| alias="api_key", | |
| default_factory=secret_from_env("OPENROUTER_API_KEY", default=None), | |
| ) | |
| def lc_secrets(self) -> dict[str, str]: | |
| return {"openai_api_key": "OPENROUTER_API_KEY"} | |
| def __init__(self, openai_api_key: Optional[str] = None, **kwargs): | |
| openai_api_key = openai_api_key or os.environ.get("OPENROUTER_API_KEY") | |
| super().__init__( | |
| base_url="https://openrouter.ai/api/v1", | |
| api_key=SecretStr(openai_api_key) if openai_api_key else None, | |
| **kwargs, | |
| ) | |
| return ChatOpenRouter | |
| else: | |
| raise ValueError(f"Unknown model class: {class_name}") | |
| # Data paths - now supports named datasets | |
| def get_data_paths(dataset_name: str = "default"): | |
| """Get data paths for a specific dataset""" | |
| return { | |
| "golden_labels": f"datasets/{dataset_name}/golden_labels.json", | |
| "thumbnails": f"datasets/{dataset_name}/thumbnails/", | |
| "results": f"results/{dataset_name}/", | |
| } | |
| # Backward compatibility - default paths | |
| DATA_PATHS = get_data_paths("default") | |