hedit 0.7.6.dev3__tar.gz → 0.7.6.dev4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. {hedit-0.7.6.dev3/hedit.egg-info → hedit-0.7.6.dev4}/PKG-INFO +1 -1
  2. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4/hedit.egg-info}/PKG-INFO +1 -1
  3. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/pyproject.toml +1 -1
  4. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/api/main.py +13 -13
  5. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/api/models.py +2 -2
  6. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/cli/config.py +5 -5
  7. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/cli/local_executor.py +4 -5
  8. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/cli/main.py +1 -1
  9. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/scripts/process_feedback.py +1 -1
  10. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/utils/litellm_llm.py +1 -1
  11. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/utils/openrouter_llm.py +2 -2
  12. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/version.py +1 -1
  13. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/LICENSE +0 -0
  14. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/PKG_README.md +0 -0
  15. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/README.md +0 -0
  16. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/hedit.egg-info/SOURCES.txt +0 -0
  17. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/hedit.egg-info/dependency_links.txt +0 -0
  18. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/hedit.egg-info/entry_points.txt +0 -0
  19. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/hedit.egg-info/requires.txt +0 -0
  20. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/hedit.egg-info/top_level.txt +0 -0
  21. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/setup.cfg +0 -0
  22. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/__init__.py +0 -0
  23. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/agents/__init__.py +0 -0
  24. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/agents/annotation_agent.py +0 -0
  25. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/agents/assessment_agent.py +0 -0
  26. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/agents/evaluation_agent.py +0 -0
  27. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/agents/feedback_summarizer.py +0 -0
  28. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/agents/feedback_triage_agent.py +0 -0
  29. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/agents/state.py +0 -0
  30. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/agents/validation_agent.py +0 -0
  31. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/agents/vision_agent.py +0 -0
  32. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/agents/workflow.py +0 -0
  33. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/api/__init__.py +0 -0
  34. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/api/security.py +0 -0
  35. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/cli/__init__.py +0 -0
  36. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/cli/api_executor.py +0 -0
  37. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/cli/client.py +0 -0
  38. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/cli/commands/__init__.py +0 -0
  39. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/cli/executor.py +0 -0
  40. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/cli/output.py +0 -0
  41. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/scripts/__init__.py +0 -0
  42. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/telemetry/__init__.py +0 -0
  43. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/telemetry/collector.py +0 -0
  44. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/telemetry/schema.py +0 -0
  45. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/telemetry/storage.py +0 -0
  46. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/utils/__init__.py +0 -0
  47. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/utils/error_remediation.py +0 -0
  48. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/utils/github_client.py +0 -0
  49. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/utils/hed_comprehensive_guide.py +0 -0
  50. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/utils/hed_rules.py +0 -0
  51. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/utils/image_processing.py +0 -0
  52. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/utils/json_schema_loader.py +0 -0
  53. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/utils/schema_loader.py +0 -0
  54. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/validation/__init__.py +0 -0
  55. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/validation/hed_lsp.py +0 -0
  56. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/src/validation/hed_validator.py +0 -0
  57. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/tests/test_annotation_agent.py +0 -0
  58. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/tests/test_api_endpoints.py +0 -0
  59. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/tests/test_cli_client.py +0 -0
  60. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/tests/test_cli_config.py +0 -0
  61. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/tests/test_cli_integration.py +0 -0
  62. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/tests/test_cli_main.py +0 -0
  63. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/tests/test_comprehensive_guide.py +0 -0
  64. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/tests/test_error_remediation.py +0 -0
  65. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/tests/test_feedback_integration.py +0 -0
  66. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/tests/test_feedback_triage.py +0 -0
  67. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/tests/test_github_client.py +0 -0
  68. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/tests/test_hed_lsp.py +0 -0
  69. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/tests/test_integration_openrouter.py +0 -0
  70. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/tests/test_json_schema_loader.py +0 -0
  71. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/tests/test_keyword_extraction.py +0 -0
  72. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/tests/test_litellm_llm.py +0 -0
  73. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/tests/test_no_extend_propagation.py +0 -0
  74. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/tests/test_openrouter_llm.py +0 -0
  75. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/tests/test_schema_loader.py +0 -0
  76. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/tests/test_security.py +0 -0
  77. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/tests/test_state.py +0 -0
  78. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/tests/test_telemetry.py +0 -0
  79. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/tests/test_validation.py +0 -0
  80. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/tests/test_validation_agent.py +0 -0
  81. {hedit-0.7.6.dev3 → hedit-0.7.6.dev4}/tests/test_version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hedit
3
- Version: 0.7.6.dev3
3
+ Version: 0.7.6.dev4
4
4
  Summary: Multi-agent system for HED annotation generation and validation
5
5
  Author-email: Annotation Garden Initiative <info@annotation.garden>
6
6
  License-Expression: MIT
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hedit
3
- Version: 0.7.6.dev3
3
+ Version: 0.7.6.dev4
4
4
  Summary: Multi-agent system for HED annotation generation and validation
5
5
  Author-email: Annotation Garden Initiative <info@annotation.garden>
6
6
  License-Expression: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "hedit"
7
- version = "0.7.6.dev3"
7
+ version = "0.7.6.dev4"
8
8
  description = "Multi-agent system for HED annotation generation and validation"
9
9
  readme = "PKG_README.md"
10
10
  requires-python = ">=3.12"
@@ -113,8 +113,8 @@ def create_openrouter_workflow(
113
113
  # Apply defaults from environment
114
114
  default_annotation_model = os.getenv("ANNOTATION_MODEL", "anthropic/claude-haiku-4.5")
115
115
  default_annotation_provider = os.getenv("ANNOTATION_PROVIDER", "anthropic")
116
- default_eval_model = os.getenv("EVALUATION_MODEL", "openai/gpt-oss-120b")
117
- default_eval_provider = os.getenv("EVALUATION_PROVIDER", "groq")
116
+ default_eval_model = os.getenv("EVALUATION_MODEL", "qwen/qwen3.5-397b-a17b")
117
+ default_eval_provider = os.getenv("EVALUATION_PROVIDER")
118
118
 
119
119
  # Resolve final values: parameter > env var > default
120
120
  actual_annotation_model = get_model_name(annotation_model or default_annotation_model)
@@ -240,8 +240,8 @@ def create_byok_vision_agent(
240
240
  Configured VisionAgent using the user's key and model settings
241
241
  """
242
242
  # Use user-provided settings or fall back to server defaults
243
- default_vision_model = os.getenv("VISION_MODEL", "qwen/qwen3-vl-30b-a3b-instruct")
244
- default_vision_provider = os.getenv("VISION_PROVIDER", "deepinfra/fp8")
243
+ default_vision_model = os.getenv("VISION_MODEL", "qwen/qwen3-vl-32b-instruct")
244
+ default_vision_provider = os.getenv("VISION_PROVIDER", "novita")
245
245
 
246
246
  actual_model = vision_model if vision_model else default_vision_model
247
247
  actual_temperature = temperature if temperature is not None else 0.3
@@ -354,7 +354,7 @@ async def lifespan(app: FastAPI):
354
354
  # Log configuration (env vars are read by create_openrouter_workflow)
355
355
  print("Using OpenRouter with models:")
356
356
  print(f" Annotation: {os.getenv('ANNOTATION_MODEL', 'anthropic/claude-haiku-4.5')}")
357
- print(f" Evaluation: {os.getenv('EVALUATION_MODEL', 'qwen/qwen3-235b-a22b-2507')}")
357
+ print(f" Evaluation: {os.getenv('EVALUATION_MODEL', 'qwen/qwen3.5-397b-a17b')}")
358
358
  print(f" Provider (annotation): {os.getenv('ANNOTATION_PROVIDER', 'anthropic')}")
359
359
  print(f" Provider (eval): {os.getenv('EVALUATION_PROVIDER', '') or '(auto-routed)'}")
360
360
 
@@ -395,8 +395,8 @@ async def lifespan(app: FastAPI):
395
395
 
396
396
  # Initialize vision agent (only for OpenRouter)
397
397
  if llm_provider == "openrouter":
398
- vision_model = os.getenv("VISION_MODEL", "qwen/qwen3-vl-30b-a3b-instruct")
399
- vision_provider = os.getenv("VISION_PROVIDER", "deepinfra/fp8")
398
+ vision_model = os.getenv("VISION_MODEL", "qwen/qwen3-vl-32b-instruct")
399
+ vision_provider = os.getenv("VISION_PROVIDER", "novita")
400
400
 
401
401
  print(f"Initializing vision model: {vision_model} (provider: {vision_provider})")
402
402
 
@@ -666,7 +666,7 @@ async def annotate(
666
666
  model_name = (
667
667
  request.model
668
668
  or req.headers.get("x-openrouter-model")
669
- or os.getenv("ANNOTATION_MODEL", "openai/gpt-oss-120b")
669
+ or os.getenv("ANNOTATION_MODEL", "anthropic/claude-haiku-4.5")
670
670
  )
671
671
  temperature = request.temperature
672
672
  if temperature is None:
@@ -815,7 +815,7 @@ async def annotate_from_image(
815
815
  validator_path=_byok_config.get("validator_path"),
816
816
  use_js_validator=_byok_config.get("use_js_validator", True),
817
817
  )
818
- # Note: Vision agent uses its own provider (deepinfra/fp8 for qwen-vl)
818
+ # Note: Vision agent uses its own provider (novita for qwen-vl)
819
819
  # Only pass provider_override to vision if a custom vision_model was specified
820
820
  vision_provider = provider_override if vision_model_override else None
821
821
  active_vision_agent = create_byok_vision_agent(
@@ -877,7 +877,7 @@ async def annotate_from_image(
877
877
  model_name = (
878
878
  request.model
879
879
  or req.headers.get("x-openrouter-model")
880
- or os.getenv("ANNOTATION_MODEL", "openai/gpt-oss-120b")
880
+ or os.getenv("ANNOTATION_MODEL", "anthropic/claude-haiku-4.5")
881
881
  )
882
882
  temperature = request.temperature
883
883
  if temperature is None:
@@ -967,7 +967,7 @@ async def _collect_stream_telemetry(
967
967
  model_name = (
968
968
  request.model
969
969
  or req.headers.get("x-openrouter-model")
970
- or os.getenv("ANNOTATION_MODEL", "openai/gpt-oss-120b")
970
+ or os.getenv("ANNOTATION_MODEL", "anthropic/claude-haiku-4.5")
971
971
  )
972
972
  temperature = request.temperature
973
973
  if temperature is None:
@@ -1386,7 +1386,7 @@ async def annotate_from_image_stream(
1386
1386
  validator_path=_byok_config.get("validator_path"),
1387
1387
  use_js_validator=_byok_config.get("use_js_validator", True),
1388
1388
  )
1389
- # Note: Vision agent uses its own provider (deepinfra/fp8 for qwen-vl)
1389
+ # Note: Vision agent uses its own provider (novita for qwen-vl)
1390
1390
  # Only pass provider_override to vision if a custom vision_model was specified
1391
1391
  vision_provider = provider_override if vision_model_override else None
1392
1392
  active_vision_agent = create_byok_vision_agent(
@@ -1785,7 +1785,7 @@ async def submit_feedback(request: FeedbackRequest) -> FeedbackResponse:
1785
1785
  )
1786
1786
 
1787
1787
  # Create LLM for triage
1788
- model = os.getenv("ANNOTATION_MODEL", "openai/gpt-oss-120b")
1788
+ model = os.getenv("ANNOTATION_MODEL", "anthropic/claude-haiku-4.5")
1789
1789
  provider = os.getenv("LLM_PROVIDER_PREFERENCE", "")
1790
1790
  llm = create_openrouter_llm(
1791
1791
  model=model,
@@ -41,7 +41,7 @@ class AnnotationRequest(BaseModel):
41
41
  model: str | None = Field(
42
42
  default=None,
43
43
  description="Override model for annotation (BYOK mode only, e.g., 'openai/gpt-4o')",
44
- examples=["openai/gpt-4o", "anthropic/claude-3.5-sonnet", "qwen/qwen3-235b-a22b-2507"],
44
+ examples=["anthropic/claude-haiku-4.5", "qwen/qwen3.5-122b-a10b", "qwen/qwen3.5-397b-a17b"],
45
45
  )
46
46
  provider: str | None = Field(
47
47
  default=None,
@@ -177,7 +177,7 @@ class ImageAnnotationRequest(BaseModel):
177
177
  vision_model: str | None = Field(
178
178
  default=None,
179
179
  description="Override vision model for image description (BYOK mode only)",
180
- examples=["qwen/qwen3-vl-30b-a3b-instruct", "openai/gpt-4o"],
180
+ examples=["qwen/qwen3-vl-32b-instruct", "qwen/qwen3-vl-235b-a22b-instruct"],
181
181
  )
182
182
  provider: str | None = Field(
183
183
  default=None,
@@ -41,13 +41,13 @@ DEFAULT_DEV_API_URL = "https://api.annotation.garden/hedit-dev"
41
41
  DEFAULT_MODEL = "anthropic/claude-haiku-4.5"
42
42
  DEFAULT_PROVIDER = "anthropic"
43
43
 
44
- # Evaluation model: Qwen3-235B (auto-routed by OpenRouter)
45
- DEFAULT_EVAL_MODEL = "qwen/qwen3-235b-a22b-2507"
44
+ # Evaluation model: Qwen3.5-397B MoE (most capable Qwen, high throughput)
45
+ DEFAULT_EVAL_MODEL = "qwen/qwen3.5-397b-a17b"
46
46
  DEFAULT_EVAL_PROVIDER = None
47
47
 
48
- # Vision model: Qwen3-VL for image descriptions
49
- DEFAULT_VISION_MODEL = "qwen/qwen3-vl-30b-a3b-instruct"
50
- DEFAULT_VISION_PROVIDER = "deepinfra/fp8"
48
+ # Vision model: Qwen3-VL-32B for image descriptions
49
+ DEFAULT_VISION_MODEL = "qwen/qwen3-vl-32b-instruct"
50
+ DEFAULT_VISION_PROVIDER = None
51
51
 
52
52
 
53
53
  class CredentialsConfig(BaseModel):
@@ -77,11 +77,10 @@ class LocalExecutionBackend(ExecutionBackend):
77
77
 
78
78
  Args:
79
79
  api_key: OpenRouter API key (required for LLM operations, optional for health/validate)
80
- model: Model for text annotation (default: openai/gpt-oss-120b)
81
- eval_model: Model for evaluation/assessment agents (default: same as model).
82
- Use a consistent model like qwen/qwen3-235b-a22b for fair benchmarking.
83
- eval_provider: Provider for evaluation model (e.g., Cerebras for qwen models)
84
- vision_model: Model for image annotation (default: qwen/qwen3-vl-30b-a3b-instruct)
80
+ model: Model for text annotation (default: anthropic/claude-haiku-4.5)
81
+ eval_model: Model for evaluation/assessment agents (default: qwen/qwen3.5-397b-a17b)
82
+ eval_provider: Provider for evaluation model (None = OpenRouter auto-routes)
83
+ vision_model: Model for image annotation (default: qwen/qwen3-vl-32b-instruct)
85
84
  provider: Provider preference (cleared if custom model specified)
86
85
  temperature: LLM temperature (0.0-1.0)
87
86
  schema_dir: Optional directory with JSON schemas (None = fetch from GitHub)
@@ -102,7 +102,7 @@ ModelOption = Annotated[
102
102
  typer.Option(
103
103
  "--model",
104
104
  "-m",
105
- help="Model to use (e.g., openai/gpt-oss-120b, gpt-4o-mini)",
105
+ help="Model to use (e.g., anthropic/claude-haiku-4.5, qwen/qwen3.5-122b-a10b)",
106
106
  ),
107
107
  ]
108
108
 
@@ -56,7 +56,7 @@ async def process_feedback_file(
56
56
  sys.exit(1)
57
57
 
58
58
  # Get model configuration from environment
59
- model = os.getenv("ANNOTATION_MODEL", "openai/gpt-oss-120b")
59
+ model = os.getenv("ANNOTATION_MODEL", "anthropic/claude-haiku-4.5")
60
60
  provider = os.getenv("LLM_PROVIDER_PREFERENCE", "")
61
61
 
62
62
  # Create LLM
@@ -29,7 +29,7 @@ from langchain_core.messages import BaseMessage
29
29
 
30
30
 
31
31
  def create_litellm_openrouter(
32
- model: str = "openai/gpt-oss-120b",
32
+ model: str = "anthropic/claude-haiku-4.5",
33
33
  api_key: str | None = None,
34
34
  temperature: float = 0.1,
35
35
  max_tokens: int | None = None,
@@ -13,7 +13,7 @@ from langchain_core.messages import BaseMessage
13
13
 
14
14
 
15
15
  def create_openrouter_llm(
16
- model: str = "openai/gpt-oss-120b",
16
+ model: str = "anthropic/claude-haiku-4.5",
17
17
  api_key: str | None = None,
18
18
  temperature: float = 0.1,
19
19
  max_tokens: int | None = None,
@@ -28,7 +28,7 @@ def create_openrouter_llm(
28
28
  to include cache_control markers for 90% cost reduction on cache hits.
29
29
 
30
30
  Args:
31
- model: Model identifier (e.g., "openai/gpt-oss-120b", "anthropic/claude-haiku-4.5")
31
+ model: Model identifier (e.g., "anthropic/claude-haiku-4.5", "qwen/qwen3.5-397b-a17b")
32
32
  api_key: OpenRouter API key (defaults to OPENROUTER_API_KEY env var)
33
33
  temperature: Sampling temperature (0.0-1.0)
34
34
  max_tokens: Maximum tokens to generate
@@ -1,6 +1,6 @@
1
1
  """Version information for HEDit."""
2
2
 
3
- __version__ = "0.7.6.dev3"
3
+ __version__ = "0.7.6.dev4"
4
4
  __version_info__ = (0, 7, 6, "dev")
5
5
 
6
6
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes