@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.
Files changed (211) hide show
  1. package/README.ja.md +318 -0
  2. package/README.md +318 -0
  3. package/dist/cjs/constants/chat.d.ts +26 -0
  4. package/dist/cjs/constants/chat.d.ts.map +1 -0
  5. package/dist/cjs/constants/chat.js +34 -0
  6. package/dist/cjs/constants/chat.js.map +1 -0
  7. package/dist/cjs/constants/claude.d.ts +9 -0
  8. package/dist/cjs/constants/claude.d.ts.map +1 -0
  9. package/dist/cjs/constants/claude.js +20 -0
  10. package/dist/cjs/constants/claude.js.map +1 -0
  11. package/dist/cjs/constants/gemini.d.ts +11 -0
  12. package/dist/cjs/constants/gemini.d.ts.map +1 -0
  13. package/dist/cjs/constants/gemini.js +26 -0
  14. package/dist/cjs/constants/gemini.js.map +1 -0
  15. package/dist/cjs/constants/index.d.ts +9 -0
  16. package/dist/cjs/constants/index.d.ts.map +1 -0
  17. package/dist/cjs/constants/index.js +25 -0
  18. package/dist/cjs/constants/index.js.map +1 -0
  19. package/dist/cjs/constants/openai.d.ts +13 -0
  20. package/dist/cjs/constants/openai.d.ts.map +1 -0
  21. package/dist/cjs/constants/openai.js +28 -0
  22. package/dist/cjs/constants/openai.js.map +1 -0
  23. package/dist/cjs/constants/prompts.d.ts +3 -0
  24. package/dist/cjs/constants/prompts.d.ts.map +1 -0
  25. package/dist/cjs/constants/prompts.js +16 -0
  26. package/dist/cjs/constants/prompts.js.map +1 -0
  27. package/dist/cjs/index.d.ts +17 -0
  28. package/dist/cjs/index.d.ts.map +1 -0
  29. package/dist/cjs/index.js +45 -0
  30. package/dist/cjs/index.js.map +1 -0
  31. package/dist/cjs/services/ChatService.d.ts +51 -0
  32. package/dist/cjs/services/ChatService.d.ts.map +1 -0
  33. package/dist/cjs/services/ChatService.js +3 -0
  34. package/dist/cjs/services/ChatService.js.map +1 -0
  35. package/dist/cjs/services/ChatServiceFactory.d.ts +39 -0
  36. package/dist/cjs/services/ChatServiceFactory.d.ts.map +1 -0
  37. package/dist/cjs/services/ChatServiceFactory.js +65 -0
  38. package/dist/cjs/services/ChatServiceFactory.js.map +1 -0
  39. package/dist/cjs/services/providers/ChatServiceProvider.d.ts +52 -0
  40. package/dist/cjs/services/providers/ChatServiceProvider.d.ts.map +1 -0
  41. package/dist/cjs/services/providers/ChatServiceProvider.js +3 -0
  42. package/dist/cjs/services/providers/ChatServiceProvider.js.map +1 -0
  43. package/dist/cjs/services/providers/claude/ClaudeChatService.d.ts +142 -0
  44. package/dist/cjs/services/providers/claude/ClaudeChatService.d.ts.map +1 -0
  45. package/dist/cjs/services/providers/claude/ClaudeChatService.js +501 -0
  46. package/dist/cjs/services/providers/claude/ClaudeChatService.js.map +1 -0
  47. package/dist/cjs/services/providers/claude/ClaudeChatServiceProvider.d.ts +40 -0
  48. package/dist/cjs/services/providers/claude/ClaudeChatServiceProvider.d.ts.map +1 -0
  49. package/dist/cjs/services/providers/claude/ClaudeChatServiceProvider.js +68 -0
  50. package/dist/cjs/services/providers/claude/ClaudeChatServiceProvider.js.map +1 -0
  51. package/dist/cjs/services/providers/gemini/GeminiChatService.d.ts +104 -0
  52. package/dist/cjs/services/providers/gemini/GeminiChatService.d.ts.map +1 -0
  53. package/dist/cjs/services/providers/gemini/GeminiChatService.js +653 -0
  54. package/dist/cjs/services/providers/gemini/GeminiChatService.js.map +1 -0
  55. package/dist/cjs/services/providers/gemini/GeminiChatServiceProvider.d.ts +40 -0
  56. package/dist/cjs/services/providers/gemini/GeminiChatServiceProvider.d.ts.map +1 -0
  57. package/dist/cjs/services/providers/gemini/GeminiChatServiceProvider.js +70 -0
  58. package/dist/cjs/services/providers/gemini/GeminiChatServiceProvider.js.map +1 -0
  59. package/dist/cjs/services/providers/openai/OpenAIChatService.d.ts +110 -0
  60. package/dist/cjs/services/providers/openai/OpenAIChatService.d.ts.map +1 -0
  61. package/dist/cjs/services/providers/openai/OpenAIChatService.js +544 -0
  62. package/dist/cjs/services/providers/openai/OpenAIChatService.js.map +1 -0
  63. package/dist/cjs/services/providers/openai/OpenAIChatServiceProvider.d.ts +40 -0
  64. package/dist/cjs/services/providers/openai/OpenAIChatServiceProvider.d.ts.map +1 -0
  65. package/dist/cjs/services/providers/openai/OpenAIChatServiceProvider.js +80 -0
  66. package/dist/cjs/services/providers/openai/OpenAIChatServiceProvider.js.map +1 -0
  67. package/dist/cjs/types/chat.d.ts +46 -0
  68. package/dist/cjs/types/chat.d.ts.map +1 -0
  69. package/dist/cjs/types/chat.js +6 -0
  70. package/dist/cjs/types/chat.js.map +1 -0
  71. package/dist/cjs/types/index.d.ts +8 -0
  72. package/dist/cjs/types/index.d.ts.map +1 -0
  73. package/dist/cjs/types/index.js +25 -0
  74. package/dist/cjs/types/index.js.map +1 -0
  75. package/dist/cjs/types/mcp.d.ts +37 -0
  76. package/dist/cjs/types/mcp.d.ts.map +1 -0
  77. package/dist/cjs/types/mcp.js +6 -0
  78. package/dist/cjs/types/mcp.js.map +1 -0
  79. package/dist/cjs/types/toolChat.d.ts +42 -0
  80. package/dist/cjs/types/toolChat.d.ts.map +1 -0
  81. package/dist/cjs/types/toolChat.js +3 -0
  82. package/dist/cjs/types/toolChat.js.map +1 -0
  83. package/dist/cjs/utils/chatServiceHttpClient.d.ts +47 -0
  84. package/dist/cjs/utils/chatServiceHttpClient.d.ts.map +1 -0
  85. package/dist/cjs/utils/chatServiceHttpClient.js +131 -0
  86. package/dist/cjs/utils/chatServiceHttpClient.js.map +1 -0
  87. package/dist/cjs/utils/emotionParser.d.ts +46 -0
  88. package/dist/cjs/utils/emotionParser.d.ts.map +1 -0
  89. package/dist/cjs/utils/emotionParser.js +59 -0
  90. package/dist/cjs/utils/emotionParser.js.map +1 -0
  91. package/dist/cjs/utils/index.d.ts +8 -0
  92. package/dist/cjs/utils/index.d.ts.map +1 -0
  93. package/dist/cjs/utils/index.js +24 -0
  94. package/dist/cjs/utils/index.js.map +1 -0
  95. package/dist/cjs/utils/mcpSchemaFetcher.d.ts +19 -0
  96. package/dist/cjs/utils/mcpSchemaFetcher.d.ts.map +1 -0
  97. package/dist/cjs/utils/mcpSchemaFetcher.js +98 -0
  98. package/dist/cjs/utils/mcpSchemaFetcher.js.map +1 -0
  99. package/dist/cjs/utils/screenplay.d.ts +20 -0
  100. package/dist/cjs/utils/screenplay.d.ts.map +1 -0
  101. package/dist/cjs/utils/screenplay.js +41 -0
  102. package/dist/cjs/utils/screenplay.js.map +1 -0
  103. package/dist/cjs/utils/streamTextAccumulator.d.ts +25 -0
  104. package/dist/cjs/utils/streamTextAccumulator.d.ts.map +1 -0
  105. package/dist/cjs/utils/streamTextAccumulator.js +47 -0
  106. package/dist/cjs/utils/streamTextAccumulator.js.map +1 -0
  107. package/dist/esm/constants/chat.d.ts +26 -0
  108. package/dist/esm/constants/chat.d.ts.map +1 -0
  109. package/dist/esm/constants/chat.js +30 -0
  110. package/dist/esm/constants/chat.js.map +1 -0
  111. package/dist/esm/constants/claude.d.ts +9 -0
  112. package/dist/esm/constants/claude.d.ts.map +1 -0
  113. package/dist/esm/constants/claude.js +17 -0
  114. package/dist/esm/constants/claude.js.map +1 -0
  115. package/dist/esm/constants/gemini.d.ts +11 -0
  116. package/dist/esm/constants/gemini.d.ts.map +1 -0
  117. package/dist/esm/constants/gemini.js +23 -0
  118. package/dist/esm/constants/gemini.js.map +1 -0
  119. package/dist/esm/constants/index.d.ts +9 -0
  120. package/dist/esm/constants/index.d.ts.map +1 -0
  121. package/dist/esm/constants/index.js +9 -0
  122. package/dist/esm/constants/index.js.map +1 -0
  123. package/dist/esm/constants/openai.d.ts +13 -0
  124. package/dist/esm/constants/openai.d.ts.map +1 -0
  125. package/dist/esm/constants/openai.js +25 -0
  126. package/dist/esm/constants/openai.js.map +1 -0
  127. package/dist/esm/constants/prompts.d.ts +3 -0
  128. package/dist/esm/constants/prompts.d.ts.map +1 -0
  129. package/dist/esm/constants/prompts.js +13 -0
  130. package/dist/esm/constants/prompts.js.map +1 -0
  131. package/dist/esm/index.d.ts +17 -0
  132. package/dist/esm/index.d.ts.map +1 -0
  133. package/dist/esm/index.js +21 -0
  134. package/dist/esm/index.js.map +1 -0
  135. package/dist/esm/services/ChatService.d.ts +51 -0
  136. package/dist/esm/services/ChatService.d.ts.map +1 -0
  137. package/dist/esm/services/ChatService.js +2 -0
  138. package/dist/esm/services/ChatService.js.map +1 -0
  139. package/dist/esm/services/ChatServiceFactory.d.ts +39 -0
  140. package/dist/esm/services/ChatServiceFactory.d.ts.map +1 -0
  141. package/dist/esm/services/ChatServiceFactory.js +61 -0
  142. package/dist/esm/services/ChatServiceFactory.js.map +1 -0
  143. package/dist/esm/services/providers/ChatServiceProvider.d.ts +52 -0
  144. package/dist/esm/services/providers/ChatServiceProvider.d.ts.map +1 -0
  145. package/dist/esm/services/providers/ChatServiceProvider.js +2 -0
  146. package/dist/esm/services/providers/ChatServiceProvider.js.map +1 -0
  147. package/dist/esm/services/providers/claude/ClaudeChatService.d.ts +142 -0
  148. package/dist/esm/services/providers/claude/ClaudeChatService.d.ts.map +1 -0
  149. package/dist/esm/services/providers/claude/ClaudeChatService.js +497 -0
  150. package/dist/esm/services/providers/claude/ClaudeChatService.js.map +1 -0
  151. package/dist/esm/services/providers/claude/ClaudeChatServiceProvider.d.ts +40 -0
  152. package/dist/esm/services/providers/claude/ClaudeChatServiceProvider.d.ts.map +1 -0
  153. package/dist/esm/services/providers/claude/ClaudeChatServiceProvider.js +64 -0
  154. package/dist/esm/services/providers/claude/ClaudeChatServiceProvider.js.map +1 -0
  155. package/dist/esm/services/providers/gemini/GeminiChatService.d.ts +104 -0
  156. package/dist/esm/services/providers/gemini/GeminiChatService.d.ts.map +1 -0
  157. package/dist/esm/services/providers/gemini/GeminiChatService.js +649 -0
  158. package/dist/esm/services/providers/gemini/GeminiChatService.js.map +1 -0
  159. package/dist/esm/services/providers/gemini/GeminiChatServiceProvider.d.ts +40 -0
  160. package/dist/esm/services/providers/gemini/GeminiChatServiceProvider.d.ts.map +1 -0
  161. package/dist/esm/services/providers/gemini/GeminiChatServiceProvider.js +66 -0
  162. package/dist/esm/services/providers/gemini/GeminiChatServiceProvider.js.map +1 -0
  163. package/dist/esm/services/providers/openai/OpenAIChatService.d.ts +110 -0
  164. package/dist/esm/services/providers/openai/OpenAIChatService.d.ts.map +1 -0
  165. package/dist/esm/services/providers/openai/OpenAIChatService.js +540 -0
  166. package/dist/esm/services/providers/openai/OpenAIChatService.js.map +1 -0
  167. package/dist/esm/services/providers/openai/OpenAIChatServiceProvider.d.ts +40 -0
  168. package/dist/esm/services/providers/openai/OpenAIChatServiceProvider.d.ts.map +1 -0
  169. package/dist/esm/services/providers/openai/OpenAIChatServiceProvider.js +76 -0
  170. package/dist/esm/services/providers/openai/OpenAIChatServiceProvider.js.map +1 -0
  171. package/dist/esm/types/chat.d.ts +46 -0
  172. package/dist/esm/types/chat.d.ts.map +1 -0
  173. package/dist/esm/types/chat.js +5 -0
  174. package/dist/esm/types/chat.js.map +1 -0
  175. package/dist/esm/types/index.d.ts +8 -0
  176. package/dist/esm/types/index.d.ts.map +1 -0
  177. package/dist/esm/types/index.js +9 -0
  178. package/dist/esm/types/index.js.map +1 -0
  179. package/dist/esm/types/mcp.d.ts +37 -0
  180. package/dist/esm/types/mcp.d.ts.map +1 -0
  181. package/dist/esm/types/mcp.js +5 -0
  182. package/dist/esm/types/mcp.js.map +1 -0
  183. package/dist/esm/types/toolChat.d.ts +42 -0
  184. package/dist/esm/types/toolChat.d.ts.map +1 -0
  185. package/dist/esm/types/toolChat.js +2 -0
  186. package/dist/esm/types/toolChat.js.map +1 -0
  187. package/dist/esm/utils/chatServiceHttpClient.d.ts +47 -0
  188. package/dist/esm/utils/chatServiceHttpClient.d.ts.map +1 -0
  189. package/dist/esm/utils/chatServiceHttpClient.js +126 -0
  190. package/dist/esm/utils/chatServiceHttpClient.js.map +1 -0
  191. package/dist/esm/utils/emotionParser.d.ts +46 -0
  192. package/dist/esm/utils/emotionParser.d.ts.map +1 -0
  193. package/dist/esm/utils/emotionParser.js +55 -0
  194. package/dist/esm/utils/emotionParser.js.map +1 -0
  195. package/dist/esm/utils/index.d.ts +8 -0
  196. package/dist/esm/utils/index.d.ts.map +1 -0
  197. package/dist/esm/utils/index.js +8 -0
  198. package/dist/esm/utils/index.js.map +1 -0
  199. package/dist/esm/utils/mcpSchemaFetcher.d.ts +19 -0
  200. package/dist/esm/utils/mcpSchemaFetcher.d.ts.map +1 -0
  201. package/dist/esm/utils/mcpSchemaFetcher.js +94 -0
  202. package/dist/esm/utils/mcpSchemaFetcher.js.map +1 -0
  203. package/dist/esm/utils/screenplay.d.ts +20 -0
  204. package/dist/esm/utils/screenplay.d.ts.map +1 -0
  205. package/dist/esm/utils/screenplay.js +36 -0
  206. package/dist/esm/utils/screenplay.js.map +1 -0
  207. package/dist/esm/utils/streamTextAccumulator.d.ts +25 -0
  208. package/dist/esm/utils/streamTextAccumulator.d.ts.map +1 -0
  209. package/dist/esm/utils/streamTextAccumulator.js +43 -0
  210. package/dist/esm/utils/streamTextAccumulator.js.map +1 -0
  211. package/package.json +54 -0
