Spaces:
Running on Zero
Running on Zero
refactor: rename score goal fit field
Browse filesCo-authored-by: Codex <noreply@openai.com>
- hackathon_advisor/scoring.py +5 -5
- static/app.js +2 -2
- tests/test_agent.py +4 -0
hackathon_advisor/scoring.py
CHANGED
|
@@ -11,7 +11,7 @@ class ScoreCard:
|
|
| 11 |
delight: int
|
| 12 |
ai_necessity: int
|
| 13 |
feasibility: int
|
| 14 |
-
|
| 15 |
verdict: str
|
| 16 |
echoes: tuple[SearchHit, ...]
|
| 17 |
|
|
@@ -23,7 +23,7 @@ class ScoreCard:
|
|
| 23 |
+ self.delight * 0.20
|
| 24 |
+ self.ai_necessity * 0.20
|
| 25 |
+ self.feasibility * 0.15
|
| 26 |
-
+ self.
|
| 27 |
),
|
| 28 |
1,
|
| 29 |
)
|
|
@@ -34,7 +34,7 @@ class ScoreCard:
|
|
| 34 |
"delight": self.delight,
|
| 35 |
"ai_necessity": self.ai_necessity,
|
| 36 |
"feasibility": self.feasibility,
|
| 37 |
-
"
|
| 38 |
"overall": self.overall,
|
| 39 |
"verdict": self.verdict,
|
| 40 |
"echoes": [
|
|
@@ -64,7 +64,7 @@ def score_idea(index: ProjectIndex, title: str, pitch: str, targets: list[str] |
|
|
| 64 |
)
|
| 65 |
complexity_penalty = _keyword_count(tokens, {"realtime", "video", "multiplayer", "payments", "social"})
|
| 66 |
feasibility = clamp_score(8 - complexity_penalty)
|
| 67 |
-
|
| 68 |
4
|
| 69 |
+ _keyword_count(tokens, {"local", "offline", "small", "llama", "fine", "trace", "gradio"}) * 2
|
| 70 |
+ min(len(targets), 3)
|
|
@@ -75,7 +75,7 @@ def score_idea(index: ProjectIndex, title: str, pitch: str, targets: list[str] |
|
|
| 75 |
delight=delight,
|
| 76 |
ai_necessity=ai_necessity,
|
| 77 |
feasibility=feasibility,
|
| 78 |
-
|
| 79 |
verdict=verdict,
|
| 80 |
echoes=tuple(hits),
|
| 81 |
)
|
|
|
|
| 11 |
delight: int
|
| 12 |
ai_necessity: int
|
| 13 |
feasibility: int
|
| 14 |
+
goal_fit: int
|
| 15 |
verdict: str
|
| 16 |
echoes: tuple[SearchHit, ...]
|
| 17 |
|
|
|
|
| 23 |
+ self.delight * 0.20
|
| 24 |
+ self.ai_necessity * 0.20
|
| 25 |
+ self.feasibility * 0.15
|
| 26 |
+
+ self.goal_fit * 0.15
|
| 27 |
),
|
| 28 |
1,
|
| 29 |
)
|
|
|
|
| 34 |
"delight": self.delight,
|
| 35 |
"ai_necessity": self.ai_necessity,
|
| 36 |
"feasibility": self.feasibility,
|
| 37 |
+
"goal_fit": self.goal_fit,
|
| 38 |
"overall": self.overall,
|
| 39 |
"verdict": self.verdict,
|
| 40 |
"echoes": [
|
|
|
|
| 64 |
)
|
| 65 |
complexity_penalty = _keyword_count(tokens, {"realtime", "video", "multiplayer", "payments", "social"})
|
| 66 |
feasibility = clamp_score(8 - complexity_penalty)
|
| 67 |
+
goal_fit = clamp_score(
|
| 68 |
4
|
| 69 |
+ _keyword_count(tokens, {"local", "offline", "small", "llama", "fine", "trace", "gradio"}) * 2
|
| 70 |
+ min(len(targets), 3)
|
|
|
|
| 75 |
delight=delight,
|
| 76 |
ai_necessity=ai_necessity,
|
| 77 |
feasibility=feasibility,
|
| 78 |
+
goal_fit=goal_fit,
|
| 79 |
verdict=verdict,
|
| 80 |
echoes=tuple(hits),
|
| 81 |
)
|
static/app.js
CHANGED
|
@@ -700,7 +700,7 @@ function renderScore(score) {
|
|
| 700 |
["Delight", score?.delight || 0],
|
| 701 |
["AI Need", score?.ai_necessity || 0],
|
| 702 |
["Feasible", score?.feasibility || 0],
|
| 703 |
-
["Goal Fit", score?.
|
| 704 |
];
|
| 705 |
scoreEl.innerHTML = rows
|
| 706 |
.map(
|
|
@@ -999,7 +999,7 @@ function renderArtifactCanvas(artifact) {
|
|
| 999 |
["Delight", seal.delight || 0],
|
| 1000 |
["AI Need", seal.ai_necessity || 0],
|
| 1001 |
["Feasible", seal.feasibility || 0],
|
| 1002 |
-
["Goal Fit", seal.
|
| 1003 |
];
|
| 1004 |
rows.forEach(([label, value], index) => {
|
| 1005 |
const y = 418 + index * 34;
|
|
|
|
| 700 |
["Delight", score?.delight || 0],
|
| 701 |
["AI Need", score?.ai_necessity || 0],
|
| 702 |
["Feasible", score?.feasibility || 0],
|
| 703 |
+
["Goal Fit", score?.goal_fit || 0],
|
| 704 |
];
|
| 705 |
scoreEl.innerHTML = rows
|
| 706 |
.map(
|
|
|
|
| 999 |
["Delight", seal.delight || 0],
|
| 1000 |
["AI Need", seal.ai_necessity || 0],
|
| 1001 |
["Feasible", seal.feasibility || 0],
|
| 1002 |
+
["Goal Fit", seal.goal_fit || 0],
|
| 1003 |
];
|
| 1004 |
rows.forEach(([label, value], index) => {
|
| 1005 |
const y = 418 + index * 34;
|
tests/test_agent.py
CHANGED
|
@@ -25,6 +25,10 @@ def test_agent_scores_and_persists_idea() -> None:
|
|
| 25 |
assert result.score is not None
|
| 26 |
assert result.state["ideas"]
|
| 27 |
assert result.state["ideas"][0]["score"] is not None
|
|
|
|
|
|
|
|
|
|
|
|
|
| 28 |
assert result.state["trace"]
|
| 29 |
assert result.state["last_tool_resolution"]["call"]["name"] == "save_idea"
|
| 30 |
assert result.state["trace"][0]["tool_resolution"]["call"]["name"] == "save_idea"
|
|
|
|
| 25 |
assert result.score is not None
|
| 26 |
assert result.state["ideas"]
|
| 27 |
assert result.state["ideas"][0]["score"] is not None
|
| 28 |
+
assert "goal_fit" in result.state["ideas"][0]["score"]
|
| 29 |
+
assert "prize_fit" not in result.state["ideas"][0]["score"]
|
| 30 |
+
assert "goal_fit" in result.artifact["seal"]
|
| 31 |
+
assert "prize_fit" not in result.artifact["seal"]
|
| 32 |
assert result.state["trace"]
|
| 33 |
assert result.state["last_tool_resolution"]["call"]["name"] == "save_idea"
|
| 34 |
assert result.state["trace"][0]["tool_resolution"]["call"]["name"] == "save_idea"
|