@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.
- package/README.ja.md +89 -3
- package/README.md +90 -4
- package/dist/cjs/adapters/gasFetch.d.ts +6 -0
- package/dist/cjs/adapters/gasFetch.d.ts.map +1 -0
- package/dist/cjs/adapters/gasFetch.js +53 -0
- package/dist/cjs/adapters/gasFetch.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/constants/openrouter.d.ts +21 -0
- package/dist/cjs/constants/openrouter.d.ts.map +1 -0
- package/dist/cjs/constants/openrouter.js +34 -0
- package/dist/cjs/constants/openrouter.js.map +1 -0
- package/dist/cjs/index.d.ts +3 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +9 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/services/ChatServiceFactory.d.ts.map +1 -1
- package/dist/cjs/services/ChatServiceFactory.js +3 -0
- package/dist/cjs/services/ChatServiceFactory.js.map +1 -1
- package/dist/cjs/services/providers/ChatServiceProvider.d.ts +5 -1
- package/dist/cjs/services/providers/ChatServiceProvider.d.ts.map +1 -1
- package/dist/cjs/services/providers/openrouter/OpenRouterChatService.d.ts +108 -0
- package/dist/cjs/services/providers/openrouter/OpenRouterChatService.d.ts.map +1 -0
- package/dist/cjs/services/providers/openrouter/OpenRouterChatService.js +397 -0
- package/dist/cjs/services/providers/openrouter/OpenRouterChatService.js.map +1 -0
- package/dist/cjs/services/providers/openrouter/OpenRouterChatServiceProvider.d.ts +53 -0
- package/dist/cjs/services/providers/openrouter/OpenRouterChatServiceProvider.d.ts.map +1 -0
- package/dist/cjs/services/providers/openrouter/OpenRouterChatServiceProvider.js +89 -0
- package/dist/cjs/services/providers/openrouter/OpenRouterChatServiceProvider.js.map +1 -0
- package/dist/cjs/utils/chatServiceHttpClient.d.ts +8 -0
- package/dist/cjs/utils/chatServiceHttpClient.d.ts.map +1 -1
- package/dist/cjs/utils/chatServiceHttpClient.js +29 -10
- package/dist/cjs/utils/chatServiceHttpClient.js.map +1 -1
- package/dist/cjs/utils/index.d.ts +1 -0
- package/dist/cjs/utils/index.d.ts.map +1 -1
- package/dist/cjs/utils/index.js +1 -0
- package/dist/cjs/utils/index.js.map +1 -1
- package/dist/cjs/utils/runOnce.d.ts +8 -0
- package/dist/cjs/utils/runOnce.d.ts.map +1 -0
- package/dist/cjs/utils/runOnce.js +13 -0
- package/dist/cjs/utils/runOnce.js.map +1 -0
- package/dist/esm/adapters/gasFetch.d.ts +6 -0
- package/dist/esm/adapters/gasFetch.d.ts.map +1 -0
- package/dist/esm/adapters/gasFetch.js +50 -0
- package/dist/esm/adapters/gasFetch.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/constants/openrouter.d.ts +21 -0
- package/dist/esm/constants/openrouter.d.ts.map +1 -0
- package/dist/esm/constants/openrouter.js +29 -0
- package/dist/esm/constants/openrouter.js.map +1 -0
- package/dist/esm/index.d.ts +3 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +5 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/services/ChatServiceFactory.d.ts.map +1 -1
- package/dist/esm/services/ChatServiceFactory.js +3 -0
- package/dist/esm/services/ChatServiceFactory.js.map +1 -1
- package/dist/esm/services/providers/ChatServiceProvider.d.ts +5 -1
- package/dist/esm/services/providers/ChatServiceProvider.d.ts.map +1 -1
- package/dist/esm/services/providers/openrouter/OpenRouterChatService.d.ts +108 -0
- package/dist/esm/services/providers/openrouter/OpenRouterChatService.d.ts.map +1 -0
- package/dist/esm/services/providers/openrouter/OpenRouterChatService.js +393 -0
- package/dist/esm/services/providers/openrouter/OpenRouterChatService.js.map +1 -0
- package/dist/esm/services/providers/openrouter/OpenRouterChatServiceProvider.d.ts +53 -0
- package/dist/esm/services/providers/openrouter/OpenRouterChatServiceProvider.d.ts.map +1 -0
- package/dist/esm/services/providers/openrouter/OpenRouterChatServiceProvider.js +85 -0
- package/dist/esm/services/providers/openrouter/OpenRouterChatServiceProvider.js.map +1 -0
- package/dist/esm/utils/chatServiceHttpClient.d.ts +8 -0
- package/dist/esm/utils/chatServiceHttpClient.d.ts.map +1 -1
- package/dist/esm/utils/chatServiceHttpClient.js +29 -10
- package/dist/esm/utils/chatServiceHttpClient.js.map +1 -1
- package/dist/esm/utils/index.d.ts +1 -0
- package/dist/esm/utils/index.d.ts.map +1 -1
- package/dist/esm/utils/index.js +1 -0
- package/dist/esm/utils/index.js.map +1 -1
- package/dist/esm/utils/runOnce.d.ts +8 -0
- package/dist/esm/utils/runOnce.d.ts.map +1 -0
- package/dist/esm/utils/runOnce.js +10 -0
- package/dist/esm/utils/runOnce.js.map +1 -0
- package/dist/umd/aituber-onair-chat.js +2997 -0
- package/dist/umd/aituber-onair-chat.min.js +19 -0
- package/package.json +12 -6
package/README.ja.md
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|

|
|
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
|

|
|
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
|
|
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),
|
|
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
|
|
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 @@
|
|
|
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"}
|
|
@@ -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"}
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -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
|
package/dist/cjs/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,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
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -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;
|
|
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;
|
|
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
|
|
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,
|
|
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
|