diff --git a/insta-lab/app/selection.py b/insta-lab/app/selection.py index 4edca33..80d9c41 100644 --- a/insta-lab/app/selection.py +++ b/insta-lab/app/selection.py @@ -55,6 +55,8 @@ def score_candidates( w = weights or DEFAULT_WEIGHTS now = _parse_iso(now_iso) if now_iso else datetime.now(timezone.utc) max_w = max(prefs.values()) if prefs else 1.0 + if max_w <= 0: + max_w = 1.0 out: List[Dict[str, Any]] = [] for c in candidates: cat = c.get("category", "") diff --git a/insta-lab/app/selection_judge.py b/insta-lab/app/selection_judge.py index b745b96..0de93c7 100644 --- a/insta-lab/app/selection_judge.py +++ b/insta-lab/app/selection_judge.py @@ -43,7 +43,7 @@ def judge_candidates(candidates: List[Dict[str, Any]]) -> Dict[int, float]: try: client = Anthropic(api_key=ANTHROPIC_API_KEY) resp = client.messages.create( - model=ANTHROPIC_MODEL_HAIKU, max_tokens=512, + model=ANTHROPIC_MODEL_HAIKU, max_tokens=1024, messages=[{"role": "user", "content": PROMPT.format(items=items)}], ) return parse_judge_response(resp.content[0].text) diff --git a/insta-lab/tests/test_ranked_decision_api.py b/insta-lab/tests/test_ranked_decision_api.py index 9ca95d8..ad1aa34 100644 --- a/insta-lab/tests/test_ranked_decision_api.py +++ b/insta-lab/tests/test_ranked_decision_api.py @@ -40,3 +40,8 @@ def test_decision_invalid_400(client): sid = db.add_card_slate({"keyword": "x", "category": "economy"}) r = client.post(f"/api/insta/slates/{sid}/decision", json={"decision": "maybe"}) assert r.status_code == 400 + + +def test_decision_unknown_slate_404(client): + r = client.post("/api/insta/slates/99999/decision", json={"decision": "approved"}) + assert r.status_code == 404 diff --git a/insta-lab/tests/test_selection.py b/insta-lab/tests/test_selection.py index 818e80f..3d762f2 100644 --- a/insta-lab/tests/test_selection.py +++ b/insta-lab/tests/test_selection.py @@ -45,3 +45,11 @@ def test_claude_included_when_provided(): cands = [_cand(1, "A", "economy", 0.5, NOW)] out = score_candidates(cands, [], {"economy": 1.0}, {1: 1.0}, threshold=0.0, now_iso=NOW) assert out[0]["breakdown"]["claude"] == 1.0 + + +def test_all_zero_prefs_no_crash(): + cands = [{"id": 1, "keyword": "A", "category": "economy", "score": 0.8, + "suggested_at": "2026-06-11T00:00:00Z"}] + prefs = {"economy": 0.0, "psychology": 0.0} + out = score_candidates(cands, [], prefs, None, threshold=0.0, now_iso="2026-06-11T00:00:00Z") + assert out[0]["breakdown"]["account_fit"] == 0.0 # 0가중 → fit 0, 크래시 없음