@veryfront/ext-llm-openai 0.1.990 → 0.1.992

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.
@@ -14,7 +14,10 @@ export { buildProviderError, isNumberArray, mergeUsage, parseRetryAfterMs, Provi
14
14
  export interface OpenAIRuntimeConfig {
15
15
  apiKey: string;
16
16
  baseURL?: string;
17
+ /** Display/telemetry label. */
17
18
  name?: string;
19
+ /** Provider identity for OpenAI request defaults. Defaults to `name` in low-level factories. */
20
+ providerName?: string;
18
21
  fetch?: typeof globalThis.fetch;
19
22
  }
20
23
  export declare function createOpenAIModelRuntime(config: OpenAIRuntimeConfig, modelId: string): ModelRuntime;
@@ -1 +1 @@
1
- {"version":3,"file":"openai-provider.d.ts","sourceRoot":"","sources":["../src/openai-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EACL,kBAAkB,EAMlB,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EAMpB,+BAA+B,EAC/B,8BAA8B,EAC/B,MAAM,2BAA2B,CAAC;AAcnC,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,+BAA+B,EAC/B,8BAA8B,GAC/B,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACjC;AAkVD,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,MAAM,GACd,YAAY,CAsEd;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,MAAM,GACd,YAAY,CAsEd;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,MAAM,GACd,gBAAgB,CAuClB;AAED,qBAAa,cAAe,YAAW,WAAW;IAChD,QAAQ,CAAC,EAAE,YAAY;IAEvB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,YAAY;IAYrE,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,gBAAgB;IAY7E,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,YAAY;CAW1E"}
1
+ {"version":3,"file":"openai-provider.d.ts","sourceRoot":"","sources":["../src/openai-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EACL,kBAAkB,EAMlB,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EAMpB,+BAA+B,EAC/B,8BAA8B,EAC/B,MAAM,2BAA2B,CAAC;AAenC,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,+BAA+B,EAC/B,8BAA8B,GAC/B,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gGAAgG;IAChG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACjC;AAkWD,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,MAAM,GACd,YAAY,CAwEd;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,MAAM,GACd,YAAY,CAwEd;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,MAAM,GACd,gBAAgB,CAwClB;AAED,qBAAa,cAAe,YAAW,WAAW;IAChD,QAAQ,CAAC,EAAE,YAAY;IAEvB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,YAAY;IA4BrE,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,gBAAgB;IAY7E,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,YAAY;CAY1E"}
@@ -11,9 +11,22 @@ import { buildProviderError, createOpenAIRequestInit, createWarningCollector, ge
11
11
  import { buildOpenAIChatRequest, } from "./openai-chat-request-builder.js";
12
12
  import { streamOpenAICompatibleParts } from "./openai-chat-stream.js";
13
13
  import { buildOpenAIResponsesRequest } from "./openai-responses-request-builder.js";
14
+ import { isOpenAIReasoningModel } from "./openai-reasoning-models.js";
14
15
  import { extractOpenAIResponsesUsage, normalizeOpenAIResponsesFinishReason, streamOpenAIResponsesParts, } from "./openai-responses-stream.js";
15
16
  // Re-export error classes so extension tests can import from this module.
16
17
  export { buildProviderError, isNumberArray, mergeUsage, parseRetryAfterMs, ProviderError, ProviderOverloadedError, ProviderQuotaError, ProviderRateLimitError, ProviderRequestError, TOOL_INPUT_PENDING_THRESHOLD_MS, withToolInputStatusTransitions, };
18
+ function readNonEmptyString(value) {
19
+ return typeof value === "string" && value.length > 0 ? value : undefined;
20
+ }
21
+ function getOpenAIProviderLabel(config) {
22
+ return readNonEmptyString(config.name) ?? "openai";
23
+ }
24
+ function getRuntimeOpenAIProviderName(config) {
25
+ return readNonEmptyString(config.providerName) ?? getOpenAIProviderLabel(config);
26
+ }
27
+ function getLLMOpenAIProviderName(config) {
28
+ return readNonEmptyString(config.providerName) ?? "openai";
29
+ }
17
30
  // ---------------------------------------------------------------------------
18
31
  // Embedding helpers
19
32
  // ---------------------------------------------------------------------------
@@ -256,8 +269,10 @@ function buildOpenAIResponsesGenerateResult(payload) {
256
269
  // ---------------------------------------------------------------------------
257
270
  export function createOpenAIModelRuntime(config, modelId) {
258
271
  const fetchImpl = config.fetch ?? globalThis.fetch;
272
+ const providerLabel = getOpenAIProviderLabel(config);
273
+ const providerName = getRuntimeOpenAIProviderName(config);
259
274
  return {
260
- provider: config.name ?? "openai",
275
+ provider: providerLabel,
261
276
  modelId,
262
277
  specificationVersion: "v3",
263
278
  supportedUrls: {},
@@ -265,11 +280,11 @@ export function createOpenAIModelRuntime(config, modelId) {
265
280
  const options = optionsForRuntime;
266
281
  const url = getOpenAIChatCompletionsUrl(config.baseURL);
267
282
  const warnings = createWarningCollector();
268
- const body = buildOpenAIChatRequest(modelId, config.name ?? "openai", options, false, warnings);
283
+ const body = buildOpenAIChatRequest(modelId, providerName, options, false, warnings);
269
284
  return requestJson({
270
285
  url,
271
286
  fetchImpl,
272
- providerLabel: config.name ?? "openai",
287
+ providerLabel,
273
288
  providerKind: "openai",
274
289
  init: createOpenAIRequestInit({
275
290
  apiKey: config.apiKey,
@@ -289,11 +304,11 @@ export function createOpenAIModelRuntime(config, modelId) {
289
304
  const options = optionsForRuntime;
290
305
  const url = getOpenAIChatCompletionsUrl(config.baseURL);
291
306
  const warnings = createWarningCollector();
292
- const body = buildOpenAIChatRequest(modelId, config.name ?? "openai", options, true, warnings);
307
+ const body = buildOpenAIChatRequest(modelId, providerName, options, true, warnings);
293
308
  return requestStream({
294
309
  url,
295
310
  fetchImpl,
296
- providerLabel: config.name ?? "openai",
311
+ providerLabel,
297
312
  providerKind: "openai",
298
313
  init: createOpenAIRequestInit({
299
314
  apiKey: config.apiKey,
@@ -313,8 +328,10 @@ export function createOpenAIModelRuntime(config, modelId) {
313
328
  }
314
329
  export function createOpenAIResponsesRuntime(config, modelId) {
315
330
  const fetchImpl = config.fetch ?? globalThis.fetch;
331
+ const providerLabel = getOpenAIProviderLabel(config);
332
+ const providerName = getRuntimeOpenAIProviderName(config);
316
333
  return {
317
- provider: config.name ?? "openai",
334
+ provider: providerLabel,
318
335
  modelId,
319
336
  specificationVersion: "v3",
320
337
  supportedUrls: {},
@@ -322,11 +339,11 @@ export function createOpenAIResponsesRuntime(config, modelId) {
322
339
  const options = optionsForRuntime;
323
340
  const url = getOpenAIResponsesUrl(config.baseURL);
324
341
  const warnings = createWarningCollector();
325
- const body = buildOpenAIResponsesRequest(modelId, config.name ?? "openai", options, false, warnings);
342
+ const body = buildOpenAIResponsesRequest(modelId, providerName, options, false, warnings);
326
343
  return requestJson({
327
344
  url,
328
345
  fetchImpl,
329
- providerLabel: config.name ?? "openai",
346
+ providerLabel,
330
347
  providerKind: "openai",
331
348
  init: createOpenAIRequestInit({
332
349
  apiKey: config.apiKey,
@@ -346,11 +363,11 @@ export function createOpenAIResponsesRuntime(config, modelId) {
346
363
  const options = optionsForRuntime;
347
364
  const url = getOpenAIResponsesUrl(config.baseURL);
348
365
  const warnings = createWarningCollector();
349
- const body = buildOpenAIResponsesRequest(modelId, config.name ?? "openai", options, true, warnings);
366
+ const body = buildOpenAIResponsesRequest(modelId, providerName, options, true, warnings);
350
367
  return requestStream({
351
368
  url,
352
369
  fetchImpl,
353
- providerLabel: config.name ?? "openai",
370
+ providerLabel,
354
371
  providerKind: "openai",
355
372
  init: createOpenAIRequestInit({
356
373
  apiKey: config.apiKey,
@@ -370,8 +387,9 @@ export function createOpenAIResponsesRuntime(config, modelId) {
370
387
  }
371
388
  export function createOpenAIEmbeddingRuntime(config, modelId) {
372
389
  const fetchImpl = config.fetch ?? globalThis.fetch;
390
+ const providerLabel = getOpenAIProviderLabel(config);
373
391
  return {
374
- provider: config.name ?? "openai",
392
+ provider: providerLabel,
375
393
  modelId,
376
394
  supportsParallelCalls: true,
377
395
  doEmbed({ values, abortSignal }) {
@@ -386,7 +404,7 @@ export function createOpenAIEmbeddingRuntime(config, modelId) {
386
404
  return requestJson({
387
405
  url,
388
406
  fetchImpl,
389
- providerLabel: config.name ?? "openai",
407
+ providerLabel,
390
408
  providerKind: "openai",
391
409
  init: createOpenAIRequestInit({
392
410
  apiKey: config.apiKey,
@@ -410,10 +428,22 @@ export function createOpenAIEmbeddingRuntime(config, modelId) {
410
428
  export class OpenAIProvider {
411
429
  id = "openai";
412
430
  createModel(modelId, config) {
431
+ const providerLabel = getOpenAIProviderLabel(config);
432
+ const providerName = getLLMOpenAIProviderName(config);
433
+ if (isOpenAIReasoningModel(modelId, providerName)) {
434
+ return createOpenAIResponsesRuntime({
435
+ apiKey: config.credential,
436
+ baseURL: config.baseURL,
437
+ name: providerLabel,
438
+ providerName,
439
+ fetch: config.fetch,
440
+ }, modelId);
441
+ }
413
442
  return createOpenAIModelRuntime({
414
443
  apiKey: config.credential,
415
444
  baseURL: config.baseURL,
416
- name: config.name ?? "openai",
445
+ name: providerLabel,
446
+ providerName,
417
447
  fetch: config.fetch,
418
448
  }, modelId);
419
449
  }
@@ -421,7 +451,7 @@ export class OpenAIProvider {
421
451
  return createOpenAIEmbeddingRuntime({
422
452
  apiKey: config.credential,
423
453
  baseURL: config.baseURL,
424
- name: config.name ?? "openai",
454
+ name: getOpenAIProviderLabel(config),
425
455
  fetch: config.fetch,
426
456
  }, modelId);
427
457
  }
@@ -429,7 +459,8 @@ export class OpenAIProvider {
429
459
  return createOpenAIResponsesRuntime({
430
460
  apiKey: config.credential,
431
461
  baseURL: config.baseURL,
432
- name: config.name ?? "openai",
462
+ name: getOpenAIProviderLabel(config),
463
+ providerName: getLLMOpenAIProviderName(config),
433
464
  fetch: config.fetch,
434
465
  }, modelId);
435
466
  }
@@ -9,6 +9,7 @@ export type ResolvedOpenAIReasoning = {
9
9
  effort: OpenAIReasoningEffort;
10
10
  source: "default" | "explicit";
11
11
  };
12
+ export declare function supportsDefaultReasoningParams(providerName: string): boolean;
12
13
  export declare function getDefaultOpenAIReasoningEffort(modelId: string, providerName?: string): OpenAIReasoningEffort | undefined;
13
14
  export declare function resolveOpenAIReasoningConfig(modelId: string, providerName: string, option: OpenAIProviderReasoningOption | undefined): ResolvedOpenAIReasoning | undefined;
14
15
  export declare function shouldRequestOpenAIReasoningSummary(providerName: string, reasoning: ResolvedOpenAIReasoning): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"openai-reasoning-models.d.ts","sourceRoot":"","sources":["../src/openai-reasoning-models.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE9D,MAAM,MAAM,6BAA6B,GAAG,qBAAqB,GAAG,KAAK,CAAC;AAE1E,MAAM,MAAM,6BAA6B,GAAG;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,6BAA6B,CAAC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,qBAAqB,CAAC;IAC9B,MAAM,EAAE,SAAS,GAAG,UAAU,CAAC;CAChC,CAAC;AA6BF,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,MAAM,EACf,YAAY,SAAW,GACtB,qBAAqB,GAAG,SAAS,CA0BnC;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,6BAA6B,GAAG,SAAS,GAChD,uBAAuB,GAAG,SAAS,CAoBrC;AAED,wBAAgB,mCAAmC,CACjD,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,uBAAuB,GACjC,OAAO,CAET;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,SAAW,GAAG,OAAO,CAExF;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAIpE"}
1
+ {"version":3,"file":"openai-reasoning-models.d.ts","sourceRoot":"","sources":["../src/openai-reasoning-models.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE9D,MAAM,MAAM,6BAA6B,GAAG,qBAAqB,GAAG,KAAK,CAAC;AAE1E,MAAM,MAAM,6BAA6B,GAAG;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,6BAA6B,CAAC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,qBAAqB,CAAC;IAC9B,MAAM,EAAE,SAAS,GAAG,UAAU,CAAC;CAChC,CAAC;AAIF,wBAAgB,8BAA8B,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAG5E;AAuBD,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,MAAM,EACf,YAAY,SAAW,GACtB,qBAAqB,GAAG,SAAS,CAwBnC;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,6BAA6B,GAAG,SAAS,GAChD,uBAAuB,GAAG,SAAS,CAoBrC;AAED,wBAAgB,mCAAmC,CACjD,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,uBAAuB,GACjC,OAAO,CAET;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,SAAW,GAAG,OAAO,CAExF;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAIpE"}
@@ -1,6 +1,7 @@
1
1
  const DEFAULT_REASONING_EFFORT = "medium";
2
- function supportsDefaultReasoningParams(providerName) {
3
- return providerName === "openai" || providerName === "veryfront-cloud";
2
+ export function supportsDefaultReasoningParams(providerName) {
3
+ const normalizedProvider = providerName.toLowerCase();
4
+ return normalizedProvider === "openai" || normalizedProvider === "veryfront-cloud";
4
5
  }
5
6
  function isGpt5ChatSnapshot(modelId) {
6
7
  return /^gpt-5-chat($|-)/.test(modelId);
@@ -20,8 +21,7 @@ function isReasoningCapableGpt5(modelId) {
20
21
  }
21
22
  export function getDefaultOpenAIReasoningEffort(modelId, providerName = "openai") {
22
23
  const normalized = modelId.toLowerCase();
23
- const normalizedProvider = providerName.toLowerCase();
24
- if (!supportsDefaultReasoningParams(normalizedProvider)) {
24
+ if (!supportsDefaultReasoningParams(providerName)) {
25
25
  return undefined;
26
26
  }
27
27
  if (isGpt5ChatSnapshot(normalized)) {
@@ -59,7 +59,7 @@ export function resolveOpenAIReasoningConfig(modelId, providerName, option) {
59
59
  }
60
60
  }
61
61
  export function shouldRequestOpenAIReasoningSummary(providerName, reasoning) {
62
- return reasoning.source === "explicit" || providerName.toLowerCase() === "veryfront-cloud";
62
+ return reasoning.source === "explicit" || supportsDefaultReasoningParams(providerName);
63
63
  }
64
64
  export function isOpenAIReasoningModel(modelId, providerName = "openai") {
65
65
  return getDefaultOpenAIReasoningEffort(modelId, providerName) !== undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@veryfront/ext-llm-openai",
3
- "version": "0.1.990",
3
+ "version": "0.1.992",
4
4
  "description": "Veryfront first-party extension package for ext-llm-openai",
5
5
  "keywords": [
6
6
  "veryfront",
@@ -45,7 +45,7 @@
45
45
  "capabilities": []
46
46
  },
47
47
  "peerDependencies": {
48
- "veryfront": "^0.1.990"
48
+ "veryfront": "^0.1.992"
49
49
  },
50
50
  "type": "module",
51
51
  "types": "./esm/index.d.ts",