@lupaflow/providers 0.1.0 → 0.1.2
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/dist/index.cjs +657 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +73 -0
- package/dist/index.d.ts +73 -0
- package/dist/index.js +617 -0
- package/dist/index.js.map +1 -0
- package/package.json +6 -5
- package/tsconfig.json +0 -8
- package/tsup.config.ts +0 -9
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/registry.ts","../src/openrouter.ts","../src/google.ts","../src/groq.ts"],"sourcesContent":["import { providerRegistry } from \"./registry\"\nimport { OpenRouterProvider } from \"./openrouter\"\nimport { GoogleProvider } from \"./google\"\nimport { GroqProvider } from \"./groq\"\n\nproviderRegistry.register(\"openrouter\", OpenRouterProvider)\nproviderRegistry.register(\"google\", GoogleProvider)\nproviderRegistry.register(\"groq\", GroqProvider)\n\nexport { providerRegistry }\nexport type { LLMProvider } from \"./interface\"\nexport { OpenRouterProvider } from \"./openrouter\"\nexport { GoogleProvider } from \"./google\"\nexport { GroqProvider } from \"./groq\"\n","import type { ProviderName, ProviderConfig, CompletionRequest, CompletionResponse, StreamChunk } from \"@lupaflow/types\"\nimport { ConfigError } from \"@lupaflow/core\"\n\ninterface LLMProvider {\n readonly name: string\n readonly defaultModel: string\n config: ProviderConfig\n complete(request: CompletionRequest): Promise<CompletionResponse>\n streamComplete(request: CompletionRequest): AsyncIterable<StreamChunk>\n getModels?(): Promise<string[]>\n validateConfig(): boolean\n}\n\nclass ProviderRegistry {\n private providers: Map<ProviderName, new (config: ProviderConfig) => LLMProvider> = new Map()\n private instances: Map<ProviderName, LLMProvider> = new Map()\n\n register(name: ProviderName, ctor: new (config: ProviderConfig) => LLMProvider): void {\n this.providers.set(name, ctor)\n }\n\n get(name: ProviderName, config?: ProviderConfig): LLMProvider {\n if (!config && this.instances.has(name)) {\n return this.instances.get(name)!\n }\n\n const ctor = this.providers.get(name)\n if (!ctor) {\n throw new ConfigError(`Unknown provider: \"${name}\"`, {\n available: Array.from(this.providers.keys()),\n })\n }\n\n const instance = new ctor(config || {})\n if (!config) {\n this.instances.set(name, instance)\n }\n return instance\n }\n\n has(name: string): name is ProviderName {\n return this.providers.has(name as ProviderName)\n }\n\n list(): ProviderName[] {\n return Array.from(this.providers.keys())\n }\n}\n\nexport const providerRegistry = new ProviderRegistry()\n","import OpenAI from \"openai\"\nimport type { LLMProvider } from \"./interface\"\nimport type { CompletionRequest, CompletionResponse, StreamChunk, ProviderConfig } from \"@lupaflow/types\"\nimport { ProviderError } from \"@lupaflow/core\"\nimport { getOpenRouterKey } from \"@lupaflow/secrets\"\nimport { globalEventBus } from \"@lupaflow/core\"\n\nexport class OpenRouterProvider implements LLMProvider {\n readonly name = \"openrouter\"\n readonly defaultModel = \"openai/gpt-4o-mini\"\n config: ProviderConfig\n\n private client: OpenAI\n\n constructor(config: ProviderConfig = {}) {\n this.config = config\n this.client = new OpenAI({\n apiKey: config.apiKey || getOpenRouterKey(),\n baseURL: config.baseUrl || \"https://openrouter.ai/api/v1\",\n defaultHeaders: {\n \"HTTP-Referer\": \"https://lupaflow.dev\",\n \"X-Title\": \"LupaFlow\",\n },\n })\n }\n\n validateConfig(): boolean {\n try {\n getOpenRouterKey()\n return true\n } catch {\n return false\n }\n }\n\n private buildMessages(request: CompletionRequest): OpenAI.Chat.ChatCompletionMessageParam[] {\n const messages: OpenAI.Chat.ChatCompletionMessageParam[] = []\n if (request.systemPrompt) {\n messages.push({ role: \"system\", content: request.systemPrompt })\n }\n for (const m of request.messages) {\n if (m.role === \"assistant\" && m.toolCalls?.length) {\n messages.push({\n role: \"assistant\",\n content: m.content as string | null,\n tool_calls: m.toolCalls as any,\n })\n } else if (m.role === \"tool\") {\n messages.push({\n role: \"tool\",\n tool_call_id: m.toolCallId || \"\",\n content: m.content || \"\",\n })\n } else {\n messages.push({ role: m.role as any, content: m.content })\n }\n }\n return messages\n }\n\n private buildTools(\n tools?: CompletionRequest[\"tools\"]\n ): OpenAI.Chat.ChatCompletionTool[] | undefined {\n return tools?.map((t) => ({\n type: \"function\" as const,\n function: {\n name: t.definition.name,\n description: t.definition.description,\n parameters: {\n type: \"object\",\n properties: t.definition.parameters,\n required: t.definition.required,\n },\n },\n }))\n }\n\n async complete(request: CompletionRequest): Promise<CompletionResponse> {\n const start = Date.now()\n const model = request.model || this.config.model || this.defaultModel\n\n await globalEventBus.emit(\"provider:start\", {\n provider: this.name,\n model,\n } as any)\n\n try {\n const messages = this.buildMessages(request)\n const tools = this.buildTools(request.tools)\n\n const response = await this.client.chat.completions.create({\n model,\n messages,\n tools,\n temperature: request.temperature ?? this.config.temperature,\n max_tokens: request.maxTokens ?? this.config.maxTokens,\n top_p: request.topP ?? this.config.topP,\n })\n\n const choice = response.choices[0]\n const latencyMs = Date.now() - start\n\n const result: CompletionResponse = {\n content: choice.message.content,\n toolCalls: (choice.message.tool_calls || []).map((tc) => ({\n id: tc.id,\n name: tc.function.name,\n args: JSON.parse(tc.function.arguments),\n })),\n usage: {\n promptTokens: response.usage?.prompt_tokens || 0,\n completionTokens: response.usage?.completion_tokens || 0,\n totalTokens: response.usage?.total_tokens || 0,\n },\n model: response.model,\n latencyMs,\n finishReason: choice.finish_reason || \"stop\",\n }\n\n await globalEventBus.emit(\"provider:complete\", {\n provider: this.name,\n model,\n tokens: result.usage.totalTokens,\n latencyMs,\n } as any)\n\n return result\n } catch (err: any) {\n const latencyMs = Date.now() - start\n await globalEventBus.emit(\"provider:error\", {\n provider: this.name,\n model,\n error: err.message,\n } as any)\n throw new ProviderError(this.name, err.message, { model, latencyMs })\n }\n }\n\n async *streamComplete(request: CompletionRequest): AsyncIterable<StreamChunk> {\n const start = Date.now()\n const model = request.model || this.config.model || this.defaultModel\n\n await globalEventBus.emit(\"provider:start\", {\n provider: this.name,\n model,\n } as any)\n\n try {\n const messages = this.buildMessages(request)\n const tools = this.buildTools(request.tools)\n\n const stream = await this.client.chat.completions.create({\n model,\n messages,\n tools,\n temperature: request.temperature ?? this.config.temperature,\n max_tokens: request.maxTokens ?? this.config.maxTokens,\n top_p: request.topP ?? this.config.topP,\n stream: true,\n })\n\n let fullContent = \"\"\n const accToolCalls = new Map<number, { id: string; name: string; args: string }>()\n\n for await (const chunk of stream) {\n const delta = chunk.choices[0]?.delta\n\n if (delta?.content) {\n fullContent += delta.content\n yield { type: \"text\", text: delta.content }\n }\n\n if (delta?.tool_calls) {\n for (const tc of delta.tool_calls) {\n if (!accToolCalls.has(tc.index)) {\n accToolCalls.set(tc.index, { id: \"\", name: \"\", args: \"\" })\n }\n const entry = accToolCalls.get(tc.index)!\n if (tc.id) entry.id = tc.id\n if (tc.function?.name) entry.name = tc.function.name\n if (tc.function?.arguments) entry.args += tc.function.arguments\n }\n }\n\n if (chunk.choices[0]?.finish_reason) {\n const finishReason = chunk.choices[0].finish_reason\n const toolCalls = Array.from(accToolCalls.values())\n .filter((tc) => tc.id && tc.name)\n .map((tc) => ({\n id: tc.id,\n name: tc.name,\n args: JSON.parse(tc.args || \"{}\"),\n }))\n\n yield {\n type: \"finish\",\n content: fullContent,\n toolCalls,\n usage: {\n promptTokens: chunk.usage?.prompt_tokens || 0,\n completionTokens: chunk.usage?.completion_tokens || 0,\n totalTokens: chunk.usage?.total_tokens || 0,\n },\n model,\n finishReason,\n }\n }\n }\n\n await globalEventBus.emit(\"provider:complete\", {\n provider: this.name,\n model,\n tokens: 0,\n latencyMs: Date.now() - start,\n } as any)\n } catch (err: any) {\n await globalEventBus.emit(\"provider:error\", {\n provider: this.name,\n model,\n error: err.message,\n } as any)\n throw new ProviderError(this.name, err.message, { model, latencyMs: Date.now() - start })\n }\n }\n\n async getModels(): Promise<string[]> {\n try {\n const response = await fetch(\"https://openrouter.ai/api/v1/models\")\n const data: any = await response.json()\n return data.data?.map((m: any) => m.id) || []\n } catch {\n return [this.defaultModel]\n }\n }\n}\n","import { GoogleGenerativeAI } from \"@google/generative-ai\"\nimport type { LLMProvider } from \"./interface\"\nimport type { CompletionRequest, CompletionResponse, StreamChunk, ProviderConfig } from \"@lupaflow/types\"\nimport { ProviderError } from \"@lupaflow/core\"\nimport { getGoogleKey } from \"@lupaflow/secrets\"\nimport { globalEventBus } from \"@lupaflow/core\"\n\nexport class GoogleProvider implements LLMProvider {\n readonly name = \"google\"\n readonly defaultModel = \"gemini-1.5-flash\"\n config: ProviderConfig\n\n private client: GoogleGenerativeAI\n\n constructor(config: ProviderConfig = {}) {\n this.config = config\n this.client = new GoogleGenerativeAI(config.apiKey || getGoogleKey())\n }\n\n validateConfig(): boolean {\n try {\n getGoogleKey()\n return true\n } catch {\n return false\n }\n }\n\n private buildContents(request: CompletionRequest): { role: string; parts: { text: string }[] }[] {\n const contents: { role: string; parts: { text: string }[] }[] = []\n for (const msg of request.messages) {\n if (msg.role === \"system\") continue\n const role = msg.role === \"assistant\" ? \"model\" : \"user\"\n contents.push({\n role,\n parts: [{ text: msg.content || \"\" }],\n })\n }\n return contents\n }\n\n async complete(request: CompletionRequest): Promise<CompletionResponse> {\n const start = Date.now()\n const model = request.model || this.config.model || this.defaultModel\n\n await globalEventBus.emit(\"provider:start\", {\n provider: this.name,\n model,\n } as any)\n\n try {\n const genModel = this.client.getGenerativeModel({ model })\n\n const systemInstruction = request.systemPrompt\n const contents = this.buildContents(request)\n\n const requestOptions: any = {\n contents,\n generationConfig: {\n temperature: request.temperature ?? this.config.temperature,\n maxOutputTokens: request.maxTokens ?? this.config.maxTokens,\n topP: request.topP ?? this.config.topP,\n },\n }\n\n if (systemInstruction) {\n requestOptions.systemInstruction = {\n role: \"user\",\n parts: [{ text: systemInstruction }],\n }\n }\n\n const result = await genModel.generateContent(requestOptions)\n\n const latencyMs = Date.now() - start\n const response = result.response\n const text = response.text()\n\n const usage: any = response.usageMetadata || {}\n const totalTokens = (usage.promptTokenCount || 0) + (usage.candidatesTokenCount || 0)\n\n const completionResponse: CompletionResponse = {\n content: text,\n toolCalls: [],\n usage: {\n promptTokens: usage.promptTokenCount || 0,\n completionTokens: usage.candidatesTokenCount || 0,\n totalTokens,\n },\n model,\n latencyMs,\n finishReason: \"stop\",\n }\n\n await globalEventBus.emit(\"provider:complete\", {\n provider: this.name,\n model,\n tokens: totalTokens,\n latencyMs,\n } as any)\n\n return completionResponse\n } catch (err: any) {\n const latencyMs = Date.now() - start\n await globalEventBus.emit(\"provider:error\", {\n provider: this.name,\n model,\n error: err.message,\n } as any)\n throw new ProviderError(this.name, err.message, { model, latencyMs })\n }\n }\n\n async *streamComplete(request: CompletionRequest): AsyncIterable<StreamChunk> {\n const start = Date.now()\n const model = request.model || this.config.model || this.defaultModel\n\n await globalEventBus.emit(\"provider:start\", {\n provider: this.name,\n model,\n } as any)\n\n try {\n const genModel = this.client.getGenerativeModel({ model })\n\n const systemInstruction = request.systemPrompt\n const contents = this.buildContents(request)\n\n const requestOptions: any = {\n contents,\n generationConfig: {\n temperature: request.temperature ?? this.config.temperature,\n maxOutputTokens: request.maxTokens ?? this.config.maxTokens,\n topP: request.topP ?? this.config.topP,\n },\n }\n\n if (systemInstruction) {\n requestOptions.systemInstruction = {\n role: \"user\",\n parts: [{ text: systemInstruction }],\n }\n }\n\n const result = await genModel.generateContentStream(requestOptions)\n\n let fullContent = \"\"\n\n for await (const chunk of result.stream) {\n const text = chunk.text()\n if (text) {\n fullContent += text\n yield { type: \"text\", text }\n }\n }\n\n const response = (await result.response)\n const usage: any = response.usageMetadata || {}\n const totalTokens = (usage.promptTokenCount || 0) + (usage.candidatesTokenCount || 0)\n\n yield {\n type: \"finish\",\n content: fullContent,\n toolCalls: [],\n usage: {\n promptTokens: usage.promptTokenCount || 0,\n completionTokens: usage.candidatesTokenCount || 0,\n totalTokens,\n },\n model,\n finishReason: \"stop\",\n }\n\n await globalEventBus.emit(\"provider:complete\", {\n provider: this.name,\n model,\n tokens: totalTokens,\n latencyMs: Date.now() - start,\n } as any)\n } catch (err: any) {\n await globalEventBus.emit(\"provider:error\", {\n provider: this.name,\n model,\n error: err.message,\n } as any)\n throw new ProviderError(this.name, err.message, { model, latencyMs: Date.now() - start })\n }\n }\n\n async getModels(): Promise<string[]> {\n return [\"gemini-1.5-flash\", \"gemini-1.5-pro\", \"gemini-2.0-flash-exp\"]\n }\n}\n","import OpenAI from \"openai\"\nimport type { LLMProvider } from \"./interface\"\nimport type { CompletionRequest, CompletionResponse, StreamChunk, ProviderConfig } from \"@lupaflow/types\"\nimport { ProviderError } from \"@lupaflow/core\"\nimport { getGroqKey } from \"@lupaflow/secrets\"\nimport { globalEventBus } from \"@lupaflow/core\"\n\nexport class GroqProvider implements LLMProvider {\n readonly name = \"groq\"\n readonly defaultModel = \"llama-3.3-70b-versatile\"\n config: ProviderConfig\n\n private client: OpenAI\n\n constructor(config: ProviderConfig = {}) {\n this.config = config\n this.client = new OpenAI({\n apiKey: config.apiKey || getGroqKey(),\n baseURL: config.baseUrl || \"https://api.groq.com/openai/v1\",\n })\n }\n\n validateConfig(): boolean {\n try {\n getGroqKey()\n return true\n } catch {\n return false\n }\n }\n\n private buildMessages(request: CompletionRequest): OpenAI.Chat.ChatCompletionMessageParam[] {\n const messages: OpenAI.Chat.ChatCompletionMessageParam[] = []\n if (request.systemPrompt) {\n messages.push({ role: \"system\", content: request.systemPrompt })\n }\n for (const m of request.messages) {\n if (m.role === \"assistant\" && m.toolCalls?.length) {\n messages.push({\n role: \"assistant\",\n content: m.content as string | null,\n tool_calls: m.toolCalls as any,\n })\n } else if (m.role === \"tool\") {\n messages.push({\n role: \"tool\",\n tool_call_id: m.toolCallId || \"\",\n content: m.content || \"\",\n })\n } else {\n messages.push({ role: m.role as any, content: m.content })\n }\n }\n return messages\n }\n\n private buildTools(\n tools?: CompletionRequest[\"tools\"]\n ): OpenAI.Chat.ChatCompletionTool[] | undefined {\n return tools?.map((t) => ({\n type: \"function\" as const,\n function: {\n name: t.definition.name,\n description: t.definition.description,\n parameters: {\n type: \"object\",\n properties: t.definition.parameters,\n required: t.definition.required,\n },\n },\n }))\n }\n\n async complete(request: CompletionRequest): Promise<CompletionResponse> {\n const start = Date.now()\n const model = request.model || this.config.model || this.defaultModel\n\n await globalEventBus.emit(\"provider:start\", {\n provider: this.name,\n model,\n } as any)\n\n try {\n const messages = this.buildMessages(request)\n const tools = this.buildTools(request.tools)\n\n const response = await this.client.chat.completions.create({\n model,\n messages,\n tools,\n temperature: request.temperature ?? this.config.temperature,\n max_tokens: request.maxTokens ?? this.config.maxTokens,\n top_p: request.topP ?? this.config.topP,\n })\n\n const choice = response.choices[0]\n const latencyMs = Date.now() - start\n\n const result: CompletionResponse = {\n content: choice.message.content,\n toolCalls: (choice.message.tool_calls || []).map((tc) => ({\n id: tc.id,\n name: tc.function.name,\n args: JSON.parse(tc.function.arguments),\n })),\n usage: {\n promptTokens: response.usage?.prompt_tokens || 0,\n completionTokens: response.usage?.completion_tokens || 0,\n totalTokens: response.usage?.total_tokens || 0,\n },\n model: response.model,\n latencyMs,\n finishReason: choice.finish_reason || \"stop\",\n }\n\n await globalEventBus.emit(\"provider:complete\", {\n provider: this.name,\n model,\n tokens: result.usage.totalTokens,\n latencyMs,\n } as any)\n\n return result\n } catch (err: any) {\n const latencyMs = Date.now() - start\n await globalEventBus.emit(\"provider:error\", {\n provider: this.name,\n model,\n error: err.message,\n } as any)\n throw new ProviderError(this.name, err.message, { model, latencyMs })\n }\n }\n\n async *streamComplete(request: CompletionRequest): AsyncIterable<StreamChunk> {\n const start = Date.now()\n const model = request.model || this.config.model || this.defaultModel\n\n await globalEventBus.emit(\"provider:start\", {\n provider: this.name,\n model,\n } as any)\n\n try {\n const messages = this.buildMessages(request)\n const tools = this.buildTools(request.tools)\n\n const stream = await this.client.chat.completions.create({\n model,\n messages,\n tools,\n temperature: request.temperature ?? this.config.temperature,\n max_tokens: request.maxTokens ?? this.config.maxTokens,\n top_p: request.topP ?? this.config.topP,\n stream: true,\n })\n\n let fullContent = \"\"\n const accToolCalls = new Map<number, { id: string; name: string; args: string }>()\n\n for await (const chunk of stream) {\n const delta = chunk.choices[0]?.delta\n\n if (delta?.content) {\n fullContent += delta.content\n yield { type: \"text\", text: delta.content }\n }\n\n if (delta?.tool_calls) {\n for (const tc of delta.tool_calls) {\n if (!accToolCalls.has(tc.index)) {\n accToolCalls.set(tc.index, { id: \"\", name: \"\", args: \"\" })\n }\n const entry = accToolCalls.get(tc.index)!\n if (tc.id) entry.id = tc.id\n if (tc.function?.name) entry.name = tc.function.name\n if (tc.function?.arguments) entry.args += tc.function.arguments\n }\n }\n\n if (chunk.choices[0]?.finish_reason) {\n const finishReason = chunk.choices[0].finish_reason\n const toolCalls = Array.from(accToolCalls.values())\n .filter((tc) => tc.id && tc.name)\n .map((tc) => ({\n id: tc.id,\n name: tc.name,\n args: JSON.parse(tc.args || \"{}\"),\n }))\n\n yield {\n type: \"finish\",\n content: fullContent,\n toolCalls,\n usage: {\n promptTokens: chunk.usage?.prompt_tokens || 0,\n completionTokens: chunk.usage?.completion_tokens || 0,\n totalTokens: chunk.usage?.total_tokens || 0,\n },\n model,\n finishReason,\n }\n }\n }\n\n await globalEventBus.emit(\"provider:complete\", {\n provider: this.name,\n model,\n tokens: 0,\n latencyMs: Date.now() - start,\n } as any)\n } catch (err: any) {\n await globalEventBus.emit(\"provider:error\", {\n provider: this.name,\n model,\n error: err.message,\n } as any)\n throw new ProviderError(this.name, err.message, { model, latencyMs: Date.now() - start })\n }\n }\n\n async getModels(): Promise<string[]> {\n try {\n const response = await fetch(\"https://api.groq.com/openai/v1/models\", {\n headers: {\n Authorization: `Bearer ${getGroqKey()}`,\n },\n })\n const data: any = await response.json()\n return data.data?.map((m: any) => m.id) || []\n } catch {\n return [this.defaultModel]\n }\n }\n}\n"],"mappings":"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","names":["import_core","OpenAI","import_core","import_secrets","import_openai","import_core","import_secrets","OpenAI"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { ProviderName, ProviderConfig, CompletionRequest, CompletionResponse, StreamChunk } from '@lupaflow/types';
|
|
2
|
+
|
|
3
|
+
interface LLMProvider$1 {
|
|
4
|
+
readonly name: string;
|
|
5
|
+
readonly defaultModel: string;
|
|
6
|
+
config: ProviderConfig;
|
|
7
|
+
complete(request: CompletionRequest): Promise<CompletionResponse>;
|
|
8
|
+
streamComplete(request: CompletionRequest): AsyncIterable<StreamChunk>;
|
|
9
|
+
getModels?(): Promise<string[]>;
|
|
10
|
+
validateConfig(): boolean;
|
|
11
|
+
}
|
|
12
|
+
declare class ProviderRegistry {
|
|
13
|
+
private providers;
|
|
14
|
+
private instances;
|
|
15
|
+
register(name: ProviderName, ctor: new (config: ProviderConfig) => LLMProvider$1): void;
|
|
16
|
+
get(name: ProviderName, config?: ProviderConfig): LLMProvider$1;
|
|
17
|
+
has(name: string): name is ProviderName;
|
|
18
|
+
list(): ProviderName[];
|
|
19
|
+
}
|
|
20
|
+
declare const providerRegistry: ProviderRegistry;
|
|
21
|
+
|
|
22
|
+
interface LLMProvider {
|
|
23
|
+
readonly name: string;
|
|
24
|
+
readonly defaultModel: string;
|
|
25
|
+
config: ProviderConfig;
|
|
26
|
+
complete(request: CompletionRequest): Promise<CompletionResponse>;
|
|
27
|
+
streamComplete(request: CompletionRequest): AsyncIterable<StreamChunk>;
|
|
28
|
+
getModels?(): Promise<string[]>;
|
|
29
|
+
validateConfig(): boolean;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
declare class OpenRouterProvider implements LLMProvider {
|
|
33
|
+
readonly name = "openrouter";
|
|
34
|
+
readonly defaultModel = "openai/gpt-4o-mini";
|
|
35
|
+
config: ProviderConfig;
|
|
36
|
+
private client;
|
|
37
|
+
constructor(config?: ProviderConfig);
|
|
38
|
+
validateConfig(): boolean;
|
|
39
|
+
private buildMessages;
|
|
40
|
+
private buildTools;
|
|
41
|
+
complete(request: CompletionRequest): Promise<CompletionResponse>;
|
|
42
|
+
streamComplete(request: CompletionRequest): AsyncIterable<StreamChunk>;
|
|
43
|
+
getModels(): Promise<string[]>;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
declare class GoogleProvider implements LLMProvider {
|
|
47
|
+
readonly name = "google";
|
|
48
|
+
readonly defaultModel = "gemini-1.5-flash";
|
|
49
|
+
config: ProviderConfig;
|
|
50
|
+
private client;
|
|
51
|
+
constructor(config?: ProviderConfig);
|
|
52
|
+
validateConfig(): boolean;
|
|
53
|
+
private buildContents;
|
|
54
|
+
complete(request: CompletionRequest): Promise<CompletionResponse>;
|
|
55
|
+
streamComplete(request: CompletionRequest): AsyncIterable<StreamChunk>;
|
|
56
|
+
getModels(): Promise<string[]>;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
declare class GroqProvider implements LLMProvider {
|
|
60
|
+
readonly name = "groq";
|
|
61
|
+
readonly defaultModel = "llama-3.3-70b-versatile";
|
|
62
|
+
config: ProviderConfig;
|
|
63
|
+
private client;
|
|
64
|
+
constructor(config?: ProviderConfig);
|
|
65
|
+
validateConfig(): boolean;
|
|
66
|
+
private buildMessages;
|
|
67
|
+
private buildTools;
|
|
68
|
+
complete(request: CompletionRequest): Promise<CompletionResponse>;
|
|
69
|
+
streamComplete(request: CompletionRequest): AsyncIterable<StreamChunk>;
|
|
70
|
+
getModels(): Promise<string[]>;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export { GoogleProvider, GroqProvider, type LLMProvider, OpenRouterProvider, providerRegistry };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { ProviderName, ProviderConfig, CompletionRequest, CompletionResponse, StreamChunk } from '@lupaflow/types';
|
|
2
|
+
|
|
3
|
+
interface LLMProvider$1 {
|
|
4
|
+
readonly name: string;
|
|
5
|
+
readonly defaultModel: string;
|
|
6
|
+
config: ProviderConfig;
|
|
7
|
+
complete(request: CompletionRequest): Promise<CompletionResponse>;
|
|
8
|
+
streamComplete(request: CompletionRequest): AsyncIterable<StreamChunk>;
|
|
9
|
+
getModels?(): Promise<string[]>;
|
|
10
|
+
validateConfig(): boolean;
|
|
11
|
+
}
|
|
12
|
+
declare class ProviderRegistry {
|
|
13
|
+
private providers;
|
|
14
|
+
private instances;
|
|
15
|
+
register(name: ProviderName, ctor: new (config: ProviderConfig) => LLMProvider$1): void;
|
|
16
|
+
get(name: ProviderName, config?: ProviderConfig): LLMProvider$1;
|
|
17
|
+
has(name: string): name is ProviderName;
|
|
18
|
+
list(): ProviderName[];
|
|
19
|
+
}
|
|
20
|
+
declare const providerRegistry: ProviderRegistry;
|
|
21
|
+
|
|
22
|
+
interface LLMProvider {
|
|
23
|
+
readonly name: string;
|
|
24
|
+
readonly defaultModel: string;
|
|
25
|
+
config: ProviderConfig;
|
|
26
|
+
complete(request: CompletionRequest): Promise<CompletionResponse>;
|
|
27
|
+
streamComplete(request: CompletionRequest): AsyncIterable<StreamChunk>;
|
|
28
|
+
getModels?(): Promise<string[]>;
|
|
29
|
+
validateConfig(): boolean;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
declare class OpenRouterProvider implements LLMProvider {
|
|
33
|
+
readonly name = "openrouter";
|
|
34
|
+
readonly defaultModel = "openai/gpt-4o-mini";
|
|
35
|
+
config: ProviderConfig;
|
|
36
|
+
private client;
|
|
37
|
+
constructor(config?: ProviderConfig);
|
|
38
|
+
validateConfig(): boolean;
|
|
39
|
+
private buildMessages;
|
|
40
|
+
private buildTools;
|
|
41
|
+
complete(request: CompletionRequest): Promise<CompletionResponse>;
|
|
42
|
+
streamComplete(request: CompletionRequest): AsyncIterable<StreamChunk>;
|
|
43
|
+
getModels(): Promise<string[]>;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
declare class GoogleProvider implements LLMProvider {
|
|
47
|
+
readonly name = "google";
|
|
48
|
+
readonly defaultModel = "gemini-1.5-flash";
|
|
49
|
+
config: ProviderConfig;
|
|
50
|
+
private client;
|
|
51
|
+
constructor(config?: ProviderConfig);
|
|
52
|
+
validateConfig(): boolean;
|
|
53
|
+
private buildContents;
|
|
54
|
+
complete(request: CompletionRequest): Promise<CompletionResponse>;
|
|
55
|
+
streamComplete(request: CompletionRequest): AsyncIterable<StreamChunk>;
|
|
56
|
+
getModels(): Promise<string[]>;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
declare class GroqProvider implements LLMProvider {
|
|
60
|
+
readonly name = "groq";
|
|
61
|
+
readonly defaultModel = "llama-3.3-70b-versatile";
|
|
62
|
+
config: ProviderConfig;
|
|
63
|
+
private client;
|
|
64
|
+
constructor(config?: ProviderConfig);
|
|
65
|
+
validateConfig(): boolean;
|
|
66
|
+
private buildMessages;
|
|
67
|
+
private buildTools;
|
|
68
|
+
complete(request: CompletionRequest): Promise<CompletionResponse>;
|
|
69
|
+
streamComplete(request: CompletionRequest): AsyncIterable<StreamChunk>;
|
|
70
|
+
getModels(): Promise<string[]>;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export { GoogleProvider, GroqProvider, type LLMProvider, OpenRouterProvider, providerRegistry };
|