@aituber-onair/chat 0.2.1 → 0.4.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 (87) hide show
  1. package/README.ja.md +89 -3
  2. package/README.md +90 -4
  3. package/dist/cjs/adapters/gasFetch.d.ts +6 -0
  4. package/dist/cjs/adapters/gasFetch.d.ts.map +1 -0
  5. package/dist/cjs/adapters/gasFetch.js +53 -0
  6. package/dist/cjs/adapters/gasFetch.js.map +1 -0
  7. package/dist/cjs/constants/index.d.ts +1 -0
  8. package/dist/cjs/constants/index.d.ts.map +1 -1
  9. package/dist/cjs/constants/index.js +1 -0
  10. package/dist/cjs/constants/index.js.map +1 -1
  11. package/dist/cjs/constants/openrouter.d.ts +21 -0
  12. package/dist/cjs/constants/openrouter.d.ts.map +1 -0
  13. package/dist/cjs/constants/openrouter.js +34 -0
  14. package/dist/cjs/constants/openrouter.js.map +1 -0
  15. package/dist/cjs/index.d.ts +3 -0
  16. package/dist/cjs/index.d.ts.map +1 -1
  17. package/dist/cjs/index.js +9 -1
  18. package/dist/cjs/index.js.map +1 -1
  19. package/dist/cjs/services/ChatServiceFactory.d.ts.map +1 -1
  20. package/dist/cjs/services/ChatServiceFactory.js +3 -0
  21. package/dist/cjs/services/ChatServiceFactory.js.map +1 -1
  22. package/dist/cjs/services/providers/ChatServiceProvider.d.ts +5 -1
  23. package/dist/cjs/services/providers/ChatServiceProvider.d.ts.map +1 -1
  24. package/dist/cjs/services/providers/openrouter/OpenRouterChatService.d.ts +108 -0
  25. package/dist/cjs/services/providers/openrouter/OpenRouterChatService.d.ts.map +1 -0
  26. package/dist/cjs/services/providers/openrouter/OpenRouterChatService.js +397 -0
  27. package/dist/cjs/services/providers/openrouter/OpenRouterChatService.js.map +1 -0
  28. package/dist/cjs/services/providers/openrouter/OpenRouterChatServiceProvider.d.ts +53 -0
  29. package/dist/cjs/services/providers/openrouter/OpenRouterChatServiceProvider.d.ts.map +1 -0
  30. package/dist/cjs/services/providers/openrouter/OpenRouterChatServiceProvider.js +89 -0
  31. package/dist/cjs/services/providers/openrouter/OpenRouterChatServiceProvider.js.map +1 -0
  32. package/dist/cjs/utils/chatServiceHttpClient.d.ts +8 -0
  33. package/dist/cjs/utils/chatServiceHttpClient.d.ts.map +1 -1
  34. package/dist/cjs/utils/chatServiceHttpClient.js +29 -10
  35. package/dist/cjs/utils/chatServiceHttpClient.js.map +1 -1
  36. package/dist/cjs/utils/index.d.ts +1 -0
  37. package/dist/cjs/utils/index.d.ts.map +1 -1
  38. package/dist/cjs/utils/index.js +1 -0
  39. package/dist/cjs/utils/index.js.map +1 -1
  40. package/dist/cjs/utils/runOnce.d.ts +8 -0
  41. package/dist/cjs/utils/runOnce.d.ts.map +1 -0
  42. package/dist/cjs/utils/runOnce.js +13 -0
  43. package/dist/cjs/utils/runOnce.js.map +1 -0
  44. package/dist/esm/adapters/gasFetch.d.ts +6 -0
  45. package/dist/esm/adapters/gasFetch.d.ts.map +1 -0
  46. package/dist/esm/adapters/gasFetch.js +50 -0
  47. package/dist/esm/adapters/gasFetch.js.map +1 -0
  48. package/dist/esm/constants/index.d.ts +1 -0
  49. package/dist/esm/constants/index.d.ts.map +1 -1
  50. package/dist/esm/constants/index.js +1 -0
  51. package/dist/esm/constants/index.js.map +1 -1
  52. package/dist/esm/constants/openrouter.d.ts +21 -0
  53. package/dist/esm/constants/openrouter.d.ts.map +1 -0
  54. package/dist/esm/constants/openrouter.js +29 -0
  55. package/dist/esm/constants/openrouter.js.map +1 -0
  56. package/dist/esm/index.d.ts +3 -0
  57. package/dist/esm/index.d.ts.map +1 -1
  58. package/dist/esm/index.js +5 -0
  59. package/dist/esm/index.js.map +1 -1
  60. package/dist/esm/services/ChatServiceFactory.d.ts.map +1 -1
  61. package/dist/esm/services/ChatServiceFactory.js +3 -0
  62. package/dist/esm/services/ChatServiceFactory.js.map +1 -1
  63. package/dist/esm/services/providers/ChatServiceProvider.d.ts +5 -1
  64. package/dist/esm/services/providers/ChatServiceProvider.d.ts.map +1 -1
  65. package/dist/esm/services/providers/openrouter/OpenRouterChatService.d.ts +108 -0
  66. package/dist/esm/services/providers/openrouter/OpenRouterChatService.d.ts.map +1 -0
  67. package/dist/esm/services/providers/openrouter/OpenRouterChatService.js +393 -0
  68. package/dist/esm/services/providers/openrouter/OpenRouterChatService.js.map +1 -0
  69. package/dist/esm/services/providers/openrouter/OpenRouterChatServiceProvider.d.ts +53 -0
  70. package/dist/esm/services/providers/openrouter/OpenRouterChatServiceProvider.d.ts.map +1 -0
  71. package/dist/esm/services/providers/openrouter/OpenRouterChatServiceProvider.js +85 -0
  72. package/dist/esm/services/providers/openrouter/OpenRouterChatServiceProvider.js.map +1 -0
  73. package/dist/esm/utils/chatServiceHttpClient.d.ts +8 -0
  74. package/dist/esm/utils/chatServiceHttpClient.d.ts.map +1 -1
  75. package/dist/esm/utils/chatServiceHttpClient.js +29 -10
  76. package/dist/esm/utils/chatServiceHttpClient.js.map +1 -1
  77. package/dist/esm/utils/index.d.ts +1 -0
  78. package/dist/esm/utils/index.d.ts.map +1 -1
  79. package/dist/esm/utils/index.js +1 -0
  80. package/dist/esm/utils/index.js.map +1 -1
  81. package/dist/esm/utils/runOnce.d.ts +8 -0
  82. package/dist/esm/utils/runOnce.d.ts.map +1 -0
  83. package/dist/esm/utils/runOnce.js +10 -0
  84. package/dist/esm/utils/runOnce.js.map +1 -0
  85. package/dist/umd/aituber-onair-chat.js +2997 -0
  86. package/dist/umd/aituber-onair-chat.min.js +19 -0
  87. package/package.json +12 -6
