diff --git a/pyproject.toml b/pyproject.toml index b388007..c0eacd9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "hedit" -version = "0.7.6a2" +version = "0.7.6.dev4" description = "Multi-agent system for HED annotation generation and validation" readme = "PKG_README.md" requires-python = ">=3.12" diff --git a/src/api/main.py b/src/api/main.py index e1a9255..812e3d1 100644 --- a/src/api/main.py +++ b/src/api/main.py @@ -113,8 +113,8 @@ def create_openrouter_workflow( # Apply defaults from environment default_annotation_model = os.getenv("ANNOTATION_MODEL", "anthropic/claude-haiku-4.5") default_annotation_provider = os.getenv("ANNOTATION_PROVIDER", "anthropic") - default_eval_model = os.getenv("EVALUATION_MODEL", "openai/gpt-oss-120b") - default_eval_provider = os.getenv("EVALUATION_PROVIDER", "groq") + default_eval_model = os.getenv("EVALUATION_MODEL", "qwen/qwen3.5-397b-a17b") + default_eval_provider = os.getenv("EVALUATION_PROVIDER") # Resolve final values: parameter > env var > default actual_annotation_model = get_model_name(annotation_model or default_annotation_model) @@ -240,8 +240,8 @@ def create_byok_vision_agent( Configured VisionAgent using the user's key and model settings """ # Use user-provided settings or fall back to server defaults - default_vision_model = os.getenv("VISION_MODEL", "qwen/qwen3-vl-30b-a3b-instruct") - default_vision_provider = os.getenv("VISION_PROVIDER", "deepinfra/fp8") + default_vision_model = os.getenv("VISION_MODEL", "qwen/qwen3-vl-32b-instruct") + default_vision_provider = os.getenv("VISION_PROVIDER", "novita") actual_model = vision_model if vision_model else default_vision_model actual_temperature = temperature if temperature is not None else 0.3 @@ -354,7 +354,7 @@ def get_default_path(docker_path: str, local_path: str) -> str | None: # Log configuration (env vars are read by create_openrouter_workflow) print("Using OpenRouter with models:") print(f" Annotation: {os.getenv('ANNOTATION_MODEL', 'anthropic/claude-haiku-4.5')}") - print(f" Evaluation: {os.getenv('EVALUATION_MODEL', 'qwen/qwen3-235b-a22b-2507')}") + print(f" Evaluation: {os.getenv('EVALUATION_MODEL', 'qwen/qwen3.5-397b-a17b')}") print(f" Provider (annotation): {os.getenv('ANNOTATION_PROVIDER', 'anthropic')}") print(f" Provider (eval): {os.getenv('EVALUATION_PROVIDER', '') or '(auto-routed)'}") @@ -395,8 +395,8 @@ def get_default_path(docker_path: str, local_path: str) -> str | None: # Initialize vision agent (only for OpenRouter) if llm_provider == "openrouter": - vision_model = os.getenv("VISION_MODEL", "qwen/qwen3-vl-30b-a3b-instruct") - vision_provider = os.getenv("VISION_PROVIDER", "deepinfra/fp8") + vision_model = os.getenv("VISION_MODEL", "qwen/qwen3-vl-32b-instruct") + vision_provider = os.getenv("VISION_PROVIDER", "novita") print(f"Initializing vision model: {vision_model} (provider: {vision_provider})") @@ -666,7 +666,7 @@ async def annotate( model_name = ( request.model or req.headers.get("x-openrouter-model") - or os.getenv("ANNOTATION_MODEL", "openai/gpt-oss-120b") + or os.getenv("ANNOTATION_MODEL", "anthropic/claude-haiku-4.5") ) temperature = request.temperature if temperature is None: @@ -815,7 +815,7 @@ async def annotate_from_image( validator_path=_byok_config.get("validator_path"), use_js_validator=_byok_config.get("use_js_validator", True), ) - # Note: Vision agent uses its own provider (deepinfra/fp8 for qwen-vl) + # Note: Vision agent uses its own provider (novita for qwen-vl) # Only pass provider_override to vision if a custom vision_model was specified vision_provider = provider_override if vision_model_override else None active_vision_agent = create_byok_vision_agent( @@ -877,7 +877,7 @@ async def annotate_from_image( model_name = ( request.model or req.headers.get("x-openrouter-model") - or os.getenv("ANNOTATION_MODEL", "openai/gpt-oss-120b") + or os.getenv("ANNOTATION_MODEL", "anthropic/claude-haiku-4.5") ) temperature = request.temperature if temperature is None: @@ -967,7 +967,7 @@ async def _collect_stream_telemetry( model_name = ( request.model or req.headers.get("x-openrouter-model") - or os.getenv("ANNOTATION_MODEL", "openai/gpt-oss-120b") + or os.getenv("ANNOTATION_MODEL", "anthropic/claude-haiku-4.5") ) temperature = request.temperature if temperature is None: @@ -1386,7 +1386,7 @@ async def annotate_from_image_stream( validator_path=_byok_config.get("validator_path"), use_js_validator=_byok_config.get("use_js_validator", True), ) - # Note: Vision agent uses its own provider (deepinfra/fp8 for qwen-vl) + # Note: Vision agent uses its own provider (novita for qwen-vl) # Only pass provider_override to vision if a custom vision_model was specified vision_provider = provider_override if vision_model_override else None active_vision_agent = create_byok_vision_agent( @@ -1785,7 +1785,7 @@ async def submit_feedback(request: FeedbackRequest) -> FeedbackResponse: ) # Create LLM for triage - model = os.getenv("ANNOTATION_MODEL", "openai/gpt-oss-120b") + model = os.getenv("ANNOTATION_MODEL", "anthropic/claude-haiku-4.5") provider = os.getenv("LLM_PROVIDER_PREFERENCE", "") llm = create_openrouter_llm( model=model, diff --git a/src/api/models.py b/src/api/models.py index 4f213a1..5d78102 100644 --- a/src/api/models.py +++ b/src/api/models.py @@ -41,7 +41,7 @@ class AnnotationRequest(BaseModel): model: str | None = Field( default=None, description="Override model for annotation (BYOK mode only, e.g., 'openai/gpt-4o')", - examples=["openai/gpt-4o", "anthropic/claude-3.5-sonnet", "qwen/qwen3-235b-a22b-2507"], + examples=["anthropic/claude-haiku-4.5", "qwen/qwen3.5-122b-a10b", "qwen/qwen3.5-397b-a17b"], ) provider: str | None = Field( default=None, @@ -177,7 +177,7 @@ class ImageAnnotationRequest(BaseModel): vision_model: str | None = Field( default=None, description="Override vision model for image description (BYOK mode only)", - examples=["qwen/qwen3-vl-30b-a3b-instruct", "openai/gpt-4o"], + examples=["qwen/qwen3-vl-32b-instruct", "qwen/qwen3-vl-235b-a22b-instruct"], ) provider: str | None = Field( default=None, diff --git a/src/cli/config.py b/src/cli/config.py index 12ef5f4..c1e1fb5 100644 --- a/src/cli/config.py +++ b/src/cli/config.py @@ -41,13 +41,13 @@ DEFAULT_MODEL = "anthropic/claude-haiku-4.5" DEFAULT_PROVIDER = "anthropic" -# Evaluation model: Qwen3-235B (auto-routed by OpenRouter) -DEFAULT_EVAL_MODEL = "qwen/qwen3-235b-a22b-2507" +# Evaluation model: Qwen3.5-397B MoE (most capable Qwen, high throughput) +DEFAULT_EVAL_MODEL = "qwen/qwen3.5-397b-a17b" DEFAULT_EVAL_PROVIDER = None -# Vision model: Qwen3-VL for image descriptions -DEFAULT_VISION_MODEL = "qwen/qwen3-vl-30b-a3b-instruct" -DEFAULT_VISION_PROVIDER = "deepinfra/fp8" +# Vision model: Qwen3-VL-32B for image descriptions +DEFAULT_VISION_MODEL = "qwen/qwen3-vl-32b-instruct" +DEFAULT_VISION_PROVIDER = None class CredentialsConfig(BaseModel): diff --git a/src/cli/local_executor.py b/src/cli/local_executor.py index e7bf48f..65e6853 100644 --- a/src/cli/local_executor.py +++ b/src/cli/local_executor.py @@ -77,11 +77,10 @@ def __init__( Args: api_key: OpenRouter API key (required for LLM operations, optional for health/validate) - model: Model for text annotation (default: openai/gpt-oss-120b) - eval_model: Model for evaluation/assessment agents (default: same as model). - Use a consistent model like qwen/qwen3-235b-a22b for fair benchmarking. - eval_provider: Provider for evaluation model (e.g., Cerebras for qwen models) - vision_model: Model for image annotation (default: qwen/qwen3-vl-30b-a3b-instruct) + model: Model for text annotation (default: anthropic/claude-haiku-4.5) + eval_model: Model for evaluation/assessment agents (default: qwen/qwen3.5-397b-a17b) + eval_provider: Provider for evaluation model (None = OpenRouter auto-routes) + vision_model: Model for image annotation (default: qwen/qwen3-vl-32b-instruct) provider: Provider preference (cleared if custom model specified) temperature: LLM temperature (0.0-1.0) schema_dir: Optional directory with JSON schemas (None = fetch from GitHub) diff --git a/src/cli/main.py b/src/cli/main.py index 13af76a..ec04943 100644 --- a/src/cli/main.py +++ b/src/cli/main.py @@ -102,7 +102,7 @@ typer.Option( "--model", "-m", - help="Model to use (e.g., openai/gpt-oss-120b, gpt-4o-mini)", + help="Model to use (e.g., anthropic/claude-haiku-4.5, qwen/qwen3.5-122b-a10b)", ), ] diff --git a/src/scripts/process_feedback.py b/src/scripts/process_feedback.py index 6137834..1baa5d3 100644 --- a/src/scripts/process_feedback.py +++ b/src/scripts/process_feedback.py @@ -56,7 +56,7 @@ async def process_feedback_file( sys.exit(1) # Get model configuration from environment - model = os.getenv("ANNOTATION_MODEL", "openai/gpt-oss-120b") + model = os.getenv("ANNOTATION_MODEL", "anthropic/claude-haiku-4.5") provider = os.getenv("LLM_PROVIDER_PREFERENCE", "") # Create LLM diff --git a/src/utils/litellm_llm.py b/src/utils/litellm_llm.py index 5533f3c..f2a3246 100644 --- a/src/utils/litellm_llm.py +++ b/src/utils/litellm_llm.py @@ -29,7 +29,7 @@ def create_litellm_openrouter( - model: str = "openai/gpt-oss-120b", + model: str = "anthropic/claude-haiku-4.5", api_key: str | None = None, temperature: float = 0.1, max_tokens: int | None = None, diff --git a/src/utils/openrouter_llm.py b/src/utils/openrouter_llm.py index b3a68b4..f0110fc 100644 --- a/src/utils/openrouter_llm.py +++ b/src/utils/openrouter_llm.py @@ -13,7 +13,7 @@ def create_openrouter_llm( - model: str = "openai/gpt-oss-120b", + model: str = "anthropic/claude-haiku-4.5", api_key: str | None = None, temperature: float = 0.1, max_tokens: int | None = None, @@ -28,7 +28,7 @@ def create_openrouter_llm( to include cache_control markers for 90% cost reduction on cache hits. Args: - model: Model identifier (e.g., "openai/gpt-oss-120b", "anthropic/claude-haiku-4.5") + model: Model identifier (e.g., "anthropic/claude-haiku-4.5", "qwen/qwen3.5-397b-a17b") api_key: OpenRouter API key (defaults to OPENROUTER_API_KEY env var) temperature: Sampling temperature (0.0-1.0) max_tokens: Maximum tokens to generate diff --git a/src/version.py b/src/version.py index a9076d1..3ae7347 100644 --- a/src/version.py +++ b/src/version.py @@ -1,7 +1,7 @@ """Version information for HEDit.""" -__version__ = "0.7.6a2" -__version_info__ = (0, 7, 6, "alpha") +__version__ = "0.7.6.dev4" +__version_info__ = (0, 7, 6, "dev") def get_version() -> str: