@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,94 @@
|
|
|
1
|
+
import { ChatServiceHttpClient } from './chatServiceHttpClient';
|
|
2
|
+
/**
|
|
3
|
+
* MCP server schema fetcher for SDK-less implementation
|
|
4
|
+
*/
|
|
5
|
+
export class MCPSchemaFetcher {
|
|
6
|
+
/**
|
|
7
|
+
* Fetch tool schemas from MCP server
|
|
8
|
+
* @param serverConfig MCP server configuration
|
|
9
|
+
* @returns Array of tool definitions
|
|
10
|
+
*/
|
|
11
|
+
static async fetchToolSchemas(serverConfig) {
|
|
12
|
+
try {
|
|
13
|
+
// Try to fetch tools list from MCP server
|
|
14
|
+
// This follows the MCP protocol for tool discovery
|
|
15
|
+
const headers = {
|
|
16
|
+
'Content-Type': 'application/json',
|
|
17
|
+
};
|
|
18
|
+
if (serverConfig.authorization_token) {
|
|
19
|
+
headers['Authorization'] = `Bearer ${serverConfig.authorization_token}`;
|
|
20
|
+
}
|
|
21
|
+
// MCP protocol: POST to /tools to list available tools
|
|
22
|
+
const response = await ChatServiceHttpClient.post(`${serverConfig.url}/tools`, {}, headers);
|
|
23
|
+
const toolsData = await response.json();
|
|
24
|
+
// Convert MCP tool schemas to AITuber ToolDefinition format
|
|
25
|
+
if (Array.isArray(toolsData.tools)) {
|
|
26
|
+
return toolsData.tools.map((tool) => ({
|
|
27
|
+
name: `mcp_${serverConfig.name}_${tool.name}`,
|
|
28
|
+
description: tool.description || `Tool from ${serverConfig.name} MCP server`,
|
|
29
|
+
parameters: tool.inputSchema || {
|
|
30
|
+
type: 'object',
|
|
31
|
+
properties: {},
|
|
32
|
+
required: [],
|
|
33
|
+
},
|
|
34
|
+
}));
|
|
35
|
+
}
|
|
36
|
+
// Fallback: create generic search tool if server doesn't provide schema
|
|
37
|
+
return [
|
|
38
|
+
{
|
|
39
|
+
name: `mcp_${serverConfig.name}_search`,
|
|
40
|
+
description: `Search using ${serverConfig.name} MCP server`,
|
|
41
|
+
parameters: {
|
|
42
|
+
type: 'object',
|
|
43
|
+
properties: {
|
|
44
|
+
query: {
|
|
45
|
+
type: 'string',
|
|
46
|
+
description: 'Search query',
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
required: ['query'],
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
];
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
console.warn(`Failed to fetch MCP schemas from ${serverConfig.name}:`, error);
|
|
56
|
+
// Fallback: create generic search tool
|
|
57
|
+
return [
|
|
58
|
+
{
|
|
59
|
+
name: `mcp_${serverConfig.name}_search`,
|
|
60
|
+
description: `Search using ${serverConfig.name} MCP server (schema fetch failed)`,
|
|
61
|
+
parameters: {
|
|
62
|
+
type: 'object',
|
|
63
|
+
properties: {
|
|
64
|
+
query: {
|
|
65
|
+
type: 'string',
|
|
66
|
+
description: 'Search query',
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
required: ['query'],
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
];
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Fetch all tool schemas from multiple MCP servers
|
|
77
|
+
* @param mcpServers Array of MCP server configurations
|
|
78
|
+
* @returns Array of all tool definitions
|
|
79
|
+
*/
|
|
80
|
+
static async fetchAllToolSchemas(mcpServers) {
|
|
81
|
+
const allSchemas = [];
|
|
82
|
+
for (const server of mcpServers) {
|
|
83
|
+
try {
|
|
84
|
+
const schemas = await this.fetchToolSchemas(server);
|
|
85
|
+
allSchemas.push(...schemas);
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
console.error(`Failed to fetch schemas from ${server.name}:`, error);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return allSchemas;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=mcpSchemaFetcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcpSchemaFetcher.js","sourceRoot":"","sources":["../../../src/utils/mcpSchemaFetcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Screenplay } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Convert text to screenplay (text with emotion)
|
|
4
|
+
* @param text Original text (may contain emotion expressions like [happy])
|
|
5
|
+
* @returns Screenplay object with emotion and text separated
|
|
6
|
+
*/
|
|
7
|
+
export declare function textToScreenplay(text: string): Screenplay;
|
|
8
|
+
/**
|
|
9
|
+
* Convert multiple texts to screenplay array
|
|
10
|
+
* @param texts Text array
|
|
11
|
+
* @returns Array of screenplay objects
|
|
12
|
+
*/
|
|
13
|
+
export declare function textsToScreenplay(texts: string[]): Screenplay[];
|
|
14
|
+
/**
|
|
15
|
+
* Convert screenplay to text with emotion
|
|
16
|
+
* @param screenplay Screenplay object
|
|
17
|
+
* @returns Text with emotion (e.g. [happy] Hello)
|
|
18
|
+
*/
|
|
19
|
+
export declare function screenplayToText(screenplay: Screenplay): string;
|
|
20
|
+
//# sourceMappingURL=screenplay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screenplay.d.ts","sourceRoot":"","sources":["../../../src/utils/screenplay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGtC;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAWzD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,CAE/D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAK/D"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { EmotionParser } from './emotionParser';
|
|
2
|
+
/**
|
|
3
|
+
* Convert text to screenplay (text with emotion)
|
|
4
|
+
* @param text Original text (may contain emotion expressions like [happy])
|
|
5
|
+
* @returns Screenplay object with emotion and text separated
|
|
6
|
+
*/
|
|
7
|
+
export function textToScreenplay(text) {
|
|
8
|
+
const { emotion, cleanText } = EmotionParser.extractEmotion(text);
|
|
9
|
+
if (emotion) {
|
|
10
|
+
return {
|
|
11
|
+
emotion,
|
|
12
|
+
text: cleanText,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
return { text: cleanText };
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Convert multiple texts to screenplay array
|
|
19
|
+
* @param texts Text array
|
|
20
|
+
* @returns Array of screenplay objects
|
|
21
|
+
*/
|
|
22
|
+
export function textsToScreenplay(texts) {
|
|
23
|
+
return texts.map((text) => textToScreenplay(text));
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Convert screenplay to text with emotion
|
|
27
|
+
* @param screenplay Screenplay object
|
|
28
|
+
* @returns Text with emotion (e.g. [happy] Hello)
|
|
29
|
+
*/
|
|
30
|
+
export function screenplayToText(screenplay) {
|
|
31
|
+
if (screenplay.emotion) {
|
|
32
|
+
return EmotionParser.addEmotionTag(screenplay.emotion, screenplay.text);
|
|
33
|
+
}
|
|
34
|
+
return screenplay.text;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=screenplay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screenplay.js","sourceRoot":"","sources":["../../../src/utils/screenplay.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAElE,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO;YACL,OAAO;YACP,IAAI,EAAE,SAAS;SAChB,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAC7B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAe;IAC/C,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;AACrD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAAsB;IACrD,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QACvB,OAAO,aAAa,CAAC,aAAa,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,UAAU,CAAC,IAAI,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ToolChatBlock } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Utility class for accumulating text in streaming chat responses
|
|
4
|
+
*/
|
|
5
|
+
export declare class StreamTextAccumulator {
|
|
6
|
+
/**
|
|
7
|
+
* Append text to the blocks array, merging with the last block if it's a text block
|
|
8
|
+
* @param blocks Array of chat blocks
|
|
9
|
+
* @param text Text to append
|
|
10
|
+
*/
|
|
11
|
+
static append(blocks: ToolChatBlock[], text: string): void;
|
|
12
|
+
/**
|
|
13
|
+
* Get the full concatenated text from all text blocks
|
|
14
|
+
* @param blocks Array of chat blocks
|
|
15
|
+
* @returns Concatenated text from all text blocks
|
|
16
|
+
*/
|
|
17
|
+
static getFullText(blocks: ToolChatBlock[]): string;
|
|
18
|
+
/**
|
|
19
|
+
* Add a text block without merging
|
|
20
|
+
* @param blocks Array of chat blocks
|
|
21
|
+
* @param text Text to add as a new block
|
|
22
|
+
*/
|
|
23
|
+
static addTextBlock(blocks: ToolChatBlock[], text: string): void;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=streamTextAccumulator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streamTextAccumulator.d.ts","sourceRoot":"","sources":["../../../src/utils/streamTextAccumulator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC;;GAEG;AACH,qBAAa,qBAAqB;IAChC;;;;OAIG;IACH,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAW1D;;;;OAIG;IACH,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM;IAUnD;;;;OAIG;IACH,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;CAIjE"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility class for accumulating text in streaming chat responses
|
|
3
|
+
*/
|
|
4
|
+
export class StreamTextAccumulator {
|
|
5
|
+
/**
|
|
6
|
+
* Append text to the blocks array, merging with the last block if it's a text block
|
|
7
|
+
* @param blocks Array of chat blocks
|
|
8
|
+
* @param text Text to append
|
|
9
|
+
*/
|
|
10
|
+
static append(blocks, text) {
|
|
11
|
+
if (!text)
|
|
12
|
+
return;
|
|
13
|
+
const lastBlock = blocks[blocks.length - 1];
|
|
14
|
+
if (lastBlock && lastBlock.type === 'text') {
|
|
15
|
+
lastBlock.text += text;
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
blocks.push({ type: 'text', text });
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Get the full concatenated text from all text blocks
|
|
23
|
+
* @param blocks Array of chat blocks
|
|
24
|
+
* @returns Concatenated text from all text blocks
|
|
25
|
+
*/
|
|
26
|
+
static getFullText(blocks) {
|
|
27
|
+
return blocks
|
|
28
|
+
.filter((block) => block.type === 'text')
|
|
29
|
+
.map((block) => block.text)
|
|
30
|
+
.join('');
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Add a text block without merging
|
|
34
|
+
* @param blocks Array of chat blocks
|
|
35
|
+
* @param text Text to add as a new block
|
|
36
|
+
*/
|
|
37
|
+
static addTextBlock(blocks, text) {
|
|
38
|
+
if (!text)
|
|
39
|
+
return;
|
|
40
|
+
blocks.push({ type: 'text', text });
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=streamTextAccumulator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streamTextAccumulator.js","sourceRoot":"","sources":["../../../src/utils/streamTextAccumulator.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,OAAO,qBAAqB;IAChC;;;;OAIG;IACH,MAAM,CAAC,MAAM,CAAC,MAAuB,EAAE,IAAY;QACjD,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC5C,IAAI,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC3C,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,WAAW,CAAC,MAAuB;QACxC,OAAO,MAAM;aACV,MAAM,CACL,CAAC,KAAK,EAA2C,EAAE,CACjD,KAAK,CAAC,IAAI,KAAK,MAAM,CACxB;aACA,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;aAC1B,IAAI,CAAC,EAAE,CAAC,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,YAAY,CAAC,MAAuB,EAAE,IAAY;QACvD,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;CACF"}
|
package/package.json
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@aituber-onair/chat",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Chat and LLM API integration library for AITuber OnAir",
|
|
5
|
+
"main": "dist/cjs/index.js",
|
|
6
|
+
"module": "dist/esm/index.js",
|
|
7
|
+
"types": "dist/cjs/index.d.ts",
|
|
8
|
+
"files": ["dist"],
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"import": "./dist/esm/index.js",
|
|
12
|
+
"require": "./dist/cjs/index.js",
|
|
13
|
+
"types": "./dist/cjs/index.d.ts"
|
|
14
|
+
},
|
|
15
|
+
"./dist/cjs/*": "./dist/cjs/*",
|
|
16
|
+
"./dist/esm/*": "./dist/esm/*"
|
|
17
|
+
},
|
|
18
|
+
"scripts": {
|
|
19
|
+
"build": "npm run clean && npm run build:cjs && npm run build:esm",
|
|
20
|
+
"build:cjs": "tsc --project tsconfig.cjs.json",
|
|
21
|
+
"build:esm": "tsc --project tsconfig.esm.json",
|
|
22
|
+
"clean": "rm -rf dist",
|
|
23
|
+
"typecheck": "tsc --noEmit",
|
|
24
|
+
"test": "npm run typecheck && vitest run",
|
|
25
|
+
"test:watch": "vitest",
|
|
26
|
+
"test:coverage": "vitest run --coverage",
|
|
27
|
+
"fmt": "biome format . --write",
|
|
28
|
+
"fmt:check": "biome format .",
|
|
29
|
+
"lint": "biome lint .",
|
|
30
|
+
"prepublishOnly": "npm run build"
|
|
31
|
+
},
|
|
32
|
+
"keywords": [
|
|
33
|
+
"aituber",
|
|
34
|
+
"vtuber",
|
|
35
|
+
"ai",
|
|
36
|
+
"chat",
|
|
37
|
+
"llm",
|
|
38
|
+
"openai",
|
|
39
|
+
"claude",
|
|
40
|
+
"gemini"
|
|
41
|
+
],
|
|
42
|
+
"author": "shinshin86 (https://github.com/shinshin86)",
|
|
43
|
+
"license": "MIT",
|
|
44
|
+
"devDependencies": {
|
|
45
|
+
"@biomejs/biome": "1.9.4",
|
|
46
|
+
"@types/node": "^18.15.0",
|
|
47
|
+
"@vitest/coverage-v8": "^1.3.1",
|
|
48
|
+
"typescript": "^5.0.0",
|
|
49
|
+
"vitest": "^1.3.1"
|
|
50
|
+
},
|
|
51
|
+
"publishConfig": {
|
|
52
|
+
"access": "public"
|
|
53
|
+
}
|
|
54
|
+
}
|