Skip to content

Commit 6b5595b

Browse files
author
cellarius
committed
refactor: reduce CLI complexity and improve typing across optimize-anything
- decompose large CLI flows into semantic helper functions - reduce worst-function and average complexity across core modules - improve typing to eliminate remaining mypy errors - preserve CLI behavior and public help surfaces - verified via pytest, eval harness, and CLI smoke checks
1 parent dd565b8 commit 6b5595b

8 files changed

Lines changed: 838 additions & 526 deletions

File tree

src/optimize_anything/cli.py

Lines changed: 518 additions & 319 deletions
Large diffs are not rendered by default.

src/optimize_anything/evaluator_generator.py

Lines changed: 51 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import json
44
import textwrap
55
from collections.abc import Mapping
6+
from numbers import Real
67
from typing import Any
78

89

@@ -104,33 +105,24 @@ def _extract_rubric_summary(intake: Mapping[str, Any] | None) -> str:
104105
if not intake:
105106
return "No rubric summary provided."
106107

107-
quality_dimensions = intake.get("quality_dimensions")
108-
if isinstance(quality_dimensions, list) and quality_dimensions:
109-
fragments: list[str] = []
110-
for item in quality_dimensions:
111-
if not isinstance(item, Mapping):
112-
continue
113-
name = str(item.get("name", "")).strip()
114-
weight = item.get("weight")
115-
if not name:
116-
continue
117-
try:
118-
fragments.append(f"{name}:{float(weight):.2f}")
119-
except (TypeError, ValueError):
120-
continue
121-
if fragments:
122-
return f"quality_dimensions={', '.join(fragments)}"
108+
quality_dimension_summary = _format_quality_dimension_summary(
109+
intake.get("quality_dimensions")
110+
)
111+
if quality_dimension_summary is not None:
112+
return quality_dimension_summary
123113

124114
for key in ("rubric_summary", "rubric_brief", "rubric"):
125115
value = intake.get(key)
126116
if value not in (None, ""):
127117
return _compact_text(value, max_length=240)
128118

129-
fragments = []
130-
for key in ("criteria", "rubric_dimensions", "dimensions", "focus"):
131-
value = intake.get(key)
132-
if value not in (None, ""):
133-
fragments.append(f"{key}={_compact_text(value, max_length=96)}")
119+
fragments = _collect_rubric_fragments(
120+
intake,
121+
"criteria",
122+
"rubric_dimensions",
123+
"dimensions",
124+
"focus",
125+
)
134126

135127
if fragments:
136128
joined = "; ".join(fragments)
@@ -141,6 +133,40 @@ def _extract_rubric_summary(intake: Mapping[str, Any] | None) -> str:
141133
return "No rubric summary provided."
142134

143135

