latch-eval-tools 0.1.3__tar.gz → 0.1.5__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 (34) hide show
  1. {latch_eval_tools-0.1.3 → latch_eval_tools-0.1.5}/PKG-INFO +1 -1
  2. {latch_eval_tools-0.1.3 → latch_eval_tools-0.1.5}/pyproject.toml +1 -1
  3. {latch_eval_tools-0.1.3 → latch_eval_tools-0.1.5}/src/latch_eval_tools/harness/claudecode.py +29 -2
  4. {latch_eval_tools-0.1.3 → latch_eval_tools-0.1.5}/.gitignore +0 -0
  5. {latch_eval_tools-0.1.3 → latch_eval_tools-0.1.5}/Justfile +0 -0
  6. {latch_eval_tools-0.1.3 → latch_eval_tools-0.1.5}/LICENSE +0 -0
  7. {latch_eval_tools-0.1.3 → latch_eval_tools-0.1.5}/README.md +0 -0
  8. {latch_eval_tools-0.1.3 → latch_eval_tools-0.1.5}/src/latch_eval_tools/__init__.py +0 -0
  9. {latch_eval_tools-0.1.3 → latch_eval_tools-0.1.5}/src/latch_eval_tools/answer_extraction.py +0 -0
  10. {latch_eval_tools-0.1.3 → latch_eval_tools-0.1.5}/src/latch_eval_tools/cli/__init__.py +0 -0
  11. {latch_eval_tools-0.1.3 → latch_eval_tools-0.1.5}/src/latch_eval_tools/cli/eval_lint.py +0 -0
  12. {latch_eval_tools-0.1.3 → latch_eval_tools-0.1.5}/src/latch_eval_tools/eval_server.py +0 -0
  13. {latch_eval_tools-0.1.3 → latch_eval_tools-0.1.5}/src/latch_eval_tools/faas_utils.py +0 -0
  14. {latch_eval_tools-0.1.3 → latch_eval_tools-0.1.5}/src/latch_eval_tools/graders/__init__.py +0 -0
  15. {latch_eval_tools-0.1.3 → latch_eval_tools-0.1.5}/src/latch_eval_tools/graders/base.py +0 -0
  16. {latch_eval_tools-0.1.3 → latch_eval_tools-0.1.5}/src/latch_eval_tools/graders/distribution.py +0 -0
  17. {latch_eval_tools-0.1.3 → latch_eval_tools-0.1.5}/src/latch_eval_tools/graders/label_set.py +0 -0
  18. {latch_eval_tools-0.1.3 → latch_eval_tools-0.1.5}/src/latch_eval_tools/graders/marker_gene.py +0 -0
  19. {latch_eval_tools-0.1.3 → latch_eval_tools-0.1.5}/src/latch_eval_tools/graders/multiple_choice.py +0 -0
  20. {latch_eval_tools-0.1.3 → latch_eval_tools-0.1.5}/src/latch_eval_tools/graders/numeric.py +0 -0
  21. {latch_eval_tools-0.1.3 → latch_eval_tools-0.1.5}/src/latch_eval_tools/graders/spatial.py +0 -0
  22. {latch_eval_tools-0.1.3 → latch_eval_tools-0.1.5}/src/latch_eval_tools/harness/__init__.py +0 -0
  23. {latch_eval_tools-0.1.3 → latch_eval_tools-0.1.5}/src/latch_eval_tools/harness/minisweagent.py +0 -0
  24. {latch_eval_tools-0.1.3 → latch_eval_tools-0.1.5}/src/latch_eval_tools/harness/plotsagent.py +0 -0
  25. {latch_eval_tools-0.1.3 → latch_eval_tools-0.1.5}/src/latch_eval_tools/harness/runner.py +0 -0
  26. {latch_eval_tools-0.1.3 → latch_eval_tools-0.1.5}/src/latch_eval_tools/harness/utils.py +0 -0
  27. {latch_eval_tools-0.1.3 → latch_eval_tools-0.1.5}/src/latch_eval_tools/headless_eval_server.py +0 -0
  28. {latch_eval_tools-0.1.3 → latch_eval_tools-0.1.5}/src/latch_eval_tools/linter/__init__.py +0 -0
  29. {latch_eval_tools-0.1.3 → latch_eval_tools-0.1.5}/src/latch_eval_tools/linter/explanations.py +0 -0
  30. {latch_eval_tools-0.1.3 → latch_eval_tools-0.1.5}/src/latch_eval_tools/linter/runner.py +0 -0
  31. {latch_eval_tools-0.1.3 → latch_eval_tools-0.1.5}/src/latch_eval_tools/linter/schema.py +0 -0
  32. {latch_eval_tools-0.1.3 → latch_eval_tools-0.1.5}/src/latch_eval_tools/linter/validators.py +0 -0
  33. {latch_eval_tools-0.1.3 → latch_eval_tools-0.1.5}/src/latch_eval_tools/types.py +0 -0
  34. {latch_eval_tools-0.1.3 → latch_eval_tools-0.1.5}/src/latch_eval_tools/wrapper_entrypoint.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: latch-eval-tools
