@imisbahk/hive 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.rocket/ARCHITECTURE.md +7 -0
- package/.rocket/README.md +31 -0
- package/.rocket/SYMBOLS.md +282 -0
- package/.rocket/config.json +18 -0
- package/001-local-first-storage.md +43 -0
- package/003-memory-architechture.md +71 -0
- package/CONTRIBUTING.md +149 -0
- package/LICENSE.md +21 -0
- package/README.md +146 -0
- package/dist/agent/agent.d.ts +32 -0
- package/dist/agent/agent.d.ts.map +1 -0
- package/dist/agent/agent.js +103 -0
- package/dist/agent/agent.js.map +1 -0
- package/dist/agent/index.d.ts +3 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +2 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/cli/commands/chat.d.ts +12 -0
- package/dist/cli/commands/chat.d.ts.map +1 -0
- package/dist/cli/commands/chat.js +117 -0
- package/dist/cli/commands/chat.js.map +1 -0
- package/dist/cli/commands/config.d.ts +7 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +234 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/init.d.ts +8 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +186 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/nuke.d.ts +4 -0
- package/dist/cli/commands/nuke.d.ts.map +1 -0
- package/dist/cli/commands/nuke.js +47 -0
- package/dist/cli/commands/nuke.js.map +1 -0
- package/dist/cli/commands/status.d.ts +4 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +114 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/helpers/providerPrompts.d.ts +13 -0
- package/dist/cli/helpers/providerPrompts.d.ts.map +1 -0
- package/dist/cli/helpers/providerPrompts.js +138 -0
- package/dist/cli/helpers/providerPrompts.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +31 -0
- package/dist/cli/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 +108 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/api-key.d.ts +3 -0
- package/dist/providers/api-key.d.ts.map +1 -0
- package/dist/providers/api-key.js +15 -0
- package/dist/providers/api-key.js.map +1 -0
- package/dist/providers/base.d.ts +41 -0
- package/dist/providers/base.d.ts.map +1 -0
- package/dist/providers/base.js +157 -0
- package/dist/providers/base.js.map +1 -0
- package/dist/providers/google.d.ts +6 -0
- package/dist/providers/google.d.ts.map +1 -0
- package/dist/providers/google.js +19 -0
- package/dist/providers/google.js.map +1 -0
- package/dist/providers/groq.d.ts +6 -0
- package/dist/providers/groq.d.ts.map +1 -0
- package/dist/providers/groq.js +19 -0
- package/dist/providers/groq.js.map +1 -0
- package/dist/providers/index.d.ts +4 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +58 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/mistral.d.ts +6 -0
- package/dist/providers/mistral.d.ts.map +1 -0
- package/dist/providers/mistral.js +19 -0
- package/dist/providers/mistral.js.map +1 -0
- package/dist/providers/ollama.d.ts +6 -0
- package/dist/providers/ollama.d.ts.map +1 -0
- package/dist/providers/ollama.js +20 -0
- package/dist/providers/ollama.js.map +1 -0
- package/dist/providers/openai-compatible.d.ts +22 -0
- package/dist/providers/openai-compatible.d.ts.map +1 -0
- package/dist/providers/openai-compatible.js +36 -0
- package/dist/providers/openai-compatible.js.map +1 -0
- package/dist/providers/openai.d.ts +6 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +19 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/openrouter.d.ts +6 -0
- package/dist/providers/openrouter.d.ts.map +1 -0
- package/dist/providers/openrouter.js +19 -0
- package/dist/providers/openrouter.js.map +1 -0
- package/dist/providers/together.d.ts +6 -0
- package/dist/providers/together.d.ts.map +1 -0
- package/dist/providers/together.js +19 -0
- package/dist/providers/together.js.map +1 -0
- package/dist/storage/db.d.ts +48 -0
- package/dist/storage/db.d.ts.map +1 -0
- package/dist/storage/db.js +298 -0
- package/dist/storage/db.js.map +1 -0
- package/dist/storage/schema.d.ts +43 -0
- package/dist/storage/schema.d.ts.map +1 -0
- package/dist/storage/schema.js +69 -0
- package/dist/storage/schema.js.map +1 -0
- package/index.md +16 -0
- package/package.json +48 -0
- package/prompts/Behaviour.md +23 -0
- package/prompts/Code.md +12 -0
- package/prompts/Memory.md +11 -0
- package/prompts/System.md +6 -0
- package/releases/v1/v0.1/RELEASE-NOTES.md +0 -0
- package/src/agent/agent.ts +155 -0
- package/src/agent/index.ts +2 -0
- package/src/cli/commands/chat.ts +169 -0
- package/src/cli/commands/config.ts +282 -0
- package/src/cli/commands/init.ts +242 -0
- package/src/cli/commands/nuke.ts +60 -0
- package/src/cli/commands/status.ts +147 -0
- package/src/cli/helpers/providerPrompts.ts +192 -0
- package/src/cli/index.ts +38 -0
- package/src/providers/anthropic.ts +146 -0
- package/src/providers/api-key.ts +23 -0
- package/src/providers/base.ts +234 -0
- package/src/providers/google.ts +21 -0
- package/src/providers/groq.ts +21 -0
- package/src/providers/index.ts +65 -0
- package/src/providers/mistral.ts +21 -0
- package/src/providers/ollama.ts +22 -0
- package/src/providers/openai-compatible.ts +58 -0
- package/src/providers/openai.ts +21 -0
- package/src/providers/openrouter.ts +21 -0
- package/src/providers/together.ts +21 -0
- package/src/storage/db.ts +476 -0
- package/src/storage/schema.ts +116 -0
- package/tsconfig.json +51 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type ProviderName } from "../../providers/base.js";
|
|
2
|
+
interface PromptForProviderOptions {
|
|
3
|
+
message?: string;
|
|
4
|
+
defaultProvider?: ProviderName;
|
|
5
|
+
}
|
|
6
|
+
interface PromptForModelOptions {
|
|
7
|
+
message?: string;
|
|
8
|
+
defaultModel?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function promptForProvider(options?: PromptForProviderOptions): Promise<ProviderName>;
|
|
11
|
+
export declare function promptForModel(provider: ProviderName, options?: PromptForModelOptions): Promise<string>;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=providerPrompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providerPrompts.d.ts","sourceRoot":"","sources":["../../../src/cli/helpers/providerPrompts.ts"],"names":[],"mappings":"AAGA,OAAO,EAA4B,KAAK,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAmCtF,UAAU,wBAAwB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,YAAY,CAAC;CAChC;AAED,UAAU,qBAAqB;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,iBAAiB,CACrC,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,YAAY,CAAC,CAevB;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,YAAY,EACtB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,MAAM,CAAC,CAmEjB"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import inquirer from "inquirer";
|
|
2
|
+
import fetch from "node-fetch";
|
|
3
|
+
import { SUPPORTED_PROVIDER_NAMES } from "../../providers/base.js";
|
|
4
|
+
const OLLAMA_TAGS_URL = "http://localhost:11434/api/tags";
|
|
5
|
+
const MODEL_CHOICES_BY_PROVIDER = {
|
|
6
|
+
openai: ["gpt-4o", "gpt-4o-mini", "o1"],
|
|
7
|
+
anthropic: [
|
|
8
|
+
"claude-opus-4-6",
|
|
9
|
+
"claude-sonnet-4-6",
|
|
10
|
+
"claude-haiku-4-5-20251001",
|
|
11
|
+
],
|
|
12
|
+
groq: ["llama-3.3-70b-versatile", "llama-3.1-8b-instant", "mixtral-8x7b-32768"],
|
|
13
|
+
mistral: ["mistral-large-latest", "mistral-small-latest", "codestral-latest"],
|
|
14
|
+
google: ["gemini-2.0-flash", "gemini-2.0-flash-lite", "gemini-2.0-pro-exp-02-05"],
|
|
15
|
+
openrouter: [
|
|
16
|
+
"openai/gpt-4o-mini",
|
|
17
|
+
"anthropic/claude-3.5-sonnet",
|
|
18
|
+
"google/gemini-2.0-flash-001",
|
|
19
|
+
],
|
|
20
|
+
together: [
|
|
21
|
+
"meta-llama/Llama-3.3-70B-Instruct-Turbo",
|
|
22
|
+
"meta-llama/Llama-3.1-8B-Instruct-Turbo",
|
|
23
|
+
"Qwen/Qwen2.5-Coder-32B-Instruct",
|
|
24
|
+
],
|
|
25
|
+
};
|
|
26
|
+
export async function promptForProvider(options = {}) {
|
|
27
|
+
const answer = (await inquirer.prompt([
|
|
28
|
+
{
|
|
29
|
+
type: "list",
|
|
30
|
+
name: "provider",
|
|
31
|
+
message: options.message ?? "Choose a provider",
|
|
32
|
+
choices: SUPPORTED_PROVIDER_NAMES.map((value) => ({
|
|
33
|
+
name: value,
|
|
34
|
+
value,
|
|
35
|
+
})),
|
|
36
|
+
default: options.defaultProvider,
|
|
37
|
+
},
|
|
38
|
+
]));
|
|
39
|
+
return answer.provider;
|
|
40
|
+
}
|
|
41
|
+
export async function promptForModel(provider, options = {}) {
|
|
42
|
+
const promptMessage = options.message ?? "Choose a model";
|
|
43
|
+
if (provider === "ollama") {
|
|
44
|
+
const ollamaModels = await fetchOllamaModels();
|
|
45
|
+
if (ollamaModels && ollamaModels.length > 0) {
|
|
46
|
+
const defaultSelection = options.defaultModel && ollamaModels.includes(options.defaultModel)
|
|
47
|
+
? [options.defaultModel]
|
|
48
|
+
: undefined;
|
|
49
|
+
const answer = (await inquirer.prompt([
|
|
50
|
+
{
|
|
51
|
+
type: "checkbox",
|
|
52
|
+
name: "model",
|
|
53
|
+
message: promptMessage,
|
|
54
|
+
choices: ollamaModels.map((value) => ({
|
|
55
|
+
name: value,
|
|
56
|
+
value,
|
|
57
|
+
})),
|
|
58
|
+
default: defaultSelection,
|
|
59
|
+
validate: (values) => values.length === 1 || "Select exactly one model.",
|
|
60
|
+
},
|
|
61
|
+
]));
|
|
62
|
+
return answer.model[0];
|
|
63
|
+
}
|
|
64
|
+
const fallbackMessage = ollamaModels === null
|
|
65
|
+
? "Ollama not detected. Enter model name manually:"
|
|
66
|
+
: "No local Ollama models found. Enter model name manually:";
|
|
67
|
+
const answer = (await inquirer.prompt([
|
|
68
|
+
{
|
|
69
|
+
type: "input",
|
|
70
|
+
name: "model",
|
|
71
|
+
message: fallbackMessage,
|
|
72
|
+
validate: requiredField("Model is required."),
|
|
73
|
+
},
|
|
74
|
+
]));
|
|
75
|
+
return answer.model.trim();
|
|
76
|
+
}
|
|
77
|
+
const modelChoices = MODEL_CHOICES_BY_PROVIDER[provider];
|
|
78
|
+
const defaultModel = options.defaultModel && modelChoices.includes(options.defaultModel)
|
|
79
|
+
? options.defaultModel
|
|
80
|
+
: undefined;
|
|
81
|
+
const answer = (await inquirer.prompt([
|
|
82
|
+
{
|
|
83
|
+
type: "list",
|
|
84
|
+
name: "model",
|
|
85
|
+
message: promptMessage,
|
|
86
|
+
choices: modelChoices.map((value) => ({
|
|
87
|
+
name: value,
|
|
88
|
+
value,
|
|
89
|
+
})),
|
|
90
|
+
default: defaultModel,
|
|
91
|
+
},
|
|
92
|
+
]));
|
|
93
|
+
return answer.model;
|
|
94
|
+
}
|
|
95
|
+
async function fetchOllamaModels() {
|
|
96
|
+
const controller = new AbortController();
|
|
97
|
+
const timeout = setTimeout(() => {
|
|
98
|
+
controller.abort();
|
|
99
|
+
}, 1000);
|
|
100
|
+
try {
|
|
101
|
+
const response = await fetch(OLLAMA_TAGS_URL, {
|
|
102
|
+
signal: controller.signal,
|
|
103
|
+
});
|
|
104
|
+
if (!response.ok) {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
const payload = (await response.json());
|
|
108
|
+
if (!Array.isArray(payload.models)) {
|
|
109
|
+
return [];
|
|
110
|
+
}
|
|
111
|
+
return Array.from(new Set(payload.models
|
|
112
|
+
.map((entry) => {
|
|
113
|
+
if (typeof entry.name === "string" && entry.name.trim().length > 0) {
|
|
114
|
+
return entry.name.trim();
|
|
115
|
+
}
|
|
116
|
+
if (typeof entry.model === "string" && entry.model.trim().length > 0) {
|
|
117
|
+
return entry.model.trim();
|
|
118
|
+
}
|
|
119
|
+
return "";
|
|
120
|
+
})
|
|
121
|
+
.filter((value) => value.length > 0)));
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
finally {
|
|
127
|
+
clearTimeout(timeout);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
function requiredField(message) {
|
|
131
|
+
return (value) => {
|
|
132
|
+
if (value.trim().length > 0) {
|
|
133
|
+
return true;
|
|
134
|
+
}
|
|
135
|
+
return message;
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=providerPrompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providerPrompts.js","sourceRoot":"","sources":["../../../src/cli/helpers/providerPrompts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,eAAe,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import "dotenv/config";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
import { Command } from "commander";
|
|
5
|
+
import { registerChatCommand } from "./commands/chat.js";
|
|
6
|
+
import { registerConfigCommand } from "./commands/config.js";
|
|
7
|
+
import { registerInitCommand } from "./commands/init.js";
|
|
8
|
+
import { registerNukeCommand } from "./commands/nuke.js";
|
|
9
|
+
import { registerStatusCommand } from "./commands/status.js";
|
|
10
|
+
const program = new Command();
|
|
11
|
+
program
|
|
12
|
+
.name("hive")
|
|
13
|
+
.description("Your agent. Always running. Always learning. Always working.")
|
|
14
|
+
.version("0.1.0");
|
|
15
|
+
registerInitCommand(program);
|
|
16
|
+
registerChatCommand(program);
|
|
17
|
+
registerConfigCommand(program);
|
|
18
|
+
registerStatusCommand(program);
|
|
19
|
+
registerNukeCommand(program);
|
|
20
|
+
program
|
|
21
|
+
.parseAsync(process.argv)
|
|
22
|
+
.catch((error) => {
|
|
23
|
+
if (error instanceof Error) {
|
|
24
|
+
console.error(chalk.red(error.message));
|
|
25
|
+
process.exitCode = 1;
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
console.error(chalk.red(String(error)));
|
|
29
|
+
process.exitCode = 1;
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,eAAe,CAAC;AAEvB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,8DAA8D,CAAC;KAC3E,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAE7B,OAAO;KACJ,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC;KACxB,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IACxB,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACxC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACxC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type Provider, type StreamChatRequest } from "./base.js";
|
|
2
|
+
export declare class AnthropicProvider implements Provider {
|
|
3
|
+
readonly name: "anthropic";
|
|
4
|
+
readonly defaultModel: string;
|
|
5
|
+
private readonly apiKey?;
|
|
6
|
+
constructor(apiKey?: string);
|
|
7
|
+
streamChat(request: StreamChatRequest): AsyncGenerator<string>;
|
|
8
|
+
}
|
|
9
|
+
export declare function createAnthropicProvider(): Promise<AnthropicProvider>;
|
|
10
|
+
//# sourceMappingURL=anthropic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,KAAK,QAAQ,EAEb,KAAK,iBAAiB,EACvB,MAAM,WAAW,CAAC;AAUnB,qBAAa,iBAAkB,YAAW,QAAQ;IAChD,QAAQ,CAAC,IAAI,EAAG,WAAW,CAAU;IACrC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAE9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAS;gBAErB,MAAM,CAAC,EAAE,MAAM;IAKpB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,cAAc,CAAC,MAAM,CAAC;CAgEtE;AAED,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAG1E"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import fetch from "node-fetch";
|
|
2
|
+
import { resolveProviderApiKey } from "./api-key.js";
|
|
3
|
+
import { ProviderConfigurationError, ProviderRequestError, iterateSseData, } from "./base.js";
|
|
4
|
+
const ANTHROPIC_API_URL = "https://api.anthropic.com/v1/messages";
|
|
5
|
+
const DEFAULT_ANTHROPIC_MODEL = "claude-3-5-haiku-latest";
|
|
6
|
+
export class AnthropicProvider {
|
|
7
|
+
name = "anthropic";
|
|
8
|
+
defaultModel;
|
|
9
|
+
apiKey;
|
|
10
|
+
constructor(apiKey) {
|
|
11
|
+
this.apiKey = apiKey;
|
|
12
|
+
this.defaultModel = process.env.ANTHROPIC_MODEL ?? DEFAULT_ANTHROPIC_MODEL;
|
|
13
|
+
}
|
|
14
|
+
async *streamChat(request) {
|
|
15
|
+
if (!this.apiKey) {
|
|
16
|
+
throw new ProviderConfigurationError('Provider "anthropic" is missing ANTHROPIC_API_KEY.');
|
|
17
|
+
}
|
|
18
|
+
const system = request.messages
|
|
19
|
+
.filter((message) => message.role === "system")
|
|
20
|
+
.map((message) => message.content)
|
|
21
|
+
.join("\n\n");
|
|
22
|
+
const messages = toAnthropicMessages(request.messages);
|
|
23
|
+
const response = await fetch(ANTHROPIC_API_URL, {
|
|
24
|
+
method: "POST",
|
|
25
|
+
headers: {
|
|
26
|
+
"content-type": "application/json",
|
|
27
|
+
"x-api-key": this.apiKey,
|
|
28
|
+
"anthropic-version": "2023-06-01",
|
|
29
|
+
},
|
|
30
|
+
body: JSON.stringify({
|
|
31
|
+
model: request.model ?? this.defaultModel,
|
|
32
|
+
stream: true,
|
|
33
|
+
max_tokens: request.maxTokens ?? 1024,
|
|
34
|
+
temperature: request.temperature,
|
|
35
|
+
system: system.length > 0 ? system : undefined,
|
|
36
|
+
messages,
|
|
37
|
+
}),
|
|
38
|
+
});
|
|
39
|
+
if (!response.ok) {
|
|
40
|
+
const bodyText = await response.text();
|
|
41
|
+
throw new ProviderRequestError(`anthropic request failed: HTTP ${response.status} ${response.statusText} ${bodyText}`);
|
|
42
|
+
}
|
|
43
|
+
for await (const data of iterateSseData(response)) {
|
|
44
|
+
if (data === "[DONE]") {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
const payload = parseJson(data);
|
|
48
|
+
if (!payload) {
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
if (payload.type === "error") {
|
|
52
|
+
const error = payload.error;
|
|
53
|
+
const message = typeof error?.message === "string"
|
|
54
|
+
? error.message
|
|
55
|
+
: "anthropic stream error";
|
|
56
|
+
throw new ProviderRequestError(message);
|
|
57
|
+
}
|
|
58
|
+
const text = pickAnthropicDelta(payload);
|
|
59
|
+
if (text.length > 0) {
|
|
60
|
+
yield text;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
export async function createAnthropicProvider() {
|
|
66
|
+
const apiKey = await resolveProviderApiKey("anthropic", "ANTHROPIC_API_KEY");
|
|
67
|
+
return new AnthropicProvider(apiKey);
|
|
68
|
+
}
|
|
69
|
+
function toAnthropicMessages(messages) {
|
|
70
|
+
const filtered = messages.filter((message) => message.role !== "system");
|
|
71
|
+
if (filtered.length === 0) {
|
|
72
|
+
return [{ role: "user", content: "Hello." }];
|
|
73
|
+
}
|
|
74
|
+
return filtered.map((message) => ({
|
|
75
|
+
role: message.role === "assistant" ? "assistant" : "user",
|
|
76
|
+
content: message.content,
|
|
77
|
+
}));
|
|
78
|
+
}
|
|
79
|
+
function pickAnthropicDelta(payload) {
|
|
80
|
+
if (payload.type === "content_block_start") {
|
|
81
|
+
const contentBlock = payload.content_block;
|
|
82
|
+
if (contentBlock?.type === "text" && typeof contentBlock.text === "string") {
|
|
83
|
+
return contentBlock.text;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (payload.type === "content_block_delta") {
|
|
87
|
+
const delta = payload.delta;
|
|
88
|
+
if (delta?.type === "text_delta" && typeof delta.text === "string") {
|
|
89
|
+
return delta.text;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (payload.type === "message_delta") {
|
|
93
|
+
const delta = payload.delta;
|
|
94
|
+
if (typeof delta?.text === "string") {
|
|
95
|
+
return delta.text;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return "";
|
|
99
|
+
}
|
|
100
|
+
function parseJson(value) {
|
|
101
|
+
try {
|
|
102
|
+
return JSON.parse(value);
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
//# 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 @@
|
|
|
1
|
+
{"version":3,"file":"api-key.d.ts","sourceRoot":"","sources":["../../src/providers/api-key.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAI9C,wBAAsB,qBAAqB,CACzC,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAa7B"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import keytar from "keytar";
|
|
2
|
+
const KEYCHAIN_SERVICE = "hive";
|
|
3
|
+
export async function resolveProviderApiKey(providerName, envVarName) {
|
|
4
|
+
let keychainValue = null;
|
|
5
|
+
try {
|
|
6
|
+
keychainValue = await keytar.getPassword(KEYCHAIN_SERVICE, providerName);
|
|
7
|
+
}
|
|
8
|
+
catch {
|
|
9
|
+
keychainValue = null;
|
|
10
|
+
}
|
|
11
|
+
return (keychainValue ??
|
|
12
|
+
process.env[envVarName] ??
|
|
13
|
+
undefined);
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=api-key.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-key.js","sourceRoot":"","sources":["../../src/providers/api-key.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAI5B,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEhC,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,YAA0B,EAC1B,UAAkB;IAElB,IAAI,aAAa,GAAkB,IAAI,CAAC;IACxC,IAAI,CAAC;QACH,aAAa,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;IAC3E,CAAC;IAAC,MAAM,CAAC;QACP,aAAa,GAAG,IAAI,CAAC;IACvB,CAAC;IAED,OAAO,CACL,aAAa;QACb,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;QACvB,SAAS,CACV,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { type Response } from "node-fetch";
|
|
2
|
+
export declare const SUPPORTED_PROVIDER_NAMES: readonly ["openai", "anthropic", "ollama", "groq", "mistral", "google", "openrouter", "together"];
|
|
3
|
+
export type ProviderName = (typeof SUPPORTED_PROVIDER_NAMES)[number];
|
|
4
|
+
export type ProviderMessageRole = "system" | "user" | "assistant";
|
|
5
|
+
export interface ProviderMessage {
|
|
6
|
+
role: ProviderMessageRole;
|
|
7
|
+
content: string;
|
|
8
|
+
}
|
|
9
|
+
export interface StreamChatRequest {
|
|
10
|
+
messages: ProviderMessage[];
|
|
11
|
+
model?: string;
|
|
12
|
+
temperature?: number;
|
|
13
|
+
maxTokens?: number;
|
|
14
|
+
}
|
|
15
|
+
export interface Provider {
|
|
16
|
+
readonly name: ProviderName;
|
|
17
|
+
readonly defaultModel: string;
|
|
18
|
+
streamChat(request: StreamChatRequest): AsyncGenerator<string>;
|
|
19
|
+
}
|
|
20
|
+
export declare class ProviderConfigurationError extends Error {
|
|
21
|
+
constructor(message: string);
|
|
22
|
+
}
|
|
23
|
+
export declare class ProviderRequestError extends Error {
|
|
24
|
+
constructor(message: string);
|
|
25
|
+
}
|
|
26
|
+
export interface OpenAICompatibleStreamInput {
|
|
27
|
+
provider: ProviderName;
|
|
28
|
+
baseUrl: string;
|
|
29
|
+
apiKey?: string;
|
|
30
|
+
model: string;
|
|
31
|
+
messages: ProviderMessage[];
|
|
32
|
+
temperature?: number;
|
|
33
|
+
maxTokens?: number;
|
|
34
|
+
extraHeaders?: Record<string, string>;
|
|
35
|
+
extraBody?: Record<string, unknown>;
|
|
36
|
+
}
|
|
37
|
+
export declare function normalizeProviderName(raw?: string): ProviderName;
|
|
38
|
+
export declare function streamOpenAICompatibleChat(input: OpenAICompatibleStreamInput): AsyncGenerator<string>;
|
|
39
|
+
export declare function iterateSseData(response: Response): AsyncGenerator<string>;
|
|
40
|
+
export declare function chunkText(text: string, chunkSize?: number): AsyncGenerator<string>;
|
|
41
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/providers/base.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAElD,eAAO,MAAM,wBAAwB,mGAS3B,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,CAAC,CAAC;AACrE,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;AAElE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;CAChE;AAED,qBAAa,0BAA2B,SAAQ,KAAK;gBACvC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAED,wBAAgB,qBAAqB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,YAAY,CAahE;AAED,wBAAuB,0BAA0B,CAC/C,KAAK,EAAE,2BAA2B,GACjC,cAAc,CAAC,MAAM,CAAC,CAqExB;AAED,wBAAuB,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CA4BhF;AAED,wBAAuB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,SAAK,GAAG,cAAc,CAAC,MAAM,CAAC,CAIrF"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import fetch from "node-fetch";
|
|
2
|
+
export const SUPPORTED_PROVIDER_NAMES = [
|
|
3
|
+
"openai",
|
|
4
|
+
"anthropic",
|
|
5
|
+
"ollama",
|
|
6
|
+
"groq",
|
|
7
|
+
"mistral",
|
|
8
|
+
"google",
|
|
9
|
+
"openrouter",
|
|
10
|
+
"together",
|
|
11
|
+
];
|
|
12
|
+
export class ProviderConfigurationError extends Error {
|
|
13
|
+
constructor(message) {
|
|
14
|
+
super(message);
|
|
15
|
+
this.name = "ProviderConfigurationError";
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export class ProviderRequestError extends Error {
|
|
19
|
+
constructor(message) {
|
|
20
|
+
super(message);
|
|
21
|
+
this.name = "ProviderRequestError";
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export function normalizeProviderName(raw) {
|
|
25
|
+
if (!raw) {
|
|
26
|
+
return "openai";
|
|
27
|
+
}
|
|
28
|
+
const normalized = raw.trim().toLowerCase();
|
|
29
|
+
if (SUPPORTED_PROVIDER_NAMES.includes(normalized)) {
|
|
30
|
+
return normalized;
|
|
31
|
+
}
|
|
32
|
+
throw new ProviderConfigurationError(`Unsupported provider \"${raw}\". Supported providers: ${SUPPORTED_PROVIDER_NAMES.join(", ")}.`);
|
|
33
|
+
}
|
|
34
|
+
export async function* streamOpenAICompatibleChat(input) {
|
|
35
|
+
const endpoint = `${input.baseUrl.replace(/\/$/, "")}/chat/completions`;
|
|
36
|
+
const headers = {
|
|
37
|
+
"content-type": "application/json",
|
|
38
|
+
...(input.extraHeaders ?? {}),
|
|
39
|
+
};
|
|
40
|
+
if (input.apiKey) {
|
|
41
|
+
headers.authorization = `Bearer ${input.apiKey}`;
|
|
42
|
+
}
|
|
43
|
+
const body = {
|
|
44
|
+
model: input.model,
|
|
45
|
+
messages: input.messages,
|
|
46
|
+
stream: true,
|
|
47
|
+
...(input.extraBody ?? {}),
|
|
48
|
+
};
|
|
49
|
+
if (input.temperature !== undefined) {
|
|
50
|
+
body.temperature = input.temperature;
|
|
51
|
+
}
|
|
52
|
+
if (input.maxTokens !== undefined) {
|
|
53
|
+
body.max_tokens = input.maxTokens;
|
|
54
|
+
}
|
|
55
|
+
const response = await fetch(endpoint, {
|
|
56
|
+
method: "POST",
|
|
57
|
+
headers,
|
|
58
|
+
body: JSON.stringify(body),
|
|
59
|
+
});
|
|
60
|
+
await ensureOk(response, `${input.provider} request failed`);
|
|
61
|
+
for await (const data of iterateSseData(response)) {
|
|
62
|
+
if (data === "[DONE]") {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
const payload = parseJson(data);
|
|
66
|
+
if (!payload) {
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
const errorMessage = pickErrorMessage(payload);
|
|
70
|
+
if (errorMessage) {
|
|
71
|
+
throw new ProviderRequestError(`${input.provider} error: ${errorMessage}`);
|
|
72
|
+
}
|
|
73
|
+
const maybeChoices = payload.choices;
|
|
74
|
+
if (!Array.isArray(maybeChoices) || maybeChoices.length === 0) {
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
const firstChoice = maybeChoices[0];
|
|
78
|
+
const delta = firstChoice.delta;
|
|
79
|
+
const text = typeof delta?.content === "string"
|
|
80
|
+
? delta.content
|
|
81
|
+
: typeof firstChoice.text === "string"
|
|
82
|
+
? firstChoice.text
|
|
83
|
+
: "";
|
|
84
|
+
if (text.length > 0) {
|
|
85
|
+
yield text;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
export async function* iterateSseData(response) {
|
|
90
|
+
if (!response.body) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
let buffer = "";
|
|
94
|
+
for await (const chunk of response.body) {
|
|
95
|
+
buffer += chunk.toString("utf8").replace(/\r\n/g, "\n");
|
|
96
|
+
let eventBoundary = buffer.indexOf("\n\n");
|
|
97
|
+
while (eventBoundary !== -1) {
|
|
98
|
+
const rawEvent = buffer.slice(0, eventBoundary);
|
|
99
|
+
buffer = buffer.slice(eventBoundary + 2);
|
|
100
|
+
const data = parseSseData(rawEvent);
|
|
101
|
+
if (data !== null) {
|
|
102
|
+
yield data;
|
|
103
|
+
}
|
|
104
|
+
eventBoundary = buffer.indexOf("\n\n");
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
const remaining = parseSseData(buffer);
|
|
108
|
+
if (remaining !== null) {
|
|
109
|
+
yield remaining;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
export async function* chunkText(text, chunkSize = 32) {
|
|
113
|
+
for (let start = 0; start < text.length; start += chunkSize) {
|
|
114
|
+
yield text.slice(start, start + chunkSize);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
function parseSseData(rawEvent) {
|
|
118
|
+
const lines = rawEvent
|
|
119
|
+
.split("\n")
|
|
120
|
+
.map((line) => line.trimEnd())
|
|
121
|
+
.filter((line) => line.startsWith("data:"))
|
|
122
|
+
.map((line) => line.slice(5).trimStart());
|
|
123
|
+
if (lines.length === 0) {
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
return lines.join("\n").trim();
|
|
127
|
+
}
|
|
128
|
+
function parseJson(value) {
|
|
129
|
+
try {
|
|
130
|
+
return JSON.parse(value);
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
function pickErrorMessage(payload) {
|
|
137
|
+
const maybeError = payload.error;
|
|
138
|
+
if (typeof maybeError === "string") {
|
|
139
|
+
return maybeError;
|
|
140
|
+
}
|
|
141
|
+
if (maybeError && typeof maybeError === "object") {
|
|
142
|
+
const message = maybeError.message;
|
|
143
|
+
if (typeof message === "string") {
|
|
144
|
+
return message;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return null;
|
|
148
|
+
}
|
|
149
|
+
async function ensureOk(response, fallbackMessage) {
|
|
150
|
+
if (response.ok) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
const bodyText = (await response.text()).trim();
|
|
154
|
+
const details = bodyText.length > 0 ? ` ${bodyText}` : "";
|
|
155
|
+
throw new ProviderRequestError(`${fallbackMessage}: HTTP ${response.status} ${response.statusText}${details}`);
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/providers/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { OpenAICompatibleProvider } from "./openai-compatible.js";
|
|
2
|
+
export declare class GoogleProvider extends OpenAICompatibleProvider {
|
|
3
|
+
constructor(apiKey?: string);
|
|
4
|
+
}
|
|
5
|
+
export declare function createGoogleProvider(): Promise<GoogleProvider>;
|
|
6
|
+
//# sourceMappingURL=google.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../src/providers/google.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAKlE,qBAAa,cAAe,SAAQ,wBAAwB;gBAC9C,MAAM,CAAC,EAAE,MAAM;CAQ5B;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,cAAc,CAAC,CAGpE"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { resolveProviderApiKey } from "./api-key.js";
|
|
2
|
+
import { OpenAICompatibleProvider } from "./openai-compatible.js";
|
|
3
|
+
const DEFAULT_GOOGLE_BASE_URL = "https://generativelanguage.googleapis.com/v1beta/openai";
|
|
4
|
+
const DEFAULT_GOOGLE_MODEL = "gemini-3.0-flash";
|
|
5
|
+
export class GoogleProvider extends OpenAICompatibleProvider {
|
|
6
|
+
constructor(apiKey) {
|
|
7
|
+
super({
|
|
8
|
+
name: "google",
|
|
9
|
+
baseUrl: process.env.GOOGLE_BASE_URL ?? DEFAULT_GOOGLE_BASE_URL,
|
|
10
|
+
apiKey,
|
|
11
|
+
defaultModel: process.env.GOOGLE_MODEL ?? DEFAULT_GOOGLE_MODEL,
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export async function createGoogleProvider() {
|
|
16
|
+
const apiKey = await resolveProviderApiKey("google", "GOOGLE_API_KEY");
|
|
17
|
+
return new GoogleProvider(apiKey);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=google.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google.js","sourceRoot":"","sources":["../../src/providers/google.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAElE,MAAM,uBAAuB,GAAG,yDAAyD,CAAC;AAC1F,MAAM,oBAAoB,GAAG,kBAAkB,CAAC;AAEhD,MAAM,OAAO,cAAe,SAAQ,wBAAwB;IAC1D,YAAY,MAAe;QACzB,KAAK,CAAC;YACJ,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,uBAAuB;YAC/D,MAAM;YACN,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,oBAAoB;SAC/D,CAAC,CAAC;IACL,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IACvE,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { OpenAICompatibleProvider } from "./openai-compatible.js";
|
|
2
|
+
export declare class GroqProvider extends OpenAICompatibleProvider {
|
|
3
|
+
constructor(apiKey?: string);
|
|
4
|
+
}
|
|
5
|
+
export declare function createGroqProvider(): Promise<GroqProvider>;
|
|
6
|
+
//# sourceMappingURL=groq.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"groq.d.ts","sourceRoot":"","sources":["../../src/providers/groq.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAKlE,qBAAa,YAAa,SAAQ,wBAAwB;gBAC5C,MAAM,CAAC,EAAE,MAAM;CAQ5B;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,YAAY,CAAC,CAGhE"}
|