package/README.ja.md CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  ![@aituber-onair/chat ロゴ](./images/aituber-onair-chat.png)
4
4
 
5
- AITuber OnAirのチャット・LLM API統合ライブラリです。このパッケージは、OpenAI、Claude、Gemini等の様々なAIチャットプロバイダーとやり取りするための統一されたインターフェースを提供します。
5
+ AITuber OnAirのチャット・LLM API統合ライブラリです。このパッケージは、OpenAI、Claude、Gemini、OpenRouter等の様々なAIチャットプロバイダーとやり取りするための統一されたインターフェースを提供します。
6
6
 
7
7
  ## 機能
8
8
 
9
- - 🤖 **複数のAIプロバイダー対応**: OpenAI、Claude (Anthropic)、Google Gemini
9
+ - 🤖 **複数のAIプロバイダー対応**: OpenAI、Claude (Anthropic)、Google Gemini、OpenRouter
10
10
  - 🔄 **統一されたインターフェース**: 異なるプロバイダー間での一貫したAPI
11
11
  - 🛠️ **ツール・関数呼び出し**: AI関数呼び出しの自動反復処理をサポート
12
12
  - 💬 **ストリーミングレスポンス**: リアルタイムストリーミングチャット応答
@@ -21,6 +21,73 @@ AITuber OnAirのチャット・LLM API統合ライブラリです。このパッ
21
21
  npm install @aituber-onair/chat
22
22
  ```
23
23
 
24
+ ## UMDビルド(ブラウザ/GAS)
25
+
26
+ 本パッケージは既定で ESM/CJS を提供します。バンドラ無し環境(`<script>`読み込みのブラウザ、Google Apps Script)向けに UMD/IIFE バンドルも利用できます。
27
+
28
+ - グローバル名: `AITuberOnAirChat`
29
+ - 出力: `dist/umd/aituber-onair-chat.js`, `dist/umd/aituber-onair-chat.min.js`
30
+
31
+ モノレポ直下でUMDをビルド:
32
+
33
+ ```bash
34
+ # 依存をインストール
35
+ npm ci
36
+
37
+ # chatパッケージをビルド
38
+ npm -w @aituber-onair/chat run build
39
+ ```
40
+
41
+ ### ブラウザ(UMD)
42
+
43
+ ```html
44
+ <!doctype html>
45
+ <html>
46
+ <head>
47
+ <meta charset="utf-8" />
48
+ <script src="/dist/umd/aituber-onair-chat.min.js"></script>
49
+ </head>
50
+ <body>
51
+ <script>
52
+ const chat = AITuberOnAirChat.ChatServiceFactory.createChatService('openai', {
53
+ apiKey: 'your-api-key'
54
+ });
55
+ // ブラウザではストリーミング利用可
56
+ </script>
57
+ </body>
58
+ </html>
59
+ ```
60
+
61
+ ### Google Apps Script(GAS)
62
+
63
+ GASはストリーミング不可・Fetch API非対応です。提供アダプターと非ストリーミングヘルパーを使用してください。
64
+
65
+ 手順:
66
+ - UMDをビルドし、`dist/umd/aituber-onair-chat.min.js` をGASプロジェクトにスクリプトとして追加(例: `lib.gs`)。claspを使う場合はプロジェクト配下に配置してプッシュ。
67
+ - 別ファイル(例: `main.js`)で以下を利用:
68
+
69
+ ```javascript
70
+ async function testChat() {
71
+ // UrlFetchAppを使うfetchを注入
72
+ AITuberOnAirChat.installGASFetch();
73
+
74
+ const chat = AITuberOnAirChat.ChatServiceFactory.createChatService('openai', {
75
+ apiKey: PropertiesService.getScriptProperties().getProperty('OPENAI_API_KEY')
76
+ });
77
+
78
+ const text = await AITuberOnAirChat.runOnceText(chat, [
79
+ { role: 'user', content: 'Hello!' }
80
+ ]);
81
+
82
+ Logger.log(text);
83
+ }
84
+ ```
85
+
86
+ 注意:
87
+ - 実行ランタイムはV8。ストリーミング不可のため `chatOnce(..., false)`/`runOnceText` を使用。
88
+ - スクリプトプロパティに `OPENAI_API_KEY` を設定。
89
+ - 実例は `packages/chat/examples/gas-basic` を参照。`appsscript.json` は任意(近年のGASは既定でV8ランタイム)。タイムゾーン等をカスタムしたい場合のみ追加してください。
90
+
24
91
  ## 使用方法
25
92
 
26
93
  ### 基本的なチャット
@@ -85,6 +152,24 @@ const geminiService = ChatServiceFactory.createChatService('gemini', {
85
152
  });
86
153
  ```
87
154
 
155
+ #### OpenRouter
156
+
157
+ ```typescript
158
+ const openRouterService = ChatServiceFactory.createChatService('openrouter', {
159
+ apiKey: process.env.OPENROUTER_API_KEY,
160
+ model: 'openai/gpt-oss-20b:free', // 無料利用枠モデル
161
+ // オプション: 分析用アプリ情報を追加
162
+ appName: 'あなたのアプリ名',
163
+ appUrl: 'https://your-app-url.com'
164
+ });
165
+ ```
166
+
167
+ **OpenRouterの重要な注意事項:**
168
+ - `gpt-oss-20b:free`モデルでは、技術的制限によりトークン制限が自動的に無効化されます
169
+ - 応答の長さを制御するには、プロンプト内で指示してください(例:「40文字以内で返答してください」)
170
+ - 無料階層にはレート制限があります(20リクエスト/分)
171
+ - 現在は`openai/gpt-oss-20b:free`モデルのみサポートしています
172
+
88
173
  ### ビジョンチャット
89
174
 