@@ -0,0 +1,142 @@
1
+ import { ChatService } from '../../ChatService';
2
+ import { Message, MessageWithVision, ToolChatCompletion, ToolDefinition, MCPServerConfig } from '../../../types';
3
+ import { ChatResponseLength } from '../../../constants/chat';
4
+ export interface ClaudeToolResultBlock {
5
+ type: 'tool_result';
6
+ tool_use_id: string;
7
+ content: string;
8
+ }
9
+ /**
10
+ * Claude implementation of ChatService
11
+ */
12
+ export declare class ClaudeChatService implements ChatService {
13
+ /** Provider name */
14
+ readonly provider: string;
15
+ private apiKey;
16
+ private model;
17
+ private visionModel;
18
+ private tools;
19
+ private mcpServers;
20
+ private responseLength?;
21
+ /**
22
+ * Constructor
23
+ * @param apiKey Anthropic API key
24
+ * @param model Name of the model to use
25
+ * @param visionModel Name of the vision model
26
+ * @param tools Array of tool definitions
27
+ * @param mcpServers Array of MCP server configurations (optional)
28
+ * @throws Error if the vision model doesn't support vision capabilities
29
+ */
30
+ constructor(apiKey: string, model?: string, visionModel?: string, tools?: ToolDefinition[], mcpServers?: MCPServerConfig[], responseLength?: ChatResponseLength);
31
+ /**
32
+ * Get the current model name
33
+ * @returns Model name
34
+ */
35
+ getModel(): string;
36
+ /**
37
+ * Get the current vision model name
38
+ * @returns Vision model name
39
+ */
40
+ getVisionModel(): string;
41
+ /**
42
+ * Get configured MCP servers
43
+ * @returns Array of MCP server configurations
44
+ */
45
+ getMCPServers(): MCPServerConfig[];
46
+ /**
47
+ * Add MCP server configuration
48
+ * @param serverConfig MCP server configuration
49
+ */
50
+ addMCPServer(serverConfig: MCPServerConfig): void;
51
+ /**
52
+ * Remove MCP server by name
53
+ * @param serverName Name of the server to remove
54
+ */
55
+ removeMCPServer(serverName: string): void;
56
+ /**
57
+ * Check if MCP servers are configured
58
+ * @returns True if MCP servers are configured
59
+ */
60
+ hasMCPServers(): boolean;
61
+ /**
62
+ * Process chat messages
63
+ * @param messages Array of messages to send
64
+ * @param onPartialResponse Callback to receive each part of streaming response
65
+ * @param onCompleteResponse Callback to execute when response is complete
66
+ */
67
+ processChat(messages: Message[], onPartialResponse: (text: string) => void, onCompleteResponse: (text: string) => Promise<void>): Promise<void>;
68
+ /**
69
+ * Process chat messages with images
70
+ * @param messages Array of messages to send (including images)
71
+ * @param onPartialResponse Callback to receive each part of streaming response
72
+ * @param onCompleteResponse Callback to execute when response is complete
73
+ */
74
+ processVisionChat(messages: MessageWithVision[], onPartialResponse: (text: string) => void, onCompleteResponse: (text: string) => Promise<void>): Promise<void>;
75
+ /**
76
+ * Convert AITuber OnAir messages to Claude format
77
+ * @param messages Array of messages
78
+ * @returns Claude formatted messages
79
+ */
80
+ private convertMessagesToClaudeFormat;
81
+ /**
82
+ * Convert AITuber OnAir vision messages to Claude format
83
+ * @param messages Array of vision messages
84
+ * @returns Claude formatted vision messages
85
+ */
86
+ private convertVisionMessagesToClaudeFormat;
87
+ /**
88
+ * Map AITuber OnAir roles to Claude roles
89
+ * @param role AITuber OnAir role
90
+ * @returns Claude role
91
+ */
92
+ private mapRoleToClaude;
93
+ /**
94
+ * Get MIME type from URL
95
+ * @param url Image URL
96
+ * @returns MIME type
97
+ */
98
+ private getMimeTypeFromUrl;
99
+ /**
100
+ * Call Claude API
101
+ * @param messages Array of messages to send
102
+ * @param model Model name
103
+ * @param stream Whether to stream the response
104
+ * @param maxTokens Maximum tokens for response (optional)
105
+ * @returns Response
106
+ */
107
+ private callClaude;
108
+ /**
109
+ * Parse stream response
110
+ * @param res Response
111
+ * @param onPartial Callback to receive each part of streaming response
112
+ * @returns ClaudeInternalCompletion
113
+ */
114
+ private parseStream;
115
+ private parsePureStream;
116
+ private parseOneShot;
117
+ /**
118
+ * Process chat messages
119
+ * @param messages Array of messages to send
120
+ * @param stream Whether to stream the response
121
+ * @param onPartial Callback to receive each part of streaming response
122
+ * @param maxTokens Maximum tokens for response (optional)
123
+ * @returns ToolChatCompletion
124
+ */
125
+ chatOnce(messages: Message[], stream?: boolean, onPartial?: (t: string) => void, maxTokens?: number): Promise<ToolChatCompletion>;
126
+ /**
127
+ * Process vision chat messages
128
+ * @param messages Array of messages to send
129
+ * @param stream Whether to stream the response
130
+ * @param onPartial Callback to receive each part of streaming response
131
+ * @param maxTokens Maximum tokens for response (optional)
132
+ * @returns ToolChatCompletion
133
+ */
134
+ visionChatOnce(messages: MessageWithVision[], stream?: boolean, onPartial?: (t: string) => void, maxTokens?: number): Promise<ToolChatCompletion>;
135
+ /**
136
+ * Convert internal completion to standard ToolChatCompletion
137
+ * @param completion Internal completion result
138
+ * @returns Standard ToolChatCompletion
139
+ */
140
+ private convertToStandardCompletion;
141
+ }
142
+ //# sourceMappingURL=ClaudeChatService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClaudeChatService.d.ts","sourceRoot":"","sources":["../../../../../src/services/providers/claude/ClaudeChatService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAEL,OAAO,EACP,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,eAAe,EAGhB,MAAM,gBAAgB,CAAC;AAMxB,OAAO,EACL,kBAAkB,EAEnB,MAAM,yBAAyB,CAAC;AAGjC,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,aAAa,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAcD;;GAEG;AACH,qBAAa,iBAAkB,YAAW,WAAW;IACnD,oBAAoB;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAY;IAErC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,cAAc,CAAC,CAAqB;IAE5C;;;;;;;;OAQG;gBAED,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,MAA6B,EACpC,WAAW,GAAE,MAA6B,EAC1C,KAAK,GAAE,cAAc,EAAO,EAC5B,UAAU,GAAE,eAAe,EAAO,EAClC,cAAc,CAAC,EAAE,kBAAkB;IAiBrC;;;OAGG;IACH,QAAQ,IAAI,MAAM;IAIlB;;;OAGG;IACH,cAAc,IAAI,MAAM;IAIxB;;;OAGG;IACH,aAAa,IAAI,eAAe,EAAE;IAIlC;;;OAGG;IACH,YAAY,CAAC,YAAY,EAAE,eAAe,GAAG,IAAI;IAIjD;;;OAGG;IACH,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAMzC;;;OAGG;IACH,aAAa,IAAI,OAAO;IAIxB;;;;;OAKG;IACG,WAAW,CACf,QAAQ,EAAE,OAAO,EAAE,EACnB,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EACzC,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAClD,OAAO,CAAC,IAAI,CAAC;IA2BhB;;;;;OAKG;IACG,iBAAiB,CACrB,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EACzC,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAClD,OAAO,CAAC,IAAI,CAAC;IAyBhB;;;;OAIG;IACH,OAAO,CAAC,6BAA6B;IASrC;;;;OAIG;IACH,OAAO,CAAC,mCAAmC;IA+D3C;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAcvB;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAiB1B;;;;;;;OAOG;YACW,UAAU;IAmExB;;;;;OAKG;YACW,WAAW;YA4HX,eAAe;IAW7B,OAAO,CAAC,YAAY;IA+CpB;;;;;;;OAOG;IACG,QAAQ,CACZ,QAAQ,EAAE,OAAO,EAAE,EACnB,MAAM,GAAE,OAAc,EACtB,SAAS,GAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAe,EACzC,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,kBAAkB,CAAC;IAU9B;;;;;;;OAOG;IACG,cAAc,CAClB,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,MAAM,GAAE,OAAe,EACvB,SAAS,GAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAe,EACzC,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,kBAAkB,CAAC;IAe9B;;;;OAIG;IACH,OAAO,CAAC,2BAA2B;CAmBpC"}
@@ -0,0 +1,501 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ClaudeChatService = void 0;
4
+ const constants_1 = require("../../../constants");
5
+ const chat_1 = require("../../../constants/chat");
6
+ const chatServiceHttpClient_1 = require("../../../utils/chatServiceHttpClient");
7
+ /**
8
+ * Claude implementation of ChatService
9
+ */
10
+ class ClaudeChatService {
11
+ /**
12
+ * Constructor
13
+ * @param apiKey Anthropic API key
14
+ * @param model Name of the model to use
15
+ * @param visionModel Name of the vision model
16
+ * @param tools Array of tool definitions
17
+ * @param mcpServers Array of MCP server configurations (optional)
18
+ * @throws Error if the vision model doesn't support vision capabilities
19
+ */
20
+ constructor(apiKey, model = constants_1.MODEL_CLAUDE_3_HAIKU, visionModel = constants_1.MODEL_CLAUDE_3_HAIKU, tools = [], mcpServers = [], responseLength) {
21
+ /** Provider name */
22
+ this.provider = 'claude';
23
+ this.apiKey = apiKey;
24
+ this.model = model || constants_1.MODEL_CLAUDE_3_HAIKU;
25
+ this.visionModel = visionModel || constants_1.MODEL_CLAUDE_3_HAIKU;
26
+ this.tools = tools;
27
+ this.mcpServers = mcpServers;
28
+ this.responseLength = responseLength;
29
+ // Validate vision model supports vision capabilities
30
+ if (!constants_1.CLAUDE_VISION_SUPPORTED_MODELS.includes(this.visionModel)) {
31
+ throw new Error(`Model ${this.visionModel} does not support vision capabilities.`);
32
+ }
33
+ }
34
+ /**
35
+ * Get the current model name
36
+ * @returns Model name
37
+ */
38
+ getModel() {
39
+ return this.model;
40
+ }
41
+ /**
42
+ * Get the current vision model name
43
+ * @returns Vision model name
44
+ */
45
+ getVisionModel() {
46
+ return this.visionModel;
47
+ }
48
+ /**
49
+ * Get configured MCP servers
50
+ * @returns Array of MCP server configurations
51
+ */
52
+ getMCPServers() {
53
+ return this.mcpServers;
54
+ }
55
+ /**
56
+ * Add MCP server configuration
57
+ * @param serverConfig MCP server configuration
58
+ */
59
+ addMCPServer(serverConfig) {
60
+ this.mcpServers.push(serverConfig);
61
+ }
62
+ /**
63
+ * Remove MCP server by name
64
+ * @param serverName Name of the server to remove
65
+ */
66
+ removeMCPServer(serverName) {
67
+ this.mcpServers = this.mcpServers.filter((server) => server.name !== serverName);
68
+ }
69
+ /**
70
+ * Check if MCP servers are configured
71
+ * @returns True if MCP servers are configured
72
+ */
73
+ hasMCPServers() {
74
+ return this.mcpServers.length > 0;
75
+ }
76
+ /**
77
+ * Process chat messages
78
+ * @param messages Array of messages to send
79
+ * @param onPartialResponse Callback to receive each part of streaming response
80
+ * @param onCompleteResponse Callback to execute when response is complete
81
+ */
82
+ async processChat(messages, onPartialResponse, onCompleteResponse) {
83
+ // not use tools or MCP servers
84
+ if (this.tools.length === 0 && this.mcpServers.length === 0) {
85
+ const res = await this.callClaude(messages, this.model, true);
86
+ const full = await this.parsePureStream(res, onPartialResponse);
87
+ await onCompleteResponse(full);
88
+ return;
89
+ }
90
+ // use tools or MCP servers
91
+ const result = await this.chatOnce(messages, true, onPartialResponse);
92
+ if (result.stop_reason === 'end') {
93
+ const full = result.blocks
94
+ .filter((b) => b.type === 'text')
95
+ .map((b) => b.text)
96
+ .join('');
97
+ await onCompleteResponse(full);
98
+ return;
99
+ }
100
+ /* if tool_use, throw error */
101
+ throw new Error('processChat received tool_calls. ChatProcessor must use chatOnce() loop when tools are enabled.');
102
+ }
103
+ /**
104
+ * Process chat messages with images
105
+ * @param messages Array of messages to send (including images)
106
+ * @param onPartialResponse Callback to receive each part of streaming response
107
+ * @param onCompleteResponse Callback to execute when response is complete
108
+ */
109
+ async processVisionChat(messages, onPartialResponse, onCompleteResponse) {
110
+ /* same branch logic for vision */
111
+ if (this.tools.length === 0 && this.mcpServers.length === 0) {
112
+ const res = await this.callClaude(messages, this.visionModel, true);
113
+ const full = await this.parsePureStream(res, onPartialResponse);
114
+ await onCompleteResponse(full);
115
+ return;
116
+ }
117
+ const result = await this.visionChatOnce(messages); // non-stream (tools only)
118
+ if (result.stop_reason === 'end') {
119
+ const full = result.blocks
120
+ .filter((b) => b.type === 'text')
121
+ .map((b) => b.text)
122
+ .join('');
123
+ await onCompleteResponse(full);
124
+ return;
125
+ }
126
+ throw new Error('processVisionChat received tool_calls. ChatProcessor must use chatOnce() loop when tools are enabled.');
127
+ }
128
+ /**
129
+ * Convert AITuber OnAir messages to Claude format
130
+ * @param messages Array of messages
131
+ * @returns Claude formatted messages
132
+ */
133
+ convertMessagesToClaudeFormat(messages) {
134
+ return messages.map((msg) => {
135
+ return {
136
+ role: this.mapRoleToClaude(msg.role),
137
+ content: msg.content,
138
+ };
139
+ });
140
+ }
141
+ /**
142
+ * Convert AITuber OnAir vision messages to Claude format
143
+ * @param messages Array of vision messages
144
+ * @returns Claude formatted vision messages
145
+ */
146
+ convertVisionMessagesToClaudeFormat(messages) {
147
+ return messages.map((msg) => {
148
+ // If message content is a string, create a text-only message
149
+ if (typeof msg.content === 'string') {
150
+ return {
151
+ role: this.mapRoleToClaude(msg.role),
152
+ content: [
153
+ {
154
+ type: 'text',
155
+ text: msg.content,
156
+ },
157
+ ],
158
+ };
159
+ }
160
+ // If message content is an array of blocks, convert each block
161
+ if (Array.isArray(msg.content)) {
162
+ const content = msg.content
163
+ .map((block) => {
164
+ if (block.type === 'image_url') {
165
+ // check if the image url is a data url
166
+ if (block.image_url.url.startsWith('data:')) {
167
+ const m = block.image_url.url.match(/^data:([^;]+);base64,(.+)$/);
168
+ if (m) {
169
+ return {
170
+ type: 'image',
171
+ source: { type: 'base64', media_type: m[1], data: m[2] },
172
+ };
173
+ }
174
+ return null;
175
+ }
176
+ // if the image url is a normal url
177
+ return {
178
+ type: 'image',
179
+ source: {
180
+ type: 'url',
181
+ url: block.image_url.url,
182
+ media_type: this.getMimeTypeFromUrl(block.image_url.url),
183
+ },
184
+ };
185
+ }
186
+ return block;
187
+ })
188
+ .filter((b) => b);
189
+ return {
190
+ role: this.mapRoleToClaude(msg.role),
191
+ content,
192
+ };
193
+ }
194
+ return {
195
+ role: this.mapRoleToClaude(msg.role),
196
+ content: [],
197
+ };
198
+ });
199
+ }
200
+ /**
201
+ * Map AITuber OnAir roles to Claude roles
202
+ * @param role AITuber OnAir role
203
+ * @returns Claude role
204
+ */
205
+ mapRoleToClaude(role) {
206
+ switch (role) {
207
+ case 'system':
208
+ // Claude handles system messages separately, but we'll map it anyway
209
+ return 'system';
210
+ case 'user':
211
+ return 'user';
212
+ case 'assistant':
213
+ return 'assistant';
214
+ default:
215
+ return 'user';
216
+ }
217
+ }
218
+ /**
219
+ * Get MIME type from URL
220
+ * @param url Image URL
221
+ * @returns MIME type
222
+ */
223
+ getMimeTypeFromUrl(url) {
224
+ const extension = url.split('.').pop()?.toLowerCase();
225
+ switch (extension) {
226
+ case 'jpg':
227
+ case 'jpeg':
228
+ return 'image/jpeg';
229
+ case 'png':
230
+ return 'image/png';
231
+ case 'gif':
232
+ return 'image/gif';
233
+ case 'webp':
234
+ return 'image/webp';
235
+ default:
236
+ return 'image/jpeg';
237
+ }
238
+ }
239
+ /**
240
+ * Call Claude API
241
+ * @param messages Array of messages to send
242
+ * @param model Model name
243
+ * @param stream Whether to stream the response
244
+ * @param maxTokens Maximum tokens for response (optional)
245
+ * @returns Response
246
+ */
247
+ async callClaude(messages, model, stream, maxTokens) {
248
+ const system = messages.find((m) => m.role === 'system')?.content ?? '';
249
+ const content = messages.filter((m) => m.role !== 'system');
250
+ const hasVision = content.some((m) => Array.isArray(m.content) &&
251
+ m.content.some((b) => b.type === 'image_url' || b.type === 'image'));
252
+ const body = {
253
+ model,
254
+ system,
255
+ messages: hasVision
256
+ ? this.convertVisionMessagesToClaudeFormat(content)
257
+ : this.convertMessagesToClaudeFormat(content),
258
+ stream,
259
+ max_tokens: maxTokens !== undefined
260
+ ? maxTokens
261
+ : (0, chat_1.getMaxTokensForResponseLength)(this.responseLength),
262
+ };
263
+ if (this.tools.length) {
264
+ body.tools = this.tools.map((t) => ({
265
+ name: t.name,
266
+ description: t.description,
267
+ input_schema: t.parameters,
268
+ }));
269
+ body.tool_choice = { type: 'auto' };
270
+ }
271
+ // Add MCP servers if configured
272
+ if (this.mcpServers.length > 0) {
273
+ body.mcp_servers = this.mcpServers;
274
+ }
275
+ const headers = {
276
+ 'Content-Type': 'application/json',
277
+ 'x-api-key': this.apiKey,
278
+ 'anthropic-version': '2023-06-01',
279
+ 'anthropic-dangerous-direct-browser-access': 'true',
280
+ };
281
+ // Add beta header if MCP servers are configured
282
+ if (this.mcpServers.length > 0) {
283
+ headers['anthropic-beta'] = 'mcp-client-2025-04-04';
284
+ }
285
+ const res = await chatServiceHttpClient_1.ChatServiceHttpClient.post(constants_1.ENDPOINT_CLAUDE_API, body, headers);
286
+ return res;
287
+ }
288
+ /**
289
+ * Parse stream response
290
+ * @param res Response
291
+ * @param onPartial Callback to receive each part of streaming response
292
+ * @returns ClaudeInternalCompletion
293
+ */
294
+ async parseStream(res, onPartial) {
295
+ const reader = res.body.getReader();
296
+ const dec = new TextDecoder();
297
+ const textBlocks = [];
298
+ const toolCalls = new Map();
299
+ let buf = '';
300
+ while (true) {
301
+ const { done, value } = await reader.read();
302
+ if (done)
303
+ break;
304
+ buf += dec.decode(value, { stream: true });
305
+ let nl;
306
+ while ((nl = buf.indexOf('\n')) !== -1) {
307
+ const line = buf.slice(0, nl).trim();
308
+ buf = buf.slice(nl + 1);
309
+ if (!line.startsWith('data:'))
310
+ continue;
311
+ const payload = line.slice(5).trim();
312
+ if (payload === '[DONE]')
313
+ break;
314
+ const ev = JSON.parse(payload);
315
+ /* content delta */
316
+ if (ev.type === 'content_block_delta' && ev.delta?.text) {
317
+ onPartial(ev.delta.text);
318
+ textBlocks.push({ type: 'text', text: ev.delta.text });
319
+ }
320
+ /* tool_call delta */
321
+ if (ev.type === 'content_block_start' &&
322
+ ev.content_block?.type === 'tool_use') {
323
+ toolCalls.set(ev.index, {
324
+ id: ev.content_block.id,
325
+ name: ev.content_block.name,
326
+ args: '',
327
+ });
328
+ }
329
+ else if (ev.type === 'content_block_start' &&
330
+ ev.content_block?.type === 'mcp_tool_use') {
331
+ // Handle MCP tool use
332
+ toolCalls.set(ev.index, {
333
+ id: ev.content_block.id,
334
+ name: ev.content_block.name,
335
+ args: '',
336
+ server_name: ev.content_block.server_name,
337
+ });
338
+ }
339
+ else if (ev.type === 'content_block_start' && // case of non-stream
340
+ ev.content_block?.type === 'tool_result') {
341
+ textBlocks.push({
342
+ type: 'tool_result',
343
+ tool_use_id: ev.content_block.tool_use_id,
344
+ content: ev.content_block.content ?? '',
345
+ });
346
+ }
347
+ else if (ev.type === 'content_block_start' &&
348
+ ev.content_block?.type === 'mcp_tool_result') {
349
+ // Handle MCP tool result
350
+ textBlocks.push({
351
+ type: 'mcp_tool_result',
352
+ tool_use_id: ev.content_block.tool_use_id,
353
+ is_error: ev.content_block.is_error ?? false,
354
+ content: ev.content_block.content ?? [],
355
+ });
356
+ }
357
+ /* case of input_json_delta */
358
+ if (ev.type === 'content_block_delta' &&
359
+ ev.delta?.type === 'input_json_delta') {
360
+ const entry = toolCalls.get(ev.index);
361
+ if (entry)
362
+ entry.args += ev.delta.partial_json || '';
363
+ }
364
+ /* case of content_block_stop */
365
+ if (ev.type === 'content_block_stop' && toolCalls.has(ev.index)) {
366
+ const { id, name, args, server_name } = toolCalls.get(ev.index);
367
+ if (server_name) {
368
+ // MCP tool use
369
+ textBlocks.push({
370
+ type: 'mcp_tool_use',
371
+ id,
372
+ name,
373
+ server_name,
374
+ input: JSON.parse(args || '{}'),
375
+ });
376
+ }
377
+ else {
378
+ // Standard tool use
379
+ textBlocks.push({
380
+ type: 'tool_use',
381
+ id,
382
+ name,
383
+ input: JSON.parse(args || '{}'),
384
+ });
385
+ }
386
+ toolCalls.delete(ev.index);
387
+ }
388
+ }
389
+ }
390
+ return {
391
+ blocks: textBlocks,
392
+ stop_reason: textBlocks.some((b) => b.type === 'tool_use' || b.type === 'mcp_tool_use')
393
+ ? 'tool_use'
394
+ : 'end',
395
+ };
396
+ }
397
+ async parsePureStream(res, onPartial) {
398
+ const { blocks } = await this.parseStream(res, onPartial);
399
+ return blocks
400
+ .filter((b) => b.type === 'text')
401
+ .map((b) => b.text)
402
+ .join('');
403
+ }
404
+ parseOneShot(data) {
405
+ const blocks = [];
406
+ (data.content ?? []).forEach((c) => {
407
+ if (c.type === 'text') {
408
+ blocks.push({ type: 'text', text: c.text });
409
+ }
410
+ else if (c.type === 'tool_use') {
411
+ blocks.push({
412
+ type: 'tool_use',
413
+ id: c.id,
414
+ name: c.name,
415
+ input: c.input ?? {},
416
+ });
417
+ }
418
+ else if (c.type === 'mcp_tool_use') {
419
+ blocks.push({
420
+ type: 'mcp_tool_use',
421
+ id: c.id,
422
+ name: c.name,
423
+ server_name: c.server_name,
424
+ input: c.input ?? {},
425
+ });
426
+ }
427
+ else if (c.type === 'tool_result') {
428
+ blocks.push({
429
+ type: 'tool_result',
430
+ tool_use_id: c.tool_use_id,
431
+ content: c.content ?? '',
432
+ });
433
+ }
434
+ else if (c.type === 'mcp_tool_result') {
435
+ blocks.push({
436
+ type: 'mcp_tool_result',
437
+ tool_use_id: c.tool_use_id,
438
+ is_error: c.is_error ?? false,
439
+ content: c.content ?? [],
440
+ });
441
+ }
442
+ });
443
+ return {
444
+ blocks,
445
+ stop_reason: blocks.some((b) => b.type === 'tool_use' || b.type === 'mcp_tool_use')
446
+ ? 'tool_use'
447
+ : 'end',
448
+ };
449
+ }
450
+ /**
451
+ * Process chat messages
452
+ * @param messages Array of messages to send
453
+ * @param stream Whether to stream the response
454
+ * @param onPartial Callback to receive each part of streaming response
455
+ * @param maxTokens Maximum tokens for response (optional)
456
+ * @returns ToolChatCompletion
457
+ */
458
+ async chatOnce(messages, stream = true, onPartial = () => { }, maxTokens) {
459
+ const res = await this.callClaude(messages, this.model, stream, maxTokens);
460
+ const internalResult = stream
461
+ ? await this.parseStream(res, onPartial)
462
+ : this.parseOneShot(await res.json());
463
+ // Convert ClaudeInternalCompletion to ToolChatCompletion for compatibility
464
+ return this.convertToStandardCompletion(internalResult);
465
+ }
466
+ /**
467
+ * Process vision chat messages
468
+ * @param messages Array of messages to send
469
+ * @param stream Whether to stream the response
470
+ * @param onPartial Callback to receive each part of streaming response
471
+ * @param maxTokens Maximum tokens for response (optional)
472
+ * @returns ToolChatCompletion
473
+ */
474
+ async visionChatOnce(messages, stream = false, onPartial = () => { }, maxTokens) {
475
+ const res = await this.callClaude(messages, this.visionModel, stream, maxTokens);
476
+ const internalResult = stream
477
+ ? await this.parseStream(res, onPartial)
478
+ : this.parseOneShot(await res.json());
479
+ // Convert ClaudeInternalCompletion to ToolChatCompletion for compatibility
480
+ return this.convertToStandardCompletion(internalResult);
481
+ }
482
+ /**
483
+ * Convert internal completion to standard ToolChatCompletion
484
+ * @param completion Internal completion result
485
+ * @returns Standard ToolChatCompletion
486
+ */
487
+ convertToStandardCompletion(completion) {
488
+ // Filter out MCP-specific blocks and convert to standard format
489
+ const standardBlocks = completion.blocks.filter((block) => {
490
+ return (block.type === 'text' ||
491
+ block.type === 'tool_use' ||
492
+ block.type === 'tool_result');
493
+ });
494
+ return {
495
+ blocks: standardBlocks,
496
+ stop_reason: completion.stop_reason,
497
+ };
498
+ }
499
+ }
500
+ exports.ClaudeChatService = ClaudeChatService;
501
+ //# sourceMappingURL=ClaudeChatService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClaudeChatService.js","sourceRoot":"","sources":["../../../../../src/services/providers/claude/ClaudeChatService.ts"],"names":[],"mappings":"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"}