@llm4ts/core 2.4.2 → 2.6.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.
- package/dist/Connector.d.ts +4 -0
- package/dist/Connector.d.ts.map +1 -1
- package/dist/Connector.js +8 -3
- package/dist/Connector.js.map +1 -1
- package/dist/ConnectorConfig.d.ts.map +1 -1
- package/dist/ConnectorConfig.js +2 -0
- package/dist/ConnectorConfig.js.map +1 -1
- package/dist/ContextManagement.d.ts.map +1 -1
- package/dist/ContextManagement.js +1 -0
- package/dist/ContextManagement.js.map +1 -1
- package/dist/LabelScoring.d.ts +52 -0
- package/dist/LabelScoring.d.ts.map +1 -0
- package/dist/LabelScoring.js +139 -0
- package/dist/LabelScoring.js.map +1 -0
- package/dist/LlmService.d.ts +30 -2
- package/dist/LlmService.d.ts.map +1 -1
- package/dist/LlmService.js.map +1 -1
- package/dist/Models.d.ts +34 -2
- package/dist/Models.d.ts.map +1 -1
- package/dist/Models.js +37 -1
- package/dist/Models.js.map +1 -1
- package/dist/eval/Judge.d.ts +15 -0
- package/dist/eval/Judge.d.ts.map +1 -1
- package/dist/eval/Judge.js +50 -0
- package/dist/eval/Judge.js.map +1 -1
- package/dist/judgment/FakeJudgment.d.ts +22 -0
- package/dist/judgment/FakeJudgment.d.ts.map +1 -0
- package/dist/judgment/FakeJudgment.js +42 -0
- package/dist/judgment/FakeJudgment.js.map +1 -0
- package/dist/judgment/Judgment.d.ts +57 -0
- package/dist/judgment/Judgment.d.ts.map +1 -0
- package/dist/judgment/Judgment.js +57 -0
- package/dist/judgment/Judgment.js.map +1 -0
- package/dist/judgment/LlmJudgment.d.ts +73 -0
- package/dist/judgment/LlmJudgment.d.ts.map +1 -0
- package/dist/judgment/LlmJudgment.js +239 -0
- package/dist/judgment/LlmJudgment.js.map +1 -0
- package/dist/judgment/Schemas.d.ts +163 -0
- package/dist/judgment/Schemas.d.ts.map +1 -0
- package/dist/judgment/Schemas.js +197 -0
- package/dist/judgment/Schemas.js.map +1 -0
- package/dist/judgment/TypeSafeJudgment.d.ts +46 -0
- package/dist/judgment/TypeSafeJudgment.d.ts.map +1 -0
- package/dist/judgment/TypeSafeJudgment.js +185 -0
- package/dist/judgment/TypeSafeJudgment.js.map +1 -0
- package/dist/observability/MeteredLlmService.d.ts.map +1 -1
- package/dist/observability/MeteredLlmService.js +1 -0
- package/dist/observability/MeteredLlmService.js.map +1 -1
- package/dist/providers/ConnectorFactories.d.ts.map +1 -1
- package/dist/providers/ConnectorFactories.js +2 -0
- package/dist/providers/ConnectorFactories.js.map +1 -1
- package/dist/providers/LmStudioProvider.d.ts.map +1 -1
- package/dist/providers/LmStudioProvider.js +45 -34
- package/dist/providers/LmStudioProvider.js.map +1 -1
- package/dist/providers/MlxLmProvider.d.ts +29 -0
- package/dist/providers/MlxLmProvider.d.ts.map +1 -0
- package/dist/providers/MlxLmProvider.js +249 -0
- package/dist/providers/MlxLmProvider.js.map +1 -0
- package/dist/providers/MockProvider.d.ts.map +1 -1
- package/dist/providers/MockProvider.js +11 -0
- package/dist/providers/MockProvider.js.map +1 -1
- package/dist/providers/OpenAIModels.d.ts +35 -0
- package/dist/providers/OpenAIModels.d.ts.map +1 -1
- package/dist/providers/OpenAIModels.js +36 -3
- package/dist/providers/OpenAIModels.js.map +1 -1
- package/package.json +8 -1
- package/src/Connector.ts +13 -3
- package/src/ConnectorConfig.ts +2 -0
- package/src/ContextManagement.ts +1 -0
- package/src/LabelScoring.ts +211 -0
- package/src/LlmService.ts +37 -1
- package/src/Models.ts +43 -1
- package/src/eval/Judge.ts +74 -0
- package/src/judgment/FakeJudgment.ts +90 -0
- package/src/judgment/Judgment.ts +123 -0
- package/src/judgment/LlmJudgment.ts +399 -0
- package/src/judgment/Schemas.ts +278 -0
- package/src/judgment/TypeSafeJudgment.ts +253 -0
- package/src/observability/MeteredLlmService.ts +7 -0
- package/src/providers/ConnectorFactories.ts +4 -0
- package/src/providers/LmStudioProvider.ts +64 -48
- package/src/providers/MlxLmProvider.ts +357 -0
- package/src/providers/MockProvider.ts +19 -0
- package/src/providers/OpenAIModels.ts +40 -3
package/dist/Models.js
CHANGED
|
@@ -8,6 +8,7 @@ export const LlmProvider = Schema.Literals([
|
|
|
8
8
|
"Anthropic",
|
|
9
9
|
"LmStudio",
|
|
10
10
|
"Ollama",
|
|
11
|
+
"MlxLm",
|
|
11
12
|
"OpenCode",
|
|
12
13
|
"Mock"
|
|
13
14
|
]);
|
|
@@ -21,6 +22,7 @@ export const ConnectorIds = Object.freeze({
|
|
|
21
22
|
GeminiApi: new ConnectorId({ value: "gemini-api" }),
|
|
22
23
|
LmStudio: new ConnectorId({ value: "lm-studio" }),
|
|
23
24
|
Ollama: new ConnectorId({ value: "ollama" }),
|
|
25
|
+
MlxLm: new ConnectorId({ value: "mlx-lm" }),
|
|
24
26
|
ClaudeCli: new ConnectorId({ value: "claude-cli" }),
|
|
25
27
|
GeminiCli: new ConnectorId({ value: "gemini-cli" }),
|
|
26
28
|
OpenCode: new ConnectorId({ value: "opencode" }),
|
|
@@ -37,7 +39,8 @@ export const apiConnectorIds = Object.freeze([
|
|
|
37
39
|
ConnectorIds.Anthropic,
|
|
38
40
|
ConnectorIds.GeminiApi,
|
|
39
41
|
ConnectorIds.LmStudio,
|
|
40
|
-
ConnectorIds.Ollama
|
|
42
|
+
ConnectorIds.Ollama,
|
|
43
|
+
ConnectorIds.MlxLm
|
|
41
44
|
]);
|
|
42
45
|
export const cliConnectorIds = Object.freeze([
|
|
43
46
|
ConnectorIds.ClaudeCli,
|
|
@@ -70,6 +73,8 @@ export const defaultBaseUrl = (provider) => {
|
|
|
70
73
|
return "http://localhost:1234/v1";
|
|
71
74
|
case "Ollama":
|
|
72
75
|
return "http://localhost:11434";
|
|
76
|
+
case "MlxLm":
|
|
77
|
+
return "http://localhost:8080";
|
|
73
78
|
case "OpenCode":
|
|
74
79
|
return "http://localhost:4096";
|
|
75
80
|
}
|
|
@@ -80,6 +85,7 @@ const connectorProviderTable = {
|
|
|
80
85
|
"gemini-api": "GeminiApi",
|
|
81
86
|
"lm-studio": "LmStudio",
|
|
82
87
|
ollama: "Ollama",
|
|
88
|
+
"mlx-lm": "MlxLm",
|
|
83
89
|
opencode: "OpenCode",
|
|
84
90
|
"gemini-cli": "GeminiCli",
|
|
85
91
|
mock: "Mock"
|
|
@@ -103,6 +109,8 @@ export const providerConnectorId = (provider) => {
|
|
|
103
109
|
return ConnectorIds.LmStudio;
|
|
104
110
|
case "Ollama":
|
|
105
111
|
return ConnectorIds.Ollama;
|
|
112
|
+
case "MlxLm":
|
|
113
|
+
return ConnectorIds.MlxLm;
|
|
106
114
|
case "OpenCode":
|
|
107
115
|
return ConnectorIds.OpenCode;
|
|
108
116
|
case "Mock":
|
|
@@ -212,6 +220,33 @@ export const InteractionSupport = Schema.Literals(["InteractiveStdin", "Continua
|
|
|
212
220
|
* ignored in headless runs.
|
|
213
221
|
*/
|
|
214
222
|
export const ReadOnlyEnforcement = Schema.Literals(["enforced", "advisory", "ignored"]);
|
|
223
|
+
/**
|
|
224
|
+
* How a connector produces the per-label probabilities behind `scoreLabels`:
|
|
225
|
+
* - "logprobs": read off the backend's token log-probabilities in one
|
|
226
|
+
* forward pass (a real distribution, still uncalibrated).
|
|
227
|
+
* - "verbalized": the model writes the numbers itself in a JSON reply
|
|
228
|
+
* (typically overconfident; hold to a higher bar).
|
|
229
|
+
* - "none": the connector cannot answer label questions at all.
|
|
230
|
+
*/
|
|
231
|
+
export const LabelProbabilities = Schema.Literals(["logprobs", "verbalized", "none"]);
|
|
232
|
+
/** How a label distribution's numbers were extracted (see `LabelProbabilities`). */
|
|
233
|
+
export const LabelMethod = Schema.Literals(["logprobs", "verbalized", "sampled"]);
|
|
234
|
+
/**
|
|
235
|
+
* A probability per label, normalized over the labels the caller offered.
|
|
236
|
+
* `support` is the probability mass the backend actually placed on those
|
|
237
|
+
* labels before renormalization (1 when the numbers were declared over the
|
|
238
|
+
* labels alone): a distribution renormalized from a sliver of mass is not
|
|
239
|
+
* a confident one, and callers must not treat it as one.
|
|
240
|
+
* `usage` is whatever the backend reported for the call, if anything.
|
|
241
|
+
*/
|
|
242
|
+
export class LabelDistribution extends Schema.Class("LabelDistribution")({
|
|
243
|
+
probabilities: Schema.Record(Schema.String, Schema.Number),
|
|
244
|
+
method: LabelMethod,
|
|
245
|
+
support: Schema.Number,
|
|
246
|
+
usage: Schema.optionalKey(TokenUsage),
|
|
247
|
+
model: Schema.optionalKey(Schema.String)
|
|
248
|
+
}) {
|
|
249
|
+
}
|
|
215
250
|
export class ConnectorCapabilities extends Schema.Class("ConnectorCapabilities")({
|
|
216
251
|
streaming: Schema.Boolean.pipe(Schema.withConstructorDefault(Effect.succeed(true))),
|
|
217
252
|
resumableSessions: Schema.Boolean.pipe(Schema.withConstructorDefault(Effect.succeed(false))),
|
|
@@ -220,6 +255,7 @@ export class ConnectorCapabilities extends Schema.Class("ConnectorCapabilities")
|
|
|
220
255
|
approval: Schema.Boolean.pipe(Schema.withConstructorDefault(Effect.succeed(false))),
|
|
221
256
|
structuredOutput: Schema.Boolean.pipe(Schema.withConstructorDefault(Effect.succeed(true))),
|
|
222
257
|
usageReporting: Schema.Boolean.pipe(Schema.withConstructorDefault(Effect.succeed(true))),
|
|
258
|
+
labelProbabilities: LabelProbabilities.pipe(Schema.withConstructorDefault(Effect.succeed("verbalized"))),
|
|
223
259
|
readOnlyEnforcement: ReadOnlyEnforcement.pipe(Schema.withConstructorDefault(Effect.succeed("advisory")))
|
|
224
260
|
}) {
|
|
225
261
|
}
|
package/dist/Models.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Models.js","sourceRoot":"","sources":["../src/Models.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC;IACzC,WAAW;IACX,WAAW;IACX,QAAQ;IACR,WAAW;IACX,UAAU;IACV,QAAQ;IACR,UAAU;IACV,MAAM;CACP,CAAC,CAAA;AAGF,MAAM,OAAO,WAAY,SAAQ,MAAM,CAAC,KAAK,CAAc,aAAa,CAAC,CAAC;IACxE,KAAK,EAAE,MAAM,CAAC,MAAM;CACrB,CAAC;CAAG;AAEL,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;IACxC,MAAM,EAAE,IAAI,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAC5C,SAAS,EAAE,IAAI,WAAW,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;IAClD,SAAS,EAAE,IAAI,WAAW,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;IACnD,QAAQ,EAAE,IAAI,WAAW,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;IACjD,MAAM,EAAE,IAAI,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAC5C,SAAS,EAAE,IAAI,WAAW,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;IACnD,SAAS,EAAE,IAAI,WAAW,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;IACnD,QAAQ,EAAE,IAAI,WAAW,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IAChD,KAAK,EAAE,IAAI,WAAW,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAC1C,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAC9C,EAAE,EAAE,IAAI,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACpC,cAAc,EAAE,IAAI,WAAW,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC7D,IAAI,EAAE,IAAI,WAAW,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IACxC,MAAM,EAAE,IAAI,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAC5C,IAAI,EAAE,IAAI,WAAW,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;CACzC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,eAAe,GAA+B,MAAM,CAAC,MAAM,CAAC;IACvE,YAAY,CAAC,MAAM;IACnB,YAAY,CAAC,SAAS;IACtB,YAAY,CAAC,SAAS;IACtB,YAAY,CAAC,QAAQ;IACrB,YAAY,CAAC,MAAM;
|
|
1
|
+
{"version":3,"file":"Models.js","sourceRoot":"","sources":["../src/Models.ts"],"names":[],"mappings":"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"}
|
package/dist/eval/Judge.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import * as Schema from "effect/Schema";
|
|
2
|
+
import type { JudgmentShape } from "../judgment/Judgment.ts";
|
|
3
|
+
import { type ScoreQuestion, type State } from "../judgment/Schemas.ts";
|
|
2
4
|
import type { LlmServiceShape } from "../LlmService.ts";
|
|
3
5
|
import { DimensionScore } from "./Eval.ts";
|
|
4
6
|
import type { Dimension, Sample } from "./Eval.ts";
|
|
@@ -11,5 +13,18 @@ export declare class JudgeResponse extends JudgeResponse_base {
|
|
|
11
13
|
export declare const defaultSystem: string;
|
|
12
14
|
export declare const buildPrompt: (system: string, dimensions: ReadonlyArray<Dimension>, sample: Sample) => string;
|
|
13
15
|
export declare const judge: (llm: LlmServiceShape, dimensions: ReadonlyArray<Dimension>, system?: string) => Evaluator<Sample>;
|
|
16
|
+
/**
|
|
17
|
+
* A dimension as a Score question: one level per rubric point, so the
|
|
18
|
+
* judgment returns a distribution over the scale instead of one integer.
|
|
19
|
+
*/
|
|
20
|
+
export declare const dimensionQuestion: (dimension: Dimension) => ScoreQuestion;
|
|
21
|
+
export declare const sampleState: (sample: Sample) => State;
|
|
22
|
+
/**
|
|
23
|
+
* The rubric judge over the Judgment service (ADR 0017, consumer 1): every
|
|
24
|
+
* dimension is an independent Score question over the same sample. A
|
|
25
|
+
* dimension the backend could not answer scores 0 with the reason recorded,
|
|
26
|
+
* matching the generative judge's treatment of a missing score.
|
|
27
|
+
*/
|
|
28
|
+
export declare const judgeWithJudgment: (judgment: JudgmentShape, dimensions: ReadonlyArray<Dimension>) => Evaluator<Sample>;
|
|
14
29
|
export {};
|
|
15
30
|
//# sourceMappingURL=Judge.d.ts.map
|
package/dist/eval/Judge.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Judge.d.ts","sourceRoot":"","sources":["../../src/eval/Judge.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"Judge.d.ts","sourceRoot":"","sources":["../../src/eval/Judge.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAS,KAAK,aAAa,EAAE,KAAK,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAC9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAEvD,OAAO,EAAE,cAAc,EAAc,MAAM,WAAW,CAAA;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAClD,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;;;;AAE9D,qBAAa,aAAc,SAAQ,kBAEjC;CAAG;AAEL,eAAO,MAAM,aAAa,QAEW,CAAA;AAsBrC,eAAO,MAAM,WAAW,GACtB,QAAQ,MAAM,EACd,YAAY,aAAa,CAAC,SAAS,CAAC,EACpC,QAAQ,MAAM,KACb,MAoBF,CAAA;AAsBD,eAAO,MAAM,KAAK,GAChB,KAAK,eAAe,EACpB,YAAY,aAAa,CAAC,SAAS,CAAC,EACpC,eAAsB,KACrB,SAAS,CAAC,MAAM,CAKhB,CAAA;AAEH;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,WAAW,SAAS,KAAG,aAatD,CAAA;AAEH,eAAO,MAAM,WAAW,GAAI,QAAQ,MAAM,KAAG,KAK3C,CAAA;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAC5B,UAAU,aAAa,EACvB,YAAY,aAAa,CAAC,SAAS,CAAC,KACnC,SAAS,CAAC,MAAM,CAkChB,CAAA"}
|
package/dist/eval/Judge.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import * as Effect from "effect/Effect";
|
|
2
2
|
import * as Schema from "effect/Schema";
|
|
3
|
+
import { ProviderError } from "../Errors.js";
|
|
4
|
+
import { score } from "../judgment/Schemas.js";
|
|
3
5
|
import { DimensionScore, EvalResult } from "./Eval.js";
|
|
4
6
|
import { makeEvaluator } from "./Evaluator.js";
|
|
5
7
|
export class JudgeResponse extends Schema.Class("JudgeResponse")({
|
|
@@ -70,4 +72,52 @@ const toResult = (dimensions, response) => {
|
|
|
70
72
|
export const judge = (llm, dimensions, system = defaultSystem) => makeEvaluator((sample) => llm
|
|
71
73
|
.executeStructured(buildPrompt(system, dimensions, sample), JudgeResponse, judgeJsonSchema)
|
|
72
74
|
.pipe(Effect.map((response) => toResult(dimensions, response))));
|
|
75
|
+
/**
|
|
76
|
+
* A dimension as a Score question: one level per rubric point, so the
|
|
77
|
+
* judgment returns a distribution over the scale instead of one integer.
|
|
78
|
+
*/
|
|
79
|
+
export const dimensionQuestion = (dimension) => score(`${dimension.name}: ${dimension.rubric}`, Array.from({ length: dimension.maxScore + 1 }, (_, level) => ({
|
|
80
|
+
level,
|
|
81
|
+
of: dimension.maxScore,
|
|
82
|
+
meaning: level === 0
|
|
83
|
+
? "does not meet the rubric at all"
|
|
84
|
+
: level === dimension.maxScore
|
|
85
|
+
? "fully meets the rubric"
|
|
86
|
+
: `partially meets the rubric (${level} of ${dimension.maxScore})`
|
|
87
|
+
})));
|
|
88
|
+
export const sampleState = (sample) => ({
|
|
89
|
+
...(sample.query === undefined ? {} : { query: sample.query }),
|
|
90
|
+
...(sample.context === undefined ? {} : { context: sample.context }),
|
|
91
|
+
response: sample.response,
|
|
92
|
+
...(sample.expected === undefined ? {} : { expected: sample.expected })
|
|
93
|
+
});
|
|
94
|
+
/**
|
|
95
|
+
* The rubric judge over the Judgment service (ADR 0017, consumer 1): every
|
|
96
|
+
* dimension is an independent Score question over the same sample. A
|
|
97
|
+
* dimension the backend could not answer scores 0 with the reason recorded,
|
|
98
|
+
* matching the generative judge's treatment of a missing score.
|
|
99
|
+
*/
|
|
100
|
+
export const judgeWithJudgment = (judgment, dimensions) => makeEvaluator((sample) => judgment
|
|
101
|
+
.judge({
|
|
102
|
+
state: sampleState(sample),
|
|
103
|
+
questions: Object.fromEntries(dimensions.map((dimension) => [dimension.name, dimensionQuestion(dimension)]))
|
|
104
|
+
})
|
|
105
|
+
.pipe(Effect.mapError((error) => ProviderError.make({ message: `judgment backend failed: ${error.message}`, cause: error })), Effect.map((result) => EvalResult.make({
|
|
106
|
+
scores: dimensions.map((dimension) => {
|
|
107
|
+
const answer = result.answers[dimension.name];
|
|
108
|
+
if (answer === undefined || answer.type !== "score") {
|
|
109
|
+
const failure = result.failures.find((entry) => entry.key === dimension.name);
|
|
110
|
+
return DimensionScore.make({
|
|
111
|
+
name: dimension.name,
|
|
112
|
+
score: 0,
|
|
113
|
+
reasoning: failure === undefined ? "missing" : `failed: ${failure.reason}`
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
return DimensionScore.make({
|
|
117
|
+
name: dimension.name,
|
|
118
|
+
score: Math.max(0, Math.min(dimension.maxScore, Math.round(answer.score))),
|
|
119
|
+
reasoning: `${answer.origin.method} judgment (${answer.origin.backend}), confidence ${answer.confidence.toFixed(2)}, support ${answer.support.toFixed(2)}, expected level ${answer.score.toFixed(2)}`
|
|
120
|
+
});
|
|
121
|
+
})
|
|
122
|
+
}))));
|
|
73
123
|
//# sourceMappingURL=Judge.js.map
|
package/dist/eval/Judge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Judge.js","sourceRoot":"","sources":["../../src/eval/Judge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"Judge.js","sourceRoot":"","sources":["../../src/eval/Judge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import * as Layer from "effect/Layer";
|
|
3
|
+
import { Judgment, type JudgmentShape } from "./Judgment.ts";
|
|
4
|
+
import { JudgmentRequest, type Answer } from "./Schemas.ts";
|
|
5
|
+
/**
|
|
6
|
+
* `FakeJudgment`: deterministic answers for tests. A plan maps question keys
|
|
7
|
+
* to canned answers (or a failure reason); unplanned questions get a
|
|
8
|
+
* predictable default so a consumer test can run without listing every key.
|
|
9
|
+
*/
|
|
10
|
+
export interface FakeJudgmentPlan {
|
|
11
|
+
readonly answers?: Readonly<Record<string, Answer>>;
|
|
12
|
+
readonly failures?: Readonly<Record<string, string>>;
|
|
13
|
+
/** Truth probability for unplanned truth questions (default 1). */
|
|
14
|
+
readonly defaultTruth?: number;
|
|
15
|
+
}
|
|
16
|
+
export interface FakeJudgment {
|
|
17
|
+
readonly judgment: JudgmentShape;
|
|
18
|
+
readonly recorded: Effect.Effect<ReadonlyArray<JudgmentRequest>>;
|
|
19
|
+
}
|
|
20
|
+
export declare const makeFakeJudgment: (plan?: FakeJudgmentPlan | undefined) => Effect.Effect<FakeJudgment, never, never>;
|
|
21
|
+
export declare const FakeJudgmentLive: (plan?: FakeJudgmentPlan) => Layer.Layer<Judgment>;
|
|
22
|
+
//# sourceMappingURL=FakeJudgment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FakeJudgment.d.ts","sourceRoot":"","sources":["../../src/judgment/FakeJudgment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAErC,OAAO,EAAE,QAAQ,EAAsB,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AAChF,OAAO,EAEL,eAAe,EAMf,KAAK,MAAM,EAEZ,MAAM,cAAc,CAAA;AAErB;;;;GAIG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IACnD,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IACpD,mEAAmE;IACnE,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAC/B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAA;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,CAAA;CACjE;AAwBD,eAAO,MAAM,gBAAgB,oFA2B3B,CAAA;AAEF,eAAO,MAAM,gBAAgB,GAAI,OAAO,gBAAgB,KAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAI5E,CAAA"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import * as Layer from "effect/Layer";
|
|
3
|
+
import * as Ref from "effect/Ref";
|
|
4
|
+
import { Judgment } from "./Judgment.js";
|
|
5
|
+
import { choiceAnswer, JudgmentRequest, JudgmentResult, origins, QuestionFailure, scoreAnswer, truthAnswer } from "./Schemas.js";
|
|
6
|
+
const defaultAnswer = (question, defaultTruth) => {
|
|
7
|
+
switch (question.type) {
|
|
8
|
+
case "choice": {
|
|
9
|
+
const keys = Object.keys(question.criteria);
|
|
10
|
+
return choiceAnswer(Object.fromEntries(keys.map((key, index) => [key, index === 0 ? 1 : 0])), origins.fake());
|
|
11
|
+
}
|
|
12
|
+
case "score":
|
|
13
|
+
return scoreAnswer(question, Object.fromEntries(question.criteria.map((_, index) => [String(index), index === 0 ? 1 : 0])), origins.fake());
|
|
14
|
+
case "truth":
|
|
15
|
+
return truthAnswer(defaultTruth, origins.fake());
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
export const makeFakeJudgment = Effect.fn("@llm4ts/core/judgment/FakeJudgment.make")(function* (plan = {}) {
|
|
19
|
+
const requests = yield* Ref.make([]);
|
|
20
|
+
const judge = (input) => Ref.update(requests, (all) => [
|
|
21
|
+
...all,
|
|
22
|
+
JudgmentRequest.make({ state: input.state, questions: input.questions })
|
|
23
|
+
]).pipe(Effect.map(() => {
|
|
24
|
+
const answers = {};
|
|
25
|
+
const failures = [];
|
|
26
|
+
for (const [key, question] of Object.entries(input.questions)) {
|
|
27
|
+
const failure = plan.failures?.[key];
|
|
28
|
+
if (failure !== undefined) {
|
|
29
|
+
failures.push(QuestionFailure.make({ key, reason: failure }));
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
answers[key] = plan.answers?.[key] ?? defaultAnswer(question, plan.defaultTruth ?? 1);
|
|
33
|
+
}
|
|
34
|
+
return JudgmentResult.make({ answers, failures, backend: "fake" });
|
|
35
|
+
}));
|
|
36
|
+
return {
|
|
37
|
+
judgment: { backend: "fake", identity: "fake", judge },
|
|
38
|
+
recorded: Ref.get(requests)
|
|
39
|
+
};
|
|
40
|
+
});
|
|
41
|
+
export const FakeJudgmentLive = (plan) => Layer.effect(Judgment, Effect.map(makeFakeJudgment(plan), (fake) => fake.judgment));
|
|
42
|
+
//# sourceMappingURL=FakeJudgment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FakeJudgment.js","sourceRoot":"","sources":["../../src/judgment/FakeJudgment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,GAAG,MAAM,YAAY,CAAA;AACjC,OAAO,EAAE,QAAQ,EAA0C,MAAM,eAAe,CAAA;AAChF,OAAO,EACL,YAAY,EACZ,eAAe,EACf,cAAc,EACd,OAAO,EACP,eAAe,EACf,WAAW,EACX,WAAW,EAGZ,MAAM,cAAc,CAAA;AAoBrB,MAAM,aAAa,GAAG,CAAC,QAAkB,EAAE,YAAoB,EAAU,EAAE;IACzE,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;YAC3C,OAAO,YAAY,CACjB,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACxE,OAAO,CAAC,IAAI,EAAE,CACf,CAAA;QACH,CAAC;QACD,KAAK,OAAO;YACV,OAAO,WAAW,CAChB,QAAQ,EACR,MAAM,CAAC,WAAW,CAChB,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC1E,EACD,OAAO,CAAC,IAAI,EAAE,CACf,CAAA;QACH,KAAK,OAAO;YACV,OAAO,WAAW,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;IACpD,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,EAAE,CAAC,yCAAyC,CAAC,CAAC,QAAQ,CAAC,EAC5F,OAAyB,EAAE;IAE3B,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAiC,EAAE,CAAC,CAAA;IACpE,MAAM,KAAK,GAAG,CAAC,KAAoB,EAAiC,EAAE,CACpE,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC;QAC5B,GAAG,GAAG;QACN,eAAe,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;KACzE,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE;QACd,MAAM,OAAO,GAA2B,EAAE,CAAA;QAC1C,MAAM,QAAQ,GAA2B,EAAE,CAAA;QAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAA;YACpC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;gBAC7D,SAAQ;YACV,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,CAAA;QACvF,CAAC;QACD,OAAO,cAAc,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAA;IACpE,CAAC,CAAC,CACH,CAAA;IACH,OAAO;QACL,QAAQ,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE;QACtD,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC;KAC5B,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAuB,EAAyB,EAAE,CACjF,KAAK,CAAC,MAAM,CACV,QAAQ,EACR,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAC5D,CAAA"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import * as Context from "effect/Context";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import * as Schema from "effect/Schema";
|
|
4
|
+
import { ChoiceAnswer, ScoreAnswer, TruthAnswer, type JudgmentBackend, type JudgmentResult, type Question, type State } from "./Schemas.ts";
|
|
5
|
+
declare const JudgmentBackendError_base: Schema.Class<JudgmentBackendError, Schema.TaggedStruct<"JudgmentBackendError", {
|
|
6
|
+
readonly backend: Schema.String;
|
|
7
|
+
readonly message: Schema.String;
|
|
8
|
+
readonly cause: Schema.optionalKey<Schema.Defect>;
|
|
9
|
+
}>, import("effect/Cause").YieldableError>;
|
|
10
|
+
/**
|
|
11
|
+
* The Judgment service (ADR 0017): evaluate typed questions against one
|
|
12
|
+
* State and return typed answers with probabilities and their origin. It
|
|
13
|
+
* answers; it never decides. Policy (thresholds, escalation, caching) lives
|
|
14
|
+
* in the flow package.
|
|
15
|
+
*/
|
|
16
|
+
export declare class JudgmentBackendError extends JudgmentBackendError_base {
|
|
17
|
+
}
|
|
18
|
+
declare const AnswerMismatch_base: Schema.Class<AnswerMismatch, Schema.TaggedStruct<"AnswerMismatch", {
|
|
19
|
+
readonly key: Schema.String;
|
|
20
|
+
readonly expected: Schema.String;
|
|
21
|
+
readonly actual: Schema.optionalKey<Schema.String>;
|
|
22
|
+
readonly reason: Schema.optionalKey<Schema.String>;
|
|
23
|
+
}>, import("effect/Cause").YieldableError>;
|
|
24
|
+
/** Raised by the typed accessors when a key is missing or of another kind. */
|
|
25
|
+
export declare class AnswerMismatch extends AnswerMismatch_base {
|
|
26
|
+
get message(): string;
|
|
27
|
+
}
|
|
28
|
+
export declare const JudgmentError: Schema.Union<readonly [typeof JudgmentBackendError, typeof AnswerMismatch]>;
|
|
29
|
+
export type JudgmentError = typeof JudgmentError.Type;
|
|
30
|
+
export interface JudgmentInput {
|
|
31
|
+
readonly state: State;
|
|
32
|
+
readonly questions: Readonly<Record<string, Question>>;
|
|
33
|
+
}
|
|
34
|
+
export interface JudgmentShape {
|
|
35
|
+
readonly backend: JudgmentBackend;
|
|
36
|
+
/**
|
|
37
|
+
* Backend plus checkpoint, e.g. `llm:mlx-lm:/models/qwen3-4b` or
|
|
38
|
+
* `typesafe:jev-1.13.0`: what a cached answer is keyed on, so swapping a
|
|
39
|
+
* local model never reuses its predecessor's answers.
|
|
40
|
+
*/
|
|
41
|
+
readonly identity: string;
|
|
42
|
+
/**
|
|
43
|
+
* Answer every question independently over the same state. A question the
|
|
44
|
+
* backend could not answer lands in `failures`; the request as a whole
|
|
45
|
+
* fails only when the backend itself is unreachable or rejects it.
|
|
46
|
+
*/
|
|
47
|
+
readonly judge: (input: JudgmentInput) => Effect.Effect<JudgmentResult, JudgmentBackendError>;
|
|
48
|
+
}
|
|
49
|
+
declare const Judgment_base: Context.ServiceClass<Judgment, "@llm4ts/core/judgment/Judgment", JudgmentShape>;
|
|
50
|
+
export declare class Judgment extends Judgment_base {
|
|
51
|
+
}
|
|
52
|
+
/** Typed accessors: the honest way to read an answer by key. */
|
|
53
|
+
export declare const choiceOf: (result: JudgmentResult, key: string) => Effect.Effect<ChoiceAnswer, AnswerMismatch>;
|
|
54
|
+
export declare const scoreOf: (result: JudgmentResult, key: string) => Effect.Effect<ScoreAnswer, AnswerMismatch>;
|
|
55
|
+
export declare const truthOf: (result: JudgmentResult, key: string) => Effect.Effect<TruthAnswer, AnswerMismatch>;
|
|
56
|
+
export {};
|
|
57
|
+
//# sourceMappingURL=Judgment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Judgment.d.ts","sourceRoot":"","sources":["../../src/judgment/Judgment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EACL,YAAY,EACZ,WAAW,EACX,WAAW,EAEX,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,KAAK,EACX,MAAM,cAAc,CAAA;;;;;;AAErB;;;;;GAKG;AAEH,qBAAa,oBAAqB,SAAQ,yBAOzC;CAAG;;;;;;;AAEJ,8EAA8E;AAC9E,qBAAa,cAAe,SAAQ,mBAKlC;IACA,IAAI,OAAO,IAAI,MAAM,CAIpB;CACF;AAED,eAAO,MAAM,aAAa,6EAAuD,CAAA;AACjF,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAA;AAErD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;IACrB,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAA;CACvD;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAA;IACjC;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,oBAAoB,CAAC,CAAA;CAC9F;;AAED,qBAAa,QAAS,SAAQ,aAE7B;CAAG;AAuBJ,gEAAgE;AAChE,eAAO,MAAM,QAAQ,GACnB,QAAQ,cAAc,EACtB,KAAK,MAAM,KACV,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,cAAc,CAK1C,CAAA;AAEH,eAAO,MAAM,OAAO,GAClB,QAAQ,cAAc,EACtB,KAAK,MAAM,KACV,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,cAAc,CAKzC,CAAA;AAEH,eAAO,MAAM,OAAO,GAClB,QAAQ,cAAc,EACtB,KAAK,MAAM,KACV,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,cAAc,CAKzC,CAAA"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import * as Context from "effect/Context";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import * as Schema from "effect/Schema";
|
|
4
|
+
import { ChoiceAnswer, ScoreAnswer, TruthAnswer } from "./Schemas.js";
|
|
5
|
+
/**
|
|
6
|
+
* The Judgment service (ADR 0017): evaluate typed questions against one
|
|
7
|
+
* State and return typed answers with probabilities and their origin. It
|
|
8
|
+
* answers; it never decides. Policy (thresholds, escalation, caching) lives
|
|
9
|
+
* in the flow package.
|
|
10
|
+
*/
|
|
11
|
+
export class JudgmentBackendError extends Schema.TaggedError()("JudgmentBackendError", {
|
|
12
|
+
backend: Schema.String,
|
|
13
|
+
message: Schema.String,
|
|
14
|
+
cause: Schema.optionalKey(Schema.Defect())
|
|
15
|
+
}) {
|
|
16
|
+
}
|
|
17
|
+
/** Raised by the typed accessors when a key is missing or of another kind. */
|
|
18
|
+
export class AnswerMismatch extends Schema.TaggedError()("AnswerMismatch", {
|
|
19
|
+
key: Schema.String,
|
|
20
|
+
expected: Schema.String,
|
|
21
|
+
actual: Schema.optionalKey(Schema.String),
|
|
22
|
+
reason: Schema.optionalKey(Schema.String)
|
|
23
|
+
}) {
|
|
24
|
+
get message() {
|
|
25
|
+
return this.actual === undefined
|
|
26
|
+
? `no ${this.expected} answer for "${this.key}"${this.reason === undefined ? "" : `: ${this.reason}`}`
|
|
27
|
+
: `answer "${this.key}" is a ${this.actual}, not a ${this.expected}`;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export const JudgmentError = Schema.Union([JudgmentBackendError, AnswerMismatch]);
|
|
31
|
+
export class Judgment extends Context.Service()("@llm4ts/core/judgment/Judgment") {
|
|
32
|
+
}
|
|
33
|
+
const answerOf = (result, key, expected) => {
|
|
34
|
+
const answer = result.answers[key];
|
|
35
|
+
if (answer === undefined) {
|
|
36
|
+
const failure = result.failures.find((entry) => entry.key === key);
|
|
37
|
+
return Effect.fail(AnswerMismatch.make({
|
|
38
|
+
key,
|
|
39
|
+
expected,
|
|
40
|
+
...(failure === undefined ? {} : { reason: failure.reason })
|
|
41
|
+
}));
|
|
42
|
+
}
|
|
43
|
+
return answer.type === expected
|
|
44
|
+
? Effect.succeed(answer)
|
|
45
|
+
: Effect.fail(AnswerMismatch.make({ key, expected, actual: answer.type }));
|
|
46
|
+
};
|
|
47
|
+
/** Typed accessors: the honest way to read an answer by key. */
|
|
48
|
+
export const choiceOf = (result, key) => Effect.flatMap(answerOf(result, key, "choice"), (answer) => answer instanceof ChoiceAnswer
|
|
49
|
+
? Effect.succeed(answer)
|
|
50
|
+
: Effect.fail(AnswerMismatch.make({ key, expected: "choice", actual: answer.type })));
|
|
51
|
+
export const scoreOf = (result, key) => Effect.flatMap(answerOf(result, key, "score"), (answer) => answer instanceof ScoreAnswer
|
|
52
|
+
? Effect.succeed(answer)
|
|
53
|
+
: Effect.fail(AnswerMismatch.make({ key, expected: "score", actual: answer.type })));
|
|
54
|
+
export const truthOf = (result, key) => Effect.flatMap(answerOf(result, key, "truth"), (answer) => answer instanceof TruthAnswer
|
|
55
|
+
? Effect.succeed(answer)
|
|
56
|
+
: Effect.fail(AnswerMismatch.make({ key, expected: "truth", actual: answer.type })));
|
|
57
|
+
//# sourceMappingURL=Judgment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Judgment.js","sourceRoot":"","sources":["../../src/judgment/Judgment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import * as Layer from "effect/Layer";
|
|
3
|
+
import * as Schema from "effect/Schema";
|
|
4
|
+
import type { LabelSequence, LlmServiceShape } from "../LlmService.ts";
|
|
5
|
+
import { TokenUsage } from "../Models.ts";
|
|
6
|
+
import { Judgment, type JudgmentShape } from "./Judgment.ts";
|
|
7
|
+
import { type Question, type State } from "./Schemas.ts";
|
|
8
|
+
/**
|
|
9
|
+
* `LlmJudgment`: the Judgment service over any `LlmServiceShape`. One label
|
|
10
|
+
* question per atomic question, answered through `scoreLabels`: a single
|
|
11
|
+
* forward pass on connectors with log-probabilities, a short JSON reply on
|
|
12
|
+
* the rest. Questions never see each other's answers in `independent`
|
|
13
|
+
* batching; `shared-prefix` sends the state once with every question and
|
|
14
|
+
* reads each answer as its own label distribution, trading that isolation
|
|
15
|
+
* for one prompt prefix per request.
|
|
16
|
+
*/
|
|
17
|
+
export declare const Batching: Schema.Literals<readonly ["independent", "shared-prefix"]>;
|
|
18
|
+
export type Batching = typeof Batching.Type;
|
|
19
|
+
declare const LlmJudgmentConfig_base: Schema.Class<LlmJudgmentConfig, Schema.Struct<{
|
|
20
|
+
/** Questions in flight at once. 1 keeps a local server's prompt cache warm. */
|
|
21
|
+
readonly concurrency: Schema.withConstructorDefault<Schema.Int>;
|
|
22
|
+
/** 2 also asks with the options reversed and averages, to blunt position bias. */
|
|
23
|
+
readonly permutations: Schema.withConstructorDefault<Schema.Literals<readonly [1, 2]>>;
|
|
24
|
+
/**
|
|
25
|
+
* `independent` (default): one call per question, Jev's answer
|
|
26
|
+
* independence. `shared-prefix`: every question of a request in one call
|
|
27
|
+
* whose state prefix is sent once; a question the batch could not read
|
|
28
|
+
* falls back to its own independent call.
|
|
29
|
+
*/
|
|
30
|
+
readonly batching: Schema.withConstructorDefault<Schema.Literals<readonly ["independent", "shared-prefix"]>>;
|
|
31
|
+
/** Connector and model behind the seat, for `identity` and answer origins. */
|
|
32
|
+
readonly connector: Schema.optionalKey<Schema.String>;
|
|
33
|
+
readonly model: Schema.optionalKey<Schema.String>;
|
|
34
|
+
}>, {}>;
|
|
35
|
+
export declare class LlmJudgmentConfig extends LlmJudgmentConfig_base {
|
|
36
|
+
}
|
|
37
|
+
export interface LlmJudgmentHooks {
|
|
38
|
+
/** Called once per request with the summed backend usage, when any was reported. */
|
|
39
|
+
readonly onUsage?: (usage: TokenUsage, model: string | undefined) => Effect.Effect<void>;
|
|
40
|
+
/** Called when a question fell back from label scoring to the verbalized path. */
|
|
41
|
+
readonly onFallback?: (key: string, reason: string) => Effect.Effect<void>;
|
|
42
|
+
}
|
|
43
|
+
interface LabelPlan {
|
|
44
|
+
readonly prompt: string;
|
|
45
|
+
readonly labels: ReadonlyArray<string>;
|
|
46
|
+
/** Label to the option key or level index it stands for. */
|
|
47
|
+
readonly keys: Readonly<Record<string, string>>;
|
|
48
|
+
}
|
|
49
|
+
/** A question's part of a prompt, without the state header. */
|
|
50
|
+
export interface QuestionBody {
|
|
51
|
+
readonly body: string;
|
|
52
|
+
readonly labels: ReadonlyArray<string>;
|
|
53
|
+
readonly keys: Readonly<Record<string, string>>;
|
|
54
|
+
}
|
|
55
|
+
export declare const questionBody: (question: Question, reverse: boolean) => QuestionBody;
|
|
56
|
+
/**
|
|
57
|
+
* The fixed label-scoring template: state first, then the question, then
|
|
58
|
+
* one single-token label per option. Truth uses `yes`/`no`.
|
|
59
|
+
*/
|
|
60
|
+
export declare const labelPlan: (state: State, question: Question, reverse: boolean) => LabelPlan;
|
|
61
|
+
/**
|
|
62
|
+
* The shared-prefix template: the state once, then every question numbered,
|
|
63
|
+
* and an answer format of one label per line so a backend can read each
|
|
64
|
+
* position as its own distribution.
|
|
65
|
+
*/
|
|
66
|
+
export declare const sequencePlan: (state: State, questions: ReadonlyArray<Question>, reverse: boolean) => {
|
|
67
|
+
readonly prompt: string;
|
|
68
|
+
readonly parts: ReadonlyArray<QuestionBody>;
|
|
69
|
+
};
|
|
70
|
+
export declare const makeLlmJudgment: (llm: LlmServiceShape, config?: LlmJudgmentConfig, hooks?: LlmJudgmentHooks) => JudgmentShape;
|
|
71
|
+
export declare const LlmJudgmentLive: (llm: LlmServiceShape, config?: LlmJudgmentConfig, hooks?: LlmJudgmentHooks) => Layer.Layer<Judgment>;
|
|
72
|
+
export type { LabelSequence };
|
|
73
|
+
//# sourceMappingURL=LlmJudgment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LlmJudgment.d.ts","sourceRoot":"","sources":["../../src/judgment/LlmJudgment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAErC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACtE,OAAO,EAAE,UAAU,EAA0B,MAAM,cAAc,CAAA;AACjE,OAAO,EAAE,QAAQ,EAAsB,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AAChF,OAAO,EAYL,KAAK,QAAQ,EAEb,KAAK,KAAK,EACX,MAAM,cAAc,CAAA;AAErB;;;;;;;;GAQG;AAEH,eAAO,MAAM,QAAQ,4DAAoD,CAAA;AACzE,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC,IAAI,CAAA;;IAGzC,+EAA+E;;IAE/E,kFAAkF;;IAIlF;;;;;OAKG;;IAEH,8EAA8E;;;;AAdhF,qBAAa,iBAAkB,SAAQ,sBAiBrC;CAAG;AAEL,MAAM,WAAW,gBAAgB;IAC/B,oFAAoF;IACpF,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACxF,kFAAkF;IAClF,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;CAC3E;AAOD,UAAU,SAAS;IACjB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IACtC,4DAA4D;IAC5D,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CAChD;AAED,+DAA+D;AAC/D,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IACtC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CAChD;AAED,eAAO,MAAM,YAAY,GAAI,UAAU,QAAQ,EAAE,SAAS,OAAO,KAAG,YA+BnE,CAAA;AAID;;;GAGG;AACH,eAAO,MAAM,SAAS,GAAI,OAAO,KAAK,EAAE,UAAU,QAAQ,EAAE,SAAS,OAAO,KAAG,SAG9E,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,GACvB,OAAO,KAAK,EACZ,WAAW,aAAa,CAAC,QAAQ,CAAC,EAClC,SAAS,OAAO,KACf;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,YAAY,CAAC,CAAA;CASxE,CAAA;AAwED,eAAO,MAAM,eAAe,GAC1B,KAAK,eAAe,EACpB,SAAQ,iBAA8C,EACtD,QAAO,gBAAqB,KAC3B,aAwKF,CAAA;AAED,eAAO,MAAM,eAAe,GAC1B,KAAK,eAAe,EACpB,SAAS,iBAAiB,EAC1B,QAAQ,gBAAgB,KACvB,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAiE,CAAA;AAExF,YAAY,EAAE,aAAa,EAAE,CAAA"}
|