136+
def _format_quality_dimension_summary(value: Any) -> str | None:
137+
if not isinstance(value, list) or not value:
138+
return None
139+
140+
fragments: list[str] = []
141+
for item in value:
142+
if not isinstance(item, Mapping):
143+
continue
144+
name = str(item.get("name", "")).strip()
145+
weight = item.get("weight")
146+
if not name or not isinstance(weight, (Real, str)):
147+
continue
148+
try:
149+
fragments.append(f"{name}:{float(weight):.2f}")
150+
except (TypeError, ValueError):
151+
continue
152+
153+
if not fragments:
154+
return None
155+
return f"quality_dimensions={', '.join(fragments)}"
156+
157+
158+
def _collect_rubric_fragments(
159+
intake: Mapping[str, Any],
160+
*keys: str,
161+
) -> list[str]:
162+
fragments: list[str] = []
163+
for key in keys:
164+
value = intake.get(key)
165+
if value not in (None, ""):
166+
fragments.append(f"{key}={_compact_text(value, max_length=96)}")
167+
return fragments
168+
169+
144170
def _default_quality_dimensions() -> list[tuple[str, float]]:
145171
"""Return default quality dimensions, sourced from intake module constants."""
146172
from optimize_anything.intake import DEFAULT_QUALITY_DIMENSIONS
@@ -164,8 +190,11 @@ def _extract_quality_dimensions(
164190
name = str(item.get("name", "")).strip()
165191
if not name:
166192
continue
193+
weight = item.get("weight")
194+
if not isinstance(weight, (Real, str)):
195+
continue
167196
try:
168-
weight = float(item.get("weight"))
197+
weight = float(weight)
169198
except (TypeError, ValueError):
170199
continue
171200
dimensions.append((name, weight))

src/optimize_anything/evaluators.py

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -157,17 +157,25 @@ def _parse_evaluator_result(result: Any, score_range: str = "unit") -> tuple[flo
157157
try:
158158
score = float(raw_score)
159159
except (TypeError, ValueError):
160-
side_info["error"] = "Evaluator 'score' must be numeric"
161-
side_info["score"] = raw_score
162-
return 0.0, side_info
160+
return _evaluator_score_error(side_info, raw_score, "Evaluator 'score' must be numeric")
163161

164162
if not math.isfinite(score):
165-
side_info["error"] = "Evaluator 'score' must be finite"
166-
side_info["score"] = raw_score
167-
return 0.0, side_info
163+
return _evaluator_score_error(side_info, raw_score, "Evaluator 'score' must be finite")
168164

169165
if score_range == "unit" and (score < 0.0 or score > 1.0):
170-
side_info["error"] = "Evaluator 'score' must be between 0.0 and 1.0"
171-
side_info["score"] = raw_score
172-
return 0.0, side_info
166+
return _evaluator_score_error(
167+
side_info,
168+
raw_score,
169+
"Evaluator 'score' must be between 0.0 and 1.0",
170+
)
173171
return score, side_info
172+
173+
174+
def _evaluator_score_error(
175+
side_info: dict[str, Any],
176+
raw_score: Any,
177+
message: str,
178+
) -> tuple[float, dict[str, Any]]:
179+
side_info["error"] = message
180+
side_info["score"] = raw_score
181+
return 0.0, side_info

src/optimize_anything/intake.py

Lines changed: 35 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -107,38 +107,9 @@ def _normalize_quality_dimensions(value: Any) -> list[dict[str, Any]]:
107107
weights: list[float] = []
108108

109109
for idx, item in enumerate(value):
110-
if not isinstance(item, Mapping):
111-
raise ValueError(
112-
f"quality_dimensions[{idx}] must be an object with 'name' and 'weight'"
113-
)
114-
if "name" not in item:
115-
raise ValueError(f"quality_dimensions[{idx}] missing required field 'name'")
116-
if "weight" not in item:
117-
raise ValueError(f"quality_dimensions[{idx}] missing required field 'weight'")
118-
119-
name = item["name"]
120-
if not isinstance(name, str):
121-
raise ValueError(f"quality_dimensions[{idx}].name must be a string")
122-
normalized_name = name.strip()
123-
if not normalized_name:
124-
raise ValueError(
125-
f"quality_dimensions[{idx}].name must be a non-empty string"
126-
)
127-
128-
raw_weight = item["weight"]
129-
if isinstance(raw_weight, bool) or not isinstance(raw_weight, Real):
130-
raise ValueError(f"quality_dimensions[{idx}].weight must be numeric")
131-
132-
weight = float(raw_weight)
133-
if not isfinite(weight):
134-
raise ValueError(f"quality_dimensions[{idx}].weight must be finite")
135-
if weight <= 0:
136-
raise ValueError(f"quality_dimensions[{idx}].weight must be > 0")
137-
110+
normalized_name, weight = _normalize_quality_dimension_item(item, idx)
138111
if normalized_name in seen_names:
139-
raise ValueError(
140-
f"Duplicate quality dimension name: '{normalized_name}'"
141-
)
112+
raise ValueError(f"Duplicate quality dimension name: '{normalized_name}'")
142113
seen_names.add(normalized_name)
143114
names.append(normalized_name)
144115
weights.append(weight)
@@ -150,6 +121,39 @@ def _normalize_quality_dimensions(value: Any) -> list[dict[str, Any]]:
150121
]
151122

152123

124+
def _normalize_quality_dimension_item(
125+
item: Any,
126+
idx: int,
127+
) -> tuple[str, float]:
128+
if not isinstance(item, Mapping):
129+
raise ValueError(
130+
f"quality_dimensions[{idx}] must be an object with 'name' and 'weight'"
131+
)
132+
if "name" not in item:
133+
raise ValueError(f"quality_dimensions[{idx}] missing required field 'name'")
134+
if "weight" not in item:
135+
raise ValueError(f"quality_dimensions[{idx}] missing required field 'weight'")
136+
137+
name = item["name"]
138+
if not isinstance(name, str):
139+
raise ValueError(f"quality_dimensions[{idx}].name must be a string")
140+
normalized_name = name.strip()
141+
if not normalized_name:
142+
raise ValueError(f"quality_dimensions[{idx}].name must be a non-empty string")
143+
144+
raw_weight = item["weight"]
145+
if isinstance(raw_weight, bool) or not isinstance(raw_weight, Real):
146+
raise ValueError(f"quality_dimensions[{idx}].weight must be numeric")
147+
148+
weight = float(raw_weight)
149+
if not isfinite(weight):
150+
raise ValueError(f"quality_dimensions[{idx}].weight must be finite")
151+
if weight <= 0:
152+
raise ValueError(f"quality_dimensions[{idx}].weight must be > 0")
153+
154+
return normalized_name, weight
155+
156+
153157
def _normalize_weights(weights: list[float]) -> list[float]:
154158
total = sum(weights)
155159
scaled = [(weight / total) * 10000 for weight in weights]

src/optimize_anything/llm_judge.py

Lines changed: 43 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -221,14 +221,14 @@ def _parse_judge_response(
221221
score = _compute_weighted_score(parsed, quality_dimensions)
222222
else:
223223
raw_score = parsed.get("score")
224-
try:
225-
score = float(raw_score)
226-
except (TypeError, ValueError):
224+
coerced_score = _coerce_float(raw_score)
225+
if coerced_score is None:
227226
return 0.0, {
228227
"error": "LLM 'score' field is not numeric",
229228
"raw_response": raw_content[:500],
230229
**side_info,
231230
}
231+
score = coerced_score
232232

233233
if not math.isfinite(score):
234234
return 0.0, {"error": "LLM score is not finite", **side_info}
@@ -248,15 +248,21 @@ def _compute_weighted_score(
248248
for dim in quality_dimensions:
249249
dim_name = dim["name"]
250250
raw_value = parsed.get(dim_name)
251-
try:
252-
value = float(raw_value)
253-
except (TypeError, ValueError):
251+
value = _coerce_float(raw_value)
252+
if value is None:
254253
value = 0.0
255254
value = max(0.0, min(1.0, value))
256255
weighted_sum += value * dim["weight"]
257256
return weighted_sum / total_weight
258257

259258

259+
def _coerce_float(value: Any) -> float | None:
260+
try:
261+
return float(value)
262+
except (TypeError, ValueError):
263+
return None
264+
265+
260266
ANALYZE_SYSTEM_PROMPT = """\
261267
You are a careful, objective evaluator and quality analyst. You will be given
262268
a text artifact, its current score, and the scoring objective. Your job is to
@@ -434,34 +440,39 @@ def _parse_dimensions_response(raw_content: str | None) -> list[dict[str, Any]]:
434440
)
435441

436442
validated: list[dict[str, Any]] = []
437-
for i, d in enumerate(raw_dims):
438-
if not isinstance(d, dict):
439-
continue
440-
name = d.get("name")
441-
if not isinstance(name, str) or not name.strip():
442-
continue
443-
try:
444-
weight = float(d.get("weight", 0))
445-
except (TypeError, ValueError):
446-
weight = 0.0
447-
weight = max(0.0, min(1.0, weight))
448-
try:
449-
dim_score = float(d.get("score", 0))
450-
except (TypeError, ValueError):
451-
dim_score = 0.0
452-
dim_score = max(0.0, min(1.0, dim_score))
453-
description = d.get("description", "")
454-
if not isinstance(description, str):
455-
description = str(description)
456-
457-
validated.append({
458-
"name": name.strip(),
459-
"weight": weight,
460-
"score": dim_score,
461-
"description": description,
462-
})
443+
for raw_dimension in raw_dims:
444+
normalized = _normalize_dimension_entry(raw_dimension)
445+
if normalized is not None:
446+
validated.append(normalized)
463447

464448
if not validated:
465449
raise RuntimeError("No valid dimensions found in LLM response")
466450

467451
return validated
452+
453+
454+
def _normalize_dimension_entry(raw_dimension: Any) -> dict[str, Any] | None:
455+
if not isinstance(raw_dimension, dict):
456+
return None
457+
458+
name = raw_dimension.get("name")
459+
if not isinstance(name, str):
460+
return None
461+
normalized_name = name.strip()
462+
if not normalized_name:
463+
return None
464+
465+
description = raw_dimension.get("description", "")
466+
return {
467+
"name": normalized_name,
468+
"weight": _clamp_dimension_value(raw_dimension.get("weight", 0)),
469+
"score": _clamp_dimension_value(raw_dimension.get("score", 0)),
470+
"description": description if isinstance(description, str) else str(description),
471+
}
472+
473+
474+
def _clamp_dimension_value(value: Any) -> float:
475+
coerced = _coerce_float(value)
476+
if coerced is None:
477+
return 0.0
478+
return max(0.0, min(1.0, coerced))

0 commit comments

Comments
 (0)