@byline/ai 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +4 -0
- package/dist/@types.d.ts +103 -0
- package/dist/@types.d.ts.map +1 -0
- package/dist/@types.js +68 -0
- package/dist/@types.js.map +1 -0
- package/dist/config/ai-config.d.ts +76 -0
- package/dist/config/ai-config.d.ts.map +1 -0
- package/dist/config/ai-config.js +108 -0
- package/dist/config/ai-config.js.map +1 -0
- package/dist/config/ai-config.test.node.d.ts +9 -0
- package/dist/config/ai-config.test.node.d.ts.map +1 -0
- package/dist/config/ai-config.test.node.js +31 -0
- package/dist/config/ai-config.test.node.js.map +1 -0
- package/dist/config/ai-provider.d.ts +17 -0
- package/dist/config/ai-provider.d.ts.map +1 -0
- package/dist/config/ai-provider.js +32 -0
- package/dist/config/ai-provider.js.map +1 -0
- package/dist/execute.d.ts +15 -0
- package/dist/execute.d.ts.map +1 -0
- package/dist/execute.js +473 -0
- package/dist/execute.js.map +1 -0
- package/dist/generate.d.ts +64 -0
- package/dist/generate.d.ts.map +1 -0
- package/dist/generate.js +235 -0
- package/dist/generate.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +43 -0
- package/dist/index.js.map +1 -0
- package/dist/lexical-text-edits.d.ts +23 -0
- package/dist/lexical-text-edits.d.ts.map +1 -0
- package/dist/lexical-text-edits.js +62 -0
- package/dist/lexical-text-edits.js.map +1 -0
- package/dist/lib/logger.d.ts +10 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +16 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/models/anthropic/anthropic-models.d.ts +14 -0
- package/dist/models/anthropic/anthropic-models.d.ts.map +1 -0
- package/dist/models/anthropic/anthropic-models.js +41 -0
- package/dist/models/anthropic/anthropic-models.js.map +1 -0
- package/dist/models/anthropic/anthropic.d.ts +9 -0
- package/dist/models/anthropic/anthropic.d.ts.map +1 -0
- package/dist/models/anthropic/anthropic.js +20 -0
- package/dist/models/anthropic/anthropic.js.map +1 -0
- package/dist/models/anthropic/generate-native.d.ts +59 -0
- package/dist/models/anthropic/generate-native.d.ts.map +1 -0
- package/dist/models/anthropic/generate-native.js +271 -0
- package/dist/models/anthropic/generate-native.js.map +1 -0
- package/dist/models/anthropic/generate-vercel.d.ts +59 -0
- package/dist/models/anthropic/generate-vercel.d.ts.map +1 -0
- package/dist/models/anthropic/generate-vercel.js +126 -0
- package/dist/models/anthropic/generate-vercel.js.map +1 -0
- package/dist/models/anthropic/generate.d.ts +16 -0
- package/dist/models/anthropic/generate.d.ts.map +1 -0
- package/dist/models/anthropic/generate.js +28 -0
- package/dist/models/anthropic/generate.js.map +1 -0
- package/dist/models/anthropic/generate.test.node.d.ts +9 -0
- package/dist/models/anthropic/generate.test.node.d.ts.map +1 -0
- package/dist/models/anthropic/generate.test.node.js +106 -0
- package/dist/models/anthropic/generate.test.node.js.map +1 -0
- package/dist/models/anthropic/patch-native.d.ts +33 -0
- package/dist/models/anthropic/patch-native.d.ts.map +1 -0
- package/dist/models/anthropic/patch-native.js +152 -0
- package/dist/models/anthropic/patch-native.js.map +1 -0
- package/dist/models/anthropic/patch-vercel.d.ts +33 -0
- package/dist/models/anthropic/patch-vercel.d.ts.map +1 -0
- package/dist/models/anthropic/patch-vercel.js +47 -0
- package/dist/models/anthropic/patch-vercel.js.map +1 -0
- package/dist/models/anthropic/patch.d.ts +12 -0
- package/dist/models/anthropic/patch.d.ts.map +1 -0
- package/dist/models/anthropic/patch.js +16 -0
- package/dist/models/anthropic/patch.js.map +1 -0
- package/dist/models/anthropic/patch.test.node.d.ts +9 -0
- package/dist/models/anthropic/patch.test.node.d.ts.map +1 -0
- package/dist/models/anthropic/patch.test.node.js +110 -0
- package/dist/models/anthropic/patch.test.node.js.map +1 -0
- package/dist/models/anthropic/schema.d.ts +212 -0
- package/dist/models/anthropic/schema.d.ts.map +1 -0
- package/dist/models/anthropic/schema.js +131 -0
- package/dist/models/anthropic/schema.js.map +1 -0
- package/dist/models/google/generate-native.d.ts +59 -0
- package/dist/models/google/generate-native.d.ts.map +1 -0
- package/dist/models/google/generate-native.js +244 -0
- package/dist/models/google/generate-native.js.map +1 -0
- package/dist/models/google/generate-vercel.d.ts +59 -0
- package/dist/models/google/generate-vercel.d.ts.map +1 -0
- package/dist/models/google/generate-vercel.js +133 -0
- package/dist/models/google/generate-vercel.js.map +1 -0
- package/dist/models/google/generate.d.ts +16 -0
- package/dist/models/google/generate.d.ts.map +1 -0
- package/dist/models/google/generate.js +28 -0
- package/dist/models/google/generate.js.map +1 -0
- package/dist/models/google/generate.test.node.d.ts +9 -0
- package/dist/models/google/generate.test.node.d.ts.map +1 -0
- package/dist/models/google/generate.test.node.js +106 -0
- package/dist/models/google/generate.test.node.js.map +1 -0
- package/dist/models/google/google-models.d.ts +14 -0
- package/dist/models/google/google-models.d.ts.map +1 -0
- package/dist/models/google/google-models.js +25 -0
- package/dist/models/google/google-models.js.map +1 -0
- package/dist/models/google/normalize-generated-doc.d.ts +10 -0
- package/dist/models/google/normalize-generated-doc.d.ts.map +1 -0
- package/dist/models/google/normalize-generated-doc.js +48 -0
- package/dist/models/google/normalize-generated-doc.js.map +1 -0
- package/dist/models/google/patch-native.d.ts +33 -0
- package/dist/models/google/patch-native.d.ts.map +1 -0
- package/dist/models/google/patch-native.js +164 -0
- package/dist/models/google/patch-native.js.map +1 -0
- package/dist/models/google/patch-vercel.d.ts +33 -0
- package/dist/models/google/patch-vercel.d.ts.map +1 -0
- package/dist/models/google/patch-vercel.js +49 -0
- package/dist/models/google/patch-vercel.js.map +1 -0
- package/dist/models/google/patch.d.ts +12 -0
- package/dist/models/google/patch.d.ts.map +1 -0
- package/dist/models/google/patch.js +16 -0
- package/dist/models/google/patch.js.map +1 -0
- package/dist/models/google/patch.test.node.d.ts +9 -0
- package/dist/models/google/patch.test.node.d.ts.map +1 -0
- package/dist/models/google/patch.test.node.js +110 -0
- package/dist/models/google/patch.test.node.js.map +1 -0
- package/dist/models/google/schema.d.ts +416 -0
- package/dist/models/google/schema.d.ts.map +1 -0
- package/dist/models/google/schema.js +254 -0
- package/dist/models/google/schema.js.map +1 -0
- package/dist/models/openai/generate-native.d.ts +65 -0
- package/dist/models/openai/generate-native.d.ts.map +1 -0
- package/dist/models/openai/generate-native.js +276 -0
- package/dist/models/openai/generate-native.js.map +1 -0
- package/dist/models/openai/generate-vercel.d.ts +59 -0
- package/dist/models/openai/generate-vercel.d.ts.map +1 -0
- package/dist/models/openai/generate-vercel.js +132 -0
- package/dist/models/openai/generate-vercel.js.map +1 -0
- package/dist/models/openai/generate.d.ts +16 -0
- package/dist/models/openai/generate.d.ts.map +1 -0
- package/dist/models/openai/generate.js +28 -0
- package/dist/models/openai/generate.js.map +1 -0
- package/dist/models/openai/generate.test.node.d.ts +9 -0
- package/dist/models/openai/generate.test.node.d.ts.map +1 -0
- package/dist/models/openai/generate.test.node.js +106 -0
- package/dist/models/openai/generate.test.node.js.map +1 -0
- package/dist/models/openai/openai-models.d.ts +14 -0
- package/dist/models/openai/openai-models.d.ts.map +1 -0
- package/dist/models/openai/openai-models.js +23 -0
- package/dist/models/openai/openai-models.js.map +1 -0
- package/dist/models/openai/patch-native.d.ts +33 -0
- package/dist/models/openai/patch-native.d.ts.map +1 -0
- package/dist/models/openai/patch-native.js +151 -0
- package/dist/models/openai/patch-native.js.map +1 -0
- package/dist/models/openai/patch-vercel.d.ts +33 -0
- package/dist/models/openai/patch-vercel.d.ts.map +1 -0
- package/dist/models/openai/patch-vercel.js +49 -0
- package/dist/models/openai/patch-vercel.js.map +1 -0
- package/dist/models/openai/patch.d.ts +12 -0
- package/dist/models/openai/patch.d.ts.map +1 -0
- package/dist/models/openai/patch.js +16 -0
- package/dist/models/openai/patch.js.map +1 -0
- package/dist/models/openai/patch.test.node.d.ts +9 -0
- package/dist/models/openai/patch.test.node.d.ts.map +1 -0
- package/dist/models/openai/patch.test.node.js +110 -0
- package/dist/models/openai/patch.test.node.js.map +1 -0
- package/dist/models/openai/schema.d.ts +460 -0
- package/dist/models/openai/schema.d.ts.map +1 -0
- package/dist/models/openai/schema.js +327 -0
- package/dist/models/openai/schema.js.map +1 -0
- package/dist/patch.d.ts +45 -0
- package/dist/patch.d.ts.map +1 -0
- package/dist/patch.js +138 -0
- package/dist/patch.js.map +1 -0
- package/dist/plugins/ai-plugin-base.d.ts +40 -0
- package/dist/plugins/ai-plugin-base.d.ts.map +1 -0
- package/dist/plugins/ai-plugin-base.js +218 -0
- package/dist/plugins/ai-plugin-base.js.map +1 -0
- package/dist/plugins/ai-plugin.css +181 -0
- package/dist/plugins/lexical/create-empty-editor-state.d.ts +32 -0
- package/dist/plugins/lexical/create-empty-editor-state.d.ts.map +1 -0
- package/dist/plugins/lexical/create-empty-editor-state.js +51 -0
- package/dist/plugins/lexical/create-empty-editor-state.js.map +1 -0
- package/dist/plugins/lexical/import-html.d.ts +10 -0
- package/dist/plugins/lexical/import-html.d.ts.map +1 -0
- package/dist/plugins/lexical/import-html.js +31 -0
- package/dist/plugins/lexical/import-html.js.map +1 -0
- package/dist/plugins/lexical/index.d.ts +9 -0
- package/dist/plugins/lexical/index.d.ts.map +1 -0
- package/dist/plugins/lexical/index.js +9 -0
- package/dist/plugins/lexical/index.js.map +1 -0
- package/dist/plugins/lexical/plugin.d.ts +11 -0
- package/dist/plugins/lexical/plugin.d.ts.map +1 -0
- package/dist/plugins/lexical/plugin.js +305 -0
- package/dist/plugins/lexical/plugin.js.map +1 -0
- package/dist/plugins/storage.d.ts +18 -0
- package/dist/plugins/storage.d.ts.map +1 -0
- package/dist/plugins/storage.js +57 -0
- package/dist/plugins/storage.js.map +1 -0
- package/dist/plugins/streaming-preview.d.ts +12 -0
- package/dist/plugins/streaming-preview.d.ts.map +1 -0
- package/dist/plugins/streaming-preview.js +24 -0
- package/dist/plugins/streaming-preview.js.map +1 -0
- package/dist/plugins/text/index.d.ts +9 -0
- package/dist/plugins/text/index.d.ts.map +1 -0
- package/dist/plugins/text/index.js +9 -0
- package/dist/plugins/text/index.js.map +1 -0
- package/dist/plugins/text/plugin.d.ts +18 -0
- package/dist/plugins/text/plugin.d.ts.map +1 -0
- package/dist/plugins/text/plugin.js +261 -0
- package/dist/plugins/text/plugin.js.map +1 -0
- package/dist/prompts.d.ts +30 -0
- package/dist/prompts.d.ts.map +1 -0
- package/dist/prompts.js +83 -0
- package/dist/prompts.js.map +1 -0
- package/dist/schemas/lexical-json-schema.d.ts +68 -0
- package/dist/schemas/lexical-json-schema.d.ts.map +1 -0
- package/dist/schemas/lexical-json-schema.js +434 -0
- package/dist/schemas/lexical-json-schema.js.map +1 -0
- package/dist/scripts/list-models.d.ts +9 -0
- package/dist/scripts/list-models.d.ts.map +1 -0
- package/dist/scripts/list-models.js +55 -0
- package/dist/scripts/list-models.js.map +1 -0
- package/dist/server.d.ts +25 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +22 -0
- package/dist/server.js.map +1 -0
- package/dist/utils/convert-to-lexical.d.ts +62 -0
- package/dist/utils/convert-to-lexical.d.ts.map +1 -0
- package/dist/utils/convert-to-lexical.js +210 -0
- package/dist/utils/convert-to-lexical.js.map +1 -0
- package/dist/utils/create-empty-editor-state.d.ts +32 -0
- package/dist/utils/create-empty-editor-state.d.ts.map +1 -0
- package/dist/utils/create-empty-editor-state.js +51 -0
- package/dist/utils/create-empty-editor-state.js.map +1 -0
- package/dist/utils/has-text.d.ts +10 -0
- package/dist/utils/has-text.d.ts.map +1 -0
- package/dist/utils/has-text.js +35 -0
- package/dist/utils/has-text.js.map +1 -0
- package/dist/utils/has-text.test.d.ts +9 -0
- package/dist/utils/has-text.test.d.ts.map +1 -0
- package/dist/utils/has-text.test.js +69 -0
- package/dist/utils/has-text.test.js.map +1 -0
- package/dist/utils/is-object-schema.d.ts +17 -0
- package/dist/utils/is-object-schema.d.ts.map +1 -0
- package/dist/utils/is-object-schema.js +19 -0
- package/dist/utils/is-object-schema.js.map +1 -0
- package/dist/utils/lexical-text-edits.d.ts +23 -0
- package/dist/utils/lexical-text-edits.d.ts.map +1 -0
- package/dist/utils/lexical-text-edits.js +62 -0
- package/dist/utils/lexical-text-edits.js.map +1 -0
- package/package.json +111 -0
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This Source Code is subject to the terms of the Mozilla Public
|
|
3
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
4
|
+
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
5
|
+
*
|
|
6
|
+
* Copyright (c) Infonomic Company Limited
|
|
7
|
+
*/
|
|
8
|
+
import { beforeEach, describe, expect, it } from 'vitest';
|
|
9
|
+
import { getAiServerConfig as getServerConfig } from '../../config/ai-config';
|
|
10
|
+
import { generateDoc as generateDocNative, generateDocStreaming as generateDocStreamingNative, } from './generate-native';
|
|
11
|
+
import { generateDocStreaming as generateDocStreamingVercel, generateDoc as generateDocVercel, } from './generate-vercel';
|
|
12
|
+
const MODEL = 'gpt-5.2';
|
|
13
|
+
describe('openai generate', () => {
|
|
14
|
+
beforeEach(async () => { });
|
|
15
|
+
const runReal = process.env.AI_RUN_REAL_TESTS === 'true';
|
|
16
|
+
if (runReal) {
|
|
17
|
+
/***
|
|
18
|
+
* Generates a document from OpenAI using structured outputs.
|
|
19
|
+
*/
|
|
20
|
+
it.skip('makes a real OpenAI request (manual run) from native provider', async () => {
|
|
21
|
+
const config = getServerConfig();
|
|
22
|
+
if (!config.ai.openai.apiKey) {
|
|
23
|
+
throw new Error('OPENAI_API_KEY is required for real OpenAI tests.');
|
|
24
|
+
}
|
|
25
|
+
const result = await generateDocNative({
|
|
26
|
+
apiKey: config.ai.openai.apiKey,
|
|
27
|
+
model: MODEL,
|
|
28
|
+
prompt: 'Create a haiku poem about a child by the sea.',
|
|
29
|
+
});
|
|
30
|
+
// console.log(result)
|
|
31
|
+
expect(result).toBeTruthy();
|
|
32
|
+
expect(typeof result).toBe('object');
|
|
33
|
+
}, 30000);
|
|
34
|
+
/***
|
|
35
|
+
* Generates a document from OpenAI using structured outputs via streaming.
|
|
36
|
+
*/
|
|
37
|
+
it.skip('streams a real OpenAI response (manual run) from native provider', async () => {
|
|
38
|
+
const config = getServerConfig();
|
|
39
|
+
if (!config.ai.openai.apiKey) {
|
|
40
|
+
throw new Error('OPENAI_API_KEY is required for real OpenAI tests.');
|
|
41
|
+
}
|
|
42
|
+
const streamResult = generateDocStreamingNative({
|
|
43
|
+
apiKey: config.ai.openai.apiKey,
|
|
44
|
+
model: MODEL,
|
|
45
|
+
prompt: 'Create a haiku poem about a child by the sea.',
|
|
46
|
+
});
|
|
47
|
+
let streamedText = '';
|
|
48
|
+
for await (const chunk of streamResult.text) {
|
|
49
|
+
streamedText += chunk;
|
|
50
|
+
console.log('STREAM CHUNK (OpenAI Native):', chunk);
|
|
51
|
+
}
|
|
52
|
+
const final = await streamResult.final;
|
|
53
|
+
console.log('FINAL RESULT (OpenAI Native):', final);
|
|
54
|
+
expect(streamedText.length).toBeGreaterThanOrEqual(0);
|
|
55
|
+
expect(final).toBeTruthy();
|
|
56
|
+
expect(typeof final).toBe('object');
|
|
57
|
+
}, 30000);
|
|
58
|
+
/***
|
|
59
|
+
* Generates a document from OpenAI using structured outputs.
|
|
60
|
+
*/
|
|
61
|
+
it.skip('makes a real OpenAI request (manual run) from vercel provider', async () => {
|
|
62
|
+
const config = getServerConfig();
|
|
63
|
+
if (!config.ai.openai.apiKey) {
|
|
64
|
+
throw new Error('OPENAI_API_KEY is required for real OpenAI tests.');
|
|
65
|
+
}
|
|
66
|
+
const result = await generateDocVercel({
|
|
67
|
+
apiKey: config.ai.openai.apiKey,
|
|
68
|
+
model: MODEL,
|
|
69
|
+
prompt: 'Create a haiku poem about a child by the sea.',
|
|
70
|
+
});
|
|
71
|
+
// console.log(result)
|
|
72
|
+
expect(result).toBeTruthy();
|
|
73
|
+
expect(typeof result).toBe('object');
|
|
74
|
+
}, 30000);
|
|
75
|
+
/***
|
|
76
|
+
* Generates a document from OpenAI using structured outputs via streaming.
|
|
77
|
+
*/
|
|
78
|
+
it.skip('streams a real OpenAI response (manual run) from vercel provider', async () => {
|
|
79
|
+
const config = getServerConfig();
|
|
80
|
+
if (!config.ai.openai.apiKey) {
|
|
81
|
+
throw new Error('OPENAI_API_KEY is required for real OpenAI tests.');
|
|
82
|
+
}
|
|
83
|
+
const streamResult = generateDocStreamingVercel({
|
|
84
|
+
apiKey: config.ai.openai.apiKey,
|
|
85
|
+
model: MODEL,
|
|
86
|
+
prompt: 'Create a haiku poem about a child by the sea.',
|
|
87
|
+
});
|
|
88
|
+
let streamedText = '';
|
|
89
|
+
for await (const chunk of streamResult.text) {
|
|
90
|
+
streamedText += chunk;
|
|
91
|
+
console.log('STREAM CHUNK (OpenAI Vercel):', chunk);
|
|
92
|
+
}
|
|
93
|
+
const final = await streamResult.final;
|
|
94
|
+
console.log('FINAL RESULT (OpenAI Vercel):', final);
|
|
95
|
+
expect(streamedText.length).toBeGreaterThanOrEqual(0);
|
|
96
|
+
expect(final).toBeTruthy();
|
|
97
|
+
expect(typeof final).toBe('object');
|
|
98
|
+
}, 30000);
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
it.skip('skips real OpenAI tests', () => {
|
|
102
|
+
console.log('Set AI_RUN_REAL_TESTS=true to run real OpenAI tests.');
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
//# sourceMappingURL=generate.test.node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.test.node.js","sourceRoot":"","sources":["../../../src/models/openai/generate.test.node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This Source Code is subject to the terms of the Mozilla Public
|
|
3
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
4
|
+
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
5
|
+
*
|
|
6
|
+
* Copyright (c) Infonomic Company Limited
|
|
7
|
+
*/
|
|
8
|
+
export type ModelInfo = {
|
|
9
|
+
id: string;
|
|
10
|
+
name: string;
|
|
11
|
+
created: string;
|
|
12
|
+
};
|
|
13
|
+
export declare function listAllModels(): Promise<ModelInfo[]>;
|
|
14
|
+
//# sourceMappingURL=openai-models.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-models.d.ts","sourceRoot":"","sources":["../../../src/models/openai/openai-models.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,MAAM,MAAM,SAAS,GAAG;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CAa1D"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This Source Code is subject to the terms of the Mozilla Public
|
|
3
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
4
|
+
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
5
|
+
*
|
|
6
|
+
* Copyright (c) Infonomic Company Limited
|
|
7
|
+
*/
|
|
8
|
+
import OpenAI from 'openai';
|
|
9
|
+
import { getAiServerConfig as getServerConfig } from '../../config/ai-config';
|
|
10
|
+
export async function listAllModels() {
|
|
11
|
+
const openai = new OpenAI({ apiKey: getServerConfig().ai.openai.apiKey });
|
|
12
|
+
const list = await openai.models.list();
|
|
13
|
+
const models = [];
|
|
14
|
+
for await (const model of list) {
|
|
15
|
+
models.push({
|
|
16
|
+
id: model.id,
|
|
17
|
+
name: model.id,
|
|
18
|
+
created: new Date(model.created * 1000).toISOString(),
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
return models;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=openai-models.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-models.js","sourceRoot":"","sources":["../../../src/models/openai/openai-models.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,MAAM,MAAM,QAAQ,CAAA;AAE3B,OAAO,EAAE,iBAAiB,IAAI,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAW7E,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;IACzE,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;IAEvC,MAAM,MAAM,GAAgB,EAAE,CAAA;IAC9B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC;YACV,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,IAAI,EAAE,KAAK,CAAC,EAAE;YACd,OAAO,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE;SACtD,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This Source Code is subject to the terms of the Mozilla Public
|
|
3
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
4
|
+
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
5
|
+
*
|
|
6
|
+
* Copyright (c) Infonomic Company Limited
|
|
7
|
+
*/
|
|
8
|
+
import type { LexicalTextEditsResponse } from '../../utils/lexical-text-edits';
|
|
9
|
+
export type PatchDocStreamingResult = {
|
|
10
|
+
text: AsyncIterable<string>;
|
|
11
|
+
final: Promise<LexicalTextEditsResponse>;
|
|
12
|
+
};
|
|
13
|
+
export declare function patchDoc(options: {
|
|
14
|
+
apiKey: string;
|
|
15
|
+
model: string;
|
|
16
|
+
prompt: string;
|
|
17
|
+
textNodes: Array<{
|
|
18
|
+
id: number;
|
|
19
|
+
text: string;
|
|
20
|
+
}>;
|
|
21
|
+
signal?: AbortSignal;
|
|
22
|
+
}): Promise<LexicalTextEditsResponse>;
|
|
23
|
+
export declare function patchDocStreaming(options: {
|
|
24
|
+
apiKey: string;
|
|
25
|
+
model: string;
|
|
26
|
+
prompt: string;
|
|
27
|
+
textNodes: Array<{
|
|
28
|
+
id: number;
|
|
29
|
+
text: string;
|
|
30
|
+
}>;
|
|
31
|
+
signal?: AbortSignal;
|
|
32
|
+
}): PatchDocStreamingResult;
|
|
33
|
+
//# sourceMappingURL=patch-native.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patch-native.d.ts","sourceRoot":"","sources":["../../../src/models/openai/patch-native.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAA;AAsC1E,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IAC3B,KAAK,EAAE,OAAO,CAAC,wBAAwB,CAAC,CAAA;CACzC,CAAA;AAgDD,wBAAsB,QAAQ,CAAC,OAAO,EAAE;IACtC,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC9C,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAsCpC;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE;IACzC,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC9C,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB,GAAG,uBAAuB,CAmD1B"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This Source Code is subject to the terms of the Mozilla Public
|
|
3
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
4
|
+
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
5
|
+
*
|
|
6
|
+
* Copyright (c) Infonomic Company Limited
|
|
7
|
+
*/
|
|
8
|
+
import OpenAI from 'openai';
|
|
9
|
+
import { buildPatchSystemPrompt } from '../../prompts';
|
|
10
|
+
const buildPatchUserPrompt = (instruction, textNodes) => {
|
|
11
|
+
return [
|
|
12
|
+
`INSTRUCTION: ${instruction}`,
|
|
13
|
+
'',
|
|
14
|
+
'INPUT_TEXT_NODES_JSON:',
|
|
15
|
+
JSON.stringify(textNodes),
|
|
16
|
+
].join('\n');
|
|
17
|
+
};
|
|
18
|
+
const openaiPatchSchema = {
|
|
19
|
+
name: 'lexical_text_edits_v1',
|
|
20
|
+
strict: true,
|
|
21
|
+
schema: {
|
|
22
|
+
type: 'object',
|
|
23
|
+
additionalProperties: false,
|
|
24
|
+
properties: {
|
|
25
|
+
edits: {
|
|
26
|
+
type: 'array',
|
|
27
|
+
items: {
|
|
28
|
+
type: 'object',
|
|
29
|
+
additionalProperties: false,
|
|
30
|
+
properties: {
|
|
31
|
+
id: { type: 'number' },
|
|
32
|
+
text: { type: 'string' },
|
|
33
|
+
},
|
|
34
|
+
required: ['id', 'text'],
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
required: ['edits'],
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
const getOutputText = (result) => {
|
|
42
|
+
if (typeof result?.output_text === 'string') {
|
|
43
|
+
return result.output_text;
|
|
44
|
+
}
|
|
45
|
+
if (Array.isArray(result?.output)) {
|
|
46
|
+
const texts = [];
|
|
47
|
+
for (const output of result.output) {
|
|
48
|
+
if (output?.type !== 'message' || !Array.isArray(output?.content)) {
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
for (const content of output.content) {
|
|
52
|
+
if (content?.type === 'output_text' && typeof content?.text === 'string') {
|
|
53
|
+
texts.push(content.text);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (texts.length > 0) {
|
|
58
|
+
return texts.join('');
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return undefined;
|
|
62
|
+
};
|
|
63
|
+
const parsePatchResponse = (result) => {
|
|
64
|
+
const parsed = result.output_parsed;
|
|
65
|
+
if (parsed && typeof parsed === 'object') {
|
|
66
|
+
return parsed;
|
|
67
|
+
}
|
|
68
|
+
const outputText = getOutputText(result);
|
|
69
|
+
if (typeof outputText === 'string' && outputText.trim().length > 0) {
|
|
70
|
+
try {
|
|
71
|
+
const json = JSON.parse(outputText);
|
|
72
|
+
if (json && typeof json === 'object') {
|
|
73
|
+
return json;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// fall through to error below
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
throw new Error('OpenAI structured output did not return a parsed object.');
|
|
81
|
+
};
|
|
82
|
+
export async function patchDoc(options) {
|
|
83
|
+
const client = new OpenAI({ apiKey: options.apiKey });
|
|
84
|
+
const format = {
|
|
85
|
+
type: 'json_schema',
|
|
86
|
+
...openaiPatchSchema,
|
|
87
|
+
};
|
|
88
|
+
const result = await client.responses.parse({
|
|
89
|
+
model: options.model,
|
|
90
|
+
input: [
|
|
91
|
+
{
|
|
92
|
+
role: 'system',
|
|
93
|
+
content: buildPatchSystemPrompt(),
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
role: 'user',
|
|
97
|
+
content: buildPatchUserPrompt(options.prompt, options.textNodes),
|
|
98
|
+
},
|
|
99
|
+
],
|
|
100
|
+
text: {
|
|
101
|
+
format,
|
|
102
|
+
},
|
|
103
|
+
}, options.signal ? { signal: options.signal } : undefined);
|
|
104
|
+
// console.log(result.usage)
|
|
105
|
+
const refusal = result?.output?.[0]?.content?.find((c) => c?.type === 'refusal')?.refusal;
|
|
106
|
+
if (typeof refusal === 'string' && refusal.length > 0) {
|
|
107
|
+
throw new Error(refusal);
|
|
108
|
+
}
|
|
109
|
+
return parsePatchResponse(result);
|
|
110
|
+
}
|
|
111
|
+
export function patchDocStreaming(options) {
|
|
112
|
+
const client = new OpenAI({ apiKey: options.apiKey });
|
|
113
|
+
const format = {
|
|
114
|
+
type: 'json_schema',
|
|
115
|
+
...openaiPatchSchema,
|
|
116
|
+
};
|
|
117
|
+
const stream = client.responses.stream({
|
|
118
|
+
model: options.model,
|
|
119
|
+
input: [
|
|
120
|
+
{
|
|
121
|
+
role: 'system',
|
|
122
|
+
content: buildPatchSystemPrompt(),
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
role: 'user',
|
|
126
|
+
content: buildPatchUserPrompt(options.prompt, options.textNodes),
|
|
127
|
+
},
|
|
128
|
+
],
|
|
129
|
+
text: {
|
|
130
|
+
format,
|
|
131
|
+
},
|
|
132
|
+
stream: true,
|
|
133
|
+
}, options.signal ? { signal: options.signal } : undefined);
|
|
134
|
+
const text = (async function* () {
|
|
135
|
+
for await (const event of stream) {
|
|
136
|
+
if (event.type === 'response.output_text.delta') {
|
|
137
|
+
yield event.delta;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
})();
|
|
141
|
+
const final = (async () => {
|
|
142
|
+
const result = await stream.finalResponse();
|
|
143
|
+
const refusal = result?.output?.[0]?.content?.find((c) => c?.type === 'refusal')?.refusal;
|
|
144
|
+
if (typeof refusal === 'string' && refusal.length > 0) {
|
|
145
|
+
throw new Error(refusal);
|
|
146
|
+
}
|
|
147
|
+
return parsePatchResponse(result);
|
|
148
|
+
})();
|
|
149
|
+
return { text, final };
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=patch-native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patch-native.js","sourceRoot":"","sources":["../../../src/models/openai/patch-native.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This Source Code is subject to the terms of the Mozilla Public
|
|
3
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
4
|
+
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
5
|
+
*
|
|
6
|
+
* Copyright (c) Infonomic Company Limited
|
|
7
|
+
*/
|
|
8
|
+
import { type LexicalTextEditsResponse } from '../../utils/lexical-text-edits';
|
|
9
|
+
export type PatchDocStreamingResult = {
|
|
10
|
+
text: AsyncIterable<string>;
|
|
11
|
+
final: Promise<LexicalTextEditsResponse>;
|
|
12
|
+
};
|
|
13
|
+
export declare function patchDoc(options: {
|
|
14
|
+
apiKey: string;
|
|
15
|
+
model: string;
|
|
16
|
+
prompt: string;
|
|
17
|
+
textNodes: Array<{
|
|
18
|
+
id: number;
|
|
19
|
+
text: string;
|
|
20
|
+
}>;
|
|
21
|
+
signal?: AbortSignal;
|
|
22
|
+
}): Promise<LexicalTextEditsResponse>;
|
|
23
|
+
export declare function patchDocStreaming(options: {
|
|
24
|
+
apiKey: string;
|
|
25
|
+
model: string;
|
|
26
|
+
prompt: string;
|
|
27
|
+
textNodes: Array<{
|
|
28
|
+
id: number;
|
|
29
|
+
text: string;
|
|
30
|
+
}>;
|
|
31
|
+
signal?: AbortSignal;
|
|
32
|
+
}): PatchDocStreamingResult;
|
|
33
|
+
//# sourceMappingURL=patch-vercel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patch-vercel.d.ts","sourceRoot":"","sources":["../../../src/models/openai/patch-vercel.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,EACL,KAAK,wBAAwB,EAE9B,MAAM,4BAA4B,CAAA;AAcnC,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IAC3B,KAAK,EAAE,OAAO,CAAC,wBAAwB,CAAC,CAAA;CACzC,CAAA;AAED,wBAAsB,QAAQ,CAAC,OAAO,EAAE;IACtC,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC9C,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAcpC;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE;IACzC,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC9C,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB,GAAG,uBAAuB,CAiB1B"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This Source Code is subject to the terms of the Mozilla Public
|
|
3
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
4
|
+
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
5
|
+
*
|
|
6
|
+
* Copyright (c) Infonomic Company Limited
|
|
7
|
+
*/
|
|
8
|
+
import { createOpenAI } from '@ai-sdk/openai';
|
|
9
|
+
import { generateText, Output, streamText } from 'ai';
|
|
10
|
+
import { buildPatchSystemPrompt } from '../../prompts';
|
|
11
|
+
import { lexicalTextEditsResponseSchema, } from '../../utils/lexical-text-edits';
|
|
12
|
+
const buildPatchUserPrompt = (instruction, textNodes) => {
|
|
13
|
+
return [
|
|
14
|
+
`INSTRUCTION: ${instruction}`,
|
|
15
|
+
'',
|
|
16
|
+
'INPUT_TEXT_NODES_JSON:',
|
|
17
|
+
JSON.stringify(textNodes),
|
|
18
|
+
].join('\n');
|
|
19
|
+
};
|
|
20
|
+
export async function patchDoc(options) {
|
|
21
|
+
const openai = createOpenAI({ apiKey: options.apiKey });
|
|
22
|
+
const result = await generateText({
|
|
23
|
+
model: openai(options.model),
|
|
24
|
+
system: buildPatchSystemPrompt(),
|
|
25
|
+
prompt: buildPatchUserPrompt(options.prompt, options.textNodes),
|
|
26
|
+
abortSignal: options.signal,
|
|
27
|
+
output: Output.object({
|
|
28
|
+
schema: lexicalTextEditsResponseSchema,
|
|
29
|
+
}),
|
|
30
|
+
});
|
|
31
|
+
return result.output;
|
|
32
|
+
}
|
|
33
|
+
export function patchDocStreaming(options) {
|
|
34
|
+
const openai = createOpenAI({ apiKey: options.apiKey });
|
|
35
|
+
const result = streamText({
|
|
36
|
+
model: openai(options.model),
|
|
37
|
+
system: buildPatchSystemPrompt(),
|
|
38
|
+
prompt: buildPatchUserPrompt(options.prompt, options.textNodes),
|
|
39
|
+
abortSignal: options.signal,
|
|
40
|
+
output: Output.object({
|
|
41
|
+
schema: lexicalTextEditsResponseSchema,
|
|
42
|
+
}),
|
|
43
|
+
});
|
|
44
|
+
return {
|
|
45
|
+
text: result.textStream,
|
|
46
|
+
final: result.output,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=patch-vercel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patch-vercel.js","sourceRoot":"","sources":["../../../src/models/openai/patch-vercel.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,IAAI,CAAA;AAErD,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAA;AAClD,OAAO,EAEL,8BAA8B,GAC/B,MAAM,4BAA4B,CAAA;AAEnC,MAAM,oBAAoB,GAAG,CAC3B,WAAmB,EACnB,SAA8C,EAC9C,EAAE;IACF,OAAO;QACL,gBAAgB,WAAW,EAAE;QAC7B,EAAE;QACF,wBAAwB;QACxB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;KAC1B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC,CAAA;AAOD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAM9B;IACC,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAEvD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;QAChC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;QAC5B,MAAM,EAAE,sBAAsB,EAAE;QAChC,MAAM,EAAE,oBAAoB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC;QAC/D,WAAW,EAAE,OAAO,CAAC,MAAM;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,8BAA8B;SACvC,CAAC;KACH,CAAC,CAAA;IAEF,OAAO,MAAM,CAAC,MAAkC,CAAA;AAClD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAMjC;IACC,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAEvD,MAAM,MAAM,GAAG,UAAU,CAAC;QACxB,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;QAC5B,MAAM,EAAE,sBAAsB,EAAE;QAChC,MAAM,EAAE,oBAAoB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC;QAC/D,WAAW,EAAE,OAAO,CAAC,MAAM;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,8BAA8B;SACvC,CAAC;KACH,CAAC,CAAA;IAEF,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,UAAU;QACvB,KAAK,EAAE,MAAM,CAAC,MAA2C;KAC1D,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This Source Code is subject to the terms of the Mozilla Public
|
|
3
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
4
|
+
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
5
|
+
*
|
|
6
|
+
* Copyright (c) Infonomic Company Limited
|
|
7
|
+
*/
|
|
8
|
+
import { patchDoc as patchVercelDoc, patchDocStreaming as patchVercelDocStreaming } from './patch-vercel';
|
|
9
|
+
import type { Sdk } from '../../@types';
|
|
10
|
+
export declare const getPatchDoc: (sdk: Sdk) => typeof patchVercelDoc;
|
|
11
|
+
export declare const getPatchDocStreaming: (sdk: Sdk) => typeof patchVercelDocStreaming;
|
|
12
|
+
//# sourceMappingURL=patch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patch.d.ts","sourceRoot":"","sources":["../../../src/models/openai/patch.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,EACL,QAAQ,IAAI,cAAc,EAC1B,iBAAiB,IAAI,uBAAuB,EAC7C,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAEnC,eAAO,MAAM,WAAW,GAAI,KAAK,GAAG,0BAEnC,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,KAAK,GAAG,mCAE5C,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This Source Code is subject to the terms of the Mozilla Public
|
|
3
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
4
|
+
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
5
|
+
*
|
|
6
|
+
* Copyright (c) Infonomic Company Limited
|
|
7
|
+
*/
|
|
8
|
+
import { patchDoc as patchNativeDoc, patchDocStreaming as patchNativeDocStreaming, } from './patch-native';
|
|
9
|
+
import { patchDoc as patchVercelDoc, patchDocStreaming as patchVercelDocStreaming, } from './patch-vercel';
|
|
10
|
+
export const getPatchDoc = (sdk) => {
|
|
11
|
+
return sdk === 'vercel' ? patchVercelDoc : patchNativeDoc;
|
|
12
|
+
};
|
|
13
|
+
export const getPatchDocStreaming = (sdk) => {
|
|
14
|
+
return sdk === 'vercel' ? patchVercelDocStreaming : patchNativeDocStreaming;
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=patch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patch.js","sourceRoot":"","sources":["../../../src/models/openai/patch.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,QAAQ,IAAI,cAAc,EAC1B,iBAAiB,IAAI,uBAAuB,GAC7C,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,QAAQ,IAAI,cAAc,EAC1B,iBAAiB,IAAI,uBAAuB,GAC7C,MAAM,gBAAgB,CAAA;AAGvB,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAQ,EAAE,EAAE;IACtC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAA;AAC3D,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,GAAQ,EAAE,EAAE;IAC/C,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,uBAAuB,CAAA;AAC7E,CAAC,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This Source Code is subject to the terms of the Mozilla Public
|
|
3
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
4
|
+
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
5
|
+
*
|
|
6
|
+
* Copyright (c) Infonomic Company Limited
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=patch.test.node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patch.test.node.d.ts","sourceRoot":"","sources":["../../../src/models/openai/patch.test.node.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This Source Code is subject to the terms of the Mozilla Public
|
|
3
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
4
|
+
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
5
|
+
*
|
|
6
|
+
* Copyright (c) Infonomic Company Limited
|
|
7
|
+
*/
|
|
8
|
+
import { beforeEach, describe, expect, it } from 'vitest';
|
|
9
|
+
import { getAiServerConfig as getServerConfig } from '../../config/ai-config';
|
|
10
|
+
import { patchDoc as patchDocNative, patchDocStreaming as patchDocStreamingNative, } from './patch-native';
|
|
11
|
+
import { patchDocStreaming as patchDocStreamingVercel, patchDoc as patchDocVercel, } from './patch-vercel';
|
|
12
|
+
const MODEL = 'gpt-5.2';
|
|
13
|
+
describe('openai patch', () => {
|
|
14
|
+
beforeEach(async () => { });
|
|
15
|
+
const runReal = process.env.AI_RUN_REAL_TESTS === 'true';
|
|
16
|
+
if (runReal) {
|
|
17
|
+
/***
|
|
18
|
+
* Generates a document from OpenAI using structured outputs.
|
|
19
|
+
*/
|
|
20
|
+
it.skip('makes a real OpenAI request (manual run) from native provider', async () => {
|
|
21
|
+
const config = getServerConfig();
|
|
22
|
+
if (!config.ai.openai.apiKey) {
|
|
23
|
+
throw new Error('OPENAI_API_KEY is required for real OpenAI tests.');
|
|
24
|
+
}
|
|
25
|
+
const result = await patchDocNative({
|
|
26
|
+
apiKey: config.ai.openai.apiKey,
|
|
27
|
+
model: MODEL,
|
|
28
|
+
prompt: 'Translate into French.',
|
|
29
|
+
textNodes: [{ id: 0, text: 'The sun is shining' }],
|
|
30
|
+
});
|
|
31
|
+
console.log(result);
|
|
32
|
+
expect(result).toBeTruthy();
|
|
33
|
+
expect(typeof result).toBe('object');
|
|
34
|
+
}, 30000);
|
|
35
|
+
/***
|
|
36
|
+
* Generates a document from OpenAI using structured outputs via streaming.
|
|
37
|
+
*/
|
|
38
|
+
it.skip('streams a real OpenAI response (manual run) from native provider', async () => {
|
|
39
|
+
const config = getServerConfig();
|
|
40
|
+
if (!config.ai.openai.apiKey) {
|
|
41
|
+
throw new Error('OPENAI_API_KEY is required for real OpenAI tests.');
|
|
42
|
+
}
|
|
43
|
+
const streamResult = patchDocStreamingNative({
|
|
44
|
+
apiKey: config.ai.openai.apiKey,
|
|
45
|
+
model: MODEL,
|
|
46
|
+
prompt: 'Translate into French.',
|
|
47
|
+
textNodes: [{ id: 0, text: 'The sun is shining' }],
|
|
48
|
+
});
|
|
49
|
+
let streamedText = '';
|
|
50
|
+
for await (const chunk of streamResult.text) {
|
|
51
|
+
streamedText += chunk;
|
|
52
|
+
console.log('STREAM CHUNK (OpenAI Native):', chunk);
|
|
53
|
+
}
|
|
54
|
+
const final = await streamResult.final;
|
|
55
|
+
console.log('FINAL RESULT (OpenAI Native):', final);
|
|
56
|
+
expect(streamedText.length).toBeGreaterThanOrEqual(0);
|
|
57
|
+
expect(final).toBeTruthy();
|
|
58
|
+
expect(typeof final).toBe('object');
|
|
59
|
+
}, 30000);
|
|
60
|
+
/***
|
|
61
|
+
* Generates a document from OpenAI using structured outputs.
|
|
62
|
+
*/
|
|
63
|
+
it.skip('makes a real OpenAI request (manual run) from vercel provider', async () => {
|
|
64
|
+
const config = getServerConfig();
|
|
65
|
+
if (!config.ai.openai.apiKey) {
|
|
66
|
+
throw new Error('OPENAI_API_KEY is required for real OpenAI tests.');
|
|
67
|
+
}
|
|
68
|
+
const result = await patchDocVercel({
|
|
69
|
+
apiKey: config.ai.openai.apiKey,
|
|
70
|
+
model: MODEL,
|
|
71
|
+
prompt: 'Translate into French.',
|
|
72
|
+
textNodes: [{ id: 0, text: 'The sun is shining' }],
|
|
73
|
+
});
|
|
74
|
+
console.log(result);
|
|
75
|
+
expect(result).toBeTruthy();
|
|
76
|
+
expect(typeof result).toBe('object');
|
|
77
|
+
}, 30000);
|
|
78
|
+
/***
|
|
79
|
+
* Generates a document from OpenAI using structured outputs via streaming.
|
|
80
|
+
*/
|
|
81
|
+
it.skip('streams a real OpenAI response (manual run) from vercel provider', async () => {
|
|
82
|
+
const config = getServerConfig();
|
|
83
|
+
if (!config.ai.openai.apiKey) {
|
|
84
|
+
throw new Error('OPENAI_API_KEY is required for real OpenAI tests.');
|
|
85
|
+
}
|
|
86
|
+
const streamResult = patchDocStreamingVercel({
|
|
87
|
+
apiKey: config.ai.openai.apiKey,
|
|
88
|
+
model: MODEL,
|
|
89
|
+
prompt: 'Translate into French.',
|
|
90
|
+
textNodes: [{ id: 0, text: 'The sun is shining' }],
|
|
91
|
+
});
|
|
92
|
+
let streamedText = '';
|
|
93
|
+
for await (const chunk of streamResult.text) {
|
|
94
|
+
streamedText += chunk;
|
|
95
|
+
console.log('STREAM CHUNK (OpenAI Vercel):', chunk);
|
|
96
|
+
}
|
|
97
|
+
const final = await streamResult.final;
|
|
98
|
+
console.log('FINAL RESULT (OpenAI Vercel):', final);
|
|
99
|
+
expect(streamedText.length).toBeGreaterThanOrEqual(0);
|
|
100
|
+
expect(final).toBeTruthy();
|
|
101
|
+
expect(typeof final).toBe('object');
|
|
102
|
+
}, 30000);
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
it.skip('skips real OpenAI tests', () => {
|
|
106
|
+
console.log('Set AI_RUN_REAL_TESTS=true to run real OpenAI tests.');
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
//# sourceMappingURL=patch.test.node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patch.test.node.js","sourceRoot":"","sources":["../../../src/models/openai/patch.test.node.ts"],"names":[],"mappings":"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"}
|