@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.
Files changed (38) hide show
  1. package/README.md +2 -2
  2. package/dist/cjs/constants/chat.d.ts +24 -1
  3. package/dist/cjs/constants/chat.d.ts.map +1 -1
  4. package/dist/cjs/constants/chat.js +26 -2
  5. package/dist/cjs/constants/chat.js.map +1 -1
  6. package/dist/cjs/constants/openai.d.ts +11 -0
  7. package/dist/cjs/constants/openai.d.ts.map +1 -1
  8. package/dist/cjs/constants/openai.js +25 -1
  9. package/dist/cjs/constants/openai.js.map +1 -1
  10. package/dist/cjs/services/providers/ChatServiceProvider.d.ts +11 -1
  11. package/dist/cjs/services/providers/ChatServiceProvider.d.ts.map +1 -1
  12. package/dist/cjs/services/providers/openai/OpenAIChatService.d.ts +5 -1
  13. package/dist/cjs/services/providers/openai/OpenAIChatService.d.ts.map +1 -1
  14. package/dist/cjs/services/providers/openai/OpenAIChatService.js +96 -12
  15. package/dist/cjs/services/providers/openai/OpenAIChatService.js.map +1 -1
  16. package/dist/cjs/services/providers/openai/OpenAIChatServiceProvider.d.ts +6 -0
  17. package/dist/cjs/services/providers/openai/OpenAIChatServiceProvider.d.ts.map +1 -1
  18. package/dist/cjs/services/providers/openai/OpenAIChatServiceProvider.js +63 -10
  19. package/dist/cjs/services/providers/openai/OpenAIChatServiceProvider.js.map +1 -1
  20. package/dist/esm/constants/chat.d.ts +24 -1
  21. package/dist/esm/constants/chat.d.ts.map +1 -1
  22. package/dist/esm/constants/chat.js +25 -1
  23. package/dist/esm/constants/chat.js.map +1 -1
  24. package/dist/esm/constants/openai.d.ts +11 -0
  25. package/dist/esm/constants/openai.d.ts.map +1 -1
  26. package/dist/esm/constants/openai.js +23 -0
  27. package/dist/esm/constants/openai.js.map +1 -1
  28. package/dist/esm/services/providers/ChatServiceProvider.d.ts +11 -1
  29. package/dist/esm/services/providers/ChatServiceProvider.d.ts.map +1 -1
  30. package/dist/esm/services/providers/openai/OpenAIChatService.d.ts +5 -1
  31. package/dist/esm/services/providers/openai/OpenAIChatService.d.ts.map +1 -1
  32. package/dist/esm/services/providers/openai/OpenAIChatService.js +97 -13
  33. package/dist/esm/services/providers/openai/OpenAIChatService.js.map +1 -1
  34. package/dist/esm/services/providers/openai/OpenAIChatServiceProvider.d.ts +6 -0
  35. package/dist/esm/services/providers/openai/OpenAIChatServiceProvider.d.ts.map +1 -1
  36. package/dist/esm/services/providers/openai/OpenAIChatServiceProvider.js +64 -11
  37. package/dist/esm/services/providers/openai/OpenAIChatServiceProvider.js.map +1 -1
  38. 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 = options.visionModel ||
