@nx-ddd/any-func 19.2.1 → 19.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/adapters/local-storage/index.d.ts +5 -0
- package/adapters/local-storage-browser/index.d.ts +8 -0
- package/adapters/local-storage-node/index.d.ts +5 -0
- package/adapters/validator/index.d.ts +10 -0
- package/adapters/validator-commonjs/index.d.ts +13 -0
- package/adapters/validator-esmodule/index.d.ts +15 -0
- package/browser/index.d.ts +6 -0
- package/fesm2022/nx-ddd-any-func-adapters-local-storage-browser.mjs +12 -0
- package/fesm2022/nx-ddd-any-func-adapters-local-storage-browser.mjs.map +1 -0
- package/fesm2022/nx-ddd-any-func-adapters-local-storage-node.mjs +16 -0
- package/fesm2022/nx-ddd-any-func-adapters-local-storage-node.mjs.map +1 -0
- package/fesm2022/nx-ddd-any-func-adapters-local-storage.mjs +10 -0
- package/fesm2022/nx-ddd-any-func-adapters-local-storage.mjs.map +1 -0
- package/fesm2022/nx-ddd-any-func-adapters-validator-commonjs.mjs +33 -0
- package/fesm2022/nx-ddd-any-func-adapters-validator-commonjs.mjs.map +1 -0
- package/fesm2022/nx-ddd-any-func-adapters-validator-esmodule.mjs +28 -0
- package/fesm2022/nx-ddd-any-func-adapters-validator-esmodule.mjs.map +1 -0
- package/fesm2022/nx-ddd-any-func-adapters-validator.mjs +17 -0
- package/fesm2022/nx-ddd-any-func-adapters-validator.mjs.map +1 -0
- package/fesm2022/nx-ddd-any-func-browser.mjs +19 -0
- package/fesm2022/nx-ddd-any-func-browser.mjs.map +1 -0
- package/fesm2022/nx-ddd-any-func-server.mjs +19 -0
- package/fesm2022/nx-ddd-any-func-server.mjs.map +1 -0
- package/fesm2022/nx-ddd-any-func.mjs +432 -0
- package/fesm2022/nx-ddd-any-func.mjs.map +1 -0
- package/index.d.ts +151 -1
- package/package.json +50 -13
- package/server/index.d.ts +6 -0
- package/README.md +0 -7
- package/index.js +0 -5
- package/index.js.map +0 -1
- package/lib/agent/agent.d.ts +0 -53
- package/lib/agent/agent.js +0 -103
- package/lib/agent/agent.js.map +0 -1
- package/lib/agent/index.d.ts +0 -1
- package/lib/agent/index.js +0 -5
- package/lib/agent/index.js.map +0 -1
- package/lib/any-func/any-func.service.d.ts +0 -4
- package/lib/any-func/any-func.service.impl.d.ts +0 -67
- package/lib/any-func/any-func.service.impl.js +0 -261
- package/lib/any-func/any-func.service.impl.js.map +0 -1
- package/lib/any-func/any-func.service.js +0 -11
- package/lib/any-func/any-func.service.js.map +0 -1
- package/lib/any-func/index.d.ts +0 -1
- package/lib/any-func/index.js +0 -5
- package/lib/any-func/index.js.map +0 -1
- package/lib/browser.d.ts +0 -3
- package/lib/browser.js +0 -15
- package/lib/browser.js.map +0 -1
- package/lib/impl/adapters/cache/cache.adapter.d.ts +0 -9
- package/lib/impl/adapters/cache/cache.adapter.js +0 -50
- package/lib/impl/adapters/cache/cache.adapter.js.map +0 -1
- package/lib/impl/adapters/cache/index.d.ts +0 -1
- package/lib/impl/adapters/cache/index.js +0 -5
- package/lib/impl/adapters/cache/index.js.map +0 -1
- package/lib/impl/adapters/local-storage/browser.d.ts +0 -4
- package/lib/impl/adapters/local-storage/browser.js +0 -8
- package/lib/impl/adapters/local-storage/browser.js.map +0 -1
- package/lib/impl/adapters/local-storage/index.d.ts +0 -1
- package/lib/impl/adapters/local-storage/index.js +0 -5
- package/lib/impl/adapters/local-storage/index.js.map +0 -1
- package/lib/impl/adapters/local-storage/node.d.ts +0 -2
- package/lib/impl/adapters/local-storage/node.js +0 -12
- package/lib/impl/adapters/local-storage/node.js.map +0 -1
- package/lib/impl/adapters/local-storage/token.d.ts +0 -1
- package/lib/impl/adapters/local-storage/token.js +0 -6
- package/lib/impl/adapters/local-storage/token.js.map +0 -1
- package/lib/impl/adapters/validator/commonjs.d.ts +0 -7
- package/lib/impl/adapters/validator/commonjs.js +0 -33
- package/lib/impl/adapters/validator/commonjs.js.map +0 -1
- package/lib/impl/adapters/validator/esmodule.d.ts +0 -9
- package/lib/impl/adapters/validator/esmodule.js +0 -25
- package/lib/impl/adapters/validator/esmodule.js.map +0 -1
- package/lib/impl/adapters/validator/validator.adapter.d.ts +0 -4
- package/lib/impl/adapters/validator/validator.adapter.js +0 -12
- package/lib/impl/adapters/validator/validator.adapter.js.map +0 -1
- package/lib/impl/index.d.ts +0 -2
- package/lib/impl/index.js +0 -6
- package/lib/impl/index.js.map +0 -1
- package/lib/impl/json-schema/default-metadata-storage.d.ts +0 -2
- package/lib/impl/json-schema/default-metadata-storage.js +0 -19
- package/lib/impl/json-schema/default-metadata-storage.js.map +0 -1
- package/lib/impl/json-schema/index.d.ts +0 -1
- package/lib/impl/json-schema/index.js +0 -5
- package/lib/impl/json-schema/index.js.map +0 -1
- package/lib/impl/json-schema/json-schema.d.ts +0 -3
- package/lib/impl/json-schema/json-schema.js +0 -49
- package/lib/impl/json-schema/json-schema.js.map +0 -1
- package/lib/index.d.ts +0 -3
- package/lib/index.js +0 -7
- package/lib/index.js.map +0 -1
- package/lib/server.d.ts +0 -3
- package/lib/server.js +0 -15
- package/lib/server.js.map +0 -1
- package/lib/utils/debug-price.d.ts +0 -1
- package/lib/utils/debug-price.js +0 -42
- package/lib/utils/debug-price.js.map +0 -1
- package/lib/utils/index.d.ts +0 -1
- package/lib/utils/index.js +0 -5
- package/lib/utils/index.js.map +0 -1
|
@@ -0,0 +1,432 @@
|
|
|
1
|
+
import { ValidationTypes } from 'class-validator';
|
|
2
|
+
import { targetConstructorToSchema as targetConstructorToSchema$1 } from 'class-validator-jsonschema';
|
|
3
|
+
import * as i0 from '@angular/core';
|
|
4
|
+
import { InjectionToken, inject, Injectable } from '@angular/core';
|
|
5
|
+
import { injectOpenAiService } from '@nx-ddd/common/infrastructure/externals/openai';
|
|
6
|
+
import { provideOpenaiService } from '@nx-ddd/common/infrastructure/externals/openai/impl';
|
|
7
|
+
import { lastValueFrom, of, map, switchMap, tap, catchError, retry } from 'rxjs';
|
|
8
|
+
import pLimit from 'p-limit';
|
|
9
|
+
import { ZodSchema } from 'zod';
|
|
10
|
+
import zodToJsonSchema from 'zod-to-json-schema';
|
|
11
|
+
import { makeDI } from '@nx-ddd/core';
|
|
12
|
+
import CryptoJS from 'crypto-js';
|
|
13
|
+
|
|
14
|
+
// 環境差異を吸収するため、try-catchでdynamic importしてdefaultMetadataStorageを取得します。
|
|
15
|
+
let defaultMetadataStorage;
|
|
16
|
+
try {
|
|
17
|
+
({ defaultMetadataStorage } = require('class-transformer/cjs/storage'));
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
// Ignore error if class-transformer is not available
|
|
21
|
+
}
|
|
22
|
+
function getMetadataStorage() {
|
|
23
|
+
return defaultMetadataStorage;
|
|
24
|
+
}
|
|
25
|
+
function setMetadataStorage(metadataStorage) {
|
|
26
|
+
defaultMetadataStorage = metadataStorage;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// import { defaultMetadataStorage } from 'c/lass-transformer/esm5/storage';
|
|
30
|
+
// setMetadataStorage(defaultMetadataStorage);
|
|
31
|
+
function getPropType(target, property) {
|
|
32
|
+
return Reflect.getMetadata('design:type', target, property);
|
|
33
|
+
}
|
|
34
|
+
function targetToSchema(type, options) {
|
|
35
|
+
if (typeof type === 'function') {
|
|
36
|
+
if (type.prototype === String.prototype ||
|
|
37
|
+
type.prototype === Symbol.prototype) {
|
|
38
|
+
return { type: 'string' };
|
|
39
|
+
}
|
|
40
|
+
else if (type.prototype === Number.prototype) {
|
|
41
|
+
return { type: 'number' };
|
|
42
|
+
}
|
|
43
|
+
else if (type.prototype === Boolean.prototype) {
|
|
44
|
+
return { type: 'boolean' };
|
|
45
|
+
}
|
|
46
|
+
return targetConstructorToSchema(type, options);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
const additionalConverters = {
|
|
50
|
+
[ValidationTypes.NESTED_VALIDATION]: (meta, options) => {
|
|
51
|
+
if (typeof meta.target === 'function') {
|
|
52
|
+
const typeMeta = options.classTransformerMetadataStorage
|
|
53
|
+
? options.classTransformerMetadataStorage.findTypeMetadata(meta.target, meta.propertyName)
|
|
54
|
+
: null;
|
|
55
|
+
const childType = typeMeta
|
|
56
|
+
? typeMeta.typeFunction()
|
|
57
|
+
: getPropType(meta.target.prototype, meta.propertyName);
|
|
58
|
+
return targetToSchema(childType, options);
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
isDayjs: (meta) => {
|
|
62
|
+
return {
|
|
63
|
+
type: 'string',
|
|
64
|
+
format: 'date-time', // JSON Schemaで日付型を指定
|
|
65
|
+
};
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
function targetConstructorToSchema(target, options = {}) {
|
|
69
|
+
return targetConstructorToSchema$1(target, {
|
|
70
|
+
...options,
|
|
71
|
+
additionalConverters,
|
|
72
|
+
classTransformerMetadataStorage: getMetadataStorage(),
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const AI_TOOLS = '[ai-tools]';
|
|
77
|
+
const AI_SYSTEM = '[ai-system]';
|
|
78
|
+
function addTool(obj, tool) {
|
|
79
|
+
obj[AI_TOOLS] = obj[AI_TOOLS] ?? [];
|
|
80
|
+
obj[AI_TOOLS].push(tool);
|
|
81
|
+
return obj;
|
|
82
|
+
}
|
|
83
|
+
function getTools(obj) {
|
|
84
|
+
return obj[AI_TOOLS] ?? [];
|
|
85
|
+
}
|
|
86
|
+
function buildFunctionTool(params) {
|
|
87
|
+
return {
|
|
88
|
+
type: 'function',
|
|
89
|
+
function: {
|
|
90
|
+
name: params.name,
|
|
91
|
+
description: params.description,
|
|
92
|
+
parameters: params.parameters,
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
function buildToolFromSchema(name, description, schema) {
|
|
97
|
+
const parameters = targetConstructorToSchema(schema);
|
|
98
|
+
return buildFunctionTool({ name, description, parameters });
|
|
99
|
+
}
|
|
100
|
+
function AiFunction(params) {
|
|
101
|
+
return function (target, propertyKey, descriptor) {
|
|
102
|
+
// 引数の型を取得
|
|
103
|
+
const args = Reflect.getMetadata('design:paramtypes', target, propertyKey);
|
|
104
|
+
const tool = buildToolFromSchema(propertyKey, params?.description ?? '', args[0]);
|
|
105
|
+
addTool(target, tool);
|
|
106
|
+
return descriptor;
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
function setAiSystemConfig(obj, config) {
|
|
110
|
+
obj[AI_SYSTEM] = config;
|
|
111
|
+
return obj;
|
|
112
|
+
}
|
|
113
|
+
function getAiSystemConfig(obj) {
|
|
114
|
+
return obj[AI_SYSTEM];
|
|
115
|
+
}
|
|
116
|
+
function AiSystem({ model = 'gpt-4-1106-preview', instructions = ``, shots = [], }) {
|
|
117
|
+
return function (target) {
|
|
118
|
+
setAiSystemConfig(target, { model, instructions, shots });
|
|
119
|
+
return target;
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
class AiToolsAgent {
|
|
123
|
+
openai;
|
|
124
|
+
constructor(openai) {
|
|
125
|
+
this.openai = openai;
|
|
126
|
+
}
|
|
127
|
+
messages = [
|
|
128
|
+
{ role: 'system', content: '' },
|
|
129
|
+
];
|
|
130
|
+
results = [];
|
|
131
|
+
get tools() {
|
|
132
|
+
return getTools(this.constructor);
|
|
133
|
+
}
|
|
134
|
+
get config() {
|
|
135
|
+
return getAiSystemConfig(this.constructor);
|
|
136
|
+
}
|
|
137
|
+
async completion(tools = this.tools) {
|
|
138
|
+
const message = await this.openai.chat.completions.create({
|
|
139
|
+
model: this.config.model,
|
|
140
|
+
messages: this.messages,
|
|
141
|
+
tools,
|
|
142
|
+
});
|
|
143
|
+
for (const call of message.choices?.[0]?.message?.tool_calls ?? []) {
|
|
144
|
+
if (call.type === 'function') {
|
|
145
|
+
const func = this[call.function.name];
|
|
146
|
+
const result = func(JSON.parse(call.function.arguments));
|
|
147
|
+
this.results.push(result);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
async execute(message, options = {}) {
|
|
152
|
+
this.messages.push({ role: 'user', content: message });
|
|
153
|
+
await this.completion(options.tools);
|
|
154
|
+
return this.results.at(-1);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
const ANY_FUNC_SERVICE = new InjectionToken('[@nx-ddd/any-func] AnyFuncService');
|
|
159
|
+
function injectAnyFunc() {
|
|
160
|
+
return inject(ANY_FUNC_SERVICE, { optional: true }) ?? {};
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
const LOCAL_STORAGE = makeDI('LOCAL_STORAGE');
|
|
164
|
+
|
|
165
|
+
class CacheAdapter {
|
|
166
|
+
localStorage = LOCAL_STORAGE.inject();
|
|
167
|
+
async get(keyOrObj) {
|
|
168
|
+
const key = this.makeKey(keyOrObj);
|
|
169
|
+
return this.parseJson(this.localStorage.getItem(key));
|
|
170
|
+
}
|
|
171
|
+
async set(keyOrObj, value) {
|
|
172
|
+
const key = this.makeKey(keyOrObj);
|
|
173
|
+
this.localStorage.setItem(key, this.makeJson(value));
|
|
174
|
+
}
|
|
175
|
+
async call(props, callback) {
|
|
176
|
+
const key = this.makeKey(props);
|
|
177
|
+
let value = await this.get(key);
|
|
178
|
+
if (value)
|
|
179
|
+
return value;
|
|
180
|
+
value = await callback(props);
|
|
181
|
+
await this.set(key, value);
|
|
182
|
+
return value;
|
|
183
|
+
}
|
|
184
|
+
makeKey(keyOrObj) {
|
|
185
|
+
const value = typeof keyOrObj === 'string' ? keyOrObj : JSON.stringify(keyOrObj);
|
|
186
|
+
return CryptoJS.SHA256(value).toString();
|
|
187
|
+
}
|
|
188
|
+
makeJson(valueOrObj) {
|
|
189
|
+
return JSON.stringify(valueOrObj);
|
|
190
|
+
}
|
|
191
|
+
parseJson(value) {
|
|
192
|
+
return JSON.parse(value);
|
|
193
|
+
}
|
|
194
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: CacheAdapter, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
195
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: CacheAdapter, providedIn: 'root' });
|
|
196
|
+
}
|
|
197
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: CacheAdapter, decorators: [{
|
|
198
|
+
type: Injectable,
|
|
199
|
+
args: [{ providedIn: 'root' }]
|
|
200
|
+
}] });
|
|
201
|
+
|
|
202
|
+
class ValidatorAdapter {
|
|
203
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: ValidatorAdapter, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
204
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: ValidatorAdapter });
|
|
205
|
+
}
|
|
206
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: ValidatorAdapter, decorators: [{
|
|
207
|
+
type: Injectable
|
|
208
|
+
}] });
|
|
209
|
+
|
|
210
|
+
function isBrowserFile(obj) {
|
|
211
|
+
return typeof File !== 'undefined' && obj instanceof File;
|
|
212
|
+
}
|
|
213
|
+
const ANY_FUNC_CONFIG = new InjectionToken('[@nx-ddd/any-func] AnyFuncConfig');
|
|
214
|
+
function provideAnyFunc(useFactory) {
|
|
215
|
+
const config = useFactory();
|
|
216
|
+
return [
|
|
217
|
+
{ provide: ANY_FUNC_SERVICE, useClass: AnyFuncService },
|
|
218
|
+
{ provide: ANY_FUNC_CONFIG, useFactory },
|
|
219
|
+
provideOpenaiService(() => ({ apiKey: config.openaiApiKey, dangerouslyAllowBrowser: config.dangerouslyAllowBrowser })),
|
|
220
|
+
];
|
|
221
|
+
}
|
|
222
|
+
class OpenAiMessageHelper {
|
|
223
|
+
static async imageToBase64(imageFile) {
|
|
224
|
+
return new Promise((resolve, reject) => {
|
|
225
|
+
const reader = new FileReader();
|
|
226
|
+
reader.onload = () => {
|
|
227
|
+
const base64String = reader.result;
|
|
228
|
+
resolve(base64String.split(',')[1]);
|
|
229
|
+
};
|
|
230
|
+
reader.onerror = reject;
|
|
231
|
+
reader.readAsDataURL(imageFile);
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
static async buildFilesMessage(files) {
|
|
235
|
+
return await Promise.all(files.map(async (file) => ({
|
|
236
|
+
type: 'image_url',
|
|
237
|
+
image_url: { url: `data:image/jpeg;base64,${await this.imageToBase64(file)}` },
|
|
238
|
+
})));
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
class AnyFuncService {
|
|
242
|
+
openai = injectOpenAiService();
|
|
243
|
+
config = inject(ANY_FUNC_CONFIG, { optional: true }) ?? { debug: false };
|
|
244
|
+
cache = inject(CacheAdapter);
|
|
245
|
+
validator = inject(ValidatorAdapter);
|
|
246
|
+
/** @deprecated use callByJsonSchema instead */
|
|
247
|
+
async jsonSchema(_input, jsonSchema, options = {}) {
|
|
248
|
+
return this.callByJsonSchema(_input, jsonSchema, options);
|
|
249
|
+
}
|
|
250
|
+
async callByJsonSchema(_input, jsonSchema, { instructions = '', model = 'gpt-4o', specs = [], embeddings = false, sample = 3, temperature = 0, maxRetry = 3, validator = (data) => this.validator.validate(jsonSchema, data), } = {}) {
|
|
251
|
+
for (const spec of specs) {
|
|
252
|
+
const errors = await validator(spec.output);
|
|
253
|
+
if (errors.length > 0) {
|
|
254
|
+
throw new Error(JSON.stringify(errors, null, 2));
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
const content = await this.parseInput(_input);
|
|
258
|
+
const sortedSpecs = embeddings ? await this.sort(specs, embeddings, _input) : specs;
|
|
259
|
+
const messages = [
|
|
260
|
+
{ role: 'system', content: instructions },
|
|
261
|
+
...(await this.buildChatMessages(sortedSpecs.slice(0, sample).reverse())),
|
|
262
|
+
{ role: 'user', content },
|
|
263
|
+
];
|
|
264
|
+
return lastValueFrom(of(null).pipe(map(() => messages), switchMap(() => this.complete(_input, jsonSchema, messages, {
|
|
265
|
+
model,
|
|
266
|
+
sample,
|
|
267
|
+
temperature,
|
|
268
|
+
})), tap(message => messages.push(message)), switchMap(async (message) => {
|
|
269
|
+
const toolCall = message.tool_calls[0];
|
|
270
|
+
if (toolCall.type !== 'function') {
|
|
271
|
+
throw new Error('Unexpected tool call type');
|
|
272
|
+
}
|
|
273
|
+
const output = JSON.parse(toolCall.function.arguments);
|
|
274
|
+
console.debug('[AnyFuncService#complete] output:', output);
|
|
275
|
+
const errors = await validator(output);
|
|
276
|
+
console.debug('[AnyFuncService#complete] errors:', errors);
|
|
277
|
+
if (errors.length > 0) {
|
|
278
|
+
messages.push({
|
|
279
|
+
role: 'tool',
|
|
280
|
+
content: JSON.stringify(errors),
|
|
281
|
+
tool_call_id: message.tool_calls[0].id,
|
|
282
|
+
});
|
|
283
|
+
if (this.config.debug) {
|
|
284
|
+
console.debug('messages', JSON.stringify(messages, null, 2));
|
|
285
|
+
}
|
|
286
|
+
throw new Error(JSON.stringify(errors, null, 2));
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
messages.push({
|
|
290
|
+
role: 'tool',
|
|
291
|
+
content: JSON.stringify(output),
|
|
292
|
+
tool_call_id: message.tool_calls[0].id,
|
|
293
|
+
});
|
|
294
|
+
if (this.config.debug) {
|
|
295
|
+
console.debug('messages', JSON.stringify(messages, null, 2));
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
return output;
|
|
299
|
+
}), catchError((error) => {
|
|
300
|
+
console.error(error);
|
|
301
|
+
throw error;
|
|
302
|
+
}), retry(maxRetry)));
|
|
303
|
+
// debugPrice(model, res.usage);
|
|
304
|
+
}
|
|
305
|
+
async callByZod(_input, zod, { instructions = '', model = 'gpt-4o', specs = [], embeddings = false, sample = 3, temperature = 0, maxRetry = 3, validator = (data) => this.validator.validate(zodToJsonSchema(zod, { $refStrategy: 'none' }), data), } = {}) {
|
|
306
|
+
return this.jsonSchema(_input, zodToJsonSchema(zod, { $refStrategy: 'none' }), {
|
|
307
|
+
instructions,
|
|
308
|
+
model,
|
|
309
|
+
specs,
|
|
310
|
+
embeddings,
|
|
311
|
+
sample,
|
|
312
|
+
temperature,
|
|
313
|
+
maxRetry,
|
|
314
|
+
validator,
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
async callByClassValidator(_input, args, { instructions = '', model = 'gpt-4o', specs = [], embeddings = false, sample = 3, temperature = 0, maxRetry = 3, validator = (data) => this.validator.validate(targetConstructorToSchema(args), data), } = {}) {
|
|
318
|
+
const parameters = targetConstructorToSchema(args);
|
|
319
|
+
console.debug('[AnyFuncService#call] parameters:', parameters);
|
|
320
|
+
return this.jsonSchema(_input, parameters, {
|
|
321
|
+
instructions,
|
|
322
|
+
model,
|
|
323
|
+
specs,
|
|
324
|
+
embeddings,
|
|
325
|
+
sample,
|
|
326
|
+
temperature,
|
|
327
|
+
maxRetry,
|
|
328
|
+
validator,
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
async call(_input, args, params = {}) {
|
|
332
|
+
if (args instanceof ZodSchema) {
|
|
333
|
+
return this.callByZod(_input, args, params);
|
|
334
|
+
}
|
|
335
|
+
// class validatorか判定
|
|
336
|
+
if (args instanceof Function) {
|
|
337
|
+
return this.callByClassValidator(_input, args, params);
|
|
338
|
+
}
|
|
339
|
+
if (typeof args === 'object' && args !== null && 'type' in args && args.type === 'object') {
|
|
340
|
+
return this.callByJsonSchema(_input, args, params);
|
|
341
|
+
}
|
|
342
|
+
throw new Error('Invalid args type');
|
|
343
|
+
}
|
|
344
|
+
async complete(_input, jsonSchema, messages, { model = 'gpt-4o', temperature = 0, } = {}) {
|
|
345
|
+
const tool = buildFunctionTool({ name: 'function', description: '', parameters: jsonSchema });
|
|
346
|
+
const props = {
|
|
347
|
+
model,
|
|
348
|
+
messages,
|
|
349
|
+
tools: [tool],
|
|
350
|
+
tool_choice: {
|
|
351
|
+
type: 'function',
|
|
352
|
+
function: { name: 'function' }
|
|
353
|
+
},
|
|
354
|
+
temperature,
|
|
355
|
+
};
|
|
356
|
+
const res = await this.cache.call(props, props => this.openai.chat.completions.create(props));
|
|
357
|
+
return res.choices[0].message;
|
|
358
|
+
}
|
|
359
|
+
async buildChatMessages(specs) {
|
|
360
|
+
const messages = await Promise.all(specs.map(async ({ input, output }) => {
|
|
361
|
+
const parsedInput = await this.parseInput(input);
|
|
362
|
+
return [
|
|
363
|
+
{ role: 'user', content: parsedInput },
|
|
364
|
+
{
|
|
365
|
+
role: 'assistant',
|
|
366
|
+
content: null,
|
|
367
|
+
tool_calls: [
|
|
368
|
+
{
|
|
369
|
+
id: 'call-example',
|
|
370
|
+
type: 'function',
|
|
371
|
+
function: {
|
|
372
|
+
name: 'function',
|
|
373
|
+
arguments: JSON.stringify(output),
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
],
|
|
377
|
+
},
|
|
378
|
+
{ role: 'tool', content: 'success', tool_call_id: 'call-example' },
|
|
379
|
+
];
|
|
380
|
+
}));
|
|
381
|
+
return messages.flat();
|
|
382
|
+
}
|
|
383
|
+
async getEmbeddings(item, accessor) {
|
|
384
|
+
const props = { item, model: 'text-embedding-3-small' };
|
|
385
|
+
let embedding = await this.cache.get(props);
|
|
386
|
+
if (embedding)
|
|
387
|
+
return embedding;
|
|
388
|
+
embedding = await this.openai.embeddings.create({
|
|
389
|
+
model: props.model,
|
|
390
|
+
input: accessor(item),
|
|
391
|
+
}).then(res => res.data[0].embedding);
|
|
392
|
+
await this.cache.set(props, embedding);
|
|
393
|
+
return embedding;
|
|
394
|
+
}
|
|
395
|
+
async sort(items, accessor, target) {
|
|
396
|
+
const dist = (a, b) => Math.sqrt(a.reduce((acc, v, i) => acc + (v - b[i]) ** 2, 0));
|
|
397
|
+
const targetEmbeddings = await this.getEmbeddings(target, s => s);
|
|
398
|
+
const limit = pLimit(10);
|
|
399
|
+
const embeddings = await Promise.all(items.map(item => limit(() => this.getEmbeddings(item, accessor))));
|
|
400
|
+
const items_ = items.map((item, i) => ({
|
|
401
|
+
item,
|
|
402
|
+
embedding: embeddings[i],
|
|
403
|
+
distance: dist(embeddings[i], targetEmbeddings),
|
|
404
|
+
}));
|
|
405
|
+
const sorted = items_.sort((a, b) => a.distance - b.distance);
|
|
406
|
+
return sorted.map(({ item }) => item);
|
|
407
|
+
}
|
|
408
|
+
async parseInput(input) {
|
|
409
|
+
if (isBrowserFile(input)) {
|
|
410
|
+
return await OpenAiMessageHelper.buildFilesMessage([input]);
|
|
411
|
+
}
|
|
412
|
+
else if (input === 'string') {
|
|
413
|
+
return input;
|
|
414
|
+
}
|
|
415
|
+
else {
|
|
416
|
+
return JSON.stringify(input);
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: AnyFuncService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
420
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: AnyFuncService, providedIn: 'root' });
|
|
421
|
+
}
|
|
422
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: AnyFuncService, decorators: [{
|
|
423
|
+
type: Injectable,
|
|
424
|
+
args: [{ providedIn: 'root' }]
|
|
425
|
+
}] });
|
|
426
|
+
|
|
427
|
+
/**
|
|
428
|
+
* Generated bundle index. Do not edit.
|
|
429
|
+
*/
|
|
430
|
+
|
|
431
|
+
export { ANY_FUNC_SERVICE, AiFunction, AiSystem, AiToolsAgent, AnyFuncService, addTool, buildFunctionTool, buildToolFromSchema, getAiSystemConfig, getTools, injectAnyFunc, provideAnyFunc, setAiSystemConfig, targetConstructorToSchema };
|
|
432
|
+
//# sourceMappingURL=nx-ddd-any-func.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nx-ddd-any-func.mjs","sources":["../tmp-esm2022/impl/json-schema/default-metadata-storage.js","../tmp-esm2022/impl/json-schema/json-schema.js","../tmp-esm2022/agent/agent.js","../tmp-esm2022/any-func/any-func.service.js","../tmp-esm2022/impl/adapters/local-storage/token.js","../tmp-esm2022/impl/adapters/cache/cache.adapter.js","../tmp-esm2022/impl/adapters/validator/validator.adapter.js","../tmp-esm2022/any-func/any-func.service.impl.js","../tmp-esm2022/nx-ddd-any-func.js"],"sourcesContent":["// 環境差異を吸収するため、try-catchでdynamic importしてdefaultMetadataStorageを取得します。\nlet defaultMetadataStorage;\ntry {\n ({ defaultMetadataStorage } = require('class-transformer/cjs/storage'));\n}\ncatch {\n // Ignore error if class-transformer is not available\n}\nexport function getMetadataStorage() {\n return defaultMetadataStorage;\n}\nexport function setMetadataStorage(metadataStorage) {\n defaultMetadataStorage = metadataStorage;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1tZXRhZGF0YS1zdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvQG54LWRkZC9hbnktZnVuYy9zcmMvbGliL2ltcGwvanNvbi1zY2hlbWEvZGVmYXVsdC1tZXRhZGF0YS1zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNFQUFzRTtBQUN0RSxJQUFJLHNCQUFnRixDQUFDO0FBRXJGLElBQUksQ0FBQztJQUNILENBQUMsRUFBRSxzQkFBc0IsRUFBRSxHQUFHLE9BQU8sQ0FBQywrQkFBK0IsQ0FBQyxDQUFDLENBQUM7QUFDMUUsQ0FBQztBQUFDLE1BQU0sQ0FBQztJQUNQLHFEQUFxRDtBQUN2RCxDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQjtJQUNoQyxPQUFPLHNCQUFzQixDQUFDO0FBQ2hDLENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsZUFBeUU7SUFDMUcsc0JBQXNCLEdBQUcsZUFBZSxDQUFDO0FBQzNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyDnkrDlooPlt67nlbDjgpLlkLjlj47jgZnjgovjgZ/jgoHjgIF0cnktY2F0Y2jjgadkeW5hbWljIGltcG9ydOOBl+OBpmRlZmF1bHRNZXRhZGF0YVN0b3JhZ2XjgpLlj5blvpfjgZfjgb7jgZnjgIJcbmxldCBkZWZhdWx0TWV0YWRhdGFTdG9yYWdlOiBpbXBvcnQoJ2NsYXNzLXRyYW5zZm9ybWVyL2VzbTUvc3RvcmFnZScpLk1ldGFkYXRhU3RvcmFnZTtcblxudHJ5IHtcbiAgKHsgZGVmYXVsdE1ldGFkYXRhU3RvcmFnZSB9ID0gcmVxdWlyZSgnY2xhc3MtdHJhbnNmb3JtZXIvY2pzL3N0b3JhZ2UnKSk7XG59IGNhdGNoIHtcbiAgLy8gSWdub3JlIGVycm9yIGlmIGNsYXNzLXRyYW5zZm9ybWVyIGlzIG5vdCBhdmFpbGFibGVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1ldGFkYXRhU3RvcmFnZSgpIHtcbiAgcmV0dXJuIGRlZmF1bHRNZXRhZGF0YVN0b3JhZ2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRNZXRhZGF0YVN0b3JhZ2UobWV0YWRhdGFTdG9yYWdlOiBpbXBvcnQoJ2NsYXNzLXRyYW5zZm9ybWVyL2VzbTUvc3RvcmFnZScpLk1ldGFkYXRhU3RvcmFnZSkge1xuICBkZWZhdWx0TWV0YWRhdGFTdG9yYWdlID0gbWV0YWRhdGFTdG9yYWdlO1xufVxuIl19","import { ValidationTypes } from \"class-validator\";\nimport { targetConstructorToSchema as _targetConstructorToSchema } from \"class-validator-jsonschema\";\nimport { getMetadataStorage } from \"./default-metadata-storage\";\n// import { defaultMetadataStorage } from 'c/lass-transformer/esm5/storage';\n// setMetadataStorage(defaultMetadataStorage);\nfunction getPropType(target, property) {\n return Reflect.getMetadata('design:type', target, property);\n}\nfunction targetToSchema(type, options) {\n if (typeof type === 'function') {\n if (type.prototype === String.prototype ||\n type.prototype === Symbol.prototype) {\n return { type: 'string' };\n }\n else if (type.prototype === Number.prototype) {\n return { type: 'number' };\n }\n else if (type.prototype === Boolean.prototype) {\n return { type: 'boolean' };\n }\n return targetConstructorToSchema(type, options);\n }\n}\nconst additionalConverters = {\n [ValidationTypes.NESTED_VALIDATION]: (meta, options) => {\n if (typeof meta.target === 'function') {\n const typeMeta = options.classTransformerMetadataStorage\n ? options.classTransformerMetadataStorage.findTypeMetadata(meta.target, meta.propertyName)\n : null;\n const childType = typeMeta\n ? typeMeta.typeFunction()\n : getPropType(meta.target.prototype, meta.propertyName);\n return targetToSchema(childType, options);\n }\n },\n isDayjs: (meta) => {\n return {\n type: 'string',\n format: 'date-time', // JSON Schemaで日付型を指定\n };\n },\n};\nexport function targetConstructorToSchema(target, options = {}) {\n return _targetConstructorToSchema(target, {\n ...options,\n additionalConverters,\n classTransformerMetadataStorage: getMetadataStorage(),\n });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi1zY2hlbWEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AbngtZGRkL2FueS1mdW5jL3NyYy9saWIvaW1wbC9qc29uLXNjaGVtYS9qc29uLXNjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDakQsT0FBTyxFQUFFLHlCQUF5QixJQUFJLDBCQUEwQixFQUFFLE1BQU0sNEJBQTRCLENBQUE7QUFHcEcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsNEVBQTRFO0FBRTVFLDhDQUE4QztBQUU5QyxTQUFTLFdBQVcsQ0FBQyxNQUFjLEVBQUUsUUFBZ0I7SUFDbkQsT0FBTyxPQUFPLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUE7QUFDN0QsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUNyQixJQUFTLEVBQ1QsT0FBWTtJQUVaLElBQUksT0FBTyxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDL0IsSUFDRSxJQUFJLENBQUMsU0FBUyxLQUFLLE1BQU0sQ0FBQyxTQUFTO1lBQ25DLElBQUksQ0FBQyxTQUFTLEtBQUssTUFBTSxDQUFDLFNBQVMsRUFDbkMsQ0FBQztZQUNELE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUE7UUFDM0IsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDL0MsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQTtRQUMzQixDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNoRCxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFBO1FBQzVCLENBQUM7UUFFRCxPQUFPLHlCQUF5QixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUNqRCxDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sb0JBQW9CLEdBQUU7SUFDMUIsQ0FBQyxlQUFlLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLElBQVMsRUFBRSxPQUFZLEVBQUUsRUFBRTtRQUMvRCxJQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUN0QyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsK0JBQStCO2dCQUN0RCxDQUFDLENBQUMsT0FBTyxDQUFDLCtCQUErQixDQUFDLGdCQUFnQixDQUN0RCxJQUFJLENBQUMsTUFBTSxFQUNYLElBQUksQ0FBQyxZQUFZLENBQ2xCO2dCQUNILENBQUMsQ0FBQyxJQUFJLENBQUE7WUFDUixNQUFNLFNBQVMsR0FBRyxRQUFRO2dCQUN4QixDQUFDLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRTtnQkFDekIsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUE7WUFDekQsT0FBTyxjQUFjLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQzNDLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxFQUFFLENBQUMsSUFBUyxFQUFlLEVBQUU7UUFDbEMsT0FBTztZQUNMLElBQUksRUFBRSxRQUFRO1lBQ2QsTUFBTSxFQUFFLFdBQVcsRUFBRSxxQkFBcUI7U0FDM0MsQ0FBQztJQUNKLENBQUM7Q0FDRixDQUFDO0FBRUYsTUFBTSxVQUFVLHlCQUF5QixDQUFDLE1BQWdCLEVBQUUsVUFBNkIsRUFBRTtJQUN6RixPQUFPLDBCQUEwQixDQUFDLE1BQU0sRUFBRTtRQUN4QyxHQUFHLE9BQU87UUFDVixvQkFBb0I7UUFDcEIsK0JBQStCLEVBQUUsa0JBQWtCLEVBQUU7S0FDdEQsQ0FBZ0IsQ0FBQztBQUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmFsaWRhdGlvblR5cGVzIH0gZnJvbSBcImNsYXNzLXZhbGlkYXRvclwiXG5pbXBvcnQgeyB0YXJnZXRDb25zdHJ1Y3RvclRvU2NoZW1hIGFzIF90YXJnZXRDb25zdHJ1Y3RvclRvU2NoZW1hIH0gZnJvbSBcImNsYXNzLXZhbGlkYXRvci1qc29uc2NoZW1hXCJcbmltcG9ydCB7IElPcHRpb25zIH0gZnJvbSBcImNsYXNzLXZhbGlkYXRvci1qc29uc2NoZW1hL2J1aWxkL29wdGlvbnNcIjtcbmltcG9ydCB7IEpTT05TY2hlbWE3IH0gZnJvbSAnanNvbi1zY2hlbWEnO1xuaW1wb3J0IHsgZ2V0TWV0YWRhdGFTdG9yYWdlIH0gZnJvbSBcIi4vZGVmYXVsdC1tZXRhZGF0YS1zdG9yYWdlXCI7XG4vLyBpbXBvcnQgeyBkZWZhdWx0TWV0YWRhdGFTdG9yYWdlIH0gZnJvbSAnYy9sYXNzLXRyYW5zZm9ybWVyL2VzbTUvc3RvcmFnZSc7XG5cbi8vIHNldE1ldGFkYXRhU3RvcmFnZShkZWZhdWx0TWV0YWRhdGFTdG9yYWdlKTtcblxuZnVuY3Rpb24gZ2V0UHJvcFR5cGUodGFyZ2V0OiBvYmplY3QsIHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgcmV0dXJuIFJlZmxlY3QuZ2V0TWV0YWRhdGEoJ2Rlc2lnbjp0eXBlJywgdGFyZ2V0LCBwcm9wZXJ0eSlcbn1cblxuZnVuY3Rpb24gdGFyZ2V0VG9TY2hlbWEoXG4gIHR5cGU6IGFueSxcbiAgb3B0aW9uczogYW55XG4pOiBhbnkge1xuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoXG4gICAgICB0eXBlLnByb3RvdHlwZSA9PT0gU3RyaW5nLnByb3RvdHlwZSB8fFxuICAgICAgdHlwZS5wcm90b3R5cGUgPT09IFN5bWJvbC5wcm90b3R5cGVcbiAgICApIHtcbiAgICAgIHJldHVybiB7IHR5cGU6ICdzdHJpbmcnIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUucHJvdG90eXBlID09PSBOdW1iZXIucHJvdG90eXBlKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiAnbnVtYmVyJyB9XG4gICAgfSBlbHNlIGlmICh0eXBlLnByb3RvdHlwZSA9PT0gQm9vbGVhbi5wcm90b3R5cGUpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6ICdib29sZWFuJyB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldENvbnN0cnVjdG9yVG9TY2hlbWEodHlwZSwgb3B0aW9ucylcbiAgfVxufVxuXG5jb25zdCBhZGRpdGlvbmFsQ29udmVydGVycz0ge1xuICBbVmFsaWRhdGlvblR5cGVzLk5FU1RFRF9WQUxJREFUSU9OXTogKG1ldGE6IGFueSwgb3B0aW9uczogYW55KSA9PiB7XG4gICAgaWYgKHR5cGVvZiBtZXRhLnRhcmdldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3QgdHlwZU1ldGEgPSBvcHRpb25zLmNsYXNzVHJhbnNmb3JtZXJNZXRhZGF0YVN0b3JhZ2VcbiAgICAgICAgPyBvcHRpb25zLmNsYXNzVHJhbnNmb3JtZXJNZXRhZGF0YVN0b3JhZ2UuZmluZFR5cGVNZXRhZGF0YShcbiAgICAgICAgICAgIG1ldGEudGFyZ2V0LFxuICAgICAgICAgICAgbWV0YS5wcm9wZXJ0eU5hbWVcbiAgICAgICAgICApXG4gICAgICAgIDogbnVsbFxuICAgICAgY29uc3QgY2hpbGRUeXBlID0gdHlwZU1ldGFcbiAgICAgICAgPyB0eXBlTWV0YS50eXBlRnVuY3Rpb24oKVxuICAgICAgICA6IGdldFByb3BUeXBlKG1ldGEudGFyZ2V0LnByb3RvdHlwZSwgbWV0YS5wcm9wZXJ0eU5hbWUpXG4gICAgICByZXR1cm4gdGFyZ2V0VG9TY2hlbWEoY2hpbGRUeXBlLCBvcHRpb25zKVxuICAgIH1cbiAgfSxcbiAgaXNEYXlqczogKG1ldGE6IGFueSk6IEpTT05TY2hlbWE3ID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICBmb3JtYXQ6ICdkYXRlLXRpbWUnLCAvLyBKU09OIFNjaGVtYeOBp+aXpeS7mOWei+OCkuaMh+WumlxuICAgIH07XG4gIH0sXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdGFyZ2V0Q29uc3RydWN0b3JUb1NjaGVtYSh0YXJnZXQ6IEZ1bmN0aW9uLCBvcHRpb25zOiBQYXJ0aWFsPElPcHRpb25zPiA9IHt9KTogSlNPTlNjaGVtYTcge1xuICByZXR1cm4gX3RhcmdldENvbnN0cnVjdG9yVG9TY2hlbWEodGFyZ2V0LCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBhZGRpdGlvbmFsQ29udmVydGVycyxcbiAgICBjbGFzc1RyYW5zZm9ybWVyTWV0YWRhdGFTdG9yYWdlOiBnZXRNZXRhZGF0YVN0b3JhZ2UoKSxcbiAgfSkgYXMgSlNPTlNjaGVtYTc7XG59XG4iXX0=","import { targetConstructorToSchema } from '../impl/json-schema';\nconst AI_TOOLS = '[ai-tools]';\nconst AI_SYSTEM = '[ai-system]';\nexport function addTool(obj, tool) {\n obj[AI_TOOLS] = obj[AI_TOOLS] ?? [];\n obj[AI_TOOLS].push(tool);\n return obj;\n}\nexport function getTools(obj) {\n return obj[AI_TOOLS] ?? [];\n}\nexport function buildFunctionTool(params) {\n return {\n type: 'function',\n function: {\n name: params.name,\n description: params.description,\n parameters: params.parameters,\n },\n };\n}\nexport function buildToolFromSchema(name, description, schema) {\n const parameters = targetConstructorToSchema(schema);\n return buildFunctionTool({ name, description, parameters });\n}\nexport function AiFunction(params) {\n return function (target, propertyKey, descriptor) {\n // 引数の型を取得\n const args = Reflect.getMetadata('design:paramtypes', target, propertyKey);\n const tool = buildToolFromSchema(propertyKey, params?.description ?? '', args[0]);\n addTool(target, tool);\n return descriptor;\n };\n}\nexport function setAiSystemConfig(obj, config) {\n obj[AI_SYSTEM] = config;\n return obj;\n}\nexport function getAiSystemConfig(obj) {\n return obj[AI_SYSTEM];\n}\nexport function AiSystem({ model = 'gpt-4-1106-preview', instructions = ``, shots = [], }) {\n return function (target) {\n setAiSystemConfig(target, { model, instructions, shots });\n return target;\n };\n}\nexport class AiToolsAgent {\n openai;\n constructor(openai) {\n this.openai = openai;\n }\n messages = [\n { role: 'system', content: '' },\n ];\n results = [];\n get tools() {\n return getTools(this.constructor);\n }\n get config() {\n return getAiSystemConfig(this.constructor);\n }\n async completion(tools = this.tools) {\n const message = await this.openai.chat.completions.create({\n model: this.config.model,\n messages: this.messages,\n tools,\n });\n for (const call of message.choices?.[0]?.message?.tool_calls ?? []) {\n if (call.type === 'function') {\n const func = this[call.function.name];\n const result = func(JSON.parse(call.function.arguments));\n this.results.push(result);\n }\n }\n }\n async execute(message, options = {}) {\n this.messages.push({ role: 'user', content: message });\n await this.completion(options.tools);\n return this.results.at(-1);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AbngtZGRkL2FueS1mdW5jL3NyYy9saWIvYWdlbnQvYWdlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFaEUsTUFBTSxRQUFRLEdBQUcsWUFBcUIsQ0FBQztBQUN2QyxNQUFNLFNBQVMsR0FBRyxhQUFzQixDQUFDO0FBRXpDLE1BQU0sVUFBVSxPQUFPLENBQUMsR0FBMkIsRUFBRSxJQUFZO0lBQy9ELEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3BDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxVQUFVLFFBQVEsQ0FBQyxHQUEyQjtJQUNsRCxPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0IsQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxNQUlqQztJQUNDLE9BQU87UUFDTCxJQUFJLEVBQUUsVUFBVTtRQUNoQixRQUFRLEVBQUU7WUFDUixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7WUFDakIsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO1lBQy9CLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTtTQUM5QjtLQUNGLENBQUE7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLG1CQUFtQixDQUFDLElBQVksRUFBRSxXQUFtQixFQUFFLE1BQWdCO0lBQ3JGLE1BQU0sVUFBVSxHQUFHLHlCQUF5QixDQUFDLE1BQU0sQ0FBdUIsQ0FBQztJQUMzRSxPQUFPLGlCQUFpQixDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUs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LENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUM7UUFDckQsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFRLENBQUM7SUFDcEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhdENvbXBsZXRpb25NZXNzYWdlUGFyYW0sIEZ1bmN0aW9uUGFyYW1ldGVycywgIH0gZnJvbSBcIm9wZW5haS9yZXNvdXJjZXNcIjtcbmltcG9ydCB7IEZ1bmN0aW9uVG9vbCB9IGZyb20gXCJvcGVuYWkvcmVzb3VyY2VzL2JldGEvYXNzaXN0YW50c1wiO1xuaW1wb3J0IHsgQ2hhdENvbXBsZXRpb25DcmVhdGVQYXJhbXNCYXNlIH0gZnJvbSBcIm9wZW5haS9yZXNvdXJjZXMvY2hhdC9jb21wbGV0aW9uc1wiO1xuaW1wb3J0IHsgT3BlbkFpU2VydmljZUltcGwgfSBmcm9tICdAbngtZGRkL2NvbW1vbi9pbmZyYXN0cnVjdHVyZS9leHRlcm5hbHMvb3BlbmFpL2ltcGwnO1xuaW1wb3J0IHsgdGFyZ2V0Q29uc3RydWN0b3JUb1NjaGVtYSB9IGZyb20gJy4uL2ltcGwvanNvbi1zY2hlbWEnO1xuXG5jb25zdCBBSV9UT09MUyA9ICdbYWktdG9vbHNdJyBhcyBjb25zdDtcbmNvbnN0IEFJX1NZU1RFTSA9ICdbYWktc3lzdGVtXScgYXMgY29uc3Q7XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRUb29sKG9iajoge1tBSV9UT09MU106IG9iamVjdFtdfSwgdG9vbDogb2JqZWN0KSB7XG4gIG9ialtBSV9UT09MU10gPSBvYmpbQUlfVE9PTFNdID8/IFtdO1xuICBvYmpbQUlfVE9PTFNdLnB1c2godG9vbCk7XG4gIHJldHVybiBvYmo7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUb29scyhvYmo6IHtbQUlfVE9PTFNdOiBvYmplY3RbXX0pOiBhbnlbXSB7XG4gIHJldHVybiBvYmpbQUlfVE9PTFNdID8/IFtdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRGdW5jdGlvblRvb2wocGFyYW1zOiB7XG4gIG5hbWU6IHN0cmluZyxcbiAgZGVzY3JpcHRpb246IHN0cmluZyxcbiAgcGFyYW1ldGVyczogRnVuY3Rpb25QYXJhbWV0ZXJzLFxufSk6IEZ1bmN0aW9uVG9vbCB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ2Z1bmN0aW9uJyxcbiAgICBmdW5jdGlvbjoge1xuICAgICAgbmFtZTogcGFyYW1zLm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogcGFyYW1zLmRlc2NyaXB0aW9uLFxuICAgICAgcGFyYW1ldGVyczogcGFyYW1zLnBhcmFtZXRlcnMsXG4gICAgfSxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRUb29sRnJvbVNjaGVtYShuYW1lOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcsIHNjaGVtYTogRnVuY3Rpb24pOiBGdW5jdGlvblRvb2wge1xuICBjb25zdCBwYXJhbWV0ZXJzID0gdGFyZ2V0Q29uc3RydWN0b3JUb1NjaGVtYShzY2hlbWEpIGFzIEZ1bmN0aW9uUGFyYW1ldGVycztcbiAgcmV0dXJuIGJ1aWxkRnVuY3Rpb25Ub29sKHsgbmFtZSwgZGVzY3JpcHRpb24sIHBhcmFtZXRlcnMgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBaUZ1bmN0aW9uKHBhcmFtcz86IHtkZXNjcmlwdGlvbj86IHN0cmluZ30pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZywgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKSB7XG4gICAgLy8g5byV5pWw44Gu5Z6L44KS5Y+W5b6XXG4gICAgY29uc3QgYXJncyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoJ2Rlc2lnbjpwYXJhbXR5cGVzJywgdGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4gICAgY29uc3QgdG9vbCA9IGJ1aWxkVG9vbEZyb21TY2hlbWEocHJvcGVydHlLZXksIHBhcmFtcz8uZGVzY3JpcHRpb24gPz8gJycsIGFyZ3NbMF0pO1xuICAgIGFkZFRvb2wodGFyZ2V0LCB0b29sKTtcbiAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBaVN5c3RlbUNvbmZpZyB7XG4gIG1vZGVsPzogQ2hhdENvbXBsZXRpb25DcmVhdGVQYXJhbXNCYXNlWydtb2RlbCddO1xuICBpbnN0cnVjdGlvbnM/OiBzdHJpbmc7XG4gIHNob3RzPzoge2lucHV0OiBzdHJpbmcsIG91dHB1dDogc3RyaW5nfVtdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QWlTeXN0ZW1Db25maWcob2JqOiB7W0FJX1NZU1RFTV06IEFpU3lzdGVtQ29uZmlnfSwgY29uZmlnOiBBaVN5c3RlbUNvbmZpZykge1xuICBvYmpbQUlfU1lTVEVNXSA9IGNvbmZpZztcbiAgcmV0dXJuIG9iajtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFpU3lzdGVtQ29uZmlnKG9iajoge1tBSV9TWVNURU1dOiBBaVN5c3RlbUNvbmZpZ30pOiBBaVN5c3RlbUNvbmZpZyB7XG4gIHJldHVybiBvYmpbQUlfU1lTVEVNXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEFpU3lzdGVtKHtcbiAgbW9kZWwgPSAnZ3B0LTQtMTEwNi1wcmV2aWV3JyxcbiAgaW5zdHJ1Y3Rpb25zID0gYGAsXG4gIHNob3RzID0gW10sXG59OiBBaVN5c3RlbUNvbmZpZykge1xuICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogYW55KSB7XG4gICAgc2V0QWlTeXN0ZW1Db25maWcodGFyZ2V0LCB7bW9kZWwsIGluc3RydWN0aW9ucywgc2hvdHN9KTtcbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgQWlUb29sc0FnZW50IHtcbiAgY29uc3RydWN0b3IgKHByb3RlY3RlZCBvcGVuYWk6IE9wZW5BaVNlcnZpY2VJbXBsKSB7IH1cbiAgXG4gIG1lc3NhZ2VzOiBDaGF0Q29tcGxldGlvbk1lc3NhZ2VQYXJhbVtdID0gW1xuICAgIHsgcm9sZTogJ3N5c3RlbScgYXMgY29uc3QsIGNvbnRlbnQ6ICcnIH0sXG4gIF07XG5cbiAgcmVzdWx0czogYW55W10gPSBbXTtcblxuICBnZXQgdG9vbHMoKSB7XG4gICAgcmV0dXJuIGdldFRvb2xzKHRoaXMuY29uc3RydWN0b3IgYXMgYW55KTtcbiAgfVxuXG4gIGdldCBjb25maWcoKSB7XG4gICAgcmV0dXJuIGdldEFpU3lzdGVtQ29uZmlnKHRoaXMuY29uc3RydWN0b3IgYXMgYW55KTtcbiAgfVxuXG4gIGFzeW5jIGNvbXBsZXRpb24odG9vbHM6IGFueVtdID0gdGhpcy50b29scykge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCB0aGlzLm9wZW5haS5jaGF0LmNvbXBsZXRpb25zLmNyZWF0ZSh7XG4gICAgICBtb2RlbDogdGhpcy5jb25maWcubW9kZWwhLFxuICAgICAgbWVzc2FnZXM6IHRoaXMubWVzc2FnZXMsXG4gICAgICB0b29scyxcbiAgICB9KTtcbiAgICBmb3IgKGNvbnN0IGNhbGwgb2YgbWVzc2FnZS5jaG9pY2VzPy5bMF0/Lm1lc3NhZ2U/LnRvb2xfY2FsbHMgPz8gW10pIHtcbiAgICAgIGlmIChjYWxsLnR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc3QgZnVuYyA9ICh0aGlzIGFzIGFueSlbY2FsbC5mdW5jdGlvbi5uYW1lXTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZnVuYyhKU09OLnBhcnNlKGNhbGwuZnVuY3Rpb24uYXJndW1lbnRzKSk7XG4gICAgICAgIHRoaXMucmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZXhlY3V0ZTxUPWFueT4obWVzc2FnZTogc3RyaW5nLCBvcHRpb25zOiB7dG9vbHM/OiBhbnlbXX0gPSB7fSk6IFByb21pc2U8VD4ge1xuICAgIHRoaXMubWVzc2FnZXMucHVzaCh7cm9sZTogJ3VzZXInLCBjb250ZW50OiBtZXNzYWdlfSk7XG4gICAgYXdhaXQgdGhpcy5jb21wbGV0aW9uKG9wdGlvbnMudG9vbHMpO1xuICAgIHJldHVybiB0aGlzLnJlc3VsdHMuYXQoLTEpIGFzIGFueTtcbiAgfVxufVxuXG4iXX0=","import { inject, InjectionToken } from '@angular/core';\nexport const ANY_FUNC_SERVICE = new InjectionToken('[@nx-ddd/any-func] AnyFuncService');\nexport function injectAnyFunc() {\n return inject(ANY_FUNC_SERVICE, { optional: true }) ?? {};\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW55LWZ1bmMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BueC1kZGQvYW55LWZ1bmMvc3JjL2xpYi9hbnktZnVuYy9hbnktZnVuYy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3ZELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLElBQUksY0FBYyxDQUFpQixtQ0FBbUMsQ0FBQyxDQUFDO0FBRXhHLE1BQU0sVUFBVSxhQUFhO0lBQzNCLE9BQU8sTUFBTSxDQUFDLGdCQUFnQixFQUFFLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDLElBQUksRUFBb0IsQ0FBQztBQUM1RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQW55RnVuY1NlcnZpY2UgfSBmcm9tICcuL2FueS1mdW5jLnNlcnZpY2UuaW1wbCc7XG5cbmV4cG9ydCBjb25zdCBBTllfRlVOQ19TRVJWSUNFID0gbmV3IEluamVjdGlvblRva2VuPEFueUZ1bmNTZXJ2aWNlPignW0BueC1kZGQvYW55LWZ1bmNdIEFueUZ1bmNTZXJ2aWNlJyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RBbnlGdW5jKCk6IEFueUZ1bmNTZXJ2aWNlIHtcbiAgcmV0dXJuIGluamVjdChBTllfRlVOQ19TRVJWSUNFLCB7b3B0aW9uYWw6IHRydWV9KSA/PyB7fSBhcyBBbnlGdW5jU2VydmljZTtcbn1cbiJdfQ==","import { makeDI } from \"@nx-ddd/core\";\nexport const LOCAL_STORAGE = makeDI('LOCAL_STORAGE');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AbngtZGRkL2FueS1mdW5jL3NyYy9saWIvaW1wbC9hZGFwdGVycy9sb2NhbC1zdG9yYWdlL3Rva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHdEMsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBZSxlQUFlLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1ha2VESSB9IGZyb20gXCJAbngtZGRkL2NvcmVcIjtcbmltcG9ydCB7IExvY2FsU3RvcmFnZSB9IGZyb20gXCJub2RlLWxvY2Fsc3RvcmFnZVwiO1xuXG5leHBvcnQgY29uc3QgTE9DQUxfU1RPUkFHRSA9IG1ha2VESTxMb2NhbFN0b3JhZ2U+KCdMT0NBTF9TVE9SQUdFJyk7XG4iXX0=","import { Injectable } from \"@angular/core\";\nimport { LOCAL_STORAGE } from '../local-storage';\nimport CryptoJS from 'crypto-js';\nimport * as i0 from \"@angular/core\";\nexport class CacheAdapter {\n localStorage = LOCAL_STORAGE.inject();\n async get(keyOrObj) {\n const key = this.makeKey(keyOrObj);\n return this.parseJson(this.localStorage.getItem(key));\n }\n async set(keyOrObj, value) {\n const key = this.makeKey(keyOrObj);\n this.localStorage.setItem(key, this.makeJson(value));\n }\n async call(props, callback) {\n const key = this.makeKey(props);\n let value = await this.get(key);\n if (value)\n return value;\n value = await callback(props);\n await this.set(key, value);\n return value;\n }\n makeKey(keyOrObj) {\n const value = typeof keyOrObj === 'string' ? keyOrObj : JSON.stringify(keyOrObj);\n return CryptoJS.SHA256(value).toString();\n }\n makeJson(valueOrObj) {\n return JSON.stringify(valueOrObj);\n }\n parseJson(value) {\n return JSON.parse(value);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: CacheAdapter, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: CacheAdapter, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: CacheAdapter, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BueC1kZGQvYW55LWZ1bmMvc3JjL2xpYi9pbXBsL2FkYXB0ZXJzL2NhY2hlL2NhY2hlLmFkYXB0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxRQUFRLE1BQU0sV0FBVyxDQUFDOztBQUdqQyxNQUFNLE9BQU8sWUFBWTtJQUNiLFlBQVksR0FBRyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUM7SUFFaEQsS0FBSyxDQUFDLEdBQUcsQ0FBSSxRQUF5QjtRQUNwQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25DLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBYSxDQUFDO0lBQ3BFLENBQUM7SUFFRCxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQXlCLEVBQUUsS0FBVTtRQUM3QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJLENBQWlDLEtBQVEsRUFBRSxRQUFrQztRQUNyRixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLElBQUksS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBSSxHQUFHLENBQUMsQ0FBQztRQUNuQyxJQUFJLEtBQUs7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN4QixLQUFLLEdBQUcsTUFBTSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFUyxPQUFPLENBQUMsUUFBeUI7UUFDekMsTUFBTSxLQUFLLEdBQUcsT0FBTyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDakYsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFUyxRQUFRLENBQUMsVUFBZTtRQUNoQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVTLFNBQVMsQ0FBQyxLQUFhO1FBQy9CLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixDQUFDO3VHQWpDVSxZQUFZOzJHQUFaLFlBQVksY0FEQSxNQUFNOzsyRkFDbEIsWUFBWTtrQkFEeEIsVUFBVTttQkFBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IExPQ0FMX1NUT1JBR0UgfSBmcm9tICcuLi9sb2NhbC1zdG9yYWdlJztcbmltcG9ydCBDcnlwdG9KUyBmcm9tICdjcnlwdG8tanMnO1xuXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBDYWNoZUFkYXB0ZXIge1xuICBwcm90ZWN0ZWQgbG9jYWxTdG9yYWdlID0gTE9DQUxfU1RPUkFHRS5pbmplY3QoKTtcblxuICBhc3luYyBnZXQ8VD4oa2V5T3JPYmo6IHN0cmluZyB8IG9iamVjdCk6IFByb21pc2U8VCB8IG51bGw+IHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLm1ha2VLZXkoa2V5T3JPYmopO1xuICAgIHJldHVybiB0aGlzLnBhcnNlSnNvbih0aGlzLmxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSkpIGFzIFQgfCBudWxsO1xuICB9XG5cbiAgYXN5bmMgc2V0KGtleU9yT2JqOiBzdHJpbmcgfCBvYmplY3QsIHZhbHVlOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLm1ha2VLZXkoa2V5T3JPYmopO1xuICAgIHRoaXMubG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCB0aGlzLm1ha2VKc29uKHZhbHVlKSk7XG4gIH1cblxuICBhc3luYyBjYWxsPFAgZXh0ZW5kcyAoc3RyaW5nIHwgb2JqZWN0KSwgVD4ocHJvcHM6IFAsIGNhbGxiYWNrOiAocHJvcHM6IFApID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLm1ha2VLZXkocHJvcHMpO1xuICAgIGxldCB2YWx1ZSA9IGF3YWl0IHRoaXMuZ2V0PFQ+KGtleSk7XG4gICAgaWYgKHZhbHVlKSByZXR1cm4gdmFsdWU7XG4gICAgdmFsdWUgPSBhd2FpdCBjYWxsYmFjayhwcm9wcyk7XG4gICAgYXdhaXQgdGhpcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgcmV0dXJuIHZhbHVlOyBcbiAgfVxuXG4gIHByb3RlY3RlZCBtYWtlS2V5KGtleU9yT2JqOiBzdHJpbmcgfCBvYmplY3QpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZhbHVlID0gdHlwZW9mIGtleU9yT2JqID09PSAnc3RyaW5nJyA/IGtleU9yT2JqIDogSlNPTi5zdHJpbmdpZnkoa2V5T3JPYmopO1xuICAgIHJldHVybiBDcnlwdG9KUy5TSEEyNTYodmFsdWUpLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbWFrZUpzb24odmFsdWVPck9iajogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWVPck9iaik7XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFyc2VKc29uKHZhbHVlOiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKHZhbHVlKTtcbiAgfVxufVxuIl19","import { Injectable } from \"@angular/core\";\nimport * as i0 from \"@angular/core\";\nexport class ValidatorAdapter {\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: ValidatorAdapter, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: ValidatorAdapter });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: ValidatorAdapter, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yLmFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AbngtZGRkL2FueS1mdW5jL3NyYy9saWIvaW1wbC9hZGFwdGVycy92YWxpZGF0b3IvdmFsaWRhdG9yLmFkYXB0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFJM0MsTUFBTSxPQUFnQixnQkFBZ0I7dUdBQWhCLGdCQUFnQjsyR0FBaEIsZ0JBQWdCOzsyRkFBaEIsZ0JBQWdCO2tCQURyQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgdHlwZSB7IEpzb25FcnJvciwgSnNvblNjaGVtYSB9IGZyb20gXCJqc29uLXNjaGVtYS1saWJyYXJ5XCI7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBWYWxpZGF0b3JBZGFwdGVyIHtcbiAgYWJzdHJhY3QgdmFsaWRhdGUoc2NoZW1hOiBKc29uU2NoZW1hLCBkYXRhOiBhbnkpOiBQcm9taXNlPEpzb25FcnJvcltdPjtcbn1cbiJdfQ==","import { inject, Injectable, InjectionToken } from '@angular/core';\nimport { injectOpenAiService } from '@nx-ddd/common/infrastructure/externals/openai';\nimport { provideOpenaiService } from '@nx-ddd/common/infrastructure/externals/openai/impl';\nimport { catchError, lastValueFrom, map, of, retry, switchMap, tap } from 'rxjs';\nimport pLimit from 'p-limit';\nimport { ZodSchema } from 'zod';\nimport zodToJsonSchema from 'zod-to-json-schema';\nimport { buildFunctionTool } from '../agent';\nimport { targetConstructorToSchema } from '../impl/json-schema';\nimport { ANY_FUNC_SERVICE } from './any-func.service';\nimport { CacheAdapter } from '../impl/adapters/cache';\nimport { ValidatorAdapter } from '../impl/adapters/validator/validator.adapter';\nimport * as i0 from \"@angular/core\";\nfunction isBrowserFile(obj) {\n return typeof File !== 'undefined' && obj instanceof File;\n}\nconst ANY_FUNC_CONFIG = new InjectionToken('[@nx-ddd/any-func] AnyFuncConfig');\nexport function provideAnyFunc(useFactory) {\n const config = useFactory();\n return [\n { provide: ANY_FUNC_SERVICE, useClass: AnyFuncService },\n { provide: ANY_FUNC_CONFIG, useFactory },\n provideOpenaiService(() => ({ apiKey: config.openaiApiKey, dangerouslyAllowBrowser: config.dangerouslyAllowBrowser })),\n ];\n}\nclass OpenAiMessageHelper {\n static async imageToBase64(imageFile) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => {\n const base64String = reader.result;\n resolve(base64String.split(',')[1]);\n };\n reader.onerror = reject;\n reader.readAsDataURL(imageFile);\n });\n }\n static async buildFilesMessage(files) {\n return await Promise.all(files.map(async (file) => ({\n type: 'image_url',\n image_url: { url: `data:image/jpeg;base64,${await this.imageToBase64(file)}` },\n })));\n }\n}\nexport class AnyFuncService {\n openai = injectOpenAiService();\n config = inject(ANY_FUNC_CONFIG, { optional: true }) ?? { debug: false };\n cache = inject(CacheAdapter);\n validator = inject(ValidatorAdapter);\n /** @deprecated use callByJsonSchema instead */\n async jsonSchema(_input, jsonSchema, options = {}) {\n return this.callByJsonSchema(_input, jsonSchema, options);\n }\n async callByJsonSchema(_input, jsonSchema, { instructions = '', model = 'gpt-4o', specs = [], embeddings = false, sample = 3, temperature = 0, maxRetry = 3, validator = (data) => this.validator.validate(jsonSchema, data), } = {}) {\n for (const spec of specs) {\n const errors = await validator(spec.output);\n if (errors.length > 0) {\n throw new Error(JSON.stringify(errors, null, 2));\n }\n }\n const content = await this.parseInput(_input);\n const sortedSpecs = embeddings ? await this.sort(specs, embeddings, _input) : specs;\n const messages = [\n { role: 'system', content: instructions },\n ...(await this.buildChatMessages(sortedSpecs.slice(0, sample).reverse())),\n { role: 'user', content },\n ];\n return lastValueFrom(of(null).pipe(map(() => messages), switchMap(() => this.complete(_input, jsonSchema, messages, {\n model,\n sample,\n temperature,\n })), tap(message => messages.push(message)), switchMap(async (message) => {\n const toolCall = message.tool_calls[0];\n if (toolCall.type !== 'function') {\n throw new Error('Unexpected tool call type');\n }\n const output = JSON.parse(toolCall.function.arguments);\n console.debug('[AnyFuncService#complete] output:', output);\n const errors = await validator(output);\n console.debug('[AnyFuncService#complete] errors:', errors);\n if (errors.length > 0) {\n messages.push({\n role: 'tool',\n content: JSON.stringify(errors),\n tool_call_id: message.tool_calls[0].id,\n });\n if (this.config.debug) {\n console.debug('messages', JSON.stringify(messages, null, 2));\n }\n throw new Error(JSON.stringify(errors, null, 2));\n }\n else {\n messages.push({\n role: 'tool',\n content: JSON.stringify(output),\n tool_call_id: message.tool_calls[0].id,\n });\n if (this.config.debug) {\n console.debug('messages', JSON.stringify(messages, null, 2));\n }\n }\n return output;\n }), catchError((error) => {\n console.error(error);\n throw error;\n }), retry(maxRetry)));\n // debugPrice(model, res.usage);\n }\n async callByZod(_input, zod, { instructions = '', model = 'gpt-4o', specs = [], embeddings = false, sample = 3, temperature = 0, maxRetry = 3, validator = (data) => this.validator.validate(zodToJsonSchema(zod, { $refStrategy: 'none' }), data), } = {}) {\n return this.jsonSchema(_input, zodToJsonSchema(zod, { $refStrategy: 'none' }), {\n instructions,\n model,\n specs,\n embeddings,\n sample,\n temperature,\n maxRetry,\n validator,\n });\n }\n async callByClassValidator(_input, args, { instructions = '', model = 'gpt-4o', specs = [], embeddings = false, sample = 3, temperature = 0, maxRetry = 3, validator = (data) => this.validator.validate(targetConstructorToSchema(args), data), } = {}) {\n const parameters = targetConstructorToSchema(args);\n console.debug('[AnyFuncService#call] parameters:', parameters);\n return this.jsonSchema(_input, parameters, {\n instructions,\n model,\n specs,\n embeddings,\n sample,\n temperature,\n maxRetry,\n validator,\n });\n }\n async call(_input, args, params = {}) {\n if (args instanceof ZodSchema) {\n return this.callByZod(_input, args, params);\n }\n // class validatorか判定\n if (args instanceof Function) {\n return this.callByClassValidator(_input, args, params);\n }\n if (typeof args === 'object' && args !== null && 'type' in args && args.type === 'object') {\n return this.callByJsonSchema(_input, args, params);\n }\n throw new Error('Invalid args type');\n }\n async complete(_input, jsonSchema, messages, { model = 'gpt-4o', temperature = 0, } = {}) {\n const tool = buildFunctionTool({ name: 'function', description: '', parameters: jsonSchema });\n const props = {\n model,\n messages,\n tools: [tool],\n tool_choice: {\n type: 'function',\n function: { name: 'function' }\n },\n temperature,\n };\n const res = await this.cache.call(props, props => this.openai.chat.completions.create(props));\n return res.choices[0].message;\n }\n async buildChatMessages(specs) {\n const messages = await Promise.all(specs.map(async ({ input, output }) => {\n const parsedInput = await this.parseInput(input);\n return [\n { role: 'user', content: parsedInput },\n {\n role: 'assistant',\n content: null,\n tool_calls: [\n {\n id: 'call-example',\n type: 'function',\n function: {\n name: 'function',\n arguments: JSON.stringify(output),\n }\n }\n ],\n },\n { role: 'tool', content: 'success', tool_call_id: 'call-example' },\n ];\n }));\n return messages.flat();\n }\n async getEmbeddings(item, accessor) {\n const props = { item, model: 'text-embedding-3-small' };\n let embedding = await this.cache.get(props);\n if (embedding)\n return embedding;\n embedding = await this.openai.embeddings.create({\n model: props.model,\n input: accessor(item),\n }).then(res => res.data[0].embedding);\n await this.cache.set(props, embedding);\n return embedding;\n }\n async sort(items, accessor, target) {\n const dist = (a, b) => Math.sqrt(a.reduce((acc, v, i) => acc + (v - b[i]) ** 2, 0));\n const targetEmbeddings = await this.getEmbeddings(target, s => s);\n const limit = pLimit(10);\n const embeddings = await Promise.all(items.map(item => limit(() => this.getEmbeddings(item, accessor))));\n const items_ = items.map((item, i) => ({\n item,\n embedding: embeddings[i],\n distance: dist(embeddings[i], targetEmbeddings),\n }));\n const sorted = items_.sort((a, b) => a.distance - b.distance);\n return sorted.map(({ item }) => item);\n }\n async parseInput(input) {\n if (isBrowserFile(input)) {\n return await OpenAiMessageHelper.buildFilesMessage([input]);\n }\n else if (input === 'string') {\n return input;\n }\n else {\n return JSON.stringify(input);\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: AnyFuncService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: AnyFuncService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: AnyFuncService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW55LWZ1bmMuc2VydmljZS5pbXBsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvQG54LWRkZC9hbnktZnVuYy9zcmMvbGliL2FueS1mdW5jL2FueS1mdW5jLnNlcnZpY2UuaW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDckYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDM0YsT0FBTyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRixPQUFPLE1BQU0sTUFBTSxTQUFTLENBQUM7QUFHN0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUNoQyxPQUFPLGVBQWUsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDN0MsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDOztBQUloRixTQUFTLGFBQWEsQ0FBQyxHQUFZO0lBQ2pDLE9BQU8sT0FBTyxJQUFJLEtBQUssV0FBVyxJQUFJLEdBQUcsWUFBWSxJQUFJLENBQUM7QUFDNUQsQ0FBQztBQWtCRCxNQUFNLGVBQWUsR0FBRyxJQUFJLGNBQWMsQ0FBZ0Isa0NBQWtD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bmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaW5qZWN0T3BlbkFpU2VydmljZSB9IGZyb20gJ0BueC1kZGQvY29tbW9uL2luZnJhc3RydWN0dXJlL2V4dGVybmFscy9vcGVuYWknO1xuaW1wb3J0IHsgcHJvdmlkZU9wZW5haVNlcnZpY2UgfSBmcm9tICdAbngtZGRkL2NvbW1vbi9pbmZyYXN0cnVjdHVyZS9leHRlcm5hbHMvb3BlbmFpL2ltcGwnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbGFzdFZhbHVlRnJvbSwgbWFwLCBvZiwgcmV0cnksIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgcExpbWl0IGZyb20gJ3AtbGltaXQnO1xuaW1wb3J0IHR5cGUgeyBDaGF0Q29tcGxldGlvbk1lc3NhZ2VQYXJhbSwgRnVuY3Rpb25QYXJhbWV0ZXJzIH0gZnJvbSAnb3BlbmFpL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBDbGllbnRPcHRpb25zIH0gZnJvbSAnb3BlbmFpJztcbmltcG9ydCB7IFpvZFNjaGVtYSB9IGZyb20gJ3pvZCc7XG5pbXBvcnQgem9kVG9Kc29uU2NoZW1hIGZyb20gJ3pvZC10by1qc29uLXNjaGVtYSc7XG5pbXBvcnQgeyBidWlsZEZ1bmN0aW9uVG9vbCB9IGZyb20gJy4uL2FnZW50JztcbmltcG9ydCB7IHRhcmdldENvbnN0cnVjdG9yVG9TY2hlbWEgfSBmcm9tICcuLi9pbXBsL2pzb24tc2NoZW1hJztcbmltcG9ydCB7IEFOWV9GVU5DX1NFUlZJQ0UgfSBmcm9tICcuL2FueS1mdW5jLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FjaGVBZGFwdGVyIH0gZnJvbSAnLi4vaW1wbC9hZGFwdGVycy9jYWNoZSc7XG5pbXBvcnQgeyBWYWxpZGF0b3JBZGFwdGVyIH0gZnJvbSAnLi4vaW1wbC9hZGFwdGVycy92YWxpZGF0b3IvdmFsaWRhdG9yLmFkYXB0ZXInO1xuaW1wb3J0IHsgSnNvblNjaGVtYSB9IGZyb20gJ2pzb24tc2NoZW1hLWxpYnJhcnknO1xuXG5cbmZ1bmN0aW9uIGlzQnJvd3NlckZpbGUob2JqOiB1bmtub3duKTogb2JqIGlzIEZpbGUge1xuICByZXR1cm4gdHlwZW9mIEZpbGUgIT09ICd1bmRlZmluZWQnICYmIG9iaiBpbnN0YW5jZW9mIEZpbGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsbE9wdGlvbnM8SSwgTywgUyBleHRlbmRzIHsgaW5wdXQ6IEksIG91dHB1dDogTyB9ID0geyBpbnB1dDogSSwgb3V0cHV0OiBPIH0+IHtcbiAgaW5zdHJ1Y3Rpb25zPzogc3RyaW5nLFxuICBtb2RlbD86IHN0cmluZyxcbiAgc3BlY3M/OiBTW10sXG4gIGVtYmVkZGluZ3M/OiBmYWxzZSB8ICgoc3BlYzogUykgPT4gc3RyaW5nKSxcbiAgc2FtcGxlPzogbnVtYmVyLFxuICB0ZW1wZXJhdHVyZT86IG51bWJlcixcbiAgbWF4UmV0cnk/OiBudW1iZXIsXG4gIHZhbGlkYXRvcj86IChvdXRwdXQ6IE8pID0+IFByb21pc2U8YW55Pixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBbnlGdW5jQ29uZmlnIGV4dGVuZHMgQ2xpZW50T3B0aW9ucyB7XG4gIGRlYnVnOiBib29sZWFuO1xuICBvcGVuYWlBcGlLZXk6IHN0cmluZztcbn1cblxuY29uc3QgQU5ZX0ZVTkNfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPEFueUZ1bmNDb25maWc+KCdbQG54LWRkZC9hbnktZnVuY10gQW55RnVuY0NvbmZpZycpO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUFueUZ1bmModXNlRmFjdG9yeT86ICgpID0+IEFueUZ1bmNDb25maWcpIHtcbiAgY29uc3QgY29uZmlnID0gdXNlRmFjdG9yeSgpO1xuICByZXR1cm4gW1xuICAgIHsgcHJvdmlkZTogQU5ZX0ZVTkNfU0VSVklDRSwgdXNlQ2xhc3M6IEFueUZ1bmNTZXJ2aWNlIH0sXG4gICAgeyBwcm92aWRlOiBBTllfRlVOQ19DT05GSUcsIHVzZUZhY3RvcnkgfSxcbiAgICBwcm92aWRlT3BlbmFpU2VydmljZSgoKSA9PiAoeyBhcGlLZXk6IGNvbmZpZy5vcGVuYWlBcGlLZXksIGRhbmdlcm91c2x5QWxsb3dCcm93c2VyOiBjb25maWcuZGFuZ2Vyb3VzbHlBbGxvd0Jyb3dzZXIgfSkpLFxuICBdXG59XG5cbmNsYXNzIE9wZW5BaU1lc3NhZ2VIZWxwZXIge1xuICBzdGF0aWMgYXN5bmMgaW1hZ2VUb0Jhc2U2NChpbWFnZUZpbGU6IEZpbGUpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgYmFzZTY0U3RyaW5nID0gcmVhZGVyLnJlc3VsdCBhcyBzdHJpbmc7XG4gICAgICAgIHJlc29sdmUoYmFzZTY0U3RyaW5nLnNwbGl0KCcsJylbMV0pO1xuICAgICAgfTtcbiAgICAgIHJlYWRlci5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoaW1hZ2VGaWxlKTtcbiAgICB9KTtcbiAgfVxuICAgIFxuICBzdGF0aWMgYXN5bmMgYnVpbGRGaWxlc01lc3NhZ2UoZmlsZXM6IEZpbGVbXSk6IFByb21pc2U8Q2hhdENvbXBsZXRpb25NZXNzYWdlUGFyYW1bJ2NvbnRlbnQnXT4ge1xuICAgIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChmaWxlcy5tYXAoYXN5bmMgKGZpbGUpID0+ICh7XG4gICAgICB0eXBlOiAnaW1hZ2VfdXJsJyBhcyBjb25zdCxcbiAgICAgIGltYWdlX3VybDogeyB1cmw6IGBkYXRhOmltYWdlL2pwZWc7YmFzZTY0LCR7YXdhaXQgdGhpcy5pbWFnZVRvQmFzZTY0KGZpbGUpfWAgfSxcbiAgICB9KSkpO1xuICB9XG59XG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIEFueUZ1bmNTZXJ2aWNlIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG9wZW5haSA9IGluamVjdE9wZW5BaVNlcnZpY2UoKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbmZpZyA9IGluamVjdChBTllfRlVOQ19DT05GSUcsIHtvcHRpb25hbDogdHJ1ZX0pID8/IHsgZGVidWc6IGZhbHNlIH07XG4gIHByb3RlY3RlZCBjYWNoZSA9IGluamVjdChDYWNoZUFkYXB0ZXIpO1xuICBwcm90ZWN0ZWQgdmFsaWRhdG9yID0gaW5qZWN0KFZhbGlkYXRvckFkYXB0ZXIpO1xuXG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgY2FsbEJ5SnNvblNjaGVtYSBpbnN0ZWFkICovXG4gIGFzeW5jIGpzb25TY2hlbWEoX2lucHV0OiBhbnksIGpzb25TY2hlbWE6IEZ1bmN0aW9uUGFyYW1ldGVycywgb3B0aW9uczogQ2FsbE9wdGlvbnM8YW55LCBhbnk+ID0ge30pOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmNhbGxCeUpzb25TY2hlbWEoX2lucHV0LCBqc29uU2NoZW1hLCBvcHRpb25zKTtcbiAgfVxuXG4gIGFzeW5jIGNhbGxCeUpzb25TY2hlbWEoX2lucHV0OiBhbnksIGpzb25TY2hlbWE6IEZ1bmN0aW9uUGFyYW1ldGVycywge1xuICAgIGluc3RydWN0aW9ucyA9ICcnLFxuICAgIG1vZGVsID0gJ2dwdC00bycsXG4gICAgc3BlY3MgPSBbXSxcbiAgICBlbWJlZGRpbmdzID0gZmFsc2UsXG4gICAgc2FtcGxlID0gMyxcbiAgICB0ZW1wZXJhdHVyZSA9IDAsXG4gICAgbWF4UmV0cnkgPSAzLFxuICAgIHZhbGlkYXRvciA9IChkYXRhOiBhbnkpID0+IHRoaXMudmFsaWRhdG9yLnZhbGlkYXRlKGpzb25TY2hlbWEsIGRhdGEpLFxuICB9OiBDYWxsT3B0aW9uczxhbnksIGFueT4gPSB7fSk6IFByb21pc2U8YW55PiB7XG4gICAgZm9yIChjb25zdCBzcGVjIG9mIHNwZWNzKSB7XG4gICAgICBjb25zdCBlcnJvcnMgPSBhd2FpdCB2YWxpZGF0b3Ioc3BlYy5vdXRwdXQpO1xuICAgICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihKU09OLnN0cmluZ2lmeShlcnJvcnMsIG51bGwsIDIpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgdGhpcy5wYXJzZUlucHV0KF9pbnB1dCk7XG4gICAgY29uc3Qgc29ydGVkU3BlY3MgPSBlbWJlZGRpbmdzID8gYXdhaXQgdGhpcy5zb3J0KHNwZWNzLCBlbWJlZGRpbmdzLCBfaW5wdXQpIDogc3BlY3M7XG4gICAgY29uc3QgbWVzc2FnZXM6IENoYXRDb21wbGV0aW9uTWVzc2FnZVBhcmFtW10gPSBbXG4gICAgICB7IHJvbGU6ICdzeXN0ZW0nLCBjb250ZW50OiBpbnN0cnVjdGlvbnMgfSxcbiAgICAgIC4uLihhd2FpdCB0aGlzLmJ1aWxkQ2hhdE1lc3NhZ2VzKHNvcnRlZFNwZWNzLnNsaWNlKDAsIHNhbXBsZSkucmV2ZXJzZSgpKSksXG4gICAgICB7IHJvbGU6ICd1c2VyJywgY29udGVudCB9LFxuICAgIF07XG4gICAgcmV0dXJuIGxhc3RWYWx1ZUZyb20ob2YobnVsbCkucGlwZShcbiAgICAgIG1hcCgoKSA9PiBtZXNzYWdlcyksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5jb21wbGV0ZShfaW5wdXQsIGpzb25TY2hlbWEsIG1lc3NhZ2VzLCB7XG4gICAgICAgIG1vZGVsLFxuICAgICAgICBzYW1wbGUsXG4gICAgICAgIHRlbXBlcmF0dXJlLFxuICAgICAgfSkpLFxuICAgICAgdGFwKG1lc3NhZ2UgPT4gIG1lc3NhZ2VzLnB1c2gobWVzc2FnZSkpLFxuICAgICAgc3dpdGNoTWFwKGFzeW5jIChtZXNzYWdlKSA9PiB7XG4gICAgICAgIGNvbnN0IHRvb2xDYWxsID0gbWVzc2FnZS50b29sX2NhbGxzIVswXTtcbiAgICAgICAgaWYgKHRvb2xDYWxsLnR5cGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgdG9vbCBjYWxsIHR5cGUnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvdXRwdXQgPSBKU09OLnBhcnNlKHRvb2xDYWxsLmZ1bmN0aW9uLmFyZ3VtZW50cyk7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoJ1tBbnlGdW5jU2VydmljZSNjb21wbGV0ZV0gb3V0cHV0OicsIG91dHB1dCk7XG4gICAgICAgIGNvbnN0IGVycm9ycyA9IGF3YWl0IHZhbGlkYXRvcihvdXRwdXQpO1xuICAgICAgICBjb25zb2xlLmRlYnVnKCdbQW55RnVuY1NlcnZpY2UjY29tcGxldGVdIGVycm9yczonLCBlcnJvcnMpO1xuICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBtZXNzYWdlcy5wdXNoKHtcbiAgICAgICAgICAgIHJvbGU6ICd0b29sJyxcbiAgICAgICAgICAgIGNvbnRlbnQ6IEpTT04uc3RyaW5naWZ5KGVycm9ycyksXG4gICAgICAgICAgICB0b29sX2NhbGxfaWQ6IG1lc3NhZ2UudG9vbF9jYWxscyFbMF0uaWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKHRoaXMuY29uZmlnLmRlYnVnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKCdtZXNzYWdlcycsIEpTT04uc3RyaW5naWZ5KG1lc3NhZ2VzLCBudWxsLCAyKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEpTT04uc3RyaW5naWZ5KGVycm9ycywgbnVsbCwgMikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1lc3NhZ2VzLnB1c2goe1xuICAgICAgICAgICAgcm9sZTogJ3Rvb2wnLFxuICAgICAgICAgICAgY29udGVudDogSlNPTi5zdHJpbmdpZnkob3V0cHV0KSxcbiAgICAgICAgICAgIHRvb2xfY2FsbF9pZDogbWVzc2FnZS50b29sX2NhbGxzIVswXS5pZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAodGhpcy5jb25maWcuZGVidWcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ21lc3NhZ2VzJywgSlNPTi5zdHJpbmdpZnkobWVzc2FnZXMsIG51bGwsIDIpKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9KSxcbiAgICAgIHJldHJ5KG1heFJldHJ5KSxcbiAgICApKTtcbiAgICAvLyBkZWJ1Z1ByaWNlKG1vZGVsLCByZXMudXNhZ2UpO1xuICB9XG5cbiAgYXN5bmMgY2FsbEJ5Wm9kPEksIE8+KF9pbnB1dDogSSwgem9kOiBab2RTY2hlbWE8Tz4sIHtcbiAgICBpbnN0cnVjdGlvbnMgPSAnJyxcbiAgICBtb2RlbCA9ICdncHQtNG8nLFxuICAgIHNwZWNzID0gW10sXG4gICAgZW1iZWRkaW5ncyA9IGZhbHNlLFxuICAgIHNhbXBsZSA9IDMsXG4gICAgdGVtcGVyYXR1cmUgPSAwLFxuICAgIG1heFJldHJ5ID0gMyxcbiAgICB2YWxpZGF0b3IgPSAoZGF0YTogYW55KSA9PiB0aGlzLnZhbGlkYXRvci52YWxpZGF0ZSh6b2RUb0pzb25TY2hlbWEoem9kIGFzIGFueSwgeyAkcmVmU3RyYXRlZ3k6ICdub25lJyB9KSwgZGF0YSksXG4gIH06IENhbGxPcHRpb25zPEksIE8+ID0ge30pOiBQcm9taXNlPE8+IHtcbiAgICByZXR1cm4gdGhpcy5qc29uU2NoZW1hKF9pbnB1dCwgem9kVG9Kc29uU2NoZW1hKHpvZCBhcyBhbnksIHsgJHJlZlN0cmF0ZWd5OiAnbm9uZScgfSksIHtcbiAgICAgIGluc3RydWN0aW9ucyxcbiAgICAgIG1vZGVsLFxuICAgICAgc3BlY3MsXG4gICAgICBlbWJlZGRpbmdzLFxuICAgICAgc2FtcGxlLFxuICAgICAgdGVtcGVyYXR1cmUsXG4gICAgICBtYXhSZXRyeSxcbiAgICAgIHZhbGlkYXRvcixcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGNhbGxCeUNsYXNzVmFsaWRhdG9yPEksIE8+KF9pbnB1dDogSSwgYXJnczoge25ldyAoKTogT30sIHtcbiAgICBpbnN0cnVjdGlvbnMgPSAnJyxcbiAgICBtb2RlbCA9ICdncHQtNG8nLFxuICAgIHNwZWNzID0gW10sXG4gICAgZW1iZWRkaW5ncyA9IGZhbHNlLFxuICAgIHNhbXBsZSA9IDMsXG4gICAgdGVtcGVyYXR1cmUgPSAwLFxuICAgIG1heFJldHJ5ID0gMyxcbiAgICB2YWxpZGF0b3IgPSAoZGF0YTogYW55KSA9PiB0aGlzLnZhbGlkYXRvci52YWxpZGF0ZSh0YXJnZXRDb25zdHJ1Y3RvclRvU2NoZW1hKGFyZ3MpLCBkYXRhKSxcbiAgfTogQ2FsbE9wdGlvbnM8SSwgTz4gPSB7fSk6IFByb21pc2U8Tz4ge1xuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSB0YXJnZXRDb25zdHJ1Y3RvclRvU2NoZW1hKGFyZ3MpIGFzIEZ1bmN0aW9uUGFyYW1ldGVycztcbiAgICBjb25zb2xlLmRlYnVnKCdbQW55RnVuY1NlcnZpY2UjY2FsbF0gcGFyYW1ldGVyczonLCBwYXJhbWV0ZXJzKTtcbiAgICByZXR1cm4gdGhpcy5qc29uU2NoZW1hKF9pbnB1dCwgcGFyYW1ldGVycywge1xuICAgICAgaW5zdHJ1Y3Rpb25zLFxuICAgICAgbW9kZWwsXG4gICAgICBzcGVjcyxcbiAgICAgIGVtYmVkZGluZ3MsXG4gICAgICBzYW1wbGUsXG4gICAgICB0ZW1wZXJhdHVyZSxcbiAgICAgIG1heFJldHJ5LFxuICAgICAgdmFsaWRhdG9yLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgY2FsbDxJLCBPPihfaW5wdXQ6IEksIGFyZ3M6IHtuZXcgKCk6IE99IHwgWm9kU2NoZW1hPE8+IHwgSnNvblNjaGVtYSwgcGFyYW1zOiBDYWxsT3B0aW9uczxJLCBPPiA9IHt9KTogUHJvbWlzZTxPPiB7XG4gICAgaWYgKGFyZ3MgaW5zdGFuY2VvZiBab2RTY2hlbWEpIHtcbiAgICAgIHJldHVybiB0aGlzLmNhbGxCeVpvZChfaW5wdXQsIGFyZ3MsIHBhcmFtcyk7XG4gICAgfVxuICAgIC8vIGNsYXNzIHZhbGlkYXRvcuOBi+WIpOWumlxuICAgIGlmIChhcmdzIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLmNhbGxCeUNsYXNzVmFsaWRhdG9yKF9pbnB1dCwgYXJncywgcGFyYW1zKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBhcmdzID09PSAnb2JqZWN0JyAmJiBhcmdzICE9PSBudWxsICYmICd0eXBlJyBpbiBhcmdzICYmIGFyZ3MudHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiB0aGlzLmNhbGxCeUpzb25TY2hlbWEoX2lucHV0LCBhcmdzLCBwYXJhbXMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXJncyB0eXBlJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgY29tcGxldGU8SSwgTz4oXG4gICAgX2lucHV0OiBhbnksXG4gICAganNvblNjaGVtYTogRnVuY3Rpb25QYXJhbWV0ZXJzLFxuICAgIG1lc3NhZ2VzOiBDaGF0Q29tcGxldGlvbk1lc3NhZ2VQYXJhbVtdLFxuICAgIHtcbiAgICAgIG1vZGVsID0gJ2dwdC00bycsXG4gICAgICB0ZW1wZXJhdHVyZSA9IDAsXG4gICAgfTogQ2FsbE9wdGlvbnM8SSwgTz4gJiB7ZnVuY3Rpb25PdXRwdXQ/OiBvYmplY3R9ID0ge31cbiAgKSB7XG4gICAgXG4gICAgY29uc3QgdG9vbCA9IGJ1aWxkRnVuY3Rpb25Ub29sKHtuYW1lOiAnZnVuY3Rpb24nLCBkZXNjcmlwdGlvbjogJycsIHBhcmFtZXRlcnM6IGpzb25TY2hlbWF9KTtcbiAgICBjb25zdCBwcm9wcyA9IHtcbiAgICAgIG1vZGVsLFxuICAgICAgbWVzc2FnZXMsXG4gICAgICB0b29sczogWyB0b29sIF0sXG4gICAgICB0b29sX2Nob2ljZToge1xuICAgICAgICB0eXBlOiAnZnVuY3Rpb24nIGFzIGNvbnN0LFxuICAgICAgICBmdW5jdGlvbjogeyBuYW1lOiAnZnVuY3Rpb24nIH1cbiAgICAgIH0sXG4gICAgICB0ZW1wZXJhdHVyZSxcbiAgICB9O1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuY2FjaGUuY2FsbChwcm9wcywgcHJvcHMgPT4gdGhpcy5vcGVuYWkuY2hhdC5jb21wbGV0aW9ucy5jcmVhdGUocHJvcHMpKTtcbiAgICByZXR1cm4gcmVzLmNob2ljZXNbMF0ubWVzc2FnZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZENoYXRNZXNzYWdlcyhzcGVjczoge1xuICAgIGlucHV0OiBhbnk7XG4gICAgb3V0cHV0OiBhbnk7XG4gIH1bXSk6IFByb21pc2U8e3JvbGU6ICdhc3Npc3RhbnQnIHwgJ3VzZXInLCBjb250ZW50OiBzdHJpbmd9W10+IHtcbiAgICBjb25zdCBtZXNzYWdlcyA9IGF3YWl0IFByb21pc2UuYWxsKHNwZWNzLm1hcChhc3luYyAoeyBpbnB1dCwgb3V0cHV0IH0pID0+IHtcbiAgICAgIGNvbnN0IHBhcnNlZElucHV0ID0gYXdhaXQgdGhpcy5wYXJzZUlucHV0KGlucHV0KTtcbiAgICAgIHJldHVybiA8Q2hhdENvbXBsZXRpb25NZXNzYWdlUGFyYW1bXT5bXG4gICAgICAgIHsgcm9sZTogJ3VzZXInLCBjb250ZW50OiBwYXJzZWRJbnB1dCB9LFxuICAgICAgICB7XG4gICAgICAgICAgcm9sZTogJ2Fzc2lzdGFudCcsXG4gICAgICAgICAgY29udGVudDogbnVsbCxcbiAgICAgICAgICB0b29sX2NhbGxzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlkOiAnY2FsbC1leGFtcGxlJyxcbiAgICAgICAgICAgICAgdHlwZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgICAgICAgZnVuY3Rpb246IHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICAgICAgICAgIGFyZ3VtZW50czogSlNPTi5zdHJpbmdpZnkob3V0cHV0KSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHsgcm9sZTogJ3Rvb2wnLCBjb250ZW50OiAnc3VjY2VzcycsIHRvb2xfY2FsbF9pZDogJ2NhbGwtZXhhbXBsZScgfSxcbiAgICAgIF07XG4gICAgfSkpXG4gICAgcmV0dXJuIG1lc3NhZ2VzLmZsYXQoKSBhcyB7cm9sZTogJ2Fzc2lzdGFudCcgfCAndXNlcicsIGNvbnRlbnQ6IHN0cmluZ31bXTtcbiAgfVxuXG4gIGFzeW5jIGdldEVtYmVkZGluZ3M8VD4oaXRlbTogVCwgYWNjZXNzb3I6IChpdGVtOiBUKSA9PiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcltdPiB7XG4gICAgY29uc3QgcHJvcHMgPSB7IGl0ZW0sIG1vZGVsOiAndGV4dC1lbWJlZGRpbmctMy1zbWFsbCcgfTtcbiAgICBsZXQgZW1iZWRkaW5nID0gYXdhaXQgdGhpcy5jYWNoZS5nZXQ8bnVtYmVyW10+KHByb3BzKTtcbiAgICBpZiAoZW1iZWRkaW5nKSByZXR1cm4gZW1iZWRkaW5nO1xuICAgIGVtYmVkZGluZyA9IGF3YWl0IHRoaXMub3BlbmFpLmVtYmVkZGluZ3MuY3JlYXRlKHtcbiAgICAgIG1vZGVsOiBwcm9wcy5tb2RlbCxcbiAgICAgIGlucHV0OiBhY2Nlc3NvcihpdGVtKSxcbiAgICB9KS50aGVuKHJlcyA9PiByZXMuZGF0YVswXS5lbWJlZGRpbmcpO1xuICAgIGF3YWl0IHRoaXMuY2FjaGUuc2V0KHByb3BzLCBlbWJlZGRpbmcpO1xuICAgIHJldHVybiBlbWJlZGRpbmc7XG4gIH1cblxuICBhc3luYyBzb3J0PFQ+KGl0ZW1zOiBUW10sIGFjY2Vzc29yOiAoaXRlbTogVCkgPT4gc3RyaW5nLCB0YXJnZXQ6IHN0cmluZyk6IFByb21pc2U8VFtdPiB7XG4gICAgY29uc3QgZGlzdCA9IChhOiBudW1iZXJbXSwgYjogbnVtYmVyW10pID0+IE1hdGguc3FydChhLnJlZHVjZSgoYWNjLCB2LCBpKSA9PiBhY2MgKyAodiAtIGJbaV0pICoqIDIsIDApKTtcbiAgICBjb25zdCB0YXJnZXRFbWJlZGRpbmdzID0gYXdhaXQgdGhpcy5nZXRFbWJlZGRpbmdzKHRhcmdldCwgcyA9PiBzKTtcbiAgICBjb25zdCBsaW1pdCA9IHBMaW1pdCgxMCk7XG4gICAgY29uc3QgZW1iZWRkaW5ncyA9IGF3YWl0IFByb21pc2UuYWxsKGl0ZW1zLm1hcChpdGVtID0+IGxpbWl0KCgpID0+IHRoaXMuZ2V0RW1iZWRkaW5ncyhpdGVtLCBhY2Nlc3NvcikpKSk7XG4gICAgY29uc3QgaXRlbXNfID0gaXRlbXMubWFwKChpdGVtLCBpKSA9PiAoe1xuICAgICAgaXRlbSxcbiAgICAgIGVtYmVkZGluZzogZW1iZWRkaW5nc1tpXSxcbiAgICAgIGRpc3RhbmNlOiBkaXN0KGVtYmVkZGluZ3NbaV0sIHRhcmdldEVtYmVkZGluZ3MpLFxuICAgIH0pKTtcbiAgICBjb25zdCBzb3J0ZWQgPSBpdGVtc18uc29ydCgoYSwgYikgPT4gYS5kaXN0YW5jZSAtIGIuZGlzdGFuY2UpO1xuICAgIHJldHVybiBzb3J0ZWQubWFwKCh7aXRlbX0pID0+IGl0ZW0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwYXJzZUlucHV0KGlucHV0OiBhbnkpIHtcbiAgICBpZiAoaXNCcm93c2VyRmlsZShpbnB1dCkpIHtcbiAgICAgIHJldHVybiBhd2FpdCBPcGVuQWlNZXNzYWdlSGVscGVyLmJ1aWxkRmlsZXNNZXNzYWdlKFtpbnB1dF0pO1xuICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShpbnB1dCk7XG4gICAgfVxuICB9XG59XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibngtZGRkLWFueS1mdW5jLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvQG54LWRkZC9hbnktZnVuYy9zcmMvbGliL254LWRkZC1hbnktZnVuYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":["_targetConstructorToSchema"],"mappings":"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"}
|