@tryhamster/gerbil 1.0.0-rc.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/LICENSE +23 -0
- package/README.md +253 -0
- package/bin/cli.js +2 -0
- package/dist/auto-update-BbNHbSU1.mjs +3 -0
- package/dist/browser/index.d.mts +262 -0
- package/dist/browser/index.d.mts.map +1 -0
- package/dist/browser/index.mjs +755 -0
- package/dist/browser/index.mjs.map +1 -0
- package/dist/chrome-backend-C5Un08O4.mjs +771 -0
- package/dist/chrome-backend-C5Un08O4.mjs.map +1 -0
- package/dist/chrome-backend-CtwPENIW.mjs +3 -0
- package/dist/chunk-Ct1HF2bE.mjs +7 -0
- package/dist/cli.d.mts +1 -0
- package/dist/cli.mjs +7078 -0
- package/dist/cli.mjs.map +1 -0
- package/dist/frameworks/express.d.mts +22 -0
- package/dist/frameworks/express.d.mts.map +1 -0
- package/dist/frameworks/express.mjs +123 -0
- package/dist/frameworks/express.mjs.map +1 -0
- package/dist/frameworks/fastify.d.mts +11 -0
- package/dist/frameworks/fastify.d.mts.map +1 -0
- package/dist/frameworks/fastify.mjs +73 -0
- package/dist/frameworks/fastify.mjs.map +1 -0
- package/dist/frameworks/hono.d.mts +14 -0
- package/dist/frameworks/hono.d.mts.map +1 -0
- package/dist/frameworks/hono.mjs +82 -0
- package/dist/frameworks/hono.mjs.map +1 -0
- package/dist/frameworks/next.d.mts +31 -0
- package/dist/frameworks/next.d.mts.map +1 -0
- package/dist/frameworks/next.mjs +116 -0
- package/dist/frameworks/next.mjs.map +1 -0
- package/dist/frameworks/react.d.mts +56 -0
- package/dist/frameworks/react.d.mts.map +1 -0
- package/dist/frameworks/react.mjs +172 -0
- package/dist/frameworks/react.mjs.map +1 -0
- package/dist/frameworks/trpc.d.mts +12 -0
- package/dist/frameworks/trpc.d.mts.map +1 -0
- package/dist/frameworks/trpc.mjs +80 -0
- package/dist/frameworks/trpc.mjs.map +1 -0
- package/dist/gerbil-BfnsFWRE.mjs +644 -0
- package/dist/gerbil-BfnsFWRE.mjs.map +1 -0
- package/dist/gerbil-BjW-z7Fq.mjs +5 -0
- package/dist/gerbil-DZ1k3ChC.d.mts +138 -0
- package/dist/gerbil-DZ1k3ChC.d.mts.map +1 -0
- package/dist/index.d.mts +223 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +13 -0
- package/dist/index.mjs.map +1 -0
- package/dist/integrations/ai-sdk.d.mts +78 -0
- package/dist/integrations/ai-sdk.d.mts.map +1 -0
- package/dist/integrations/ai-sdk.mjs +199 -0
- package/dist/integrations/ai-sdk.mjs.map +1 -0
- package/dist/integrations/langchain.d.mts +41 -0
- package/dist/integrations/langchain.d.mts.map +1 -0
- package/dist/integrations/langchain.mjs +93 -0
- package/dist/integrations/langchain.mjs.map +1 -0
- package/dist/integrations/llamaindex.d.mts +45 -0
- package/dist/integrations/llamaindex.d.mts.map +1 -0
- package/dist/integrations/llamaindex.mjs +86 -0
- package/dist/integrations/llamaindex.mjs.map +1 -0
- package/dist/integrations/mcp-client.d.mts +206 -0
- package/dist/integrations/mcp-client.d.mts.map +1 -0
- package/dist/integrations/mcp-client.mjs +507 -0
- package/dist/integrations/mcp-client.mjs.map +1 -0
- package/dist/integrations/mcp.d.mts +177 -0
- package/dist/integrations/mcp.d.mts.map +1 -0
- package/dist/integrations/mcp.mjs +8 -0
- package/dist/mcp-R8kRLIKb.mjs +348 -0
- package/dist/mcp-R8kRLIKb.mjs.map +1 -0
- package/dist/models-DKULvhOr.mjs +136 -0
- package/dist/models-DKULvhOr.mjs.map +1 -0
- package/dist/models-De2-_GmQ.d.mts +22 -0
- package/dist/models-De2-_GmQ.d.mts.map +1 -0
- package/dist/one-liner-BUQR0nqq.mjs +98 -0
- package/dist/one-liner-BUQR0nqq.mjs.map +1 -0
- package/dist/skills/index.d.mts +390 -0
- package/dist/skills/index.d.mts.map +1 -0
- package/dist/skills/index.mjs +7 -0
- package/dist/skills-D3CEpgDc.mjs +630 -0
- package/dist/skills-D3CEpgDc.mjs.map +1 -0
- package/dist/tools-BsiEE6f2.mjs +567 -0
- package/dist/tools-BsiEE6f2.mjs.map +1 -0
- package/dist/types-BS1N92Jt.d.mts +183 -0
- package/dist/types-BS1N92Jt.d.mts.map +1 -0
- package/dist/utils-7vXqtq2Q.mjs +63 -0
- package/dist/utils-7vXqtq2Q.mjs.map +1 -0
- package/docs/ai-sdk.md +80 -0
- package/docs/architecture/README.md +84 -0
- package/docs/architecture/caching.md +227 -0
- package/docs/architecture/inference.md +176 -0
- package/docs/architecture/overview.md +179 -0
- package/docs/architecture/streaming.md +261 -0
- package/docs/architecture/webgpu.md +213 -0
- package/docs/browser.md +328 -0
- package/docs/cli.md +155 -0
- package/docs/frameworks.md +90 -0
- package/docs/mcp-client.md +224 -0
- package/docs/mcp.md +109 -0
- package/docs/memory.md +229 -0
- package/docs/repl.md +473 -0
- package/docs/skills.md +261 -0
- package/docs/tools.md +304 -0
- package/package.json +207 -0
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { t as BUILTIN_MODELS } from "../models-DKULvhOr.mjs";
|
|
2
|
+
import "../utils-7vXqtq2Q.mjs";
|
|
3
|
+
import { t as Gerbil } from "../gerbil-BfnsFWRE.mjs";
|
|
4
|
+
|
|
5
|
+
//#region src/integrations/ai-sdk.ts
|
|
6
|
+
let idCounter = 0;
|
|
7
|
+
function generateId() {
|
|
8
|
+
return `gerbil-${Date.now()}-${++idCounter}`;
|
|
9
|
+
}
|
|
10
|
+
var GerbilLanguageModel = class {
|
|
11
|
+
specificationVersion = "v2";
|
|
12
|
+
provider = "gerbil";
|
|
13
|
+
modelId;
|
|
14
|
+
supportedUrls = {};
|
|
15
|
+
instance = null;
|
|
16
|
+
settings;
|
|
17
|
+
providerSettings;
|
|
18
|
+
loadPromise = null;
|
|
19
|
+
constructor(modelId, settings, providerSettings) {
|
|
20
|
+
this.modelId = modelId;
|
|
21
|
+
this.settings = settings;
|
|
22
|
+
this.providerSettings = providerSettings;
|
|
23
|
+
}
|
|
24
|
+
async ensureLoaded() {
|
|
25
|
+
if (this.instance?.isLoaded()) return this.instance;
|
|
26
|
+
if (this.loadPromise) {
|
|
27
|
+
await this.loadPromise;
|
|
28
|
+
return this.instance;
|
|
29
|
+
}
|
|
30
|
+
this.instance = new Gerbil();
|
|
31
|
+
this.loadPromise = this.instance.loadModel(this.modelId, {
|
|
32
|
+
device: this.settings.device ?? this.providerSettings.device ?? "auto",
|
|
33
|
+
dtype: this.settings.dtype ?? this.providerSettings.dtype ?? "q4"
|
|
34
|
+
});
|
|
35
|
+
await this.loadPromise;
|
|
36
|
+
return this.instance;
|
|
37
|
+
}
|
|
38
|
+
convertPrompt(prompt) {
|
|
39
|
+
let system;
|
|
40
|
+
let user = "";
|
|
41
|
+
for (const msg of prompt) if (msg.role === "system") system = msg.content;
|
|
42
|
+
else if (msg.role === "user") {
|
|
43
|
+
for (const part of msg.content) if (part.type === "text") user += part.text;
|
|
44
|
+
} else if (msg.role === "assistant") {
|
|
45
|
+
for (const part of msg.content) if (part.type === "text") user += `\n\nAssistant: ${part.text}`;
|
|
46
|
+
} else if (msg.role === "tool") for (const part of msg.content) user += `\n\nTool (${part.toolName}): ${JSON.stringify(part)}`;
|
|
47
|
+
return {
|
|
48
|
+
system,
|
|
49
|
+
user
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
mapFinishReason(reason) {
|
|
53
|
+
if (reason === "stop") return "stop";
|
|
54
|
+
if (reason === "length") return "length";
|
|
55
|
+
if (reason === "error") return "error";
|
|
56
|
+
return "other";
|
|
57
|
+
}
|
|
58
|
+
async doGenerate(options) {
|
|
59
|
+
const warnings = [];
|
|
60
|
+
const g = await this.ensureLoaded();
|
|
61
|
+
const { system, user } = this.convertPrompt(options.prompt);
|
|
62
|
+
const result = await g.generate(user, {
|
|
63
|
+
maxTokens: options.maxOutputTokens,
|
|
64
|
+
temperature: options.temperature,
|
|
65
|
+
topP: options.topP,
|
|
66
|
+
topK: options.topK,
|
|
67
|
+
system,
|
|
68
|
+
thinking: this.settings.thinking,
|
|
69
|
+
stopSequences: options.stopSequences
|
|
70
|
+
});
|
|
71
|
+
const content = [];
|
|
72
|
+
if (result.thinking) content.push({
|
|
73
|
+
type: "reasoning",
|
|
74
|
+
text: result.thinking
|
|
75
|
+
});
|
|
76
|
+
content.push({
|
|
77
|
+
type: "text",
|
|
78
|
+
text: result.text
|
|
79
|
+
});
|
|
80
|
+
const usage = {
|
|
81
|
+
inputTokens: 0,
|
|
82
|
+
outputTokens: result.tokensGenerated,
|
|
83
|
+
totalTokens: result.tokensGenerated
|
|
84
|
+
};
|
|
85
|
+
return {
|
|
86
|
+
content,
|
|
87
|
+
finishReason: this.mapFinishReason(result.finishReason),
|
|
88
|
+
usage,
|
|
89
|
+
request: { body: {
|
|
90
|
+
model: this.modelId,
|
|
91
|
+
prompt: user
|
|
92
|
+
} },
|
|
93
|
+
warnings
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
async doStream(options) {
|
|
97
|
+
const warnings = [];
|
|
98
|
+
const g = await this.ensureLoaded();
|
|
99
|
+
const { system, user } = this.convertPrompt(options.prompt);
|
|
100
|
+
const streamGen = g.stream(user, {
|
|
101
|
+
maxTokens: options.maxOutputTokens,
|
|
102
|
+
temperature: options.temperature,
|
|
103
|
+
topP: options.topP,
|
|
104
|
+
topK: options.topK,
|
|
105
|
+
system,
|
|
106
|
+
thinking: this.settings.thinking,
|
|
107
|
+
stopSequences: options.stopSequences
|
|
108
|
+
});
|
|
109
|
+
let tokens = 0;
|
|
110
|
+
const textId = generateId();
|
|
111
|
+
return {
|
|
112
|
+
stream: new ReadableStream({ async start(controller) {
|
|
113
|
+
try {
|
|
114
|
+
controller.enqueue({
|
|
115
|
+
type: "stream-start",
|
|
116
|
+
warnings
|
|
117
|
+
});
|
|
118
|
+
controller.enqueue({
|
|
119
|
+
type: "text-start",
|
|
120
|
+
id: textId
|
|
121
|
+
});
|
|
122
|
+
for await (const chunk of streamGen) {
|
|
123
|
+
tokens++;
|
|
124
|
+
controller.enqueue({
|
|
125
|
+
type: "text-delta",
|
|
126
|
+
id: textId,
|
|
127
|
+
delta: chunk
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
controller.enqueue({
|
|
131
|
+
type: "text-end",
|
|
132
|
+
id: textId
|
|
133
|
+
});
|
|
134
|
+
controller.enqueue({
|
|
135
|
+
type: "finish",
|
|
136
|
+
finishReason: "stop",
|
|
137
|
+
usage: {
|
|
138
|
+
inputTokens: 0,
|
|
139
|
+
outputTokens: tokens,
|
|
140
|
+
totalTokens: tokens
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
controller.close();
|
|
144
|
+
} catch (error) {
|
|
145
|
+
controller.enqueue({
|
|
146
|
+
type: "error",
|
|
147
|
+
error
|
|
148
|
+
});
|
|
149
|
+
controller.close();
|
|
150
|
+
}
|
|
151
|
+
} }),
|
|
152
|
+
request: { body: {
|
|
153
|
+
model: this.modelId,
|
|
154
|
+
prompt: user
|
|
155
|
+
} }
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
/**
|
|
160
|
+
* Create a Gerbil provider
|
|
161
|
+
*
|
|
162
|
+
* @example
|
|
163
|
+
* ```ts
|
|
164
|
+
* const local = createGerbil({ device: "gpu", dtype: "q4" });
|
|
165
|
+
*
|
|
166
|
+
* const { text } = await generateText({
|
|
167
|
+
* model: local("qwen3-0.6b"),
|
|
168
|
+
* prompt: "Hello",
|
|
169
|
+
* });
|
|
170
|
+
* ```
|
|
171
|
+
*/
|
|
172
|
+
function createGerbil(options = {}) {
|
|
173
|
+
const createModel = (modelId, settings = {}) => new GerbilLanguageModel(modelId, settings, options);
|
|
174
|
+
const provider = ((modelId, settings) => createModel(modelId, settings ?? {}));
|
|
175
|
+
provider.languageModel = createModel;
|
|
176
|
+
provider.listModels = () => Object.values(BUILTIN_MODELS);
|
|
177
|
+
provider.getModel = (id) => BUILTIN_MODELS[id];
|
|
178
|
+
return provider;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Default Gerbil provider
|
|
182
|
+
*
|
|
183
|
+
* @example
|
|
184
|
+
* ```ts
|
|
185
|
+
* import { generateText } from "ai";
|
|
186
|
+
* import { gerbil } from "gerbil/ai";
|
|
187
|
+
*
|
|
188
|
+
* const { text } = await generateText({
|
|
189
|
+
* model: gerbil("qwen3-0.6b"),
|
|
190
|
+
* prompt: "Hello",
|
|
191
|
+
* });
|
|
192
|
+
* ```
|
|
193
|
+
*/
|
|
194
|
+
const gerbil = createGerbil();
|
|
195
|
+
var ai_sdk_default = gerbil;
|
|
196
|
+
|
|
197
|
+
//#endregion
|
|
198
|
+
export { createGerbil, ai_sdk_default as default, gerbil };
|
|
199
|
+
//# sourceMappingURL=ai-sdk.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-sdk.mjs","names":["system: string | undefined","warnings: LanguageModelV2CallWarning[]","content: LanguageModelV2Content[]","usage: LanguageModelV2Usage"],"sources":["../../src/integrations/ai-sdk.ts"],"sourcesContent":["/**\n * Gerbil AI SDK Provider (V2 Specification)\n *\n * Compatible with AI SDK v5+\n *\n * @example\n * ```ts\n * import { generateText, streamText } from \"ai\";\n * import { gerbil } from \"gerbil/ai\";\n *\n * const { text } = await generateText({\n * model: gerbil(\"qwen3-0.6b\"),\n * prompt: \"Hello world\",\n * });\n * ```\n */\n\nimport type {\n LanguageModelV2,\n LanguageModelV2CallOptions,\n LanguageModelV2CallWarning,\n LanguageModelV2Content,\n LanguageModelV2FinishReason,\n LanguageModelV2Prompt,\n LanguageModelV2StreamPart,\n LanguageModelV2Usage,\n} from \"@ai-sdk/provider\";\n\nimport { Gerbil } from \"../core/gerbil.js\";\nimport { BUILTIN_MODELS } from \"../core/models.js\";\nimport type { GerbilModelSettings, GerbilProviderSettings, ModelConfig } from \"../core/types.js\";\n\n// Simple ID generator\nlet idCounter = 0;\nfunction generateId(): string {\n return `gerbil-${Date.now()}-${++idCounter}`;\n}\n\n// ============================================\n// Language Model Implementation (V2 Spec)\n// ============================================\n\nclass GerbilLanguageModel implements LanguageModelV2 {\n readonly specificationVersion = \"v2\" as const;\n readonly provider = \"gerbil\";\n readonly modelId: string;\n\n // Gerbil runs locally, no URL support needed\n readonly supportedUrls: Record<string, RegExp[]> = {};\n\n private instance: Gerbil | null = null;\n private readonly settings: GerbilModelSettings;\n private readonly providerSettings: GerbilProviderSettings;\n private loadPromise: Promise<void> | null = null;\n\n constructor(\n modelId: string,\n settings: GerbilModelSettings,\n providerSettings: GerbilProviderSettings,\n ) {\n this.modelId = modelId;\n this.settings = settings;\n this.providerSettings = providerSettings;\n }\n\n private async ensureLoaded(): Promise<Gerbil> {\n if (this.instance?.isLoaded()) {\n return this.instance;\n }\n if (this.loadPromise) {\n await this.loadPromise;\n return this.instance!;\n }\n\n this.instance = new Gerbil();\n this.loadPromise = this.instance.loadModel(this.modelId, {\n device: this.settings.device ?? this.providerSettings.device ?? \"auto\",\n dtype: this.settings.dtype ?? this.providerSettings.dtype ?? \"q4\",\n });\n await this.loadPromise;\n return this.instance;\n }\n\n private convertPrompt(prompt: LanguageModelV2Prompt): {\n system?: string;\n user: string;\n } {\n let system: string | undefined;\n let user = \"\";\n\n for (const msg of prompt) {\n if (msg.role === \"system\") {\n system = msg.content;\n } else if (msg.role === \"user\") {\n for (const part of msg.content) {\n if (part.type === \"text\") {\n user += part.text;\n }\n }\n } else if (msg.role === \"assistant\") {\n for (const part of msg.content) {\n if (part.type === \"text\") {\n user += `\\n\\nAssistant: ${part.text}`;\n }\n }\n } else if (msg.role === \"tool\") {\n for (const part of msg.content) {\n user += `\\n\\nTool (${part.toolName}): ${JSON.stringify(part)}`;\n }\n }\n }\n\n return { system, user };\n }\n\n private mapFinishReason(reason: string): LanguageModelV2FinishReason {\n if (reason === \"stop\") {\n return \"stop\";\n }\n if (reason === \"length\") {\n return \"length\";\n }\n if (reason === \"error\") {\n return \"error\";\n }\n return \"other\";\n }\n\n async doGenerate(options: LanguageModelV2CallOptions) {\n const warnings: LanguageModelV2CallWarning[] = [];\n const g = await this.ensureLoaded();\n const { system, user } = this.convertPrompt(options.prompt);\n\n const result = await g.generate(user, {\n maxTokens: options.maxOutputTokens,\n temperature: options.temperature,\n topP: options.topP,\n topK: options.topK,\n system,\n thinking: this.settings.thinking,\n stopSequences: options.stopSequences,\n });\n\n // Build V2 content array\n const content: LanguageModelV2Content[] = [];\n\n // Add reasoning if thinking mode was enabled\n if (result.thinking) {\n content.push({\n type: \"reasoning\",\n text: result.thinking,\n });\n }\n\n // Add main text response\n content.push({\n type: \"text\",\n text: result.text,\n });\n\n const usage: LanguageModelV2Usage = {\n inputTokens: 0,\n outputTokens: result.tokensGenerated,\n totalTokens: result.tokensGenerated,\n };\n\n return {\n content,\n finishReason: this.mapFinishReason(result.finishReason),\n usage,\n request: { body: { model: this.modelId, prompt: user } },\n warnings,\n };\n }\n\n async doStream(options: LanguageModelV2CallOptions) {\n const warnings: LanguageModelV2CallWarning[] = [];\n const g = await this.ensureLoaded();\n const { system, user } = this.convertPrompt(options.prompt);\n\n const streamGen = g.stream(user, {\n maxTokens: options.maxOutputTokens,\n temperature: options.temperature,\n topP: options.topP,\n topK: options.topK,\n system,\n thinking: this.settings.thinking,\n stopSequences: options.stopSequences,\n });\n\n let tokens = 0;\n const textId = generateId();\n\n const stream = new ReadableStream<LanguageModelV2StreamPart>({\n async start(controller) {\n try {\n // V2: Send stream-start event first\n controller.enqueue({\n type: \"stream-start\",\n warnings,\n });\n\n // V2: Send text-start before text deltas\n controller.enqueue({\n type: \"text-start\",\n id: textId,\n });\n\n for await (const chunk of streamGen) {\n tokens++;\n // V2: Use 'text-delta' with id and delta\n controller.enqueue({\n type: \"text-delta\",\n id: textId,\n delta: chunk,\n });\n }\n\n // V2: Send text-end after all deltas\n controller.enqueue({\n type: \"text-end\",\n id: textId,\n });\n\n // V2: Send finish event\n controller.enqueue({\n type: \"finish\",\n finishReason: \"stop\",\n usage: {\n inputTokens: 0,\n outputTokens: tokens,\n totalTokens: tokens,\n },\n });\n controller.close();\n } catch (error) {\n controller.enqueue({ type: \"error\", error });\n controller.close();\n }\n },\n });\n\n return {\n stream,\n request: { body: { model: this.modelId, prompt: user } },\n };\n }\n}\n\n// ============================================\n// Provider Factory\n// ============================================\n\nexport type GerbilProvider = {\n (modelId: string, settings?: GerbilModelSettings): GerbilLanguageModel;\n languageModel(modelId: string, settings?: GerbilModelSettings): GerbilLanguageModel;\n listModels(): ModelConfig[];\n getModel(modelId: string): ModelConfig | undefined;\n};\n\n/**\n * Create a Gerbil provider\n *\n * @example\n * ```ts\n * const local = createGerbil({ device: \"gpu\", dtype: \"q4\" });\n *\n * const { text } = await generateText({\n * model: local(\"qwen3-0.6b\"),\n * prompt: \"Hello\",\n * });\n * ```\n */\nexport function createGerbil(options: GerbilProviderSettings = {}): GerbilProvider {\n const createModel = (modelId: string, settings: GerbilModelSettings = {}) =>\n new GerbilLanguageModel(modelId, settings, options);\n\n const provider = ((modelId: string, settings?: GerbilModelSettings) =>\n createModel(modelId, settings ?? {})) as GerbilProvider;\n\n provider.languageModel = createModel;\n provider.listModels = () => Object.values(BUILTIN_MODELS);\n provider.getModel = (id: string) => BUILTIN_MODELS[id];\n\n return provider;\n}\n\n/**\n * Default Gerbil provider\n *\n * @example\n * ```ts\n * import { generateText } from \"ai\";\n * import { gerbil } from \"gerbil/ai\";\n *\n * const { text } = await generateText({\n * model: gerbil(\"qwen3-0.6b\"),\n * prompt: \"Hello\",\n * });\n * ```\n */\nexport const gerbil = createGerbil();\n\nexport default gerbil;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { a as GenerateOptions, s as GerbilConfig } from "../types-BS1N92Jt.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/integrations/langchain.d.ts
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Gerbil LLM for LangChain
|
|
7
|
+
*/
|
|
8
|
+
declare class GerbilLLM {
|
|
9
|
+
private readonly model;
|
|
10
|
+
private readonly options;
|
|
11
|
+
constructor(config?: GerbilConfig & GenerateOptions);
|
|
12
|
+
get _llmType(): string;
|
|
13
|
+
invoke(prompt: string, options?: GenerateOptions): Promise<string>;
|
|
14
|
+
stream(prompt: string, options?: GenerateOptions): AsyncGenerator<string>;
|
|
15
|
+
batch(prompts: string[], options?: GenerateOptions): Promise<string[]>;
|
|
16
|
+
call(prompt: string): Promise<string>;
|
|
17
|
+
predict(text: string): Promise<string>;
|
|
18
|
+
generate(prompts: string[]): Promise<{
|
|
19
|
+
generations: {
|
|
20
|
+
text: string;
|
|
21
|
+
}[][];
|
|
22
|
+
}>;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Gerbil Embeddings for LangChain
|
|
26
|
+
*/
|
|
27
|
+
declare class GerbilEmbeddings {
|
|
28
|
+
private readonly model;
|
|
29
|
+
constructor(config?: {
|
|
30
|
+
model?: string;
|
|
31
|
+
});
|
|
32
|
+
embedQuery(text: string): Promise<number[]>;
|
|
33
|
+
embedDocuments(documents: string[]): Promise<number[][]>;
|
|
34
|
+
}
|
|
35
|
+
declare const _default: {
|
|
36
|
+
GerbilLLM: typeof GerbilLLM;
|
|
37
|
+
GerbilEmbeddings: typeof GerbilEmbeddings;
|
|
38
|
+
};
|
|
39
|
+
//#endregion
|
|
40
|
+
export { GerbilEmbeddings, GerbilLLM, _default as default };
|
|
41
|
+
//# sourceMappingURL=langchain.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"langchain.d.mts","names":[],"sources":["../../src/integrations/langchain.ts"],"sourcesContent":[],"mappings":";;;;;AA2FA;AAkBC;cAtEY,SAAA;;;uBAIS,eAAe;;mCASI,kBAAkB;mCAMjB,kBAAkB;qCAKjB,kBAAkB;wBAS/B;yBAIC;+BAIM;;;;;;;;;cAWxB,gBAAA;;;;;4BAOqB;uCAMW;;cAK5C;oBAAA;2BAAA"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import "../models-DKULvhOr.mjs";
|
|
2
|
+
import "../utils-7vXqtq2Q.mjs";
|
|
3
|
+
import { t as Gerbil } from "../gerbil-BfnsFWRE.mjs";
|
|
4
|
+
|
|
5
|
+
//#region src/integrations/langchain.ts
|
|
6
|
+
/**
|
|
7
|
+
* Gerbil LangChain Integration
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* import { GerbilLLM, GerbilEmbeddings } from "gerbil/langchain";
|
|
12
|
+
*
|
|
13
|
+
* const llm = new GerbilLLM({ model: "qwen3-0.6b" });
|
|
14
|
+
* const result = await llm.invoke("Hello!");
|
|
15
|
+
*
|
|
16
|
+
* const embeddings = new GerbilEmbeddings();
|
|
17
|
+
* const vectors = await embeddings.embedDocuments(["Hello", "World"]);
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
let instance = null;
|
|
21
|
+
let loadPromise = null;
|
|
22
|
+
async function getInstance(model) {
|
|
23
|
+
if (!instance) instance = new Gerbil();
|
|
24
|
+
if (!(instance.isLoaded() || loadPromise)) loadPromise = instance.loadModel(model);
|
|
25
|
+
if (loadPromise) {
|
|
26
|
+
await loadPromise;
|
|
27
|
+
loadPromise = null;
|
|
28
|
+
}
|
|
29
|
+
return instance;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Gerbil LLM for LangChain
|
|
33
|
+
*/
|
|
34
|
+
var GerbilLLM = class {
|
|
35
|
+
model;
|
|
36
|
+
options;
|
|
37
|
+
constructor(config = {}) {
|
|
38
|
+
this.model = config.model || "qwen3-0.6b";
|
|
39
|
+
this.options = config;
|
|
40
|
+
}
|
|
41
|
+
get _llmType() {
|
|
42
|
+
return "gerbil";
|
|
43
|
+
}
|
|
44
|
+
async invoke(prompt, options) {
|
|
45
|
+
return (await (await getInstance(this.model)).generate(prompt, {
|
|
46
|
+
...this.options,
|
|
47
|
+
...options
|
|
48
|
+
})).text;
|
|
49
|
+
}
|
|
50
|
+
async *stream(prompt, options) {
|
|
51
|
+
yield* (await getInstance(this.model)).stream(prompt, {
|
|
52
|
+
...this.options,
|
|
53
|
+
...options
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
async batch(prompts, options) {
|
|
57
|
+
const results = [];
|
|
58
|
+
for (const prompt of prompts) results.push(await this.invoke(prompt, options));
|
|
59
|
+
return results;
|
|
60
|
+
}
|
|
61
|
+
async call(prompt) {
|
|
62
|
+
return this.invoke(prompt);
|
|
63
|
+
}
|
|
64
|
+
async predict(text) {
|
|
65
|
+
return this.invoke(text);
|
|
66
|
+
}
|
|
67
|
+
async generate(prompts) {
|
|
68
|
+
return { generations: (await this.batch(prompts)).map((text) => [{ text }]) };
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* Gerbil Embeddings for LangChain
|
|
73
|
+
*/
|
|
74
|
+
var GerbilEmbeddings = class {
|
|
75
|
+
model;
|
|
76
|
+
constructor(config = {}) {
|
|
77
|
+
this.model = config.model || "qwen3-0.6b";
|
|
78
|
+
}
|
|
79
|
+
async embedQuery(text) {
|
|
80
|
+
return (await (await getInstance(this.model)).embed(text)).vector;
|
|
81
|
+
}
|
|
82
|
+
async embedDocuments(documents) {
|
|
83
|
+
return (await (await getInstance(this.model)).embedBatch(documents)).map((r) => r.vector);
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
var langchain_default = {
|
|
87
|
+
GerbilLLM,
|
|
88
|
+
GerbilEmbeddings
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
//#endregion
|
|
92
|
+
export { GerbilEmbeddings, GerbilLLM, langchain_default as default };
|
|
93
|
+
//# sourceMappingURL=langchain.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"langchain.mjs","names":["instance: Gerbil | null","loadPromise: Promise<void> | null","results: string[]"],"sources":["../../src/integrations/langchain.ts"],"sourcesContent":["/**\n * Gerbil LangChain Integration\n *\n * @example\n * ```ts\n * import { GerbilLLM, GerbilEmbeddings } from \"gerbil/langchain\";\n *\n * const llm = new GerbilLLM({ model: \"qwen3-0.6b\" });\n * const result = await llm.invoke(\"Hello!\");\n *\n * const embeddings = new GerbilEmbeddings();\n * const vectors = await embeddings.embedDocuments([\"Hello\", \"World\"]);\n * ```\n */\n\nimport { Gerbil } from \"../core/gerbil.js\";\nimport type { GenerateOptions, GerbilConfig } from \"../core/types.js\";\n\n// Singleton Gerbil instance\nlet instance: Gerbil | null = null;\nlet loadPromise: Promise<void> | null = null;\n\nasync function getInstance(model: string): Promise<Gerbil> {\n if (!instance) {\n instance = new Gerbil();\n }\n if (!(instance.isLoaded() || loadPromise)) {\n loadPromise = instance.loadModel(model);\n }\n if (loadPromise) {\n await loadPromise;\n loadPromise = null;\n }\n return instance;\n}\n\n/**\n * Gerbil LLM for LangChain\n */\nexport class GerbilLLM {\n private readonly model: string;\n private readonly options: GenerateOptions;\n\n constructor(config: GerbilConfig & GenerateOptions = {}) {\n this.model = config.model || \"qwen3-0.6b\";\n this.options = config;\n }\n\n get _llmType(): string {\n return \"gerbil\";\n }\n\n async invoke(prompt: string, options?: GenerateOptions): Promise<string> {\n const g = await getInstance(this.model);\n const result = await g.generate(prompt, { ...this.options, ...options });\n return result.text;\n }\n\n async *stream(prompt: string, options?: GenerateOptions): AsyncGenerator<string> {\n const g = await getInstance(this.model);\n yield* g.stream(prompt, { ...this.options, ...options });\n }\n\n async batch(prompts: string[], options?: GenerateOptions): Promise<string[]> {\n const results: string[] = [];\n for (const prompt of prompts) {\n results.push(await this.invoke(prompt, options));\n }\n return results;\n }\n\n // LangChain compatibility methods\n async call(prompt: string): Promise<string> {\n return this.invoke(prompt);\n }\n\n async predict(text: string): Promise<string> {\n return this.invoke(text);\n }\n\n async generate(prompts: string[]): Promise<{ generations: { text: string }[][] }> {\n const results = await this.batch(prompts);\n return {\n generations: results.map((text) => [{ text }]),\n };\n }\n}\n\n/**\n * Gerbil Embeddings for LangChain\n */\nexport class GerbilEmbeddings {\n private readonly model: string;\n\n constructor(config: { model?: string } = {}) {\n this.model = config.model || \"qwen3-0.6b\";\n }\n\n async embedQuery(text: string): Promise<number[]> {\n const g = await getInstance(this.model);\n const result = await g.embed(text);\n return result.vector;\n }\n\n async embedDocuments(documents: string[]): Promise<number[][]> {\n const g = await getInstance(this.model);\n const results = await g.embedBatch(documents);\n return results.map((r) => r.vector);\n }\n}\n\nexport default { GerbilLLM, GerbilEmbeddings };\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAmBA,IAAIA,WAA0B;AAC9B,IAAIC,cAAoC;AAExC,eAAe,YAAY,OAAgC;AACzD,KAAI,CAAC,SACH,YAAW,IAAI,QAAQ;AAEzB,KAAI,EAAE,SAAS,UAAU,IAAI,aAC3B,eAAc,SAAS,UAAU,MAAM;AAEzC,KAAI,aAAa;AACf,QAAM;AACN,gBAAc;;AAEhB,QAAO;;;;;AAMT,IAAa,YAAb,MAAuB;CACrB,AAAiB;CACjB,AAAiB;CAEjB,YAAY,SAAyC,EAAE,EAAE;AACvD,OAAK,QAAQ,OAAO,SAAS;AAC7B,OAAK,UAAU;;CAGjB,IAAI,WAAmB;AACrB,SAAO;;CAGT,MAAM,OAAO,QAAgB,SAA4C;AAGvE,UADe,OADL,MAAM,YAAY,KAAK,MAAM,EAChB,SAAS,QAAQ;GAAE,GAAG,KAAK;GAAS,GAAG;GAAS,CAAC,EAC1D;;CAGhB,OAAO,OAAO,QAAgB,SAAmD;AAE/E,UADU,MAAM,YAAY,KAAK,MAAM,EAC9B,OAAO,QAAQ;GAAE,GAAG,KAAK;GAAS,GAAG;GAAS,CAAC;;CAG1D,MAAM,MAAM,SAAmB,SAA8C;EAC3E,MAAMC,UAAoB,EAAE;AAC5B,OAAK,MAAM,UAAU,QACnB,SAAQ,KAAK,MAAM,KAAK,OAAO,QAAQ,QAAQ,CAAC;AAElD,SAAO;;CAIT,MAAM,KAAK,QAAiC;AAC1C,SAAO,KAAK,OAAO,OAAO;;CAG5B,MAAM,QAAQ,MAA+B;AAC3C,SAAO,KAAK,OAAO,KAAK;;CAG1B,MAAM,SAAS,SAAmE;AAEhF,SAAO,EACL,cAFc,MAAM,KAAK,MAAM,QAAQ,EAElB,KAAK,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC,EAC/C;;;;;;AAOL,IAAa,mBAAb,MAA8B;CAC5B,AAAiB;CAEjB,YAAY,SAA6B,EAAE,EAAE;AAC3C,OAAK,QAAQ,OAAO,SAAS;;CAG/B,MAAM,WAAW,MAAiC;AAGhD,UADe,OADL,MAAM,YAAY,KAAK,MAAM,EAChB,MAAM,KAAK,EACpB;;CAGhB,MAAM,eAAe,WAA0C;AAG7D,UADgB,OADN,MAAM,YAAY,KAAK,MAAM,EACf,WAAW,UAAU,EAC9B,KAAK,MAAM,EAAE,OAAO;;;AAIvC,wBAAe;CAAE;CAAW;CAAkB"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { a as GenerateOptions, s as GerbilConfig } from "../types-BS1N92Jt.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/integrations/llamaindex.d.ts
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Gerbil LLM for LlamaIndex
|
|
7
|
+
*/
|
|
8
|
+
declare class GerbilLLM {
|
|
9
|
+
private readonly model;
|
|
10
|
+
private readonly options;
|
|
11
|
+
constructor(config?: GerbilConfig & GenerateOptions);
|
|
12
|
+
complete(prompt: string, options?: GenerateOptions): Promise<{
|
|
13
|
+
text: string;
|
|
14
|
+
}>;
|
|
15
|
+
chat(messages: {
|
|
16
|
+
role: string;
|
|
17
|
+
content: string;
|
|
18
|
+
}[]): Promise<{
|
|
19
|
+
message: {
|
|
20
|
+
content: string;
|
|
21
|
+
};
|
|
22
|
+
}>;
|
|
23
|
+
stream(prompt: string, options?: GenerateOptions): AsyncGenerator<{
|
|
24
|
+
delta: string;
|
|
25
|
+
}>;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Gerbil Embedding Model for LlamaIndex
|
|
29
|
+
*/
|
|
30
|
+
declare class GerbilEmbedding {
|
|
31
|
+
private readonly model;
|
|
32
|
+
constructor(config?: {
|
|
33
|
+
model?: string;
|
|
34
|
+
});
|
|
35
|
+
getTextEmbedding(text: string): Promise<number[]>;
|
|
36
|
+
getTextEmbeddings(texts: string[]): Promise<number[][]>;
|
|
37
|
+
getQueryEmbedding(query: string): Promise<number[]>;
|
|
38
|
+
}
|
|
39
|
+
declare const _default: {
|
|
40
|
+
GerbilLLM: typeof GerbilLLM;
|
|
41
|
+
GerbilEmbedding: typeof GerbilEmbedding;
|
|
42
|
+
};
|
|
43
|
+
//#endregion
|
|
44
|
+
export { GerbilEmbedding, GerbilLLM, _default as default };
|
|
45
|
+
//# sourceMappingURL=llamaindex.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llamaindex.d.mts","names":[],"sources":["../../src/integrations/llamaindex.ts"],"sourcesContent":[],"mappings":";;;;AAuGC;;;cA9DY,SAAA;;;uBAIS,eAAe;qCAKM,kBAAkB;;;;;;QAQxD;;;;;mCAYqC,kBAAkB;;;;;;;cAW/C,eAAA;;;;;kCAO2B;sCAMI;oCAMF;;cAGzC;oBAAA;0BAAA"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import "../models-DKULvhOr.mjs";
|
|
2
|
+
import "../utils-7vXqtq2Q.mjs";
|
|
3
|
+
import { t as Gerbil } from "../gerbil-BfnsFWRE.mjs";
|
|
4
|
+
|
|
5
|
+
//#region src/integrations/llamaindex.ts
|
|
6
|
+
/**
|
|
7
|
+
* Gerbil LlamaIndex Integration
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* import { GerbilLLM, GerbilEmbedding } from "gerbil/llamaindex";
|
|
12
|
+
*
|
|
13
|
+
* const llm = new GerbilLLM({ model: "qwen3-0.6b" });
|
|
14
|
+
* const embedModel = new GerbilEmbedding();
|
|
15
|
+
*
|
|
16
|
+
* const index = await VectorStoreIndex.fromDocuments(documents, {
|
|
17
|
+
* llm,
|
|
18
|
+
* embedModel,
|
|
19
|
+
* });
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
let instance = null;
|
|
23
|
+
let loadPromise = null;
|
|
24
|
+
async function getInstance(model) {
|
|
25
|
+
if (!instance) instance = new Gerbil();
|
|
26
|
+
if (!(instance.isLoaded() || loadPromise)) loadPromise = instance.loadModel(model);
|
|
27
|
+
if (loadPromise) {
|
|
28
|
+
await loadPromise;
|
|
29
|
+
loadPromise = null;
|
|
30
|
+
}
|
|
31
|
+
return instance;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Gerbil LLM for LlamaIndex
|
|
35
|
+
*/
|
|
36
|
+
var GerbilLLM = class {
|
|
37
|
+
model;
|
|
38
|
+
options;
|
|
39
|
+
constructor(config = {}) {
|
|
40
|
+
this.model = config.model || "qwen3-0.6b";
|
|
41
|
+
this.options = config;
|
|
42
|
+
}
|
|
43
|
+
async complete(prompt, options) {
|
|
44
|
+
return { text: (await (await getInstance(this.model)).generate(prompt, {
|
|
45
|
+
...this.options,
|
|
46
|
+
...options
|
|
47
|
+
})).text };
|
|
48
|
+
}
|
|
49
|
+
async chat(messages) {
|
|
50
|
+
const prompt = messages.map((m) => `${m.role}: ${m.content}`).join("\n");
|
|
51
|
+
return { message: { content: (await (await getInstance(this.model)).generate(prompt, this.options)).text } };
|
|
52
|
+
}
|
|
53
|
+
async *stream(prompt, options) {
|
|
54
|
+
const g = await getInstance(this.model);
|
|
55
|
+
for await (const chunk of g.stream(prompt, {
|
|
56
|
+
...this.options,
|
|
57
|
+
...options
|
|
58
|
+
})) yield { delta: chunk };
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Gerbil Embedding Model for LlamaIndex
|
|
63
|
+
*/
|
|
64
|
+
var GerbilEmbedding = class {
|
|
65
|
+
model;
|
|
66
|
+
constructor(config = {}) {
|
|
67
|
+
this.model = config.model || "qwen3-0.6b";
|
|
68
|
+
}
|
|
69
|
+
async getTextEmbedding(text) {
|
|
70
|
+
return (await (await getInstance(this.model)).embed(text)).vector;
|
|
71
|
+
}
|
|
72
|
+
async getTextEmbeddings(texts) {
|
|
73
|
+
return (await (await getInstance(this.model)).embedBatch(texts)).map((r) => r.vector);
|
|
74
|
+
}
|
|
75
|
+
async getQueryEmbedding(query) {
|
|
76
|
+
return this.getTextEmbedding(query);
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
var llamaindex_default = {
|
|
80
|
+
GerbilLLM,
|
|
81
|
+
GerbilEmbedding
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
//#endregion
|
|
85
|
+
export { GerbilEmbedding, GerbilLLM, llamaindex_default as default };
|
|
86
|
+
//# sourceMappingURL=llamaindex.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llamaindex.mjs","names":["instance: Gerbil | null","loadPromise: Promise<void> | null"],"sources":["../../src/integrations/llamaindex.ts"],"sourcesContent":["/**\n * Gerbil LlamaIndex Integration\n *\n * @example\n * ```ts\n * import { GerbilLLM, GerbilEmbedding } from \"gerbil/llamaindex\";\n *\n * const llm = new GerbilLLM({ model: \"qwen3-0.6b\" });\n * const embedModel = new GerbilEmbedding();\n *\n * const index = await VectorStoreIndex.fromDocuments(documents, {\n * llm,\n * embedModel,\n * });\n * ```\n */\n\nimport { Gerbil } from \"../core/gerbil.js\";\nimport type { GenerateOptions, GerbilConfig } from \"../core/types.js\";\n\n// Singleton Gerbil instance\nlet instance: Gerbil | null = null;\nlet loadPromise: Promise<void> | null = null;\n\nasync function getInstance(model: string): Promise<Gerbil> {\n if (!instance) {\n instance = new Gerbil();\n }\n if (!(instance.isLoaded() || loadPromise)) {\n loadPromise = instance.loadModel(model);\n }\n if (loadPromise) {\n await loadPromise;\n loadPromise = null;\n }\n return instance;\n}\n\n/**\n * Gerbil LLM for LlamaIndex\n */\nexport class GerbilLLM {\n private readonly model: string;\n private readonly options: GenerateOptions;\n\n constructor(config: GerbilConfig & GenerateOptions = {}) {\n this.model = config.model || \"qwen3-0.6b\";\n this.options = config;\n }\n\n async complete(prompt: string, options?: GenerateOptions): Promise<{ text: string }> {\n const g = await getInstance(this.model);\n const result = await g.generate(prompt, { ...this.options, ...options });\n return { text: result.text };\n }\n\n async chat(\n messages: { role: string; content: string }[],\n ): Promise<{ message: { content: string } }> {\n // Convert chat messages to a single prompt\n const prompt = messages.map((m) => `${m.role}: ${m.content}`).join(\"\\n\");\n\n const g = await getInstance(this.model);\n const result = await g.generate(prompt, this.options);\n\n return {\n message: { content: result.text },\n };\n }\n\n async *stream(prompt: string, options?: GenerateOptions): AsyncGenerator<{ delta: string }> {\n const g = await getInstance(this.model);\n for await (const chunk of g.stream(prompt, { ...this.options, ...options })) {\n yield { delta: chunk };\n }\n }\n}\n\n/**\n * Gerbil Embedding Model for LlamaIndex\n */\nexport class GerbilEmbedding {\n private readonly model: string;\n\n constructor(config: { model?: string } = {}) {\n this.model = config.model || \"qwen3-0.6b\";\n }\n\n async getTextEmbedding(text: string): Promise<number[]> {\n const g = await getInstance(this.model);\n const result = await g.embed(text);\n return result.vector;\n }\n\n async getTextEmbeddings(texts: string[]): Promise<number[][]> {\n const g = await getInstance(this.model);\n const results = await g.embedBatch(texts);\n return results.map((r) => r.vector);\n }\n\n async getQueryEmbedding(query: string): Promise<number[]> {\n return this.getTextEmbedding(query);\n }\n}\n\nexport default { GerbilLLM, GerbilEmbedding };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAqBA,IAAIA,WAA0B;AAC9B,IAAIC,cAAoC;AAExC,eAAe,YAAY,OAAgC;AACzD,KAAI,CAAC,SACH,YAAW,IAAI,QAAQ;AAEzB,KAAI,EAAE,SAAS,UAAU,IAAI,aAC3B,eAAc,SAAS,UAAU,MAAM;AAEzC,KAAI,aAAa;AACf,QAAM;AACN,gBAAc;;AAEhB,QAAO;;;;;AAMT,IAAa,YAAb,MAAuB;CACrB,AAAiB;CACjB,AAAiB;CAEjB,YAAY,SAAyC,EAAE,EAAE;AACvD,OAAK,QAAQ,OAAO,SAAS;AAC7B,OAAK,UAAU;;CAGjB,MAAM,SAAS,QAAgB,SAAsD;AAGnF,SAAO,EAAE,OADM,OADL,MAAM,YAAY,KAAK,MAAM,EAChB,SAAS,QAAQ;GAAE,GAAG,KAAK;GAAS,GAAG;GAAS,CAAC,EAClD,MAAM;;CAG9B,MAAM,KACJ,UAC2C;EAE3C,MAAM,SAAS,SAAS,KAAK,MAAM,GAAG,EAAE,KAAK,IAAI,EAAE,UAAU,CAAC,KAAK,KAAK;AAKxE,SAAO,EACL,SAAS,EAAE,UAHE,OADL,MAAM,YAAY,KAAK,MAAM,EAChB,SAAS,QAAQ,KAAK,QAAQ,EAGxB,MAAM,EAClC;;CAGH,OAAO,OAAO,QAAgB,SAA8D;EAC1F,MAAM,IAAI,MAAM,YAAY,KAAK,MAAM;AACvC,aAAW,MAAM,SAAS,EAAE,OAAO,QAAQ;GAAE,GAAG,KAAK;GAAS,GAAG;GAAS,CAAC,CACzE,OAAM,EAAE,OAAO,OAAO;;;;;;AAQ5B,IAAa,kBAAb,MAA6B;CAC3B,AAAiB;CAEjB,YAAY,SAA6B,EAAE,EAAE;AAC3C,OAAK,QAAQ,OAAO,SAAS;;CAG/B,MAAM,iBAAiB,MAAiC;AAGtD,UADe,OADL,MAAM,YAAY,KAAK,MAAM,EAChB,MAAM,KAAK,EACpB;;CAGhB,MAAM,kBAAkB,OAAsC;AAG5D,UADgB,OADN,MAAM,YAAY,KAAK,MAAM,EACf,WAAW,MAAM,EAC1B,KAAK,MAAM,EAAE,OAAO;;CAGrC,MAAM,kBAAkB,OAAkC;AACxD,SAAO,KAAK,iBAAiB,MAAM;;;AAIvC,yBAAe;CAAE;CAAW;CAAiB"}
|