@agtlantis/core 0.4.1 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/errors/index.d.ts +4 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +3 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/errors/types.d.ts +69 -0
- package/dist/errors/types.d.ts.map +1 -0
- package/dist/errors/types.js +119 -0
- package/dist/errors/types.js.map +1 -0
- package/dist/errors/utils.d.ts +17 -0
- package/dist/errors/utils.d.ts.map +1 -0
- package/dist/errors/utils.js +16 -0
- package/dist/errors/utils.js.map +1 -0
- package/dist/execution/constants.d.ts +7 -0
- package/dist/execution/constants.d.ts.map +1 -0
- package/dist/execution/constants.js +7 -0
- package/dist/execution/constants.js.map +1 -0
- package/dist/execution/index.d.ts +8 -0
- package/dist/execution/index.d.ts.map +1 -0
- package/dist/execution/index.js +7 -0
- package/dist/execution/index.js.map +1 -0
- package/dist/execution/mapping.d.ts +17 -0
- package/dist/execution/mapping.d.ts.map +1 -0
- package/dist/execution/mapping.js +197 -0
- package/dist/execution/mapping.js.map +1 -0
- package/dist/execution/shared.d.ts +86 -0
- package/dist/execution/shared.d.ts.map +1 -0
- package/dist/execution/shared.js +100 -0
- package/dist/execution/shared.js.map +1 -0
- package/dist/execution/simple-host.d.ts +56 -0
- package/dist/execution/simple-host.d.ts.map +1 -0
- package/dist/execution/simple-host.js +126 -0
- package/dist/execution/simple-host.js.map +1 -0
- package/dist/execution/streaming-host.d.ts +79 -0
- package/dist/execution/streaming-host.d.ts.map +1 -0
- package/dist/execution/streaming-host.js +276 -0
- package/dist/execution/streaming-host.js.map +1 -0
- package/dist/execution/testing/fixtures.d.ts +67 -0
- package/dist/execution/testing/fixtures.d.ts.map +1 -0
- package/dist/execution/testing/fixtures.js +145 -0
- package/dist/execution/testing/fixtures.js.map +1 -0
- package/dist/execution/testing/helpers.d.ts +218 -0
- package/dist/execution/testing/helpers.d.ts.map +1 -0
- package/dist/execution/testing/helpers.js +327 -0
- package/dist/execution/testing/helpers.js.map +1 -0
- package/dist/execution/testing/host-configs.d.ts +56 -0
- package/dist/execution/testing/host-configs.d.ts.map +1 -0
- package/dist/execution/testing/host-configs.js +154 -0
- package/dist/execution/testing/host-configs.js.map +1 -0
- package/dist/execution/testing/vitest-assertions.d.ts +102 -0
- package/dist/execution/testing/vitest-assertions.d.ts.map +1 -0
- package/dist/execution/testing/vitest-assertions.js +142 -0
- package/dist/execution/testing/vitest-assertions.js.map +1 -0
- package/dist/execution/types.d.ts +432 -0
- package/dist/execution/types.d.ts.map +1 -0
- package/dist/execution/types.js +2 -0
- package/dist/execution/types.js.map +1 -0
- package/dist/execution/utils.d.ts +68 -0
- package/dist/execution/utils.d.ts.map +1 -0
- package/dist/execution/utils.js +93 -0
- package/dist/execution/utils.js.map +1 -0
- package/dist/index.d.ts +10 -1502
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -3081
- package/dist/index.js.map +1 -1
- package/dist/observability/index.d.ts +4 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +2 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/logger.d.ts +161 -0
- package/dist/observability/logger.d.ts.map +1 -0
- package/dist/observability/logger.js +31 -0
- package/dist/observability/logger.js.map +1 -0
- package/dist/observability/types.d.ts +46 -0
- package/dist/observability/types.d.ts.map +1 -0
- package/dist/observability/types.js +2 -0
- package/dist/observability/types.js.map +1 -0
- package/dist/patterns/index.d.ts +2 -0
- package/dist/patterns/index.d.ts.map +1 -0
- package/dist/patterns/index.js +2 -0
- package/dist/patterns/index.js.map +1 -0
- package/dist/patterns/progressive/index.d.ts +2 -0
- package/dist/patterns/progressive/index.d.ts.map +1 -0
- package/dist/patterns/progressive/index.js +2 -0
- package/dist/patterns/progressive/index.js.map +1 -0
- package/dist/patterns/progressive/progressive-pattern.d.ts +174 -0
- package/dist/patterns/progressive/progressive-pattern.d.ts.map +1 -0
- package/dist/patterns/progressive/progressive-pattern.js +260 -0
- package/dist/patterns/progressive/progressive-pattern.js.map +1 -0
- package/dist/pricing/calculator.d.ts +71 -0
- package/dist/pricing/calculator.d.ts.map +1 -0
- package/dist/pricing/calculator.js +127 -0
- package/dist/pricing/calculator.js.map +1 -0
- package/dist/pricing/config.d.ts +61 -0
- package/dist/pricing/config.d.ts.map +1 -0
- package/dist/pricing/config.js +87 -0
- package/dist/pricing/config.js.map +1 -0
- package/dist/pricing/defaults.d.ts +29 -0
- package/dist/pricing/defaults.d.ts.map +1 -0
- package/dist/pricing/defaults.js +139 -0
- package/dist/pricing/defaults.js.map +1 -0
- package/dist/pricing/index.d.ts +40 -0
- package/dist/pricing/index.d.ts.map +1 -0
- package/dist/pricing/index.js +43 -0
- package/dist/pricing/index.js.map +1 -0
- package/dist/pricing/types.d.ts +96 -0
- package/dist/pricing/types.d.ts.map +1 -0
- package/dist/pricing/types.js +7 -0
- package/dist/pricing/types.js.map +1 -0
- package/dist/pricing/validator.d.ts +55 -0
- package/dist/pricing/validator.d.ts.map +1 -0
- package/dist/pricing/validator.js +84 -0
- package/dist/pricing/validator.js.map +1 -0
- package/dist/prompt/errors.d.ts +112 -0
- package/dist/prompt/errors.d.ts.map +1 -0
- package/dist/prompt/errors.js +175 -0
- package/dist/prompt/errors.js.map +1 -0
- package/dist/prompt/file-prompt-repository.d.ts +80 -0
- package/dist/prompt/file-prompt-repository.d.ts.map +1 -0
- package/dist/prompt/file-prompt-repository.js +287 -0
- package/dist/prompt/file-prompt-repository.js.map +1 -0
- package/dist/prompt/index.d.ts +34 -0
- package/dist/prompt/index.d.ts.map +1 -0
- package/dist/prompt/index.js +37 -0
- package/dist/prompt/index.js.map +1 -0
- package/dist/prompt/prompt-template.d.ts +64 -0
- package/dist/prompt/prompt-template.d.ts.map +1 -0
- package/dist/prompt/prompt-template.js +90 -0
- package/dist/prompt/prompt-template.js.map +1 -0
- package/dist/prompt/template.d.ts +23 -0
- package/dist/prompt/template.d.ts.map +1 -0
- package/dist/prompt/template.js +70 -0
- package/dist/prompt/template.js.map +1 -0
- package/dist/prompt/types.d.ts +148 -0
- package/dist/prompt/types.d.ts.map +1 -0
- package/dist/prompt/types.js +7 -0
- package/dist/prompt/types.js.map +1 -0
- package/dist/provider/base-provider.d.ts +41 -0
- package/dist/provider/base-provider.d.ts.map +1 -0
- package/dist/provider/base-provider.js +21 -0
- package/dist/provider/base-provider.js.map +1 -0
- package/dist/provider/file-cache.d.ts +14 -0
- package/dist/provider/file-cache.d.ts.map +1 -0
- package/dist/provider/file-cache.js +29 -0
- package/dist/provider/file-cache.js.map +1 -0
- package/dist/provider/file-source.d.ts +32 -0
- package/dist/provider/file-source.d.ts.map +1 -0
- package/dist/provider/file-source.js +180 -0
- package/dist/provider/file-source.js.map +1 -0
- package/dist/provider/google/factory.d.ts +107 -0
- package/dist/provider/google/factory.d.ts.map +1 -0
- package/dist/provider/google/factory.js +143 -0
- package/dist/provider/google/factory.js.map +1 -0
- package/dist/provider/google/file-manager.d.ts +14 -0
- package/dist/provider/google/file-manager.d.ts.map +1 -0
- package/dist/provider/google/file-manager.js +183 -0
- package/dist/provider/google/file-manager.js.map +1 -0
- package/dist/provider/google/index.d.ts +8 -0
- package/dist/provider/google/index.d.ts.map +1 -0
- package/dist/provider/google/index.js +10 -0
- package/dist/provider/google/index.js.map +1 -0
- package/dist/provider/hash.d.ts +3 -0
- package/dist/provider/hash.d.ts.map +1 -0
- package/dist/provider/hash.js +34 -0
- package/dist/provider/hash.js.map +1 -0
- package/dist/provider/index.d.ts +9 -0
- package/dist/provider/index.d.ts.map +1 -0
- package/dist/provider/index.js +11 -0
- package/dist/provider/index.js.map +1 -0
- package/dist/provider/noop-file-manager.d.ts +9 -0
- package/dist/provider/noop-file-manager.d.ts.map +1 -0
- package/dist/provider/noop-file-manager.js +28 -0
- package/dist/provider/noop-file-manager.js.map +1 -0
- package/dist/provider/openai/factory.d.ts +67 -0
- package/dist/provider/openai/factory.d.ts.map +1 -0
- package/dist/provider/openai/factory.js +95 -0
- package/dist/provider/openai/factory.js.map +1 -0
- package/dist/provider/openai/index.d.ts +7 -0
- package/dist/provider/openai/index.d.ts.map +1 -0
- package/dist/provider/openai/index.js +7 -0
- package/dist/provider/openai/index.js.map +1 -0
- package/dist/provider/types.d.ts +105 -0
- package/dist/provider/types.d.ts.map +1 -0
- package/dist/provider/types.js +19 -0
- package/dist/provider/types.js.map +1 -0
- package/dist/session/index.d.ts +7 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +5 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/simple-session.d.ts +98 -0
- package/dist/session/simple-session.d.ts.map +1 -0
- package/dist/session/simple-session.js +299 -0
- package/dist/session/simple-session.js.map +1 -0
- package/dist/session/streaming-session.d.ts +90 -0
- package/dist/session/streaming-session.d.ts.map +1 -0
- package/dist/session/streaming-session.js +151 -0
- package/dist/session/streaming-session.js.map +1 -0
- package/dist/session/test-utils.d.ts +19 -0
- package/dist/session/test-utils.d.ts.map +1 -0
- package/dist/session/test-utils.js +65 -0
- package/dist/session/test-utils.js.map +1 -0
- package/dist/session/types.d.ts +219 -0
- package/dist/session/types.d.ts.map +1 -0
- package/dist/session/types.js +181 -0
- package/dist/session/types.js.map +1 -0
- package/dist/session/usage-extractors.d.ts +7 -0
- package/dist/session/usage-extractors.d.ts.map +1 -0
- package/dist/session/usage-extractors.js +71 -0
- package/dist/session/usage-extractors.js.map +1 -0
- package/dist/testing/fixtures.d.ts +34 -0
- package/dist/testing/fixtures.d.ts.map +1 -0
- package/dist/testing/fixtures.js +65 -0
- package/dist/testing/fixtures.js.map +1 -0
- package/dist/testing/helpers.d.ts +20 -0
- package/dist/testing/helpers.d.ts.map +1 -0
- package/dist/testing/helpers.js +32 -0
- package/dist/testing/helpers.js.map +1 -0
- package/dist/testing/index.d.ts +7 -515
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +21 -2096
- package/dist/testing/index.js.map +1 -1
- package/dist/testing/mock-provider.d.ts +79 -0
- package/dist/testing/mock-provider.d.ts.map +1 -0
- package/dist/testing/mock-provider.js +152 -0
- package/dist/testing/mock-provider.js.map +1 -0
- package/dist/testing/mock.d.ts +29 -0
- package/dist/testing/mock.d.ts.map +1 -0
- package/dist/testing/mock.js +154 -0
- package/dist/testing/mock.js.map +1 -0
- package/dist/testing/test-execution.d.ts +14 -0
- package/dist/testing/test-execution.d.ts.map +1 -0
- package/dist/testing/test-execution.js +108 -0
- package/dist/testing/test-execution.js.map +1 -0
- package/dist/utils/deep-merge.d.ts +6 -0
- package/dist/utils/deep-merge.d.ts.map +1 -0
- package/dist/utils/deep-merge.js +24 -0
- package/dist/utils/deep-merge.js.map +1 -0
- package/dist/validation/errors.d.ts +28 -0
- package/dist/validation/errors.d.ts.map +1 -0
- package/dist/validation/errors.js +39 -0
- package/dist/validation/errors.js.map +1 -0
- package/dist/validation/index.d.ts +5 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +4 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/types.d.ts +49 -0
- package/dist/validation/types.d.ts.map +1 -0
- package/dist/validation/types.js +2 -0
- package/dist/validation/types.js.map +1 -0
- package/dist/validation/validation-history.d.ts +12 -0
- package/dist/validation/validation-history.d.ts.map +1 -0
- package/dist/validation/validation-history.js +29 -0
- package/dist/validation/validation-history.js.map +1 -0
- package/dist/validation/with-validation.d.ts +38 -0
- package/dist/validation/with-validation.d.ts.map +1 -0
- package/dist/validation/with-validation.js +58 -0
- package/dist/validation/with-validation.js.map +1 -0
- package/package.json +72 -78
- package/dist/base-provider-C3mFLNiN.d.cts +0 -1236
- package/dist/base-provider-C3mFLNiN.d.ts +0 -1236
- package/dist/index.cjs +0 -3188
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts +0 -1502
- package/dist/testing/index.cjs +0 -2144
- package/dist/testing/index.cjs.map +0 -1
- package/dist/testing/index.d.cts +0 -516
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simple-session.d.ts","sourceRoot":"","sources":["../../src/session/simple-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
import { generateText as aiGenerateText, streamText as aiStreamText, } from 'ai';
|
|
2
|
+
import { deepMerge } from '../utils/deep-merge.js';
|
|
3
|
+
import { noopLogger } from '../observability/logger.js';
|
|
4
|
+
import { calculateTotalCost } from '../pricing/calculator.js';
|
|
5
|
+
import { SessionSummary, } from './types.js';
|
|
6
|
+
import { mergeUsages, createZeroUsage } from './usage-extractors.js';
|
|
7
|
+
export class SimpleSession {
|
|
8
|
+
defaultLanguageModel;
|
|
9
|
+
modelFactory;
|
|
10
|
+
providerType;
|
|
11
|
+
providerPricing;
|
|
12
|
+
defaultProviderOptions;
|
|
13
|
+
defaultTools;
|
|
14
|
+
defaultGenerationOptions;
|
|
15
|
+
_fileManager;
|
|
16
|
+
logger;
|
|
17
|
+
sessionStartTime;
|
|
18
|
+
signal;
|
|
19
|
+
summary;
|
|
20
|
+
pendingUsagePromises = [];
|
|
21
|
+
onDoneFns = [];
|
|
22
|
+
constructor(options) {
|
|
23
|
+
this.defaultLanguageModel = options.defaultLanguageModel ?? null;
|
|
24
|
+
this.modelFactory = options.modelFactory ?? null;
|
|
25
|
+
this.providerType = options.providerType;
|
|
26
|
+
this.providerPricing = options.providerPricing;
|
|
27
|
+
this.defaultProviderOptions = options.defaultProviderOptions;
|
|
28
|
+
this.defaultTools = options.defaultTools;
|
|
29
|
+
this.defaultGenerationOptions = options.defaultGenerationOptions;
|
|
30
|
+
this._fileManager = options.fileManager;
|
|
31
|
+
this.logger = options.logger ?? noopLogger;
|
|
32
|
+
this.sessionStartTime = options.startTime ?? Date.now();
|
|
33
|
+
this.signal = options.signal;
|
|
34
|
+
this.summary = SessionSummary.empty(this.sessionStartTime);
|
|
35
|
+
}
|
|
36
|
+
getModel(requestedModelId) {
|
|
37
|
+
if (requestedModelId) {
|
|
38
|
+
if (!this.modelFactory) {
|
|
39
|
+
throw new Error(`Model '${requestedModelId}' requested but no modelFactory provided. ` +
|
|
40
|
+
`Either use the default model or configure the provider with modelFactory.`);
|
|
41
|
+
}
|
|
42
|
+
return this.modelFactory(requestedModelId);
|
|
43
|
+
}
|
|
44
|
+
if (!this.defaultLanguageModel) {
|
|
45
|
+
throw new Error('No model specified and no default model set. ' +
|
|
46
|
+
'Either specify a model in the call or configure the provider with withDefaultModel().');
|
|
47
|
+
}
|
|
48
|
+
return this.defaultLanguageModel;
|
|
49
|
+
}
|
|
50
|
+
extractModelId(model) {
|
|
51
|
+
const modelWithId = model;
|
|
52
|
+
if (!modelWithId.modelId) {
|
|
53
|
+
console.warn('[SimpleSession] Model does not have modelId property, using "unknown". ' +
|
|
54
|
+
'This may affect cost tracking accuracy.');
|
|
55
|
+
}
|
|
56
|
+
return modelWithId.modelId ?? 'unknown';
|
|
57
|
+
}
|
|
58
|
+
async generateText(params) {
|
|
59
|
+
const callStartTime = Date.now();
|
|
60
|
+
const { model: requestedModel, providerOptions, tools, ...restParams } = params;
|
|
61
|
+
const languageModel = this.getModel(requestedModel);
|
|
62
|
+
const modelId = this.extractModelId(languageModel);
|
|
63
|
+
const mergedProviderOptions = (this.defaultProviderOptions || providerOptions)
|
|
64
|
+
? deepMerge(this.defaultProviderOptions ?? {}, providerOptions ?? {})
|
|
65
|
+
: undefined;
|
|
66
|
+
const mergedTools = (this.defaultTools || tools)
|
|
67
|
+
? { ...this.defaultTools, ...tools }
|
|
68
|
+
: undefined;
|
|
69
|
+
this.logger.onLLMCallStart?.({
|
|
70
|
+
type: 'llm_call_start',
|
|
71
|
+
callType: 'generateText',
|
|
72
|
+
modelId,
|
|
73
|
+
timestamp: callStartTime,
|
|
74
|
+
request: { params: restParams },
|
|
75
|
+
});
|
|
76
|
+
try {
|
|
77
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
78
|
+
const result = await aiGenerateText({
|
|
79
|
+
...this.defaultGenerationOptions,
|
|
80
|
+
...restParams,
|
|
81
|
+
tools: mergedTools,
|
|
82
|
+
providerOptions: mergedProviderOptions,
|
|
83
|
+
model: languageModel,
|
|
84
|
+
abortSignal: this.signal,
|
|
85
|
+
});
|
|
86
|
+
const callEndTime = Date.now();
|
|
87
|
+
const call = {
|
|
88
|
+
startTime: callStartTime,
|
|
89
|
+
endTime: callEndTime,
|
|
90
|
+
duration: callEndTime - callStartTime,
|
|
91
|
+
usage: result.usage ?? createZeroUsage(),
|
|
92
|
+
type: 'generateText',
|
|
93
|
+
model: modelId,
|
|
94
|
+
provider: this.providerType,
|
|
95
|
+
};
|
|
96
|
+
this.updateSummaryWithLLMCall(call);
|
|
97
|
+
this.logger.onLLMCallEnd?.({
|
|
98
|
+
type: 'llm_call_end',
|
|
99
|
+
callType: 'generateText',
|
|
100
|
+
modelId,
|
|
101
|
+
timestamp: callEndTime,
|
|
102
|
+
response: {
|
|
103
|
+
duration: callEndTime - callStartTime,
|
|
104
|
+
usage: result.usage,
|
|
105
|
+
raw: result,
|
|
106
|
+
},
|
|
107
|
+
});
|
|
108
|
+
return result;
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
const callEndTime = Date.now();
|
|
112
|
+
this.logger.onLLMCallEnd?.({
|
|
113
|
+
type: 'llm_call_end',
|
|
114
|
+
callType: 'generateText',
|
|
115
|
+
modelId,
|
|
116
|
+
timestamp: callEndTime,
|
|
117
|
+
response: {
|
|
118
|
+
duration: callEndTime - callStartTime,
|
|
119
|
+
raw: null,
|
|
120
|
+
error: error instanceof Error ? error : new Error(String(error)),
|
|
121
|
+
},
|
|
122
|
+
});
|
|
123
|
+
throw error;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
streamText(params) {
|
|
127
|
+
const callStartTime = Date.now();
|
|
128
|
+
const { model: requestedModel, providerOptions, tools, ...restParams } = params;
|
|
129
|
+
const languageModel = this.getModel(requestedModel);
|
|
130
|
+
const modelId = this.extractModelId(languageModel);
|
|
131
|
+
const mergedProviderOptions = (this.defaultProviderOptions || providerOptions)
|
|
132
|
+
? deepMerge(this.defaultProviderOptions ?? {}, providerOptions ?? {})
|
|
133
|
+
: undefined;
|
|
134
|
+
const mergedTools = (this.defaultTools || tools)
|
|
135
|
+
? { ...this.defaultTools, ...tools }
|
|
136
|
+
: undefined;
|
|
137
|
+
this.logger.onLLMCallStart?.({
|
|
138
|
+
type: 'llm_call_start',
|
|
139
|
+
callType: 'streamText',
|
|
140
|
+
modelId,
|
|
141
|
+
timestamp: callStartTime,
|
|
142
|
+
request: { params: restParams },
|
|
143
|
+
});
|
|
144
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
145
|
+
const result = aiStreamText({
|
|
146
|
+
...this.defaultGenerationOptions,
|
|
147
|
+
...restParams,
|
|
148
|
+
tools: mergedTools,
|
|
149
|
+
providerOptions: mergedProviderOptions,
|
|
150
|
+
model: languageModel,
|
|
151
|
+
abortSignal: this.signal,
|
|
152
|
+
});
|
|
153
|
+
const usagePromise = Promise.resolve(result.usage).then((usage) => {
|
|
154
|
+
const callEndTime = Date.now();
|
|
155
|
+
const call = {
|
|
156
|
+
startTime: callStartTime,
|
|
157
|
+
endTime: callEndTime,
|
|
158
|
+
duration: callEndTime - callStartTime,
|
|
159
|
+
usage: usage ?? createZeroUsage(),
|
|
160
|
+
type: 'streamText',
|
|
161
|
+
model: modelId,
|
|
162
|
+
provider: this.providerType,
|
|
163
|
+
};
|
|
164
|
+
this.updateSummaryWithLLMCall(call);
|
|
165
|
+
this.logger.onLLMCallEnd?.({
|
|
166
|
+
type: 'llm_call_end',
|
|
167
|
+
callType: 'streamText',
|
|
168
|
+
modelId,
|
|
169
|
+
timestamp: callEndTime,
|
|
170
|
+
response: {
|
|
171
|
+
duration: callEndTime - callStartTime,
|
|
172
|
+
usage,
|
|
173
|
+
raw: result,
|
|
174
|
+
},
|
|
175
|
+
});
|
|
176
|
+
return usage;
|
|
177
|
+
});
|
|
178
|
+
this.pendingUsagePromises.push(usagePromise);
|
|
179
|
+
return result;
|
|
180
|
+
}
|
|
181
|
+
get fileManager() {
|
|
182
|
+
return this._fileManager;
|
|
183
|
+
}
|
|
184
|
+
record(data) {
|
|
185
|
+
this.summary = this.summary.withCustomRecord(data);
|
|
186
|
+
}
|
|
187
|
+
recordToolCall(toolCallSummary) {
|
|
188
|
+
this.summary = this.summary.withToolCall(toolCallSummary);
|
|
189
|
+
}
|
|
190
|
+
recordLLMCall(record) {
|
|
191
|
+
const call = {
|
|
192
|
+
...record,
|
|
193
|
+
type: record.type ?? 'manual',
|
|
194
|
+
};
|
|
195
|
+
this.updateSummaryWithLLMCall(call);
|
|
196
|
+
}
|
|
197
|
+
recordAdditionalCost(cost) {
|
|
198
|
+
this.summary = this.summary.withAdditionalCost({
|
|
199
|
+
...cost,
|
|
200
|
+
timestamp: Date.now(),
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
setMetadata(keyOrData, value) {
|
|
204
|
+
if (typeof keyOrData === 'string') {
|
|
205
|
+
this.summary = this.summary.withMetadata(keyOrData, value);
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
for (const [k, v] of Object.entries(keyOrData)) {
|
|
209
|
+
this.summary = this.summary.withMetadata(k, v);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
updateSummaryWithLLMCall(call) {
|
|
214
|
+
const newCalls = [...this.summary.llmCalls, call];
|
|
215
|
+
const { totalCost: llmCost, costByModel } = calculateTotalCost(newCalls.map((c) => ({ usage: c.usage, model: c.model, provider: c.provider })), this.providerPricing);
|
|
216
|
+
const newTotalUsage = mergeUsages(newCalls.map((c) => c.usage));
|
|
217
|
+
this.summary = this.summary.withLLMCall(call, llmCost, costByModel, newTotalUsage);
|
|
218
|
+
}
|
|
219
|
+
onDone(fn) {
|
|
220
|
+
this.onDoneFns.push(fn);
|
|
221
|
+
}
|
|
222
|
+
async runOnDoneHooks() {
|
|
223
|
+
const reversedHooks = [...this.onDoneFns].reverse();
|
|
224
|
+
for (const fn of reversedHooks) {
|
|
225
|
+
try {
|
|
226
|
+
await fn();
|
|
227
|
+
}
|
|
228
|
+
catch (error) {
|
|
229
|
+
console.error('[SimpleSession] onDone hook error:', error);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
async getSummary() {
|
|
234
|
+
await Promise.all(this.pendingUsagePromises);
|
|
235
|
+
return this.summary;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Notifies Logger of execution start.
|
|
239
|
+
* @internal Called by SimpleExecutionHost - not intended for direct use.
|
|
240
|
+
*/
|
|
241
|
+
notifyExecutionStart() {
|
|
242
|
+
this._logger.onExecutionStart?.({
|
|
243
|
+
type: 'execution_start',
|
|
244
|
+
timestamp: Date.now(),
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Notifies Logger of execution completion with result data and summary.
|
|
249
|
+
* @param data - The execution result data
|
|
250
|
+
* @param startTime - Execution start timestamp for duration calculation
|
|
251
|
+
* @internal Called by SimpleExecutionHost - not intended for direct use.
|
|
252
|
+
*/
|
|
253
|
+
async notifyExecutionDone(data, startTime) {
|
|
254
|
+
const summary = await this.getSummary();
|
|
255
|
+
this._logger.onExecutionDone?.({
|
|
256
|
+
type: 'execution_done',
|
|
257
|
+
timestamp: Date.now(),
|
|
258
|
+
duration: Date.now() - startTime,
|
|
259
|
+
data,
|
|
260
|
+
summary,
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Notifies Logger of execution error with error details and summary (if available).
|
|
265
|
+
* Gracefully handles getSummary() failures - summary will be undefined if it fails.
|
|
266
|
+
* @param error - The error that occurred
|
|
267
|
+
* @param startTime - Execution start timestamp for duration calculation
|
|
268
|
+
* @internal Called by SimpleExecutionHost - not intended for direct use.
|
|
269
|
+
*/
|
|
270
|
+
async notifyExecutionError(error, startTime) {
|
|
271
|
+
let summary;
|
|
272
|
+
try {
|
|
273
|
+
summary = await this.getSummary();
|
|
274
|
+
}
|
|
275
|
+
catch {
|
|
276
|
+
// Ignore summary errors on failure path
|
|
277
|
+
}
|
|
278
|
+
this._logger.onExecutionError?.({
|
|
279
|
+
type: 'execution_error',
|
|
280
|
+
timestamp: Date.now(),
|
|
281
|
+
duration: Date.now() - startTime,
|
|
282
|
+
error,
|
|
283
|
+
summary,
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
get _logger() {
|
|
287
|
+
return this.logger;
|
|
288
|
+
}
|
|
289
|
+
get _startTime() {
|
|
290
|
+
return this.sessionStartTime;
|
|
291
|
+
}
|
|
292
|
+
get _modelId() {
|
|
293
|
+
if (!this.defaultLanguageModel) {
|
|
294
|
+
return 'unknown';
|
|
295
|
+
}
|
|
296
|
+
return this.extractModelId(this.defaultLanguageModel);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
//# sourceMappingURL=simple-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simple-session.js","sourceRoot":"","sources":["../../src/session/simple-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import type { LanguageModel, ToolSet } from 'ai';
|
|
2
|
+
import type { Logger } from '../observability/logger.js';
|
|
3
|
+
import type { FileManager } from '../provider/types.js';
|
|
4
|
+
import type { ProviderType, ProviderPricing } from '../pricing/types.js';
|
|
5
|
+
import type { GenerationOptions, SessionSummary } from './types.js';
|
|
6
|
+
import { SimpleSession } from './simple-session.js';
|
|
7
|
+
import type { SessionEvent, EmittableEventInput, ExtractResult } from '../execution/types.js';
|
|
8
|
+
type ProviderOptions = Record<string, Record<string, unknown>>;
|
|
9
|
+
export interface StreamingSessionOptions {
|
|
10
|
+
defaultLanguageModel?: LanguageModel | null;
|
|
11
|
+
modelFactory?: (modelId: string) => LanguageModel;
|
|
12
|
+
providerType: ProviderType;
|
|
13
|
+
providerPricing?: ProviderPricing;
|
|
14
|
+
fileManager: FileManager;
|
|
15
|
+
logger?: Logger;
|
|
16
|
+
startTime?: number;
|
|
17
|
+
signal?: AbortSignal;
|
|
18
|
+
defaultProviderOptions?: ProviderOptions;
|
|
19
|
+
defaultTools?: ToolSet;
|
|
20
|
+
defaultGenerationOptions?: GenerationOptions;
|
|
21
|
+
}
|
|
22
|
+
export declare class StreamingSession<TEvent extends {
|
|
23
|
+
type: string;
|
|
24
|
+
}> extends SimpleSession {
|
|
25
|
+
private lastEventTime;
|
|
26
|
+
private _terminated;
|
|
27
|
+
constructor(options: StreamingSessionOptions);
|
|
28
|
+
/**
|
|
29
|
+
* Emits a streaming event with automatically attached metrics.
|
|
30
|
+
*
|
|
31
|
+
* Reserved types ('complete', 'error') throw at runtime - use session.done()
|
|
32
|
+
* or session.fail() instead.
|
|
33
|
+
*
|
|
34
|
+
* @param event - The event to emit (metrics will be added automatically)
|
|
35
|
+
* @returns The complete event with metrics attached
|
|
36
|
+
* @throws Error when attempting to emit reserved types ('complete', 'error')
|
|
37
|
+
*/
|
|
38
|
+
emit(event: EmittableEventInput<TEvent>): SessionEvent<TEvent>;
|
|
39
|
+
/**
|
|
40
|
+
* Internal emit method - bypasses reserved type check.
|
|
41
|
+
* Used by done() and fail() to emit terminal events.
|
|
42
|
+
*/
|
|
43
|
+
private emitInternal;
|
|
44
|
+
/**
|
|
45
|
+
* Signals successful completion of the streaming execution.
|
|
46
|
+
* Emits a 'complete' event with the result data and session summary.
|
|
47
|
+
* Also triggers Logger.onExecutionDone for observability.
|
|
48
|
+
* @param data - The final result data
|
|
49
|
+
* @returns The complete event with data and summary
|
|
50
|
+
*/
|
|
51
|
+
done(data: ExtractResult<TEvent>): Promise<SessionEvent<TEvent>>;
|
|
52
|
+
/**
|
|
53
|
+
* Signals that the streaming execution failed with an error.
|
|
54
|
+
* Emits an 'error' event and triggers Logger.onExecutionError for observability.
|
|
55
|
+
* Gracefully handles getSummary() failures - summary will be undefined if it fails.
|
|
56
|
+
* @param error - The error that caused the failure
|
|
57
|
+
* @param data - Optional partial result data (if any was produced before failure)
|
|
58
|
+
* @returns The error event
|
|
59
|
+
*/
|
|
60
|
+
fail(error: Error, data?: ExtractResult<TEvent>): Promise<SessionEvent<TEvent>>;
|
|
61
|
+
private createMetrics;
|
|
62
|
+
}
|
|
63
|
+
export interface StreamingSessionInternal<TEvent extends {
|
|
64
|
+
type: string;
|
|
65
|
+
}> {
|
|
66
|
+
generateText: SimpleSession['generateText'];
|
|
67
|
+
streamText: SimpleSession['streamText'];
|
|
68
|
+
fileManager: FileManager;
|
|
69
|
+
onDone: SimpleSession['onDone'];
|
|
70
|
+
record: SimpleSession['record'];
|
|
71
|
+
recordToolCall: SimpleSession['recordToolCall'];
|
|
72
|
+
emit(event: EmittableEventInput<TEvent>): SessionEvent<TEvent>;
|
|
73
|
+
done(data: ExtractResult<TEvent>): Promise<SessionEvent<TEvent>>;
|
|
74
|
+
fail(error: Error, data?: ExtractResult<TEvent>): Promise<SessionEvent<TEvent>>;
|
|
75
|
+
runOnDoneHooks(): Promise<void>;
|
|
76
|
+
getSummary(): Promise<SessionSummary>;
|
|
77
|
+
}
|
|
78
|
+
export interface CreateStreamingSessionOptions {
|
|
79
|
+
defaultLanguageModel: LanguageModel;
|
|
80
|
+
providerType: ProviderType;
|
|
81
|
+
fileManager: FileManager;
|
|
82
|
+
logger?: Logger;
|
|
83
|
+
startTime?: number;
|
|
84
|
+
signal?: AbortSignal;
|
|
85
|
+
}
|
|
86
|
+
export declare function createStreamingSession<TEvent extends {
|
|
87
|
+
type: string;
|
|
88
|
+
}>(options: CreateStreamingSessionOptions): StreamingSessionInternal<TEvent>;
|
|
89
|
+
export {};
|
|
90
|
+
//# sourceMappingURL=streaming-session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streaming-session.d.ts","sourceRoot":"","sources":["../../src/session/streaming-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { noopLogger } from '../observability/logger.js';
|
|
2
|
+
import { SimpleSession } from './simple-session.js';
|
|
3
|
+
export class StreamingSession extends SimpleSession {
|
|
4
|
+
lastEventTime;
|
|
5
|
+
_terminated = false;
|
|
6
|
+
constructor(options) {
|
|
7
|
+
super({
|
|
8
|
+
defaultLanguageModel: options.defaultLanguageModel,
|
|
9
|
+
modelFactory: options.modelFactory,
|
|
10
|
+
providerType: options.providerType,
|
|
11
|
+
providerPricing: options.providerPricing,
|
|
12
|
+
fileManager: options.fileManager,
|
|
13
|
+
logger: options.logger,
|
|
14
|
+
startTime: options.startTime,
|
|
15
|
+
signal: options.signal,
|
|
16
|
+
defaultProviderOptions: options.defaultProviderOptions,
|
|
17
|
+
defaultTools: options.defaultTools,
|
|
18
|
+
defaultGenerationOptions: options.defaultGenerationOptions,
|
|
19
|
+
});
|
|
20
|
+
this.lastEventTime = this._startTime;
|
|
21
|
+
this._logger.onExecutionStart?.({
|
|
22
|
+
type: 'execution_start',
|
|
23
|
+
timestamp: Date.now(),
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Emits a streaming event with automatically attached metrics.
|
|
28
|
+
*
|
|
29
|
+
* Reserved types ('complete', 'error') throw at runtime - use session.done()
|
|
30
|
+
* or session.fail() instead.
|
|
31
|
+
*
|
|
32
|
+
* @param event - The event to emit (metrics will be added automatically)
|
|
33
|
+
* @returns The complete event with metrics attached
|
|
34
|
+
* @throws Error when attempting to emit reserved types ('complete', 'error')
|
|
35
|
+
*/
|
|
36
|
+
emit(event) {
|
|
37
|
+
if (this._terminated) {
|
|
38
|
+
throw new Error('Session already terminated. Cannot call emit() after a terminal operation.');
|
|
39
|
+
}
|
|
40
|
+
// Runtime check: prevent reserved types even when TypeScript is bypassed
|
|
41
|
+
const eventType = event.type;
|
|
42
|
+
if (eventType === 'complete' || eventType === 'error') {
|
|
43
|
+
throw new Error(`Cannot emit reserved type "${eventType}". ` +
|
|
44
|
+
'Use session.done() for completion or session.fail() for errors.');
|
|
45
|
+
}
|
|
46
|
+
return this.emitInternal(event);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Internal emit method - bypasses reserved type check.
|
|
50
|
+
* Used by done() and fail() to emit terminal events.
|
|
51
|
+
*/
|
|
52
|
+
emitInternal(event) {
|
|
53
|
+
const metrics = this.createMetrics();
|
|
54
|
+
const fullEvent = { ...event, metrics };
|
|
55
|
+
this._logger.onExecutionEmit?.({
|
|
56
|
+
type: 'execution_emit',
|
|
57
|
+
event: fullEvent,
|
|
58
|
+
});
|
|
59
|
+
return fullEvent;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Signals successful completion of the streaming execution.
|
|
63
|
+
* Emits a 'complete' event with the result data and session summary.
|
|
64
|
+
* Also triggers Logger.onExecutionDone for observability.
|
|
65
|
+
* @param data - The final result data
|
|
66
|
+
* @returns The complete event with data and summary
|
|
67
|
+
*/
|
|
68
|
+
async done(data) {
|
|
69
|
+
if (this._terminated) {
|
|
70
|
+
throw new Error('Session already terminated. Cannot call done() after a terminal operation.');
|
|
71
|
+
}
|
|
72
|
+
this._terminated = true;
|
|
73
|
+
const summary = await this.getSummary();
|
|
74
|
+
this._logger.onExecutionDone?.({
|
|
75
|
+
type: 'execution_done',
|
|
76
|
+
timestamp: Date.now(),
|
|
77
|
+
duration: summary.totalDuration,
|
|
78
|
+
data,
|
|
79
|
+
summary,
|
|
80
|
+
});
|
|
81
|
+
// Use emitInternal to bypass reserved type check (internal only)
|
|
82
|
+
return this.emitInternal({
|
|
83
|
+
type: 'complete',
|
|
84
|
+
data,
|
|
85
|
+
summary,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Signals that the streaming execution failed with an error.
|
|
90
|
+
* Emits an 'error' event and triggers Logger.onExecutionError for observability.
|
|
91
|
+
* Gracefully handles getSummary() failures - summary will be undefined if it fails.
|
|
92
|
+
* @param error - The error that caused the failure
|
|
93
|
+
* @param data - Optional partial result data (if any was produced before failure)
|
|
94
|
+
* @returns The error event
|
|
95
|
+
*/
|
|
96
|
+
async fail(error, data) {
|
|
97
|
+
if (this._terminated) {
|
|
98
|
+
throw new Error('Session already terminated. Cannot call fail() after a terminal operation.');
|
|
99
|
+
}
|
|
100
|
+
this._terminated = true;
|
|
101
|
+
let summary;
|
|
102
|
+
try {
|
|
103
|
+
summary = await this.getSummary();
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
// Ignore summary errors on failure path
|
|
107
|
+
}
|
|
108
|
+
this._logger.onExecutionError?.({
|
|
109
|
+
type: 'execution_error',
|
|
110
|
+
timestamp: Date.now(),
|
|
111
|
+
duration: summary?.totalDuration ?? (Date.now() - this._startTime),
|
|
112
|
+
error,
|
|
113
|
+
data,
|
|
114
|
+
summary,
|
|
115
|
+
});
|
|
116
|
+
const errorEvent = {
|
|
117
|
+
type: 'error',
|
|
118
|
+
error,
|
|
119
|
+
};
|
|
120
|
+
if (summary) {
|
|
121
|
+
errorEvent.summary = summary;
|
|
122
|
+
}
|
|
123
|
+
if (data !== undefined) {
|
|
124
|
+
errorEvent.data = data;
|
|
125
|
+
}
|
|
126
|
+
// Use emitInternal to bypass reserved type check (internal only)
|
|
127
|
+
return this.emitInternal(errorEvent);
|
|
128
|
+
}
|
|
129
|
+
createMetrics() {
|
|
130
|
+
const now = Date.now();
|
|
131
|
+
const metrics = {
|
|
132
|
+
timestamp: now,
|
|
133
|
+
elapsedMs: now - this._startTime,
|
|
134
|
+
deltaMs: now - this.lastEventTime,
|
|
135
|
+
};
|
|
136
|
+
this.lastEventTime = now;
|
|
137
|
+
return metrics;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
export function createStreamingSession(options) {
|
|
141
|
+
const session = new StreamingSession({
|
|
142
|
+
defaultLanguageModel: options.defaultLanguageModel,
|
|
143
|
+
providerType: options.providerType,
|
|
144
|
+
fileManager: options.fileManager,
|
|
145
|
+
logger: options.logger ?? noopLogger,
|
|
146
|
+
startTime: options.startTime,
|
|
147
|
+
signal: options.signal,
|
|
148
|
+
});
|
|
149
|
+
return session;
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=streaming-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streaming-session.js","sourceRoot":"","sources":["../../src/session/streaming-session.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAIxD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAmBpD,MAAM,OAAO,gBAAkD,SAAQ,aAAa;IAC1E,aAAa,CAAS;IACtB,WAAW,GAAG,KAAK,CAAC;IAE5B,YAAY,OAAgC,EAAE;QAC5C,KAAK,CAAC;YACJ,oBAAoB,EAAE,OAAO,CAAC,oBAAoB;YAClD,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,sBAAsB,EAAE,OAAO,CAAC,sBAAsB;YACtD,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,wBAAwB,EAAE,OAAO,CAAC,wBAAwB;SAC3D,CAAC,CAAC;QAEH,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC;QAErC,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC9B,IAAI,EAAE,iBAAiB;YACvB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC,CAAC;IAAA,CACJ;IAED;;;;;;;;;OASG;IACH,IAAI,CAAC,KAAkC,EAAwB;QAC7D,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,4EAA4E,CAAC,CAAC;QAChG,CAAC;QAED,yEAAyE;QACzE,MAAM,SAAS,GAAI,KAA0B,CAAC,IAAI,CAAC;QACnD,IAAI,SAAS,KAAK,UAAU,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CACb,8BAA8B,SAAS,KAAK;gBAC5C,iEAAiE,CAClE,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC,YAAY,CAAC,KAAe,CAAC,CAAC;IAAA,CAC3C;IAED;;;OAGG;IACK,YAAY,CAAC,KAAa,EAAwB;QACxD,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACrC,MAAM,SAAS,GAAG,EAAE,GAAG,KAAK,EAAE,OAAO,EAA0B,CAAC;QAEhE,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;YAC7B,IAAI,EAAE,gBAAgB;YACtB,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QAEH,OAAO,SAAS,CAAC;IAAA,CAClB;IAED;;;;;;OAMG;IACH,KAAK,CAAC,IAAI,CAAC,IAA2B,EAAiC;QACrE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,4EAA4E,CAAC,CAAC;QAChG,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAExB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAExC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;YAC7B,IAAI,EAAE,gBAAgB;YACtB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,QAAQ,EAAE,OAAO,CAAC,aAAa;YAC/B,IAAI;YACJ,OAAO;SACR,CAAC,CAAC;QAEH,iEAAiE;QACjE,OAAO,IAAI,CAAC,YAAY,CAAC;YACvB,IAAI,EAAE,UAAU;YAChB,IAAI;YACJ,OAAO;SAC4C,CAAC,CAAC;IAAA,CACxD;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,IAAI,CAAC,KAAY,EAAE,IAA4B,EAAiC;QACpF,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,4EAA4E,CAAC,CAAC;QAChG,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAExB,IAAI,OAAmC,CAAC;QACxC,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACP,wCAAwC;QAC1C,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC9B,IAAI,EAAE,iBAAiB;YACvB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,QAAQ,EAAE,OAAO,EAAE,aAAa,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;YAClE,KAAK;YACL,IAAI;YACJ,OAAO;SACR,CAAC,CAAC;QAEH,MAAM,UAAU,GAA4B;YAC1C,IAAI,EAAE,OAAO;YACb,KAAK;SACN,CAAC;QAEF,IAAI,OAAO,EAAE,CAAC;YACZ,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;QAC/B,CAAC;QAED,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC;QACzB,CAAC;QAED,iEAAiE;QACjE,OAAO,IAAI,CAAC,YAAY,CAAC,UAA2D,CAAC,CAAC;IAAA,CACvF;IAEO,aAAa,GAAiB;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,OAAO,GAAiB;YAC5B,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,GAAG,GAAG,IAAI,CAAC,UAAU;YAChC,OAAO,EAAE,GAAG,GAAG,IAAI,CAAC,aAAa;SAClC,CAAC;QACF,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC;QACzB,OAAO,OAAO,CAAC;IAAA,CAChB;CACF;AA2BD,MAAM,UAAU,sBAAsB,CACpC,OAAsC,EACJ;IAClC,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAS;QAC3C,oBAAoB,EAAE,OAAO,CAAC,oBAAoB;QAClD,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,UAAU;QACpC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,OAAO,OAAsD,CAAC;AAAA,CAC/D"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { vi } from 'vitest';
|
|
2
|
+
import type { LanguageModel, LanguageModelUsage } from 'ai';
|
|
3
|
+
import type { Logger } from '../observability/logger.js';
|
|
4
|
+
import type { FileManager } from '../provider/types.js';
|
|
5
|
+
export declare const TEST_PROVIDER_TYPE: "google";
|
|
6
|
+
export declare function createMockModel(): LanguageModel;
|
|
7
|
+
export declare function createMockFileManager(): FileManager;
|
|
8
|
+
export type MockLogger = Logger & {
|
|
9
|
+
onLLMCallStart: ReturnType<typeof vi.fn>;
|
|
10
|
+
onLLMCallEnd: ReturnType<typeof vi.fn>;
|
|
11
|
+
onExecutionStart: ReturnType<typeof vi.fn>;
|
|
12
|
+
onExecutionEmit: ReturnType<typeof vi.fn>;
|
|
13
|
+
onExecutionDone: ReturnType<typeof vi.fn>;
|
|
14
|
+
onExecutionError: ReturnType<typeof vi.fn>;
|
|
15
|
+
};
|
|
16
|
+
export declare function createMockLogger(): MockLogger;
|
|
17
|
+
export declare function createMockUsage(overrides?: Partial<LanguageModelUsage>): LanguageModelUsage;
|
|
18
|
+
export declare function createTestUsage(partial: Partial<LanguageModelUsage>): LanguageModelUsage;
|
|
19
|
+
//# sourceMappingURL=test-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-utils.d.ts","sourceRoot":"","sources":["../../src/session/test-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC5B,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,IAAI,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,eAAO,MAAM,kBAAkB,UAAoB,CAAC;AAEpD,wBAAgB,eAAe,IAAI,aAAa,CAS/C;AAED,wBAAgB,qBAAqB,IAAI,WAAW,CAOnD;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG;IAChC,cAAc,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IACzC,YAAY,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IACvC,gBAAgB,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IAC3C,eAAe,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IAC1C,eAAe,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IAC1C,gBAAgB,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;CAC5C,CAAC;AAEF,wBAAgB,gBAAgB,IAAI,UAAU,CAS7C;AAED,wBAAgB,eAAe,CAAC,SAAS,GAAE,OAAO,CAAC,kBAAkB,CAAM,GAAG,kBAAkB,CAgB/F;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,kBAAkB,CAgBxF"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { vi } from 'vitest';
|
|
2
|
+
export const TEST_PROVIDER_TYPE = 'google';
|
|
3
|
+
export function createMockModel() {
|
|
4
|
+
return {
|
|
5
|
+
specificationVersion: 'v1',
|
|
6
|
+
provider: 'test-provider',
|
|
7
|
+
modelId: 'test-model',
|
|
8
|
+
defaultObjectGenerationMode: 'json',
|
|
9
|
+
doGenerate: vi.fn(),
|
|
10
|
+
doStream: vi.fn(),
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export function createMockFileManager() {
|
|
14
|
+
return {
|
|
15
|
+
upload: vi.fn().mockResolvedValue([]),
|
|
16
|
+
delete: vi.fn().mockResolvedValue(undefined),
|
|
17
|
+
clear: vi.fn().mockResolvedValue(undefined),
|
|
18
|
+
getUploadedFiles: vi.fn().mockReturnValue([]),
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export function createMockLogger() {
|
|
22
|
+
return {
|
|
23
|
+
onLLMCallStart: vi.fn(),
|
|
24
|
+
onLLMCallEnd: vi.fn(),
|
|
25
|
+
onExecutionStart: vi.fn(),
|
|
26
|
+
onExecutionEmit: vi.fn(),
|
|
27
|
+
onExecutionDone: vi.fn(),
|
|
28
|
+
onExecutionError: vi.fn(),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export function createMockUsage(overrides = {}) {
|
|
32
|
+
return {
|
|
33
|
+
inputTokens: 100,
|
|
34
|
+
outputTokens: 50,
|
|
35
|
+
totalTokens: 150,
|
|
36
|
+
inputTokenDetails: {
|
|
37
|
+
noCacheTokens: 100,
|
|
38
|
+
cacheReadTokens: 0,
|
|
39
|
+
cacheWriteTokens: 0,
|
|
40
|
+
},
|
|
41
|
+
outputTokenDetails: {
|
|
42
|
+
textTokens: 50,
|
|
43
|
+
reasoningTokens: 0,
|
|
44
|
+
},
|
|
45
|
+
...overrides,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
export function createTestUsage(partial) {
|
|
49
|
+
return {
|
|
50
|
+
inputTokens: 0,
|
|
51
|
+
outputTokens: 0,
|
|
52
|
+
totalTokens: 0,
|
|
53
|
+
inputTokenDetails: {
|
|
54
|
+
noCacheTokens: 0,
|
|
55
|
+
cacheReadTokens: 0,
|
|
56
|
+
cacheWriteTokens: 0,
|
|
57
|
+
},
|
|
58
|
+
outputTokenDetails: {
|
|
59
|
+
textTokens: 0,
|
|
60
|
+
reasoningTokens: 0,
|
|
61
|
+
},
|
|
62
|
+
...partial,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=test-utils.js.map
|