@aituber-onair/chat 0.1.0 → 0.2.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/README.md +2 -2
- package/dist/cjs/constants/chat.d.ts +24 -1
- package/dist/cjs/constants/chat.d.ts.map +1 -1
- package/dist/cjs/constants/chat.js +26 -2
- package/dist/cjs/constants/chat.js.map +1 -1
- package/dist/cjs/constants/openai.d.ts +11 -0
- package/dist/cjs/constants/openai.d.ts.map +1 -1
- package/dist/cjs/constants/openai.js +25 -1
- package/dist/cjs/constants/openai.js.map +1 -1
- package/dist/cjs/services/providers/ChatServiceProvider.d.ts +11 -1
- package/dist/cjs/services/providers/ChatServiceProvider.d.ts.map +1 -1
- package/dist/cjs/services/providers/openai/OpenAIChatService.d.ts +5 -1
- package/dist/cjs/services/providers/openai/OpenAIChatService.d.ts.map +1 -1
- package/dist/cjs/services/providers/openai/OpenAIChatService.js +96 -12
- package/dist/cjs/services/providers/openai/OpenAIChatService.js.map +1 -1
- package/dist/cjs/services/providers/openai/OpenAIChatServiceProvider.d.ts +6 -0
- package/dist/cjs/services/providers/openai/OpenAIChatServiceProvider.d.ts.map +1 -1
- package/dist/cjs/services/providers/openai/OpenAIChatServiceProvider.js +63 -10
- package/dist/cjs/services/providers/openai/OpenAIChatServiceProvider.js.map +1 -1
- package/dist/esm/constants/chat.d.ts +24 -1
- package/dist/esm/constants/chat.d.ts.map +1 -1
- package/dist/esm/constants/chat.js +25 -1
- package/dist/esm/constants/chat.js.map +1 -1
- package/dist/esm/constants/openai.d.ts +11 -0
- package/dist/esm/constants/openai.d.ts.map +1 -1
- package/dist/esm/constants/openai.js +23 -0
- package/dist/esm/constants/openai.js.map +1 -1
- package/dist/esm/services/providers/ChatServiceProvider.d.ts +11 -1
- package/dist/esm/services/providers/ChatServiceProvider.d.ts.map +1 -1
- package/dist/esm/services/providers/openai/OpenAIChatService.d.ts +5 -1
- package/dist/esm/services/providers/openai/OpenAIChatService.d.ts.map +1 -1
- package/dist/esm/services/providers/openai/OpenAIChatService.js +97 -13
- package/dist/esm/services/providers/openai/OpenAIChatService.js.map +1 -1
- package/dist/esm/services/providers/openai/OpenAIChatServiceProvider.d.ts +6 -0
- package/dist/esm/services/providers/openai/OpenAIChatServiceProvider.d.ts.map +1 -1
- package/dist/esm/services/providers/openai/OpenAIChatServiceProvider.js +64 -11
- package/dist/esm/services/providers/openai/OpenAIChatServiceProvider.js.map +1 -1
- package/package.json +1 -1
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.OpenAIChatServiceProvider = void 0;
|
|
4
4
|
const constants_1 = require("../../../constants");
|
|
5
|
+
const chat_1 = require("../../../constants/chat");
|
|
5
6
|
const OpenAIChatService_1 = require("./OpenAIChatService");
|
|
6
7
|
/**
|
|
7
8
|
* OpenAI API provider implementation
|
|
@@ -13,21 +14,41 @@ class OpenAIChatServiceProvider {
|
|
|
13
14
|
* @returns OpenAIChatService instance
|
|
14
15
|
*/
|
|
15
16
|
createChatService(options) {
|
|
17
|
+
// Apply GPT-5 optimizations if needed
|
|
18
|
+
const optimizedOptions = this.optimizeGPT5Options(options);
|
|
16
19
|
// Use the visionModel if provided, otherwise use the model that supports vision
|
|
17
|
-
const visionModel =
|
|
18
|
-
(this.supportsVisionForModel(
|
|
19
|
-
?
|
|
20
|
+
const visionModel = optimizedOptions.visionModel ||
|
|
21
|
+
(this.supportsVisionForModel(optimizedOptions.model || this.getDefaultModel())
|
|
22
|
+
? optimizedOptions.model
|
|
20
23
|
: this.getDefaultModel());
|
|
21
24
|
// tools definition
|
|
22
|
-
const tools =
|
|
23
|
-
//
|
|
24
|
-
const mcpServers =
|
|
25
|
-
const
|
|
26
|
-
|
|
25
|
+
const tools = optimizedOptions.tools;
|
|
26
|
+
// Determine endpoint based on MCP servers, GPT-5 model, and user preference
|
|
27
|
+
const mcpServers = optimizedOptions.mcpServers ?? [];
|
|
28
|
+
const modelName = optimizedOptions.model || this.getDefaultModel();
|
|
29
|
+
// For GPT-5 models, respect user endpoint preference
|
|
30
|
+
let shouldUseResponsesAPI = false;
|
|
31
|
+
if ((0, constants_1.isGPT5Model)(modelName)) {
|
|
32
|
+
const preference = optimizedOptions.gpt5EndpointPreference || 'chat'; // Default to chat API for GPT-5
|
|
33
|
+
if (preference === 'responses') {
|
|
34
|
+
shouldUseResponsesAPI = true;
|
|
35
|
+
}
|
|
36
|
+
else if (preference === 'auto') {
|
|
37
|
+
// Only use Responses API if explicitly needed (e.g., for advanced reasoning)
|
|
38
|
+
shouldUseResponsesAPI =
|
|
39
|
+
!!optimizedOptions.reasoning_effort || !!optimizedOptions.verbosity;
|
|
40
|
+
}
|
|
41
|
+
// 'chat' preference means use Chat Completions API
|
|
42
|
+
}
|
|
43
|
+
else if (mcpServers.length > 0) {
|
|
44
|
+
// Non-GPT-5 models with MCP always use Responses API
|
|
45
|
+
shouldUseResponsesAPI = true;
|
|
46
|
+
}
|
|
47
|
+
const endpoint = optimizedOptions.endpoint ||
|
|
27
48
|
(shouldUseResponsesAPI
|
|
28
49
|
? constants_1.ENDPOINT_OPENAI_RESPONSES_API
|
|
29
50
|
: constants_1.ENDPOINT_OPENAI_CHAT_COMPLETIONS_API);
|
|
30
|
-
return new OpenAIChatService_1.OpenAIChatService(
|
|
51
|
+
return new OpenAIChatService_1.OpenAIChatService(optimizedOptions.apiKey, modelName, visionModel, tools, endpoint, mcpServers, optimizedOptions.responseLength, optimizedOptions.verbosity, optimizedOptions.reasoning_effort, optimizedOptions.enableReasoningSummary);
|
|
31
52
|
}
|
|
32
53
|
/**
|
|
33
54
|
* Get the provider name
|
|
@@ -42,6 +63,10 @@ class OpenAIChatServiceProvider {
|
|
|
42
63
|
*/
|
|
43
64
|
getSupportedModels() {
|
|
44
65
|
return [
|
|
66
|
+
constants_1.MODEL_GPT_5_NANO,
|
|
67
|
+
constants_1.MODEL_GPT_5_MINI,
|
|
68
|
+
constants_1.MODEL_GPT_5,
|
|
69
|
+
constants_1.MODEL_GPT_5_CHAT_LATEST,
|
|
45
70
|
constants_1.MODEL_GPT_4_1,
|
|
46
71
|
constants_1.MODEL_GPT_4_1_MINI,
|
|
47
72
|
constants_1.MODEL_GPT_4_1_NANO,
|
|
@@ -58,7 +83,7 @@ class OpenAIChatServiceProvider {
|
|
|
58
83
|
* @returns Default model name
|
|
59
84
|
*/
|
|
60
85
|
getDefaultModel() {
|
|
61
|
-
return constants_1.
|
|
86
|
+
return constants_1.MODEL_GPT_5_NANO;
|
|
62
87
|
}
|
|
63
88
|
/**
|
|
64
89
|
* Check if this provider supports vision (image processing)
|
|
@@ -75,6 +100,34 @@ class OpenAIChatServiceProvider {
|
|
|
75
100
|
supportsVisionForModel(model) {
|
|
76
101
|
return constants_1.VISION_SUPPORTED_MODELS.includes(model);
|
|
77
102
|
}
|
|
103
|
+
/**
|
|
104
|
+
* Apply GPT-5 specific optimizations to options
|
|
105
|
+
* @param options Original chat service options
|
|
106
|
+
* @returns Optimized options for GPT-5 usage
|
|
107
|
+
*/
|
|
108
|
+
optimizeGPT5Options(options) {
|
|
109
|
+
const modelName = options.model || this.getDefaultModel();
|
|
110
|
+
// Skip optimization for non-GPT-5 models
|
|
111
|
+
if (!(0, constants_1.isGPT5Model)(modelName)) {
|
|
112
|
+
return options;
|
|
113
|
+
}
|
|
114
|
+
const optimized = { ...options };
|
|
115
|
+
// Apply preset if specified (only affects reasoning_effort and verbosity)
|
|
116
|
+
if (options.gpt5Preset) {
|
|
117
|
+
const preset = chat_1.GPT5_PRESETS[options.gpt5Preset];
|
|
118
|
+
optimized.reasoning_effort = preset.reasoning_effort;
|
|
119
|
+
optimized.verbosity = preset.verbosity;
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
// Set default reasoning_effort if not specified
|
|
123
|
+
if (!options.reasoning_effort) {
|
|
124
|
+
optimized.reasoning_effort = 'medium';
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
// Keep the user's selected response length regardless of API endpoint
|
|
128
|
+
// Users can manually select reasoning response lengths if desired
|
|
129
|
+
return optimized;
|
|
130
|
+
}
|
|
78
131
|
}
|
|
79
132
|
exports.OpenAIChatServiceProvider = OpenAIChatServiceProvider;
|
|
80
133
|
//# sourceMappingURL=OpenAIChatServiceProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenAIChatServiceProvider.js","sourceRoot":"","sources":["../../../../../src/services/providers/openai/OpenAIChatServiceProvider.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"OpenAIChatServiceProvider.js","sourceRoot":"","sources":["../../../../../src/services/providers/openai/OpenAIChatServiceProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ export declare const CHAT_RESPONSE_LENGTH: {
|
|
|
4
4
|
readonly MEDIUM: "medium";
|
|
5
5
|
readonly LONG: "long";
|
|
6
6
|
readonly VERY_LONG: "veryLong";
|
|
7
|
+
readonly DEEP: "deep";
|
|
7
8
|
};
|
|
8
9
|
export declare const MAX_TOKENS_BY_LENGTH: {
|
|
9
10
|
readonly veryShort: 40;
|
|
@@ -11,11 +12,33 @@ export declare const MAX_TOKENS_BY_LENGTH: {
|
|
|
11
12
|
readonly medium: 200;
|
|
12
13
|
readonly long: 300;
|
|
13
14
|
readonly veryLong: 1000;
|
|
15
|
+
readonly deep: 5000;
|
|
14
16
|
};
|
|
15
17
|
/**
|
|
16
18
|
* Default max tokens for AI providers when not specified
|
|
17
19
|
*/
|
|
18
|
-
export declare const DEFAULT_MAX_TOKENS =
|
|
20
|
+
export declare const DEFAULT_MAX_TOKENS = 5000;
|
|
21
|
+
/**
|
|
22
|
+
* GPT-5 reasoning and verbosity presets (response length is set separately)
|
|
23
|
+
*/
|
|
24
|
+
export declare const GPT5_PRESETS: {
|
|
25
|
+
readonly casual: {
|
|
26
|
+
readonly reasoning_effort: "minimal";
|
|
27
|
+
readonly verbosity: "low";
|
|
28
|
+
readonly description: "Fast responses for casual chat, quick questions (GPT-4 like experience)";
|
|
29
|
+
};
|
|
30
|
+
readonly balanced: {
|
|
31
|
+
readonly reasoning_effort: "medium";
|
|
32
|
+
readonly verbosity: "medium";
|
|
33
|
+
readonly description: "Balanced reasoning for business tasks, learning, general problem solving";
|
|
34
|
+
};
|
|
35
|
+
readonly expert: {
|
|
36
|
+
readonly reasoning_effort: "high";
|
|
37
|
+
readonly verbosity: "high";
|
|
38
|
+
readonly description: "Deep reasoning for research, complex analysis, expert-level tasks";
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
export type GPT5PresetKey = keyof typeof GPT5_PRESETS;
|
|
19
42
|
export type ChatResponseLength = (typeof CHAT_RESPONSE_LENGTH)[keyof typeof CHAT_RESPONSE_LENGTH];
|
|
20
43
|
/**
|
|
21
44
|
* Converts a ChatResponseLength to the corresponding max_tokens value
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../../src/constants/chat.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB
|
|
1
|
+
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../../src/constants/chat.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB;;;;;;;CAQvB,CAAC;AAEX,eAAO,MAAM,oBAAoB;;;;;;;CAQvB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,kBAAkB,OAAO,CAAC;AAEvC;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;CAmBf,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,YAAY,CAAC;AAEtD,MAAM,MAAM,kBAAkB,GAC5B,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,OAAO,oBAAoB,CAAC,CAAC;AAEnE;;;;GAIG;AACH,wBAAgB,6BAA6B,CAC3C,cAAc,CAAC,EAAE,kBAAkB,GAClC,MAAM,CAKR"}
|
|
@@ -4,6 +4,8 @@ export const CHAT_RESPONSE_LENGTH = {
|
|
|
4
4
|
MEDIUM: 'medium',
|
|
5
5
|
LONG: 'long',
|
|
6
6
|
VERY_LONG: 'veryLong',
|
|
7
|
+
// Extended response length for longer outputs
|
|
8
|
+
DEEP: 'deep',
|
|
7
9
|
};
|
|
8
10
|
export const MAX_TOKENS_BY_LENGTH = {
|
|
9
11
|
[CHAT_RESPONSE_LENGTH.VERY_SHORT]: 40,
|
|
@@ -11,11 +13,33 @@ export const MAX_TOKENS_BY_LENGTH = {
|
|
|
11
13
|
[CHAT_RESPONSE_LENGTH.MEDIUM]: 200,
|
|
12
14
|
[CHAT_RESPONSE_LENGTH.LONG]: 300,
|
|
13
15
|
[CHAT_RESPONSE_LENGTH.VERY_LONG]: 1000,
|
|
16
|
+
// Extended response length for longer outputs
|
|
17
|
+
[CHAT_RESPONSE_LENGTH.DEEP]: 5000,
|
|
14
18
|
};
|
|
15
19
|
/**
|
|
16
20
|
* Default max tokens for AI providers when not specified
|
|
17
21
|
*/
|
|
18
|
-
export const DEFAULT_MAX_TOKENS =
|
|
22
|
+
export const DEFAULT_MAX_TOKENS = 5000;
|
|
23
|
+
/**
|
|
24
|
+
* GPT-5 reasoning and verbosity presets (response length is set separately)
|
|
25
|
+
*/
|
|
26
|
+
export const GPT5_PRESETS = {
|
|
27
|
+
casual: {
|
|
28
|
+
reasoning_effort: 'minimal',
|
|
29
|
+
verbosity: 'low',
|
|
30
|
+
description: 'Fast responses for casual chat, quick questions (GPT-4 like experience)',
|
|
31
|
+
},
|
|
32
|
+
balanced: {
|
|
33
|
+
reasoning_effort: 'medium',
|
|
34
|
+
verbosity: 'medium',
|
|
35
|
+
description: 'Balanced reasoning for business tasks, learning, general problem solving',
|
|
36
|
+
},
|
|
37
|
+
expert: {
|
|
38
|
+
reasoning_effort: 'high',
|
|
39
|
+
verbosity: 'high',
|
|
40
|
+
description: 'Deep reasoning for research, complex analysis, expert-level tasks',
|
|
41
|
+
},
|
|
42
|
+
};
|
|
19
43
|
/**
|
|
20
44
|
* Converts a ChatResponseLength to the corresponding max_tokens value
|
|
21
45
|
* @param responseLength - The response length setting
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../../src/constants/chat.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,UAAU,EAAE,WAAW;IACvB,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;IACZ,SAAS,EAAE,UAAU;
|
|
1
|
+
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../../src/constants/chat.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,UAAU,EAAE,WAAW;IACvB,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;IACZ,SAAS,EAAE,UAAU;IACrB,8CAA8C;IAC9C,IAAI,EAAE,MAAM;CACJ,CAAC;AAEX,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,CAAC,oBAAoB,CAAC,UAAU,CAAC,EAAE,EAAE;IACrC,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE,GAAG;IACjC,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,GAAG;IAClC,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,GAAG;IAChC,CAAC,oBAAoB,CAAC,SAAS,CAAC,EAAE,IAAI;IACtC,8CAA8C;IAC9C,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,IAAI;CACzB,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAEvC;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,MAAM,EAAE;QACN,gBAAgB,EAAE,SAAkB;QACpC,SAAS,EAAE,KAAc;QACzB,WAAW,EACT,yEAAyE;KAC5E;IACD,QAAQ,EAAE;QACR,gBAAgB,EAAE,QAAiB;QACnC,SAAS,EAAE,QAAiB;QAC5B,WAAW,EACT,0EAA0E;KAC7E;IACD,MAAM,EAAE;QACN,gBAAgB,EAAE,MAAe;QACjC,SAAS,EAAE,MAAe;QAC1B,WAAW,EACT,mEAAmE;KACtE;CACO,CAAC;AAOX;;;;GAIG;AACH,MAAM,UAAU,6BAA6B,CAC3C,cAAmC;IAEnC,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IACD,OAAO,oBAAoB,CAAC,cAAc,CAAC,IAAI,kBAAkB,CAAC;AACpE,CAAC"}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
export declare const ENDPOINT_OPENAI_CHAT_COMPLETIONS_API = "https://api.openai.com/v1/chat/completions";
|
|
2
2
|
export declare const ENDPOINT_OPENAI_RESPONSES_API = "https://api.openai.com/v1/responses";
|
|
3
|
+
export declare const MODEL_GPT_5_NANO = "gpt-5-nano";
|
|
4
|
+
export declare const MODEL_GPT_5_MINI = "gpt-5-mini";
|
|
5
|
+
export declare const MODEL_GPT_5 = "gpt-5";
|
|
6
|
+
export declare const MODEL_GPT_5_CHAT_LATEST = "gpt-5-chat-latest";
|
|
3
7
|
export declare const MODEL_GPT_4_1 = "gpt-4.1";
|
|
4
8
|
export declare const MODEL_GPT_4_1_MINI = "gpt-4.1-mini";
|
|
5
9
|
export declare const MODEL_GPT_4_1_NANO = "gpt-4.1-nano";
|
|
@@ -10,4 +14,11 @@ export declare const MODEL_O1_MINI = "o1-mini";
|
|
|
10
14
|
export declare const MODEL_O1 = "o1";
|
|
11
15
|
export declare const MODEL_GPT_4_5_PREVIEW = "gpt-4.5-preview";
|
|
12
16
|
export declare const VISION_SUPPORTED_MODELS: string[];
|
|
17
|
+
export declare const GPT_5_MODELS: string[];
|
|
18
|
+
/**
|
|
19
|
+
* Check if a model is a GPT-5 model
|
|
20
|
+
* @param model Model name to check
|
|
21
|
+
* @returns True if the model is a GPT-5 variant
|
|
22
|
+
*/
|
|
23
|
+
export declare function isGPT5Model(model: string): boolean;
|
|
13
24
|
//# sourceMappingURL=openai.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/constants/openai.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oCAAoC,+CACH,CAAC;AAC/C,eAAO,MAAM,6BAA6B,wCACH,CAAC;AAGxC,eAAO,MAAM,aAAa,YAAY,CAAC;AACvC,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AACjD,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AAEjD,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAC/C,eAAO,MAAM,YAAY,WAAW,CAAC;AACrC,eAAO,MAAM,aAAa,YAAY,CAAC;AAEvC,eAAO,MAAM,aAAa,YAAY,CAAC;AACvC,eAAO,MAAM,QAAQ,OAAO,CAAC;AAG7B,eAAO,MAAM,qBAAqB,oBAAoB,CAAC;AAGvD,eAAO,MAAM,uBAAuB,
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/constants/openai.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oCAAoC,+CACH,CAAC;AAC/C,eAAO,MAAM,6BAA6B,wCACH,CAAC;AAGxC,eAAO,MAAM,gBAAgB,eAAe,CAAC;AAC7C,eAAO,MAAM,gBAAgB,eAAe,CAAC;AAC7C,eAAO,MAAM,WAAW,UAAU,CAAC;AACnC,eAAO,MAAM,uBAAuB,sBAAsB,CAAC;AAE3D,eAAO,MAAM,aAAa,YAAY,CAAC;AACvC,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AACjD,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AAEjD,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAC/C,eAAO,MAAM,YAAY,WAAW,CAAC;AACrC,eAAO,MAAM,aAAa,YAAY,CAAC;AAEvC,eAAO,MAAM,aAAa,YAAY,CAAC;AACvC,eAAO,MAAM,QAAQ,OAAO,CAAC;AAG7B,eAAO,MAAM,qBAAqB,oBAAoB,CAAC;AAGvD,eAAO,MAAM,uBAAuB,UAanC,CAAC;AAGF,eAAO,MAAM,YAAY,UAKxB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAElD"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
export const ENDPOINT_OPENAI_CHAT_COMPLETIONS_API = 'https://api.openai.com/v1/chat/completions';
|
|
2
2
|
export const ENDPOINT_OPENAI_RESPONSES_API = 'https://api.openai.com/v1/responses';
|
|
3
3
|
// gpt model
|
|
4
|
+
export const MODEL_GPT_5_NANO = 'gpt-5-nano';
|
|
5
|
+
export const MODEL_GPT_5_MINI = 'gpt-5-mini';
|
|
6
|
+
export const MODEL_GPT_5 = 'gpt-5';
|
|
7
|
+
export const MODEL_GPT_5_CHAT_LATEST = 'gpt-5-chat-latest';
|
|
4
8
|
export const MODEL_GPT_4_1 = 'gpt-4.1';
|
|
5
9
|
export const MODEL_GPT_4_1_MINI = 'gpt-4.1-mini';
|
|
6
10
|
export const MODEL_GPT_4_1_NANO = 'gpt-4.1-nano';
|
|
@@ -13,6 +17,10 @@ export const MODEL_O1 = 'o1';
|
|
|
13
17
|
export const MODEL_GPT_4_5_PREVIEW = 'gpt-4.5-preview';
|
|
14
18
|
// Vision support for models
|
|
15
19
|
export const VISION_SUPPORTED_MODELS = [
|
|
20
|
+
MODEL_GPT_5_NANO,
|
|
21
|
+
MODEL_GPT_5_MINI,
|
|
22
|
+
MODEL_GPT_5,
|
|
23
|
+
MODEL_GPT_5_CHAT_LATEST,
|
|
16
24
|
MODEL_GPT_4_1,
|
|
17
25
|
MODEL_GPT_4_1_MINI,
|
|
18
26
|
MODEL_GPT_4_1_NANO,
|
|
@@ -22,4 +30,19 @@ export const VISION_SUPPORTED_MODELS = [
|
|
|
22
30
|
MODEL_O1,
|
|
23
31
|
// MODEL_O3_MINI and MODEL_O1_MINI are not included as they don't support vision
|
|
24
32
|
];
|
|
33
|
+
// GPT-5 models list
|
|
34
|
+
export const GPT_5_MODELS = [
|
|
35
|
+
MODEL_GPT_5_NANO,
|
|
36
|
+
MODEL_GPT_5_MINI,
|
|
37
|
+
MODEL_GPT_5,
|
|
38
|
+
MODEL_GPT_5_CHAT_LATEST,
|
|
39
|
+
];
|
|
40
|
+
/**
|
|
41
|
+
* Check if a model is a GPT-5 model
|
|
42
|
+
* @param model Model name to check
|
|
43
|
+
* @returns True if the model is a GPT-5 variant
|
|
44
|
+
*/
|
|
45
|
+
export function isGPT5Model(model) {
|
|
46
|
+
return GPT_5_MODELS.includes(model);
|
|
47
|
+
}
|
|
25
48
|
//# sourceMappingURL=openai.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/constants/openai.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oCAAoC,GAC/C,4CAA4C,CAAC;AAC/C,MAAM,CAAC,MAAM,6BAA6B,GACxC,qCAAqC,CAAC;AAExC,YAAY;AACZ,MAAM,CAAC,MAAM,aAAa,GAAG,SAAS,CAAC;AACvC,MAAM,CAAC,MAAM,kBAAkB,GAAG,cAAc,CAAC;AACjD,MAAM,CAAC,MAAM,kBAAkB,GAAG,cAAc,CAAC;AAEjD,MAAM,CAAC,MAAM,iBAAiB,GAAG,aAAa,CAAC;AAC/C,MAAM,CAAC,MAAM,YAAY,GAAG,QAAQ,CAAC;AACrC,MAAM,CAAC,MAAM,aAAa,GAAG,SAAS,CAAC;AAEvC,MAAM,CAAC,MAAM,aAAa,GAAG,SAAS,CAAC;AACvC,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC;AAE7B,aAAa;AACb,MAAM,CAAC,MAAM,qBAAqB,GAAG,iBAAiB,CAAC;AAEvD,4BAA4B;AAC5B,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,aAAa;IACb,kBAAkB;IAClB,kBAAkB;IAClB,iBAAiB;IACjB,YAAY;IACZ,qBAAqB;IACrB,QAAQ;IACR,gFAAgF;CACjF,CAAC"}
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/constants/openai.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oCAAoC,GAC/C,4CAA4C,CAAC;AAC/C,MAAM,CAAC,MAAM,6BAA6B,GACxC,qCAAqC,CAAC;AAExC,YAAY;AACZ,MAAM,CAAC,MAAM,gBAAgB,GAAG,YAAY,CAAC;AAC7C,MAAM,CAAC,MAAM,gBAAgB,GAAG,YAAY,CAAC;AAC7C,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC;AACnC,MAAM,CAAC,MAAM,uBAAuB,GAAG,mBAAmB,CAAC;AAE3D,MAAM,CAAC,MAAM,aAAa,GAAG,SAAS,CAAC;AACvC,MAAM,CAAC,MAAM,kBAAkB,GAAG,cAAc,CAAC;AACjD,MAAM,CAAC,MAAM,kBAAkB,GAAG,cAAc,CAAC;AAEjD,MAAM,CAAC,MAAM,iBAAiB,GAAG,aAAa,CAAC;AAC/C,MAAM,CAAC,MAAM,YAAY,GAAG,QAAQ,CAAC;AACrC,MAAM,CAAC,MAAM,aAAa,GAAG,SAAS,CAAC;AAEvC,MAAM,CAAC,MAAM,aAAa,GAAG,SAAS,CAAC;AACvC,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC;AAE7B,aAAa;AACb,MAAM,CAAC,MAAM,qBAAqB,GAAG,iBAAiB,CAAC;AAEvD,4BAA4B;AAC5B,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,gBAAgB;IAChB,gBAAgB;IAChB,WAAW;IACX,uBAAuB;IACvB,aAAa;IACb,kBAAkB;IAClB,kBAAkB;IAClB,iBAAiB;IACjB,YAAY;IACZ,qBAAqB;IACrB,QAAQ;IACR,gFAAgF;CACjF,CAAC;AAEF,oBAAoB;AACpB,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,gBAAgB;IAChB,gBAAgB;IAChB,WAAW;IACX,uBAAuB;CACxB,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ChatService } from '../ChatService';
|
|
2
|
-
import { ChatResponseLength } from '../../constants/chat';
|
|
2
|
+
import { ChatResponseLength, GPT5PresetKey } from '../../constants/chat';
|
|
3
3
|
/**
|
|
4
4
|
* Options for chat service providers
|
|
5
5
|
*/
|
|
@@ -14,6 +14,16 @@ export interface ChatServiceOptions {
|
|
|
14
14
|
endpoint?: string;
|
|
15
15
|
/** Response length setting */
|
|
16
16
|
responseLength?: ChatResponseLength;
|
|
17
|
+
/** Verbosity level for GPT-5 models (OpenAI only) */
|
|
18
|
+
verbosity?: 'low' | 'medium' | 'high';
|
|
19
|
+
/** Reasoning effort level for GPT-5 models (OpenAI only) */
|
|
20
|
+
reasoning_effort?: 'minimal' | 'low' | 'medium' | 'high';
|
|
21
|
+
/** GPT-5 usage preset (OpenAI only) - overrides individual reasoning/verbosity settings */
|
|
22
|
+
gpt5Preset?: GPT5PresetKey;
|
|
23
|
+
/** GPT-5 endpoint preference (OpenAI only) - 'chat' for Chat Completions API, 'responses' for Responses API, 'auto' for automatic selection */
|
|
24
|
+
gpt5EndpointPreference?: 'chat' | 'responses' | 'auto';
|
|
25
|
+
/** Enable reasoning summary for GPT-5 models (OpenAI only) - requires organization verification */
|
|
26
|
+
enableReasoningSummary?: boolean;
|
|
17
27
|
/** Additional provider-specific options */
|
|
18
28
|
[key: string]: any;
|
|
19
29
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatServiceProvider.d.ts","sourceRoot":"","sources":["../../../../src/services/providers/ChatServiceProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"ChatServiceProvider.d.ts","sourceRoot":"","sources":["../../../../src/services/providers/ChatServiceProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAEzE;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,cAAc;IACd,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8BAA8B;IAC9B,cAAc,CAAC,EAAE,kBAAkB,CAAC;IACpC,qDAAqD;IACrD,SAAS,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACtC,4DAA4D;IAC5D,gBAAgB,CAAC,EAAE,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACzD,2FAA2F;IAC3F,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,+IAA+I;IAC/I,sBAAsB,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IACvD,mGAAmG;IACnG,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,2CAA2C;IAC3C,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW,CAAC;IAE5D;;;OAGG;IACH,eAAe,IAAI,MAAM,CAAC;IAE1B;;;OAGG;IACH,kBAAkB,IAAI,MAAM,EAAE,CAAC;IAE/B;;;OAGG;IACH,eAAe,IAAI,MAAM,CAAC;IAE1B;;;OAGG;IACH,cAAc,IAAI,OAAO,CAAC;CAC3B"}
|
|
@@ -16,13 +16,16 @@ export declare class OpenAIChatService implements ChatService {
|
|
|
16
16
|
private endpoint;
|
|
17
17
|
private mcpServers;
|
|
18
18
|
private responseLength?;
|
|
19
|
+
private verbosity?;
|
|
20
|
+
private reasoning_effort?;
|
|
21
|
+
private enableReasoningSummary?;
|
|
19
22
|
/**
|
|
20
23
|
* Constructor
|
|
21
24
|
* @param apiKey OpenAI API key
|
|
22
25
|
* @param model Name of the model to use
|
|
23
26
|
* @param visionModel Name of the vision model
|
|
24
27
|
*/
|
|
25
|
-
constructor(apiKey: string, model?: string, visionModel?: string, tools?: ToolDefinition[], endpoint?: string, mcpServers?: MCPServerConfig[], responseLength?: ChatResponseLength);
|
|
28
|
+
constructor(apiKey: string, model?: string, visionModel?: string, tools?: ToolDefinition[], endpoint?: string, mcpServers?: MCPServerConfig[], responseLength?: ChatResponseLength, verbosity?: 'low' | 'medium' | 'high', reasoning_effort?: 'minimal' | 'low' | 'medium' | 'high', enableReasoningSummary?: boolean);
|
|
26
29
|
/**
|
|
27
30
|
* Get the current model name
|
|
28
31
|
* @returns Model name
|
|
@@ -100,6 +103,7 @@ export declare class OpenAIChatService implements ChatService {
|
|
|
100
103
|
private parseResponsesStream;
|
|
101
104
|
/**
|
|
102
105
|
* Handle specific SSE events from Responses API
|
|
106
|
+
* @returns 'completed' if the response is completed, undefined otherwise
|
|
103
107
|
*/
|
|
104
108
|
private handleResponsesSSEEvent;
|
|
105
109
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenAIChatService.d.ts","sourceRoot":"","sources":["../../../../../src/services/providers/openai/OpenAIChatService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"OpenAIChatService.d.ts","sourceRoot":"","sources":["../../../../../src/services/providers/openai/OpenAIChatService.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ENDPOINT_OPENAI_CHAT_COMPLETIONS_API, ENDPOINT_OPENAI_RESPONSES_API, MODEL_GPT_4O_MINI, VISION_SUPPORTED_MODELS, } from '../../../constants';
|
|
1
|
+
import { ENDPOINT_OPENAI_CHAT_COMPLETIONS_API, ENDPOINT_OPENAI_RESPONSES_API, MODEL_GPT_4O_MINI, VISION_SUPPORTED_MODELS, isGPT5Model, } from '../../../constants';
|
|
2
2
|
import { getMaxTokensForResponseLength, } from '../../../constants/chat';
|
|
3
3
|
import { StreamTextAccumulator } from '../../../utils/streamTextAccumulator';
|
|
4
4
|
import { ChatServiceHttpClient } from '../../../utils/chatServiceHttpClient';
|
|
@@ -12,15 +12,19 @@ export class OpenAIChatService {
|
|
|
12
12
|
* @param model Name of the model to use
|
|
13
13
|
* @param visionModel Name of the vision model
|
|
14
14
|
*/
|
|
15
|
-
constructor(apiKey, model = MODEL_GPT_4O_MINI, visionModel = MODEL_GPT_4O_MINI, tools, endpoint = ENDPOINT_OPENAI_CHAT_COMPLETIONS_API, mcpServers = [], responseLength) {
|
|
15
|
+
constructor(apiKey, model = MODEL_GPT_4O_MINI, visionModel = MODEL_GPT_4O_MINI, tools, endpoint = ENDPOINT_OPENAI_CHAT_COMPLETIONS_API, mcpServers = [], responseLength, verbosity, reasoning_effort, enableReasoningSummary = false) {
|
|
16
16
|
/** Provider name */
|
|
17
17
|
this.provider = 'openai';
|
|
18
18
|
this.apiKey = apiKey;
|
|
19
19
|
this.model = model;
|
|
20
20
|
this.tools = tools || [];
|
|
21
|
+
// Keep the endpoint as specified - no auto-switching
|
|
21
22
|
this.endpoint = endpoint;
|
|
22
23
|
this.mcpServers = mcpServers;
|
|
23
24
|
this.responseLength = responseLength;
|
|
25
|
+
this.verbosity = verbosity;
|
|
26
|
+
this.reasoning_effort = reasoning_effort;
|
|
27
|
+
this.enableReasoningSummary = enableReasoningSummary;
|
|
24
28
|
// check if the vision model is supported
|
|
25
29
|
if (!VISION_SUPPORTED_MODELS.includes(visionModel)) {
|
|
26
30
|
throw new Error(`Model ${visionModel} does not support vision capabilities.`);
|
|
@@ -51,8 +55,27 @@ export class OpenAIChatService {
|
|
|
51
55
|
// not use tools
|
|
52
56
|
if (this.tools.length === 0) {
|
|
53
57
|
const res = await this.callOpenAI(messages, this.model, true);
|
|
54
|
-
const
|
|
55
|
-
|
|
58
|
+
const isResponsesAPI = this.endpoint === ENDPOINT_OPENAI_RESPONSES_API;
|
|
59
|
+
try {
|
|
60
|
+
if (isResponsesAPI) {
|
|
61
|
+
// Use Responses API parser for GPT-5 and other models using Responses API
|
|
62
|
+
const result = await this.parseResponsesStream(res, onPartialResponse);
|
|
63
|
+
const full = result.blocks
|
|
64
|
+
.filter((b) => b.type === 'text')
|
|
65
|
+
.map((b) => b.text)
|
|
66
|
+
.join('');
|
|
67
|
+
await onCompleteResponse(full);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
// Use standard Chat Completions API parser
|
|
71
|
+
const full = await this.handleStream(res, onPartialResponse);
|
|
72
|
+
await onCompleteResponse(full);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
console.error('[processChat] Error in streaming/completion:', error);
|
|
77
|
+
throw error;
|
|
78
|
+
}
|
|
56
79
|
return;
|
|
57
80
|
}
|
|
58
81
|
// use tools
|
|
@@ -82,8 +105,27 @@ export class OpenAIChatService {
|
|
|
82
105
|
// not use tools
|
|
83
106
|
if (this.tools.length === 0) {
|
|
84
107
|
const res = await this.callOpenAI(messages, this.visionModel, true);
|
|
85
|
-
const
|
|
86
|
-
|
|
108
|
+
const isResponsesAPI = this.endpoint === ENDPOINT_OPENAI_RESPONSES_API;
|
|
109
|
+
try {
|
|
110
|
+
if (isResponsesAPI) {
|
|
111
|
+
// Use Responses API parser for GPT-5 and other models using Responses API
|
|
112
|
+
const result = await this.parseResponsesStream(res, onPartialResponse);
|
|
113
|
+
const full = result.blocks
|
|
114
|
+
.filter((b) => b.type === 'text')
|
|
115
|
+
.map((b) => b.text)
|
|
116
|
+
.join('');
|
|
117
|
+
await onCompleteResponse(full);
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
// Use standard Chat Completions API parser
|
|
121
|
+
const full = await this.handleStream(res, onPartialResponse);
|
|
122
|
+
await onCompleteResponse(full);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
catch (streamError) {
|
|
126
|
+
console.error('[processVisionChat] Error in streaming/completion:', streamError);
|
|
127
|
+
throw streamError;
|
|
128
|
+
}
|
|
87
129
|
return;
|
|
88
130
|
}
|
|
89
131
|
// use tools
|
|
@@ -170,7 +212,7 @@ export class OpenAIChatService {
|
|
|
170
212
|
body.max_output_tokens = tokenLimit;
|
|
171
213
|
}
|
|
172
214
|
else {
|
|
173
|
-
body.
|
|
215
|
+
body.max_completion_tokens = tokenLimit;
|
|
174
216
|
}
|
|
175
217
|
// Handle messages format based on endpoint
|
|
176
218
|
if (isResponsesAPI) {
|
|
@@ -179,6 +221,39 @@ export class OpenAIChatService {
|
|
|
179
221
|
else {
|
|
180
222
|
body.messages = messages;
|
|
181
223
|
}
|
|
224
|
+
// Add GPT-5 specific parameters
|
|
225
|
+
if (isGPT5Model(model)) {
|
|
226
|
+
// For Responses API, use nested structure
|
|
227
|
+
if (isResponsesAPI) {
|
|
228
|
+
if (this.reasoning_effort) {
|
|
229
|
+
body.reasoning = {
|
|
230
|
+
...body.reasoning,
|
|
231
|
+
effort: this.reasoning_effort,
|
|
232
|
+
};
|
|
233
|
+
// Only add summary if explicitly enabled (requires org verification)
|
|
234
|
+
if (this.enableReasoningSummary) {
|
|
235
|
+
body.reasoning.summary = 'auto';
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
if (this.verbosity) {
|
|
239
|
+
body.text = {
|
|
240
|
+
...body.text,
|
|
241
|
+
format: { type: 'text' },
|
|
242
|
+
verbosity: this.verbosity,
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
// For Chat Completions API, add GPT-5 parameters directly (flat structure)
|
|
248
|
+
// Example: { "reasoning_effort": "minimal", "verbosity": "low" }
|
|
249
|
+
if (this.reasoning_effort) {
|
|
250
|
+
body.reasoning_effort = this.reasoning_effort;
|
|
251
|
+
}
|
|
252
|
+
if (this.verbosity) {
|
|
253
|
+
body.verbosity = this.verbosity;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
182
257
|
// Add tools if available
|
|
183
258
|
const tools = this.buildToolsDefinition();
|
|
184
259
|
if (tools.length > 0) {
|
|
@@ -421,7 +496,11 @@ export class OpenAIChatService {
|
|
|
421
496
|
// Process event separated by empty line
|
|
422
497
|
try {
|
|
423
498
|
const json = JSON.parse(eventData);
|
|
424
|
-
this.handleResponsesSSEEvent(eventType, json, onPartial, textBlocks, toolCallsMap);
|
|
499
|
+
const completionResult = this.handleResponsesSSEEvent(eventType, json, onPartial, textBlocks, toolCallsMap);
|
|
500
|
+
// Check if response is completed
|
|
501
|
+
if (completionResult === 'completed') {
|
|
502
|
+
// Response completed
|
|
503
|
+
}
|
|
425
504
|
}
|
|
426
505
|
catch (e) {
|
|
427
506
|
console.warn('Failed to parse SSE data:', eventData);
|
|
@@ -446,6 +525,7 @@ export class OpenAIChatService {
|
|
|
446
525
|
}
|
|
447
526
|
/**
|
|
448
527
|
* Handle specific SSE events from Responses API
|
|
528
|
+
* @returns 'completed' if the response is completed, undefined otherwise
|
|
449
529
|
*/
|
|
450
530
|
handleResponsesSSEEvent(eventType, data, onPartial, textBlocks, toolCallsMap) {
|
|
451
531
|
switch (eventType) {
|
|
@@ -488,20 +568,24 @@ export class OpenAIChatService {
|
|
|
488
568
|
}
|
|
489
569
|
}
|
|
490
570
|
break;
|
|
491
|
-
// Text completion events
|
|
571
|
+
// Text completion events - do not add text here as it's already accumulated via delta events
|
|
492
572
|
case 'response.output_text.done':
|
|
493
573
|
case 'response.content_part.done':
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
}
|
|
574
|
+
// These events contain the complete text but we've already accumulated it through deltas
|
|
575
|
+
// Adding it here would cause duplicate display
|
|
497
576
|
break;
|
|
498
577
|
// Response completion events
|
|
499
578
|
case 'response.completed':
|
|
579
|
+
return 'completed';
|
|
580
|
+
// GPT-5 reasoning token events (not visible but counted for billing)
|
|
581
|
+
case 'response.reasoning.started':
|
|
582
|
+
case 'response.reasoning.delta':
|
|
583
|
+
case 'response.reasoning.done':
|
|
500
584
|
break;
|
|
501
585
|
default:
|
|
502
|
-
// Ignore other events
|
|
503
586
|
break;
|
|
504
587
|
}
|
|
588
|
+
return undefined;
|
|
505
589
|
}
|
|
506
590
|
/**
|
|
507
591
|
* Parse non-streaming response from Responses API
|