90
175
  ```typescript
@@ -308,6 +393,7 @@ type ChatResponseLength = 'veryShort' | 'short' | 'medium' | 'long' | 'veryLong'
308
393
  - **OpenAI**: GPT-4.1(miniとnanoを含む), GPT-4, GPT-4o-mini, O3-mini, o1, o1-miniのモデルをサポート
309
394
  - **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
395
  - **Claude**: Claude 3 Haiku, Claude 3.5 Haiku, Claude 3.5 Sonnet v2, Claude 3.7 Sonnetのモデルをサポート
396
+ - **OpenRouter**: `openai/gpt-oss-20b:free`(トークン制限の特別処理がある無料利用枠モデル)をサポート
311
397
 
312
398
  ## ライセンス
313
399
 
@@ -315,4 +401,4 @@ MIT
315
401
 
316
402
  ## 貢献
317
403
 
318
- 貢献を歓迎します!プルリクエストをお気軽にご提出ください。
404
+ 貢献を歓迎します!プルリクエストをお気軽にご提出ください。
package/README.md CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  ![@aituber-onair/chat logo](./images/aituber-onair-chat.png)
4
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.
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, Gemini, and OpenRouter.
6
6
 
7
7
  ## Features
8
8
 
9
- - 🤖 **Multiple AI Provider Support**: OpenAI, Claude (Anthropic), and Google Gemini
9
+ - 🤖 **Multiple AI Provider Support**: OpenAI, Claude (Anthropic), Google Gemini, and OpenRouter
10
10
  - 🔄 **Unified Interface**: Consistent API across different providers
11
11
  - 🛠️ **Tool/Function Calling**: Support for AI function calling with automatic iteration
12
12
  - 💬 **Streaming Responses**: Real-time streaming chat responses
@@ -21,6 +21,73 @@ Chat and LLM API integration library for AITuber OnAir. This package provides a
21
21
  npm install @aituber-onair/chat
22
22
  ```
23
23
 
24
+ ## UMD Build (Browser/GAS)
25
+
26
+ This package ships ESM/CJS by default. For environments without bundlers (browsers via script tag, Google Apps Script), a UMD/IIFE bundle is available.
27
+
28
+ - Global name: `AITuberOnAirChat`
29
+ - Files: `dist/umd/aituber-onair-chat.js`, `dist/umd/aituber-onair-chat.min.js`
30
+
31
+ Build UMD locally (in the monorepo):
32
+
33
+ ```bash
34
+ # Install deps at repo root
35
+ npm ci
36
+
37
+ # Build for chat only
38
+ npm -w @aituber-onair/chat run build
39
+ ```
40
+
41
+ ### Browser via UMD
42
+
43
+ ```html
44
+ <!doctype html>
45
+ <html>
46
+ <head>
47
+ <meta charset="utf-8" />
48
+ <script src="/dist/umd/aituber-onair-chat.min.js"></script>
49
+ </head>
50
+ <body>
51
+ <script>
52
+ const chat = AITuberOnAirChat.ChatServiceFactory.createChatService('openai', {
53
+ apiKey: 'your-api-key'
54
+ });
55
+ // Streaming is available in browsers
56
+ </script>
57
+ </body>
58
+ </html>
59
+ ```
60
+
61
+ ### Google Apps Script (GAS)
62
+
63
+ GAS does not support streaming or the Fetch API natively. Use the provided adapter and the non‑streaming helper.
64
+
65
+ Steps:
66
+ - Build UMD and copy `dist/umd/aituber-onair-chat.min.js` into your GAS project as a script file (e.g., `lib.gs`). With clasp, place it under the project folder and push.
67
+ - Create another file (e.g., `main.js`) and use the following snippet:
68
+
69
+ ```javascript
70
+ async function testChat() {
71
+ // Install fetch backed by UrlFetchApp
72
+ AITuberOnAirChat.installGASFetch();
73
+
74
+ const chat = AITuberOnAirChat.ChatServiceFactory.createChatService('openai', {
75
+ apiKey: PropertiesService.getScriptProperties().getProperty('OPENAI_API_KEY')
76
+ });
77
+
78
+ const text = await AITuberOnAirChat.runOnceText(chat, [
79
+ { role: 'user', content: 'Hello!' }
80
+ ]);
81
+
82
+ Logger.log(text);
83
+ }
84
+ ```
85
+
86
+ Notes:
87
+ - GAS runtime: V8. No streaming; prefer `chatOnce(..., false)` or `runOnceText`.
88
+ - Set your API key in Script Properties: `OPENAI_API_KEY`.
89
+ - See `packages/chat/examples/gas-basic` for a working example. The Apps Script manifest (`appsscript.json`) is optional; modern projects default to V8. Add one only if you need custom settings (e.g., time zone).
90
+
24
91
  ## Usage
25
92
 
26
93
  ### Basic Chat
@@ -85,6 +152,24 @@ const geminiService = ChatServiceFactory.createChatService('gemini', {
85
152
  });
86
153
  ```
87
154
 
155
+ #### OpenRouter
156
+
157
+ ```typescript
158
+ const openRouterService = ChatServiceFactory.createChatService('openrouter', {
159
+ apiKey: process.env.OPENROUTER_API_KEY,
160
+ model: 'openai/gpt-oss-20b:free', // Free tier model
161
+ // Optional: Add app information for analytics
162
+ appName: 'Your App Name',
163
+ appUrl: 'https://your-app-url.com'
164
+ });
165
+ ```
166
+
167
+ **Important Notes for OpenRouter:**
168
+ - Token limits are automatically disabled for the `gpt-oss-20b:free` model due to technical limitations
169
+ - To control response length, include instructions in your prompt (e.g., "Please respond in 40 characters or less")
170
+ - Free tier has rate limits (20 requests/minute)
171
+ - Only `openai/gpt-oss-20b:free` model is currently supported
172
+
88
173
  ### Vision Chat
89
174
 
90
175
  ```typescript
@@ -303,11 +388,12 @@ type ChatResponseLength = 'veryShort' | 'short' | 'medium' | 'long' | 'veryLong'
303
388
 
304
389
  ## Available Providers
305
390
 
306
- Currently, the following AI provider is built-in:
391
+ Currently, the following AI providers are built-in:
307
392
 
308
393
  - **OpenAI**: Supports models like GPT-4.1(including mini and nano), GPT-4, GPT-4o-mini, O3-mini, o1, o1-mini
