@aituber-onair/chat 0.23.0 → 0.24.1
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 +21 -2
- package/README.md +21 -2
- package/dist/cjs/constants/geminiNano.d.ts +6 -0
- package/dist/cjs/constants/geminiNano.d.ts.map +1 -0
- package/dist/cjs/constants/geminiNano.js +9 -0
- package/dist/cjs/constants/geminiNano.js.map +1 -0
- package/dist/cjs/constants/index.d.ts +1 -0
- package/dist/cjs/constants/index.d.ts.map +1 -1
- package/dist/cjs/constants/index.js +1 -0
- package/dist/cjs/constants/index.js.map +1 -1
- package/dist/cjs/index.d.ts +3 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +6 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/services/providers/ChatServiceProvider.d.ts +13 -0
- package/dist/cjs/services/providers/ChatServiceProvider.d.ts.map +1 -1
- package/dist/cjs/services/providers/geminiNano/GeminiNanoChatService.d.ts +37 -0
- package/dist/cjs/services/providers/geminiNano/GeminiNanoChatService.d.ts.map +1 -0
- package/dist/cjs/services/providers/geminiNano/GeminiNanoChatService.js +128 -0
- package/dist/cjs/services/providers/geminiNano/GeminiNanoChatService.js.map +1 -0
- package/dist/cjs/services/providers/geminiNano/GeminiNanoChatServiceProvider.d.ts +15 -0
- package/dist/cjs/services/providers/geminiNano/GeminiNanoChatServiceProvider.d.ts.map +1 -0
- package/dist/cjs/services/providers/geminiNano/GeminiNanoChatServiceProvider.js +35 -0
- package/dist/cjs/services/providers/geminiNano/GeminiNanoChatServiceProvider.js.map +1 -0
- package/dist/cjs/services/providers/index.d.ts +2 -1
- package/dist/cjs/services/providers/index.d.ts.map +1 -1
- package/dist/cjs/services/providers/index.js +2 -0
- package/dist/cjs/services/providers/index.js.map +1 -1
- package/dist/esm/constants/geminiNano.d.ts +6 -0
- package/dist/esm/constants/geminiNano.d.ts.map +1 -0
- package/dist/esm/constants/geminiNano.js +6 -0
- package/dist/esm/constants/geminiNano.js.map +1 -0
- package/dist/esm/constants/index.d.ts +1 -0
- package/dist/esm/constants/index.d.ts.map +1 -1
- package/dist/esm/constants/index.js +1 -0
- package/dist/esm/constants/index.js.map +1 -1
- package/dist/esm/index.d.ts +3 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +3 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/services/providers/ChatServiceProvider.d.ts +13 -0
- package/dist/esm/services/providers/ChatServiceProvider.d.ts.map +1 -1
- package/dist/esm/services/providers/geminiNano/GeminiNanoChatService.d.ts +37 -0
- package/dist/esm/services/providers/geminiNano/GeminiNanoChatService.d.ts.map +1 -0
- package/dist/esm/services/providers/geminiNano/GeminiNanoChatService.js +124 -0
- package/dist/esm/services/providers/geminiNano/GeminiNanoChatService.js.map +1 -0
- package/dist/esm/services/providers/geminiNano/GeminiNanoChatServiceProvider.d.ts +15 -0
- package/dist/esm/services/providers/geminiNano/GeminiNanoChatServiceProvider.d.ts.map +1 -0
- package/dist/esm/services/providers/geminiNano/GeminiNanoChatServiceProvider.js +31 -0
- package/dist/esm/services/providers/geminiNano/GeminiNanoChatServiceProvider.js.map +1 -0
- package/dist/esm/services/providers/index.d.ts +2 -1
- package/dist/esm/services/providers/index.d.ts.map +1 -1
- package/dist/esm/services/providers/index.js +2 -0
- package/dist/esm/services/providers/index.js.map +1 -1
- package/dist/umd/aituber-onair-chat.js +142 -0
- package/dist/umd/aituber-onair-chat.min.js +11 -6
- package/package.json +1 -1
package/dist/esm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,cAAc,SAAS,CAAC;AAGxB,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAGnE,YAAY,EACV,kBAAkB,EAClB,4BAA4B,EAC5B,gBAAgB,EAChB,wBAAwB,EACxB,kCAAkC,EAClC,4BAA4B,EAC5B,wBAAwB,EACxB,wBAAwB,EACxB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,0CAA0C,CAAC;AAGlD,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,EAAE,yBAAyB,EAAE,MAAM,uDAAuD,CAAC;AAClG,OAAO,EAAE,mCAAmC,EAAE,MAAM,2EAA2E,CAAC;AAGhI,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,EAAE,yBAAyB,EAAE,MAAM,uDAAuD,CAAC;AAGlG,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,EAAE,yBAAyB,EAAE,MAAM,uDAAuD,CAAC;AAGlG,OAAO,EAAE,qBAAqB,EAAE,MAAM,uDAAuD,CAAC;AAC9F,OAAO,EAAE,6BAA6B,EAAE,MAAM,+DAA+D,CAAC;AAG9G,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iDAAiD,CAAC;AAGzF,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iDAAiD,CAAC;AAGzF,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,mDAAmD,CAAC;AAG5F,cAAc,aAAa,CAAC;AAG5B,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,cAAc,SAAS,CAAC;AAGxB,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAGnE,YAAY,EACV,kBAAkB,EAClB,4BAA4B,EAC5B,gBAAgB,EAChB,wBAAwB,EACxB,kCAAkC,EAClC,4BAA4B,EAC5B,wBAAwB,EACxB,4BAA4B,EAC5B,wBAAwB,EACxB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,0CAA0C,CAAC;AAGlD,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,EAAE,yBAAyB,EAAE,MAAM,uDAAuD,CAAC;AAClG,OAAO,EAAE,mCAAmC,EAAE,MAAM,2EAA2E,CAAC;AAGhI,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,EAAE,yBAAyB,EAAE,MAAM,uDAAuD,CAAC;AAGlG,OAAO,EAAE,qBAAqB,EAAE,MAAM,uDAAuD,CAAC;AAC9F,OAAO,EAAE,6BAA6B,EAAE,MAAM,+DAA+D,CAAC;AAG9G,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,EAAE,yBAAyB,EAAE,MAAM,uDAAuD,CAAC;AAGlG,OAAO,EAAE,qBAAqB,EAAE,MAAM,uDAAuD,CAAC;AAC9F,OAAO,EAAE,6BAA6B,EAAE,MAAM,+DAA+D,CAAC;AAG9G,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iDAAiD,CAAC;AAGzF,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iDAAiD,CAAC;AAGzF,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,mDAAmD,CAAC;AAG5F,cAAc,aAAa,CAAC;AAG5B,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/esm/index.js
CHANGED
|
@@ -12,6 +12,9 @@ export { OpenAICompatibleChatServiceProvider } from './services/providers/openai
|
|
|
12
12
|
// Gemini provider exports
|
|
13
13
|
export { GeminiChatService } from './services/providers/gemini/GeminiChatService';
|
|
14
14
|
export { GeminiChatServiceProvider } from './services/providers/gemini/GeminiChatServiceProvider';
|
|
15
|
+
// Gemini Nano provider exports
|
|
16
|
+
export { GeminiNanoChatService } from './services/providers/geminiNano/GeminiNanoChatService';
|
|
17
|
+
export { GeminiNanoChatServiceProvider } from './services/providers/geminiNano/GeminiNanoChatServiceProvider';
|
|
15
18
|
// Claude provider exports
|
|
16
19
|
export { ClaudeChatService } from './services/providers/claude/ClaudeChatService';
|
|
17
20
|
export { ClaudeChatServiceProvider } from './services/providers/claude/ClaudeChatServiceProvider';
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,2BAA2B;AAC3B,cAAc,SAAS,CAAC;AAIxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,2BAA2B;AAC3B,cAAc,SAAS,CAAC;AAIxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAoBnE,0BAA0B;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,EAAE,yBAAyB,EAAE,MAAM,uDAAuD,CAAC;AAClG,OAAO,EAAE,mCAAmC,EAAE,MAAM,2EAA2E,CAAC;AAEhI,0BAA0B;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,EAAE,yBAAyB,EAAE,MAAM,uDAAuD,CAAC;AAElG,+BAA+B;AAC/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,uDAAuD,CAAC;AAC9F,OAAO,EAAE,6BAA6B,EAAE,MAAM,+DAA+D,CAAC;AAE9G,0BAA0B;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,EAAE,yBAAyB,EAAE,MAAM,uDAAuD,CAAC;AAElG,8BAA8B;AAC9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,uDAAuD,CAAC;AAC9F,OAAO,EAAE,6BAA6B,EAAE,MAAM,+DAA+D,CAAC;AAE9G,wBAAwB;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iDAAiD,CAAC;AAEzF,uBAAuB;AACvB,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iDAAiD,CAAC;AAEzF,wBAAwB;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,mDAAmD,CAAC;AAE5F,oBAAoB;AACpB,cAAc,aAAa,CAAC;AAE5B,kBAAkB;AAClB,cAAc,SAAS,CAAC;AAExB,WAAW;AACX,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -70,6 +70,18 @@ export type ClaudeChatServiceOptions = DisallowKeys<BaseChatServiceOptions, 'end
|
|
|
70
70
|
export type KimiChatServiceOptions = DisallowKeys<BaseChatServiceOptions, 'verbosity' | 'reasoning_effort' | 'gpt5Preset' | 'gpt5EndpointPreference' | 'enableReasoningSummary' | 'includeReasoning' | 'reasoningMaxTokens'>;
|
|
71
71
|
export type ZAIChatServiceOptions = DisallowKeys<BaseChatServiceOptions, 'verbosity' | 'reasoning_effort' | 'gpt5Preset' | 'gpt5EndpointPreference' | 'enableReasoningSummary' | 'includeReasoning' | 'reasoningMaxTokens' | 'baseUrl'>;
|
|
72
72
|
export type XAIChatServiceOptions = DisallowKeys<BaseChatServiceOptions, 'verbosity' | 'reasoning_effort' | 'gpt5Preset' | 'gpt5EndpointPreference' | 'enableReasoningSummary' | 'includeReasoning' | 'reasoningMaxTokens' | 'baseUrl' | 'thinking' | 'responseFormat'>;
|
|
73
|
+
export type GeminiNanoChatServiceOptions = {
|
|
74
|
+
/** API Key is not needed for Gemini Nano (browser built-in AI) */
|
|
75
|
+
apiKey?: never;
|
|
76
|
+
/** Model name (fixed to 'gemini-nano') */
|
|
77
|
+
model?: string;
|
|
78
|
+
/** Response length setting */
|
|
79
|
+
responseLength?: ChatResponseLength;
|
|
80
|
+
/** Expected input languages for the Prompt API (default: ['ja']) */
|
|
81
|
+
expectedInputLanguages?: string[];
|
|
82
|
+
/** Expected output languages for the Prompt API (default: ['ja']) */
|
|
83
|
+
expectedOutputLanguages?: string[];
|
|
84
|
+
};
|
|
73
85
|
export type ChatServiceOptions<TExtra extends Record<string, unknown> = Record<string, unknown>> = BaseChatServiceOptions & TExtra;
|
|
74
86
|
export type ChatServiceOptionsByProvider = {
|
|
75
87
|
openai: OpenAIChatServiceOptions;
|
|
@@ -80,6 +92,7 @@ export type ChatServiceOptionsByProvider = {
|
|
|
80
92
|
zai: ZAIChatServiceOptions;
|
|
81
93
|
xai: XAIChatServiceOptions;
|
|
82
94
|
kimi: KimiChatServiceOptions;
|
|
95
|
+
'gemini-nano': GeminiNanoChatServiceOptions;
|
|
83
96
|
};
|
|
84
97
|
export type ChatProviderName = keyof ChatServiceOptionsByProvider;
|
|
85
98
|
export type VisionSupportLevel = 'supported' | 'unsupported' | 'unknown';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatServiceProvider.d.ts","sourceRoot":"","sources":["../../../../src/services/providers/ChatServiceProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,cAAc;IACd,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,cAAc,CAAC,EAAE,kBAAkB,CAAC;IACpC,qDAAqD;IACrD,SAAS,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACtC,uFAAuF;IACvF,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IAC5E,2FAA2F;IAC3F,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,+IAA+I;IAC/I,sBAAsB,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IACvD,mGAAmG;IACnG,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,+FAA+F;IAC/F,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,+DAA+D;IAC/D,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oDAAoD;IACpD,cAAc,CAAC,EAAE;QACf,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,aAAa,CAAC;QAC7C,WAAW,CAAC,EAAE,GAAG,CAAC;KACnB,CAAC;IACF,6CAA6C;IAC7C,QAAQ,CAAC,EAAE;QACT,IAAI,EAAE,SAAS,GAAG,UAAU,CAAC;QAC7B,cAAc,CAAC,EAAE,OAAO,CAAC;KAC1B,CAAC;IACF,iDAAiD;IACjD,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;CAC1B;AAED,KAAK,YAAY,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;KACpD,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK;CACjB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,YAAY,CACjD,sBAAsB,EACtB,SAAS,GAAG,UAAU,GAAG,kBAAkB,GAAG,oBAAoB,CACnE,GAAG;IACF,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,kCAAkC,GAAG,IAAI,CACnD,wBAAwB,EACxB,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,YAAY,CAC/C,GAAG;IACF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,KAAK,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG,YAAY,CACrD,sBAAsB,EACpB,YAAY,GACZ,wBAAwB,GACxB,wBAAwB,GACxB,WAAW,GACX,SAAS,GACT,UAAU,GACV,gBAAgB,CACnB,GAAG;IACF,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,YAAY,CACjD,sBAAsB,EACpB,UAAU,GACV,SAAS,GACT,WAAW,GACX,kBAAkB,GAClB,YAAY,GACZ,wBAAwB,GACxB,wBAAwB,GACxB,kBAAkB,GAClB,oBAAoB,GACpB,gBAAgB,GAChB,UAAU,CACb,GAAG;IACF,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,YAAY,CACjD,sBAAsB,EACpB,UAAU,GACV,SAAS,GACT,WAAW,GACX,kBAAkB,GAClB,YAAY,GACZ,wBAAwB,GACxB,wBAAwB,GACxB,kBAAkB,GAClB,oBAAoB,GACpB,gBAAgB,GAChB,UAAU,CACb,GAAG;IACF,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,YAAY,CAC/C,sBAAsB,EACpB,WAAW,GACX,kBAAkB,GAClB,YAAY,GACZ,wBAAwB,GACxB,wBAAwB,GACxB,kBAAkB,GAClB,oBAAoB,CACvB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,YAAY,CAC9C,sBAAsB,EACpB,WAAW,GACX,kBAAkB,GAClB,YAAY,GACZ,wBAAwB,GACxB,wBAAwB,GACxB,kBAAkB,GAClB,oBAAoB,GACpB,SAAS,CACZ,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,YAAY,CAC9C,sBAAsB,EACpB,WAAW,GACX,kBAAkB,GAClB,YAAY,GACZ,wBAAwB,GACxB,wBAAwB,GACxB,kBAAkB,GAClB,oBAAoB,GACpB,SAAS,GACT,UAAU,GACV,gBAAgB,CACnB,CAAC;AAEF,MAAM,MAAM,kBAAkB,CAC5B,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAC9D,sBAAsB,GAAG,MAAM,CAAC;AAEpC,MAAM,MAAM,4BAA4B,GAAG;IACzC,MAAM,EAAE,wBAAwB,CAAC;IACjC,mBAAmB,EAAE,kCAAkC,CAAC;IACxD,UAAU,EAAE,4BAA4B,CAAC;IACzC,MAAM,EAAE,wBAAwB,CAAC;IACjC,MAAM,EAAE,wBAAwB,CAAC;IACjC,GAAG,EAAE,qBAAqB,CAAC;IAC3B,GAAG,EAAE,qBAAqB,CAAC;IAC3B,IAAI,EAAE,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"ChatServiceProvider.d.ts","sourceRoot":"","sources":["../../../../src/services/providers/ChatServiceProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { ChatService } from '../../ChatService';
|
|
2
|
+
import { Message, MessageWithVision } from '../../../types';
|
|
3
|
+
import { ToolChatCompletion } from '../../../types/toolChat';
|
|
4
|
+
import type { GeminiNanoChatServiceOptions } from '../ChatServiceProvider';
|
|
5
|
+
/**
|
|
6
|
+
* Gemini Nano implementation of ChatService.
|
|
7
|
+
* Uses Chrome's built-in LanguageModel API (Prompt API, Chrome 138+).
|
|
8
|
+
* Runs entirely in the browser — no API key or network required.
|
|
9
|
+
*/
|
|
10
|
+
export declare class GeminiNanoChatService implements ChatService {
|
|
11
|
+
readonly provider: string;
|
|
12
|
+
private expectedInputLanguages;
|
|
13
|
+
private expectedOutputLanguages;
|
|
14
|
+
private _responseLength?;
|
|
15
|
+
constructor(options?: GeminiNanoChatServiceOptions);
|
|
16
|
+
getModel(): string;
|
|
17
|
+
getVisionModel(): string;
|
|
18
|
+
/**
|
|
19
|
+
* Process chat messages using Gemini Nano.
|
|
20
|
+
* Non-streaming: calls onPartialResponse once with the full response,
|
|
21
|
+
* then calls onCompleteResponse.
|
|
22
|
+
*/
|
|
23
|
+
processChat(messages: Message[], onPartialResponse: (text: string) => void, onCompleteResponse: (text: string) => Promise<void>): Promise<void>;
|
|
24
|
+
processVisionChat(_messages: MessageWithVision[], _onPartialResponse: (text: string) => void, _onCompleteResponse: (text: string) => Promise<void>): Promise<void>;
|
|
25
|
+
chatOnce(messages: Message[], _stream?: boolean, onPartialResponse?: (text: string) => void, _maxTokens?: number): Promise<ToolChatCompletion>;
|
|
26
|
+
visionChatOnce(_messages: MessageWithVision[], _stream?: boolean, _onPartialResponse?: (text: string) => void, _maxTokens?: number): Promise<ToolChatCompletion>;
|
|
27
|
+
/**
|
|
28
|
+
* Core logic: extract system prompt, manage session, call prompt().
|
|
29
|
+
*/
|
|
30
|
+
private generateResponse;
|
|
31
|
+
/**
|
|
32
|
+
* Create a new LanguageModel session with system prompt and context history.
|
|
33
|
+
* Context history (excluding the last user message) is embedded in the system prompt.
|
|
34
|
+
*/
|
|
35
|
+
private createSession;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=GeminiNanoChatService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GeminiNanoChatService.d.ts","sourceRoot":"","sources":["../../../../../src/services/providers/geminiNano/GeminiNanoChatService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAM7D,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AA2B3E;;;;GAIG;AACH,qBAAa,qBAAsB,YAAW,WAAW;IACvD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAiB;IAE1C,OAAO,CAAC,sBAAsB,CAAW;IACzC,OAAO,CAAC,uBAAuB,CAAW;IAC1C,OAAO,CAAC,eAAe,CAAC,CAAqB;gBAEjC,OAAO,GAAE,4BAAiC;IAOtD,QAAQ,IAAI,MAAM;IAIlB,cAAc,IAAI,MAAM;IAIxB;;;;OAIG;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;IAMV,iBAAiB,CACrB,SAAS,EAAE,iBAAiB,EAAE,EAC9B,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAC1C,mBAAmB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GACnD,OAAO,CAAC,IAAI,CAAC;IAIV,QAAQ,CACZ,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,GAAE,OAAe,EACxB,iBAAiB,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAe,EACpD,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,kBAAkB,CAAC;IAUxB,cAAc,CAClB,SAAS,EAAE,iBAAiB,EAAE,EAC9B,OAAO,GAAE,OAAe,EACxB,kBAAkB,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAe,EACrD,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,kBAAkB,CAAC;IAI9B;;OAEG;YACW,gBAAgB;IAqD9B;;;OAGG;YACW,aAAa;CA4B5B"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { MODEL_GEMINI_NANO, GEMINI_NANO_MAX_CONTEXT_MESSAGES, } from '../../../constants/geminiNano';
|
|
2
|
+
/**
|
|
3
|
+
* Get the LanguageModel API from the global scope.
|
|
4
|
+
* Returns undefined in non-browser environments or unsupported browsers.
|
|
5
|
+
*/
|
|
6
|
+
function getLanguageModelAPI() {
|
|
7
|
+
if (typeof globalThis !== 'undefined' && 'LanguageModel' in globalThis) {
|
|
8
|
+
return globalThis.LanguageModel;
|
|
9
|
+
}
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Gemini Nano implementation of ChatService.
|
|
14
|
+
* Uses Chrome's built-in LanguageModel API (Prompt API, Chrome 138+).
|
|
15
|
+
* Runs entirely in the browser — no API key or network required.
|
|
16
|
+
*/
|
|
17
|
+
export class GeminiNanoChatService {
|
|
18
|
+
constructor(options = {}) {
|
|
19
|
+
this.provider = 'gemini-nano';
|
|
20
|
+
this.expectedInputLanguages = options.expectedInputLanguages ?? ['ja'];
|
|
21
|
+
this.expectedOutputLanguages = options.expectedOutputLanguages ?? ['ja'];
|
|
22
|
+
this._responseLength = options.responseLength;
|
|
23
|
+
void this._responseLength;
|
|
24
|
+
}
|
|
25
|
+
getModel() {
|
|
26
|
+
return MODEL_GEMINI_NANO;
|
|
27
|
+
}
|
|
28
|
+
getVisionModel() {
|
|
29
|
+
return MODEL_GEMINI_NANO;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Process chat messages using Gemini Nano.
|
|
33
|
+
* Non-streaming: calls onPartialResponse once with the full response,
|
|
34
|
+
* then calls onCompleteResponse.
|
|
35
|
+
*/
|
|
36
|
+
async processChat(messages, onPartialResponse, onCompleteResponse) {
|
|
37
|
+
const response = await this.generateResponse(messages);
|
|
38
|
+
onPartialResponse(response);
|
|
39
|
+
await onCompleteResponse(response);
|
|
40
|
+
}
|
|
41
|
+
async processVisionChat(_messages, _onPartialResponse, _onCompleteResponse) {
|
|
42
|
+
throw new Error('Gemini Nano does not support vision capabilities.');
|
|
43
|
+
}
|
|
44
|
+
async chatOnce(messages, _stream = false, onPartialResponse = () => { }, _maxTokens) {
|
|
45
|
+
const response = await this.generateResponse(messages);
|
|
46
|
+
onPartialResponse(response);
|
|
47
|
+
return {
|
|
48
|
+
blocks: [{ type: 'text', text: response }],
|
|
49
|
+
stop_reason: 'end',
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
async visionChatOnce(_messages, _stream = false, _onPartialResponse = () => { }, _maxTokens) {
|
|
53
|
+
throw new Error('Gemini Nano does not support vision capabilities.');
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Core logic: extract system prompt, manage session, call prompt().
|
|
57
|
+
*/
|
|
58
|
+
async generateResponse(messages) {
|
|
59
|
+
const api = getLanguageModelAPI();
|
|
60
|
+
if (!api) {
|
|
61
|
+
throw new Error('Gemini Nano is not available in this environment. ' +
|
|
62
|
+
'Chrome 138+ with Prompt API enabled is required.');
|
|
63
|
+
}
|
|
64
|
+
const availability = await api.availability();
|
|
65
|
+
if (availability !== 'available' && availability !== 'downloadable') {
|
|
66
|
+
throw new Error('Gemini Nano Prompt API is not ready in this environment. ' +
|
|
67
|
+
`LanguageModel.availability() returned "${availability}". ` +
|
|
68
|
+
'Expected "available" or "downloadable".');
|
|
69
|
+
}
|
|
70
|
+
// Extract system prompt
|
|
71
|
+
const systemMessages = messages.filter((m) => m.role === 'system');
|
|
72
|
+
const systemPrompt = systemMessages.map((m) => m.content).join('\n');
|
|
73
|
+
// Get conversation messages (exclude system)
|
|
74
|
+
const conversationMessages = messages
|
|
75
|
+
.filter((m) => m.role !== 'system')
|
|
76
|
+
.slice(-GEMINI_NANO_MAX_CONTEXT_MESSAGES);
|
|
77
|
+
// Get the last user message to send via prompt()
|
|
78
|
+
const lastUserMessage = [...conversationMessages]
|
|
79
|
+
.reverse()
|
|
80
|
+
.find((m) => m.role === 'user');
|
|
81
|
+
if (!lastUserMessage) {
|
|
82
|
+
throw new Error('No user message found in the provided messages.');
|
|
83
|
+
}
|
|
84
|
+
const session = await this.createSession(api, systemPrompt, conversationMessages);
|
|
85
|
+
try {
|
|
86
|
+
return await session.prompt(lastUserMessage.content);
|
|
87
|
+
}
|
|
88
|
+
finally {
|
|
89
|
+
try {
|
|
90
|
+
session.destroy();
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
// ignore
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Create a new LanguageModel session with system prompt and context history.
|
|
99
|
+
* Context history (excluding the last user message) is embedded in the system prompt.
|
|
100
|
+
*/
|
|
101
|
+
async createSession(api, systemPrompt, contextHistory) {
|
|
102
|
+
let prompt = systemPrompt;
|
|
103
|
+
// Embed conversation history into system prompt (exclude last user msg)
|
|
104
|
+
const historyMessages = contextHistory.slice(0, -1);
|
|
105
|
+
if (historyMessages.length > 0) {
|
|
106
|
+
const history = historyMessages
|
|
107
|
+
.map((m) => `${m.role === 'user' ? 'User' : 'Assistant'}: ${m.content}`)
|
|
108
|
+
.join('\n');
|
|
109
|
+
prompt +=
|
|
110
|
+
'\n\n以下はこれまでの会話履歴です。この文脈を踏まえて回答してください:\n' +
|
|
111
|
+
history;
|
|
112
|
+
}
|
|
113
|
+
return api.create({
|
|
114
|
+
systemPrompt: prompt,
|
|
115
|
+
expectedInputs: [
|
|
116
|
+
{ type: 'text', languages: this.expectedInputLanguages },
|
|
117
|
+
],
|
|
118
|
+
expectedOutputs: [
|
|
119
|
+
{ type: 'text', languages: this.expectedOutputLanguages },
|
|
120
|
+
],
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=GeminiNanoChatService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GeminiNanoChatService.js","sourceRoot":"","sources":["../../../../../src/services/providers/geminiNano/GeminiNanoChatService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ChatService } from '../../ChatService';
|
|
2
|
+
import { GeminiNanoChatServiceOptions, ChatServiceProvider, VisionSupportLevel } from '../ChatServiceProvider';
|
|
3
|
+
/**
|
|
4
|
+
* Gemini Nano (Chrome built-in AI) provider implementation.
|
|
5
|
+
* No API key required — runs entirely in the browser.
|
|
6
|
+
*/
|
|
7
|
+
export declare class GeminiNanoChatServiceProvider implements ChatServiceProvider<GeminiNanoChatServiceOptions> {
|
|
8
|
+
createChatService(options: GeminiNanoChatServiceOptions): ChatService;
|
|
9
|
+
getProviderName(): string;
|
|
10
|
+
getSupportedModels(): string[];
|
|
11
|
+
getDefaultModel(): string;
|
|
12
|
+
supportsVision(): boolean;
|
|
13
|
+
getVisionSupportLevel(): VisionSupportLevel;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=GeminiNanoChatServiceProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GeminiNanoChatServiceProvider.d.ts","sourceRoot":"","sources":["../../../../../src/services/providers/geminiNano/GeminiNanoChatServiceProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EACL,4BAA4B,EAC5B,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,wBAAwB,CAAC;AAGhC;;;GAGG;AACH,qBAAa,6BACX,YAAW,mBAAmB,CAAC,4BAA4B,CAAC;IAE5D,iBAAiB,CAAC,OAAO,EAAE,4BAA4B,GAAG,WAAW;IAQrE,eAAe,IAAI,MAAM;IAIzB,kBAAkB,IAAI,MAAM,EAAE;IAI9B,eAAe,IAAI,MAAM;IAIzB,cAAc,IAAI,OAAO;IAIzB,qBAAqB,IAAI,kBAAkB;CAG5C"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { GeminiNanoChatService } from './GeminiNanoChatService';
|
|
2
|
+
import { MODEL_GEMINI_NANO } from '../../../constants/geminiNano';
|
|
3
|
+
/**
|
|
4
|
+
* Gemini Nano (Chrome built-in AI) provider implementation.
|
|
5
|
+
* No API key required — runs entirely in the browser.
|
|
6
|
+
*/
|
|
7
|
+
export class GeminiNanoChatServiceProvider {
|
|
8
|
+
createChatService(options) {
|
|
9
|
+
return new GeminiNanoChatService({
|
|
10
|
+
expectedInputLanguages: options.expectedInputLanguages,
|
|
11
|
+
expectedOutputLanguages: options.expectedOutputLanguages,
|
|
12
|
+
responseLength: options.responseLength,
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
getProviderName() {
|
|
16
|
+
return 'gemini-nano';
|
|
17
|
+
}
|
|
18
|
+
getSupportedModels() {
|
|
19
|
+
return [MODEL_GEMINI_NANO];
|
|
20
|
+
}
|
|
21
|
+
getDefaultModel() {
|
|
22
|
+
return MODEL_GEMINI_NANO;
|
|
23
|
+
}
|
|
24
|
+
supportsVision() {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
getVisionSupportLevel() {
|
|
28
|
+
return 'unsupported';
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=GeminiNanoChatServiceProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GeminiNanoChatServiceProvider.js","sourceRoot":"","sources":["../../../../../src/services/providers/geminiNano/GeminiNanoChatServiceProvider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAMhE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE;;;GAGG;AACH,MAAM,OAAO,6BAA6B;IAGxC,iBAAiB,CAAC,OAAqC;QACrD,OAAO,IAAI,qBAAqB,CAAC;YAC/B,sBAAsB,EAAE,OAAO,CAAC,sBAAsB;YACtD,uBAAuB,EAAE,OAAO,CAAC,uBAAuB;YACxD,cAAc,EAAE,OAAO,CAAC,cAAc;SACvC,CAAC,CAAC;IACL,CAAC;IAED,eAAe;QACb,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,kBAAkB;QAChB,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC7B,CAAC;IAED,eAAe;QACb,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,cAAc;QACZ,OAAO,KAAK,CAAC;IACf,CAAC;IAED,qBAAqB;QACnB,OAAO,aAAa,CAAC;IACvB,CAAC;CACF"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { ClaudeChatServiceProvider } from './claude/ClaudeChatServiceProvider';
|
|
2
2
|
import { GeminiChatServiceProvider } from './gemini/GeminiChatServiceProvider';
|
|
3
|
+
import { GeminiNanoChatServiceProvider } from './geminiNano/GeminiNanoChatServiceProvider';
|
|
3
4
|
import { KimiChatServiceProvider } from './kimi/KimiChatServiceProvider';
|
|
4
5
|
import { OpenAICompatibleChatServiceProvider } from './openaiCompatible/OpenAICompatibleChatServiceProvider';
|
|
5
6
|
import { OpenAIChatServiceProvider } from './openai/OpenAIChatServiceProvider';
|
|
6
7
|
import { OpenRouterChatServiceProvider } from './openrouter/OpenRouterChatServiceProvider';
|
|
7
8
|
import { XAIChatServiceProvider } from './xai/XAIChatServiceProvider';
|
|
8
9
|
import { ZAIChatServiceProvider } from './zai/ZAIChatServiceProvider';
|
|
9
|
-
export declare const DEFAULT_CHAT_SERVICE_PROVIDERS: (ClaudeChatServiceProvider | GeminiChatServiceProvider | KimiChatServiceProvider | OpenAICompatibleChatServiceProvider | OpenAIChatServiceProvider | OpenRouterChatServiceProvider | XAIChatServiceProvider | ZAIChatServiceProvider)[];
|
|
10
|
+
export declare const DEFAULT_CHAT_SERVICE_PROVIDERS: (ClaudeChatServiceProvider | GeminiChatServiceProvider | GeminiNanoChatServiceProvider | KimiChatServiceProvider | OpenAICompatibleChatServiceProvider | OpenAIChatServiceProvider | OpenRouterChatServiceProvider | XAIChatServiceProvider | ZAIChatServiceProvider)[];
|
|
10
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/services/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,mCAAmC,EAAE,MAAM,wDAAwD,CAAC;AAC7G,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,6BAA6B,EAAE,MAAM,4CAA4C,CAAC;AAC3F,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAEtE,eAAO,MAAM,8BAA8B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/services/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,6BAA6B,EAAE,MAAM,4CAA4C,CAAC;AAC3F,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,mCAAmC,EAAE,MAAM,wDAAwD,CAAC;AAC7G,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,6BAA6B,EAAE,MAAM,4CAA4C,CAAC;AAC3F,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAEtE,eAAO,MAAM,8BAA8B,yQAU1C,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ClaudeChatServiceProvider } from './claude/ClaudeChatServiceProvider';
|
|
2
2
|
import { GeminiChatServiceProvider } from './gemini/GeminiChatServiceProvider';
|
|
3
|
+
import { GeminiNanoChatServiceProvider } from './geminiNano/GeminiNanoChatServiceProvider';
|
|
3
4
|
import { KimiChatServiceProvider } from './kimi/KimiChatServiceProvider';
|
|
4
5
|
import { OpenAICompatibleChatServiceProvider } from './openaiCompatible/OpenAICompatibleChatServiceProvider';
|
|
5
6
|
import { OpenAIChatServiceProvider } from './openai/OpenAIChatServiceProvider';
|
|
@@ -10,6 +11,7 @@ export const DEFAULT_CHAT_SERVICE_PROVIDERS = [
|
|
|
10
11
|
new OpenAIChatServiceProvider(),
|
|
11
12
|
new OpenAICompatibleChatServiceProvider(),
|
|
12
13
|
new GeminiChatServiceProvider(),
|
|
14
|
+
new GeminiNanoChatServiceProvider(),
|
|
13
15
|
new ClaudeChatServiceProvider(),
|
|
14
16
|
new OpenRouterChatServiceProvider(),
|
|
15
17
|
new ZAIChatServiceProvider(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/services/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,mCAAmC,EAAE,MAAM,wDAAwD,CAAC;AAC7G,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,6BAA6B,EAAE,MAAM,4CAA4C,CAAC;AAC3F,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAEtE,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC5C,IAAI,yBAAyB,EAAE;IAC/B,IAAI,mCAAmC,EAAE;IACzC,IAAI,yBAAyB,EAAE;IAC/B,IAAI,yBAAyB,EAAE;IAC/B,IAAI,6BAA6B,EAAE;IACnC,IAAI,sBAAsB,EAAE;IAC5B,IAAI,sBAAsB,EAAE;IAC5B,IAAI,uBAAuB,EAAE;CAC9B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/services/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,6BAA6B,EAAE,MAAM,4CAA4C,CAAC;AAC3F,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,mCAAmC,EAAE,MAAM,wDAAwD,CAAC;AAC7G,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,6BAA6B,EAAE,MAAM,4CAA4C,CAAC;AAC3F,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAEtE,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC5C,IAAI,yBAAyB,EAAE;IAC/B,IAAI,mCAAmC,EAAE;IACzC,IAAI,yBAAyB,EAAE;IAC/B,IAAI,6BAA6B,EAAE;IACnC,IAAI,yBAAyB,EAAE;IAC/B,IAAI,6BAA6B,EAAE;IACnC,IAAI,sBAAsB,EAAE;IAC5B,IAAI,sBAAsB,EAAE;IAC5B,IAAI,uBAAuB,EAAE;CAC9B,CAAC"}
|
|
@@ -41,11 +41,14 @@ var AITuberOnAirChat = (() => {
|
|
|
41
41
|
ENDPOINT_XAI_CHAT_COMPLETIONS_API: () => ENDPOINT_XAI_CHAT_COMPLETIONS_API,
|
|
42
42
|
ENDPOINT_ZAI_CHAT_COMPLETIONS_API: () => ENDPOINT_ZAI_CHAT_COMPLETIONS_API,
|
|
43
43
|
EmotionParser: () => EmotionParser,
|
|
44
|
+
GEMINI_NANO_MAX_CONTEXT_MESSAGES: () => GEMINI_NANO_MAX_CONTEXT_MESSAGES,
|
|
44
45
|
GEMINI_VISION_SUPPORTED_MODELS: () => GEMINI_VISION_SUPPORTED_MODELS,
|
|
45
46
|
GPT5_PRESETS: () => GPT5_PRESETS,
|
|
46
47
|
GPT_5_MODELS: () => GPT_5_MODELS,
|
|
47
48
|
GeminiChatService: () => GeminiChatService,
|
|
48
49
|
GeminiChatServiceProvider: () => GeminiChatServiceProvider,
|
|
50
|
+
GeminiNanoChatService: () => GeminiNanoChatService,
|
|
51
|
+
GeminiNanoChatServiceProvider: () => GeminiNanoChatServiceProvider,
|
|
49
52
|
HttpError: () => HttpError,
|
|
50
53
|
KIMI_VISION_SUPPORTED_MODELS: () => KIMI_VISION_SUPPORTED_MODELS,
|
|
51
54
|
KimiChatService: () => KimiChatService,
|
|
@@ -77,6 +80,7 @@ var AITuberOnAirChat = (() => {
|
|
|
77
80
|
MODEL_GEMINI_3_1_PRO_PREVIEW: () => MODEL_GEMINI_3_1_PRO_PREVIEW,
|
|
78
81
|
MODEL_GEMINI_3_FLASH_PREVIEW: () => MODEL_GEMINI_3_FLASH_PREVIEW,
|
|
79
82
|
MODEL_GEMINI_3_PRO_PREVIEW: () => MODEL_GEMINI_3_PRO_PREVIEW,
|
|
83
|
+
MODEL_GEMINI_NANO: () => MODEL_GEMINI_NANO,
|
|
80
84
|
MODEL_GLM_4_6: () => MODEL_GLM_4_6,
|
|
81
85
|
MODEL_GLM_4_6V: () => MODEL_GLM_4_6V,
|
|
82
86
|
MODEL_GLM_4_6V_FLASH: () => MODEL_GLM_4_6V_FLASH,
|
|
@@ -452,6 +456,10 @@ If it's in English, summarize in English.
|
|
|
452
456
|
If it's in another language, summarize in that language.
|
|
453
457
|
`;
|
|
454
458
|
|
|
459
|
+
// src/constants/geminiNano.ts
|
|
460
|
+
var MODEL_GEMINI_NANO = "gemini-nano";
|
|
461
|
+
var GEMINI_NANO_MAX_CONTEXT_MESSAGES = 20;
|
|
462
|
+
|
|
455
463
|
// src/utils/chatServiceHttpClient.ts
|
|
456
464
|
var HttpError = class extends Error {
|
|
457
465
|
constructor(status, statusText, body) {
|
|
@@ -2372,6 +2380,139 @@ If it's in another language, summarize in that language.
|
|
|
2372
2380
|
}
|
|
2373
2381
|
};
|
|
2374
2382
|
|
|
2383
|
+
// src/services/providers/geminiNano/GeminiNanoChatService.ts
|
|
2384
|
+
function getLanguageModelAPI() {
|
|
2385
|
+
if (typeof globalThis !== "undefined" && "LanguageModel" in globalThis) {
|
|
2386
|
+
return globalThis.LanguageModel;
|
|
2387
|
+
}
|
|
2388
|
+
return void 0;
|
|
2389
|
+
}
|
|
2390
|
+
var GeminiNanoChatService = class {
|
|
2391
|
+
constructor(options = {}) {
|
|
2392
|
+
this.provider = "gemini-nano";
|
|
2393
|
+
this.expectedInputLanguages = options.expectedInputLanguages ?? ["ja"];
|
|
2394
|
+
this.expectedOutputLanguages = options.expectedOutputLanguages ?? ["ja"];
|
|
2395
|
+
this._responseLength = options.responseLength;
|
|
2396
|
+
void this._responseLength;
|
|
2397
|
+
}
|
|
2398
|
+
getModel() {
|
|
2399
|
+
return MODEL_GEMINI_NANO;
|
|
2400
|
+
}
|
|
2401
|
+
getVisionModel() {
|
|
2402
|
+
return MODEL_GEMINI_NANO;
|
|
2403
|
+
}
|
|
2404
|
+
/**
|
|
2405
|
+
* Process chat messages using Gemini Nano.
|
|
2406
|
+
* Non-streaming: calls onPartialResponse once with the full response,
|
|
2407
|
+
* then calls onCompleteResponse.
|
|
2408
|
+
*/
|
|
2409
|
+
async processChat(messages, onPartialResponse, onCompleteResponse) {
|
|
2410
|
+
const response = await this.generateResponse(messages);
|
|
2411
|
+
onPartialResponse(response);
|
|
2412
|
+
await onCompleteResponse(response);
|
|
2413
|
+
}
|
|
2414
|
+
async processVisionChat(_messages, _onPartialResponse, _onCompleteResponse) {
|
|
2415
|
+
throw new Error("Gemini Nano does not support vision capabilities.");
|
|
2416
|
+
}
|
|
2417
|
+
async chatOnce(messages, _stream = false, onPartialResponse = () => {
|
|
2418
|
+
}, _maxTokens) {
|
|
2419
|
+
const response = await this.generateResponse(messages);
|
|
2420
|
+
onPartialResponse(response);
|
|
2421
|
+
return {
|
|
2422
|
+
blocks: [{ type: "text", text: response }],
|
|
2423
|
+
stop_reason: "end"
|
|
2424
|
+
};
|
|
2425
|
+
}
|
|
2426
|
+
async visionChatOnce(_messages, _stream = false, _onPartialResponse = () => {
|
|
2427
|
+
}, _maxTokens) {
|
|
2428
|
+
throw new Error("Gemini Nano does not support vision capabilities.");
|
|
2429
|
+
}
|
|
2430
|
+
/**
|
|
2431
|
+
* Core logic: extract system prompt, manage session, call prompt().
|
|
2432
|
+
*/
|
|
2433
|
+
async generateResponse(messages) {
|
|
2434
|
+
const api = getLanguageModelAPI();
|
|
2435
|
+
if (!api) {
|
|
2436
|
+
throw new Error(
|
|
2437
|
+
"Gemini Nano is not available in this environment. Chrome 138+ with Prompt API enabled is required."
|
|
2438
|
+
);
|
|
2439
|
+
}
|
|
2440
|
+
const availability = await api.availability();
|
|
2441
|
+
if (availability !== "available" && availability !== "downloadable") {
|
|
2442
|
+
throw new Error(
|
|
2443
|
+
`Gemini Nano Prompt API is not ready in this environment. LanguageModel.availability() returned "${availability}". Expected "available" or "downloadable".`
|
|
2444
|
+
);
|
|
2445
|
+
}
|
|
2446
|
+
const systemMessages = messages.filter((m) => m.role === "system");
|
|
2447
|
+
const systemPrompt = systemMessages.map((m) => m.content).join("\n");
|
|
2448
|
+
const conversationMessages = messages.filter((m) => m.role !== "system").slice(-GEMINI_NANO_MAX_CONTEXT_MESSAGES);
|
|
2449
|
+
const lastUserMessage = [...conversationMessages].reverse().find((m) => m.role === "user");
|
|
2450
|
+
if (!lastUserMessage) {
|
|
2451
|
+
throw new Error("No user message found in the provided messages.");
|
|
2452
|
+
}
|
|
2453
|
+
const session = await this.createSession(
|
|
2454
|
+
api,
|
|
2455
|
+
systemPrompt,
|
|
2456
|
+
conversationMessages
|
|
2457
|
+
);
|
|
2458
|
+
try {
|
|
2459
|
+
return await session.prompt(lastUserMessage.content);
|
|
2460
|
+
} finally {
|
|
2461
|
+
try {
|
|
2462
|
+
session.destroy();
|
|
2463
|
+
} catch {
|
|
2464
|
+
}
|
|
2465
|
+
}
|
|
2466
|
+
}
|
|
2467
|
+
/**
|
|
2468
|
+
* Create a new LanguageModel session with system prompt and context history.
|
|
2469
|
+
* Context history (excluding the last user message) is embedded in the system prompt.
|
|
2470
|
+
*/
|
|
2471
|
+
async createSession(api, systemPrompt, contextHistory) {
|
|
2472
|
+
let prompt = systemPrompt;
|
|
2473
|
+
const historyMessages = contextHistory.slice(0, -1);
|
|
2474
|
+
if (historyMessages.length > 0) {
|
|
2475
|
+
const history = historyMessages.map((m) => `${m.role === "user" ? "User" : "Assistant"}: ${m.content}`).join("\n");
|
|
2476
|
+
prompt += "\n\n\u4EE5\u4E0B\u306F\u3053\u308C\u307E\u3067\u306E\u4F1A\u8A71\u5C65\u6B74\u3067\u3059\u3002\u3053\u306E\u6587\u8108\u3092\u8E0F\u307E\u3048\u3066\u56DE\u7B54\u3057\u3066\u304F\u3060\u3055\u3044:\n" + history;
|
|
2477
|
+
}
|
|
2478
|
+
return api.create({
|
|
2479
|
+
systemPrompt: prompt,
|
|
2480
|
+
expectedInputs: [
|
|
2481
|
+
{ type: "text", languages: this.expectedInputLanguages }
|
|
2482
|
+
],
|
|
2483
|
+
expectedOutputs: [
|
|
2484
|
+
{ type: "text", languages: this.expectedOutputLanguages }
|
|
2485
|
+
]
|
|
2486
|
+
});
|
|
2487
|
+
}
|
|
2488
|
+
};
|
|
2489
|
+
|
|
2490
|
+
// src/services/providers/geminiNano/GeminiNanoChatServiceProvider.ts
|
|
2491
|
+
var GeminiNanoChatServiceProvider = class {
|
|
2492
|
+
createChatService(options) {
|
|
2493
|
+
return new GeminiNanoChatService({
|
|
2494
|
+
expectedInputLanguages: options.expectedInputLanguages,
|
|
2495
|
+
expectedOutputLanguages: options.expectedOutputLanguages,
|
|
2496
|
+
responseLength: options.responseLength
|
|
2497
|
+
});
|
|
2498
|
+
}
|
|
2499
|
+
getProviderName() {
|
|
2500
|
+
return "gemini-nano";
|
|
2501
|
+
}
|
|
2502
|
+
getSupportedModels() {
|
|
2503
|
+
return [MODEL_GEMINI_NANO];
|
|
2504
|
+
}
|
|
2505
|
+
getDefaultModel() {
|
|
2506
|
+
return MODEL_GEMINI_NANO;
|
|
2507
|
+
}
|
|
2508
|
+
supportsVision() {
|
|
2509
|
+
return false;
|
|
2510
|
+
}
|
|
2511
|
+
getVisionSupportLevel() {
|
|
2512
|
+
return "unsupported";
|
|
2513
|
+
}
|
|
2514
|
+
};
|
|
2515
|
+
|
|
2375
2516
|
// src/services/providers/kimi/KimiChatService.ts
|
|
2376
2517
|
var KimiChatService = class {
|
|
2377
2518
|
/**
|
|
@@ -4221,6 +4362,7 @@ If it's in another language, summarize in that language.
|
|
|
4221
4362
|
new OpenAIChatServiceProvider(),
|
|
4222
4363
|
new OpenAICompatibleChatServiceProvider(),
|
|
4223
4364
|
new GeminiChatServiceProvider(),
|
|
4365
|
+
new GeminiNanoChatServiceProvider(),
|
|
4224
4366
|
new ClaudeChatServiceProvider(),
|
|
4225
4367
|
new OpenRouterChatServiceProvider(),
|
|
4226
4368
|
new ZAIChatServiceProvider(),
|