universal-llm-client 3.0.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/LICENSE +21 -0
- package/README.md +414 -0
- package/dist/ai-model.d.ts +53 -0
- package/dist/ai-model.d.ts.map +1 -0
- package/dist/ai-model.js +159 -0
- package/dist/ai-model.js.map +1 -0
- package/dist/auditor.d.ts +78 -0
- package/dist/auditor.d.ts.map +1 -0
- package/dist/auditor.js +104 -0
- package/dist/auditor.js.map +1 -0
- package/dist/client.d.ts +75 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +240 -0
- package/dist/client.js.map +1 -0
- package/dist/http.d.ts +47 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +186 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +41 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces.d.ts +324 -0
- package/dist/interfaces.d.ts.map +1 -0
- package/dist/interfaces.js +63 -0
- package/dist/interfaces.js.map +1 -0
- package/dist/mcp.d.ts +85 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +255 -0
- package/dist/mcp.js.map +1 -0
- package/dist/providers/google.d.ts +33 -0
- package/dist/providers/google.d.ts.map +1 -0
- package/dist/providers/google.js +426 -0
- package/dist/providers/google.js.map +1 -0
- package/dist/providers/index.d.ts +7 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +7 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/ollama.d.ts +26 -0
- package/dist/providers/ollama.d.ts.map +1 -0
- package/dist/providers/ollama.js +304 -0
- package/dist/providers/ollama.js.map +1 -0
- package/dist/providers/openai.d.ts +20 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +251 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/router.d.ts +87 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.js +260 -0
- package/dist/router.js.map +1 -0
- package/dist/stream-decoder.d.ts +112 -0
- package/dist/stream-decoder.d.ts.map +1 -0
- package/dist/stream-decoder.js +238 -0
- package/dist/stream-decoder.js.map +1 -0
- package/dist/tools.d.ts +78 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +207 -0
- package/dist/tools.js.map +1 -0
- package/package.json +91 -0
package/dist/mcp.d.ts
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Universal LLM Client v3 — MCP Integration
|
|
3
|
+
*
|
|
4
|
+
* Native MCP tool discovery and execution bridge.
|
|
5
|
+
* Uses @modelcontextprotocol/sdk as a peer dependency.
|
|
6
|
+
*
|
|
7
|
+
* Supports:
|
|
8
|
+
* - Stdio transport (Node/Bun/Deno — spawns server processes)
|
|
9
|
+
* - Streamable HTTP transport (all runtimes including browsers)
|
|
10
|
+
*
|
|
11
|
+
* Usage:
|
|
12
|
+
* const mcp = new MCPToolBridge({
|
|
13
|
+
* servers: {
|
|
14
|
+
* filesystem: { command: 'npx', args: ['-y', '@modelcontextprotocol/server-filesystem', './'] },
|
|
15
|
+
* weather: { url: 'https://mcp.example.com/weather' },
|
|
16
|
+
* }
|
|
17
|
+
* });
|
|
18
|
+
* await mcp.connect();
|
|
19
|
+
* await mcp.registerTools(model); // or registerTools(model)
|
|
20
|
+
* // ... use model.chatWithTools() — MCP tools are now callable
|
|
21
|
+
* await mcp.disconnect();
|
|
22
|
+
*/
|
|
23
|
+
import type { AIModel } from './ai-model.js';
|
|
24
|
+
import type { Auditor } from './auditor.js';
|
|
25
|
+
export interface MCPServerConfig {
|
|
26
|
+
/** Stdio transport: command to spawn the MCP server */
|
|
27
|
+
command?: string;
|
|
28
|
+
/** Stdio transport: arguments for the command */
|
|
29
|
+
args?: string[];
|
|
30
|
+
/** Stdio transport: environment variables for the spawned process */
|
|
31
|
+
env?: Record<string, string>;
|
|
32
|
+
/** HTTP transport: URL of the remote MCP server */
|
|
33
|
+
url?: string;
|
|
34
|
+
/** HTTP transport: additional headers for requests */
|
|
35
|
+
headers?: Record<string, string>;
|
|
36
|
+
}
|
|
37
|
+
export interface MCPBridgeConfig {
|
|
38
|
+
/** Named MCP server configurations */
|
|
39
|
+
servers: Record<string, MCPServerConfig>;
|
|
40
|
+
/** Auditor for observability */
|
|
41
|
+
auditor?: Auditor;
|
|
42
|
+
}
|
|
43
|
+
export interface MCPTool {
|
|
44
|
+
/** Server this tool came from */
|
|
45
|
+
serverName: string;
|
|
46
|
+
/** Tool name (as reported by the server) */
|
|
47
|
+
name: string;
|
|
48
|
+
/** Full qualified name (serverName:toolName) */
|
|
49
|
+
qualifiedName: string;
|
|
50
|
+
/** Tool description */
|
|
51
|
+
description: string;
|
|
52
|
+
/** JSON Schema for tool input */
|
|
53
|
+
inputSchema: Record<string, unknown>;
|
|
54
|
+
}
|
|
55
|
+
export declare class MCPToolBridge {
|
|
56
|
+
private config;
|
|
57
|
+
private auditor;
|
|
58
|
+
private clients;
|
|
59
|
+
private transports;
|
|
60
|
+
private discoveredTools;
|
|
61
|
+
private connected;
|
|
62
|
+
constructor(config: MCPBridgeConfig);
|
|
63
|
+
/**
|
|
64
|
+
* Connect to all configured MCP servers and discover their tools.
|
|
65
|
+
* Requires @modelcontextprotocol/sdk to be installed.
|
|
66
|
+
*/
|
|
67
|
+
connect(): Promise<void>;
|
|
68
|
+
/**
|
|
69
|
+
* Register all discovered MCP tools with an AIModel instance.
|
|
70
|
+
* Each MCP tool becomes a callable tool that forwards execution
|
|
71
|
+
* to the appropriate MCP server.
|
|
72
|
+
*/
|
|
73
|
+
registerTools(model: AIModel): Promise<void>;
|
|
74
|
+
/**
|
|
75
|
+
* Get all discovered MCP tools (for inspection).
|
|
76
|
+
*/
|
|
77
|
+
getTools(): ReadonlyArray<MCPTool>;
|
|
78
|
+
/**
|
|
79
|
+
* Disconnect from all MCP servers and clean up.
|
|
80
|
+
*/
|
|
81
|
+
disconnect(): Promise<void>;
|
|
82
|
+
private createToolHandler;
|
|
83
|
+
private convertInputSchema;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=mcp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAO5C,MAAM,WAAW,eAAe;IAC5B,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,qEAAqE;IACrE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,mDAAmD;IACnD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,eAAe;IAC5B,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACzC,gCAAgC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,OAAO;IACpB,iCAAiC;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,aAAa,EAAE,MAAM,CAAC;IACtB,uBAAuB;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAiBD,qBAAa,aAAa;IACtB,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,OAAO,CAAyC;IACxD,OAAO,CAAC,UAAU,CAAmC;IACrD,OAAO,CAAC,eAAe,CAAiB;IACxC,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE,eAAe;IASnC;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAwH9B;;;;OAIG;IACG,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAelD;;OAEG;IACH,QAAQ,IAAI,aAAa,CAAC,OAAO,CAAC;IAQlC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAuBjC,OAAO,CAAC,iBAAiB;IA2DzB,OAAO,CAAC,kBAAkB;CAO7B"}
|
package/dist/mcp.js
ADDED
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Universal LLM Client v3 — MCP Integration
|
|
3
|
+
*
|
|
4
|
+
* Native MCP tool discovery and execution bridge.
|
|
5
|
+
* Uses @modelcontextprotocol/sdk as a peer dependency.
|
|
6
|
+
*
|
|
7
|
+
* Supports:
|
|
8
|
+
* - Stdio transport (Node/Bun/Deno — spawns server processes)
|
|
9
|
+
* - Streamable HTTP transport (all runtimes including browsers)
|
|
10
|
+
*
|
|
11
|
+
* Usage:
|
|
12
|
+
* const mcp = new MCPToolBridge({
|
|
13
|
+
* servers: {
|
|
14
|
+
* filesystem: { command: 'npx', args: ['-y', '@modelcontextprotocol/server-filesystem', './'] },
|
|
15
|
+
* weather: { url: 'https://mcp.example.com/weather' },
|
|
16
|
+
* }
|
|
17
|
+
* });
|
|
18
|
+
* await mcp.connect();
|
|
19
|
+
* await mcp.registerTools(model); // or registerTools(model)
|
|
20
|
+
* // ... use model.chatWithTools() — MCP tools are now callable
|
|
21
|
+
* await mcp.disconnect();
|
|
22
|
+
*/
|
|
23
|
+
import { NoopAuditor } from './auditor.js';
|
|
24
|
+
// ============================================================================
|
|
25
|
+
// MCPToolBridge
|
|
26
|
+
// ============================================================================
|
|
27
|
+
export class MCPToolBridge {
|
|
28
|
+
config;
|
|
29
|
+
auditor;
|
|
30
|
+
clients = new Map();
|
|
31
|
+
transports = new Map();
|
|
32
|
+
discoveredTools = [];
|
|
33
|
+
connected = false;
|
|
34
|
+
constructor(config) {
|
|
35
|
+
this.config = config;
|
|
36
|
+
this.auditor = config.auditor ?? new NoopAuditor();
|
|
37
|
+
}
|
|
38
|
+
// ========================================================================
|
|
39
|
+
// Connection Lifecycle
|
|
40
|
+
// ========================================================================
|
|
41
|
+
/**
|
|
42
|
+
* Connect to all configured MCP servers and discover their tools.
|
|
43
|
+
* Requires @modelcontextprotocol/sdk to be installed.
|
|
44
|
+
*/
|
|
45
|
+
async connect() {
|
|
46
|
+
if (this.connected)
|
|
47
|
+
return;
|
|
48
|
+
// Dynamic import of MCP SDK (peer dependency)
|
|
49
|
+
let sdk;
|
|
50
|
+
try {
|
|
51
|
+
// @ts-ignore — peer dependency, may not be installed
|
|
52
|
+
sdk = await import('@modelcontextprotocol/sdk/client/index.js');
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
throw new Error('MCP integration requires @modelcontextprotocol/sdk.\n' +
|
|
56
|
+
'Install it: bun add @modelcontextprotocol/sdk');
|
|
57
|
+
}
|
|
58
|
+
const entries = Object.entries(this.config.servers);
|
|
59
|
+
for (const [serverName, serverConfig] of entries) {
|
|
60
|
+
try {
|
|
61
|
+
const client = new sdk.Client({ name: 'universal-llm-client', version: '3.0.0' }, { capabilities: {} });
|
|
62
|
+
let transport;
|
|
63
|
+
if (serverConfig.url) {
|
|
64
|
+
// HTTP transport (all runtimes)
|
|
65
|
+
if (!sdk.StreamableHTTPClientTransport) {
|
|
66
|
+
// Try separate import path
|
|
67
|
+
// @ts-ignore — peer dependency, may not be installed
|
|
68
|
+
const httpModule = await import('@modelcontextprotocol/sdk/client/streamableHttp.js').catch(() => null);
|
|
69
|
+
if (!httpModule?.StreamableHTTPClientTransport) {
|
|
70
|
+
throw new Error('StreamableHTTPClientTransport not available in this SDK version');
|
|
71
|
+
}
|
|
72
|
+
transport = new httpModule.StreamableHTTPClientTransport(new URL(serverConfig.url), serverConfig.headers ? { requestInit: { headers: serverConfig.headers } } : undefined);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
transport = new sdk.StreamableHTTPClientTransport(new URL(serverConfig.url), serverConfig.headers ? { requestInit: { headers: serverConfig.headers } } : undefined);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
else if (serverConfig.command) {
|
|
79
|
+
// Stdio transport (Node/Bun/Deno only)
|
|
80
|
+
if (!sdk.StdioClientTransport) {
|
|
81
|
+
// @ts-ignore — peer dependency, may not be installed
|
|
82
|
+
const stdioModule = await import('@modelcontextprotocol/sdk/client/stdio.js').catch(() => null);
|
|
83
|
+
if (!stdioModule?.StdioClientTransport) {
|
|
84
|
+
throw new Error('Stdio transport not available. This is expected in browser environments.\n' +
|
|
85
|
+
'Use HTTP transport (url) instead, or run in Node/Bun/Deno.');
|
|
86
|
+
}
|
|
87
|
+
transport = new stdioModule.StdioClientTransport({
|
|
88
|
+
command: serverConfig.command,
|
|
89
|
+
args: serverConfig.args,
|
|
90
|
+
env: serverConfig.env,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
transport = new sdk.StdioClientTransport({
|
|
95
|
+
command: serverConfig.command,
|
|
96
|
+
args: serverConfig.args,
|
|
97
|
+
env: serverConfig.env,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
throw new Error(`MCP server "${serverName}" must have either "url" or "command" configured`);
|
|
103
|
+
}
|
|
104
|
+
await client.connect(transport);
|
|
105
|
+
this.clients.set(serverName, client);
|
|
106
|
+
this.transports.set(serverName, transport);
|
|
107
|
+
// Discover tools
|
|
108
|
+
const toolList = await client.listTools();
|
|
109
|
+
for (const tool of toolList.tools) {
|
|
110
|
+
this.discoveredTools.push({
|
|
111
|
+
serverName,
|
|
112
|
+
name: tool.name,
|
|
113
|
+
qualifiedName: `${serverName}:${tool.name}`,
|
|
114
|
+
description: tool.description ?? '',
|
|
115
|
+
inputSchema: tool.inputSchema,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
this.auditor.record({
|
|
119
|
+
timestamp: Date.now(),
|
|
120
|
+
type: 'response',
|
|
121
|
+
metadata: {
|
|
122
|
+
event: 'mcp_connected',
|
|
123
|
+
server: serverName,
|
|
124
|
+
toolCount: toolList.tools.length,
|
|
125
|
+
},
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
this.auditor.record({
|
|
130
|
+
timestamp: Date.now(),
|
|
131
|
+
type: 'error',
|
|
132
|
+
error: error instanceof Error ? error.message : String(error),
|
|
133
|
+
metadata: { event: 'mcp_connect_failed', server: serverName },
|
|
134
|
+
});
|
|
135
|
+
throw error;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
this.connected = true;
|
|
139
|
+
}
|
|
140
|
+
// ========================================================================
|
|
141
|
+
// Tool Registration
|
|
142
|
+
// ========================================================================
|
|
143
|
+
/**
|
|
144
|
+
* Register all discovered MCP tools with an AIModel instance.
|
|
145
|
+
* Each MCP tool becomes a callable tool that forwards execution
|
|
146
|
+
* to the appropriate MCP server.
|
|
147
|
+
*/
|
|
148
|
+
async registerTools(model) {
|
|
149
|
+
if (!this.connected) {
|
|
150
|
+
await this.connect();
|
|
151
|
+
}
|
|
152
|
+
const tools = this.discoveredTools.map(mcpTool => ({
|
|
153
|
+
name: mcpTool.qualifiedName,
|
|
154
|
+
description: mcpTool.description,
|
|
155
|
+
parameters: this.convertInputSchema(mcpTool.inputSchema),
|
|
156
|
+
handler: this.createToolHandler(mcpTool),
|
|
157
|
+
}));
|
|
158
|
+
model.registerTools(tools);
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Get all discovered MCP tools (for inspection).
|
|
162
|
+
*/
|
|
163
|
+
getTools() {
|
|
164
|
+
return this.discoveredTools;
|
|
165
|
+
}
|
|
166
|
+
// ========================================================================
|
|
167
|
+
// Disconnect
|
|
168
|
+
// ========================================================================
|
|
169
|
+
/**
|
|
170
|
+
* Disconnect from all MCP servers and clean up.
|
|
171
|
+
*/
|
|
172
|
+
async disconnect() {
|
|
173
|
+
for (const [serverName, client] of this.clients) {
|
|
174
|
+
try {
|
|
175
|
+
await client.close();
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
this.auditor.record({
|
|
179
|
+
timestamp: Date.now(),
|
|
180
|
+
type: 'error',
|
|
181
|
+
error: error instanceof Error ? error.message : String(error),
|
|
182
|
+
metadata: { event: 'mcp_disconnect_failed', server: serverName },
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
this.clients.clear();
|
|
187
|
+
this.transports.clear();
|
|
188
|
+
this.discoveredTools = [];
|
|
189
|
+
this.connected = false;
|
|
190
|
+
}
|
|
191
|
+
// ========================================================================
|
|
192
|
+
// Internal
|
|
193
|
+
// ========================================================================
|
|
194
|
+
createToolHandler(mcpTool) {
|
|
195
|
+
return async (args) => {
|
|
196
|
+
const client = this.clients.get(mcpTool.serverName);
|
|
197
|
+
if (!client) {
|
|
198
|
+
throw new Error(`MCP server "${mcpTool.serverName}" is not connected`);
|
|
199
|
+
}
|
|
200
|
+
const start = Date.now();
|
|
201
|
+
this.auditor.record({
|
|
202
|
+
timestamp: start,
|
|
203
|
+
type: 'tool_call',
|
|
204
|
+
metadata: {
|
|
205
|
+
event: 'mcp_tool_call',
|
|
206
|
+
server: mcpTool.serverName,
|
|
207
|
+
tool: mcpTool.name,
|
|
208
|
+
},
|
|
209
|
+
});
|
|
210
|
+
try {
|
|
211
|
+
const result = await client.callTool({
|
|
212
|
+
name: mcpTool.name,
|
|
213
|
+
arguments: args,
|
|
214
|
+
});
|
|
215
|
+
// Extract text content from MCP response
|
|
216
|
+
const textParts = result.content
|
|
217
|
+
.filter(c => c.type === 'text' && c.text)
|
|
218
|
+
.map(c => c.text);
|
|
219
|
+
const output = textParts.length === 1 ? textParts[0] : textParts.join('\n');
|
|
220
|
+
this.auditor.record({
|
|
221
|
+
timestamp: Date.now(),
|
|
222
|
+
type: 'tool_result',
|
|
223
|
+
metadata: {
|
|
224
|
+
event: 'mcp_tool_result',
|
|
225
|
+
server: mcpTool.serverName,
|
|
226
|
+
tool: mcpTool.name,
|
|
227
|
+
duration: Date.now() - start,
|
|
228
|
+
},
|
|
229
|
+
});
|
|
230
|
+
return output;
|
|
231
|
+
}
|
|
232
|
+
catch (error) {
|
|
233
|
+
this.auditor.record({
|
|
234
|
+
timestamp: Date.now(),
|
|
235
|
+
type: 'error',
|
|
236
|
+
error: error instanceof Error ? error.message : String(error),
|
|
237
|
+
metadata: {
|
|
238
|
+
event: 'mcp_tool_error',
|
|
239
|
+
server: mcpTool.serverName,
|
|
240
|
+
tool: mcpTool.name,
|
|
241
|
+
},
|
|
242
|
+
});
|
|
243
|
+
throw error;
|
|
244
|
+
}
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
convertInputSchema(schema) {
|
|
248
|
+
return {
|
|
249
|
+
type: 'object',
|
|
250
|
+
properties: schema['properties'] ?? {},
|
|
251
|
+
required: schema['required'],
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
//# sourceMappingURL=mcp.js.map
|
package/dist/mcp.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Universal LLM Client v3 — Google Provider
|
|
3
|
+
*
|
|
4
|
+
* Implements BaseLLMClient for Google AI Studio and Vertex AI.
|
|
5
|
+
* Supports Gemini and Gemma models with full tool calling,
|
|
6
|
+
* streaming, embeddings, and system prompt handling.
|
|
7
|
+
*/
|
|
8
|
+
import { BaseLLMClient } from '../client.js';
|
|
9
|
+
import type { LLMClientOptions, LLMChatMessage, LLMChatResponse, ChatOptions } from '../interfaces.js';
|
|
10
|
+
import type { DecodedEvent } from '../stream-decoder.js';
|
|
11
|
+
import type { Auditor } from '../auditor.js';
|
|
12
|
+
export declare class GoogleClient extends BaseLLMClient {
|
|
13
|
+
private isVertex;
|
|
14
|
+
private apiVersion;
|
|
15
|
+
constructor(options: LLMClientOptions, auditor?: Auditor);
|
|
16
|
+
private getBaseUrl;
|
|
17
|
+
private getChatUrl;
|
|
18
|
+
private getStreamUrl;
|
|
19
|
+
private getEmbedUrl;
|
|
20
|
+
private getHeaders;
|
|
21
|
+
chat(messages: LLMChatMessage[], options?: ChatOptions): Promise<LLMChatResponse>;
|
|
22
|
+
chatStream(messages: LLMChatMessage[], options?: ChatOptions): AsyncGenerator<DecodedEvent, LLMChatResponse | void, unknown>;
|
|
23
|
+
embed(text: string): Promise<number[]>;
|
|
24
|
+
getModels(): Promise<string[]>;
|
|
25
|
+
private buildRequestBody;
|
|
26
|
+
private buildGenerationConfig;
|
|
27
|
+
private convertToGoogleMessages;
|
|
28
|
+
private convertContentToGoogleParts;
|
|
29
|
+
private convertToGoogleTool;
|
|
30
|
+
private convertFunctionCallToToolCall;
|
|
31
|
+
private parseGoogleResponse;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=google.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../src/providers/google.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7C,OAAO,KAAK,EACR,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,WAAW,EAYd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,qBAAa,YAAa,SAAQ,aAAa;IAC3C,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,UAAU,CAAS;gBAEf,OAAO,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,OAAO;IAUxD,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,UAAU;IAcZ,IAAI,CACN,QAAQ,EAAE,cAAc,EAAE,EAC1B,OAAO,CAAC,EAAE,WAAW,GACtB,OAAO,CAAC,eAAe,CAAC;IAqCpB,UAAU,CACb,QAAQ,EAAE,cAAc,EAAE,EAC1B,OAAO,CAAC,EAAE,WAAW,GACtB,cAAc,CAAC,YAAY,EAAE,eAAe,GAAG,IAAI,EAAE,OAAO,CAAC;IAkG1D,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAqBtC,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAwBpC,OAAO,CAAC,gBAAgB;IA+BxB,OAAO,CAAC,qBAAqB;IAiB7B,OAAO,CAAC,uBAAuB;IA4F/B,OAAO,CAAC,2BAA2B;IA+BnC,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,6BAA6B;IAsBrC,OAAO,CAAC,mBAAmB;CAwC9B"}
|