@anvia/core 0.1.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/README.md +101 -0
- package/dist/agent/index.d.ts +70 -0
- package/dist/agent/index.js +31 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent-C6h6YrRU.d.ts +218 -0
- package/dist/audio-generation/index.d.ts +32 -0
- package/dist/audio-generation/index.js +9 -0
- package/dist/audio-generation/index.js.map +1 -0
- package/dist/chunk-7QI6ZAFI.js +61 -0
- package/dist/chunk-7QI6ZAFI.js.map +1 -0
- package/dist/chunk-A7VDIZQN.js +145 -0
- package/dist/chunk-A7VDIZQN.js.map +1 -0
- package/dist/chunk-B24Q2ZYM.js +43 -0
- package/dist/chunk-B24Q2ZYM.js.map +1 -0
- package/dist/chunk-B4QHQN5K.js +37 -0
- package/dist/chunk-B4QHQN5K.js.map +1 -0
- package/dist/chunk-CP47FBJV.js +324 -0
- package/dist/chunk-CP47FBJV.js.map +1 -0
- package/dist/chunk-FI2BTRT5.js +86 -0
- package/dist/chunk-FI2BTRT5.js.map +1 -0
- package/dist/chunk-GNWMOSNR.js +113 -0
- package/dist/chunk-GNWMOSNR.js.map +1 -0
- package/dist/chunk-I77SDTFE.js +43 -0
- package/dist/chunk-I77SDTFE.js.map +1 -0
- package/dist/chunk-IA76K5UX.js +142 -0
- package/dist/chunk-IA76K5UX.js.map +1 -0
- package/dist/chunk-IQBY2GCF.js +1207 -0
- package/dist/chunk-IQBY2GCF.js.map +1 -0
- package/dist/chunk-KSIY7KJA.js +387 -0
- package/dist/chunk-KSIY7KJA.js.map +1 -0
- package/dist/chunk-LMBOJMNB.js +304 -0
- package/dist/chunk-LMBOJMNB.js.map +1 -0
- package/dist/chunk-S55WOHX5.js +9 -0
- package/dist/chunk-S55WOHX5.js.map +1 -0
- package/dist/chunk-SRGJPXKT.js +256 -0
- package/dist/chunk-SRGJPXKT.js.map +1 -0
- package/dist/chunk-WZTPK5HV.js +125 -0
- package/dist/chunk-WZTPK5HV.js.map +1 -0
- package/dist/chunk-X6FBOU2P.js +96 -0
- package/dist/chunk-X6FBOU2P.js.map +1 -0
- package/dist/chunk-XUUY2L2D.js +42 -0
- package/dist/chunk-XUUY2L2D.js.map +1 -0
- package/dist/completion/index.d.ts +36 -0
- package/dist/completion/index.js +29 -0
- package/dist/completion/index.js.map +1 -0
- package/dist/embeddings/index.d.ts +34 -0
- package/dist/embeddings/index.js +23 -0
- package/dist/embeddings/index.js.map +1 -0
- package/dist/evals/index.d.ts +153 -0
- package/dist/evals/index.js +30 -0
- package/dist/evals/index.js.map +1 -0
- package/dist/extractor/index.d.ts +45 -0
- package/dist/extractor/index.js +19 -0
- package/dist/extractor/index.js.map +1 -0
- package/dist/image-generation/index.d.ts +37 -0
- package/dist/image-generation/index.js +9 -0
- package/dist/image-generation/index.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.js +183 -0
- package/dist/index.js.map +1 -0
- package/dist/loaders/index.d.ts +82 -0
- package/dist/loaders/index.js +287 -0
- package/dist/loaders/index.js.map +1 -0
- package/dist/mcp/index.d.ts +15 -0
- package/dist/mcp/index.js +9 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/observability/index.d.ts +93 -0
- package/dist/observability/index.js +7 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/pipeline/index.d.ts +51 -0
- package/dist/pipeline/index.js +9 -0
- package/dist/pipeline/index.js.map +1 -0
- package/dist/skills/index.d.ts +12 -0
- package/dist/skills/index.js +16 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/streaming/index.d.ts +6 -0
- package/dist/streaming/index.js +7 -0
- package/dist/streaming/index.js.map +1 -0
- package/dist/tool/index.d.ts +42 -0
- package/dist/tool/index.js +33 -0
- package/dist/tool/index.js.map +1 -0
- package/dist/tool-DhuBQ3yb.d.ts +35 -0
- package/dist/transcription/index.d.ts +35 -0
- package/dist/transcription/index.js +9 -0
- package/dist/transcription/index.js.map +1 -0
- package/dist/types-B5B8Sdl4.d.ts +64 -0
- package/dist/types-BrxLd7ay.d.ts +250 -0
- package/dist/types-HvopERm0.d.ts +30 -0
- package/dist/vector-store/index.d.ts +111 -0
- package/dist/vector-store/index.js +15 -0
- package/dist/vector-store/index.js.map +1 -0
- package/dist/zod-schema-DJTEgQBq.d.ts +40 -0
- package/package.json +102 -0
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
// src/tool/errors.ts
|
|
2
|
+
var ToolCallError = class extends Error {
|
|
3
|
+
constructor(message, cause) {
|
|
4
|
+
super(message);
|
|
5
|
+
this.cause = cause;
|
|
6
|
+
this.name = "ToolCallError";
|
|
7
|
+
}
|
|
8
|
+
cause;
|
|
9
|
+
};
|
|
10
|
+
var ToolNotFoundError = class extends Error {
|
|
11
|
+
constructor(toolName) {
|
|
12
|
+
super(`Tool not found: ${toolName}`);
|
|
13
|
+
this.toolName = toolName;
|
|
14
|
+
this.name = "ToolNotFoundError";
|
|
15
|
+
}
|
|
16
|
+
toolName;
|
|
17
|
+
};
|
|
18
|
+
var ToolJsonError = class extends Error {
|
|
19
|
+
constructor(message, cause) {
|
|
20
|
+
super(message);
|
|
21
|
+
this.cause = cause;
|
|
22
|
+
this.name = "ToolJsonError";
|
|
23
|
+
}
|
|
24
|
+
cause;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
// src/tool/tool.ts
|
|
28
|
+
function serializeToolOutput(output) {
|
|
29
|
+
if (typeof output === "string") {
|
|
30
|
+
return output;
|
|
31
|
+
}
|
|
32
|
+
const serialized = JSON.stringify(output);
|
|
33
|
+
return serialized === void 0 ? String(output) : serialized;
|
|
34
|
+
}
|
|
35
|
+
function parseToolArgs(args) {
|
|
36
|
+
if (args.trim() === "") {
|
|
37
|
+
return {};
|
|
38
|
+
}
|
|
39
|
+
return JSON.parse(args);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// src/tool/tool-set.ts
|
|
43
|
+
var ToolSet = class _ToolSet {
|
|
44
|
+
tools = /* @__PURE__ */ new Map();
|
|
45
|
+
static fromTools(tools) {
|
|
46
|
+
const toolSet = new _ToolSet();
|
|
47
|
+
for (const tool of tools) {
|
|
48
|
+
toolSet.addTool(tool);
|
|
49
|
+
}
|
|
50
|
+
return toolSet;
|
|
51
|
+
}
|
|
52
|
+
addTool(tool) {
|
|
53
|
+
this.tools.set(tool.name, tool);
|
|
54
|
+
return this;
|
|
55
|
+
}
|
|
56
|
+
addTools(tools) {
|
|
57
|
+
const values = Array.isArray(tools) ? tools : tools.values();
|
|
58
|
+
for (const tool of values) {
|
|
59
|
+
this.addTool(tool);
|
|
60
|
+
}
|
|
61
|
+
return this;
|
|
62
|
+
}
|
|
63
|
+
deleteTool(toolName) {
|
|
64
|
+
return this.tools.delete(toolName);
|
|
65
|
+
}
|
|
66
|
+
contains(toolName) {
|
|
67
|
+
return this.tools.has(toolName);
|
|
68
|
+
}
|
|
69
|
+
get(toolName) {
|
|
70
|
+
return this.tools.get(toolName);
|
|
71
|
+
}
|
|
72
|
+
values() {
|
|
73
|
+
return [...this.tools.values()];
|
|
74
|
+
}
|
|
75
|
+
async getToolDefinitions(prompt = "") {
|
|
76
|
+
const defs = [];
|
|
77
|
+
for (const tool of this.tools.values()) {
|
|
78
|
+
defs.push(await tool.definition(prompt));
|
|
79
|
+
}
|
|
80
|
+
return defs;
|
|
81
|
+
}
|
|
82
|
+
async call(toolName, args) {
|
|
83
|
+
const tool = this.tools.get(toolName);
|
|
84
|
+
if (tool === void 0) {
|
|
85
|
+
throw new ToolNotFoundError(toolName);
|
|
86
|
+
}
|
|
87
|
+
let parsedArgs;
|
|
88
|
+
try {
|
|
89
|
+
parsedArgs = parseToolArgs(args);
|
|
90
|
+
} catch (error) {
|
|
91
|
+
throw new ToolJsonError(`Invalid JSON arguments for tool ${toolName}`, error);
|
|
92
|
+
}
|
|
93
|
+
try {
|
|
94
|
+
const output = await tool.call(parsedArgs);
|
|
95
|
+
return serializeToolOutput(output);
|
|
96
|
+
} catch (error) {
|
|
97
|
+
if (error instanceof Error) {
|
|
98
|
+
throw new ToolCallError(error.message, error);
|
|
99
|
+
}
|
|
100
|
+
throw new ToolCallError(`Tool ${toolName} failed`, error);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
export {
|
|
106
|
+
ToolCallError,
|
|
107
|
+
ToolNotFoundError,
|
|
108
|
+
ToolJsonError,
|
|
109
|
+
serializeToolOutput,
|
|
110
|
+
parseToolArgs,
|
|
111
|
+
ToolSet
|
|
112
|
+
};
|
|
113
|
+
//# sourceMappingURL=chunk-GNWMOSNR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tool/errors.ts","../src/tool/tool.ts","../src/tool/tool-set.ts"],"sourcesContent":["export class ToolCallError extends Error {\n constructor(\n message: string,\n readonly cause?: unknown,\n ) {\n super(message);\n this.name = \"ToolCallError\";\n }\n}\n\nexport class ToolNotFoundError extends Error {\n constructor(readonly toolName: string) {\n super(`Tool not found: ${toolName}`);\n this.name = \"ToolNotFoundError\";\n }\n}\n\nexport class ToolJsonError extends Error {\n constructor(\n message: string,\n readonly cause?: unknown,\n ) {\n super(message);\n this.name = \"ToolJsonError\";\n }\n}\n","import type { JsonObject, JsonValue, ToolDefinition } from \"../completion/types\";\n\nexport type ToolApprovalRunContext = {\n agentId: string;\n runId: string;\n sessionId?: string;\n metadata?: JsonObject;\n};\n\nexport type ToolApprovalContext<Args = unknown> = {\n toolName: string;\n args: Args;\n rawArgs: string;\n toolCallId?: string;\n internalCallId: string;\n run: ToolApprovalRunContext;\n};\n\nexport type ToolApprovalPolicy<Args = unknown> = {\n when(ctx: ToolApprovalContext<Args>): boolean | Promise<boolean>;\n reason?: string | ((ctx: ToolApprovalContext<Args>) => string | Promise<string>);\n rejectMessage?: string | ((ctx: ToolApprovalContext<Args>) => string | Promise<string>);\n};\n\nexport interface Tool<Args = unknown, Output = unknown> {\n readonly name: string;\n readonly approval?: ToolApprovalPolicy<Args>;\n definition(prompt: string): ToolDefinition | Promise<ToolDefinition>;\n call(args: Args): Output | Promise<Output>;\n parseApprovalArgs?(args: unknown): Args;\n}\n\nexport type AnyTool = Omit<Tool<unknown, unknown>, \"approval\"> & {\n readonly approval?: unknown;\n};\n\nexport function serializeToolOutput(output: unknown): string {\n if (typeof output === \"string\") {\n return output;\n }\n\n const serialized = JSON.stringify(output);\n return serialized === undefined ? String(output) : serialized;\n}\n\nexport function parseToolArgs(args: string): JsonValue {\n if (args.trim() === \"\") {\n return {};\n }\n\n return JSON.parse(args) as JsonValue;\n}\n","import type { ToolDefinition } from \"../completion/types\";\nimport { ToolCallError, ToolJsonError, ToolNotFoundError } from \"./errors\";\nimport { type AnyTool, parseToolArgs, serializeToolOutput } from \"./tool\";\n\nexport class ToolSet {\n private readonly tools = new Map<string, AnyTool>();\n\n static fromTools(tools: AnyTool[]): ToolSet {\n const toolSet = new ToolSet();\n for (const tool of tools) {\n toolSet.addTool(tool);\n }\n return toolSet;\n }\n\n addTool(tool: AnyTool): this {\n this.tools.set(tool.name, tool);\n return this;\n }\n\n addTools(tools: AnyTool[] | ToolSet): this {\n const values = Array.isArray(tools) ? tools : tools.values();\n for (const tool of values) {\n this.addTool(tool);\n }\n return this;\n }\n\n deleteTool(toolName: string): boolean {\n return this.tools.delete(toolName);\n }\n\n contains(toolName: string): boolean {\n return this.tools.has(toolName);\n }\n\n get(toolName: string): AnyTool | undefined {\n return this.tools.get(toolName);\n }\n\n values(): AnyTool[] {\n return [...this.tools.values()];\n }\n\n async getToolDefinitions(prompt = \"\"): Promise<ToolDefinition[]> {\n const defs: ToolDefinition[] = [];\n for (const tool of this.tools.values()) {\n defs.push(await tool.definition(prompt));\n }\n return defs;\n }\n\n async call(toolName: string, args: string): Promise<string> {\n const tool = this.tools.get(toolName);\n if (tool === undefined) {\n throw new ToolNotFoundError(toolName);\n }\n\n let parsedArgs: unknown;\n try {\n parsedArgs = parseToolArgs(args);\n } catch (error) {\n throw new ToolJsonError(`Invalid JSON arguments for tool ${toolName}`, error);\n }\n\n try {\n const output = await tool.call(parsedArgs);\n return serializeToolOutput(output);\n } catch (error) {\n if (error instanceof Error) {\n throw new ToolCallError(error.message, error);\n }\n throw new ToolCallError(`Tool ${toolName} failed`, error);\n }\n }\n}\n"],"mappings":";AAAO,IAAM,gBAAN,cAA4B,MAAM;AAAA,EACvC,YACE,SACS,OACT;AACA,UAAM,OAAO;AAFJ;AAGT,SAAK,OAAO;AAAA,EACd;AAAA,EAJW;AAKb;AAEO,IAAM,oBAAN,cAAgC,MAAM;AAAA,EAC3C,YAAqB,UAAkB;AACrC,UAAM,mBAAmB,QAAQ,EAAE;AADhB;AAEnB,SAAK,OAAO;AAAA,EACd;AAAA,EAHqB;AAIvB;AAEO,IAAM,gBAAN,cAA4B,MAAM;AAAA,EACvC,YACE,SACS,OACT;AACA,UAAM,OAAO;AAFJ;AAGT,SAAK,OAAO;AAAA,EACd;AAAA,EAJW;AAKb;;;ACWO,SAAS,oBAAoB,QAAyB;AAC3D,MAAI,OAAO,WAAW,UAAU;AAC9B,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,KAAK,UAAU,MAAM;AACxC,SAAO,eAAe,SAAY,OAAO,MAAM,IAAI;AACrD;AAEO,SAAS,cAAc,MAAyB;AACrD,MAAI,KAAK,KAAK,MAAM,IAAI;AACtB,WAAO,CAAC;AAAA,EACV;AAEA,SAAO,KAAK,MAAM,IAAI;AACxB;;;AC/CO,IAAM,UAAN,MAAM,SAAQ;AAAA,EACF,QAAQ,oBAAI,IAAqB;AAAA,EAElD,OAAO,UAAU,OAA2B;AAC1C,UAAM,UAAU,IAAI,SAAQ;AAC5B,eAAW,QAAQ,OAAO;AACxB,cAAQ,QAAQ,IAAI;AAAA,IACtB;AACA,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ,MAAqB;AAC3B,SAAK,MAAM,IAAI,KAAK,MAAM,IAAI;AAC9B,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,OAAkC;AACzC,UAAM,SAAS,MAAM,QAAQ,KAAK,IAAI,QAAQ,MAAM,OAAO;AAC3D,eAAW,QAAQ,QAAQ;AACzB,WAAK,QAAQ,IAAI;AAAA,IACnB;AACA,WAAO;AAAA,EACT;AAAA,EAEA,WAAW,UAA2B;AACpC,WAAO,KAAK,MAAM,OAAO,QAAQ;AAAA,EACnC;AAAA,EAEA,SAAS,UAA2B;AAClC,WAAO,KAAK,MAAM,IAAI,QAAQ;AAAA,EAChC;AAAA,EAEA,IAAI,UAAuC;AACzC,WAAO,KAAK,MAAM,IAAI,QAAQ;AAAA,EAChC;AAAA,EAEA,SAAoB;AAClB,WAAO,CAAC,GAAG,KAAK,MAAM,OAAO,CAAC;AAAA,EAChC;AAAA,EAEA,MAAM,mBAAmB,SAAS,IAA+B;AAC/D,UAAM,OAAyB,CAAC;AAChC,eAAW,QAAQ,KAAK,MAAM,OAAO,GAAG;AACtC,WAAK,KAAK,MAAM,KAAK,WAAW,MAAM,CAAC;AAAA,IACzC;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,KAAK,UAAkB,MAA+B;AAC1D,UAAM,OAAO,KAAK,MAAM,IAAI,QAAQ;AACpC,QAAI,SAAS,QAAW;AACtB,YAAM,IAAI,kBAAkB,QAAQ;AAAA,IACtC;AAEA,QAAI;AACJ,QAAI;AACF,mBAAa,cAAc,IAAI;AAAA,IACjC,SAAS,OAAO;AACd,YAAM,IAAI,cAAc,mCAAmC,QAAQ,IAAI,KAAK;AAAA,IAC9E;AAEA,QAAI;AACF,YAAM,SAAS,MAAM,KAAK,KAAK,UAAU;AACzC,aAAO,oBAAoB,MAAM;AAAA,IACnC,SAAS,OAAO;AACd,UAAI,iBAAiB,OAAO;AAC1B,cAAM,IAAI,cAAc,MAAM,SAAS,KAAK;AAAA,MAC9C;AACA,YAAM,IAAI,cAAc,QAAQ,QAAQ,WAAW,KAAK;AAAA,IAC1D;AAAA,EACF;AACF;","names":[]}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// src/audio-generation/index.ts
|
|
2
|
+
var AudioGenerationRequestBuilder = class {
|
|
3
|
+
constructor(model) {
|
|
4
|
+
this.model = model;
|
|
5
|
+
}
|
|
6
|
+
model;
|
|
7
|
+
request = {
|
|
8
|
+
text: "",
|
|
9
|
+
voice: "",
|
|
10
|
+
speed: 1
|
|
11
|
+
};
|
|
12
|
+
text(text) {
|
|
13
|
+
this.request = { ...this.request, text };
|
|
14
|
+
return this;
|
|
15
|
+
}
|
|
16
|
+
voice(voice) {
|
|
17
|
+
this.request = { ...this.request, voice };
|
|
18
|
+
return this;
|
|
19
|
+
}
|
|
20
|
+
speed(speed) {
|
|
21
|
+
this.request = { ...this.request, speed };
|
|
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.audioGeneration(this.build());
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
function audioGenerationRequest(model) {
|
|
36
|
+
return new AudioGenerationRequestBuilder(model);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export {
|
|
40
|
+
AudioGenerationRequestBuilder,
|
|
41
|
+
audioGenerationRequest
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=chunk-I77SDTFE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/audio-generation/index.ts"],"sourcesContent":["import type { JsonValue } from \"../completion\";\n\nexport type AudioGenerationRequest = {\n text: string;\n voice: string;\n speed: number;\n additionalParams?: JsonValue | undefined;\n};\n\nexport type AudioGenerationResponse<RawResponse = unknown> = {\n audio: Uint8Array;\n mediaType?: string | undefined;\n rawResponse: RawResponse;\n};\n\nexport interface AudioGenerationModel<RawResponse = unknown> {\n readonly provider?: string | undefined;\n readonly defaultModel?: string | undefined;\n audioGeneration(request: AudioGenerationRequest): Promise<AudioGenerationResponse<RawResponse>>;\n}\n\nexport class AudioGenerationRequestBuilder<\n Model extends AudioGenerationModel = AudioGenerationModel,\n> {\n private request: AudioGenerationRequest = {\n text: \"\",\n voice: \"\",\n speed: 1,\n };\n\n constructor(private readonly model: Model) {}\n\n text(text: string): this {\n this.request = { ...this.request, text };\n return this;\n }\n\n voice(voice: string): this {\n this.request = { ...this.request, voice };\n return this;\n }\n\n speed(speed: number): this {\n this.request = { ...this.request, speed };\n return this;\n }\n\n additionalParams(additionalParams: JsonValue): this {\n this.request = { ...this.request, additionalParams };\n return this;\n }\n\n build(): AudioGenerationRequest {\n return { ...this.request };\n }\n\n send(): Promise<Awaited<ReturnType<Model[\"audioGeneration\"]>>> {\n return this.model.audioGeneration(this.build()) as Promise<\n Awaited<ReturnType<Model[\"audioGeneration\"]>>\n >;\n }\n}\n\nexport function audioGenerationRequest<Model extends AudioGenerationModel>(\n model: Model,\n): AudioGenerationRequestBuilder<Model> {\n return new AudioGenerationRequestBuilder(model);\n}\n"],"mappings":";AAqBO,IAAM,gCAAN,MAEL;AAAA,EAOA,YAA6B,OAAc;AAAd;AAAA,EAAe;AAAA,EAAf;AAAA,EANrB,UAAkC;AAAA,IACxC,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EAIA,KAAK,MAAoB;AACvB,SAAK,UAAU,EAAE,GAAG,KAAK,SAAS,KAAK;AACvC,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAqB;AACzB,SAAK,UAAU,EAAE,GAAG,KAAK,SAAS,MAAM;AACxC,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAqB;AACzB,SAAK,UAAU,EAAE,GAAG,KAAK,SAAS,MAAM;AACxC,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":[]}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AgentBuilder
|
|
3
|
+
} from "./chunk-IQBY2GCF.js";
|
|
4
|
+
import {
|
|
5
|
+
createTool
|
|
6
|
+
} from "./chunk-B4QHQN5K.js";
|
|
7
|
+
import {
|
|
8
|
+
CompletionCapabilityError,
|
|
9
|
+
CompletionRequestBuilder,
|
|
10
|
+
Message,
|
|
11
|
+
Usage
|
|
12
|
+
} from "./chunk-CP47FBJV.js";
|
|
13
|
+
|
|
14
|
+
// src/extractor/extractor.ts
|
|
15
|
+
var SUBMIT_TOOL_NAME = "submit";
|
|
16
|
+
var DEFAULT_EXTRACTOR_INSTRUCTIONS = "You are an AI assistant whose purpose is to extract structured data from the provided text.\nYou have access to a `submit` function that defines the structure of the data to extract.\nAlways call the `submit` function with the structured data. Use default or null values when information is missing.";
|
|
17
|
+
var ExtractionError = class extends Error {
|
|
18
|
+
constructor(message, cause) {
|
|
19
|
+
super(message);
|
|
20
|
+
this.cause = cause;
|
|
21
|
+
this.name = "ExtractionError";
|
|
22
|
+
}
|
|
23
|
+
cause;
|
|
24
|
+
};
|
|
25
|
+
var Extractor = class {
|
|
26
|
+
constructor(agent, schema, retryCount) {
|
|
27
|
+
this.agent = agent;
|
|
28
|
+
this.schema = schema;
|
|
29
|
+
this.retryCount = retryCount;
|
|
30
|
+
}
|
|
31
|
+
agent;
|
|
32
|
+
schema;
|
|
33
|
+
retryCount;
|
|
34
|
+
async extract(text) {
|
|
35
|
+
return (await this.extractWithUsage(text)).data;
|
|
36
|
+
}
|
|
37
|
+
async extractWithUsage(text) {
|
|
38
|
+
return this.run(text);
|
|
39
|
+
}
|
|
40
|
+
async extractWithHistory(text, history) {
|
|
41
|
+
return (await this.run(text, history)).data;
|
|
42
|
+
}
|
|
43
|
+
getInner() {
|
|
44
|
+
return this.agent;
|
|
45
|
+
}
|
|
46
|
+
async run(text, history) {
|
|
47
|
+
let usage = Usage.empty();
|
|
48
|
+
let lastError;
|
|
49
|
+
const prompt = typeof text === "string" ? Message.user(text) : text;
|
|
50
|
+
for (let attempt = 0; attempt <= this.retryCount; attempt += 1) {
|
|
51
|
+
try {
|
|
52
|
+
const toolDefs = await this.agent.toolSet.getToolDefinitions(extractRagText(prompt));
|
|
53
|
+
const response = await new CompletionRequestBuilder(this.agent.model, prompt).instructions(this.agent.instructions).messages(history ?? []).documents(this.agent.staticContext).tools(toolDefs).temperature(this.agent.temperature).maxTokens(this.agent.maxTokens).additionalParams(this.agent.additionalParams).toolChoice(this.agent.toolChoice).send();
|
|
54
|
+
usage = Usage.add(usage, response.usage);
|
|
55
|
+
const data = extractSubmittedData(response, this.schema);
|
|
56
|
+
return {
|
|
57
|
+
data,
|
|
58
|
+
usage,
|
|
59
|
+
messages: [
|
|
60
|
+
...history ?? [],
|
|
61
|
+
prompt,
|
|
62
|
+
Message.assistant(response.choice, response.messageId)
|
|
63
|
+
]
|
|
64
|
+
};
|
|
65
|
+
} catch (error) {
|
|
66
|
+
if (error instanceof CompletionCapabilityError) {
|
|
67
|
+
throw error;
|
|
68
|
+
}
|
|
69
|
+
lastError = error;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
throw new ExtractionError("No data extracted", lastError);
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
var ExtractorBuilder = class {
|
|
76
|
+
constructor(model, schema) {
|
|
77
|
+
this.schema = schema;
|
|
78
|
+
this.agentBuilder = new AgentBuilder("extractor", model).instructions(DEFAULT_EXTRACTOR_INSTRUCTIONS).tool(
|
|
79
|
+
createTool({
|
|
80
|
+
name: SUBMIT_TOOL_NAME,
|
|
81
|
+
description: "Submit the structured data extracted from the provided text.",
|
|
82
|
+
input: schema,
|
|
83
|
+
output: schema,
|
|
84
|
+
execute: (args) => args
|
|
85
|
+
})
|
|
86
|
+
).toolChoice("required");
|
|
87
|
+
}
|
|
88
|
+
schema;
|
|
89
|
+
agentBuilder;
|
|
90
|
+
retryCount = 0;
|
|
91
|
+
instructions(instructions) {
|
|
92
|
+
this.agentBuilder.instructions(instructions);
|
|
93
|
+
return this;
|
|
94
|
+
}
|
|
95
|
+
context(text, id) {
|
|
96
|
+
this.agentBuilder.context(text, id);
|
|
97
|
+
return this;
|
|
98
|
+
}
|
|
99
|
+
temperature(temperature) {
|
|
100
|
+
this.agentBuilder.temperature(temperature);
|
|
101
|
+
return this;
|
|
102
|
+
}
|
|
103
|
+
maxTokens(maxTokens) {
|
|
104
|
+
this.agentBuilder.maxTokens(maxTokens);
|
|
105
|
+
return this;
|
|
106
|
+
}
|
|
107
|
+
additionalParams(params) {
|
|
108
|
+
this.agentBuilder.additionalParams(params);
|
|
109
|
+
return this;
|
|
110
|
+
}
|
|
111
|
+
toolChoice(toolChoice) {
|
|
112
|
+
this.agentBuilder.toolChoice(toolChoice);
|
|
113
|
+
return this;
|
|
114
|
+
}
|
|
115
|
+
retries(retries) {
|
|
116
|
+
this.retryCount = Math.max(0, Math.trunc(retries));
|
|
117
|
+
return this;
|
|
118
|
+
}
|
|
119
|
+
build() {
|
|
120
|
+
return new Extractor(this.agentBuilder.build(), this.schema, this.retryCount);
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
function extractSubmittedData(response, schema) {
|
|
124
|
+
const submitted = response.choice.filter((content) => content.type === "tool_call").filter((toolCall) => toolCall.function.name === SUBMIT_TOOL_NAME).at(-1);
|
|
125
|
+
if (submitted === void 0) {
|
|
126
|
+
throw new ExtractionError("The model did not call the submit tool");
|
|
127
|
+
}
|
|
128
|
+
return schema.parse(submitted.function.arguments);
|
|
129
|
+
}
|
|
130
|
+
function extractRagText(message) {
|
|
131
|
+
if (message.role === "user") {
|
|
132
|
+
return message.content.flatMap((item) => item.type === "text" ? [item.text] : []).join("\n");
|
|
133
|
+
}
|
|
134
|
+
return void 0;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
export {
|
|
138
|
+
ExtractionError,
|
|
139
|
+
Extractor,
|
|
140
|
+
ExtractorBuilder
|
|
141
|
+
};
|
|
142
|
+
//# sourceMappingURL=chunk-IA76K5UX.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/extractor/extractor.ts"],"sourcesContent":["import { type Agent, AgentBuilder } from \"../agent/index\";\nimport {\n CompletionCapabilityError,\n type CompletionModel,\n CompletionRequestBuilder,\n type CompletionResponse,\n type JsonValue,\n type Message,\n Message as MessageFactory,\n type ToolChoice,\n Usage,\n} from \"../completion/index\";\nimport type { ZodSchema } from \"../schema/zod-schema\";\nimport { createTool } from \"../tool/index\";\n\nconst SUBMIT_TOOL_NAME = \"submit\";\n\nconst DEFAULT_EXTRACTOR_INSTRUCTIONS =\n \"You are an AI assistant whose purpose is to extract structured data from the provided text.\\n\" +\n \"You have access to a `submit` function that defines the structure of the data to extract.\\n\" +\n \"Always call the `submit` function with the structured data. Use default or null values when information is missing.\";\n\nexport type ExtractionResponse<T> = {\n data: T;\n usage: Usage;\n messages: Message[];\n};\n\nexport class ExtractionError extends Error {\n constructor(\n message: string,\n readonly cause?: unknown,\n ) {\n super(message);\n this.name = \"ExtractionError\";\n }\n}\n\nexport class Extractor<T, M extends CompletionModel = CompletionModel> {\n constructor(\n private readonly agent: Agent<M>,\n private readonly schema: ZodSchema<T>,\n private readonly retryCount: number,\n ) {}\n\n async extract(text: string | Message): Promise<T> {\n return (await this.extractWithUsage(text)).data;\n }\n\n async extractWithUsage(text: string | Message): Promise<ExtractionResponse<T>> {\n return this.run(text);\n }\n\n async extractWithHistory(text: string | Message, history: Message[]): Promise<T> {\n return (await this.run(text, history)).data;\n }\n\n getInner(): Agent<M> {\n return this.agent;\n }\n\n private async run(text: string | Message, history?: Message[]): Promise<ExtractionResponse<T>> {\n let usage = Usage.empty();\n let lastError: unknown;\n const prompt = typeof text === \"string\" ? MessageFactory.user(text) : text;\n\n for (let attempt = 0; attempt <= this.retryCount; attempt += 1) {\n try {\n const toolDefs = await this.agent.toolSet.getToolDefinitions(extractRagText(prompt));\n const response = await new CompletionRequestBuilder(this.agent.model, prompt)\n .instructions(this.agent.instructions)\n .messages(history ?? [])\n .documents(this.agent.staticContext)\n .tools(toolDefs)\n .temperature(this.agent.temperature)\n .maxTokens(this.agent.maxTokens)\n .additionalParams(this.agent.additionalParams)\n .toolChoice(this.agent.toolChoice)\n .send();\n usage = Usage.add(usage, response.usage);\n const data = extractSubmittedData(response, this.schema);\n return {\n data,\n usage,\n messages: [\n ...(history ?? []),\n prompt,\n MessageFactory.assistant(response.choice, response.messageId),\n ],\n };\n } catch (error) {\n if (error instanceof CompletionCapabilityError) {\n throw error;\n }\n lastError = error;\n }\n }\n\n throw new ExtractionError(\"No data extracted\", lastError);\n }\n}\n\nexport class ExtractorBuilder<T, M extends CompletionModel = CompletionModel> {\n private readonly agentBuilder: AgentBuilder<M>;\n private retryCount = 0;\n\n constructor(\n model: M,\n private readonly schema: ZodSchema<T>,\n ) {\n this.agentBuilder = new AgentBuilder(\"extractor\", model)\n .instructions(DEFAULT_EXTRACTOR_INSTRUCTIONS)\n .tool(\n createTool({\n name: SUBMIT_TOOL_NAME,\n description: \"Submit the structured data extracted from the provided text.\",\n input: schema,\n output: schema,\n execute: (args) => args,\n }),\n )\n .toolChoice(\"required\");\n }\n\n instructions(instructions: string): this {\n this.agentBuilder.instructions(instructions);\n return this;\n }\n\n context(text: string, id?: string): this {\n this.agentBuilder.context(text, id);\n return this;\n }\n\n temperature(temperature: number): this {\n this.agentBuilder.temperature(temperature);\n return this;\n }\n\n maxTokens(maxTokens: number): this {\n this.agentBuilder.maxTokens(maxTokens);\n return this;\n }\n\n additionalParams(params: JsonValue): this {\n this.agentBuilder.additionalParams(params);\n return this;\n }\n\n toolChoice(toolChoice: ToolChoice): this {\n this.agentBuilder.toolChoice(toolChoice);\n return this;\n }\n\n retries(retries: number): this {\n this.retryCount = Math.max(0, Math.trunc(retries));\n return this;\n }\n\n build(): Extractor<T, M> {\n return new Extractor(this.agentBuilder.build(), this.schema, this.retryCount);\n }\n}\n\nfunction extractSubmittedData<T>(response: CompletionResponse, schema: ZodSchema<T>): T {\n const submitted = response.choice\n .filter((content) => content.type === \"tool_call\")\n .filter((toolCall) => toolCall.function.name === SUBMIT_TOOL_NAME)\n .at(-1);\n\n if (submitted === undefined) {\n throw new ExtractionError(\"The model did not call the submit tool\");\n }\n\n return schema.parse(submitted.function.arguments);\n}\n\nfunction extractRagText(message: Message): string | undefined {\n if (message.role === \"user\") {\n return message.content.flatMap((item) => (item.type === \"text\" ? [item.text] : [])).join(\"\\n\");\n }\n\n return undefined;\n}\n"],"mappings":"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","names":[]}
|