@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.
Files changed (248) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +4 -0
  3. package/dist/@types.d.ts +103 -0
  4. package/dist/@types.d.ts.map +1 -0
  5. package/dist/@types.js +68 -0
  6. package/dist/@types.js.map +1 -0
  7. package/dist/config/ai-config.d.ts +76 -0
  8. package/dist/config/ai-config.d.ts.map +1 -0
  9. package/dist/config/ai-config.js +108 -0
  10. package/dist/config/ai-config.js.map +1 -0
  11. package/dist/config/ai-config.test.node.d.ts +9 -0
  12. package/dist/config/ai-config.test.node.d.ts.map +1 -0
  13. package/dist/config/ai-config.test.node.js +31 -0
  14. package/dist/config/ai-config.test.node.js.map +1 -0
  15. package/dist/config/ai-provider.d.ts +17 -0
  16. package/dist/config/ai-provider.d.ts.map +1 -0
  17. package/dist/config/ai-provider.js +32 -0
  18. package/dist/config/ai-provider.js.map +1 -0
  19. package/dist/execute.d.ts +15 -0
  20. package/dist/execute.d.ts.map +1 -0
  21. package/dist/execute.js +473 -0
  22. package/dist/execute.js.map +1 -0
  23. package/dist/generate.d.ts +64 -0
  24. package/dist/generate.d.ts.map +1 -0
  25. package/dist/generate.js +235 -0
  26. package/dist/generate.js.map +1 -0
  27. package/dist/index.d.ts +28 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +43 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/lexical-text-edits.d.ts +23 -0
  32. package/dist/lexical-text-edits.d.ts.map +1 -0
  33. package/dist/lexical-text-edits.js +62 -0
  34. package/dist/lexical-text-edits.js.map +1 -0
  35. package/dist/lib/logger.d.ts +10 -0
  36. package/dist/lib/logger.d.ts.map +1 -0
  37. package/dist/lib/logger.js +16 -0
  38. package/dist/lib/logger.js.map +1 -0
  39. package/dist/models/anthropic/anthropic-models.d.ts +14 -0
  40. package/dist/models/anthropic/anthropic-models.d.ts.map +1 -0
  41. package/dist/models/anthropic/anthropic-models.js +41 -0
  42. package/dist/models/anthropic/anthropic-models.js.map +1 -0
  43. package/dist/models/anthropic/anthropic.d.ts +9 -0
  44. package/dist/models/anthropic/anthropic.d.ts.map +1 -0
  45. package/dist/models/anthropic/anthropic.js +20 -0
  46. package/dist/models/anthropic/anthropic.js.map +1 -0
  47. package/dist/models/anthropic/generate-native.d.ts +59 -0
  48. package/dist/models/anthropic/generate-native.d.ts.map +1 -0
  49. package/dist/models/anthropic/generate-native.js +271 -0
  50. package/dist/models/anthropic/generate-native.js.map +1 -0
  51. package/dist/models/anthropic/generate-vercel.d.ts +59 -0
  52. package/dist/models/anthropic/generate-vercel.d.ts.map +1 -0
  53. package/dist/models/anthropic/generate-vercel.js +126 -0
  54. package/dist/models/anthropic/generate-vercel.js.map +1 -0
  55. package/dist/models/anthropic/generate.d.ts +16 -0
  56. package/dist/models/anthropic/generate.d.ts.map +1 -0
  57. package/dist/models/anthropic/generate.js +28 -0
  58. package/dist/models/anthropic/generate.js.map +1 -0
  59. package/dist/models/anthropic/generate.test.node.d.ts +9 -0
  60. package/dist/models/anthropic/generate.test.node.d.ts.map +1 -0
  61. package/dist/models/anthropic/generate.test.node.js +106 -0
  62. package/dist/models/anthropic/generate.test.node.js.map +1 -0
  63. package/dist/models/anthropic/patch-native.d.ts +33 -0
  64. package/dist/models/anthropic/patch-native.d.ts.map +1 -0
  65. package/dist/models/anthropic/patch-native.js +152 -0
  66. package/dist/models/anthropic/patch-native.js.map +1 -0
  67. package/dist/models/anthropic/patch-vercel.d.ts +33 -0
  68. package/dist/models/anthropic/patch-vercel.d.ts.map +1 -0
  69. package/dist/models/anthropic/patch-vercel.js +47 -0
  70. package/dist/models/anthropic/patch-vercel.js.map +1 -0
  71. package/dist/models/anthropic/patch.d.ts +12 -0
  72. package/dist/models/anthropic/patch.d.ts.map +1 -0
  73. package/dist/models/anthropic/patch.js +16 -0
  74. package/dist/models/anthropic/patch.js.map +1 -0
  75. package/dist/models/anthropic/patch.test.node.d.ts +9 -0
  76. package/dist/models/anthropic/patch.test.node.d.ts.map +1 -0
  77. package/dist/models/anthropic/patch.test.node.js +110 -0
  78. package/dist/models/anthropic/patch.test.node.js.map +1 -0
  79. package/dist/models/anthropic/schema.d.ts +212 -0
  80. package/dist/models/anthropic/schema.d.ts.map +1 -0
  81. package/dist/models/anthropic/schema.js +131 -0
  82. package/dist/models/anthropic/schema.js.map +1 -0
  83. package/dist/models/google/generate-native.d.ts +59 -0
  84. package/dist/models/google/generate-native.d.ts.map +1 -0
  85. package/dist/models/google/generate-native.js +244 -0
  86. package/dist/models/google/generate-native.js.map +1 -0
  87. package/dist/models/google/generate-vercel.d.ts +59 -0
  88. package/dist/models/google/generate-vercel.d.ts.map +1 -0
  89. package/dist/models/google/generate-vercel.js +133 -0
  90. package/dist/models/google/generate-vercel.js.map +1 -0
  91. package/dist/models/google/generate.d.ts +16 -0
  92. package/dist/models/google/generate.d.ts.map +1 -0
  93. package/dist/models/google/generate.js +28 -0
  94. package/dist/models/google/generate.js.map +1 -0
  95. package/dist/models/google/generate.test.node.d.ts +9 -0
  96. package/dist/models/google/generate.test.node.d.ts.map +1 -0
  97. package/dist/models/google/generate.test.node.js +106 -0
  98. package/dist/models/google/generate.test.node.js.map +1 -0
  99. package/dist/models/google/google-models.d.ts +14 -0
  100. package/dist/models/google/google-models.d.ts.map +1 -0
  101. package/dist/models/google/google-models.js +25 -0
  102. package/dist/models/google/google-models.js.map +1 -0
  103. package/dist/models/google/normalize-generated-doc.d.ts +10 -0
  104. package/dist/models/google/normalize-generated-doc.d.ts.map +1 -0
  105. package/dist/models/google/normalize-generated-doc.js +48 -0
  106. package/dist/models/google/normalize-generated-doc.js.map +1 -0
  107. package/dist/models/google/patch-native.d.ts +33 -0
  108. package/dist/models/google/patch-native.d.ts.map +1 -0
  109. package/dist/models/google/patch-native.js +164 -0
  110. package/dist/models/google/patch-native.js.map +1 -0
  111. package/dist/models/google/patch-vercel.d.ts +33 -0
  112. package/dist/models/google/patch-vercel.d.ts.map +1 -0
  113. package/dist/models/google/patch-vercel.js +49 -0
  114. package/dist/models/google/patch-vercel.js.map +1 -0
  115. package/dist/models/google/patch.d.ts +12 -0
  116. package/dist/models/google/patch.d.ts.map +1 -0
  117. package/dist/models/google/patch.js +16 -0
  118. package/dist/models/google/patch.js.map +1 -0
  119. package/dist/models/google/patch.test.node.d.ts +9 -0
  120. package/dist/models/google/patch.test.node.d.ts.map +1 -0
  121. package/dist/models/google/patch.test.node.js +110 -0
  122. package/dist/models/google/patch.test.node.js.map +1 -0
  123. package/dist/models/google/schema.d.ts +416 -0
  124. package/dist/models/google/schema.d.ts.map +1 -0
  125. package/dist/models/google/schema.js +254 -0
  126. package/dist/models/google/schema.js.map +1 -0
  127. package/dist/models/openai/generate-native.d.ts +65 -0
  128. package/dist/models/openai/generate-native.d.ts.map +1 -0
  129. package/dist/models/openai/generate-native.js +276 -0
  130. package/dist/models/openai/generate-native.js.map +1 -0
  131. package/dist/models/openai/generate-vercel.d.ts +59 -0
  132. package/dist/models/openai/generate-vercel.d.ts.map +1 -0
  133. package/dist/models/openai/generate-vercel.js +132 -0
  134. package/dist/models/openai/generate-vercel.js.map +1 -0
  135. package/dist/models/openai/generate.d.ts +16 -0
  136. package/dist/models/openai/generate.d.ts.map +1 -0
  137. package/dist/models/openai/generate.js +28 -0
  138. package/dist/models/openai/generate.js.map +1 -0
  139. package/dist/models/openai/generate.test.node.d.ts +9 -0
  140. package/dist/models/openai/generate.test.node.d.ts.map +1 -0
  141. package/dist/models/openai/generate.test.node.js +106 -0
  142. package/dist/models/openai/generate.test.node.js.map +1 -0
  143. package/dist/models/openai/openai-models.d.ts +14 -0
  144. package/dist/models/openai/openai-models.d.ts.map +1 -0
  145. package/dist/models/openai/openai-models.js +23 -0
  146. package/dist/models/openai/openai-models.js.map +1 -0
  147. package/dist/models/openai/patch-native.d.ts +33 -0
  148. package/dist/models/openai/patch-native.d.ts.map +1 -0
  149. package/dist/models/openai/patch-native.js +151 -0
  150. package/dist/models/openai/patch-native.js.map +1 -0
  151. package/dist/models/openai/patch-vercel.d.ts +33 -0
  152. package/dist/models/openai/patch-vercel.d.ts.map +1 -0
  153. package/dist/models/openai/patch-vercel.js +49 -0
  154. package/dist/models/openai/patch-vercel.js.map +1 -0
  155. package/dist/models/openai/patch.d.ts +12 -0
  156. package/dist/models/openai/patch.d.ts.map +1 -0
  157. package/dist/models/openai/patch.js +16 -0
  158. package/dist/models/openai/patch.js.map +1 -0
  159. package/dist/models/openai/patch.test.node.d.ts +9 -0
  160. package/dist/models/openai/patch.test.node.d.ts.map +1 -0
  161. package/dist/models/openai/patch.test.node.js +110 -0
  162. package/dist/models/openai/patch.test.node.js.map +1 -0
  163. package/dist/models/openai/schema.d.ts +460 -0
  164. package/dist/models/openai/schema.d.ts.map +1 -0
  165. package/dist/models/openai/schema.js +327 -0
  166. package/dist/models/openai/schema.js.map +1 -0
  167. package/dist/patch.d.ts +45 -0
  168. package/dist/patch.d.ts.map +1 -0
  169. package/dist/patch.js +138 -0
  170. package/dist/patch.js.map +1 -0
  171. package/dist/plugins/ai-plugin-base.d.ts +40 -0
  172. package/dist/plugins/ai-plugin-base.d.ts.map +1 -0
  173. package/dist/plugins/ai-plugin-base.js +218 -0
  174. package/dist/plugins/ai-plugin-base.js.map +1 -0
  175. package/dist/plugins/ai-plugin.css +181 -0
  176. package/dist/plugins/lexical/create-empty-editor-state.d.ts +32 -0
  177. package/dist/plugins/lexical/create-empty-editor-state.d.ts.map +1 -0
  178. package/dist/plugins/lexical/create-empty-editor-state.js +51 -0
  179. package/dist/plugins/lexical/create-empty-editor-state.js.map +1 -0
  180. package/dist/plugins/lexical/import-html.d.ts +10 -0
  181. package/dist/plugins/lexical/import-html.d.ts.map +1 -0
  182. package/dist/plugins/lexical/import-html.js +31 -0
  183. package/dist/plugins/lexical/import-html.js.map +1 -0
  184. package/dist/plugins/lexical/index.d.ts +9 -0
  185. package/dist/plugins/lexical/index.d.ts.map +1 -0
  186. package/dist/plugins/lexical/index.js +9 -0
  187. package/dist/plugins/lexical/index.js.map +1 -0
  188. package/dist/plugins/lexical/plugin.d.ts +11 -0
  189. package/dist/plugins/lexical/plugin.d.ts.map +1 -0
  190. package/dist/plugins/lexical/plugin.js +305 -0
  191. package/dist/plugins/lexical/plugin.js.map +1 -0
  192. package/dist/plugins/storage.d.ts +18 -0
  193. package/dist/plugins/storage.d.ts.map +1 -0
  194. package/dist/plugins/storage.js +57 -0
  195. package/dist/plugins/storage.js.map +1 -0
  196. package/dist/plugins/streaming-preview.d.ts +12 -0
  197. package/dist/plugins/streaming-preview.d.ts.map +1 -0
  198. package/dist/plugins/streaming-preview.js +24 -0
  199. package/dist/plugins/streaming-preview.js.map +1 -0
  200. package/dist/plugins/text/index.d.ts +9 -0
  201. package/dist/plugins/text/index.d.ts.map +1 -0
  202. package/dist/plugins/text/index.js +9 -0
  203. package/dist/plugins/text/index.js.map +1 -0
  204. package/dist/plugins/text/plugin.d.ts +18 -0
  205. package/dist/plugins/text/plugin.d.ts.map +1 -0
  206. package/dist/plugins/text/plugin.js +261 -0
  207. package/dist/plugins/text/plugin.js.map +1 -0
  208. package/dist/prompts.d.ts +30 -0
  209. package/dist/prompts.d.ts.map +1 -0
  210. package/dist/prompts.js +83 -0
  211. package/dist/prompts.js.map +1 -0
  212. package/dist/schemas/lexical-json-schema.d.ts +68 -0
  213. package/dist/schemas/lexical-json-schema.d.ts.map +1 -0
  214. package/dist/schemas/lexical-json-schema.js +434 -0
  215. package/dist/schemas/lexical-json-schema.js.map +1 -0
  216. package/dist/scripts/list-models.d.ts +9 -0
  217. package/dist/scripts/list-models.d.ts.map +1 -0
  218. package/dist/scripts/list-models.js +55 -0
  219. package/dist/scripts/list-models.js.map +1 -0
  220. package/dist/server.d.ts +25 -0
  221. package/dist/server.d.ts.map +1 -0
  222. package/dist/server.js +22 -0
  223. package/dist/server.js.map +1 -0
  224. package/dist/utils/convert-to-lexical.d.ts +62 -0
  225. package/dist/utils/convert-to-lexical.d.ts.map +1 -0
  226. package/dist/utils/convert-to-lexical.js +210 -0
  227. package/dist/utils/convert-to-lexical.js.map +1 -0
  228. package/dist/utils/create-empty-editor-state.d.ts +32 -0
  229. package/dist/utils/create-empty-editor-state.d.ts.map +1 -0
  230. package/dist/utils/create-empty-editor-state.js +51 -0
  231. package/dist/utils/create-empty-editor-state.js.map +1 -0
  232. package/dist/utils/has-text.d.ts +10 -0
  233. package/dist/utils/has-text.d.ts.map +1 -0
  234. package/dist/utils/has-text.js +35 -0
  235. package/dist/utils/has-text.js.map +1 -0
  236. package/dist/utils/has-text.test.d.ts +9 -0
  237. package/dist/utils/has-text.test.d.ts.map +1 -0
  238. package/dist/utils/has-text.test.js +69 -0
  239. package/dist/utils/has-text.test.js.map +1 -0
  240. package/dist/utils/is-object-schema.d.ts +17 -0
  241. package/dist/utils/is-object-schema.d.ts.map +1 -0
  242. package/dist/utils/is-object-schema.js +19 -0
  243. package/dist/utils/is-object-schema.js.map +1 -0
  244. package/dist/utils/lexical-text-edits.d.ts +23 -0
  245. package/dist/utils/lexical-text-edits.d.ts.map +1 -0
  246. package/dist/utils/lexical-text-edits.js +62 -0
  247. package/dist/utils/lexical-text-edits.js.map +1 -0
  248. package/package.json +111 -0
@@ -0,0 +1,473 @@
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 { stdSerializers } from 'pino';
9
+ import { z } from 'zod';
10
+ import { instructionSchema } from './@types';
11
+ import { getAiServerConfig } from './config/ai-config';
12
+ import { generateHtml, generateHtmlStreaming, generateStructured, generateStructuredStreaming, generateText, generateTextStreaming, } from './generate';
13
+ import { getLogger } from './lib/logger';
14
+ import { patch, patchStreaming } from './patch';
15
+ const isAbortLikeError = (error) => {
16
+ if (error == null)
17
+ return false;
18
+ // Many libraries throw DOM-style AbortError
19
+ const anyErr = error;
20
+ if (anyErr?.name === 'AbortError')
21
+ return true;
22
+ // OpenAI Node SDK (responses/streaming + undici) can throw these.
23
+ if (anyErr?.type === 'APIUserAbortError')
24
+ return true;
25
+ // Undici abort error (often surfaces as name ResponseAborted)
26
+ if (anyErr?.name === 'ResponseAborted')
27
+ return true;
28
+ // Some libs only set message text.
29
+ const message = typeof anyErr?.message === 'string' ? anyErr.message : '';
30
+ if (message.toLowerCase().includes('aborted'))
31
+ return true;
32
+ return false;
33
+ };
34
+ const createEmptyTextStream = () => (async function* () {
35
+ // intentionally empty
36
+ })();
37
+ const validateInstructionFields = (params) => {
38
+ const config = getAiServerConfig();
39
+ const validatedFields = instructionSchema.safeParse(params);
40
+ if (validatedFields.success === false) {
41
+ return {
42
+ ok: false,
43
+ errorState: {
44
+ errors: z.flattenError(validatedFields.error).fieldErrors,
45
+ message: 'Missing fields in instruction form.',
46
+ status: 'failed',
47
+ },
48
+ };
49
+ }
50
+ const { prompt, input, provider, model: modelName, sdk, mode } = validatedFields.data;
51
+ const output = validatedFields.data.output ?? { type: 'structured' };
52
+ // Validate that the appropriate API key exists for the selected provider
53
+ let apiKey;
54
+ switch (provider) {
55
+ case 'openai':
56
+ apiKey = config.ai.openai.apiKey;
57
+ break;
58
+ case 'google':
59
+ apiKey = config.ai.google.apiKey;
60
+ break;
61
+ case 'anthropic':
62
+ apiKey = config.ai.anthropic.apiKey;
63
+ break;
64
+ }
65
+ if (apiKey == null || apiKey.length === 0) {
66
+ return {
67
+ ok: false,
68
+ errorState: {
69
+ errors: { prompt: [], editor: [] },
70
+ message: `${provider.charAt(0).toUpperCase() + provider.slice(1)} API key is missing on the server.`,
71
+ status: 'failed',
72
+ },
73
+ };
74
+ }
75
+ let inputValue = null;
76
+ if (input.type === 'structured') {
77
+ try {
78
+ inputValue = JSON.parse(input.editorJson);
79
+ }
80
+ catch {
81
+ return {
82
+ ok: false,
83
+ errorState: {
84
+ errors: { editor: ['Editor state must be valid JSON.'] },
85
+ message: 'Editor state is invalid JSON.',
86
+ status: 'failed',
87
+ },
88
+ };
89
+ }
90
+ }
91
+ if (output.type === 'structured' && input.type !== 'structured') {
92
+ return {
93
+ ok: false,
94
+ errorState: {
95
+ errors: { editor: ['Structured output requires structured editor input.'] },
96
+ message: 'Structured output requires structured editor input.',
97
+ status: 'failed',
98
+ },
99
+ };
100
+ }
101
+ if (input.type === 'text') {
102
+ inputValue = input.text;
103
+ }
104
+ return {
105
+ ok: true,
106
+ data: {
107
+ sdk,
108
+ mode,
109
+ apiKey,
110
+ input: {
111
+ type: input.type,
112
+ value: inputValue,
113
+ },
114
+ modelName,
115
+ prompt,
116
+ provider,
117
+ output,
118
+ },
119
+ };
120
+ };
121
+ export async function executeInstruction(params, options) {
122
+ const startedAt = Date.now();
123
+ const withLastRun = (state) => {
124
+ // console.log('executeInstruction result', state)
125
+ return { ...state, lastRun: Date.now() - startedAt };
126
+ };
127
+ const logger = getLogger();
128
+ const validated = validateInstructionFields(params);
129
+ if (validated.ok === false) {
130
+ return withLastRun(validated.errorState);
131
+ }
132
+ const { prompt, input, provider, modelName, sdk, apiKey, output, mode } = validated.data;
133
+ // Resolve existing content as plain text for use as context in new_with_context / patch modes.
134
+ const contextText = mode !== 'new'
135
+ ? input.type === 'structured'
136
+ ? JSON.stringify(input.value)
137
+ : String(input.value ?? '')
138
+ : undefined;
139
+ try {
140
+ if (output.type === 'html') {
141
+ const result = await generateHtml({
142
+ provider,
143
+ apiKey,
144
+ modelName,
145
+ prompt,
146
+ sdk,
147
+ inputText: contextText,
148
+ signal: options?.signal,
149
+ });
150
+ if (result.success) {
151
+ return withLastRun({
152
+ errors: {},
153
+ message: result.message,
154
+ format: 'html',
155
+ html: result.html,
156
+ status: 'success',
157
+ });
158
+ }
159
+ return withLastRun({
160
+ errors: result.errors,
161
+ message: result.message,
162
+ status: 'failed',
163
+ });
164
+ }
165
+ if (output.type === 'text') {
166
+ const result = await generateText({
167
+ provider,
168
+ apiKey,
169
+ modelName,
170
+ prompt,
171
+ sdk,
172
+ inputText: contextText,
173
+ maxLength: output.maxLength,
174
+ signal: options?.signal,
175
+ });
176
+ if (result.success) {
177
+ return withLastRun({
178
+ errors: {},
179
+ message: result.message,
180
+ format: 'text',
181
+ text: result.text,
182
+ status: 'success',
183
+ });
184
+ }
185
+ return withLastRun({
186
+ errors: result.errors,
187
+ message: result.message,
188
+ status: 'failed',
189
+ });
190
+ }
191
+ // output.type === 'structured'
192
+ if (input.type !== 'structured' || input.value == null) {
193
+ return withLastRun({
194
+ errors: { editor: ['Structured output requires structured editor input.'] },
195
+ message: 'Structured output requires structured editor input.',
196
+ status: 'failed',
197
+ });
198
+ }
199
+ if (mode === 'patch') {
200
+ const result = await patch({
201
+ provider,
202
+ apiKey,
203
+ modelName,
204
+ prompt,
205
+ sdk,
206
+ editorState: input.value,
207
+ signal: options?.signal,
208
+ });
209
+ if (result.success) {
210
+ return withLastRun({
211
+ errors: {},
212
+ message: result.message,
213
+ editor: result.editor,
214
+ format: 'lexical',
215
+ status: 'success',
216
+ });
217
+ }
218
+ return withLastRun({
219
+ errors: result.errors,
220
+ message: result.message,
221
+ status: 'failed',
222
+ });
223
+ }
224
+ // mode === 'new' or mode === 'new_with_context'
225
+ const result = await generateStructured({
226
+ provider,
227
+ apiKey,
228
+ modelName,
229
+ prompt,
230
+ sdk,
231
+ inputText: contextText,
232
+ signal: options?.signal,
233
+ });
234
+ if (result.success) {
235
+ switch (result.format) {
236
+ case 'html':
237
+ return withLastRun({
238
+ errors: {},
239
+ message: result.message,
240
+ format: 'html',
241
+ html: result.html,
242
+ status: 'success',
243
+ });
244
+ case 'text':
245
+ return withLastRun({
246
+ errors: {},
247
+ message: result.message,
248
+ format: 'text',
249
+ text: result.text,
250
+ status: 'success',
251
+ });
252
+ case 'lexical':
253
+ return withLastRun({
254
+ errors: {},
255
+ message: result.message,
256
+ format: 'lexical',
257
+ editor: result.editor,
258
+ status: 'success',
259
+ });
260
+ }
261
+ }
262
+ return withLastRun({
263
+ errors: result.errors,
264
+ message: result.message,
265
+ status: 'failed',
266
+ });
267
+ }
268
+ catch (error) {
269
+ // Cancellation is expected behavior; do not log at error level.
270
+ if (isAbortLikeError(error)) {
271
+ return withLastRun({
272
+ errors: {},
273
+ message: 'Cancelled.',
274
+ status: 'idle',
275
+ });
276
+ }
277
+ logger.error({
278
+ instruction: {
279
+ status: 'failed',
280
+ message: 'error calling instruction action',
281
+ method: 'instruction',
282
+ error: stdSerializers.err(error),
283
+ },
284
+ });
285
+ return withLastRun({
286
+ errors: {},
287
+ message: 'Failed to complete AI instruction.',
288
+ status: 'failed',
289
+ });
290
+ }
291
+ }
292
+ export function executeInstructionStreaming(params, options) {
293
+ const startedAt = Date.now();
294
+ const withLastRun = (state) => {
295
+ return { ...state, lastRun: Date.now() - startedAt };
296
+ };
297
+ const logger = getLogger();
298
+ const validated = validateInstructionFields(params);
299
+ if (validated.ok === false) {
300
+ return {
301
+ text: createEmptyTextStream(),
302
+ final: Promise.resolve(withLastRun(validated.errorState)),
303
+ };
304
+ }
305
+ const { prompt, input, provider, modelName, sdk, apiKey, output, mode } = validated.data;
306
+ // Resolve existing content as plain text for use as context in new_with_context / patch modes.
307
+ const contextText = mode !== 'new'
308
+ ? input.type === 'structured'
309
+ ? JSON.stringify(input.value)
310
+ : String(input.value ?? '')
311
+ : undefined;
312
+ try {
313
+ let streamResult;
314
+ if (output.type === 'html') {
315
+ streamResult = generateHtmlStreaming({
316
+ provider,
317
+ apiKey,
318
+ modelName,
319
+ prompt,
320
+ sdk,
321
+ inputText: contextText,
322
+ signal: options?.signal,
323
+ });
324
+ }
325
+ else if (output.type === 'text') {
326
+ streamResult = generateTextStreaming({
327
+ provider,
328
+ apiKey,
329
+ modelName,
330
+ prompt,
331
+ sdk,
332
+ inputText: contextText,
333
+ maxLength: output.maxLength,
334
+ signal: options?.signal,
335
+ });
336
+ }
337
+ else {
338
+ if (input.type !== 'structured' || input.value == null) {
339
+ return {
340
+ text: createEmptyTextStream(),
341
+ final: Promise.resolve(withLastRun({
342
+ errors: { editor: ['Structured output requires structured editor input.'] },
343
+ message: 'Structured output requires structured editor input.',
344
+ status: 'failed',
345
+ })),
346
+ };
347
+ }
348
+ if (mode === 'patch') {
349
+ streamResult = patchStreaming({
350
+ provider,
351
+ apiKey,
352
+ modelName,
353
+ prompt,
354
+ sdk,
355
+ editorState: input.value,
356
+ signal: options?.signal,
357
+ });
358
+ }
359
+ else {
360
+ // mode === 'new' or mode === 'new_with_context'
361
+ streamResult = generateStructuredStreaming({
362
+ provider,
363
+ apiKey,
364
+ modelName,
365
+ prompt,
366
+ sdk,
367
+ inputText: contextText,
368
+ signal: options?.signal,
369
+ });
370
+ }
371
+ }
372
+ const final = (async () => {
373
+ try {
374
+ const result = await streamResult.final;
375
+ if (result.success) {
376
+ if ('format' in result) {
377
+ switch (result.format) {
378
+ case 'html':
379
+ return withLastRun({
380
+ errors: {},
381
+ message: result.message,
382
+ format: 'html',
383
+ html: result.html,
384
+ status: 'success',
385
+ });
386
+ case 'text':
387
+ return withLastRun({
388
+ errors: {},
389
+ message: result.message,
390
+ format: 'text',
391
+ text: result.text,
392
+ status: 'success',
393
+ });
394
+ case 'lexical':
395
+ return withLastRun({
396
+ errors: {},
397
+ message: result.message,
398
+ format: 'lexical',
399
+ editor: result.editor,
400
+ status: 'success',
401
+ });
402
+ }
403
+ }
404
+ // Patch success (structured patch) returns an editor.
405
+ return withLastRun({
406
+ errors: {},
407
+ message: result.message,
408
+ format: 'lexical',
409
+ editor: result.editor,
410
+ status: 'success',
411
+ });
412
+ }
413
+ return withLastRun({
414
+ errors: result.errors,
415
+ message: result.message,
416
+ status: 'failed',
417
+ });
418
+ }
419
+ catch (error) {
420
+ if (isAbortLikeError(error)) {
421
+ return withLastRun({
422
+ errors: {},
423
+ message: 'Cancelled.',
424
+ status: 'idle',
425
+ });
426
+ }
427
+ logger.error({
428
+ instruction: {
429
+ status: 'failed',
430
+ message: 'error calling instruction action',
431
+ method: 'instruction-streaming',
432
+ error: stdSerializers.err(error),
433
+ },
434
+ });
435
+ return withLastRun({
436
+ errors: {},
437
+ message: 'Failed to complete AI instruction.',
438
+ status: 'failed',
439
+ });
440
+ }
441
+ })();
442
+ return { text: streamResult.text, final };
443
+ }
444
+ catch (error) {
445
+ if (isAbortLikeError(error)) {
446
+ return {
447
+ text: createEmptyTextStream(),
448
+ final: Promise.resolve(withLastRun({
449
+ errors: {},
450
+ message: 'Cancelled.',
451
+ status: 'idle',
452
+ })),
453
+ };
454
+ }
455
+ logger.error({
456
+ instruction: {
457
+ status: 'failed',
458
+ message: 'error calling instruction action',
459
+ method: 'instruction-streaming',
460
+ error: stdSerializers.err(error),
461
+ },
462
+ });
463
+ return {
464
+ text: createEmptyTextStream(),
465
+ final: Promise.resolve(withLastRun({
466
+ errors: {},
467
+ message: 'Failed to complete AI instruction.',
468
+ status: 'failed',
469
+ })),
470
+ };
471
+ }
472
+ }
473
+ //# sourceMappingURL=execute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.js","sourceRoot":"","sources":["../src/execute.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
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 { Provider, Sdk } from './@types';
9
+ export interface GenerateOptions {
10
+ provider: Provider;
11
+ apiKey: string;
12
+ modelName: string;
13
+ prompt: string;
14
+ sdk: Sdk;
15
+ inputText?: string;
16
+ signal?: AbortSignal;
17
+ }
18
+ export type GenerateResult = {
19
+ success: true;
20
+ format: 'lexical';
21
+ editor: any;
22
+ message: string;
23
+ } | {
24
+ success: true;
25
+ format: 'html';
26
+ html: string;
27
+ message: string;
28
+ } | {
29
+ success: true;
30
+ format: 'text';
31
+ text: string;
32
+ message: string;
33
+ };
34
+ export type GenerateStreamingResult = {
35
+ text: AsyncIterable<string>;
36
+ final: Promise<GenerateResult | GenerateError>;
37
+ };
38
+ export interface GenerateError {
39
+ success: false;
40
+ message: string;
41
+ errors: Record<string, string[]>;
42
+ }
43
+ export interface GenerateTextOptions extends GenerateOptions {
44
+ maxLength?: number;
45
+ }
46
+ /**
47
+ * Generates a new Lexical document from scratch based on a user prompt.
48
+ * Uses the documentSchema to ensure the AI generates valid Lexical JSON
49
+ * with proper structure including headings, paragraphs, lists, etc.
50
+ */
51
+ export declare function generateStructured(options: GenerateOptions): Promise<GenerateResult | GenerateError>;
52
+ /**
53
+ * Streams a Lexical document generation.
54
+ */
55
+ export declare function generateStructuredStreaming(options: GenerateOptions): GenerateStreamingResult;
56
+ export declare function generateHtml(options: GenerateOptions): Promise<Extract<GenerateResult, {
57
+ format: 'html';
58
+ }> | GenerateError>;
59
+ export declare function generateHtmlStreaming(options: GenerateOptions): GenerateStreamingResult;
60
+ export declare function generateText(options: GenerateTextOptions): Promise<Extract<GenerateResult, {
61
+ format: 'text';
62
+ }> | GenerateError>;
63
+ export declare function generateTextStreaming(options: GenerateTextOptions): GenerateStreamingResult;
64
+ //# sourceMappingURL=generate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA+BH,OAAO,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAM7C,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,QAAQ,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,GAAG,CAAA;IACR,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED,MAAM,MAAM,cAAc,GACtB;IACE,OAAO,EAAE,IAAI,CAAA;IACb,MAAM,EAAE,SAAS,CAAA;IACjB,MAAM,EAAE,GAAG,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;CAChB,GACD;IACE,OAAO,EAAE,IAAI,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB,GACD;IACE,OAAO,EAAE,IAAI,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAEL,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IAC3B,KAAK,EAAE,OAAO,CAAC,cAAc,GAAG,aAAa,CAAC,CAAA;CAC/C,CAAA;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,KAAK,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;CACjC;AAED,MAAM,WAAW,mBAAoB,SAAQ,eAAe;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAoED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,cAAc,GAAG,aAAa,CAAC,CAczC;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,eAAe,GAAG,uBAAuB,CAwB7F;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,aAAa,CAAC,CA2BtE;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,eAAe,GAAG,uBAAuB,CAsCvF;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,aAAa,CAAC,CAoCtE;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,mBAAmB,GAAG,uBAAuB,CA0C3F"}