309
394
  - **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
395
  - **Claude**: Supports models like Claude 3 Haiku, Claude 3.5 Haiku, Claude 3.5 Sonnet v2, Claude 3.7 Sonnet
396
+ - **OpenRouter**: Supports `openai/gpt-oss-20b:free` (free tier model with special handling for token limits)
311
397
 
312
398
  ## License
313
399
 
@@ -315,4 +401,4 @@ MIT
315
401
 
316
402
  ## Contributing
317
403
 
318
- Contributions are welcome! Please feel free to submit a Pull Request.
404
+ Contributions are welcome! Please feel free to submit a Pull Request.
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Installs a fetch implementation backed by Google Apps Script UrlFetchApp.
3
+ * Provides a minimal Response-like object for non-streaming requests.
4
+ */
5
+ export declare function installGASFetch(): void;
6
+ //# sourceMappingURL=gasFetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gasFetch.d.ts","sourceRoot":"","sources":["../../../src/adapters/gasFetch.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAiDtC"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.installGASFetch = installGASFetch;
4
+ const chatServiceHttpClient_1 = require("../utils/chatServiceHttpClient");
5
+ /**
6
+ * Installs a fetch implementation backed by Google Apps Script UrlFetchApp.
7
+ * Provides a minimal Response-like object for non-streaming requests.
8
+ */
9
+ function installGASFetch() {
10
+ chatServiceHttpClient_1.ChatServiceHttpClient.setFetch(async (url, init = {}) => {
11
+ const method = (init.method || 'GET').toString().toUpperCase();
12
+ // Normalize headers to a Record<string, string>
13
+ const rawHeaders = init.headers;
14
+ const headers = {};
15
+ if (Array.isArray(rawHeaders)) {
16
+ for (const [k, v] of rawHeaders)
17
+ headers[k] = String(v);
18
+ }
19
+ else if (rawHeaders && typeof rawHeaders === 'object') {
20
+ for (const [k, v] of Object.entries(rawHeaders))
21
+ headers[k] = String(v);
22
+ }
23
+ // Convert RequestInit to UrlFetchApp parameters
24
+ const params = {
25
+ method,
26
+ headers,
27
+ muteHttpExceptions: true,
28
+ };
29
+ // Body handling: accept string or object (serialize as JSON)
30
+ const body = init.body;
31
+ if (typeof body === 'string') {
32
+ params.payload = body;
33
+ }
34
+ else if (body != null) {
35
+ if (!headers['Content-Type'])
36
+ headers['Content-Type'] = 'application/json';
37
+ params.payload = JSON.stringify(body);
38
+ }
39
+ const res = UrlFetchApp.fetch(url, params);
40
+ const status = res.getResponseCode();
41
+ const text = res.getContentText();
42
+ // Return a minimal Response-like object used by the library.
43
+ const response = {
44
+ ok: status >= 200 && status < 300,
45
+ status,
46
+ statusText: String(status),
47
+ text: async () => text,
48
+ json: async () => (text ? JSON.parse(text) : null),
49
+ };
50
+ return response;
51
+ });
52
+ }
53
+ //# sourceMappingURL=gasFetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gasFetch.js","sourceRoot":"","sources":["../../../src/adapters/gasFetch.ts"],"names":[],"mappings":";;AASA,0CAiDC;AA1DD,0EAAuE;AAKvE;;;GAGG;AACH,SAAgB,eAAe;IAC7B,6CAAqB,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,OAAoB,EAAE,EAAE,EAAE;QACnE,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC;QAE/D,gDAAgD;QAChD,MAAM,UAAU,GAAG,IAAI,CAAC,OAIX,CAAC;QACd,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,UAAU;gBAAE,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAC1D,CAAC;aAAM,IAAI,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;YACxD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;gBAAE,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAC1E,CAAC;QAED,gDAAgD;QAChD,MAAM,MAAM,GAA4B;YACtC,MAAM;YACN,OAAO;YACP,kBAAkB,EAAE,IAAI;SACzB,CAAC;QAEF,6DAA6D;QAC7D,MAAM,IAAI,GAAI,IAAsC,CAAC,IAAI,CAAC;QAC1D,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;QACxB,CAAC;aAAM,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;gBAC1B,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC;YAC/C,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC;QAED,MAAM,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAW,GAAG,CAAC,eAAe,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAW,GAAG,CAAC,cAAc,EAAE,CAAC;QAE1C,6DAA6D;QAC7D,MAAM,QAAQ,GAAsB;YAClC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG;YACjC,MAAM;YACN,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC;YAC1B,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;YACtB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;SACnD,CAAC;QAEF,OAAO,QAAoB,CAAC;IAC9B,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -4,6 +4,7 @@
4
4
  export * from './openai';
5
5
  export * from './gemini';
6
6
  export * from './claude';
7
+ export * from './openrouter';
7
8
  export * from './chat';
8
9
  export * from './prompts';
9
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/constants/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/constants/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC"}
@@ -20,6 +20,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
20
20
  __exportStar(require("./openai"), exports);
21
21
  __exportStar(require("./gemini"), exports);
22
22
  __exportStar(require("./claude"), exports);
23
+ __exportStar(require("./openrouter"), exports);
23
24
  __exportStar(require("./chat"), exports);
24
25
  __exportStar(require("./prompts"), exports);