18
- (this.supportsVisionForModel(options.model || this.getDefaultModel())
19
- ? options.model
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 = options.tools;
23
- // if MCP servers are set, automatically use Responses API
24
- const mcpServers = options.mcpServers ?? [];
25
- const shouldUseResponsesAPI = mcpServers.length > 0;
26
- const endpoint = options.endpoint ||
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(options.apiKey, options.model || this.getDefaultModel(), visionModel, tools, endpoint, mcpServers, options.responseLength);
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.MODEL_GPT_4O_MINI;
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,kDAa4B;AAE5B,2DAAwD;AAOxD;;GAEG;AACH,MAAa,yBAAyB;IACpC;;;;OAIG;IACH,iBAAiB,CAAC,OAA2B;QAC3C,gFAAgF;QAChF,MAAM,WAAW,GACf,OAAO,CAAC,WAAW;YACnB,CAAC,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBACnE,CAAC,CAAC,OAAO,CAAC,KAAK;gBACf,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;QAE9B,mBAAmB;QACnB,MAAM,KAAK,GAAiC,OAAO,CAAC,KAAK,CAAC;QAE1D,0DAA0D;QAC1D,MAAM,UAAU,GAAI,OAAe,CAAC,UAAU,IAAI,EAAE,CAAC;QACrD,MAAM,qBAAqB,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;QACpD,MAAM,QAAQ,GACZ,OAAO,CAAC,QAAQ;YAChB,CAAC,qBAAqB;gBACpB,CAAC,CAAC,yCAA6B;gBAC/B,CAAC,CAAC,gDAAoC,CAAC,CAAC;QAE5C,OAAO,IAAI,qCAAiB,CAC1B,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,eAAe,EAAE,EACvC,WAAW,EACX,KAAK,EACL,QAAQ,EACR,UAAU,EACV,OAAO,CAAC,cAAc,CACvB,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,eAAe;QACb,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;OAGG;IACH,kBAAkB;QAChB,OAAO;YACL,yBAAa;YACb,8BAAkB;YAClB,8BAAkB;YAClB,6BAAiB;YACjB,wBAAY;YACZ,yBAAa;YACb,yBAAa;YACb,oBAAQ;YACR,iCAAqB;SACtB,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,eAAe;QACb,OAAO,6BAAiB,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,sBAAsB,CAAC,KAAa;QAClC,OAAO,mCAAuB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC;CACF;AAvFD,8DAuFC"}
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 = 1000;
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;;;;;;CAMvB,CAAC;AAEX,eAAO,MAAM,oBAAoB;;;;;;CAMvB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,kBAAkB,OAAO,CAAC;AAEvC,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"}
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 = 1000;
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;CACb,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;CAC9B,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAKvC;;;;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
+ {"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,UASnC,CAAC"}
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;AAE1D;;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,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"}
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;AAO5D,OAAO,EACL,kBAAkB,EAEnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,cAAc,EAEd,kBAAkB,EACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAIjD;;GAEG;AACH,qBAAa,iBAAkB,YAAW,WAAW;IACnD,oBAAoB;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAY;IAErC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,cAAc,CAAC,CAAqB;IAE5C;;;;;OAKG;gBAED,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,MAA0B,EACjC,WAAW,GAAE,MAA0B,EACvC,KAAK,CAAC,EAAE,cAAc,EAAE,EACxB,QAAQ,GAAE,MAA6C,EACvD,UAAU,GAAE,eAAe,EAAO,EAClC,cAAc,CAAC,EAAE,kBAAkB;IAmBrC;;;OAGG;IACH,QAAQ,IAAI,MAAM;IAIlB;;;OAGG;IACH,cAAc,IAAI,MAAM;IAIxB;;;;;OAKG;IACG,WAAW,CACf,QAAQ,EAAE,OAAO,EAAE,EACnB,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EACzC,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAClD,OAAO,CAAC,IAAI,CAAC;IA6BhB;;;;;;OAMG;IACG,iBAAiB,CACrB,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EACzC,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAClD,OAAO,CAAC,IAAI,CAAC;IAsChB;;;;;;;OAOG;IACG,QAAQ,CACZ,QAAQ,EAAE,OAAO,EAAE,EACnB,MAAM,UAAO,EACb,iBAAiB,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAe,EACpD,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,kBAAkB,CAAC;IAK9B;;;;;;;OAOG;IACG,cAAc,CAClB,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,MAAM,GAAE,OAAe,EACvB,iBAAiB,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAe,EACpD,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,kBAAkB,CAAC;IAU9B;;OAEG;YACW,aAAa;YAkBb,UAAU;IAexB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAiDxB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAchC;;OAEG;IACH,OAAO,CAAC,4BAA4B;IAsBpC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAuC5B;;OAEG;IACH,OAAO,CAAC,uBAAuB;YAuBjB,YAAY;YAiCZ,WAAW;IAwEzB,OAAO,CAAC,YAAY;IAuBpB;;OAEG;YACW,oBAAoB;IAqElC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAsE/B;;OAEG;IACH,OAAO,CAAC,qBAAqB;CAiC9B"}
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 full = await this.handleStream(res, onPartialResponse);
55
- await onCompleteResponse(full);
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 full = await this.handleStream(res, onPartialResponse);
86
- await onCompleteResponse(full);
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.max_tokens = tokenLimit;
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
- if (typeof data.text === 'string' && data.text) {
495
- StreamTextAccumulator.append(textBlocks, data.text);
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