@aituber-onair/chat 0.1.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.ja.md +318 -0
- package/README.md +318 -0
- package/dist/cjs/constants/chat.d.ts +26 -0
- package/dist/cjs/constants/chat.d.ts.map +1 -0
- package/dist/cjs/constants/chat.js +34 -0
- package/dist/cjs/constants/chat.js.map +1 -0
- package/dist/cjs/constants/claude.d.ts +9 -0
- package/dist/cjs/constants/claude.d.ts.map +1 -0
- package/dist/cjs/constants/claude.js +20 -0
- package/dist/cjs/constants/claude.js.map +1 -0
- package/dist/cjs/constants/gemini.d.ts +11 -0
- package/dist/cjs/constants/gemini.d.ts.map +1 -0
- package/dist/cjs/constants/gemini.js +26 -0
- package/dist/cjs/constants/gemini.js.map +1 -0
- package/dist/cjs/constants/index.d.ts +9 -0
- package/dist/cjs/constants/index.d.ts.map +1 -0
- package/dist/cjs/constants/index.js +25 -0
- package/dist/cjs/constants/index.js.map +1 -0
- package/dist/cjs/constants/openai.d.ts +13 -0
- package/dist/cjs/constants/openai.d.ts.map +1 -0
- package/dist/cjs/constants/openai.js +28 -0
- package/dist/cjs/constants/openai.js.map +1 -0
- package/dist/cjs/constants/prompts.d.ts +3 -0
- package/dist/cjs/constants/prompts.d.ts.map +1 -0
- package/dist/cjs/constants/prompts.js +16 -0
- package/dist/cjs/constants/prompts.js.map +1 -0
- package/dist/cjs/index.d.ts +17 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +45 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/services/ChatService.d.ts +51 -0
- package/dist/cjs/services/ChatService.d.ts.map +1 -0
- package/dist/cjs/services/ChatService.js +3 -0
- package/dist/cjs/services/ChatService.js.map +1 -0
- package/dist/cjs/services/ChatServiceFactory.d.ts +39 -0
- package/dist/cjs/services/ChatServiceFactory.d.ts.map +1 -0
- package/dist/cjs/services/ChatServiceFactory.js +65 -0
- package/dist/cjs/services/ChatServiceFactory.js.map +1 -0
- package/dist/cjs/services/providers/ChatServiceProvider.d.ts +52 -0
- package/dist/cjs/services/providers/ChatServiceProvider.d.ts.map +1 -0
- package/dist/cjs/services/providers/ChatServiceProvider.js +3 -0
- package/dist/cjs/services/providers/ChatServiceProvider.js.map +1 -0
- package/dist/cjs/services/providers/claude/ClaudeChatService.d.ts +142 -0
- package/dist/cjs/services/providers/claude/ClaudeChatService.d.ts.map +1 -0
- package/dist/cjs/services/providers/claude/ClaudeChatService.js +501 -0
- package/dist/cjs/services/providers/claude/ClaudeChatService.js.map +1 -0
- package/dist/cjs/services/providers/claude/ClaudeChatServiceProvider.d.ts +40 -0
- package/dist/cjs/services/providers/claude/ClaudeChatServiceProvider.d.ts.map +1 -0
- package/dist/cjs/services/providers/claude/ClaudeChatServiceProvider.js +68 -0
- package/dist/cjs/services/providers/claude/ClaudeChatServiceProvider.js.map +1 -0
- package/dist/cjs/services/providers/gemini/GeminiChatService.d.ts +104 -0
- package/dist/cjs/services/providers/gemini/GeminiChatService.d.ts.map +1 -0
- package/dist/cjs/services/providers/gemini/GeminiChatService.js +653 -0
- package/dist/cjs/services/providers/gemini/GeminiChatService.js.map +1 -0
- package/dist/cjs/services/providers/gemini/GeminiChatServiceProvider.d.ts +40 -0
- package/dist/cjs/services/providers/gemini/GeminiChatServiceProvider.d.ts.map +1 -0
- package/dist/cjs/services/providers/gemini/GeminiChatServiceProvider.js +70 -0
- package/dist/cjs/services/providers/gemini/GeminiChatServiceProvider.js.map +1 -0
- package/dist/cjs/services/providers/openai/OpenAIChatService.d.ts +110 -0
- package/dist/cjs/services/providers/openai/OpenAIChatService.d.ts.map +1 -0
- package/dist/cjs/services/providers/openai/OpenAIChatService.js +544 -0
- package/dist/cjs/services/providers/openai/OpenAIChatService.js.map +1 -0
- package/dist/cjs/services/providers/openai/OpenAIChatServiceProvider.d.ts +40 -0
- package/dist/cjs/services/providers/openai/OpenAIChatServiceProvider.d.ts.map +1 -0
- package/dist/cjs/services/providers/openai/OpenAIChatServiceProvider.js +80 -0
- package/dist/cjs/services/providers/openai/OpenAIChatServiceProvider.js.map +1 -0
- package/dist/cjs/types/chat.d.ts +46 -0
- package/dist/cjs/types/chat.d.ts.map +1 -0
- package/dist/cjs/types/chat.js +6 -0
- package/dist/cjs/types/chat.js.map +1 -0
- package/dist/cjs/types/index.d.ts +8 -0
- package/dist/cjs/types/index.d.ts.map +1 -0
- package/dist/cjs/types/index.js +25 -0
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/types/mcp.d.ts +37 -0
- package/dist/cjs/types/mcp.d.ts.map +1 -0
- package/dist/cjs/types/mcp.js +6 -0
- package/dist/cjs/types/mcp.js.map +1 -0
- package/dist/cjs/types/toolChat.d.ts +42 -0
- package/dist/cjs/types/toolChat.d.ts.map +1 -0
- package/dist/cjs/types/toolChat.js +3 -0
- package/dist/cjs/types/toolChat.js.map +1 -0
- package/dist/cjs/utils/chatServiceHttpClient.d.ts +47 -0
- package/dist/cjs/utils/chatServiceHttpClient.d.ts.map +1 -0
- package/dist/cjs/utils/chatServiceHttpClient.js +131 -0
- package/dist/cjs/utils/chatServiceHttpClient.js.map +1 -0
- package/dist/cjs/utils/emotionParser.d.ts +46 -0
- package/dist/cjs/utils/emotionParser.d.ts.map +1 -0
- package/dist/cjs/utils/emotionParser.js +59 -0
- package/dist/cjs/utils/emotionParser.js.map +1 -0
- package/dist/cjs/utils/index.d.ts +8 -0
- package/dist/cjs/utils/index.d.ts.map +1 -0
- package/dist/cjs/utils/index.js +24 -0
- package/dist/cjs/utils/index.js.map +1 -0
- package/dist/cjs/utils/mcpSchemaFetcher.d.ts +19 -0
- package/dist/cjs/utils/mcpSchemaFetcher.d.ts.map +1 -0
- package/dist/cjs/utils/mcpSchemaFetcher.js +98 -0
- package/dist/cjs/utils/mcpSchemaFetcher.js.map +1 -0
- package/dist/cjs/utils/screenplay.d.ts +20 -0
- package/dist/cjs/utils/screenplay.d.ts.map +1 -0
- package/dist/cjs/utils/screenplay.js +41 -0
- package/dist/cjs/utils/screenplay.js.map +1 -0
- package/dist/cjs/utils/streamTextAccumulator.d.ts +25 -0
- package/dist/cjs/utils/streamTextAccumulator.d.ts.map +1 -0
- package/dist/cjs/utils/streamTextAccumulator.js +47 -0
- package/dist/cjs/utils/streamTextAccumulator.js.map +1 -0
- package/dist/esm/constants/chat.d.ts +26 -0
- package/dist/esm/constants/chat.d.ts.map +1 -0
- package/dist/esm/constants/chat.js +30 -0
- package/dist/esm/constants/chat.js.map +1 -0
- package/dist/esm/constants/claude.d.ts +9 -0
- package/dist/esm/constants/claude.d.ts.map +1 -0
- package/dist/esm/constants/claude.js +17 -0
- package/dist/esm/constants/claude.js.map +1 -0
- package/dist/esm/constants/gemini.d.ts +11 -0
- package/dist/esm/constants/gemini.d.ts.map +1 -0
- package/dist/esm/constants/gemini.js +23 -0
- package/dist/esm/constants/gemini.js.map +1 -0
- package/dist/esm/constants/index.d.ts +9 -0
- package/dist/esm/constants/index.d.ts.map +1 -0
- package/dist/esm/constants/index.js +9 -0
- package/dist/esm/constants/index.js.map +1 -0
- package/dist/esm/constants/openai.d.ts +13 -0
- package/dist/esm/constants/openai.d.ts.map +1 -0
- package/dist/esm/constants/openai.js +25 -0
- package/dist/esm/constants/openai.js.map +1 -0
- package/dist/esm/constants/prompts.d.ts +3 -0
- package/dist/esm/constants/prompts.d.ts.map +1 -0
- package/dist/esm/constants/prompts.js +13 -0
- package/dist/esm/constants/prompts.js.map +1 -0
- package/dist/esm/index.d.ts +17 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +21 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/services/ChatService.d.ts +51 -0
- package/dist/esm/services/ChatService.d.ts.map +1 -0
- package/dist/esm/services/ChatService.js +2 -0
- package/dist/esm/services/ChatService.js.map +1 -0
- package/dist/esm/services/ChatServiceFactory.d.ts +39 -0
- package/dist/esm/services/ChatServiceFactory.d.ts.map +1 -0
- package/dist/esm/services/ChatServiceFactory.js +61 -0
- package/dist/esm/services/ChatServiceFactory.js.map +1 -0
- package/dist/esm/services/providers/ChatServiceProvider.d.ts +52 -0
- package/dist/esm/services/providers/ChatServiceProvider.d.ts.map +1 -0
- package/dist/esm/services/providers/ChatServiceProvider.js +2 -0
- package/dist/esm/services/providers/ChatServiceProvider.js.map +1 -0
- package/dist/esm/services/providers/claude/ClaudeChatService.d.ts +142 -0
- package/dist/esm/services/providers/claude/ClaudeChatService.d.ts.map +1 -0
- package/dist/esm/services/providers/claude/ClaudeChatService.js +497 -0
- package/dist/esm/services/providers/claude/ClaudeChatService.js.map +1 -0
- package/dist/esm/services/providers/claude/ClaudeChatServiceProvider.d.ts +40 -0
- package/dist/esm/services/providers/claude/ClaudeChatServiceProvider.d.ts.map +1 -0
- package/dist/esm/services/providers/claude/ClaudeChatServiceProvider.js +64 -0
- package/dist/esm/services/providers/claude/ClaudeChatServiceProvider.js.map +1 -0
- package/dist/esm/services/providers/gemini/GeminiChatService.d.ts +104 -0
- package/dist/esm/services/providers/gemini/GeminiChatService.d.ts.map +1 -0
- package/dist/esm/services/providers/gemini/GeminiChatService.js +649 -0
- package/dist/esm/services/providers/gemini/GeminiChatService.js.map +1 -0
- package/dist/esm/services/providers/gemini/GeminiChatServiceProvider.d.ts +40 -0
- package/dist/esm/services/providers/gemini/GeminiChatServiceProvider.d.ts.map +1 -0
- package/dist/esm/services/providers/gemini/GeminiChatServiceProvider.js +66 -0
- package/dist/esm/services/providers/gemini/GeminiChatServiceProvider.js.map +1 -0
- package/dist/esm/services/providers/openai/OpenAIChatService.d.ts +110 -0
- package/dist/esm/services/providers/openai/OpenAIChatService.d.ts.map +1 -0
- package/dist/esm/services/providers/openai/OpenAIChatService.js +540 -0
- package/dist/esm/services/providers/openai/OpenAIChatService.js.map +1 -0
- package/dist/esm/services/providers/openai/OpenAIChatServiceProvider.d.ts +40 -0
- package/dist/esm/services/providers/openai/OpenAIChatServiceProvider.d.ts.map +1 -0
- package/dist/esm/services/providers/openai/OpenAIChatServiceProvider.js +76 -0
- package/dist/esm/services/providers/openai/OpenAIChatServiceProvider.js.map +1 -0
- package/dist/esm/types/chat.d.ts +46 -0
- package/dist/esm/types/chat.d.ts.map +1 -0
- package/dist/esm/types/chat.js +5 -0
- package/dist/esm/types/chat.js.map +1 -0
- package/dist/esm/types/index.d.ts +8 -0
- package/dist/esm/types/index.d.ts.map +1 -0
- package/dist/esm/types/index.js +9 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/types/mcp.d.ts +37 -0
- package/dist/esm/types/mcp.d.ts.map +1 -0
- package/dist/esm/types/mcp.js +5 -0
- package/dist/esm/types/mcp.js.map +1 -0
- package/dist/esm/types/toolChat.d.ts +42 -0
- package/dist/esm/types/toolChat.d.ts.map +1 -0
- package/dist/esm/types/toolChat.js +2 -0
- package/dist/esm/types/toolChat.js.map +1 -0
- package/dist/esm/utils/chatServiceHttpClient.d.ts +47 -0
- package/dist/esm/utils/chatServiceHttpClient.d.ts.map +1 -0
- package/dist/esm/utils/chatServiceHttpClient.js +126 -0
- package/dist/esm/utils/chatServiceHttpClient.js.map +1 -0
- package/dist/esm/utils/emotionParser.d.ts +46 -0
- package/dist/esm/utils/emotionParser.d.ts.map +1 -0
- package/dist/esm/utils/emotionParser.js +55 -0
- package/dist/esm/utils/emotionParser.js.map +1 -0
- package/dist/esm/utils/index.d.ts +8 -0
- package/dist/esm/utils/index.d.ts.map +1 -0
- package/dist/esm/utils/index.js +8 -0
- package/dist/esm/utils/index.js.map +1 -0
- package/dist/esm/utils/mcpSchemaFetcher.d.ts +19 -0
- package/dist/esm/utils/mcpSchemaFetcher.d.ts.map +1 -0
- package/dist/esm/utils/mcpSchemaFetcher.js +94 -0
- package/dist/esm/utils/mcpSchemaFetcher.js.map +1 -0
- package/dist/esm/utils/screenplay.d.ts +20 -0
- package/dist/esm/utils/screenplay.d.ts.map +1 -0
- package/dist/esm/utils/screenplay.js +36 -0
- package/dist/esm/utils/screenplay.js.map +1 -0
- package/dist/esm/utils/streamTextAccumulator.d.ts +25 -0
- package/dist/esm/utils/streamTextAccumulator.d.ts.map +1 -0
- package/dist/esm/utils/streamTextAccumulator.js +43 -0
- package/dist/esm/utils/streamTextAccumulator.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,540 @@
|
|
|
1
|
+
import { ENDPOINT_OPENAI_CHAT_COMPLETIONS_API, ENDPOINT_OPENAI_RESPONSES_API, MODEL_GPT_4O_MINI, VISION_SUPPORTED_MODELS, } from '../../../constants';
|
|
2
|
+
import { getMaxTokensForResponseLength, } from '../../../constants/chat';
|
|
3
|
+
import { StreamTextAccumulator } from '../../../utils/streamTextAccumulator';
|
|
4
|
+
import { ChatServiceHttpClient } from '../../../utils/chatServiceHttpClient';
|
|
5
|
+
/**
|
|
6
|
+
* OpenAI implementation of ChatService
|
|
7
|
+
*/
|
|
8
|
+
export class OpenAIChatService {
|
|
9
|
+
/**
|
|
10
|
+
* Constructor
|
|
11
|
+
* @param apiKey OpenAI API key
|
|
12
|
+
* @param model Name of the model to use
|
|
13
|
+
* @param visionModel Name of the vision model
|
|
14
|
+
*/
|
|
15
|
+
constructor(apiKey, model = MODEL_GPT_4O_MINI, visionModel = MODEL_GPT_4O_MINI, tools, endpoint = ENDPOINT_OPENAI_CHAT_COMPLETIONS_API, mcpServers = [], responseLength) {
|
|
16
|
+
/** Provider name */
|
|
17
|
+
this.provider = 'openai';
|
|
18
|
+
this.apiKey = apiKey;
|
|
19
|
+
this.model = model;
|
|
20
|
+
this.tools = tools || [];
|
|
21
|
+
this.endpoint = endpoint;
|
|
22
|
+
this.mcpServers = mcpServers;
|
|
23
|
+
this.responseLength = responseLength;
|
|
24
|
+
// check if the vision model is supported
|
|
25
|
+
if (!VISION_SUPPORTED_MODELS.includes(visionModel)) {
|
|
26
|
+
throw new Error(`Model ${visionModel} does not support vision capabilities.`);
|
|
27
|
+
}
|
|
28
|
+
this.visionModel = visionModel;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Get the current model name
|
|
32
|
+
* @returns Model name
|
|
33
|
+
*/
|
|
34
|
+
getModel() {
|
|
35
|
+
return this.model;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Get the current vision model name
|
|
39
|
+
* @returns Vision model name
|
|
40
|
+
*/
|
|
41
|
+
getVisionModel() {
|
|
42
|
+
return this.visionModel;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Process chat messages
|
|
46
|
+
* @param messages Array of messages to send
|
|
47
|
+
* @param onPartialResponse Callback to receive each part of streaming response
|
|
48
|
+
* @param onCompleteResponse Callback to execute when response is complete
|
|
49
|
+
*/
|
|
50
|
+
async processChat(messages, onPartialResponse, onCompleteResponse) {
|
|
51
|
+
// not use tools
|
|
52
|
+
if (this.tools.length === 0) {
|
|
53
|
+
const res = await this.callOpenAI(messages, this.model, true);
|
|
54
|
+
const full = await this.handleStream(res, onPartialResponse);
|
|
55
|
+
await onCompleteResponse(full);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
// use tools
|
|
59
|
+
const { blocks, stop_reason } = await this.chatOnce(messages);
|
|
60
|
+
if (stop_reason === 'end') {
|
|
61
|
+
// no tool calls
|
|
62
|
+
const full = blocks
|
|
63
|
+
.filter((b) => b.type === 'text')
|
|
64
|
+
.map((b) => b.text)
|
|
65
|
+
.join('');
|
|
66
|
+
await onCompleteResponse(full);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
// case of stop_reason === 'tool_use', so error
|
|
70
|
+
throw new Error('processChat received tool_calls. ' +
|
|
71
|
+
'ChatProcessor must use chatOnce() loop when tools are enabled.');
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Process chat messages with images
|
|
75
|
+
* @param messages Array of messages to send (including images)
|
|
76
|
+
* @param onPartialResponse Callback to receive each part of streaming response
|
|
77
|
+
* @param onCompleteResponse Callback to execute when response is complete
|
|
78
|
+
* @throws Error if the selected model doesn't support vision
|
|
79
|
+
*/
|
|
80
|
+
async processVisionChat(messages, onPartialResponse, onCompleteResponse) {
|
|
81
|
+
try {
|
|
82
|
+
// not use tools
|
|
83
|
+
if (this.tools.length === 0) {
|
|
84
|
+
const res = await this.callOpenAI(messages, this.visionModel, true);
|
|
85
|
+
const full = await this.handleStream(res, onPartialResponse);
|
|
86
|
+
await onCompleteResponse(full);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
// use tools
|
|
90
|
+
const { blocks, stop_reason } = await this.visionChatOnce(messages, true, onPartialResponse);
|
|
91
|
+
if (stop_reason === 'end') {
|
|
92
|
+
// no tool calls
|
|
93
|
+
const full = blocks
|
|
94
|
+
.filter((b) => b.type === 'text')
|
|
95
|
+
.map((b) => b.text)
|
|
96
|
+
.join('');
|
|
97
|
+
await onCompleteResponse(full);
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
// case of stop_reason === 'tool_use', so error
|
|
101
|
+
throw new Error('processVisionChat received tool_calls. ' +
|
|
102
|
+
'ChatProcessor must use visionChatOnce() loop when tools are enabled.');
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
console.error('Error in processVisionChat:', error);
|
|
106
|
+
throw error;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Process chat messages with tools (text only)
|
|
111
|
+
* @param messages Array of messages to send
|
|
112
|
+
* @param stream Whether to use streaming
|
|
113
|
+
* @param onPartialResponse Callback for partial responses
|
|
114
|
+
* @param maxTokens Maximum tokens for response (optional)
|
|
115
|
+
* @returns Tool chat completion
|
|
116
|
+
*/
|
|
117
|
+
async chatOnce(messages, stream = true, onPartialResponse = () => { }, maxTokens) {
|
|
118
|
+
const res = await this.callOpenAI(messages, this.model, stream, maxTokens);
|
|
119
|
+
return this.parseResponse(res, stream, onPartialResponse);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Process vision chat messages with tools
|
|
123
|
+
* @param messages Array of messages to send (including images)
|
|
124
|
+
* @param stream Whether to use streaming
|
|
125
|
+
* @param onPartialResponse Callback for partial responses
|
|
126
|
+
* @param maxTokens Maximum tokens for response (optional)
|
|
127
|
+
* @returns Tool chat completion
|
|
128
|
+
*/
|
|
129
|
+
async visionChatOnce(messages, stream = false, onPartialResponse = () => { }, maxTokens) {
|
|
130
|
+
const res = await this.callOpenAI(messages, this.visionModel, stream, maxTokens);
|
|
131
|
+
return this.parseResponse(res, stream, onPartialResponse);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Parse response based on endpoint type
|
|
135
|
+
*/
|
|
136
|
+
async parseResponse(res, stream, onPartialResponse) {
|
|
137
|
+
const isResponsesAPI = this.endpoint === ENDPOINT_OPENAI_RESPONSES_API;
|
|
138
|
+
if (isResponsesAPI) {
|
|
139
|
+
return stream
|
|
140
|
+
? this.parseResponsesStream(res, onPartialResponse)
|
|
141
|
+
: this.parseResponsesOneShot(await res.json());
|
|
142
|
+
}
|
|
143
|
+
return stream
|
|
144
|
+
? this.parseStream(res, onPartialResponse)
|
|
145
|
+
: this.parseOneShot(await res.json());
|
|
146
|
+
}
|
|
147
|
+
async callOpenAI(messages, model, stream = false, maxTokens) {
|
|
148
|
+
const body = this.buildRequestBody(messages, model, stream, maxTokens);
|
|
149
|
+
const res = await ChatServiceHttpClient.post(this.endpoint, body, {
|
|
150
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
151
|
+
});
|
|
152
|
+
return res;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Build request body based on the endpoint type
|
|
156
|
+
*/
|
|
157
|
+
buildRequestBody(messages, model, stream, maxTokens) {
|
|
158
|
+
const isResponsesAPI = this.endpoint === ENDPOINT_OPENAI_RESPONSES_API;
|
|
159
|
+
// Validate MCP servers compatibility
|
|
160
|
+
this.validateMCPCompatibility();
|
|
161
|
+
const body = {
|
|
162
|
+
model,
|
|
163
|
+
stream,
|
|
164
|
+
};
|
|
165
|
+
// Add max_tokens/max_completion_tokens based on endpoint
|
|
166
|
+
const tokenLimit = maxTokens !== undefined
|
|
167
|
+
? maxTokens
|
|
168
|
+
: getMaxTokensForResponseLength(this.responseLength);
|
|
169
|
+
if (isResponsesAPI) {
|
|
170
|
+
body.max_output_tokens = tokenLimit;
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
body.max_tokens = tokenLimit;
|
|
174
|
+
}
|
|
175
|
+
// Handle messages format based on endpoint
|
|
176
|
+
if (isResponsesAPI) {
|
|
177
|
+
body.input = this.cleanMessagesForResponsesAPI(messages);
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
body.messages = messages;
|
|
181
|
+
}
|
|
182
|
+
// Add tools if available
|
|
183
|
+
const tools = this.buildToolsDefinition();
|
|
184
|
+
if (tools.length > 0) {
|
|
185
|
+
body.tools = tools;
|
|
186
|
+
// Only Chat Completions API requires tool_choice
|
|
187
|
+
if (!isResponsesAPI) {
|
|
188
|
+
body.tool_choice = 'auto';
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return body;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Validate MCP servers compatibility with the current endpoint
|
|
195
|
+
*/
|
|
196
|
+
validateMCPCompatibility() {
|
|
197
|
+
if (this.mcpServers.length > 0 &&
|
|
198
|
+
this.endpoint === ENDPOINT_OPENAI_CHAT_COMPLETIONS_API) {
|
|
199
|
+
throw new Error(`MCP servers are not supported with Chat Completions API. ` +
|
|
200
|
+
`Current endpoint: ${this.endpoint}. ` +
|
|
201
|
+
`Please use OpenAI Responses API endpoint: ${ENDPOINT_OPENAI_RESPONSES_API}. ` +
|
|
202
|
+
`MCP tools are only available in the Responses API endpoint.`);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Clean messages for Responses API (remove timestamp and other extra properties)
|
|
207
|
+
*/
|
|
208
|
+
cleanMessagesForResponsesAPI(messages) {
|
|
209
|
+
return messages.map((msg) => {
|
|
210
|
+
const cleanMsg = {
|
|
211
|
+
role: msg.role,
|
|
212
|
+
};
|
|
213
|
+
// Handle content (text or vision)
|
|
214
|
+
if (typeof msg.content === 'string') {
|
|
215
|
+
cleanMsg.content = msg.content;
|
|
216
|
+
}
|
|
217
|
+
else if (Array.isArray(msg.content)) {
|
|
218
|
+
// Vision message case
|
|
219
|
+
cleanMsg.content = msg.content;
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
cleanMsg.content = msg.content;
|
|
223
|
+
}
|
|
224
|
+
return cleanMsg;
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Build tools definition based on the endpoint type
|
|
229
|
+
*/
|
|
230
|
+
buildToolsDefinition() {
|
|
231
|
+
const isResponsesAPI = this.endpoint === ENDPOINT_OPENAI_RESPONSES_API;
|
|
232
|
+
const toolDefs = [];
|
|
233
|
+
// Add function tools
|
|
234
|
+
if (this.tools.length > 0) {
|
|
235
|
+
if (isResponsesAPI) {
|
|
236
|
+
// Responses API format (flattened function properties)
|
|
237
|
+
toolDefs.push(...this.tools.map((t) => ({
|
|
238
|
+
type: 'function',
|
|
239
|
+
name: t.name,
|
|
240
|
+
description: t.description,
|
|
241
|
+
parameters: t.parameters,
|
|
242
|
+
})));
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
// Chat Completions API format (nested function properties)
|
|
246
|
+
toolDefs.push(...this.tools.map((t) => ({
|
|
247
|
+
type: 'function',
|
|
248
|
+
function: {
|
|
249
|
+
name: t.name,
|
|
250
|
+
description: t.description,
|
|
251
|
+
parameters: t.parameters,
|
|
252
|
+
},
|
|
253
|
+
})));
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
// Add MCP tools (only for Responses API)
|
|
257
|
+
if (this.mcpServers.length > 0 && isResponsesAPI) {
|
|
258
|
+
toolDefs.push(...this.buildMCPToolsDefinition());
|
|
259
|
+
}
|
|
260
|
+
return toolDefs;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Build MCP tools definition for Responses API
|
|
264
|
+
*/
|
|
265
|
+
buildMCPToolsDefinition() {
|
|
266
|
+
return this.mcpServers.map((server) => {
|
|
267
|
+
const mcpDef = {
|
|
268
|
+
type: 'mcp',
|
|
269
|
+
server_label: server.name,
|
|
270
|
+
server_url: server.url,
|
|
271
|
+
require_approval: 'never',
|
|
272
|
+
};
|
|
273
|
+
if (server.tool_configuration?.allowed_tools) {
|
|
274
|
+
mcpDef.allowed_tools = server.tool_configuration.allowed_tools;
|
|
275
|
+
}
|
|
276
|
+
if (server.authorization_token) {
|
|
277
|
+
mcpDef.headers = {
|
|
278
|
+
Authorization: `Bearer ${server.authorization_token}`,
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
return mcpDef;
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
async handleStream(res, onPartial) {
|
|
285
|
+
const reader = res.body.getReader();
|
|
286
|
+
const dec = new TextDecoder();
|
|
287
|
+
let buffer = '';
|
|
288
|
+
let full = '';
|
|
289
|
+
while (true) {
|
|
290
|
+
const { done, value } = await reader.read();
|
|
291
|
+
if (done)
|
|
292
|
+
break;
|
|
293
|
+
buffer += dec.decode(value, { stream: true });
|
|
294
|
+
let idx;
|
|
295
|
+
while ((idx = buffer.indexOf('\n\n')) !== -1) {
|
|
296
|
+
const raw = buffer.slice(0, idx).trim();
|
|
297
|
+
buffer = buffer.slice(idx + 2);
|
|
298
|
+
if (!raw.startsWith('data:'))
|
|
299
|
+
continue;
|
|
300
|
+
const jsonStr = raw.slice(5).trim();
|
|
301
|
+
if (jsonStr === '[DONE]') {
|
|
302
|
+
buffer = '';
|
|
303
|
+
break;
|
|
304
|
+
}
|
|
305
|
+
const json = JSON.parse(jsonStr);
|
|
306
|
+
const content = json.choices[0]?.delta?.content || '';
|
|
307
|
+
if (content) {
|
|
308
|
+
onPartial(content);
|
|
309
|
+
full += content;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
return full;
|
|
314
|
+
}
|
|
315
|
+
async parseStream(res, onPartial) {
|
|
316
|
+
const reader = res.body.getReader();
|
|
317
|
+
const dec = new TextDecoder();
|
|
318
|
+
const textBlocks = [];
|
|
319
|
+
const toolCallsMap = new Map();
|
|
320
|
+
let buf = '';
|
|
321
|
+
while (true) {
|
|
322
|
+
const { done, value } = await reader.read();
|
|
323
|
+
if (done)
|
|
324
|
+
break;
|
|
325
|
+
buf += dec.decode(value, { stream: true });
|
|
326
|
+
// wait for "\n\n"
|
|
327
|
+
let sep;
|
|
328
|
+
while ((sep = buf.indexOf('\n\n')) !== -1) {
|
|
329
|
+
const raw = buf.slice(0, sep).trim(); // 1 line
|
|
330
|
+
buf = buf.slice(sep + 2);
|
|
331
|
+
if (!raw.startsWith('data:'))
|
|
332
|
+
continue;
|
|
333
|
+
const payload = raw.slice(5).trim(); // after "data:"
|
|
334
|
+
if (payload === '[DONE]') {
|
|
335
|
+
buf = '';
|
|
336
|
+
break;
|
|
337
|
+
}
|
|
338
|
+
const json = JSON.parse(payload);
|
|
339
|
+
const delta = json.choices[0].delta;
|
|
340
|
+
if (delta.content) {
|
|
341
|
+
onPartial(delta.content);
|
|
342
|
+
textBlocks.push({ type: 'text', text: delta.content });
|
|
343
|
+
}
|
|
344
|
+
/* -------------- tool_calls -------------- */
|
|
345
|
+
if (delta.tool_calls) {
|
|
346
|
+
delta.tool_calls.forEach((c) => {
|
|
347
|
+
// arguments are incremented for each chunk → concatenate
|
|
348
|
+
const entry = toolCallsMap.get(c.index) ?? {
|
|
349
|
+
id: c.id,
|
|
350
|
+
name: c.function.name,
|
|
351
|
+
args: '',
|
|
352
|
+
};
|
|
353
|
+
entry.args += c.function.arguments || '';
|
|
354
|
+
toolCallsMap.set(c.index, entry);
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
// convert tool_callsMap to ToolUseBlock[]
|
|
360
|
+
const toolBlocks = Array.from(toolCallsMap.entries())
|
|
361
|
+
.sort((a, b) => a[0] - b[0])
|
|
362
|
+
.map(([_, e]) => ({
|
|
363
|
+
type: 'tool_use',
|
|
364
|
+
id: e.id,
|
|
365
|
+
name: e.name,
|
|
366
|
+
input: JSON.parse(e.args || '{}'),
|
|
367
|
+
}));
|
|
368
|
+
const blocks = [...textBlocks, ...toolBlocks];
|
|
369
|
+
return {
|
|
370
|
+
blocks,
|
|
371
|
+
stop_reason: toolBlocks.length ? 'tool_use' : 'end',
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
parseOneShot(data) {
|
|
375
|
+
const choice = data.choices[0];
|
|
376
|
+
const blocks = [];
|
|
377
|
+
if (choice.finish_reason === 'tool_calls') {
|
|
378
|
+
choice.message.tool_calls.forEach((c) => blocks.push({
|
|
379
|
+
type: 'tool_use',
|
|
380
|
+
id: c.id,
|
|
381
|
+
name: c.function.name,
|
|
382
|
+
input: JSON.parse(c.function.arguments || '{}'),
|
|
383
|
+
}));
|
|
384
|
+
}
|
|
385
|
+
else {
|
|
386
|
+
blocks.push({ type: 'text', text: choice.message.content });
|
|
387
|
+
}
|
|
388
|
+
return {
|
|
389
|
+
blocks,
|
|
390
|
+
stop_reason: choice.finish_reason === 'tool_calls' ? 'tool_use' : 'end',
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
/**
|
|
394
|
+
* Parse streaming response from Responses API (SSE format)
|
|
395
|
+
*/
|
|
396
|
+
async parseResponsesStream(res, onPartial) {
|
|
397
|
+
const reader = res.body.getReader();
|
|
398
|
+
const dec = new TextDecoder();
|
|
399
|
+
const textBlocks = [];
|
|
400
|
+
const toolCallsMap = new Map();
|
|
401
|
+
let buf = '';
|
|
402
|
+
while (true) {
|
|
403
|
+
const { done, value } = await reader.read();
|
|
404
|
+
if (done)
|
|
405
|
+
break;
|
|
406
|
+
buf += dec.decode(value, { stream: true });
|
|
407
|
+
// Parse SSE format: process event: and data: combinations
|
|
408
|
+
let eventType = '';
|
|
409
|
+
let eventData = '';
|
|
410
|
+
const lines = buf.split('\n');
|
|
411
|
+
buf = lines.pop() || ''; // Keep the last incomplete line
|
|
412
|
+
for (let i = 0; i < lines.length; i++) {
|
|
413
|
+
const line = lines[i].trim();
|
|
414
|
+
if (line.startsWith('event:')) {
|
|
415
|
+
eventType = line.slice(6).trim();
|
|
416
|
+
}
|
|
417
|
+
else if (line.startsWith('data:')) {
|
|
418
|
+
eventData = line.slice(5).trim();
|
|
419
|
+
}
|
|
420
|
+
else if (line === '' && eventType && eventData) {
|
|
421
|
+
// Process event separated by empty line
|
|
422
|
+
try {
|
|
423
|
+
const json = JSON.parse(eventData);
|
|
424
|
+
this.handleResponsesSSEEvent(eventType, json, onPartial, textBlocks, toolCallsMap);
|
|
425
|
+
}
|
|
426
|
+
catch (e) {
|
|
427
|
+
console.warn('Failed to parse SSE data:', eventData);
|
|
428
|
+
}
|
|
429
|
+
eventType = '';
|
|
430
|
+
eventData = '';
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
// Convert tool calls to blocks
|
|
435
|
+
const toolBlocks = Array.from(toolCallsMap.values()).map((tool) => ({
|
|
436
|
+
type: 'tool_use',
|
|
437
|
+
id: tool.id,
|
|
438
|
+
name: tool.name,
|
|
439
|
+
input: tool.input || {},
|
|
440
|
+
}));
|
|
441
|
+
const blocks = [...textBlocks, ...toolBlocks];
|
|
442
|
+
return {
|
|
443
|
+
blocks,
|
|
444
|
+
stop_reason: toolBlocks.length ? 'tool_use' : 'end',
|
|
445
|
+
};
|
|
446
|
+
}
|
|
447
|
+
/**
|
|
448
|
+
* Handle specific SSE events from Responses API
|
|
449
|
+
*/
|
|
450
|
+
handleResponsesSSEEvent(eventType, data, onPartial, textBlocks, toolCallsMap) {
|
|
451
|
+
switch (eventType) {
|
|
452
|
+
// Item addition events
|
|
453
|
+
case 'response.output_item.added':
|
|
454
|
+
if (data.item?.type === 'message' && Array.isArray(data.item.content)) {
|
|
455
|
+
data.item.content.forEach((c) => {
|
|
456
|
+
if (c.type === 'output_text' && c.text) {
|
|
457
|
+
onPartial(c.text);
|
|
458
|
+
StreamTextAccumulator.append(textBlocks, c.text);
|
|
459
|
+
}
|
|
460
|
+
});
|
|
461
|
+
}
|
|
462
|
+
else if (data.item?.type === 'function_call') {
|
|
463
|
+
toolCallsMap.set(data.item.id, {
|
|
464
|
+
id: data.item.id,
|
|
465
|
+
name: data.item.name,
|
|
466
|
+
input: data.item.arguments ? JSON.parse(data.item.arguments) : {},
|
|
467
|
+
});
|
|
468
|
+
}
|
|
469
|
+
break;
|
|
470
|
+
// Initial content part events
|
|
471
|
+
case 'response.content_part.added':
|
|
472
|
+
if (data.part?.type === 'output_text' &&
|
|
473
|
+
typeof data.part.text === 'string') {
|
|
474
|
+
onPartial(data.part.text);
|
|
475
|
+
StreamTextAccumulator.append(textBlocks, data.part.text);
|
|
476
|
+
}
|
|
477
|
+
break;
|
|
478
|
+
// Text delta events
|
|
479
|
+
case 'response.output_text.delta':
|
|
480
|
+
case 'response.content_part.delta': // Also handle this event type just in case
|
|
481
|
+
{
|
|
482
|
+
const deltaText = typeof data.delta === 'string'
|
|
483
|
+
? data.delta
|
|
484
|
+
: (data.delta?.text ?? '');
|
|
485
|
+
if (deltaText) {
|
|
486
|
+
onPartial(deltaText);
|
|
487
|
+
StreamTextAccumulator.append(textBlocks, deltaText);
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
break;
|
|
491
|
+
// Text completion events
|
|
492
|
+
case 'response.output_text.done':
|
|
493
|
+
case 'response.content_part.done':
|
|
494
|
+
if (typeof data.text === 'string' && data.text) {
|
|
495
|
+
StreamTextAccumulator.append(textBlocks, data.text);
|
|
496
|
+
}
|
|
497
|
+
break;
|
|
498
|
+
// Response completion events
|
|
499
|
+
case 'response.completed':
|
|
500
|
+
break;
|
|
501
|
+
default:
|
|
502
|
+
// Ignore other events
|
|
503
|
+
break;
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
/**
|
|
507
|
+
* Parse non-streaming response from Responses API
|
|
508
|
+
*/
|
|
509
|
+
parseResponsesOneShot(data) {
|
|
510
|
+
const blocks = [];
|
|
511
|
+
// Process Responses API format: data.output array
|
|
512
|
+
if (data.output && Array.isArray(data.output)) {
|
|
513
|
+
data.output.forEach((outputItem) => {
|
|
514
|
+
if (outputItem.type === 'message' && outputItem.content) {
|
|
515
|
+
outputItem.content.forEach((content) => {
|
|
516
|
+
if (content.type === 'output_text' && content.text) {
|
|
517
|
+
blocks.push({ type: 'text', text: content.text });
|
|
518
|
+
}
|
|
519
|
+
});
|
|
520
|
+
}
|
|
521
|
+
// Handle function call items
|
|
522
|
+
if (outputItem.type === 'function_call') {
|
|
523
|
+
blocks.push({
|
|
524
|
+
type: 'tool_use',
|
|
525
|
+
id: outputItem.id,
|
|
526
|
+
name: outputItem.name,
|
|
527
|
+
input: outputItem.arguments ? JSON.parse(outputItem.arguments) : {},
|
|
528
|
+
});
|
|
529
|
+
}
|
|
530
|
+
});
|
|
531
|
+
}
|
|
532
|
+
return {
|
|
533
|
+
blocks,
|
|
534
|
+
stop_reason: blocks.some((b) => b.type === 'tool_use')
|
|
535
|
+
? 'tool_use'
|
|
536
|
+
: 'end',
|
|
537
|
+
};
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
//# sourceMappingURL=OpenAIChatService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OpenAIChatService.js","sourceRoot":"","sources":["../../../../../src/services/providers/openai/OpenAIChatService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { ChatService } from '../../ChatService';
|
|
2
|
+
import { ChatServiceOptions, ChatServiceProvider } from '../ChatServiceProvider';
|
|
3
|
+
/**
|
|
4
|
+
* OpenAI API provider implementation
|
|
5
|
+
*/
|
|
6
|
+
export declare class OpenAIChatServiceProvider implements ChatServiceProvider {
|
|
7
|
+
/**
|
|
8
|
+
* Create a chat service instance
|
|
9
|
+
* @param options Service options
|
|
10
|
+
* @returns OpenAIChatService instance
|
|
11
|
+
*/
|
|
12
|
+
createChatService(options: ChatServiceOptions): ChatService;
|
|
13
|
+
/**
|
|
14
|
+
* Get the provider name
|
|
15
|
+
* @returns Provider name ('openai')
|
|
16
|
+
*/
|
|
17
|
+
getProviderName(): string;
|
|
18
|
+
/**
|
|
19
|
+
* Get the list of supported models
|
|
20
|
+
* @returns Array of supported model names
|
|
21
|
+
*/
|
|
22
|
+
getSupportedModels(): string[];
|
|
23
|
+
/**
|
|
24
|
+
* Get the default model
|
|
25
|
+
* @returns Default model name
|
|
26
|
+
*/
|
|
27
|
+
getDefaultModel(): string;
|
|
28
|
+
/**
|
|
29
|
+
* Check if this provider supports vision (image processing)
|
|
30
|
+
* @returns Vision support status (true)
|
|
31
|
+
*/
|
|
32
|
+
supportsVision(): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Check if a specific model supports vision capabilities
|
|
35
|
+
* @param model The model name to check
|
|
36
|
+
* @returns True if the model supports vision, false otherwise
|
|
37
|
+
*/
|
|
38
|
+
supportsVisionForModel(model: string): boolean;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=OpenAIChatServiceProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OpenAIChatServiceProvider.d.ts","sourceRoot":"","sources":["../../../../../src/services/providers/openai/OpenAIChatServiceProvider.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,wBAAwB,CAAC;AAGhC;;GAEG;AACH,qBAAa,yBAA0B,YAAW,mBAAmB;IACnE;;;;OAIG;IACH,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW;IA+B3D;;;OAGG;IACH,eAAe,IAAI,MAAM;IAIzB;;;OAGG;IACH,kBAAkB,IAAI,MAAM,EAAE;IAc9B;;;OAGG;IACH,eAAe,IAAI,MAAM;IAIzB;;;OAGG;IACH,cAAc,IAAI,OAAO;IAIzB;;;;OAIG;IACH,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;CAG/C"}
|