25
26
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/constants/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;GAEG;AACH,2CAAyB;AACzB,2CAAyB;AACzB,2CAAyB;AACzB,yCAAuB;AACvB,4CAA0B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/constants/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;GAEG;AACH,2CAAyB;AACzB,2CAAyB;AACzB,2CAAyB;AACzB,+CAA6B;AAC7B,yCAAuB;AACvB,4CAA0B"}
@@ -0,0 +1,21 @@
1
+ export declare const ENDPOINT_OPENROUTER_API = "https://openrouter.ai/api/v1/chat/completions";
2
+ export declare const MODEL_GPT_OSS_20B_FREE = "openai/gpt-oss-20b:free";
3
+ export declare const OPENROUTER_FREE_MODELS: string[];
4
+ export declare const OPENROUTER_VISION_SUPPORTED_MODELS: never[];
5
+ export declare const OPENROUTER_FREE_RATE_LIMIT_PER_MINUTE = 20;
6
+ export declare const OPENROUTER_FREE_DAILY_LIMIT_LOW_CREDITS = 50;
7
+ export declare const OPENROUTER_FREE_DAILY_LIMIT_HIGH_CREDITS = 1000;
8
+ export declare const OPENROUTER_CREDITS_THRESHOLD = 10;
9
+ /**
10
+ * Check if a model is a free tier model
11
+ * @param model Model name to check
12
+ * @returns True if the model is free tier
13
+ */
14
+ export declare function isOpenRouterFreeModel(model: string): boolean;
15
+ /**
16
+ * Check if a model supports vision on OpenRouter
17
+ * @param model Model name to check
18
+ * @returns True if the model supports vision
19
+ */
20
+ export declare function isOpenRouterVisionModel(model: string): boolean;
21
+ //# sourceMappingURL=openrouter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openrouter.d.ts","sourceRoot":"","sources":["../../../src/constants/openrouter.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,uBAAuB,kDACa,CAAC;AAGlD,eAAO,MAAM,sBAAsB,4BAA4B,CAAC;AAGhE,eAAO,MAAM,sBAAsB,UAA2B,CAAC;AAG/D,eAAO,MAAM,kCAAkC,SAAK,CAAC;AAGrD,eAAO,MAAM,qCAAqC,KAAK,CAAC;AACxD,eAAO,MAAM,uCAAuC,KAAK,CAAC;AAC1D,eAAO,MAAM,wCAAwC,OAAO,CAAC;AAC7D,eAAO,MAAM,4BAA4B,KAAK,CAAC;AAE/C;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAI9D"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OPENROUTER_CREDITS_THRESHOLD = exports.OPENROUTER_FREE_DAILY_LIMIT_HIGH_CREDITS = exports.OPENROUTER_FREE_DAILY_LIMIT_LOW_CREDITS = exports.OPENROUTER_FREE_RATE_LIMIT_PER_MINUTE = exports.OPENROUTER_VISION_SUPPORTED_MODELS = exports.OPENROUTER_FREE_MODELS = exports.MODEL_GPT_OSS_20B_FREE = exports.ENDPOINT_OPENROUTER_API = void 0;
4
+ exports.isOpenRouterFreeModel = isOpenRouterFreeModel;
5
+ exports.isOpenRouterVisionModel = isOpenRouterVisionModel;
6
+ exports.ENDPOINT_OPENROUTER_API = 'https://openrouter.ai/api/v1/chat/completions';
7
+ // OpenRouter models
8
+ exports.MODEL_GPT_OSS_20B_FREE = 'openai/gpt-oss-20b:free';
9
+ // Free tier models
10
+ exports.OPENROUTER_FREE_MODELS = [exports.MODEL_GPT_OSS_20B_FREE];
11
+ // Vision supported models on OpenRouter
12
+ exports.OPENROUTER_VISION_SUPPORTED_MODELS = [];
13
+ // Rate limits for free tier
14
+ exports.OPENROUTER_FREE_RATE_LIMIT_PER_MINUTE = 20;
15
+ exports.OPENROUTER_FREE_DAILY_LIMIT_LOW_CREDITS = 50;
16
+ exports.OPENROUTER_FREE_DAILY_LIMIT_HIGH_CREDITS = 1000;
17
+ exports.OPENROUTER_CREDITS_THRESHOLD = 10;
18
+ /**
19
+ * Check if a model is a free tier model
20
+ * @param model Model name to check
21
+ * @returns True if the model is free tier
22
+ */
23
+ function isOpenRouterFreeModel(model) {
24
+ return exports.OPENROUTER_FREE_MODELS.some((freeModel) => model.includes(freeModel));
25
+ }
26
+ /**
27
+ * Check if a model supports vision on OpenRouter
28
+ * @param model Model name to check
29
+ * @returns True if the model supports vision
30
+ */
31
+ function isOpenRouterVisionModel(model) {
32
+ return exports.OPENROUTER_VISION_SUPPORTED_MODELS.some((visionModel) => model.includes(visionModel));
33
+ }
34
+ //# sourceMappingURL=openrouter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openrouter.js","sourceRoot":"","sources":["../../../src/constants/openrouter.ts"],"names":[],"mappings":";;;AAuBA,sDAEC;AAOD,0DAIC;AApCY,QAAA,uBAAuB,GAClC,+CAA+C,CAAC;AAElD,oBAAoB;AACP,QAAA,sBAAsB,GAAG,yBAAyB,CAAC;AAEhE,mBAAmB;AACN,QAAA,sBAAsB,GAAG,CAAC,8BAAsB,CAAC,CAAC;AAE/D,wCAAwC;AAC3B,QAAA,kCAAkC,GAAG,EAAE,CAAC;AAErD,4BAA4B;AACf,QAAA,qCAAqC,GAAG,EAAE,CAAC;AAC3C,QAAA,uCAAuC,GAAG,EAAE,CAAC;AAC7C,QAAA,wCAAwC,GAAG,IAAI,CAAC;AAChD,QAAA,4BAA4B,GAAG,EAAE,CAAC;AAE/C;;;;GAIG;AACH,SAAgB,qBAAqB,CAAC,KAAa;IACjD,OAAO,8BAAsB,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED;;;;GAIG;AACH,SAAgB,uBAAuB,CAAC,KAAa;IACnD,OAAO,0CAAkC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAC7D,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAC5B,CAAC;AACJ,CAAC"}
@@ -12,6 +12,9 @@ export { GeminiChatService } from './services/providers/gemini/GeminiChatService
12
12
  export { GeminiChatServiceProvider } from './services/providers/gemini/GeminiChatServiceProvider';
13
13
  export { ClaudeChatService } from './services/providers/claude/ClaudeChatService';
14
14
  export { ClaudeChatServiceProvider } from './services/providers/claude/ClaudeChatServiceProvider';
15
+ export { OpenRouterChatService } from './services/providers/openrouter/OpenRouterChatService';
16
+ export { OpenRouterChatServiceProvider } from './services/providers/openrouter/OpenRouterChatServiceProvider';
15
17
  export * from './constants';
16
18
  export * from './utils';
19
+ export { installGASFetch } from './adapters/gasFetch';
17
20
  //# sourceMappingURL=index.d.ts.map