3
- Version: 0.1.3
3
+ Version: 0.1.5
4
4
  Summary: Shared eval tools for single-cell bench, spatial bench, and future biology benchmarks.
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.10
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "latch-eval-tools"
7
- version = "0.1.3"
7
+ version = "0.1.5"
8
8
  description = "Shared eval tools for single-cell bench, spatial bench, and future biology benchmarks."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -38,9 +38,9 @@ def run_claudecode_task(
38
38
  agent_log_file.unlink()
39
39
 
40
40
  enhanced_prompt = _enhance_prompt_with_local_files(task_prompt, work_dir)
41
- enhanced_prompt += """
41
+ enhanced_prompt += f"""
42
42
 
43
- CRITICAL: You must write eval_answer.json BEFORE signaling completion.
43
+ CRITICAL: You must write eval_answer.json BEFORE signaling completion in the {work_dir}.
44
44
  Correct order: 1) Perform analysis 2) Write eval_answer.json with your answer 3) Exit"""
45
45
 
46
46
  cmd = ["claude", "--print", "--dangerously-skip-permissions", "--verbose", "--output-format", "stream-json"]
@@ -49,6 +49,30 @@ Correct order: 1) Perform analysis 2) Write eval_answer.json with your answer 3)
49
49
  claude_model = MODEL_MAP.get(model_name, model_name)
50
50
  cmd.extend(["--model", claude_model])
51
51
 
52
+ run_as_claude_user = os.geteuid() == 0
53
+ if run_as_claude_user:
54
+ import pwd
55
+ import shutil
56
+ import stat
57
+ try:
58
+ pwd.getpwnam("claude")
59
+ home_dir = Path.home()
60
+ current_mode = home_dir.stat().st_mode
61
+ home_dir.chmod(current_mode | stat.S_IXOTH)
62
+
63
+ eval_cache_dir = home_dir / ".eval_cache"
64
+ if eval_cache_dir.exists():
65
+ shutil.chown(eval_cache_dir, user="claude", group="claude")
66
+ for item in eval_cache_dir.rglob("*"):
67
+ try:
68
+ shutil.chown(item, user="claude", group="claude")
69
+ except PermissionError:
70
+ pass
71
+
72
+ work_dir.chmod(0o777)
73
+ except KeyError:
74
+ run_as_claude_user = False
75
+
52
76
  env = os.environ.copy()
53
77
 
54
78
  start_time = time.time()
@@ -57,6 +81,9 @@ Correct order: 1) Perform analysis 2) Write eval_answer.json with your answer 3)
57
81
  trajectory = []
58
82
 
59
83
  try:
84
+ if run_as_claude_user:
85
+ env_vars = [f"{k}={v}" for k, v in env.items() if k.endswith("_API_KEY")]
86
+ cmd = ["runuser", "-u", "claude", "--", "env"] + env_vars + cmd
60
87
 
61
88
  process = subprocess.Popen(
62
89
  cmd,