@bxb1337/windsurf-fast-context 1.0.0 → 1.0.2
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/cjs/model/devstral-language-model.js +5 -3
- package/dist/cjs/model/devstral-language-model.test.js +3 -2
- package/dist/cjs/provider.js +4 -1
- package/dist/cjs/provider.test.js +13 -0
- package/dist/esm/model/devstral-language-model.js +5 -3
- package/dist/esm/model/devstral-language-model.test.js +3 -2
- package/dist/esm/provider.js +4 -1
- package/dist/esm/provider.test.js +13 -0
- package/dist/model/devstral-language-model.d.ts +3 -8
- package/dist/provider.d.ts +3 -4
- package/dist/types/index.d.ts +9 -0
- package/package.json +1 -1
|
@@ -61,7 +61,7 @@ class DevstralLanguageModel {
|
|
|
61
61
|
const content = payloads.flatMap((payload) => toV3Content((0, response_converter_js_1.convertResponse)(payload)));
|
|
62
62
|
return {
|
|
63
63
|
content,
|
|
64
|
-
finishReason:
|
|
64
|
+
finishReason: 'stop',
|
|
65
65
|
usage: emptyUsage(),
|
|
66
66
|
warnings: [],
|
|
67
67
|
};
|
|
@@ -163,7 +163,8 @@ class DevstralLanguageModel {
|
|
|
163
163
|
closeTextSegment();
|
|
164
164
|
safeEnqueue(controller, {
|
|
165
165
|
type: 'finish',
|
|
166
|
-
finishReason:
|
|
166
|
+
finishReason: 'stop',
|
|
167
|
+
rawFinishReason: 'stop',
|
|
167
168
|
usage: emptyUsage(),
|
|
168
169
|
});
|
|
169
170
|
safeClose(controller);
|
|
@@ -177,7 +178,8 @@ class DevstralLanguageModel {
|
|
|
177
178
|
});
|
|
178
179
|
safeEnqueue(controller, {
|
|
179
180
|
type: 'finish',
|
|
180
|
-
finishReason:
|
|
181
|
+
finishReason: 'error',
|
|
182
|
+
rawFinishReason: 'error',
|
|
181
183
|
usage: emptyUsage(),
|
|
182
184
|
});
|
|
183
185
|
}
|
|
@@ -136,7 +136,7 @@ async function collectStreamParts(stream) {
|
|
|
136
136
|
prompt: [{ role: 'user', content: [{ type: 'text', text: 'Find auth logic.' }] }],
|
|
137
137
|
});
|
|
138
138
|
(0, vitest_1.expect)(result.content).toEqual([{ type: 'text', text: 'generated answer' }]);
|
|
139
|
-
(0, vitest_1.expect)(result.finishReason).
|
|
139
|
+
(0, vitest_1.expect)(result.finishReason).toBe('stop');
|
|
140
140
|
(0, vitest_1.expect)(result.usage).toEqual({
|
|
141
141
|
inputTokens: {
|
|
142
142
|
total: undefined,
|
|
@@ -290,7 +290,8 @@ async function collectStreamParts(stream) {
|
|
|
290
290
|
(0, vitest_1.expect)(parts[4]).toMatchObject({ type: 'text-delta', delta: 'world' });
|
|
291
291
|
(0, vitest_1.expect)(parts[6]).toEqual({
|
|
292
292
|
type: 'finish',
|
|
293
|
-
finishReason:
|
|
293
|
+
finishReason: 'stop',
|
|
294
|
+
rawFinishReason: 'stop',
|
|
294
295
|
usage: {
|
|
295
296
|
inputTokens: {
|
|
296
297
|
total: undefined,
|
package/dist/cjs/provider.js
CHANGED
|
@@ -4,10 +4,13 @@ exports.windsurf = void 0;
|
|
|
4
4
|
exports.createWindsurfProvider = createWindsurfProvider;
|
|
5
5
|
const devstral_language_model_js_1 = require("./model/devstral-language-model.js");
|
|
6
6
|
function createWindsurfProvider(options = {}) {
|
|
7
|
-
|
|
7
|
+
const createLanguageModel = (modelId) => {
|
|
8
8
|
const opts = { ...options, modelId };
|
|
9
9
|
return new devstral_language_model_js_1.DevstralLanguageModel(opts);
|
|
10
10
|
};
|
|
11
|
+
const provider = createLanguageModel;
|
|
12
|
+
provider.languageModel = createLanguageModel;
|
|
13
|
+
return provider;
|
|
11
14
|
}
|
|
12
15
|
exports.windsurf = createWindsurfProvider();
|
|
13
16
|
exports.default = exports.windsurf;
|
|
@@ -58,4 +58,17 @@ function providerShape(m) {
|
|
|
58
58
|
(0, vitest_1.expect)(typeof provider_js_1.createWindsurfProvider).toBe('function');
|
|
59
59
|
(0, vitest_1.expect)(provider_js_1.windsurf).toBeDefined();
|
|
60
60
|
});
|
|
61
|
+
(0, vitest_1.it)('languageModel: provider has languageModel method', () => {
|
|
62
|
+
const factory = (0, provider_js_1.createWindsurfProvider)({ apiKey: 'test-key' });
|
|
63
|
+
(0, vitest_1.expect)(typeof factory.languageModel).toBe('function');
|
|
64
|
+
const model = factory.languageModel('MODEL_SWE_1_6_FAST');
|
|
65
|
+
(0, vitest_1.expect)(model).toBeInstanceOf(devstral_language_model_js_1.DevstralLanguageModel);
|
|
66
|
+
});
|
|
67
|
+
(0, vitest_1.it)('languageModel: callable and languageModel return same model type', () => {
|
|
68
|
+
const factory = (0, provider_js_1.createWindsurfProvider)({ apiKey: 'test-key' });
|
|
69
|
+
const model1 = factory('MODEL_SWE_1_6_FAST');
|
|
70
|
+
const model2 = factory.languageModel('MODEL_SWE_1_6_FAST');
|
|
71
|
+
(0, vitest_1.expect)(model1).toBeInstanceOf(devstral_language_model_js_1.DevstralLanguageModel);
|
|
72
|
+
(0, vitest_1.expect)(model2).toBeInstanceOf(devstral_language_model_js_1.DevstralLanguageModel);
|
|
73
|
+
});
|
|
61
74
|
});
|
|
@@ -58,7 +58,7 @@ export class DevstralLanguageModel {
|
|
|
58
58
|
const content = payloads.flatMap((payload) => toV3Content(convertResponse(payload)));
|
|
59
59
|
return {
|
|
60
60
|
content,
|
|
61
|
-
finishReason:
|
|
61
|
+
finishReason: 'stop',
|
|
62
62
|
usage: emptyUsage(),
|
|
63
63
|
warnings: [],
|
|
64
64
|
};
|
|
@@ -160,7 +160,8 @@ export class DevstralLanguageModel {
|
|
|
160
160
|
closeTextSegment();
|
|
161
161
|
safeEnqueue(controller, {
|
|
162
162
|
type: 'finish',
|
|
163
|
-
finishReason:
|
|
163
|
+
finishReason: 'stop',
|
|
164
|
+
rawFinishReason: 'stop',
|
|
164
165
|
usage: emptyUsage(),
|
|
165
166
|
});
|
|
166
167
|
safeClose(controller);
|
|
@@ -174,7 +175,8 @@ export class DevstralLanguageModel {
|
|
|
174
175
|
});
|
|
175
176
|
safeEnqueue(controller, {
|
|
176
177
|
type: 'finish',
|
|
177
|
-
finishReason:
|
|
178
|
+
finishReason: 'error',
|
|
179
|
+
rawFinishReason: 'error',
|
|
178
180
|
usage: emptyUsage(),
|
|
179
181
|
});
|
|
180
182
|
}
|
|
@@ -134,7 +134,7 @@ describe('DevstralLanguageModel doGenerate', () => {
|
|
|
134
134
|
prompt: [{ role: 'user', content: [{ type: 'text', text: 'Find auth logic.' }] }],
|
|
135
135
|
});
|
|
136
136
|
expect(result.content).toEqual([{ type: 'text', text: 'generated answer' }]);
|
|
137
|
-
expect(result.finishReason).
|
|
137
|
+
expect(result.finishReason).toBe('stop');
|
|
138
138
|
expect(result.usage).toEqual({
|
|
139
139
|
inputTokens: {
|
|
140
140
|
total: undefined,
|
|
@@ -288,7 +288,8 @@ describe('DevstralLanguageModel doStream', () => {
|
|
|
288
288
|
expect(parts[4]).toMatchObject({ type: 'text-delta', delta: 'world' });
|
|
289
289
|
expect(parts[6]).toEqual({
|
|
290
290
|
type: 'finish',
|
|
291
|
-
finishReason:
|
|
291
|
+
finishReason: 'stop',
|
|
292
|
+
rawFinishReason: 'stop',
|
|
292
293
|
usage: {
|
|
293
294
|
inputTokens: {
|
|
294
295
|
total: undefined,
|
package/dist/esm/provider.js
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { DevstralLanguageModel } from './model/devstral-language-model.js';
|
|
2
2
|
export function createWindsurfProvider(options = {}) {
|
|
3
|
-
|
|
3
|
+
const createLanguageModel = (modelId) => {
|
|
4
4
|
const opts = { ...options, modelId };
|
|
5
5
|
return new DevstralLanguageModel(opts);
|
|
6
6
|
};
|
|
7
|
+
const provider = createLanguageModel;
|
|
8
|
+
provider.languageModel = createLanguageModel;
|
|
9
|
+
return provider;
|
|
7
10
|
}
|
|
8
11
|
export const windsurf = createWindsurfProvider();
|
|
9
12
|
export default windsurf;
|
|
@@ -56,4 +56,17 @@ describe('provider factory', () => {
|
|
|
56
56
|
expect(typeof createWindsurfProvider).toBe('function');
|
|
57
57
|
expect(windsurf).toBeDefined();
|
|
58
58
|
});
|
|
59
|
+
it('languageModel: provider has languageModel method', () => {
|
|
60
|
+
const factory = createWindsurfProvider({ apiKey: 'test-key' });
|
|
61
|
+
expect(typeof factory.languageModel).toBe('function');
|
|
62
|
+
const model = factory.languageModel('MODEL_SWE_1_6_FAST');
|
|
63
|
+
expect(model).toBeInstanceOf(DevstralLanguageModel);
|
|
64
|
+
});
|
|
65
|
+
it('languageModel: callable and languageModel return same model type', () => {
|
|
66
|
+
const factory = createWindsurfProvider({ apiKey: 'test-key' });
|
|
67
|
+
const model1 = factory('MODEL_SWE_1_6_FAST');
|
|
68
|
+
const model2 = factory.languageModel('MODEL_SWE_1_6_FAST');
|
|
69
|
+
expect(model1).toBeInstanceOf(DevstralLanguageModel);
|
|
70
|
+
expect(model2).toBeInstanceOf(DevstralLanguageModel);
|
|
71
|
+
});
|
|
59
72
|
});
|
|
@@ -13,10 +13,7 @@ export interface LanguageModelV3CallOptions {
|
|
|
13
13
|
}
|
|
14
14
|
export interface LanguageModelV3GenerateResult {
|
|
15
15
|
content: GenerateContentPart[];
|
|
16
|
-
finishReason:
|
|
17
|
-
unified: 'stop';
|
|
18
|
-
raw: string | undefined;
|
|
19
|
-
};
|
|
16
|
+
finishReason: 'stop' | 'length' | 'content-filter' | 'tool-calls' | 'error' | 'other';
|
|
20
17
|
usage: {
|
|
21
18
|
inputTokens: {
|
|
22
19
|
total: number | undefined;
|
|
@@ -78,10 +75,8 @@ type LanguageModelV3StreamPart = {
|
|
|
78
75
|
error: unknown;
|
|
79
76
|
} | {
|
|
80
77
|
type: 'finish';
|
|
81
|
-
finishReason:
|
|
82
|
-
|
|
83
|
-
raw: string | undefined;
|
|
84
|
-
};
|
|
78
|
+
finishReason: 'stop' | 'length' | 'content-filter' | 'tool-calls' | 'error' | 'other';
|
|
79
|
+
rawFinishReason: string | undefined;
|
|
85
80
|
usage: {
|
|
86
81
|
inputTokens: {
|
|
87
82
|
total: number | undefined;
|
package/dist/provider.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
export declare
|
|
4
|
-
export declare const windsurf: (modelId?: string) => DevstralLanguageModel;
|
|
1
|
+
import type { WindsurfProviderOptions, WindsurfProvider } from './types/index.js';
|
|
2
|
+
export declare function createWindsurfProvider(options?: WindsurfProviderOptions): WindsurfProvider;
|
|
3
|
+
export declare const windsurf: WindsurfProvider;
|
|
5
4
|
export default windsurf;
|
package/dist/types/index.d.ts
CHANGED
|
@@ -5,6 +5,15 @@ export interface WindsurfProviderOptions {
|
|
|
5
5
|
fetch?: FetchFn;
|
|
6
6
|
generateId?: () => string;
|
|
7
7
|
}
|
|
8
|
+
/**
|
|
9
|
+
* Windsurf provider interface extending AI SDK V3 ProviderV3 pattern.
|
|
10
|
+
* The provider is callable as a function and has a languageModel method.
|
|
11
|
+
*/
|
|
12
|
+
export interface WindsurfProvider {
|
|
13
|
+
(modelId?: string): DevstralLanguageModel;
|
|
14
|
+
languageModel(modelId?: string): DevstralLanguageModel;
|
|
15
|
+
}
|
|
16
|
+
import type { DevstralLanguageModel } from '../model/devstral-language-model.js';
|
|
8
17
|
export type FetchFn = (input: string | URL | Request, init?: RequestInit) => Promise<Response>;
|
|
9
18
|
export interface Tool<Input = unknown, Output = unknown> {
|
|
10
19
|
id: string;
|