@@ -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,mBAAmB,GACpB,MAAM,0CAA0C,CAAC;AAGlD,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,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,EAAE,yBAAyB,EAAE,MAAM,uDAAuD,CAAC;AAGlG,cAAc,aAAa,CAAC;AAG5B,cAAc,SAAS,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,mBAAmB,GACpB,MAAM,0CAA0C,CAAC;AAGlD,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,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,cAAc,aAAa,CAAC;AAG5B,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC"}
package/dist/cjs/index.js CHANGED
@@ -18,7 +18,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
18
18
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
19
19
  };
20
20
  Object.defineProperty(exports, "__esModule", { value: true });
21
- exports.ClaudeChatServiceProvider = exports.ClaudeChatService = exports.GeminiChatServiceProvider = exports.GeminiChatService = exports.OpenAIChatServiceProvider = exports.OpenAIChatService = exports.ChatServiceFactory = void 0;
21
+ exports.installGASFetch = exports.OpenRouterChatServiceProvider = exports.OpenRouterChatService = exports.ClaudeChatServiceProvider = exports.ClaudeChatService = exports.GeminiChatServiceProvider = exports.GeminiChatService = exports.OpenAIChatServiceProvider = exports.OpenAIChatService = exports.ChatServiceFactory = void 0;
22
22
  // Type definitions exports
23
23
  __exportStar(require("./types"), exports);
24
24
  var ChatServiceFactory_1 = require("./services/ChatServiceFactory");
