@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
package/README.ja.md
ADDED
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
# @aituber-onair/chat
|
|
2
|
+
|
|
3
|
+

|
|
4
|
+
|
|
5
|
+
AITuber OnAirのチャット・LLM API統合ライブラリです。このパッケージは、OpenAI、Claude、Gemini等の様々なAIチャットプロバイダーとやり取りするための統一されたインターフェースを提供します。
|
|
6
|
+
|
|
7
|
+
## 機能
|
|
8
|
+
|
|
9
|
+
- 🤖 **複数のAIプロバイダー対応**: OpenAI、Claude (Anthropic)、Google Gemini
|
|
10
|
+
- 🔄 **統一されたインターフェース**: 異なるプロバイダー間での一貫したAPI
|
|
11
|
+
- 🛠️ **ツール・関数呼び出し**: AI関数呼び出しの自動反復処理をサポート
|
|
12
|
+
- 💬 **ストリーミングレスポンス**: リアルタイムストリーミングチャット応答
|
|
13
|
+
- 🖼️ **ビジョン対応**: ビジョン対応モデルでの画像処理
|
|
14
|
+
- 📝 **感情検出**: AI応答からの感情抽出
|
|
15
|
+
- 🎯 **応答長制御**: プリセットまたはカスタムトークン制限での応答長設定
|
|
16
|
+
- 🔌 **Model Context Protocol (MCP)**: MCP サーバーサポート
|
|
17
|
+
|
|
18
|
+
## インストール
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npm install @aituber-onair/chat
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## 使用方法
|
|
25
|
+
|
|
26
|
+
### 基本的なチャット
|
|
27
|
+
|
|
28
|
+
```typescript
|
|
29
|
+
import { ChatServiceFactory, ChatServiceOptions } from '@aituber-onair/chat';
|
|
30
|
+
|
|
31
|
+
// チャットサービスを作成
|
|
32
|
+
const options: ChatServiceOptions = {
|
|
33
|
+
apiKey: 'your-api-key',
|
|
34
|
+
model: 'gpt-4' // オプション、指定がない場合はプロバイダーのデフォルトを使用
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
const chatService = ChatServiceFactory.createChatService('openai', options);
|
|
38
|
+
|
|
39
|
+
// シンプルなチャット処理
|
|
40
|
+
const messages = [
|
|
41
|
+
{ role: 'system', content: 'あなたは親切なアシスタントです。' },
|
|
42
|
+
{ role: 'user', content: 'こんにちは!元気ですか?' }
|
|
43
|
+
];
|
|
44
|
+
|
|
45
|
+
await chatService.processChat(
|
|
46
|
+
messages,
|
|
47
|
+
(partialText) => {
|
|
48
|
+
// ストリーミング応答を処理
|
|
49
|
+
console.log('部分:', partialText);
|
|
50
|
+
},
|
|
51
|
+
async (completeText) => {
|
|
52
|
+
// 完全な応答を処理
|
|
53
|
+
console.log('完了:', completeText);
|
|
54
|
+
}
|
|
55
|
+
);
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### プロバイダー別の使用方法
|
|
59
|
+
|
|
60
|
+
#### OpenAI
|
|
61
|
+
|
|
62
|
+
```typescript
|
|
63
|
+
const openaiService = ChatServiceFactory.createChatService('openai', {
|
|
64
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
65
|
+
model: 'gpt-4-turbo-preview',
|
|
66
|
+
endpoint: 'chat/completions' // o1シリーズモデルの場合は 'responses'
|
|
67
|
+
});
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
#### Claude (Anthropic)
|
|
71
|
+
|
|
72
|
+
```typescript
|
|
73
|
+
const claudeService = ChatServiceFactory.createChatService('claude', {
|
|
74
|
+
apiKey: process.env.ANTHROPIC_API_KEY,
|
|
75
|
+
model: 'claude-3-opus-20240229'
|
|
76
|
+
});
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
#### Google Gemini
|
|
80
|
+
|
|
81
|
+
```typescript
|
|
82
|
+
const geminiService = ChatServiceFactory.createChatService('gemini', {
|
|
83
|
+
apiKey: process.env.GOOGLE_API_KEY,
|
|
84
|
+
model: 'gemini-pro'
|
|
85
|
+
});
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### ビジョンチャット
|
|
89
|
+
|
|
90
|
+
```typescript
|
|
91
|
+
const visionMessage = {
|
|
92
|
+
role: 'user',
|
|
93
|
+
content: [
|
|
94
|
+
{ type: 'text', text: 'この画像に何が見えますか?' },
|
|
95
|
+
{
|
|
96
|
+
type: 'image_url',
|
|
97
|
+
image_url: {
|
|
98
|
+
url: 'data:image/jpeg;base64,...', // または https:// URL
|
|
99
|
+
detail: 'low' // 'low', 'high', または 'auto'
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
]
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
await chatService.processVisionChat(
|
|
106
|
+
[visionMessage],
|
|
107
|
+
(partial) => console.log(partial),
|
|
108
|
+
async (complete) => console.log(complete)
|
|
109
|
+
);
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### ツール・関数呼び出し
|
|
113
|
+
|
|
114
|
+
```typescript
|
|
115
|
+
import { ToolDefinition } from '@aituber-onair/chat';
|
|
116
|
+
|
|
117
|
+
const tools: ToolDefinition[] = [{
|
|
118
|
+
name: 'get_weather',
|
|
119
|
+
description: '指定された場所の現在の天気を取得',
|
|
120
|
+
parameters: {
|
|
121
|
+
type: 'object',
|
|
122
|
+
properties: {
|
|
123
|
+
location: { type: 'string', description: '都市名' }
|
|
124
|
+
},
|
|
125
|
+
required: ['location']
|
|
126
|
+
}
|
|
127
|
+
}];
|
|
128
|
+
|
|
129
|
+
// ツール呼び出しはチャットサービスによって自動的に処理されます
|
|
130
|
+
// サービス作成時にツールハンドラーを設定してください
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### 応答長制御
|
|
134
|
+
|
|
135
|
+
```typescript
|
|
136
|
+
// プリセット応答長を使用
|
|
137
|
+
const service = ChatServiceFactory.createChatService('openai', {
|
|
138
|
+
apiKey: 'your-key',
|
|
139
|
+
responseLength: 'medium' // 'veryShort', 'short', 'medium', 'long', 'veryLong'
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
// カスタムトークン制限を使用
|
|
143
|
+
const service = ChatServiceFactory.createChatService('openai', {
|
|
144
|
+
apiKey: 'your-key',
|
|
145
|
+
maxTokens: 500 // 直接トークン制限
|
|
146
|
+
});
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### Model Context Protocol (MCP)
|
|
150
|
+
|
|
151
|
+
チャットパッケージは全てのプロバイダーでMCP(Model Context Protocol)サーバーをサポートしており、異なる実装アプローチを採用しています:
|
|
152
|
+
|
|
153
|
+
#### プロバイダー別MCP実装
|
|
154
|
+
|
|
155
|
+
**OpenAI & Claude**: 直接MCP統合
|
|
156
|
+
- プロバイダーのネイティブMCPサポートを使用(OpenAIのResponses API)
|
|
157
|
+
- サーバー間通信(CORSの問題なし)
|
|
158
|
+
- MCPサーバーへの直接接続
|
|
159
|
+
|
|
160
|
+
**Gemini**: 関数呼び出し統合
|
|
161
|
+
- MCPツールがGeminiの関数宣言として登録
|
|
162
|
+
- ToolExecutorがMCPサーバー通信を処理
|
|
163
|
+
- ブラウザ環境ではCORS設定が必要
|
|
164
|
+
|
|
165
|
+
#### 基本的な使用方法
|
|
166
|
+
|
|
167
|
+
```typescript
|
|
168
|
+
// MCPサーバーは全てのプロバイダー(OpenAI、Claude、Gemini)で動作
|
|
169
|
+
const mcpServers = [{
|
|
170
|
+
type: 'url',
|
|
171
|
+
url: 'http://localhost:3000',
|
|
172
|
+
name: 'local-server',
|
|
173
|
+
authorization_token: 'optional-token'
|
|
174
|
+
}];
|
|
175
|
+
|
|
176
|
+
// OpenAI/Claude - 直接MCP統合
|
|
177
|
+
const openaiService = ChatServiceFactory.createChatService('openai', {
|
|
178
|
+
apiKey: 'your-key',
|
|
179
|
+
mcpServers // Responses API経由で直接統合
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
// Gemini - 関数呼び出し経由でMCP
|
|
183
|
+
const geminiService = ChatServiceFactory.createChatService('gemini', {
|
|
184
|
+
apiKey: 'your-key',
|
|
185
|
+
mcpServers // 関数宣言として統合
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
// MCPツールは自動的に利用可能になり、ToolExecutorによって処理されます
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
#### Gemini固有のCORS設定
|
|
192
|
+
|
|
193
|
+
ブラウザ環境でGeminiをMCPと一緒に使用する場合、CORSの問題を回避するためにプロキシを設定する必要があります:
|
|
194
|
+
|
|
195
|
+
**Vite開発設定** (`vite.config.ts`):
|
|
196
|
+
```typescript
|
|
197
|
+
export default defineConfig({
|
|
198
|
+
server: {
|
|
199
|
+
proxy: {
|
|
200
|
+
'/api/mcp': {
|
|
201
|
+
target: 'https://mcp.deepwiki.com',
|
|
202
|
+
changeOrigin: true,
|
|
203
|
+
rewrite: (path) => path.replace(/^\/api\/mcp/, ''),
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
})
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
**動的MCPサーバー設定**:
|
|
211
|
+
```typescript
|
|
212
|
+
// プロバイダー別MCPサーバー設定
|
|
213
|
+
const getMcpServers = (provider: string): MCPServerConfig[] => {
|
|
214
|
+
const baseUrl = provider === 'gemini'
|
|
215
|
+
? '/api/mcp/sse' // Gemini用プロキシURL(ブラウザ)
|
|
216
|
+
: 'https://mcp.deepwiki.com/sse'; // OpenAI/Claude用直接URL
|
|
217
|
+
|
|
218
|
+
return [{
|
|
219
|
+
type: 'url',
|
|
220
|
+
url: baseUrl,
|
|
221
|
+
name: 'deepwiki',
|
|
222
|
+
}];
|
|
223
|
+
};
|
|
224
|
+
|
|
225
|
+
// チャットサービス作成で使用
|
|
226
|
+
const mcpServers = getMcpServers(chatProvider);
|
|
227
|
+
const chatService = ChatServiceFactory.createChatService(chatProvider, {
|
|
228
|
+
apiKey: 'your-api-key',
|
|
229
|
+
mcpServers
|
|
230
|
+
});
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
#### エラーハンドリング・タイムアウト
|
|
234
|
+
|
|
235
|
+
Gemini MCP実装には堅牢なエラーハンドリングが含まれています:
|
|
236
|
+
- MCPスキーマ取得に5秒のタイムアウト
|
|
237
|
+
- MCPサーバーが利用できない場合の基本検索ツールへの自動フォールバック
|
|
238
|
+
- MCP初期化が失敗した場合の優雅な劣化
|
|
239
|
+
|
|
240
|
+
### 感情検出
|
|
241
|
+
|
|
242
|
+
```typescript
|
|
243
|
+
import { textToScreenplay } from '@aituber-onair/chat';
|
|
244
|
+
|
|
245
|
+
const text = "[happy] お会いできて嬉しいです!";
|
|
246
|
+
const screenplay = textToScreenplay(text);
|
|
247
|
+
console.log(screenplay); // { emotion: 'happy', text: "お会いできて嬉しいです!" }
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
## API リファレンス
|
|
251
|
+
|
|
252
|
+
### ChatService インターフェース
|
|
253
|
+
|
|
254
|
+
```typescript
|
|
255
|
+
interface ChatService {
|
|
256
|
+
getModel(): string;
|
|
257
|
+
getVisionModel(): string;
|
|
258
|
+
|
|
259
|
+
processChat(
|
|
260
|
+
messages: Message[],
|
|
261
|
+
onPartialResponse: (text: string) => void,
|
|
262
|
+
onCompleteResponse: (text: string) => Promise<void>
|
|
263
|
+
): Promise<void>;
|
|
264
|
+
|
|
265
|
+
processVisionChat(
|
|
266
|
+
messages: MessageWithVision[],
|
|
267
|
+
onPartialResponse: (text: string) => void,
|
|
268
|
+
onCompleteResponse: (text: string) => Promise<void>
|
|
269
|
+
): Promise<void>;
|
|
270
|
+
|
|
271
|
+
chatOnce(
|
|
272
|
+
messages: Message[],
|
|
273
|
+
stream: boolean,
|
|
274
|
+
onPartialResponse: (text: string) => void,
|
|
275
|
+
maxTokens?: number
|
|
276
|
+
): Promise<ToolChatCompletion>;
|
|
277
|
+
|
|
278
|
+
visionChatOnce(
|
|
279
|
+
messages: MessageWithVision[],
|
|
280
|
+
stream: boolean,
|
|
281
|
+
onPartialResponse: (text: string) => void,
|
|
282
|
+
maxTokens?: number
|
|
283
|
+
): Promise<ToolChatCompletion>;
|
|
284
|
+
}
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
### 型定義
|
|
288
|
+
|
|
289
|
+
```typescript
|
|
290
|
+
interface Message {
|
|
291
|
+
role: 'system' | 'user' | 'assistant' | 'tool';
|
|
292
|
+
content: string;
|
|
293
|
+
timestamp?: number;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
interface MessageWithVision {
|
|
297
|
+
role: 'system' | 'user' | 'assistant' | 'tool';
|
|
298
|
+
content: string | VisionBlock[];
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
type ChatResponseLength = 'veryShort' | 'short' | 'medium' | 'long' | 'veryLong';
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
## 利用可能なプロバイダー
|
|
305
|
+
|
|
306
|
+
現在、以下のAIプロバイダーが組み込まれています:
|
|
307
|
+
|
|
308
|
+
- **OpenAI**: GPT-4.1(miniとnanoを含む), GPT-4, GPT-4o-mini, O3-mini, o1, o1-miniのモデルをサポート
|
|
309
|
+
- **Gemini**: Gemini 2.5 Pro, Gemini 2.5 Flash, Gemini 2.5 Flash Lite Preview, Gemini 2.0 Flash, Gemini 2.0 Flash-Lite, Gemini 1.5 Flash, Gemini 1.5 Proのモデルをサポート
|
|
310
|
+
- **Claude**: Claude 3 Haiku, Claude 3.5 Haiku, Claude 3.5 Sonnet v2, Claude 3.7 Sonnetのモデルをサポート
|
|
311
|
+
|
|
312
|
+
## ライセンス
|
|
313
|
+
|
|
314
|
+
MIT
|
|
315
|
+
|
|
316
|
+
## 貢献
|
|
317
|
+
|
|
318
|
+
貢献を歓迎します!プルリクエストをお気軽にご提出ください。
|
package/README.md
ADDED
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
# @aituber-onair/chat
|
|
2
|
+
|
|
3
|
+

|
|
4
|
+
|
|
5
|
+
Chat and LLM API integration library for AITuber OnAir. This package provides a unified interface for interacting with various AI chat providers including OpenAI, Claude, and Gemini.
|
|
6
|
+
|
|
7
|
+
## Features
|
|
8
|
+
|
|
9
|
+
- 🤖 **Multiple AI Provider Support**: OpenAI, Claude (Anthropic), and Google Gemini
|
|
10
|
+
- 🔄 **Unified Interface**: Consistent API across different providers
|
|
11
|
+
- 🛠️ **Tool/Function Calling**: Support for AI function calling with automatic iteration
|
|
12
|
+
- 💬 **Streaming Responses**: Real-time streaming chat responses
|
|
13
|
+
- 🖼️ **Vision Support**: Process images with vision-enabled models
|
|
14
|
+
- 📝 **Emotion Detection**: Extract emotions from AI responses
|
|
15
|
+
- 🎯 **Response Length Control**: Configure response lengths with presets or custom token limits
|
|
16
|
+
- 🔌 **Model Context Protocol (MCP)**: Support for MCP servers
|
|
17
|
+
|
|
18
|
+
## Installation
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npm install @aituber-onair/chat
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Usage
|
|
25
|
+
|
|
26
|
+
### Basic Chat
|
|
27
|
+
|
|
28
|
+
```typescript
|
|
29
|
+
import { ChatServiceFactory, ChatServiceOptions } from '@aituber-onair/chat';
|
|
30
|
+
|
|
31
|
+
// Create a chat service
|
|
32
|
+
const options: ChatServiceOptions = {
|
|
33
|
+
apiKey: 'your-api-key',
|
|
34
|
+
model: 'gpt-4' // optional, uses provider default if not specified
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
const chatService = ChatServiceFactory.createChatService('openai', options);
|
|
38
|
+
|
|
39
|
+
// Process a simple chat
|
|
40
|
+
const messages = [
|
|
41
|
+
{ role: 'system', content: 'You are a helpful assistant.' },
|
|
42
|
+
{ role: 'user', content: 'Hello! How are you?' }
|
|
43
|
+
];
|
|
44
|
+
|
|
45
|
+
await chatService.processChat(
|
|
46
|
+
messages,
|
|
47
|
+
(partialText) => {
|
|
48
|
+
// Handle streaming response
|
|
49
|
+
console.log('Partial:', partialText);
|
|
50
|
+
},
|
|
51
|
+
async (completeText) => {
|
|
52
|
+
// Handle complete response
|
|
53
|
+
console.log('Complete:', completeText);
|
|
54
|
+
}
|
|
55
|
+
);
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Provider-Specific Usage
|
|
59
|
+
|
|
60
|
+
#### OpenAI
|
|
61
|
+
|
|
62
|
+
```typescript
|
|
63
|
+
const openaiService = ChatServiceFactory.createChatService('openai', {
|
|
64
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
65
|
+
model: 'gpt-4-turbo-preview',
|
|
66
|
+
endpoint: 'chat/completions' // or 'responses' for o1 series models
|
|
67
|
+
});
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
#### Claude (Anthropic)
|
|
71
|
+
|
|
72
|
+
```typescript
|
|
73
|
+
const claudeService = ChatServiceFactory.createChatService('claude', {
|
|
74
|
+
apiKey: process.env.ANTHROPIC_API_KEY,
|
|
75
|
+
model: 'claude-3-opus-20240229'
|
|
76
|
+
});
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
#### Google Gemini
|
|
80
|
+
|
|
81
|
+
```typescript
|
|
82
|
+
const geminiService = ChatServiceFactory.createChatService('gemini', {
|
|
83
|
+
apiKey: process.env.GOOGLE_API_KEY,
|
|
84
|
+
model: 'gemini-pro'
|
|
85
|
+
});
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Vision Chat
|
|
89
|
+
|
|
90
|
+
```typescript
|
|
91
|
+
const visionMessage = {
|
|
92
|
+
role: 'user',
|
|
93
|
+
content: [
|
|
94
|
+
{ type: 'text', text: 'What do you see in this image?' },
|
|
95
|
+
{
|
|
96
|
+
type: 'image_url',
|
|
97
|
+
image_url: {
|
|
98
|
+
url: 'data:image/jpeg;base64,...', // or https:// URL
|
|
99
|
+
detail: 'low' // 'low', 'high', or 'auto'
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
]
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
await chatService.processVisionChat(
|
|
106
|
+
[visionMessage],
|
|
107
|
+
(partial) => console.log(partial),
|
|
108
|
+
async (complete) => console.log(complete)
|
|
109
|
+
);
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### Tool/Function Calling
|
|
113
|
+
|
|
114
|
+
```typescript
|
|
115
|
+
import { ToolDefinition } from '@aituber-onair/chat';
|
|
116
|
+
|
|
117
|
+
const tools: ToolDefinition[] = [{
|
|
118
|
+
name: 'get_weather',
|
|
119
|
+
description: 'Get the current weather for a location',
|
|
120
|
+
parameters: {
|
|
121
|
+
type: 'object',
|
|
122
|
+
properties: {
|
|
123
|
+
location: { type: 'string', description: 'City name' }
|
|
124
|
+
},
|
|
125
|
+
required: ['location']
|
|
126
|
+
}
|
|
127
|
+
}];
|
|
128
|
+
|
|
129
|
+
// Tool calling is handled automatically by the chat service
|
|
130
|
+
// Configure tool handlers when creating the service
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### Response Length Control
|
|
134
|
+
|
|
135
|
+
```typescript
|
|
136
|
+
// Using preset response lengths
|
|
137
|
+
const service = ChatServiceFactory.createChatService('openai', {
|
|
138
|
+
apiKey: 'your-key',
|
|
139
|
+
responseLength: 'medium' // 'veryShort', 'short', 'medium', 'long', 'veryLong'
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
// Using custom token limits
|
|
143
|
+
const service = ChatServiceFactory.createChatService('openai', {
|
|
144
|
+
apiKey: 'your-key',
|
|
145
|
+
maxTokens: 500 // Direct token limit
|
|
146
|
+
});
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### Model Context Protocol (MCP)
|
|
150
|
+
|
|
151
|
+
The chat package supports MCP (Model Context Protocol) servers across all providers, with different implementation approaches:
|
|
152
|
+
|
|
153
|
+
#### Provider-Specific MCP Implementation
|
|
154
|
+
|
|
155
|
+
**OpenAI & Claude**: Direct MCP Integration
|
|
156
|
+
- Uses provider's native MCP support (Responses API for OpenAI)
|
|
157
|
+
- Server-to-server communication (no CORS issues)
|
|
158
|
+
- Direct connection to MCP servers
|
|
159
|
+
|
|
160
|
+
**Gemini**: Function Calling Integration
|
|
161
|
+
- MCP tools are registered as Gemini function declarations
|
|
162
|
+
- ToolExecutor handles MCP server communication
|
|
163
|
+
- Requires CORS configuration in browser environments
|
|
164
|
+
|
|
165
|
+
#### Basic Usage
|
|
166
|
+
|
|
167
|
+
```typescript
|
|
168
|
+
// MCP servers work with all providers (OpenAI, Claude, Gemini)
|
|
169
|
+
const mcpServers = [{
|
|
170
|
+
type: 'url',
|
|
171
|
+
url: 'http://localhost:3000',
|
|
172
|
+
name: 'local-server',
|
|
173
|
+
authorization_token: 'optional-token'
|
|
174
|
+
}];
|
|
175
|
+
|
|
176
|
+
// OpenAI/Claude - direct MCP integration
|
|
177
|
+
const openaiService = ChatServiceFactory.createChatService('openai', {
|
|
178
|
+
apiKey: 'your-key',
|
|
179
|
+
mcpServers // Direct integration via Responses API
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
// Gemini - MCP via function calling
|
|
183
|
+
const geminiService = ChatServiceFactory.createChatService('gemini', {
|
|
184
|
+
apiKey: 'your-key',
|
|
185
|
+
mcpServers // Integrated as function declarations
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
// MCP tools are automatically available and handled by ToolExecutor
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
#### Gemini-Specific CORS Configuration
|
|
192
|
+
|
|
193
|
+
When using Gemini with MCP in browser environments, you need to configure a proxy to avoid CORS issues:
|
|
194
|
+
|
|
195
|
+
**Vite Development Setup** (`vite.config.ts`):
|
|
196
|
+
```typescript
|
|
197
|
+
export default defineConfig({
|
|
198
|
+
server: {
|
|
199
|
+
proxy: {
|
|
200
|
+
'/api/mcp': {
|
|
201
|
+
target: 'https://mcp.deepwiki.com',
|
|
202
|
+
changeOrigin: true,
|
|
203
|
+
rewrite: (path) => path.replace(/^\/api\/mcp/, ''),
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
})
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
**Dynamic MCP URL Configuration**:
|
|
211
|
+
```typescript
|
|
212
|
+
// Provider-specific MCP server configuration
|
|
213
|
+
const getMcpServers = (provider: string): MCPServerConfig[] => {
|
|
214
|
+
const baseUrl = provider === 'gemini'
|
|
215
|
+
? '/api/mcp/sse' // Proxy URL for Gemini (browser)
|
|
216
|
+
: 'https://mcp.deepwiki.com/sse'; // Direct URL for OpenAI/Claude
|
|
217
|
+
|
|
218
|
+
return [{
|
|
219
|
+
type: 'url',
|
|
220
|
+
url: baseUrl,
|
|
221
|
+
name: 'deepwiki',
|
|
222
|
+
}];
|
|
223
|
+
};
|
|
224
|
+
|
|
225
|
+
// Use in chat service creation
|
|
226
|
+
const mcpServers = getMcpServers(chatProvider);
|
|
227
|
+
const chatService = ChatServiceFactory.createChatService(chatProvider, {
|
|
228
|
+
apiKey: 'your-api-key',
|
|
229
|
+
mcpServers
|
|
230
|
+
});
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
#### Error Handling & Timeouts
|
|
234
|
+
|
|
235
|
+
The Gemini MCP implementation includes robust error handling:
|
|
236
|
+
- 5-second timeout for MCP schema fetching
|
|
237
|
+
- Automatic fallback to basic search tools if MCP servers are unavailable
|
|
238
|
+
- Graceful degradation when MCP initialization fails
|
|
239
|
+
|
|
240
|
+
### Emotion Detection
|
|
241
|
+
|
|
242
|
+
```typescript
|
|
243
|
+
import { textToScreenplay } from '@aituber-onair/chat';
|
|
244
|
+
|
|
245
|
+
const text = "[happy] I'm so glad to see you!";
|
|
246
|
+
const screenplay = textToScreenplay(text);
|
|
247
|
+
console.log(screenplay); // { emotion: 'happy', text: "I'm so glad to see you!" }
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
## API Reference
|
|
251
|
+
|
|
252
|
+
### ChatService Interface
|
|
253
|
+
|
|
254
|
+
```typescript
|
|
255
|
+
interface ChatService {
|
|
256
|
+
getModel(): string;
|
|
257
|
+
getVisionModel(): string;
|
|
258
|
+
|
|
259
|
+
processChat(
|
|
260
|
+
messages: Message[],
|
|
261
|
+
onPartialResponse: (text: string) => void,
|
|
262
|
+
onCompleteResponse: (text: string) => Promise<void>
|
|
263
|
+
): Promise<void>;
|
|
264
|
+
|
|
265
|
+
processVisionChat(
|
|
266
|
+
messages: MessageWithVision[],
|
|
267
|
+
onPartialResponse: (text: string) => void,
|
|
268
|
+
onCompleteResponse: (text: string) => Promise<void>
|
|
269
|
+
): Promise<void>;
|
|
270
|
+
|
|
271
|
+
chatOnce(
|
|
272
|
+
messages: Message[],
|
|
273
|
+
stream: boolean,
|
|
274
|
+
onPartialResponse: (text: string) => void,
|
|
275
|
+
maxTokens?: number
|
|
276
|
+
): Promise<ToolChatCompletion>;
|
|
277
|
+
|
|
278
|
+
visionChatOnce(
|
|
279
|
+
messages: MessageWithVision[],
|
|
280
|
+
stream: boolean,
|
|
281
|
+
onPartialResponse: (text: string) => void,
|
|
282
|
+
maxTokens?: number
|
|
283
|
+
): Promise<ToolChatCompletion>;
|
|
284
|
+
}
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
### Types
|
|
288
|
+
|
|
289
|
+
```typescript
|
|
290
|
+
interface Message {
|
|
291
|
+
role: 'system' | 'user' | 'assistant' | 'tool';
|
|
292
|
+
content: string;
|
|
293
|
+
timestamp?: number;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
interface MessageWithVision {
|
|
297
|
+
role: 'system' | 'user' | 'assistant' | 'tool';
|
|
298
|
+
content: string | VisionBlock[];
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
type ChatResponseLength = 'veryShort' | 'short' | 'medium' | 'long' | 'veryLong';
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
## Available Providers
|
|
305
|
+
|
|
306
|
+
Currently, the following AI provider is built-in:
|
|
307
|
+
|
|
308
|
+
- **OpenAI**: Supports models like GPT-4.1(including mini and nano), GPT-4, GPT-4o-mini, O3-mini, o1, o1-mini
|
|
309
|
+
- **Gemini**: Supports models like Gemini 2.5 Pro, Gemini 2.5 Flash, Gemini 2.5 Flash Lite Preview, Gemini 2.0 Flash, Gemini 2.0 Flash-Lite, Gemini 1.5 Flash, Gemini 1.5 Pro
|
|
310
|
+
- **Claude**: Supports models like Claude 3 Haiku, Claude 3.5 Haiku, Claude 3.5 Sonnet v2, Claude 3.7 Sonnet
|
|
311
|
+
|
|
312
|
+
## License
|
|
313
|
+
|
|
314
|
+
MIT
|
|
315
|
+
|
|
316
|
+
## Contributing
|
|
317
|
+
|
|
318
|
+
Contributions are welcome! Please feel free to submit a Pull Request.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export declare const CHAT_RESPONSE_LENGTH: {
|
|
2
|
+
readonly VERY_SHORT: "veryShort";
|
|
3
|
+
readonly SHORT: "short";
|
|
4
|
+
readonly MEDIUM: "medium";
|
|
5
|
+
readonly LONG: "long";
|
|
6
|
+
readonly VERY_LONG: "veryLong";
|
|
7
|
+
};
|
|
8
|
+
export declare const MAX_TOKENS_BY_LENGTH: {
|
|
9
|
+
readonly veryShort: 40;
|
|
10
|
+
readonly short: 100;
|
|
11
|
+
readonly medium: 200;
|
|
12
|
+
readonly long: 300;
|
|
13
|
+
readonly veryLong: 1000;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Default max tokens for AI providers when not specified
|
|
17
|
+
*/
|
|
18
|
+
export declare const DEFAULT_MAX_TOKENS = 1000;
|
|
19
|
+
export type ChatResponseLength = (typeof CHAT_RESPONSE_LENGTH)[keyof typeof CHAT_RESPONSE_LENGTH];
|
|
20
|
+
/**
|
|
21
|
+
* Converts a ChatResponseLength to the corresponding max_tokens value
|
|
22
|
+
* @param responseLength - The response length setting
|
|
23
|
+
* @returns The max_tokens value, or DEFAULT_MAX_TOKENS if responseLength is not provided
|
|
24
|
+
*/
|
|
25
|
+
export declare function getMaxTokensForResponseLength(responseLength?: ChatResponseLength): number;
|
|
26
|
+
//# sourceMappingURL=chat.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_MAX_TOKENS = exports.MAX_TOKENS_BY_LENGTH = exports.CHAT_RESPONSE_LENGTH = void 0;
|
|
4
|
+
exports.getMaxTokensForResponseLength = getMaxTokensForResponseLength;
|
|
5
|
+
exports.CHAT_RESPONSE_LENGTH = {
|
|
6
|
+
VERY_SHORT: 'veryShort',
|
|
7
|
+
SHORT: 'short',
|
|
8
|
+
MEDIUM: 'medium',
|
|
9
|
+
LONG: 'long',
|
|
10
|
+
VERY_LONG: 'veryLong',
|
|
11
|
+
};
|
|
12
|
+
exports.MAX_TOKENS_BY_LENGTH = {
|
|
13
|
+
[exports.CHAT_RESPONSE_LENGTH.VERY_SHORT]: 40,
|
|
14
|
+
[exports.CHAT_RESPONSE_LENGTH.SHORT]: 100,
|
|
15
|
+
[exports.CHAT_RESPONSE_LENGTH.MEDIUM]: 200,
|
|
16
|
+
[exports.CHAT_RESPONSE_LENGTH.LONG]: 300,
|
|
17
|
+
[exports.CHAT_RESPONSE_LENGTH.VERY_LONG]: 1000,
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Default max tokens for AI providers when not specified
|
|
21
|
+
*/
|
|
22
|
+
exports.DEFAULT_MAX_TOKENS = 1000;
|
|
23
|
+
/**
|
|
24
|
+
* Converts a ChatResponseLength to the corresponding max_tokens value
|
|
25
|
+
* @param responseLength - The response length setting
|
|
26
|
+
* @returns The max_tokens value, or DEFAULT_MAX_TOKENS if responseLength is not provided
|
|
27
|
+
*/
|
|
28
|
+
function getMaxTokensForResponseLength(responseLength) {
|
|
29
|
+
if (!responseLength) {
|
|
30
|
+
return exports.DEFAULT_MAX_TOKENS;
|
|
31
|
+
}
|
|
32
|
+
return exports.MAX_TOKENS_BY_LENGTH[responseLength] ?? exports.DEFAULT_MAX_TOKENS;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=chat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../../src/constants/chat.ts"],"names":[],"mappings":";;;AA6BA,sEAOC;AApCY,QAAA,oBAAoB,GAAG;IAClC,UAAU,EAAE,WAAW;IACvB,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;IACZ,SAAS,EAAE,UAAU;CACb,CAAC;AAEE,QAAA,oBAAoB,GAAG;IAClC,CAAC,4BAAoB,CAAC,UAAU,CAAC,EAAE,EAAE;IACrC,CAAC,4BAAoB,CAAC,KAAK,CAAC,EAAE,GAAG;IACjC,CAAC,4BAAoB,CAAC,MAAM,CAAC,EAAE,GAAG;IAClC,CAAC,4BAAoB,CAAC,IAAI,CAAC,EAAE,GAAG;IAChC,CAAC,4BAAoB,CAAC,SAAS,CAAC,EAAE,IAAI;CAC9B,CAAC;AAEX;;GAEG;AACU,QAAA,kBAAkB,GAAG,IAAI,CAAC;AAKvC;;;;GAIG;AACH,SAAgB,6BAA6B,CAC3C,cAAmC;IAEnC,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,0BAAkB,CAAC;IAC5B,CAAC;IACD,OAAO,4BAAoB,CAAC,cAAc,CAAC,IAAI,0BAAkB,CAAC;AACpE,CAAC"}
|