@teleforge-ai/anya 0.5.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.md +69 -0
- package/assets/anya.jpg +0 -0
- package/assets/anya.png +0 -0
- package/dist/chat/session.d.ts +15 -0
- package/dist/chat/session.d.ts.map +1 -0
- package/dist/chat/session.js +59 -0
- package/dist/chat/session.js.map +1 -0
- package/dist/chat/stream.d.ts +13 -0
- package/dist/chat/stream.d.ts.map +1 -0
- package/dist/chat/stream.js +86 -0
- package/dist/chat/stream.js.map +1 -0
- package/dist/commands/providerFactory.d.ts +12 -0
- package/dist/commands/providerFactory.d.ts.map +1 -0
- package/dist/commands/providerFactory.js +73 -0
- package/dist/commands/providerFactory.js.map +1 -0
- package/dist/config/encryption.d.ts +3 -0
- package/dist/config/encryption.d.ts.map +1 -0
- package/dist/config/encryption.js +47 -0
- package/dist/config/encryption.js.map +1 -0
- package/dist/config/schema.d.ts +94 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +28 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/store.d.ts +40 -0
- package/dist/config/store.d.ts.map +1 -0
- package/dist/config/store.js +195 -0
- package/dist/config/store.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +97 -0
- package/dist/index.js.map +1 -0
- package/dist/providers/anthropic.d.ts +10 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +128 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/base.d.ts +39 -0
- package/dist/providers/base.d.ts.map +1 -0
- package/dist/providers/base.js +28 -0
- package/dist/providers/base.js.map +1 -0
- package/dist/providers/custom.d.ts +11 -0
- package/dist/providers/custom.d.ts.map +1 -0
- package/dist/providers/custom.js +90 -0
- package/dist/providers/custom.js.map +1 -0
- package/dist/providers/deepseek.d.ts +10 -0
- package/dist/providers/deepseek.d.ts.map +1 -0
- package/dist/providers/deepseek.js +88 -0
- package/dist/providers/deepseek.js.map +1 -0
- package/dist/providers/google.d.ts +10 -0
- package/dist/providers/google.d.ts.map +1 -0
- package/dist/providers/google.js +131 -0
- package/dist/providers/google.js.map +1 -0
- package/dist/providers/groq.d.ts +10 -0
- package/dist/providers/groq.d.ts.map +1 -0
- package/dist/providers/groq.js +88 -0
- package/dist/providers/groq.js.map +1 -0
- package/dist/providers/index.d.ts +10 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +39 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/mistral.d.ts +10 -0
- package/dist/providers/mistral.d.ts.map +1 -0
- package/dist/providers/mistral.js +88 -0
- package/dist/providers/mistral.js.map +1 -0
- package/dist/providers/ollama.d.ts +11 -0
- package/dist/providers/ollama.d.ts.map +1 -0
- package/dist/providers/ollama.js +82 -0
- package/dist/providers/ollama.js.map +1 -0
- package/dist/providers/openai.d.ts +10 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +127 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/opencode.d.ts +11 -0
- package/dist/providers/opencode.d.ts.map +1 -0
- package/dist/providers/opencode.js +99 -0
- package/dist/providers/opencode.js.map +1 -0
- package/dist/providers/openrouter.d.ts +10 -0
- package/dist/providers/openrouter.d.ts.map +1 -0
- package/dist/providers/openrouter.js +119 -0
- package/dist/providers/openrouter.js.map +1 -0
- package/dist/providers/together.d.ts +10 -0
- package/dist/providers/together.d.ts.map +1 -0
- package/dist/providers/together.js +88 -0
- package/dist/providers/together.js.map +1 -0
- package/dist/providers/xai.d.ts +10 -0
- package/dist/providers/xai.d.ts.map +1 -0
- package/dist/providers/xai.js +88 -0
- package/dist/providers/xai.js.map +1 -0
- package/dist/tui/ansi.d.ts +49 -0
- package/dist/tui/ansi.d.ts.map +1 -0
- package/dist/tui/ansi.js +208 -0
- package/dist/tui/ansi.js.map +1 -0
- package/dist/tui/components/anyaArt.d.ts +2 -0
- package/dist/tui/components/anyaArt.d.ts.map +1 -0
- package/dist/tui/components/anyaArt.js +20 -0
- package/dist/tui/components/anyaArt.js.map +1 -0
- package/dist/tui/components/dialog.d.ts +15 -0
- package/dist/tui/components/dialog.d.ts.map +1 -0
- package/dist/tui/components/dialog.js +115 -0
- package/dist/tui/components/dialog.js.map +1 -0
- package/dist/tui/components/messages.d.ts +10 -0
- package/dist/tui/components/messages.d.ts.map +1 -0
- package/dist/tui/components/messages.js +100 -0
- package/dist/tui/components/messages.js.map +1 -0
- package/dist/tui/render.d.ts +3 -0
- package/dist/tui/render.d.ts.map +1 -0
- package/dist/tui/render.js +137 -0
- package/dist/tui/render.js.map +1 -0
- package/dist/tui/screen.d.ts +19 -0
- package/dist/tui/screen.d.ts.map +1 -0
- package/dist/tui/screen.js +98 -0
- package/dist/tui/screen.js.map +1 -0
- package/dist/tui/state.d.ts +41 -0
- package/dist/tui/state.d.ts.map +1 -0
- package/dist/tui/state.js +306 -0
- package/dist/tui/state.js.map +1 -0
- package/dist/ui/App.d.ts +3 -0
- package/dist/ui/App.d.ts.map +1 -0
- package/dist/ui/App.js +207 -0
- package/dist/ui/App.js.map +1 -0
- package/dist/ui/components/CommandPalette.d.ts +8 -0
- package/dist/ui/components/CommandPalette.d.ts.map +1 -0
- package/dist/ui/components/CommandPalette.js +63 -0
- package/dist/ui/components/CommandPalette.js.map +1 -0
- package/dist/ui/components/HomeScreen.d.ts +8 -0
- package/dist/ui/components/HomeScreen.d.ts.map +1 -0
- package/dist/ui/components/HomeScreen.js +29 -0
- package/dist/ui/components/HomeScreen.js.map +1 -0
- package/dist/ui/components/ImageRenderer.d.ts +8 -0
- package/dist/ui/components/ImageRenderer.d.ts.map +1 -0
- package/dist/ui/components/ImageRenderer.js +42 -0
- package/dist/ui/components/ImageRenderer.js.map +1 -0
- package/dist/ui/components/InputBox.d.ts +12 -0
- package/dist/ui/components/InputBox.d.ts.map +1 -0
- package/dist/ui/components/InputBox.js +96 -0
- package/dist/ui/components/InputBox.js.map +1 -0
- package/dist/ui/components/MessageList.d.ts +13 -0
- package/dist/ui/components/MessageList.d.ts.map +1 -0
- package/dist/ui/components/MessageList.js +10 -0
- package/dist/ui/components/MessageList.js.map +1 -0
- package/dist/ui/components/ModelSelector.d.ts +9 -0
- package/dist/ui/components/ModelSelector.d.ts.map +1 -0
- package/dist/ui/components/ModelSelector.js +77 -0
- package/dist/ui/components/ModelSelector.js.map +1 -0
- package/dist/ui/components/ProviderForm.d.ts +8 -0
- package/dist/ui/components/ProviderForm.d.ts.map +1 -0
- package/dist/ui/components/ProviderForm.js +88 -0
- package/dist/ui/components/ProviderForm.js.map +1 -0
- package/dist/ui/components/SettingsPanel.d.ts +7 -0
- package/dist/ui/components/SettingsPanel.d.ts.map +1 -0
- package/dist/ui/components/SettingsPanel.js +87 -0
- package/dist/ui/components/SettingsPanel.js.map +1 -0
- package/dist/ui/components/StatusBar.d.ts +8 -0
- package/dist/ui/components/StatusBar.d.ts.map +1 -0
- package/dist/ui/components/StatusBar.js +15 -0
- package/dist/ui/components/StatusBar.js.map +1 -0
- package/dist/ui/components/StatusDashboard.d.ts +7 -0
- package/dist/ui/components/StatusDashboard.d.ts.map +1 -0
- package/dist/ui/components/StatusDashboard.js +29 -0
- package/dist/ui/components/StatusDashboard.js.map +1 -0
- package/dist/ui/components/TitleBar.d.ts +8 -0
- package/dist/ui/components/TitleBar.d.ts.map +1 -0
- package/dist/ui/components/TitleBar.js +7 -0
- package/dist/ui/components/TitleBar.js.map +1 -0
- package/dist/ui/hooks/useConfig.d.ts +28 -0
- package/dist/ui/hooks/useConfig.d.ts.map +1 -0
- package/dist/ui/hooks/useConfig.js +20 -0
- package/dist/ui/hooks/useConfig.js.map +1 -0
- package/dist/ui/hooks/useModels.d.ts +10 -0
- package/dist/ui/hooks/useModels.d.ts.map +1 -0
- package/dist/ui/hooks/useModels.js +30 -0
- package/dist/ui/hooks/useModels.js.map +1 -0
- package/dist/ui/hooks/useProviders.d.ts +18 -0
- package/dist/ui/hooks/useProviders.d.ts.map +1 -0
- package/dist/ui/hooks/useProviders.js +56 -0
- package/dist/ui/hooks/useProviders.js.map +1 -0
- package/dist/ui/theme.d.ts +22 -0
- package/dist/ui/theme.d.ts.map +1 -0
- package/dist/ui/theme.js +99 -0
- package/dist/ui/theme.js.map +1 -0
- package/dist/utils/fuzzysearch.d.ts +8 -0
- package/dist/utils/fuzzysearch.d.ts.map +1 -0
- package/dist/utils/fuzzysearch.js +19 -0
- package/dist/utils/fuzzysearch.js.map +1 -0
- package/dist/utils/image.d.ts +8 -0
- package/dist/utils/image.d.ts.map +1 -0
- package/dist/utils/image.js +63 -0
- package/dist/utils/image.js.map +1 -0
- package/dist/utils/json.d.ts +2 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/json.js +9 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/logger.d.ts +19 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +23 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/terminal.d.ts +11 -0
- package/dist/utils/terminal.d.ts.map +1 -0
- package/dist/utils/terminal.js +38 -0
- package/dist/utils/terminal.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import * as os from 'os';
|
|
4
|
+
import { encrypt, decrypt } from './encryption.js';
|
|
5
|
+
const CONFIG_DIR = path.join(os.homedir(), '.config', 'anya');
|
|
6
|
+
const CONFIG_FILE = path.join(CONFIG_DIR, 'config.json');
|
|
7
|
+
function defaultConfig() {
|
|
8
|
+
return {
|
|
9
|
+
providers: {},
|
|
10
|
+
activeProvider: 'openai',
|
|
11
|
+
activeModel: 'gpt-4o',
|
|
12
|
+
favorites: [],
|
|
13
|
+
recent: [],
|
|
14
|
+
theme: 'pink',
|
|
15
|
+
defaultProvider: 'openai',
|
|
16
|
+
defaultModel: 'gpt-4o',
|
|
17
|
+
imageVisibility: true,
|
|
18
|
+
telemetry: false,
|
|
19
|
+
updateChannel: 'stable',
|
|
20
|
+
tokenUsage: { total: 0, requests: 0, successes: 0, failures: 0 },
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export function loadConfig() {
|
|
24
|
+
try {
|
|
25
|
+
if (fs.existsSync(CONFIG_FILE)) {
|
|
26
|
+
const raw = fs.readFileSync(CONFIG_FILE, 'utf-8');
|
|
27
|
+
const parsed = JSON.parse(raw);
|
|
28
|
+
const merged = { ...defaultConfig(), ...parsed };
|
|
29
|
+
if (parsed.providers) {
|
|
30
|
+
merged.providers = { ...defaultConfig().providers, ...parsed.providers };
|
|
31
|
+
}
|
|
32
|
+
return merged;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
}
|
|
37
|
+
return defaultConfig();
|
|
38
|
+
}
|
|
39
|
+
export function saveConfig(config) {
|
|
40
|
+
if (!fs.existsSync(CONFIG_DIR)) {
|
|
41
|
+
fs.mkdirSync(CONFIG_DIR, { recursive: true });
|
|
42
|
+
}
|
|
43
|
+
fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2), 'utf-8');
|
|
44
|
+
}
|
|
45
|
+
export function getApiKey(provider) {
|
|
46
|
+
const envKey = {
|
|
47
|
+
openai: 'OPENAI_API_KEY',
|
|
48
|
+
anthropic: 'ANTHROPIC_API_KEY',
|
|
49
|
+
google: 'GEMINI_API_KEY',
|
|
50
|
+
openrouter: 'OPENROUTER_API_KEY',
|
|
51
|
+
deepseek: 'DEEPSEEK_API_KEY',
|
|
52
|
+
mistral: 'MISTRAL_API_KEY',
|
|
53
|
+
groq: 'GROQ_API_KEY',
|
|
54
|
+
xai: 'XAI_API_KEY',
|
|
55
|
+
together: 'TOGETHER_API_KEY',
|
|
56
|
+
custom: 'CUSTOM_API_KEY',
|
|
57
|
+
opencode: '',
|
|
58
|
+
ollama: '',
|
|
59
|
+
};
|
|
60
|
+
if (envKey[provider]) {
|
|
61
|
+
const envVal = process.env[envKey[provider]];
|
|
62
|
+
if (envVal)
|
|
63
|
+
return envVal;
|
|
64
|
+
}
|
|
65
|
+
const config = loadConfig();
|
|
66
|
+
const providerCfg = config.providers[provider];
|
|
67
|
+
if (providerCfg?.apiKey) {
|
|
68
|
+
if (providerCfg.encrypted) {
|
|
69
|
+
try {
|
|
70
|
+
return decrypt(providerCfg.apiKey);
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return providerCfg.apiKey;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return providerCfg.apiKey;
|
|
77
|
+
}
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
export function setApiKey(provider, key) {
|
|
81
|
+
const config = loadConfig();
|
|
82
|
+
if (!config.providers[provider]) {
|
|
83
|
+
config.providers[provider] = { apiKey: '', model: '' };
|
|
84
|
+
}
|
|
85
|
+
const cfg = config.providers[provider];
|
|
86
|
+
cfg.apiKey = encrypt(key);
|
|
87
|
+
cfg.encrypted = true;
|
|
88
|
+
if (!cfg.model) {
|
|
89
|
+
const defaults = {
|
|
90
|
+
openai: 'gpt-4o',
|
|
91
|
+
anthropic: 'claude-sonnet-4-20250514',
|
|
92
|
+
google: 'gemini-2.5-flash',
|
|
93
|
+
openrouter: 'openai/gpt-4o',
|
|
94
|
+
deepseek: 'deepseek-chat',
|
|
95
|
+
mistral: 'mistral-large-latest',
|
|
96
|
+
groq: 'llama-3.3-70b-versatile',
|
|
97
|
+
xai: 'grok-2',
|
|
98
|
+
together: 'meta-llama/Llama-3.3-70B-Instruct-Turbo',
|
|
99
|
+
ollama: 'llama3.2',
|
|
100
|
+
opencode: '',
|
|
101
|
+
custom: 'gpt-4o',
|
|
102
|
+
};
|
|
103
|
+
cfg.model = defaults[provider] || '';
|
|
104
|
+
}
|
|
105
|
+
config.activeProvider = provider;
|
|
106
|
+
saveConfig(config);
|
|
107
|
+
}
|
|
108
|
+
export function getModel(provider) {
|
|
109
|
+
const config = loadConfig();
|
|
110
|
+
const providerCfg = config.providers[provider];
|
|
111
|
+
if (providerCfg?.model)
|
|
112
|
+
return providerCfg.model;
|
|
113
|
+
const defaults = {
|
|
114
|
+
openai: 'gpt-4o',
|
|
115
|
+
anthropic: 'claude-sonnet-4-20250514',
|
|
116
|
+
google: 'gemini-2.5-flash',
|
|
117
|
+
openrouter: 'openai/gpt-4o',
|
|
118
|
+
deepseek: 'deepseek-chat',
|
|
119
|
+
mistral: 'mistral-large-latest',
|
|
120
|
+
groq: 'llama-3.3-70b-versatile',
|
|
121
|
+
xai: 'grok-2',
|
|
122
|
+
together: 'meta-llama/Llama-3.3-70B-Instruct-Turbo',
|
|
123
|
+
ollama: 'llama3.2',
|
|
124
|
+
opencode: '',
|
|
125
|
+
custom: 'gpt-4o',
|
|
126
|
+
};
|
|
127
|
+
return defaults[provider] || null;
|
|
128
|
+
}
|
|
129
|
+
export function setModel(provider, model) {
|
|
130
|
+
const config = loadConfig();
|
|
131
|
+
if (!config.providers[provider]) {
|
|
132
|
+
config.providers[provider] = { apiKey: '', model: '' };
|
|
133
|
+
}
|
|
134
|
+
const cfg = config.providers[provider];
|
|
135
|
+
cfg.model = model;
|
|
136
|
+
config.activeModel = model;
|
|
137
|
+
saveConfig(config);
|
|
138
|
+
}
|
|
139
|
+
export function addRecentModel(modelId) {
|
|
140
|
+
const config = loadConfig();
|
|
141
|
+
config.recent = config.recent.filter((m) => m !== modelId);
|
|
142
|
+
config.recent.unshift(modelId);
|
|
143
|
+
if (config.recent.length > 10)
|
|
144
|
+
config.recent = config.recent.slice(0, 10);
|
|
145
|
+
saveConfig(config);
|
|
146
|
+
}
|
|
147
|
+
export function toggleFavorite(modelId) {
|
|
148
|
+
const config = loadConfig();
|
|
149
|
+
const idx = config.favorites.indexOf(modelId);
|
|
150
|
+
if (idx >= 0) {
|
|
151
|
+
config.favorites.splice(idx, 1);
|
|
152
|
+
saveConfig(config);
|
|
153
|
+
return false;
|
|
154
|
+
}
|
|
155
|
+
config.favorites.push(modelId);
|
|
156
|
+
saveConfig(config);
|
|
157
|
+
return true;
|
|
158
|
+
}
|
|
159
|
+
export function isFavorite(modelId) {
|
|
160
|
+
const config = loadConfig();
|
|
161
|
+
return config.favorites.includes(modelId);
|
|
162
|
+
}
|
|
163
|
+
export function deleteApiKey(provider) {
|
|
164
|
+
const config = loadConfig();
|
|
165
|
+
if (config.providers[provider]) {
|
|
166
|
+
delete config.providers[provider];
|
|
167
|
+
}
|
|
168
|
+
saveConfig(config);
|
|
169
|
+
}
|
|
170
|
+
export function maskKey(key) {
|
|
171
|
+
if (key.length <= 8)
|
|
172
|
+
return '****';
|
|
173
|
+
return key.slice(0, 4) + '****' + key.slice(-4);
|
|
174
|
+
}
|
|
175
|
+
export function updateTheme(theme) {
|
|
176
|
+
const config = loadConfig();
|
|
177
|
+
config.theme = theme;
|
|
178
|
+
saveConfig(config);
|
|
179
|
+
}
|
|
180
|
+
export function updateSettings(settings) {
|
|
181
|
+
const config = loadConfig();
|
|
182
|
+
Object.assign(config, settings);
|
|
183
|
+
saveConfig(config);
|
|
184
|
+
}
|
|
185
|
+
export function recordTokenUsage(tokens, success) {
|
|
186
|
+
const config = loadConfig();
|
|
187
|
+
config.tokenUsage.total += tokens;
|
|
188
|
+
config.tokenUsage.requests++;
|
|
189
|
+
if (success)
|
|
190
|
+
config.tokenUsage.successes++;
|
|
191
|
+
else
|
|
192
|
+
config.tokenUsage.failures++;
|
|
193
|
+
saveConfig(config);
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/config/store.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { program } from 'commander';
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { render } from 'ink';
|
|
5
|
+
import { App } from './ui/App.js';
|
|
6
|
+
import { loadConfig, setApiKey, setModel } from './config/store.js';
|
|
7
|
+
import { CONNECT_PROVIDERS, createProvider } from './commands/providerFactory.js';
|
|
8
|
+
import * as readline from 'node:readline';
|
|
9
|
+
import { readPackageJson } from './utils/json.js';
|
|
10
|
+
import { ChatSession } from './chat/session.js';
|
|
11
|
+
program
|
|
12
|
+
.name('anya')
|
|
13
|
+
.description('Anya — Multi-provider AI CLI Assistant')
|
|
14
|
+
.version(readPackageJson().version)
|
|
15
|
+
.option('-c, --connect <provider>', 'Quick connect to a provider (openai, anthropic, google, openrouter, deepseek, mistral, groq, xai, together, ollama, opencode, custom)')
|
|
16
|
+
.option('-m, --model <model>', 'Set the default model')
|
|
17
|
+
.option('-q, --query <text>', 'Ask a question and exit')
|
|
18
|
+
.parse(process.argv);
|
|
19
|
+
const opts = program.opts();
|
|
20
|
+
async function main() {
|
|
21
|
+
if (opts.connect) {
|
|
22
|
+
const providerName = opts.connect.toLowerCase();
|
|
23
|
+
const prov = CONNECT_PROVIDERS.find((p) => p.id === providerName);
|
|
24
|
+
if (!prov) {
|
|
25
|
+
console.error(`\n Unknown provider: ${providerName}`);
|
|
26
|
+
console.error(' Available: ' + CONNECT_PROVIDERS.map((p) => p.id).join(', '));
|
|
27
|
+
console.error();
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
if (!prov.needsKey) {
|
|
31
|
+
setApiKey(prov.id, '');
|
|
32
|
+
console.log(`\n ♥ Connected to ${prov.name}!\n`);
|
|
33
|
+
startApp();
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
37
|
+
console.log(`\n Provider: ${prov.name}`);
|
|
38
|
+
console.log(` ${prov.desc}\n`);
|
|
39
|
+
const key = await new Promise(resolve => rl.question(' Enter API key: ', resolve));
|
|
40
|
+
rl.close();
|
|
41
|
+
if (!key.trim()) {
|
|
42
|
+
console.error('\n API key cannot be empty.\n');
|
|
43
|
+
process.exit(1);
|
|
44
|
+
}
|
|
45
|
+
setApiKey(prov.id, key.trim());
|
|
46
|
+
console.log(`\n ♥ Connected to ${prov.name}!\n`);
|
|
47
|
+
if (opts.model) {
|
|
48
|
+
setModel(prov.id, opts.model);
|
|
49
|
+
}
|
|
50
|
+
if (opts.query) {
|
|
51
|
+
await runQuery(opts.query);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
startApp();
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
if (opts.model) {
|
|
58
|
+
const config = loadConfig();
|
|
59
|
+
setModel(config.activeProvider, opts.model);
|
|
60
|
+
console.log(` Default model set to: ${opts.model}\n`);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
if (opts.query) {
|
|
64
|
+
await runQuery(opts.query, opts.connect);
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
startApp();
|
|
68
|
+
}
|
|
69
|
+
async function runQuery(query, specificProvider) {
|
|
70
|
+
const config = loadConfig();
|
|
71
|
+
const activeProvider = specificProvider?.toLowerCase() || config.activeProvider;
|
|
72
|
+
const providerCfg = config.providers[activeProvider];
|
|
73
|
+
if (!providerCfg?.apiKey && !process.env[`${activeProvider.toUpperCase()}_API_KEY`]) {
|
|
74
|
+
console.error('\n No API key configured. Run: anya --connect <provider>\n');
|
|
75
|
+
process.exit(1);
|
|
76
|
+
}
|
|
77
|
+
const provider = createProvider(activeProvider);
|
|
78
|
+
const session = new ChatSession();
|
|
79
|
+
session.addMessage('user', query);
|
|
80
|
+
console.log(`\n Asking ${provider.info.name} (${provider.getModel()})...\n`);
|
|
81
|
+
try {
|
|
82
|
+
const response = await provider.sendMessage(session.getMessages());
|
|
83
|
+
console.log(` ${response}\n`);
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
console.error(` Error: ${err.message}\n`);
|
|
87
|
+
process.exit(1);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function startApp() {
|
|
91
|
+
render(React.createElement(App));
|
|
92
|
+
}
|
|
93
|
+
main().catch(err => {
|
|
94
|
+
console.error('Error:', err.message);
|
|
95
|
+
process.exit(1);
|
|
96
|
+
});
|
|
97
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { AIProvider, Message, StreamChunk, ModelInfo, ProviderInfo } from './base.js';
|
|
2
|
+
export declare class AnthropicProvider extends AIProvider {
|
|
3
|
+
private baseUrl;
|
|
4
|
+
get info(): ProviderInfo;
|
|
5
|
+
validateApiKey(): Promise<boolean>;
|
|
6
|
+
fetchModels(): Promise<ModelInfo[]>;
|
|
7
|
+
sendMessage(messages: Message[]): Promise<string>;
|
|
8
|
+
streamMessage(messages: Message[]): AsyncGenerator<StreamChunk>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=anthropic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAa,YAAY,EAAE,MAAM,WAAW,CAAA;AAEhG,qBAAa,iBAAkB,SAAQ,UAAU;IAC/C,OAAO,CAAC,OAAO,CAAiC;IAEhD,IAAI,IAAI,IAAI,YAAY,CAEvB;IAEK,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAqBlC,WAAW,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IASnC,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IA8BhD,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC,WAAW,CAAC;CA8DvE"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { AIProvider, PROVIDERS } from './base.js';
|
|
2
|
+
export class AnthropicProvider extends AIProvider {
|
|
3
|
+
constructor() {
|
|
4
|
+
super(...arguments);
|
|
5
|
+
this.baseUrl = 'https://api.anthropic.com/v1';
|
|
6
|
+
}
|
|
7
|
+
get info() {
|
|
8
|
+
return PROVIDERS.find((p) => p.id === 'anthropic');
|
|
9
|
+
}
|
|
10
|
+
async validateApiKey() {
|
|
11
|
+
try {
|
|
12
|
+
const res = await fetch(`${this.baseUrl}/messages`, {
|
|
13
|
+
method: 'POST',
|
|
14
|
+
headers: {
|
|
15
|
+
'Content-Type': 'application/json',
|
|
16
|
+
'x-api-key': this.apiKey,
|
|
17
|
+
'anthropic-version': '2023-06-01'
|
|
18
|
+
},
|
|
19
|
+
body: JSON.stringify({
|
|
20
|
+
model: 'claude-haiku-3-5',
|
|
21
|
+
max_tokens: 10,
|
|
22
|
+
messages: [{ role: 'user', content: 'hi' }]
|
|
23
|
+
})
|
|
24
|
+
});
|
|
25
|
+
return res.ok;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
async fetchModels() {
|
|
32
|
+
return [
|
|
33
|
+
{ id: 'claude-sonnet-4-20250514', name: 'Claude Sonnet 4', provider: 'anthropic', contextLength: 200000 },
|
|
34
|
+
{ id: 'claude-opus-4-20250514', name: 'Claude Opus 4', provider: 'anthropic', contextLength: 200000 },
|
|
35
|
+
{ id: 'claude-haiku-3-5', name: 'Claude Haiku 3.5', provider: 'anthropic', contextLength: 200000 },
|
|
36
|
+
{ id: 'claude-sonnet-4-5-20250929', name: 'Claude Sonnet 4.5', provider: 'anthropic', contextLength: 200000 }
|
|
37
|
+
];
|
|
38
|
+
}
|
|
39
|
+
async sendMessage(messages) {
|
|
40
|
+
const sysPrompt = messages.find((m) => m.role === 'system')?.content;
|
|
41
|
+
const chatMessages = messages.filter((m) => m.role !== 'system');
|
|
42
|
+
const res = await fetch(`${this.baseUrl}/messages`, {
|
|
43
|
+
method: 'POST',
|
|
44
|
+
headers: {
|
|
45
|
+
'Content-Type': 'application/json',
|
|
46
|
+
'x-api-key': this.apiKey,
|
|
47
|
+
'anthropic-version': '2023-06-01'
|
|
48
|
+
},
|
|
49
|
+
body: JSON.stringify({
|
|
50
|
+
model: this.model,
|
|
51
|
+
max_tokens: 4096,
|
|
52
|
+
system: sysPrompt,
|
|
53
|
+
messages: chatMessages.map(m => ({ role: m.role, content: m.content }))
|
|
54
|
+
})
|
|
55
|
+
});
|
|
56
|
+
if (!res.ok) {
|
|
57
|
+
const body = await res.text();
|
|
58
|
+
if (res.status === 401)
|
|
59
|
+
throw new Error('Anthropic: Invalid API key');
|
|
60
|
+
if (res.status === 429)
|
|
61
|
+
throw new Error('Anthropic: Rate limited. Try again later.');
|
|
62
|
+
throw new Error(`Anthropic: HTTP ${res.status} - ${body}`);
|
|
63
|
+
}
|
|
64
|
+
const data = await res.json();
|
|
65
|
+
return data.content?.[0]?.text || '';
|
|
66
|
+
}
|
|
67
|
+
async *streamMessage(messages) {
|
|
68
|
+
const sysPrompt = messages.find((m) => m.role === 'system')?.content;
|
|
69
|
+
const chatMessages = messages.filter((m) => m.role !== 'system');
|
|
70
|
+
const res = await fetch(`${this.baseUrl}/messages`, {
|
|
71
|
+
method: 'POST',
|
|
72
|
+
headers: {
|
|
73
|
+
'Content-Type': 'application/json',
|
|
74
|
+
'x-api-key': this.apiKey,
|
|
75
|
+
'anthropic-version': '2023-06-01'
|
|
76
|
+
},
|
|
77
|
+
body: JSON.stringify({
|
|
78
|
+
model: this.model,
|
|
79
|
+
max_tokens: 4096,
|
|
80
|
+
system: sysPrompt,
|
|
81
|
+
messages: chatMessages.map(m => ({ role: m.role, content: m.content })),
|
|
82
|
+
stream: true
|
|
83
|
+
})
|
|
84
|
+
});
|
|
85
|
+
if (!res.ok) {
|
|
86
|
+
const body = await res.text();
|
|
87
|
+
if (res.status === 401)
|
|
88
|
+
throw new Error('Anthropic: Invalid API key');
|
|
89
|
+
if (res.status === 429)
|
|
90
|
+
throw new Error('Anthropic: Rate limited. Try again later.');
|
|
91
|
+
throw new Error(`Anthropic: HTTP ${res.status}`);
|
|
92
|
+
}
|
|
93
|
+
const reader = res.body?.getReader();
|
|
94
|
+
if (!reader)
|
|
95
|
+
throw new Error('Anthropic: No response body');
|
|
96
|
+
const decoder = new TextDecoder();
|
|
97
|
+
let buffer = '';
|
|
98
|
+
while (true) {
|
|
99
|
+
const { done, value } = await reader.read();
|
|
100
|
+
if (done)
|
|
101
|
+
break;
|
|
102
|
+
buffer += decoder.decode(value, { stream: true });
|
|
103
|
+
const lines = buffer.split('\n');
|
|
104
|
+
buffer = lines.pop() || '';
|
|
105
|
+
for (const line of lines) {
|
|
106
|
+
if (line.startsWith('data: ')) {
|
|
107
|
+
const data = line.slice(6).trim();
|
|
108
|
+
if (!data)
|
|
109
|
+
continue;
|
|
110
|
+
try {
|
|
111
|
+
const parsed = JSON.parse(data);
|
|
112
|
+
if (parsed.type === 'content_block_delta' && parsed.delta?.type === 'text_delta') {
|
|
113
|
+
yield { text: parsed.delta.text, done: false };
|
|
114
|
+
}
|
|
115
|
+
if (parsed.type === 'message_stop') {
|
|
116
|
+
yield { text: '', done: true };
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
yield { text: '', done: true };
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=anthropic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export interface Message {
|
|
2
|
+
role: 'user' | 'assistant' | 'system';
|
|
3
|
+
content: string;
|
|
4
|
+
}
|
|
5
|
+
export interface StreamChunk {
|
|
6
|
+
text: string;
|
|
7
|
+
done: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface ModelInfo {
|
|
10
|
+
id: string;
|
|
11
|
+
name: string;
|
|
12
|
+
provider: string;
|
|
13
|
+
contextLength?: number;
|
|
14
|
+
pricing?: {
|
|
15
|
+
prompt: string;
|
|
16
|
+
completion: string;
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export interface ProviderInfo {
|
|
20
|
+
id: string;
|
|
21
|
+
name: string;
|
|
22
|
+
models: string[];
|
|
23
|
+
defaultModel: string;
|
|
24
|
+
}
|
|
25
|
+
export declare const PROVIDERS: ProviderInfo[];
|
|
26
|
+
export declare const ALL_PROVIDERS: ProviderInfo[];
|
|
27
|
+
export declare abstract class AIProvider {
|
|
28
|
+
protected apiKey: string;
|
|
29
|
+
protected model: string;
|
|
30
|
+
constructor(apiKey: string, model: string);
|
|
31
|
+
abstract get info(): ProviderInfo;
|
|
32
|
+
abstract sendMessage(messages: Message[]): Promise<string>;
|
|
33
|
+
abstract streamMessage(messages: Message[]): AsyncGenerator<StreamChunk>;
|
|
34
|
+
abstract validateApiKey(): Promise<boolean>;
|
|
35
|
+
abstract fetchModels(): Promise<ModelInfo[]>;
|
|
36
|
+
setModel(model: string): void;
|
|
37
|
+
getModel(): string;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/providers/base.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAA;IACrC,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,OAAO,CAAA;CACd;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,OAAO,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAA;CACjD;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,eAAO,MAAM,SAAS,EAAE,YAAY,EAanC,CAAA;AAED,eAAO,MAAM,aAAa,gBAAY,CAAA;AAEtC,8BAAsB,UAAU;IAC9B,SAAS,CAAC,MAAM,EAAE,MAAM,CAAA;IACxB,SAAS,CAAC,KAAK,EAAE,MAAM,CAAA;gBAEX,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAKzC,QAAQ,KAAK,IAAI,IAAI,YAAY,CAAA;IAEjC,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAE1D,QAAQ,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC,WAAW,CAAC;IAExE,QAAQ,CAAC,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAE3C,QAAQ,CAAC,WAAW,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAE5C,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI7B,QAAQ,IAAI,MAAM;CAGnB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export const PROVIDERS = [
|
|
2
|
+
{ id: 'openai', name: 'OpenAI', models: ['gpt-4o', 'gpt-4o-mini', 'gpt-4-turbo', 'o3-mini'], defaultModel: 'gpt-4o' },
|
|
3
|
+
{ id: 'anthropic', name: 'Anthropic', models: ['claude-sonnet-4-20250514', 'claude-opus-4-20250514', 'claude-haiku-3-5'], defaultModel: 'claude-sonnet-4-20250514' },
|
|
4
|
+
{ id: 'google', name: 'Google Gemini', models: ['gemini-2.5-flash', 'gemini-2.5-pro'], defaultModel: 'gemini-2.5-flash' },
|
|
5
|
+
{ id: 'openrouter', name: 'OpenRouter', models: [], defaultModel: 'openai/gpt-4o' },
|
|
6
|
+
{ id: 'deepseek', name: 'DeepSeek', models: ['deepseek-chat', 'deepseek-reasoner'], defaultModel: 'deepseek-chat' },
|
|
7
|
+
{ id: 'mistral', name: 'Mistral AI', models: ['mistral-large-latest', 'mistral-small-latest', 'codestral-latest'], defaultModel: 'mistral-large-latest' },
|
|
8
|
+
{ id: 'groq', name: 'Groq', models: ['llama-3.3-70b-versatile', 'llama-3.1-8b-instant', 'mixtral-8x7b-32768', 'deepseek-r1-distill-llama-70b'], defaultModel: 'llama-3.3-70b-versatile' },
|
|
9
|
+
{ id: 'xai', name: 'xAI', models: ['grok-2', 'grok-2-mini'], defaultModel: 'grok-2' },
|
|
10
|
+
{ id: 'together', name: 'Together AI', models: ['meta-llama/Llama-3.3-70B-Instruct-Turbo', 'mistralai/Mixtral-8x22B-Instruct-v0.1'], defaultModel: 'meta-llama/Llama-3.3-70B-Instruct-Turbo' },
|
|
11
|
+
{ id: 'ollama', name: 'Ollama', models: ['llama3.2', 'mistral', 'codellama'], defaultModel: 'llama3.2' },
|
|
12
|
+
{ id: 'opencode', name: 'OpenCode (local)', models: [], defaultModel: '' },
|
|
13
|
+
{ id: 'custom', name: 'Custom OpenAI Compatible', models: [], defaultModel: 'gpt-4o' },
|
|
14
|
+
];
|
|
15
|
+
export const ALL_PROVIDERS = PROVIDERS;
|
|
16
|
+
export class AIProvider {
|
|
17
|
+
constructor(apiKey, model) {
|
|
18
|
+
this.apiKey = apiKey;
|
|
19
|
+
this.model = model;
|
|
20
|
+
}
|
|
21
|
+
setModel(model) {
|
|
22
|
+
this.model = model;
|
|
23
|
+
}
|
|
24
|
+
getModel() {
|
|
25
|
+
return this.model;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/providers/base.ts"],"names":[],"mappings":"AAyBA,MAAM,CAAC,MAAM,SAAS,GAAmB;IACvC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE;IACrH,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,0BAA0B,EAAE,wBAAwB,EAAE,kBAAkB,CAAC,EAAE,YAAY,EAAE,0BAA0B,EAAE;IACpK,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,EAAE,YAAY,EAAE,kBAAkB,EAAE;IACzH,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,eAAe,EAAE;IACnF,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,eAAe,EAAE,mBAAmB,CAAC,EAAE,YAAY,EAAE,eAAe,EAAE;IACnH,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,sBAAsB,EAAE,sBAAsB,EAAE,kBAAkB,CAAC,EAAE,YAAY,EAAE,sBAAsB,EAAE;IACzJ,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,yBAAyB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,+BAA+B,CAAC,EAAE,YAAY,EAAE,yBAAyB,EAAE;IACzL,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE;IACrF,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,yCAAyC,EAAE,uCAAuC,CAAC,EAAE,YAAY,EAAE,yCAAyC,EAAE;IAC9L,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE;IACxG,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE;IAC1E,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,0BAA0B,EAAE,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE;CACvF,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,SAAS,CAAA;AAEtC,MAAM,OAAgB,UAAU;IAI9B,YAAY,MAAc,EAAE,KAAa;QACvC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACpB,CAAC;IAYD,QAAQ,CAAC,KAAa;QACpB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACpB,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;CACF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { AIProvider, Message, StreamChunk, ModelInfo, ProviderInfo } from './base.js';
|
|
2
|
+
export declare class CustomProvider extends AIProvider {
|
|
3
|
+
private baseUrl;
|
|
4
|
+
constructor(apiKey: string, model: string, baseUrl?: string);
|
|
5
|
+
get info(): ProviderInfo;
|
|
6
|
+
validateApiKey(): Promise<boolean>;
|
|
7
|
+
fetchModels(): Promise<ModelInfo[]>;
|
|
8
|
+
sendMessage(messages: Message[]): Promise<string>;
|
|
9
|
+
streamMessage(messages: Message[]): AsyncGenerator<StreamChunk>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=custom.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom.d.ts","sourceRoot":"","sources":["../../src/providers/custom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAiB,YAAY,EAAE,MAAM,WAAW,CAAA;AAEpG,qBAAa,cAAe,SAAQ,UAAU;IAC5C,OAAO,CAAC,OAAO,CAAQ;gBAEX,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;IAK3D,IAAI,IAAI,IAAI,YAAY,CAEvB;IAEK,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAUlC,WAAW,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAcnC,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAWhD,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC,WAAW,CAAC;CA+BvE"}
|