@@ -38,8 +38,16 @@ var ClaudeChatService_1 = require("./services/providers/claude/ClaudeChatService
38
38
  Object.defineProperty(exports, "ClaudeChatService", { enumerable: true, get: function () { return ClaudeChatService_1.ClaudeChatService; } });
39
39
  var ClaudeChatServiceProvider_1 = require("./services/providers/claude/ClaudeChatServiceProvider");
40
40
  Object.defineProperty(exports, "ClaudeChatServiceProvider", { enumerable: true, get: function () { return ClaudeChatServiceProvider_1.ClaudeChatServiceProvider; } });
41
+ // OpenRouter provider exports
42
+ var OpenRouterChatService_1 = require("./services/providers/openrouter/OpenRouterChatService");
43
+ Object.defineProperty(exports, "OpenRouterChatService", { enumerable: true, get: function () { return OpenRouterChatService_1.OpenRouterChatService; } });
44
+ var OpenRouterChatServiceProvider_1 = require("./services/providers/openrouter/OpenRouterChatServiceProvider");
45
+ Object.defineProperty(exports, "OpenRouterChatServiceProvider", { enumerable: true, get: function () { return OpenRouterChatServiceProvider_1.OpenRouterChatServiceProvider; } });
41
46
  // Constants exports
42
47
  __exportStar(require("./constants"), exports);
43
48
  // Utility exports
44
49
  __exportStar(require("./utils"), exports);
50
+ // Adapters
51
+ var gasFetch_1 = require("./adapters/gasFetch");
52
+ Object.defineProperty(exports, "installGASFetch", { enumerable: true, get: function () { return gasFetch_1.installGASFetch; } });
45
53
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;AAEH,2BAA2B;AAC3B,0CAAwB;AAIxB,oEAAmE;AAA1D,wHAAA,kBAAkB,OAAA;AAQ3B,0BAA0B;AAC1B,mFAAkF;AAAzE,sHAAA,iBAAiB,OAAA;AAC1B,mGAAkG;AAAzF,sIAAA,yBAAyB,OAAA;AAElC,0BAA0B;AAC1B,mFAAkF;AAAzE,sHAAA,iBAAiB,OAAA;AAC1B,mGAAkG;AAAzF,sIAAA,yBAAyB,OAAA;AAElC,0BAA0B;AAC1B,mFAAkF;AAAzE,sHAAA,iBAAiB,OAAA;AAC1B,mGAAkG;AAAzF,sIAAA,yBAAyB,OAAA;AAElC,oBAAoB;AACpB,8CAA4B;AAE5B,kBAAkB;AAClB,0CAAwB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;AAEH,2BAA2B;AAC3B,0CAAwB;AAIxB,oEAAmE;AAA1D,wHAAA,kBAAkB,OAAA;AAQ3B,0BAA0B;AAC1B,mFAAkF;AAAzE,sHAAA,iBAAiB,OAAA;AAC1B,mGAAkG;AAAzF,sIAAA,yBAAyB,OAAA;AAElC,0BAA0B;AAC1B,mFAAkF;AAAzE,sHAAA,iBAAiB,OAAA;AAC1B,mGAAkG;AAAzF,sIAAA,yBAAyB,OAAA;AAElC,0BAA0B;AAC1B,mFAAkF;AAAzE,sHAAA,iBAAiB,OAAA;AAC1B,mGAAkG;AAAzF,sIAAA,yBAAyB,OAAA;AAElC,8BAA8B;AAC9B,+FAA8F;AAArF,8HAAA,qBAAqB,OAAA;AAC9B,+GAA8G;AAArG,8IAAA,6BAA6B,OAAA;AAEtC,oBAAoB;AACpB,8CAA4B;AAE5B,kBAAkB;AAClB,0CAAwB;AAExB,WAAW;AACX,gDAAsD;AAA7C,2GAAA,eAAe,OAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ChatServiceFactory.d.ts","sourceRoot":"","sources":["../../../src/services/ChatServiceFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,iCAAiC,CAAC;AAKzC;;;GAGG;AACH,qBAAa,kBAAkB;IAC7B,kCAAkC;IAClC,OAAO,CAAC,MAAM,CAAC,SAAS,CAA+C;IAEvE;;;OAGG;IACH,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IAI5D;;;;;OAKG;IACH,MAAM,CAAC,iBAAiB,CACtB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,kBAAkB,GAC1B,WAAW;IAQd;;;OAGG;IACH,MAAM,CAAC,YAAY,IAAI,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC;IAIvD;;;OAGG;IACH,MAAM,CAAC,qBAAqB,IAAI,MAAM,EAAE;IAIxC;;;;OAIG;IACH,MAAM,CAAC,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE;CAI1D"}
1
+ {"version":3,"file":"ChatServiceFactory.d.ts","sourceRoot":"","sources":["../../../src/services/ChatServiceFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,iCAAiC,CAAC;AAMzC;;;GAGG;AACH,qBAAa,kBAAkB;IAC7B,kCAAkC;IAClC,OAAO,CAAC,MAAM,CAAC,SAAS,CAA+C;IAEvE;;;OAGG;IACH,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IAI5D;;;;;OAKG;IACH,MAAM,CAAC,iBAAiB,CACtB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,kBAAkB,GAC1B,WAAW;IAQd;;;OAGG;IACH,MAAM,CAAC,YAAY,IAAI,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC;IAIvD;;;OAGG;IACH,MAAM,CAAC,qBAAqB,IAAI,MAAM,EAAE;IAIxC;;;;OAIG;IACH,MAAM,CAAC,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE;CAI1D"}
@@ -4,6 +4,7 @@ exports.ChatServiceFactory = void 0;
4
4
  const OpenAIChatServiceProvider_1 = require("./providers/openai/OpenAIChatServiceProvider");
5
5
  const GeminiChatServiceProvider_1 = require("./providers/gemini/GeminiChatServiceProvider");
6
6
  const ClaudeChatServiceProvider_1 = require("./providers/claude/ClaudeChatServiceProvider");
7
+ const OpenRouterChatServiceProvider_1 = require("./providers/openrouter/OpenRouterChatServiceProvider");
7
8
  /**
8
9
  * Chat service factory
9
10
  * Manages and creates various AI providers
@@ -62,4 +63,6 @@ ChatServiceFactory.registerProvider(new OpenAIChatServiceProvider_1.OpenAIChatSe
62
63
  ChatServiceFactory.registerProvider(new GeminiChatServiceProvider_1.GeminiChatServiceProvider());
63
64
  // Register Claude as a provider
64
65
  ChatServiceFactory.registerProvider(new ClaudeChatServiceProvider_1.ClaudeChatServiceProvider());
66
+ // Register OpenRouter as a provider
67
+ ChatServiceFactory.registerProvider(new OpenRouterChatServiceProvider_1.OpenRouterChatServiceProvider());
65
68
  //# sourceMappingURL=ChatServiceFactory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChatServiceFactory.js","sourceRoot":"","sources":["../../../src/services/ChatServiceFactory.ts"],"names":[],"mappings":";;;AAKA,4FAAyF;AACzF,4FAAyF;AACzF,4FAAyF;AAEzF;;;GAGG;AACH,MAAa,kBAAkB;IAI7B;;;OAGG;IACH,MAAM,CAAC,gBAAgB,CAAC,QAA6B;QACnD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,eAAe,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,iBAAiB,CACtB,YAAoB,EACpB,OAA2B;QAE3B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,0BAA0B,YAAY,EAAE,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,YAAY;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,qBAAqB;QAC1B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,kBAAkB,CAAC,YAAoB;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAClD,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACvD,CAAC;;AArDH,gDAsDC;AArDC,kCAAkC;AACnB,4BAAS,GAAqC,IAAI,GAAG,EAAE,CAAC;AAsDzE,gCAAgC;AAChC,kBAAkB,CAAC,gBAAgB,CAAC,IAAI,qDAAyB,EAAE,CAAC,CAAC;AACrE,gCAAgC;AAChC,kBAAkB,CAAC,gBAAgB,CAAC,IAAI,qDAAyB,EAAE,CAAC,CAAC;AACrE,gCAAgC;AAChC,kBAAkB,CAAC,gBAAgB,CAAC,IAAI,qDAAyB,EAAE,CAAC,CAAC"}
1
+ {"version":3,"file":"ChatServiceFactory.js","sourceRoot":"","sources":["../../../src/services/ChatServiceFactory.ts"],"names":[],"mappings":";;;AAKA,4FAAyF;AACzF,4FAAyF;AACzF,4FAAyF;AACzF,wGAAqG;AAErG;;;GAGG;AACH,MAAa,kBAAkB;IAI7B;;;OAGG;IACH,MAAM,CAAC,gBAAgB,CAAC,QAA6B;QACnD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,eAAe,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,iBAAiB,CACtB,YAAoB,EACpB,OAA2B;QAE3B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,0BAA0B,YAAY,EAAE,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,YAAY;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,qBAAqB;QAC1B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,kBAAkB,CAAC,YAAoB;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAClD,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACvD,CAAC;;AArDH,gDAsDC;AArDC,kCAAkC;AACnB,4BAAS,GAAqC,IAAI,GAAG,EAAE,CAAC;AAsDzE,gCAAgC;AAChC,kBAAkB,CAAC,gBAAgB,CAAC,IAAI,qDAAyB,EAAE,CAAC,CAAC;AACrE,gCAAgC;AAChC,kBAAkB,CAAC,gBAAgB,CAAC,IAAI,qDAAyB,EAAE,CAAC,CAAC;AACrE,gCAAgC;AAChC,kBAAkB,CAAC,gBAAgB,CAAC,IAAI,qDAAyB,EAAE,CAAC,CAAC;AACrE,oCAAoC;AACpC,kBAAkB,CAAC,gBAAgB,CAAC,IAAI,6DAA6B,EAAE,CAAC,CAAC"}
@@ -16,7 +16,7 @@ export interface ChatServiceOptions {
16
16
  responseLength?: ChatResponseLength;
17
17
  /** Verbosity level for GPT-5 models (OpenAI only) */
18
18
  verbosity?: 'low' | 'medium' | 'high';
19
- /** Reasoning effort level for GPT-5 models (OpenAI only) */
19
+ /** Reasoning effort level for GPT-5 models (OpenAI) and gpt-oss models (OpenRouter) */
20
20
  reasoning_effort?: 'minimal' | 'low' | 'medium' | 'high';
21
21
  /** GPT-5 usage preset (OpenAI only) - overrides individual reasoning/verbosity settings */
22
22
  gpt5Preset?: GPT5PresetKey;
@@ -24,6 +24,10 @@ export interface ChatServiceOptions {
24
24
  gpt5EndpointPreference?: 'chat' | 'responses' | 'auto';
25
25
  /** Enable reasoning summary for GPT-5 models (OpenAI only) - requires organization verification */
26
26
  enableReasoningSummary?: boolean;
27
+ /** Include reasoning in response (OpenRouter only) - default false to avoid empty responses */
28
+ includeReasoning?: boolean;
29
+ /** Maximum tokens allocated for reasoning (OpenRouter only) */
30
+ reasoningMaxTokens?: number;
27
31
  /** Additional provider-specific options */
28
32
  [key: string]: any;
29
33
  }
@@ -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;AAEzE;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,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,sEAAsE;IACtE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8BAA8B;IAC9B,cAAc,CAAC,EAAE,kBAAkB,CAAC;IACpC,qDAAqD;IACrD,SAAS,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACtC,4DAA4D;IAC5D,gBAAgB,CAAC,EAAE,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACzD,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,2CAA2C;IAC3C,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW,CAAC;IAE5D;;;OAGG;IACH,eAAe,IAAI,MAAM,CAAC;IAE1B;;;OAGG;IACH,kBAAkB,IAAI,MAAM,EAAE,CAAC;IAE/B;;;OAGG;IACH,eAAe,IAAI,MAAM,CAAC;IAE1B;;;OAGG;IACH,cAAc,IAAI,OAAO,CAAC;CAC3B"}
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;AAEzE;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,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,sEAAsE;IACtE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,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,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACzD,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,2CAA2C;IAC3C,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW,CAAC;IAE5D;;;OAGG;IACH,eAAe,IAAI,MAAM,CAAC;IAE1B;;;OAGG;IACH,kBAAkB,IAAI,MAAM,EAAE,CAAC;IAE/B;;;OAGG;IACH,eAAe,IAAI,MAAM,CAAC;IAE1B;;;OAGG;IACH,cAAc,IAAI,OAAO,CAAC;CAC3B"}
@@ -0,0 +1,108 @@
1
+ import { ChatService } from '../../ChatService';
2
+ import { Message, MessageWithVision } from '../../../types';
3
+ import { ToolDefinition, ToolChatCompletion } from '../../../types';
4
+ import { ChatResponseLength } from '../../../constants/chat';
5
+ /**
6
+ * OpenRouter implementation of ChatService
7
+ * OpenRouter provides access to multiple AI models through a unified API
8
+ */
9
+ export declare class OpenRouterChatService implements ChatService {
10
+ /** Provider name */
11
+ readonly provider: string;
12
+ private apiKey;
13
+ private model;
14
+ private visionModel;
15
+ private tools;
16
+ private endpoint;
17
+ private responseLength?;
18
+ private appName?;
19
+ private appUrl?;
20
+ private reasoning_effort?;
21
+ private includeReasoning?;
22
+ private reasoningMaxTokens?;
23
+ private lastRequestTime;
24
+ private requestCount;
25
+ /**
26
+ * Constructor
27
+ * @param apiKey OpenRouter API key
28
+ * @param model Name of the model to use
29
+ * @param visionModel Name of the vision model
30
+ * @param tools Tool definitions (optional)
31
+ * @param endpoint API endpoint (optional)
32
+ * @param responseLength Response length configuration (optional)
33
+ * @param appName Application name for OpenRouter analytics (optional)
34
+ * @param appUrl Application URL for OpenRouter analytics (optional)
35
+ * @param reasoning_effort Reasoning effort level (optional)
36
+ * @param includeReasoning Whether to include reasoning in response (optional)
37
+ * @param reasoningMaxTokens Maximum tokens for reasoning (optional)
38
+ */
39
+ constructor(apiKey: string, model?: string, visionModel?: string, tools?: ToolDefinition[], endpoint?: string, responseLength?: ChatResponseLength, appName?: string, appUrl?: string, reasoning_effort?: 'minimal' | 'low' | 'medium' | 'high', includeReasoning?: boolean, reasoningMaxTokens?: number);
40
+ /**
41
+ * Get the current model name
42
+ * @returns Model name
43
+ */
44
+ getModel(): string;
45
+ /**
46
+ * Get the current vision model name
47
+ * @returns Vision model name
48
+ */
49
+ getVisionModel(): string;
50
+ /**
51
+ * Apply rate limiting for free tier models
52
+ */
53
+ private applyRateLimiting;
54
+ /**
55
+ * Process chat messages
56
+ * @param messages Array of messages to send
57
+ * @param onPartialResponse Callback to receive each part of streaming response
58
+ * @param onCompleteResponse Callback to execute when response is complete
59
+ */
60
+ processChat(messages: Message[], onPartialResponse: (text: string) => void, onCompleteResponse: (text: string) => Promise<void>): Promise<void>;
61
+ /**
62
+ * Process chat messages with images
63
+ * @param messages Array of messages to send (including images)
64
+ * @param onPartialResponse Callback to receive each part of streaming response
65
+ * @param onCompleteResponse Callback to execute when response is complete
66
+ */
67
+ processVisionChat(messages: MessageWithVision[], onPartialResponse: (text: string) => void, onCompleteResponse: (text: string) => Promise<void>): Promise<void>;
68
+ /**
69
+ * Process chat messages with tools (text only)
70
+ * @param messages Array of messages to send
71
+ * @param stream Whether to use streaming
72
+ * @param onPartialResponse Callback for partial responses
73
+ * @param maxTokens Maximum tokens for response (optional)
74
+ * @returns Tool chat completion
75
+ */
76
+ chatOnce(messages: Message[], stream?: boolean, onPartialResponse?: (text: string) => void, maxTokens?: number): Promise<ToolChatCompletion>;
77
+ /**
78
+ * Process vision chat messages with tools
79
+ * @param messages Array of messages to send (including images)
80
+ * @param stream Whether to use streaming
81
+ * @param onPartialResponse Callback for partial responses
82
+ * @param maxTokens Maximum tokens for response (optional)
83
+ * @returns Tool chat completion
84
+ */
85
+ visionChatOnce(messages: MessageWithVision[], stream?: boolean, onPartialResponse?: (text: string) => void, maxTokens?: number): Promise<ToolChatCompletion>;
86
+ /**
87
+ * Call OpenRouter API
88
+ */
89
+ private callOpenRouter;
90
+ /**
91
+ * Build request body for OpenRouter API (OpenAI-compatible format)
92
+ */
93
+ private buildRequestBody;
94
+ /**
95
+ * Handle streaming response from OpenRouter
96
+ * OpenRouter uses SSE format with potential comment lines
97
+ */
98
+ private handleStream;
99
+ /**
100
+ * Parse streaming response with tool support
101
+ */
102
+ private parseStream;
103
+ /**
104
+ * Parse non-streaming response
105
+ */
106
+ private parseOneShot;
107
+ }
108
+ //# sourceMappingURL=OpenRouterChatService.d.ts.map