@anvia/core 0.3.1 → 0.4.1
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/README.md +7 -8
- package/dist/agent/index.d.ts +10 -10
- package/dist/agent/index.js +10 -18
- package/dist/{agent-D_jXqPAZ.d.ts → agent-B-ls5y_g.d.ts} +6 -19
- package/dist/audio-generation/index.d.ts +1 -1
- package/dist/audio-generation/index.js +37 -4
- package/dist/audio-generation/index.js.map +1 -1
- package/dist/{chunk-QRZ2HPUX.js → chunk-4PHDOEKY.js} +3 -3
- package/dist/chunk-4PHDOEKY.js.map +1 -0
- package/dist/chunk-BD66WU2B.js +188 -0
- package/dist/chunk-BD66WU2B.js.map +1 -0
- package/dist/{chunk-I2HOMD3R.js → chunk-CY7SB5FG.js} +3 -3
- package/dist/{chunk-A7VDIZQN.js → chunk-EFGX3EX5.js} +5 -14
- package/dist/chunk-EFGX3EX5.js.map +1 -0
- package/dist/{chunk-TILE6Z2N.js → chunk-L6JCKFAX.js} +2 -2
- package/dist/{chunk-65QV627O.js → chunk-OIA4CN5V.js} +2 -2
- package/dist/chunk-OIMLU4SF.js +20 -0
- package/dist/chunk-OIMLU4SF.js.map +1 -0
- package/dist/{chunk-GSFQZYS7.js → chunk-TVIADATY.js} +579 -723
- package/dist/chunk-TVIADATY.js.map +1 -0
- package/dist/completion/index.d.ts +2 -2
- package/dist/embeddings/index.d.ts +4 -24
- package/dist/embeddings/index.js +2 -1
- package/dist/evals/index.d.ts +26 -21
- package/dist/evals/index.js +298 -15
- package/dist/evals/index.js.map +1 -1
- package/dist/extractor/index.d.ts +6 -5
- package/dist/extractor/index.js +8 -6
- package/dist/image-generation/index.d.ts +1 -1
- package/dist/image-generation/index.js +37 -4
- package/dist/image-generation/index.js.map +1 -1
- package/dist/index.d.ts +12 -21
- package/dist/index.js +14 -160
- package/dist/internal/agent.d.ts +8 -0
- package/dist/internal/agent.js +18 -0
- package/dist/internal/agent.js.map +1 -0
- package/dist/loaders/index.d.ts +1 -1
- package/dist/mcp/index.d.ts +4 -4
- package/dist/mcp/index.js +140 -4
- package/dist/mcp/index.js.map +1 -1
- package/dist/memory/index.d.ts +1 -1
- package/dist/{middleware-2FR89muX.d.ts → middleware-CGiEIaBx.d.ts} +4 -7
- package/dist/model-listing/index.js +13 -3
- package/dist/model-listing/index.js.map +1 -1
- package/dist/observability/index.d.ts +2 -2
- package/dist/observability/index.js +4 -3
- package/dist/observability/index.js.map +1 -1
- package/dist/pipeline/index.d.ts +9 -6
- package/dist/pipeline/index.js +334 -3
- package/dist/pipeline/index.js.map +1 -1
- package/dist/skills/index.d.ts +4 -4
- package/dist/skills/index.js +5 -4
- package/dist/think-tool-ByArsrxe.d.ts +26 -0
- package/dist/tool/index.d.ts +8 -29
- package/dist/tool/index.js +4 -3
- package/dist/{tool-ClZYES-Z.d.ts → tool-C3ciF-VG.d.ts} +2 -2
- package/dist/transcription/index.d.ts +1 -1
- package/dist/transcription/index.js +55 -4
- package/dist/transcription/index.js.map +1 -1
- package/dist/{types-BM8-Y8Hy.d.ts → types-C54aNoCd.d.ts} +1 -1
- package/dist/types-IB2e9u5M.d.ts +25 -0
- package/dist/{types-B0iXLkqi.d.ts → types-T9rlOIUc.d.ts} +2 -2
- package/dist/{types-fLi8uM5R.d.ts → types-UhcgW8Fo.d.ts} +3 -3
- package/dist/vector-store/index.d.ts +3 -3
- package/dist/vector-store/index.js +3 -2
- package/dist/zod-schema-C7F4clpm.d.ts +5 -0
- package/package.json +6 -2
- package/dist/chunk-6JCCM2K4.js +0 -304
- package/dist/chunk-6JCCM2K4.js.map +0 -1
- package/dist/chunk-7QI6ZAFI.js +0 -61
- package/dist/chunk-7QI6ZAFI.js.map +0 -1
- package/dist/chunk-A7VDIZQN.js.map +0 -1
- package/dist/chunk-B24Q2ZYM.js +0 -43
- package/dist/chunk-B24Q2ZYM.js.map +0 -1
- package/dist/chunk-GSFQZYS7.js.map +0 -1
- package/dist/chunk-I77SDTFE.js +0 -43
- package/dist/chunk-I77SDTFE.js.map +0 -1
- package/dist/chunk-NYUOBGVI.js +0 -146
- package/dist/chunk-NYUOBGVI.js.map +0 -1
- package/dist/chunk-QRZ2HPUX.js.map +0 -1
- package/dist/chunk-RTOGIJH2.js +0 -345
- package/dist/chunk-RTOGIJH2.js.map +0 -1
- package/dist/chunk-WJT22R3T.js +0 -18
- package/dist/chunk-WJT22R3T.js.map +0 -1
- package/dist/chunk-ZSYIQYTV.js +0 -9
- package/dist/chunk-ZSYIQYTV.js.map +0 -1
- /package/dist/{chunk-I2HOMD3R.js.map → chunk-CY7SB5FG.js.map} +0 -0
- /package/dist/{chunk-TILE6Z2N.js.map → chunk-L6JCKFAX.js.map} +0 -0
- /package/dist/{chunk-65QV627O.js.map → chunk-OIA4CN5V.js.map} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A as AnyTool } from './tool-
|
|
1
|
+
import { A as AnyTool } from './tool-C3ciF-VG.js';
|
|
2
2
|
|
|
3
3
|
type Skill = {
|
|
4
4
|
readonly name: string;
|
|
@@ -27,4 +27,4 @@ declare class SkillValidationError extends Error {
|
|
|
27
27
|
constructor(message: string, issues: SkillValidationIssue[]);
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
export {
|
|
30
|
+
export { SkillValidationError as S, type SkillSet as a, type SkillLoader as b, type Skill as c, type SkillValidationIssue as d };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { SSEClientTransportOptions } from '@modelcontextprotocol/sdk/client/sse.js';
|
|
2
2
|
import { StdioServerParameters } from '@modelcontextprotocol/sdk/client/stdio.js';
|
|
3
3
|
import { StreamableHTTPClientTransportOptions } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
|
|
4
|
-
import { J as JsonObject } from './types-
|
|
5
|
-
import { A as AnyTool } from './tool-
|
|
4
|
+
import { J as JsonObject } from './types-C54aNoCd.js';
|
|
5
|
+
import { A as AnyTool } from './tool-C3ciF-VG.js';
|
|
6
6
|
|
|
7
7
|
type McpToolDefinition = {
|
|
8
8
|
name: string;
|
|
@@ -67,4 +67,4 @@ type McpSseOptions = {
|
|
|
67
67
|
transport?: SSEClientTransportOptions | undefined;
|
|
68
68
|
};
|
|
69
69
|
|
|
70
|
-
export type {
|
|
70
|
+
export type { McpConnection as M, McpServer as a, McpStdioOptions as b, McpHttpOptions as c, McpSseOptions as d, McpClient as e, McpToolCallContent as f, McpToolCallResult as g, McpToolDefinition as h };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { VectorMetadataValue, VectorMetadata, EmbeddingModel, EmbeddedDocument, Embedding } from '../
|
|
2
|
-
import { T as Tool } from '../tool-
|
|
3
|
-
import '../types-
|
|
1
|
+
import { d as VectorMetadataValue, V as VectorMetadata, E as EmbeddingModel, b as EmbeddedDocument, c as Embedding } from '../types-IB2e9u5M.js';
|
|
2
|
+
import { T as Tool } from '../tool-C3ciF-VG.js';
|
|
3
|
+
import '../types-C54aNoCd.js';
|
|
4
4
|
|
|
5
5
|
type VectorFilter = {
|
|
6
6
|
type: "eq";
|
|
@@ -3,8 +3,9 @@ import {
|
|
|
3
3
|
InMemoryVectorStore,
|
|
4
4
|
createVectorSearchTool,
|
|
5
5
|
vectorFilter
|
|
6
|
-
} from "../chunk-
|
|
7
|
-
import "../chunk-
|
|
6
|
+
} from "../chunk-OIA4CN5V.js";
|
|
7
|
+
import "../chunk-EFGX3EX5.js";
|
|
8
|
+
import "../chunk-OIMLU4SF.js";
|
|
8
9
|
export {
|
|
9
10
|
InMemoryVectorIndex,
|
|
10
11
|
InMemoryVectorStore,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@anvia/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"description": "Core runtime primitives for context-aware Anvia agents.",
|
|
5
5
|
"author": "anvia",
|
|
6
6
|
"maintainer": "Indra Zulfi",
|
|
@@ -28,6 +28,10 @@
|
|
|
28
28
|
"types": "./dist/agent/index.d.ts",
|
|
29
29
|
"import": "./dist/agent/index.js"
|
|
30
30
|
},
|
|
31
|
+
"./internal/agent": {
|
|
32
|
+
"types": "./dist/internal/agent.d.ts",
|
|
33
|
+
"import": "./dist/internal/agent.js"
|
|
34
|
+
},
|
|
31
35
|
"./audio-generation": {
|
|
32
36
|
"types": "./dist/audio-generation/index.d.ts",
|
|
33
37
|
"import": "./dist/audio-generation/index.js"
|
|
@@ -111,7 +115,7 @@
|
|
|
111
115
|
"vitest": "^4.0.8"
|
|
112
116
|
},
|
|
113
117
|
"scripts": {
|
|
114
|
-
"build": "tsup src/index.ts src/agent/index.ts src/audio-generation/index.ts src/completion/index.ts src/embeddings/index.ts src/evals/index.ts src/image-generation/index.ts src/loaders/index.ts src/extractor/index.ts src/mcp/index.ts src/memory/index.ts src/model-listing/index.ts src/observability/index.ts src/pipeline/index.ts src/skills/index.ts src/streaming/index.ts src/tool/index.ts src/transcription/index.ts src/vector-store/index.ts --format esm --dts --sourcemap --clean",
|
|
118
|
+
"build": "tsup src/index.ts src/agent/index.ts src/internal/agent.ts src/audio-generation/index.ts src/completion/index.ts src/embeddings/index.ts src/evals/index.ts src/image-generation/index.ts src/loaders/index.ts src/extractor/index.ts src/mcp/index.ts src/memory/index.ts src/model-listing/index.ts src/observability/index.ts src/pipeline/index.ts src/skills/index.ts src/streaming/index.ts src/tool/index.ts src/transcription/index.ts src/vector-store/index.ts --format esm --dts --sourcemap --clean",
|
|
115
119
|
"test": "vitest run",
|
|
116
120
|
"typecheck": "tsc --noEmit"
|
|
117
121
|
}
|
package/dist/chunk-6JCCM2K4.js
DELETED
|
@@ -1,304 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ExtractorBuilder
|
|
3
|
-
} from "./chunk-QRZ2HPUX.js";
|
|
4
|
-
import {
|
|
5
|
-
cosineSimilarity,
|
|
6
|
-
embedText
|
|
7
|
-
} from "./chunk-A7VDIZQN.js";
|
|
8
|
-
|
|
9
|
-
// src/evals/index.ts
|
|
10
|
-
import { z } from "zod";
|
|
11
|
-
var EvalOutcome = {
|
|
12
|
-
pass(score, options = {}) {
|
|
13
|
-
return {
|
|
14
|
-
outcome: "pass",
|
|
15
|
-
...score === void 0 ? {} : { score },
|
|
16
|
-
...options.comment === void 0 ? {} : { comment: options.comment },
|
|
17
|
-
...options.metadata === void 0 ? {} : { metadata: options.metadata }
|
|
18
|
-
};
|
|
19
|
-
},
|
|
20
|
-
fail(score, options = {}) {
|
|
21
|
-
return {
|
|
22
|
-
outcome: "fail",
|
|
23
|
-
...score === void 0 ? {} : { score },
|
|
24
|
-
...options.comment === void 0 ? {} : { comment: options.comment },
|
|
25
|
-
...options.metadata === void 0 ? {} : { metadata: options.metadata }
|
|
26
|
-
};
|
|
27
|
-
},
|
|
28
|
-
invalid(reason, options = {}) {
|
|
29
|
-
return {
|
|
30
|
-
outcome: "invalid",
|
|
31
|
-
reason,
|
|
32
|
-
...options.score === void 0 ? {} : { score: options.score },
|
|
33
|
-
...options.comment === void 0 ? {} : { comment: options.comment },
|
|
34
|
-
...options.metadata === void 0 ? {} : { metadata: options.metadata }
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
async function runEvalSuite(options) {
|
|
39
|
-
const startedAt = Date.now();
|
|
40
|
-
const results = await mapWithConcurrency(
|
|
41
|
-
options.cases,
|
|
42
|
-
Math.max(1, Math.trunc(options.concurrency ?? 1)),
|
|
43
|
-
(testCase) => runEvalCase(options, testCase)
|
|
44
|
-
);
|
|
45
|
-
const counts = countOutcomes(results);
|
|
46
|
-
return {
|
|
47
|
-
name: options.name,
|
|
48
|
-
results,
|
|
49
|
-
...counts,
|
|
50
|
-
durationMs: Date.now() - startedAt
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
function exactMatch(options = {}) {
|
|
54
|
-
return {
|
|
55
|
-
name: options.name ?? "exact_match",
|
|
56
|
-
async evaluate(args) {
|
|
57
|
-
const actual = await resolveActual(options.actual, args);
|
|
58
|
-
const expected = await resolveExpected(options.expected, args);
|
|
59
|
-
if (expected === void 0) {
|
|
60
|
-
return EvalOutcome.invalid("No expected value provided for exact match.");
|
|
61
|
-
}
|
|
62
|
-
const passed = stableComparable(actual) === stableComparable(expected);
|
|
63
|
-
return passed ? EvalOutcome.pass(true) : EvalOutcome.fail(false, { comment: `Expected ${formatValue(expected)}.` });
|
|
64
|
-
}
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
function contains(options = {}) {
|
|
68
|
-
return {
|
|
69
|
-
name: options.name ?? "contains",
|
|
70
|
-
async evaluate(args) {
|
|
71
|
-
const actual = await resolveActualText(options.actual, args);
|
|
72
|
-
const expected = await resolveExpected(options.expected, args);
|
|
73
|
-
if (expected === void 0) {
|
|
74
|
-
return EvalOutcome.invalid("No expected value provided for contains.");
|
|
75
|
-
}
|
|
76
|
-
if (typeof expected !== "string" && !(expected instanceof RegExp)) {
|
|
77
|
-
return EvalOutcome.invalid("Contains expected value must be a string or RegExp.");
|
|
78
|
-
}
|
|
79
|
-
const passed = expected instanceof RegExp ? expected.test(actual) : actual.includes(expected);
|
|
80
|
-
return passed ? EvalOutcome.pass(true) : EvalOutcome.fail(false, { comment: `Output did not contain ${String(expected)}.` });
|
|
81
|
-
}
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
function semanticSimilarity(options) {
|
|
85
|
-
return {
|
|
86
|
-
name: options.name ?? "semantic_similarity",
|
|
87
|
-
async evaluate(args) {
|
|
88
|
-
const actual = await resolveActualText(options.actual, args);
|
|
89
|
-
const expected = await resolveExpected(options.expected, args);
|
|
90
|
-
if (expected === void 0) {
|
|
91
|
-
return EvalOutcome.invalid("No expected value provided for semantic similarity.");
|
|
92
|
-
}
|
|
93
|
-
if (typeof expected !== "string") {
|
|
94
|
-
return EvalOutcome.invalid("Semantic similarity expected value must be a string.");
|
|
95
|
-
}
|
|
96
|
-
const [actualEmbedding, expectedEmbedding] = await Promise.all([
|
|
97
|
-
embedText(options.model, actual),
|
|
98
|
-
embedText(options.model, expected)
|
|
99
|
-
]);
|
|
100
|
-
const score = cosineSimilarity(actualEmbedding.vector, expectedEmbedding.vector);
|
|
101
|
-
return score >= options.threshold ? EvalOutcome.pass(score) : EvalOutcome.fail(score, { comment: `Similarity below threshold ${options.threshold}.` });
|
|
102
|
-
}
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
function llmJudge(options) {
|
|
106
|
-
const extractor = new ExtractorBuilder(options.model, options.schema).instructions(
|
|
107
|
-
options.instructions ?? "Judge the eval case by the requested schema. Submit the judgment using the schema."
|
|
108
|
-
).retries(options.retries ?? 0).build();
|
|
109
|
-
return {
|
|
110
|
-
name: options.name ?? "llm_judge",
|
|
111
|
-
async evaluate(args) {
|
|
112
|
-
try {
|
|
113
|
-
const judgment = await extractor.extract(await resolveJudgePrompt(options.prompt, args));
|
|
114
|
-
return options.passes(judgment) ? EvalOutcome.pass(judgment) : EvalOutcome.fail(judgment);
|
|
115
|
-
} catch (error) {
|
|
116
|
-
return EvalOutcome.invalid(errorMessage(error));
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
function llmScore(options) {
|
|
122
|
-
const criteria = Array.isArray(options.criteria) ? options.criteria.join("\n") : options.criteria;
|
|
123
|
-
const extractor = new ExtractorBuilder(
|
|
124
|
-
options.model,
|
|
125
|
-
z.object({
|
|
126
|
-
score: z.number(),
|
|
127
|
-
feedback: z.string()
|
|
128
|
-
})
|
|
129
|
-
).instructions(
|
|
130
|
-
options.instructions ?? `Score the eval case against these criteria:
|
|
131
|
-
${criteria}
|
|
132
|
-
|
|
133
|
-
Return a score between 0 and 1 and brief feedback.`
|
|
134
|
-
).retries(options.retries ?? 0).build();
|
|
135
|
-
return {
|
|
136
|
-
name: options.name ?? "llm_score",
|
|
137
|
-
async evaluate(args) {
|
|
138
|
-
try {
|
|
139
|
-
const score = await extractor.extract(await resolveJudgePrompt(options.prompt, args));
|
|
140
|
-
if (score.score < 0 || score.score > 1) {
|
|
141
|
-
return EvalOutcome.invalid(`Score ${score.score} outside valid range [0, 1].`, {
|
|
142
|
-
score
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
return score.score >= options.threshold ? EvalOutcome.pass(score, { comment: score.feedback }) : EvalOutcome.fail(score, { comment: score.feedback });
|
|
146
|
-
} catch (error) {
|
|
147
|
-
return EvalOutcome.invalid(errorMessage(error));
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
};
|
|
151
|
-
}
|
|
152
|
-
function agentEvalTarget(agent, options = {}) {
|
|
153
|
-
return async (input, testCase) => {
|
|
154
|
-
const prompt = options.prompt?.(input, testCase) ?? String(input);
|
|
155
|
-
const response = await agent.prompt(prompt).send();
|
|
156
|
-
return options.output === void 0 ? response : options.output(response, testCase);
|
|
157
|
-
};
|
|
158
|
-
}
|
|
159
|
-
async function runEvalCase(options, testCase) {
|
|
160
|
-
let output;
|
|
161
|
-
let targetError;
|
|
162
|
-
try {
|
|
163
|
-
output = await options.target(testCase.input, testCase);
|
|
164
|
-
} catch (error) {
|
|
165
|
-
targetError = error;
|
|
166
|
-
}
|
|
167
|
-
const metrics = [];
|
|
168
|
-
for (const metric of options.metrics) {
|
|
169
|
-
const outcome = targetError === void 0 ? await safeEvaluate(options.name, testCase, output, metric) : EvalOutcome.invalid(`Target failed: ${errorMessage(targetError)}`);
|
|
170
|
-
const reporterErrors = await reportOutcome({
|
|
171
|
-
suiteName: options.name,
|
|
172
|
-
testCase,
|
|
173
|
-
output,
|
|
174
|
-
targetError,
|
|
175
|
-
metric,
|
|
176
|
-
outcome,
|
|
177
|
-
reporters: options.reporters ?? [],
|
|
178
|
-
failOnReporterError: options.failOnReporterError === true
|
|
179
|
-
});
|
|
180
|
-
metrics.push({ metricName: metric.name, outcome, reporterErrors });
|
|
181
|
-
}
|
|
182
|
-
return {
|
|
183
|
-
case: testCase,
|
|
184
|
-
...output === void 0 ? {} : { output },
|
|
185
|
-
...targetError === void 0 ? {} : { targetError },
|
|
186
|
-
metrics
|
|
187
|
-
};
|
|
188
|
-
}
|
|
189
|
-
async function safeEvaluate(suiteName, testCase, output, metric) {
|
|
190
|
-
try {
|
|
191
|
-
return await metric.evaluate({ suiteName, case: testCase, output });
|
|
192
|
-
} catch (error) {
|
|
193
|
-
return EvalOutcome.invalid(errorMessage(error));
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
async function reportOutcome(args) {
|
|
197
|
-
const errors = [];
|
|
198
|
-
for (const reporter of args.reporters) {
|
|
199
|
-
try {
|
|
200
|
-
await reporter.report({
|
|
201
|
-
suiteName: args.suiteName,
|
|
202
|
-
case: args.testCase,
|
|
203
|
-
output: args.output,
|
|
204
|
-
targetError: args.targetError,
|
|
205
|
-
metric: args.metric,
|
|
206
|
-
outcome: args.outcome
|
|
207
|
-
});
|
|
208
|
-
} catch (error) {
|
|
209
|
-
if (args.failOnReporterError) {
|
|
210
|
-
throw error;
|
|
211
|
-
}
|
|
212
|
-
errors.push(error);
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
return errors;
|
|
216
|
-
}
|
|
217
|
-
function countOutcomes(results) {
|
|
218
|
-
let passed = 0;
|
|
219
|
-
let failed = 0;
|
|
220
|
-
let invalid = 0;
|
|
221
|
-
for (const result of results) {
|
|
222
|
-
for (const metric of result.metrics) {
|
|
223
|
-
if (metric.outcome.outcome === "pass") passed += 1;
|
|
224
|
-
if (metric.outcome.outcome === "fail") failed += 1;
|
|
225
|
-
if (metric.outcome.outcome === "invalid") invalid += 1;
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
return { passed, failed, invalid };
|
|
229
|
-
}
|
|
230
|
-
async function resolveActual(selector, args) {
|
|
231
|
-
return selector === void 0 ? defaultOutputValue(args.output) : selector(args);
|
|
232
|
-
}
|
|
233
|
-
async function resolveActualText(selector, args) {
|
|
234
|
-
const value = selector === void 0 ? defaultOutputValue(args.output) : await selector(args);
|
|
235
|
-
return typeof value === "string" ? value : JSON.stringify(value);
|
|
236
|
-
}
|
|
237
|
-
async function resolveExpected(selectorOrValue, args) {
|
|
238
|
-
if (selectorOrValue === void 0) {
|
|
239
|
-
return args.case.expected;
|
|
240
|
-
}
|
|
241
|
-
return typeof selectorOrValue === "function" ? selectorOrValue(args) : selectorOrValue;
|
|
242
|
-
}
|
|
243
|
-
async function resolveJudgePrompt(selector, args) {
|
|
244
|
-
if (selector !== void 0) {
|
|
245
|
-
return selector(args);
|
|
246
|
-
}
|
|
247
|
-
return [
|
|
248
|
-
`Suite: ${args.suiteName}`,
|
|
249
|
-
`Case: ${args.case.id}`,
|
|
250
|
-
`Input: ${formatValue(args.case.input)}`,
|
|
251
|
-
`Expected: ${formatValue(args.case.expected)}`,
|
|
252
|
-
`Output: ${formatValue(defaultOutputValue(args.output))}`
|
|
253
|
-
].join("\n\n");
|
|
254
|
-
}
|
|
255
|
-
function defaultOutputValue(output) {
|
|
256
|
-
if (typeof output === "object" && output !== null && "output" in output && typeof output.output === "string") {
|
|
257
|
-
return output.output;
|
|
258
|
-
}
|
|
259
|
-
return output;
|
|
260
|
-
}
|
|
261
|
-
function stableComparable(value) {
|
|
262
|
-
if (typeof value === "string") {
|
|
263
|
-
return value;
|
|
264
|
-
}
|
|
265
|
-
return JSON.stringify(value);
|
|
266
|
-
}
|
|
267
|
-
function formatValue(value) {
|
|
268
|
-
if (typeof value === "string") {
|
|
269
|
-
return value;
|
|
270
|
-
}
|
|
271
|
-
try {
|
|
272
|
-
return JSON.stringify(value);
|
|
273
|
-
} catch {
|
|
274
|
-
return String(value);
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
function errorMessage(error) {
|
|
278
|
-
return error instanceof Error ? error.message : String(error);
|
|
279
|
-
}
|
|
280
|
-
async function mapWithConcurrency(inputs, concurrency, mapper) {
|
|
281
|
-
const results = new Array(inputs.length);
|
|
282
|
-
let next = 0;
|
|
283
|
-
async function worker() {
|
|
284
|
-
while (next < inputs.length) {
|
|
285
|
-
const index = next;
|
|
286
|
-
next += 1;
|
|
287
|
-
results[index] = await mapper(inputs[index]);
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
await Promise.all(Array.from({ length: Math.min(concurrency, inputs.length) }, () => worker()));
|
|
291
|
-
return results;
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
export {
|
|
295
|
-
EvalOutcome,
|
|
296
|
-
runEvalSuite,
|
|
297
|
-
exactMatch,
|
|
298
|
-
contains,
|
|
299
|
-
semanticSimilarity,
|
|
300
|
-
llmJudge,
|
|
301
|
-
llmScore,
|
|
302
|
-
agentEvalTarget
|
|
303
|
-
};
|
|
304
|
-
//# sourceMappingURL=chunk-6JCCM2K4.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/evals/index.ts"],"sourcesContent":["import { z } from \"zod\";\nimport type { Agent, PromptResponse } from \"../agent\";\nimport type { CompletionModel, JsonValue, Message } from \"../completion\";\nimport { cosineSimilarity, type EmbeddingModel, embedText } from \"../embeddings\";\nimport { ExtractorBuilder } from \"../extractor\";\nimport type { ZodSchema } from \"../schema\";\n\nexport type EvalMetadata = Record<string, JsonValue | undefined>;\n\nexport type EvalCase<Input, Expected = unknown> = {\n id: string;\n input: Input;\n expected?: Expected | undefined;\n metadata?: EvalMetadata | undefined;\n};\n\nexport type EvalTarget<Input, Output, Expected = unknown> = (\n input: Input,\n testCase: EvalCase<Input, Expected>,\n) => Output | Promise<Output>;\n\nexport type EvalOutcomeStatus = \"pass\" | \"fail\" | \"invalid\";\n\nexport type EvalOutcome<Score = unknown> =\n | {\n outcome: \"pass\";\n score?: Score | undefined;\n comment?: string | undefined;\n metadata?: EvalMetadata | undefined;\n }\n | {\n outcome: \"fail\";\n score?: Score | undefined;\n comment?: string | undefined;\n metadata?: EvalMetadata | undefined;\n }\n | {\n outcome: \"invalid\";\n reason: string;\n score?: Score | undefined;\n comment?: string | undefined;\n metadata?: EvalMetadata | undefined;\n };\n\nexport const EvalOutcome = {\n pass<Score>(\n score?: Score,\n options: { comment?: string | undefined; metadata?: EvalMetadata | undefined } = {},\n ): EvalOutcome<Score> {\n return {\n outcome: \"pass\",\n ...(score === undefined ? {} : { score }),\n ...(options.comment === undefined ? {} : { comment: options.comment }),\n ...(options.metadata === undefined ? {} : { metadata: options.metadata }),\n };\n },\n\n fail<Score>(\n score?: Score,\n options: { comment?: string | undefined; metadata?: EvalMetadata | undefined } = {},\n ): EvalOutcome<Score> {\n return {\n outcome: \"fail\",\n ...(score === undefined ? {} : { score }),\n ...(options.comment === undefined ? {} : { comment: options.comment }),\n ...(options.metadata === undefined ? {} : { metadata: options.metadata }),\n };\n },\n\n invalid<Score = never>(\n reason: string,\n options: {\n score?: Score | undefined;\n comment?: string | undefined;\n metadata?: EvalMetadata | undefined;\n } = {},\n ): EvalOutcome<Score> {\n return {\n outcome: \"invalid\",\n reason,\n ...(options.score === undefined ? {} : { score: options.score }),\n ...(options.comment === undefined ? {} : { comment: options.comment }),\n ...(options.metadata === undefined ? {} : { metadata: options.metadata }),\n };\n },\n};\n\nexport type EvalMetricArgs<Input, Output, Expected = unknown> = {\n suiteName: string;\n case: EvalCase<Input, Expected>;\n output: Output;\n};\n\nexport type EvalMetric<Input, Output, Score = unknown, Expected = unknown> = {\n name: string;\n evaluate(\n args: EvalMetricArgs<Input, Output, Expected>,\n ): EvalOutcome<Score> | Promise<EvalOutcome<Score>>;\n};\n\nexport type EvalMetricResult<Score = unknown> = {\n metricName: string;\n outcome: EvalOutcome<Score>;\n reporterErrors: unknown[];\n};\n\nexport type EvalCaseResult<Input, Output, Expected = unknown> = {\n case: EvalCase<Input, Expected>;\n output?: Output | undefined;\n targetError?: unknown;\n metrics: EvalMetricResult[];\n};\n\nexport type EvalSuiteResult<Input, Output, Expected = unknown> = {\n name: string;\n results: Array<EvalCaseResult<Input, Output, Expected>>;\n passed: number;\n failed: number;\n invalid: number;\n durationMs: number;\n};\n\nexport type EvalReportArgs<Input, Output, Score = unknown, Expected = unknown> = {\n suiteName: string;\n case: EvalCase<Input, Expected>;\n output?: Output | undefined;\n targetError?: unknown;\n metric: EvalMetric<Input, Output, Score, Expected>;\n outcome: EvalOutcome<Score>;\n};\n\nexport type EvalReporter<Input = unknown, Output = unknown, Expected = unknown> = {\n report(args: EvalReportArgs<Input, Output, unknown, Expected>): void | Promise<void>;\n};\n\nexport type RunEvalSuiteOptions<Input, Output, Expected = unknown> = {\n name: string;\n cases: Array<EvalCase<Input, Expected>>;\n target: EvalTarget<Input, Output, Expected>;\n metrics: Array<EvalMetric<NoInfer<Input>, NoInfer<Output>, unknown, NoInfer<Expected>>>;\n concurrency?: number | undefined;\n reporters?: Array<EvalReporter<NoInfer<Input>, NoInfer<Output>, NoInfer<Expected>>> | undefined;\n failOnReporterError?: boolean | undefined;\n};\n\nexport async function runEvalSuite<Input, Output, Expected = unknown>(\n options: RunEvalSuiteOptions<Input, Output, Expected>,\n): Promise<EvalSuiteResult<Input, Output, Expected>> {\n const startedAt = Date.now();\n const results = await mapWithConcurrency(\n options.cases,\n Math.max(1, Math.trunc(options.concurrency ?? 1)),\n (testCase) => runEvalCase(options, testCase),\n );\n const counts = countOutcomes(results);\n return {\n name: options.name,\n results,\n ...counts,\n durationMs: Date.now() - startedAt,\n };\n}\n\nexport type ValueSelector<Input, Output, Expected, Value> = (\n args: EvalMetricArgs<Input, Output, Expected>,\n) => Value | Promise<Value>;\n\nexport type SelectorOrValue<Input, Output, Expected, Value> =\n | Value\n | ValueSelector<Input, Output, Expected, Value>;\n\nexport type ExactMatchOptions<Input, Output, Expected = unknown> = {\n name?: string | undefined;\n actual?: ValueSelector<Input, Output, Expected, unknown> | undefined;\n expected?: SelectorOrValue<Input, Output, Expected, unknown> | undefined;\n};\n\nexport function exactMatch<Input, Output, Expected = unknown>(\n options: ExactMatchOptions<Input, Output, Expected> = {},\n): EvalMetric<Input, Output, boolean, Expected> {\n return {\n name: options.name ?? \"exact_match\",\n async evaluate(args) {\n const actual = await resolveActual(options.actual, args);\n const expected = await resolveExpected(options.expected, args);\n if (expected === undefined) {\n return EvalOutcome.invalid(\"No expected value provided for exact match.\");\n }\n const passed = stableComparable(actual) === stableComparable(expected);\n return passed\n ? EvalOutcome.pass(true)\n : EvalOutcome.fail(false, { comment: `Expected ${formatValue(expected)}.` });\n },\n };\n}\n\nexport type ContainsOptions<Input, Output, Expected = unknown> = {\n name?: string | undefined;\n actual?: ValueSelector<Input, Output, Expected, string> | undefined;\n expected?: SelectorOrValue<Input, Output, Expected, string | RegExp> | undefined;\n};\n\nexport function contains<Input, Output, Expected = unknown>(\n options: ContainsOptions<Input, Output, Expected> = {},\n): EvalMetric<Input, Output, boolean, Expected> {\n return {\n name: options.name ?? \"contains\",\n async evaluate(args) {\n const actual = await resolveActualText(options.actual, args);\n const expected = await resolveExpected(options.expected, args);\n if (expected === undefined) {\n return EvalOutcome.invalid(\"No expected value provided for contains.\");\n }\n if (typeof expected !== \"string\" && !(expected instanceof RegExp)) {\n return EvalOutcome.invalid(\"Contains expected value must be a string or RegExp.\");\n }\n const passed = expected instanceof RegExp ? expected.test(actual) : actual.includes(expected);\n return passed\n ? EvalOutcome.pass(true)\n : EvalOutcome.fail(false, { comment: `Output did not contain ${String(expected)}.` });\n },\n };\n}\n\nexport type SemanticSimilarityOptions<Input, Output, Expected = unknown> = {\n name?: string | undefined;\n model: EmbeddingModel;\n threshold: number;\n actual?: ValueSelector<Input, Output, Expected, string> | undefined;\n expected?: SelectorOrValue<Input, Output, Expected, string> | undefined;\n};\n\nexport function semanticSimilarity<Input, Output, Expected = unknown>(\n options: SemanticSimilarityOptions<Input, Output, Expected>,\n): EvalMetric<Input, Output, number, Expected> {\n return {\n name: options.name ?? \"semantic_similarity\",\n async evaluate(args) {\n const actual = await resolveActualText(options.actual, args);\n const expected = await resolveExpected(options.expected, args);\n if (expected === undefined) {\n return EvalOutcome.invalid(\"No expected value provided for semantic similarity.\");\n }\n if (typeof expected !== \"string\") {\n return EvalOutcome.invalid(\"Semantic similarity expected value must be a string.\");\n }\n const [actualEmbedding, expectedEmbedding] = await Promise.all([\n embedText(options.model, actual),\n embedText(options.model, expected),\n ]);\n const score = cosineSimilarity(actualEmbedding.vector, expectedEmbedding.vector);\n return score >= options.threshold\n ? EvalOutcome.pass(score)\n : EvalOutcome.fail(score, { comment: `Similarity below threshold ${options.threshold}.` });\n },\n };\n}\n\nexport type LlmJudgeOptions<Input, Output, SchemaOutput, Expected = unknown> = {\n name?: string | undefined;\n model: CompletionModel;\n schema: ZodSchema<SchemaOutput>;\n passes(value: SchemaOutput): boolean;\n instructions?: string | undefined;\n retries?: number | undefined;\n prompt?: ValueSelector<Input, Output, Expected, string> | undefined;\n};\n\nexport function llmJudge<Input, Output, SchemaOutput, Expected = unknown>(\n options: LlmJudgeOptions<Input, Output, SchemaOutput, Expected>,\n): EvalMetric<Input, Output, SchemaOutput, Expected> {\n const extractor = new ExtractorBuilder(options.model, options.schema)\n .instructions(\n options.instructions ??\n \"Judge the eval case by the requested schema. Submit the judgment using the schema.\",\n )\n .retries(options.retries ?? 0)\n .build();\n\n return {\n name: options.name ?? \"llm_judge\",\n async evaluate(args) {\n try {\n const judgment = await extractor.extract(await resolveJudgePrompt(options.prompt, args));\n return options.passes(judgment) ? EvalOutcome.pass(judgment) : EvalOutcome.fail(judgment);\n } catch (error) {\n return EvalOutcome.invalid(errorMessage(error));\n }\n },\n };\n}\n\nexport type LlmScoreMetricScore = {\n score: number;\n feedback: string;\n};\n\nexport type LlmScoreOptions<Input, Output, Expected = unknown> = {\n name?: string | undefined;\n model: CompletionModel;\n threshold: number;\n criteria: string | string[];\n instructions?: string | undefined;\n retries?: number | undefined;\n prompt?: ValueSelector<Input, Output, Expected, string> | undefined;\n};\n\nexport function llmScore<Input, Output, Expected = unknown>(\n options: LlmScoreOptions<Input, Output, Expected>,\n): EvalMetric<Input, Output, LlmScoreMetricScore, Expected> {\n const criteria = Array.isArray(options.criteria) ? options.criteria.join(\"\\n\") : options.criteria;\n const extractor = new ExtractorBuilder(\n options.model,\n z.object({\n score: z.number(),\n feedback: z.string(),\n }),\n )\n .instructions(\n options.instructions ??\n `Score the eval case against these criteria:\\n${criteria}\\n\\nReturn a score between 0 and 1 and brief feedback.`,\n )\n .retries(options.retries ?? 0)\n .build();\n\n return {\n name: options.name ?? \"llm_score\",\n async evaluate(args) {\n try {\n const score = await extractor.extract(await resolveJudgePrompt(options.prompt, args));\n if (score.score < 0 || score.score > 1) {\n return EvalOutcome.invalid(`Score ${score.score} outside valid range [0, 1].`, {\n score,\n });\n }\n return score.score >= options.threshold\n ? EvalOutcome.pass(score, { comment: score.feedback })\n : EvalOutcome.fail(score, { comment: score.feedback });\n } catch (error) {\n return EvalOutcome.invalid(errorMessage(error));\n }\n },\n };\n}\n\nexport type AgentEvalTargetOptions<Input, Output = PromptResponse> = {\n prompt?: ((input: Input, testCase: EvalCase<Input>) => string | Message) | undefined;\n output?: ((response: PromptResponse, testCase: EvalCase<Input>) => Output) | undefined;\n};\n\nexport function agentEvalTarget<Input>(\n agent: Agent,\n options?: AgentEvalTargetOptions<Input, PromptResponse>,\n): EvalTarget<Input, PromptResponse>;\nexport function agentEvalTarget<Input, Output>(\n agent: Agent,\n options: AgentEvalTargetOptions<Input, Output>,\n): EvalTarget<Input, Output>;\nexport function agentEvalTarget<Input, Output>(\n agent: Agent,\n options: AgentEvalTargetOptions<Input, Output | PromptResponse> = {},\n): EvalTarget<Input, Output | PromptResponse> {\n return async (input, testCase) => {\n const prompt = options.prompt?.(input, testCase) ?? String(input);\n const response = await agent.prompt(prompt).send();\n return options.output === undefined ? response : options.output(response, testCase);\n };\n}\n\nasync function runEvalCase<Input, Output, Expected>(\n options: RunEvalSuiteOptions<Input, Output, Expected>,\n testCase: EvalCase<Input, Expected>,\n): Promise<EvalCaseResult<Input, Output, Expected>> {\n let output: Output | undefined;\n let targetError: unknown;\n try {\n output = await options.target(testCase.input, testCase);\n } catch (error) {\n targetError = error;\n }\n\n const metrics: EvalMetricResult[] = [];\n for (const metric of options.metrics) {\n const outcome =\n targetError === undefined\n ? await safeEvaluate(options.name, testCase, output as Output, metric)\n : EvalOutcome.invalid(`Target failed: ${errorMessage(targetError)}`);\n const reporterErrors = await reportOutcome({\n suiteName: options.name,\n testCase,\n output,\n targetError,\n metric,\n outcome,\n reporters: options.reporters ?? [],\n failOnReporterError: options.failOnReporterError === true,\n });\n metrics.push({ metricName: metric.name, outcome, reporterErrors });\n }\n\n return {\n case: testCase,\n ...(output === undefined ? {} : { output }),\n ...(targetError === undefined ? {} : { targetError }),\n metrics,\n };\n}\n\nasync function safeEvaluate<Input, Output, Expected>(\n suiteName: string,\n testCase: EvalCase<Input, Expected>,\n output: Output,\n metric: EvalMetric<Input, Output, unknown, Expected>,\n): Promise<EvalOutcome> {\n try {\n return await metric.evaluate({ suiteName, case: testCase, output });\n } catch (error) {\n return EvalOutcome.invalid(errorMessage(error));\n }\n}\n\nasync function reportOutcome<Input, Output, Expected>(args: {\n suiteName: string;\n testCase: EvalCase<Input, Expected>;\n output: Output | undefined;\n targetError: unknown;\n metric: EvalMetric<Input, Output, unknown, Expected>;\n outcome: EvalOutcome;\n reporters: Array<EvalReporter<Input, Output, Expected>>;\n failOnReporterError: boolean;\n}): Promise<unknown[]> {\n const errors: unknown[] = [];\n for (const reporter of args.reporters) {\n try {\n await reporter.report({\n suiteName: args.suiteName,\n case: args.testCase,\n output: args.output,\n targetError: args.targetError,\n metric: args.metric,\n outcome: args.outcome,\n });\n } catch (error) {\n if (args.failOnReporterError) {\n throw error;\n }\n errors.push(error);\n }\n }\n return errors;\n}\n\nfunction countOutcomes(results: Array<EvalCaseResult<unknown, unknown, unknown>>): {\n passed: number;\n failed: number;\n invalid: number;\n} {\n let passed = 0;\n let failed = 0;\n let invalid = 0;\n for (const result of results) {\n for (const metric of result.metrics) {\n if (metric.outcome.outcome === \"pass\") passed += 1;\n if (metric.outcome.outcome === \"fail\") failed += 1;\n if (metric.outcome.outcome === \"invalid\") invalid += 1;\n }\n }\n return { passed, failed, invalid };\n}\n\nasync function resolveActual<Input, Output, Expected>(\n selector: ValueSelector<Input, Output, Expected, unknown> | undefined,\n args: EvalMetricArgs<Input, Output, Expected>,\n): Promise<unknown> {\n return selector === undefined ? defaultOutputValue(args.output) : selector(args);\n}\n\nasync function resolveActualText<Input, Output, Expected>(\n selector: ValueSelector<Input, Output, Expected, string> | undefined,\n args: EvalMetricArgs<Input, Output, Expected>,\n): Promise<string> {\n const value = selector === undefined ? defaultOutputValue(args.output) : await selector(args);\n return typeof value === \"string\" ? value : JSON.stringify(value);\n}\n\nasync function resolveExpected<Input, Output, Expected, Value>(\n selectorOrValue: SelectorOrValue<Input, Output, Expected, Value> | undefined,\n args: EvalMetricArgs<Input, Output, Expected>,\n): Promise<Value | Expected | undefined> {\n if (selectorOrValue === undefined) {\n return args.case.expected;\n }\n return typeof selectorOrValue === \"function\"\n ? (selectorOrValue as ValueSelector<Input, Output, Expected, Value>)(args)\n : selectorOrValue;\n}\n\nasync function resolveJudgePrompt<Input, Output, Expected>(\n selector: ValueSelector<Input, Output, Expected, string> | undefined,\n args: EvalMetricArgs<Input, Output, Expected>,\n): Promise<string> {\n if (selector !== undefined) {\n return selector(args);\n }\n return [\n `Suite: ${args.suiteName}`,\n `Case: ${args.case.id}`,\n `Input: ${formatValue(args.case.input)}`,\n `Expected: ${formatValue(args.case.expected)}`,\n `Output: ${formatValue(defaultOutputValue(args.output))}`,\n ].join(\"\\n\\n\");\n}\n\nfunction defaultOutputValue(output: unknown): unknown {\n if (\n typeof output === \"object\" &&\n output !== null &&\n \"output\" in output &&\n typeof (output as { output?: unknown }).output === \"string\"\n ) {\n return (output as { output: string }).output;\n }\n return output;\n}\n\nfunction stableComparable(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n return JSON.stringify(value);\n}\n\nfunction formatValue(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nasync function mapWithConcurrency<Input, Output>(\n inputs: Input[],\n concurrency: number,\n mapper: (input: Input) => Promise<Output>,\n): Promise<Output[]> {\n const results = new Array<Output>(inputs.length);\n let next = 0;\n\n async function worker(): Promise<void> {\n while (next < inputs.length) {\n const index = next;\n next += 1;\n results[index] = await mapper(inputs[index] as Input);\n }\n }\n\n await Promise.all(Array.from({ length: Math.min(concurrency, inputs.length) }, () => worker()));\n return results;\n}\n"],"mappings":"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","names":[]}
|
package/dist/chunk-7QI6ZAFI.js
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
// src/transcription/index.ts
|
|
2
|
-
var TranscriptionRequestBuilder = class {
|
|
3
|
-
constructor(model) {
|
|
4
|
-
this.model = model;
|
|
5
|
-
}
|
|
6
|
-
model;
|
|
7
|
-
request = {
|
|
8
|
-
data: new Uint8Array(),
|
|
9
|
-
filename: "file"
|
|
10
|
-
};
|
|
11
|
-
data(data) {
|
|
12
|
-
this.request = { ...this.request, data: toUint8Array(data) };
|
|
13
|
-
return this;
|
|
14
|
-
}
|
|
15
|
-
filename(filename) {
|
|
16
|
-
this.request = { ...this.request, filename };
|
|
17
|
-
return this;
|
|
18
|
-
}
|
|
19
|
-
language(language) {
|
|
20
|
-
this.request = { ...this.request, language };
|
|
21
|
-
return this;
|
|
22
|
-
}
|
|
23
|
-
prompt(prompt) {
|
|
24
|
-
this.request = { ...this.request, prompt };
|
|
25
|
-
return this;
|
|
26
|
-
}
|
|
27
|
-
temperature(temperature) {
|
|
28
|
-
this.request = { ...this.request, temperature };
|
|
29
|
-
return this;
|
|
30
|
-
}
|
|
31
|
-
additionalParams(additionalParams) {
|
|
32
|
-
this.request = { ...this.request, additionalParams };
|
|
33
|
-
return this;
|
|
34
|
-
}
|
|
35
|
-
build() {
|
|
36
|
-
if (this.request.data.byteLength === 0) {
|
|
37
|
-
throw new Error("Transcription data cannot be empty.");
|
|
38
|
-
}
|
|
39
|
-
return { ...this.request, data: toUint8Array(this.request.data) };
|
|
40
|
-
}
|
|
41
|
-
send() {
|
|
42
|
-
return this.model.transcription(this.build());
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
|
-
function transcriptionRequest(model) {
|
|
46
|
-
return new TranscriptionRequestBuilder(model);
|
|
47
|
-
}
|
|
48
|
-
function toUint8Array(bytes) {
|
|
49
|
-
if (bytes instanceof Uint8Array) {
|
|
50
|
-
return new Uint8Array(
|
|
51
|
-
bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength)
|
|
52
|
-
);
|
|
53
|
-
}
|
|
54
|
-
return new Uint8Array(bytes);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export {
|
|
58
|
-
TranscriptionRequestBuilder,
|
|
59
|
-
transcriptionRequest
|
|
60
|
-
};
|
|
61
|
-
//# sourceMappingURL=chunk-7QI6ZAFI.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/transcription/index.ts"],"sourcesContent":["import type { JsonValue } from \"../completion\";\n\nexport type TranscriptionRequest = {\n data: Uint8Array;\n filename: string;\n language?: string | undefined;\n prompt?: string | undefined;\n temperature?: number | undefined;\n additionalParams?: JsonValue | undefined;\n};\n\nexport type TranscriptionResponse<RawResponse = unknown> = {\n text: string;\n rawResponse: RawResponse;\n};\n\nexport interface TranscriptionModel<RawResponse = unknown> {\n readonly provider?: string | undefined;\n readonly defaultModel?: string | undefined;\n transcription(request: TranscriptionRequest): Promise<TranscriptionResponse<RawResponse>>;\n}\n\nexport class TranscriptionRequestBuilder<Model extends TranscriptionModel = TranscriptionModel> {\n private request: TranscriptionRequest = {\n data: new Uint8Array(),\n filename: \"file\",\n };\n\n constructor(private readonly model: Model) {}\n\n data(data: Uint8Array | ArrayBuffer): this {\n this.request = { ...this.request, data: toUint8Array(data) };\n return this;\n }\n\n filename(filename: string): this {\n this.request = { ...this.request, filename };\n return this;\n }\n\n language(language: string): this {\n this.request = { ...this.request, language };\n return this;\n }\n\n prompt(prompt: string): this {\n this.request = { ...this.request, prompt };\n return this;\n }\n\n temperature(temperature: number): this {\n this.request = { ...this.request, temperature };\n return this;\n }\n\n additionalParams(additionalParams: JsonValue): this {\n this.request = { ...this.request, additionalParams };\n return this;\n }\n\n build(): TranscriptionRequest {\n if (this.request.data.byteLength === 0) {\n throw new Error(\"Transcription data cannot be empty.\");\n }\n return { ...this.request, data: toUint8Array(this.request.data) };\n }\n\n send(): Promise<Awaited<ReturnType<Model[\"transcription\"]>>> {\n return this.model.transcription(this.build()) as Promise<\n Awaited<ReturnType<Model[\"transcription\"]>>\n >;\n }\n}\n\nexport function transcriptionRequest<Model extends TranscriptionModel>(\n model: Model,\n): TranscriptionRequestBuilder<Model> {\n return new TranscriptionRequestBuilder(model);\n}\n\nfunction toUint8Array(bytes: Uint8Array | ArrayBuffer): Uint8Array {\n if (bytes instanceof Uint8Array) {\n return new Uint8Array(\n bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength),\n );\n }\n return new Uint8Array(bytes);\n}\n"],"mappings":";AAsBO,IAAM,8BAAN,MAAyF;AAAA,EAM9F,YAA6B,OAAc;AAAd;AAAA,EAAe;AAAA,EAAf;AAAA,EALrB,UAAgC;AAAA,IACtC,MAAM,IAAI,WAAW;AAAA,IACrB,UAAU;AAAA,EACZ;AAAA,EAIA,KAAK,MAAsC;AACzC,SAAK,UAAU,EAAE,GAAG,KAAK,SAAS,MAAM,aAAa,IAAI,EAAE;AAC3D,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,UAAwB;AAC/B,SAAK,UAAU,EAAE,GAAG,KAAK,SAAS,SAAS;AAC3C,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,UAAwB;AAC/B,SAAK,UAAU,EAAE,GAAG,KAAK,SAAS,SAAS;AAC3C,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,QAAsB;AAC3B,SAAK,UAAU,EAAE,GAAG,KAAK,SAAS,OAAO;AACzC,WAAO;AAAA,EACT;AAAA,EAEA,YAAY,aAA2B;AACrC,SAAK,UAAU,EAAE,GAAG,KAAK,SAAS,YAAY;AAC9C,WAAO;AAAA,EACT;AAAA,EAEA,iBAAiB,kBAAmC;AAClD,SAAK,UAAU,EAAE,GAAG,KAAK,SAAS,iBAAiB;AACnD,WAAO;AAAA,EACT;AAAA,EAEA,QAA8B;AAC5B,QAAI,KAAK,QAAQ,KAAK,eAAe,GAAG;AACtC,YAAM,IAAI,MAAM,qCAAqC;AAAA,IACvD;AACA,WAAO,EAAE,GAAG,KAAK,SAAS,MAAM,aAAa,KAAK,QAAQ,IAAI,EAAE;AAAA,EAClE;AAAA,EAEA,OAA6D;AAC3D,WAAO,KAAK,MAAM,cAAc,KAAK,MAAM,CAAC;AAAA,EAG9C;AACF;AAEO,SAAS,qBACd,OACoC;AACpC,SAAO,IAAI,4BAA4B,KAAK;AAC9C;AAEA,SAAS,aAAa,OAA6C;AACjE,MAAI,iBAAiB,YAAY;AAC/B,WAAO,IAAI;AAAA,MACT,MAAM,OAAO,MAAM,MAAM,YAAY,MAAM,aAAa,MAAM,UAAU;AAAA,IAC1E;AAAA,EACF;AACA,SAAO,IAAI,WAAW,KAAK;AAC7B;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/embeddings/index.ts"],"sourcesContent":["export type Embedding = {\n document: string;\n vector: number[];\n};\n\nexport interface EmbeddingModel {\n readonly dimensions?: number | undefined;\n readonly maxBatchSize?: number | undefined;\n embedTexts(texts: string[]): Promise<Embedding[]>;\n}\n\nexport type EmbeddedDocument<T, Metadata extends VectorMetadata = VectorMetadata> = {\n id: string;\n document: T;\n metadata?: Metadata | undefined;\n embeddings: Embedding[];\n};\n\nexport type VectorMetadataValue = string | number | boolean | null;\nexport type VectorMetadata = Record<string, VectorMetadataValue>;\n\nexport type EmbedDocumentsOptions<T, Metadata extends VectorMetadata = VectorMetadata> = {\n id?: ((document: T, index: number) => string) | undefined;\n content(document: T, index: number): string | string[];\n metadata?: ((document: T, index: number) => Metadata | undefined) | undefined;\n concurrency?: number | undefined;\n};\n\nexport async function embedText(model: EmbeddingModel, text: string): Promise<Embedding> {\n const embeddings = await embedTexts(model, [text]);\n const embedding = embeddings[0];\n if (embedding === undefined) {\n throw new Error(\"Embedding model returned no embeddings\");\n }\n return embedding;\n}\n\nexport async function embedTexts(model: EmbeddingModel, texts: string[]): Promise<Embedding[]> {\n if (texts.length === 0) {\n return [];\n }\n\n const maxBatchSize = Math.max(1, Math.trunc(model.maxBatchSize ?? texts.length));\n const batches: string[][] = [];\n for (let index = 0; index < texts.length; index += maxBatchSize) {\n batches.push(texts.slice(index, index + maxBatchSize));\n }\n\n const results = await mapWithConcurrency(batches, 1, (batch) => model.embedTexts(batch));\n const embeddings = results.flat();\n if (embeddings.length !== texts.length) {\n throw new Error(\n `Embedding model returned ${embeddings.length} embeddings for ${texts.length} texts`,\n );\n }\n return embeddings;\n}\n\nexport async function embedDocuments<T, Metadata extends VectorMetadata = VectorMetadata>(\n model: EmbeddingModel,\n documents: T[],\n options: EmbedDocumentsOptions<T, Metadata>,\n): Promise<Array<EmbeddedDocument<T, Metadata>>> {\n const prepared = documents.map((document, index) => {\n const content = options.content(document, index);\n const texts = Array.isArray(content) ? content : [content];\n return {\n id: options.id?.(document, index) ?? `doc${index}`,\n document,\n metadata: options.metadata?.(document, index),\n texts,\n };\n });\n\n const flatTexts = prepared.flatMap((item, documentIndex) =>\n item.texts.map((text) => ({ documentIndex, text })),\n );\n const embeddings = await mapWithConcurrency(\n chunk(flatTexts, Math.max(1, Math.trunc(model.maxBatchSize ?? (flatTexts.length || 1)))),\n Math.max(1, Math.trunc(options.concurrency ?? 1)),\n async (batch) => {\n const batchEmbeddings = await model.embedTexts(batch.map((item) => item.text));\n if (batchEmbeddings.length !== batch.length) {\n throw new Error(\n `Embedding model returned ${batchEmbeddings.length} embeddings for ${batch.length} texts`,\n );\n }\n return batch.map((item, index) => ({\n documentIndex: item.documentIndex,\n embedding: batchEmbeddings[index] as Embedding,\n }));\n },\n );\n\n const byDocument = new Map<number, Embedding[]>();\n for (const item of embeddings.flat()) {\n const list = byDocument.get(item.documentIndex) ?? [];\n list.push(item.embedding);\n byDocument.set(item.documentIndex, list);\n }\n\n return prepared.map((item, index) => ({\n id: item.id,\n document: item.document,\n ...(item.metadata === undefined ? {} : { metadata: item.metadata }),\n embeddings: byDocument.get(index) ?? [],\n }));\n}\n\nexport function dotProduct(left: number[], right: number[]): number {\n assertSameDimensions(left, right);\n return left.reduce((sum, value, index) => sum + value * (right[index] as number), 0);\n}\n\nexport function cosineSimilarity(left: number[], right: number[]): number {\n assertSameDimensions(left, right);\n const leftMagnitude = magnitude(left);\n const rightMagnitude = magnitude(right);\n if (leftMagnitude === 0 || rightMagnitude === 0) {\n return 0;\n }\n return dotProduct(left, right) / (leftMagnitude * rightMagnitude);\n}\n\nexport function angularDistance(left: number[], right: number[]): number {\n const similarity = Math.max(-1, Math.min(1, cosineSimilarity(left, right)));\n return Math.acos(similarity) / Math.PI;\n}\n\nexport function euclideanDistance(left: number[], right: number[]): number {\n assertSameDimensions(left, right);\n return Math.sqrt(\n left.reduce((sum, value, index) => sum + (value - (right[index] as number)) ** 2, 0),\n );\n}\n\nexport function manhattanDistance(left: number[], right: number[]): number {\n assertSameDimensions(left, right);\n return left.reduce((sum, value, index) => sum + Math.abs(value - (right[index] as number)), 0);\n}\n\nexport function chebyshevDistance(left: number[], right: number[]): number {\n assertSameDimensions(left, right);\n return left.reduce(\n (max, value, index) => Math.max(max, Math.abs(value - (right[index] as number))),\n 0,\n );\n}\n\nfunction magnitude(vector: number[]): number {\n return Math.sqrt(vector.reduce((sum, value) => sum + value ** 2, 0));\n}\n\nfunction assertSameDimensions(left: number[], right: number[]): void {\n if (left.length !== right.length) {\n throw new Error(`Vector dimension mismatch: ${left.length} !== ${right.length}`);\n }\n}\n\nfunction chunk<T>(items: T[], size: number): T[][] {\n const chunks: T[][] = [];\n for (let index = 0; index < items.length; index += size) {\n chunks.push(items.slice(index, index + size));\n }\n return chunks;\n}\n\nasync function mapWithConcurrency<T, R>(\n items: T[],\n concurrency: number,\n mapper: (item: T) => Promise<R>,\n): Promise<R[]> {\n const results = new Array<R>(items.length);\n let next = 0;\n\n async function worker(): Promise<void> {\n while (next < items.length) {\n const index = next;\n next += 1;\n results[index] = await mapper(items[index] as T);\n }\n }\n\n await Promise.all(Array.from({ length: Math.min(concurrency, items.length) }, () => worker()));\n return results;\n}\n"],"mappings":"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","names":[]}
|
package/dist/chunk-B24Q2ZYM.js
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
// src/image-generation/index.ts
|
|
2
|
-
var ImageGenerationRequestBuilder = class {
|
|
3
|
-
constructor(model) {
|
|
4
|
-
this.model = model;
|
|
5
|
-
}
|
|
6
|
-
model;
|
|
7
|
-
request = {
|
|
8
|
-
prompt: "",
|
|
9
|
-
width: 1024,
|
|
10
|
-
height: 1024
|
|
11
|
-
};
|
|
12
|
-
prompt(prompt) {
|
|
13
|
-
this.request = { ...this.request, prompt };
|
|
14
|
-
return this;
|
|
15
|
-
}
|
|
16
|
-
width(width) {
|
|
17
|
-
this.request = { ...this.request, width };
|
|
18
|
-
return this;
|
|
19
|
-
}
|
|
20
|
-
height(height) {
|
|
21
|
-
this.request = { ...this.request, height };
|
|
22
|
-
return this;
|
|
23
|
-
}
|
|
24
|
-
additionalParams(additionalParams) {
|
|
25
|
-
this.request = { ...this.request, additionalParams };
|
|
26
|
-
return this;
|
|
27
|
-
}
|
|
28
|
-
build() {
|
|
29
|
-
return { ...this.request };
|
|
30
|
-
}
|
|
31
|
-
send() {
|
|
32
|
-
return this.model.imageGeneration(this.build());
|
|
33
|
-
}
|
|
34
|
-
};
|
|
35
|
-
function imageGenerationRequest(model) {
|
|
36
|
-
return new ImageGenerationRequestBuilder(model);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export {
|
|
40
|
-
ImageGenerationRequestBuilder,
|
|
41
|
-
imageGenerationRequest
|
|
42
|
-
};
|
|
43
|
-
//# sourceMappingURL=chunk-B24Q2ZYM.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/image-generation/index.ts"],"sourcesContent":["import type { JsonValue } from \"../completion\";\n\nexport type ImageGenerationRequest = {\n prompt: string;\n width: number;\n height: number;\n additionalParams?: JsonValue | undefined;\n};\n\nexport type GeneratedImage = {\n data: Uint8Array;\n mediaType?: string | undefined;\n};\n\nexport type ImageGenerationResponse<RawResponse = unknown> = {\n image: Uint8Array;\n images: GeneratedImage[];\n mediaType?: string | undefined;\n rawResponse: RawResponse;\n};\n\nexport interface ImageGenerationModel<RawResponse = unknown> {\n readonly provider?: string | undefined;\n readonly defaultModel?: string | undefined;\n imageGeneration(request: ImageGenerationRequest): Promise<ImageGenerationResponse<RawResponse>>;\n}\n\nexport class ImageGenerationRequestBuilder<\n Model extends ImageGenerationModel = ImageGenerationModel,\n> {\n private request: ImageGenerationRequest = {\n prompt: \"\",\n width: 1024,\n height: 1024,\n };\n\n constructor(private readonly model: Model) {}\n\n prompt(prompt: string): this {\n this.request = { ...this.request, prompt };\n return this;\n }\n\n width(width: number): this {\n this.request = { ...this.request, width };\n return this;\n }\n\n height(height: number): this {\n this.request = { ...this.request, height };\n return this;\n }\n\n additionalParams(additionalParams: JsonValue): this {\n this.request = { ...this.request, additionalParams };\n return this;\n }\n\n build(): ImageGenerationRequest {\n return { ...this.request };\n }\n\n send(): Promise<Awaited<ReturnType<Model[\"imageGeneration\"]>>> {\n return this.model.imageGeneration(this.build()) as Promise<\n Awaited<ReturnType<Model[\"imageGeneration\"]>>\n >;\n }\n}\n\nexport function imageGenerationRequest<Model extends ImageGenerationModel>(\n model: Model,\n): ImageGenerationRequestBuilder<Model> {\n return new ImageGenerationRequestBuilder(model);\n}\n"],"mappings":";AA2BO,IAAM,gCAAN,MAEL;AAAA,EAOA,YAA6B,OAAc;AAAd;AAAA,EAAe;AAAA,EAAf;AAAA,EANrB,UAAkC;AAAA,IACxC,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AAAA,EAIA,OAAO,QAAsB;AAC3B,SAAK,UAAU,EAAE,GAAG,KAAK,SAAS,OAAO;AACzC,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAqB;AACzB,SAAK,UAAU,EAAE,GAAG,KAAK,SAAS,MAAM;AACxC,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,QAAsB;AAC3B,SAAK,UAAU,EAAE,GAAG,KAAK,SAAS,OAAO;AACzC,WAAO;AAAA,EACT;AAAA,EAEA,iBAAiB,kBAAmC;AAClD,SAAK,UAAU,EAAE,GAAG,KAAK,SAAS,iBAAiB;AACnD,WAAO;AAAA,EACT;AAAA,EAEA,QAAgC;AAC9B,WAAO,EAAE,GAAG,KAAK,QAAQ;AAAA,EAC3B;AAAA,EAEA,OAA+D;AAC7D,WAAO,KAAK,MAAM,gBAAgB,KAAK,MAAM,CAAC;AAAA,EAGhD;AACF;AAEO,SAAS,uBACd,OACsC;AACtC,SAAO,IAAI,8BAA8B,KAAK;AAChD;","names":[]}
|