| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
|
|
| import {RunnableConfig} from '../../../../src/core/context.js';
|
| import {Runnable} from '../../../../src/index.js';
|
| import {BaseCallback} from '../../../../src/utils/callbacks.js';
|
|
|
|
|
| class TagLoggerCallback extends BaseCallback {
|
| constructor(name) {
|
| super();
|
| this.name = name;
|
| }
|
|
|
| async onStart(runnable, input, config) {
|
| console.log(`[${this.name}] Starting ${runnable.constructor.name}`);
|
| console.log(` Tags: [${config.tags.join(', ')}]`);
|
| console.log(` Callback count: ${config.callbacks.length}`);
|
| }
|
|
|
| async onEnd(runnable, output, config) {
|
| console.log(`[${this.name}] Completed ${runnable.constructor.name}`);
|
| }
|
| }
|
|
|
|
|
| class Step1Runnable extends Runnable {
|
| async _call(input, config) {
|
| console.log('\n--- Inside Step1 ---');
|
|
|
| const childConfig = config.child({ tags: ['step1'] });
|
|
|
| console.log(`Step1 child has ${childConfig.callbacks.length} callbacks`);
|
|
|
|
|
| return `Step1(${input})`;
|
| }
|
| }
|
|
|
| class Step2Runnable extends Runnable {
|
| async _call(input, config) {
|
| console.log('\n--- Inside Step2 ---');
|
|
|
| const childConfig = config.child({ tags: ['step2'] });
|
|
|
| console.log(`Step2 child has ${childConfig.callbacks.length} callbacks`);
|
|
|
| return `Step2(${input})`;
|
| }
|
| }
|
|
|
| class Step3Runnable extends Runnable {
|
| async _call(input, config) {
|
| console.log('\n--- Inside Step3 ---');
|
|
|
| const childConfig = config.child({
|
| tags: ['step3'],
|
| metadata: { nested: true }
|
| });
|
|
|
| console.log(`Step3 tags: [${childConfig.tags.join(', ')}]`);
|
| console.log(`Step3 metadata:`, childConfig.metadata);
|
|
|
| return `Step3(${input})`;
|
| }
|
| }
|
|
|
| async function exercise() {
|
| console.log('=== Exercise 15: Config Merging and Child Configs ===\n');
|
|
|
|
|
| console.log('--- Part 1: Basic Inheritance ---\n');
|
|
|
| const parentConfig = new RunnableConfig({
|
| callbacks: [new TagLoggerCallback('Parent')],
|
| tags: ['base']
|
| });
|
|
|
| const childConfig = parentConfig.child({
|
| callbacks: [new TagLoggerCallback('Child')],
|
| tags: ['child']
|
| });
|
|
|
| console.log('Parent callbacks:', parentConfig.callbacks.length);
|
| console.log('Child callbacks:', childConfig.callbacks.length);
|
| console.log('Parent tags:', parentConfig.tags);
|
| console.log('Child tags:', childConfig.tags);
|
|
|
|
|
| console.log('\n--- Part 2: Config in Pipelines ---\n');
|
|
|
| const pipelineConfig = new RunnableConfig({
|
| callbacks: [new TagLoggerCallback('Pipeline')],
|
| tags: ['base']
|
| });
|
|
|
| const step1 = new Step1Runnable();
|
| const step2 = new Step2Runnable();
|
| const pipeline = step1.pipe(step2);
|
|
|
| await pipeline.invoke("test", pipelineConfig);
|
|
|
|
|
| console.log('\n--- Part 3: Multiple Nesting Levels ---\n');
|
|
|
| const level1Config = new RunnableConfig({
|
| callbacks: [new TagLoggerCallback('Level1')],
|
| tags: ['level1'],
|
| metadata: {level: 1}
|
| });
|
|
|
| const level2Config = level1Config.child({
|
| callbacks: [new TagLoggerCallback('Level2')],
|
| tags: ['level2'],
|
| metadata: {level: 2}
|
| });
|
|
|
| const level3Config = level2Config.child({
|
| callbacks: [new TagLoggerCallback('Level3')],
|
| tags: ['level3'],
|
| metadata: {level: 3}
|
| });
|
|
|
| console.log('Level 1 - Callbacks:', level1Config.callbacks.length, 'Tags:', level1Config.tags);
|
| console.log('Level 2 - Callbacks:', level2Config.callbacks.length, 'Tags:', level2Config.tags);
|
| console.log('Level 3 - Callbacks:', level3Config.callbacks.length, 'Tags:', level3Config.tags);
|
|
|
|
|
| console.log('\n--- Part 4: merge() vs child() ---\n');
|
|
|
| const configA = new RunnableConfig({
|
| tags: ['a'],
|
| metadata: {source: 'A'}
|
| });
|
|
|
| const configB = new RunnableConfig({
|
| tags: ['b'],
|
| metadata: {source: 'B', extra: 'data'}
|
| });
|
|
|
| const merged = configA.merge(configB);
|
|
|
| const child = configA.child({
|
| tags: ['b'],
|
| metadata: { extra: 'data' }
|
| });
|
|
|
| console.log('Merged metadata:', merged.metadata);
|
| console.log('Child metadata:', child.metadata);
|
|
|
| console.log('\n✓ Exercise 15 complete!');
|
| }
|
|
|
|
|
| exercise().catch(console.error);
|
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |