@crowandraven/evalkeeper 0.1.1 → 0.3.0

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 (58) hide show
  1. package/README.md +2 -2
  2. package/dist/attention.js +2 -1
  3. package/dist/attention.js.map +1 -1
  4. package/dist/board.d.ts +2 -0
  5. package/dist/glossary.d.ts +1 -1
  6. package/dist/glossary.js +1 -1
  7. package/dist/glossary.js.map +1 -1
  8. package/dist/health.js +1 -1
  9. package/dist/health.js.map +1 -1
  10. package/dist/importCases.d.ts +94 -0
  11. package/dist/importCases.js +185 -0
  12. package/dist/importCases.js.map +1 -0
  13. package/dist/index.d.ts +1 -0
  14. package/dist/index.js +1 -0
  15. package/dist/index.js.map +1 -1
  16. package/dist/labels.d.ts +9 -3
  17. package/dist/labels.js +2 -0
  18. package/dist/labels.js.map +1 -1
  19. package/dist/memoryStore.js +3 -2
  20. package/dist/memoryStore.js.map +1 -1
  21. package/dist/models.d.ts +44 -7
  22. package/dist/models.js +48 -7
  23. package/dist/models.js.map +1 -1
  24. package/dist/runner.d.ts +25 -1
  25. package/dist/runner.js +64 -7
  26. package/dist/runner.js.map +1 -1
  27. package/dist/settings.d.ts +42 -3
  28. package/dist/settings.js +101 -11
  29. package/dist/settings.js.map +1 -1
  30. package/dist/store.d.ts +18 -2
  31. package/dist/suggest.js +4 -2
  32. package/dist/suggest.js.map +1 -1
  33. package/dist/testing.js +48 -0
  34. package/dist/testing.js.map +1 -1
  35. package/dist/types.d.ts +11 -0
  36. package/dist/types.js.map +1 -1
  37. package/dist/weekly.js +5 -2
  38. package/dist/weekly.js.map +1 -1
  39. package/package.json +2 -2
  40. package/src/attention.ts +2 -1
  41. package/src/board.ts +2 -0
  42. package/src/glossary.ts +1 -1
  43. package/src/health.ts +3 -1
  44. package/src/importCases.ts +252 -0
  45. package/src/index.ts +1 -0
  46. package/src/labels.ts +9 -4
  47. package/src/memoryStore.ts +6 -2
  48. package/src/models.ts +83 -10
  49. package/src/runner.ts +102 -15
  50. package/src/settings.ts +125 -14
  51. package/src/store.ts +19 -2
  52. package/src/suggest.ts +3 -1
  53. package/src/testing.ts +56 -0
  54. package/src/types.ts +11 -0
  55. package/src/weekly.ts +5 -2
  56. package/templates/app/evals/[suite]/page.tsx +1 -2
  57. package/templates/app/evals/feedback/page.tsx +11 -6
  58. package/templates/app/evals/page.tsx +40 -0
@@ -7,7 +7,6 @@ import {
7
7
  money,
8
8
  probabilityQuality,
9
9
  perAnswer,
10
- type ReasoningEffort,
11
10
  retiresLabel,
12
11
  seconds,
13
12
  seriousMistakes,
@@ -75,7 +74,7 @@ export default async function SuitePage({
75
74
  [
76
75
  r.key,
77
76
  await runner.estimateRun(key, r.model, "ALL", 1, {
78
- reasoningEffort: r.effort as ReasoningEffort | null,
77
+ reasoningEffort: r.effort,
79
78
  }),
80
79
  ] as const,
81
80
  ),
@@ -1,4 +1,3 @@
1
- import Link from "next/link";
2
1
  import {
3
2
  asText,
4
3
  thumbsSummary,
@@ -103,11 +102,17 @@ export default async function FeedbackPage() {
103
102
  </h2>
104
103
  {open.length === 0 && (
105
104
  <p className="text-sm text-muted">
106
- Nothing waiting. Rate an answer on the{" "}
107
- <Link href="/try" className="underline">
108
- try it
109
- </Link>{" "}
110
- page to see one here.
105
+ Nothing waiting. Ratings show up here once an AI feature has a
106
+ thumbs up and down (step 8 of{" "}
107
+ <a
108
+ href="https://github.com/seanhudson/evalkeeper/blob/main/docs/adding-to-your-app.md#8-add-thumbs-to-your-ai-answers-optional"
109
+ target="_blank"
110
+ rel="noreferrer"
111
+ className="underline"
112
+ >
113
+ the guide
114
+ </a>
115
+ ).
111
116
  </p>
112
117
  )}
113
118
  <div className="space-y-3">
@@ -120,6 +120,7 @@ export default async function EvalsHub() {
120
120
  Suites
121
121
  <InfoTip term="suites" />
122
122
  </h2>
123
+ {boards.length === 0 && <NoSuites />}
123
124
  <div className="space-y-4">
124
125
  {boards.map((b, i) => {
125
126
  const h = suiteHealth(
@@ -147,6 +148,45 @@ export default async function EvalsHub() {
147
148
  );
148
149
  }
149
150
 
151
+ /** Before the first suite: what a suite is, and how to add one. */
152
+ function NoSuites() {
153
+ return (
154
+ <Card className="readable space-y-3 text-sm">
155
+ <p className="font-semibold">No suites yet</p>
156
+ <p className="text-muted">
157
+ A suite tests one AI feature: its cases, the answers a person confirms,
158
+ and the checks that grade any model against them. To add one:
159
+ </p>
160
+ <ol className="list-decimal space-y-2 pl-4">
161
+ <li>
162
+ Write it: the input and answer shapes with zod, two or three checks,{" "}
163
+ <code>run</code>, and <code>grade</code>.
164
+ </li>
165
+ <li>
166
+ Add it to <code>SUITES</code> in <code>lib/evalkeeper/index.ts</code>,
167
+ with its instructions hash.
168
+ </li>
169
+ <li>
170
+ Add cases (here, or with <code>importCases</code> from files you
171
+ have), confirm their answers, and test models.
172
+ </li>
173
+ </ol>
174
+ <p className="text-muted">
175
+ Step by step:{" "}
176
+ <a
177
+ href="https://github.com/seanhudson/evalkeeper/blob/main/docs/adding-to-your-app.md#5-write-your-first-suite"
178
+ target="_blank"
179
+ rel="noreferrer"
180
+ className="underline"
181
+ >
182
+ Write your first suite
183
+ </a>
184
+ .
185
+ </p>
186
+ </Card>
187
+ );
188
+ }
189
+
150
190
  function Stat({
151
191
  title,
152
192
  term,