@f3d1/llmkit-ai-sdk-provider 0.0.1

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.
@@ -0,0 +1,14 @@
1
+ import type { LanguageModelV3 } from '@ai-sdk/provider';
2
+ export interface LLMKitProviderConfig {
3
+ apiKey: string;
4
+ baseUrl?: string;
5
+ sessionId?: string;
6
+ budgetId?: string;
7
+ provider?: 'anthropic' | 'openai' | 'gemini';
8
+ providerKey?: string;
9
+ }
10
+ export declare function createLLMKit(config: LLMKitProviderConfig): {
11
+ chat: (modelId: string) => LanguageModelV3;
12
+ languageModel: (modelId: string) => LanguageModelV3;
13
+ };
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EAMhB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,oBAAoB;oBAGhC,MAAM,KAAG,eAAe;6BAAxB,MAAM,KAAG,eAAe;EAwKhD"}
package/dist/index.js ADDED
@@ -0,0 +1,192 @@
1
+ export function createLLMKit(config) {
2
+ const baseUrl = (config.baseUrl || 'https://api.llmkit.dev').replace(/\/$/, '');
3
+ function chat(modelId) {
4
+ return {
5
+ specificationVersion: 'v3',
6
+ provider: 'llmkit',
7
+ modelId,
8
+ supportedUrls: {},
9
+ async doGenerate(options) {
10
+ const messages = flattenPrompt(options.prompt);
11
+ const res = await fetch(`${baseUrl}/v1/chat/completions`, {
12
+ method: 'POST',
13
+ headers: buildHeaders(config),
14
+ body: JSON.stringify({
15
+ model: modelId,
16
+ messages,
17
+ max_tokens: options.maxOutputTokens,
18
+ temperature: options.temperature,
19
+ }),
20
+ signal: options.abortSignal,
21
+ });
22
+ if (!res.ok) {
23
+ const errBody = await res.text();
24
+ throw new Error(`LLMKit ${res.status}: ${errBody}`);
25
+ }
26
+ const raw = await res.json();
27
+ const usage = raw.usage;
28
+ const cost = raw.cost;
29
+ return {
30
+ content: [{ type: 'text', text: raw.content }],
31
+ finishReason: { unified: 'stop', raw: 'stop' },
32
+ usage: {
33
+ inputTokens: {
34
+ total: usage?.inputTokens,
35
+ noCache: undefined,
36
+ cacheRead: undefined,
37
+ cacheWrite: undefined,
38
+ },
39
+ outputTokens: {
40
+ total: usage?.outputTokens,
41
+ text: undefined,
42
+ reasoning: undefined,
43
+ },
44
+ },
45
+ providerMetadata: cost ? {
46
+ llmkit: cost,
47
+ } : undefined,
48
+ warnings: [],
49
+ };
50
+ },
51
+ async doStream(options) {
52
+ const messages = flattenPrompt(options.prompt);
53
+ const res = await fetch(`${baseUrl}/v1/chat/completions`, {
54
+ method: 'POST',
55
+ headers: buildHeaders(config),
56
+ body: JSON.stringify({
57
+ model: modelId,
58
+ messages,
59
+ max_tokens: options.maxOutputTokens,
60
+ temperature: options.temperature,
61
+ stream: true,
62
+ }),
63
+ signal: options.abortSignal,
64
+ });
65
+ if (!res.ok) {
66
+ const errBody = await res.text();
67
+ throw new Error(`LLMKit ${res.status}: ${errBody}`);
68
+ }
69
+ if (!res.body)
70
+ throw new Error('No response body');
71
+ const upstream = res.body;
72
+ let partId = 0;
73
+ const stream = new ReadableStream({
74
+ async start(controller) {
75
+ const reader = upstream.getReader();
76
+ const decoder = new TextDecoder();
77
+ let buffer = '';
78
+ let currentEvent = '';
79
+ let textStarted = false;
80
+ try {
81
+ while (true) {
82
+ const { done, value } = await reader.read();
83
+ if (done)
84
+ break;
85
+ buffer += decoder.decode(value, { stream: true });
86
+ const lines = buffer.split('\n');
87
+ buffer = lines.pop();
88
+ for (const line of lines) {
89
+ if (line.startsWith('event: ')) {
90
+ currentEvent = line.slice(7).trim();
91
+ continue;
92
+ }
93
+ if (!line.startsWith('data: ')) {
94
+ if (line === '')
95
+ currentEvent = '';
96
+ continue;
97
+ }
98
+ const payload = line.slice(6).trim();
99
+ if (!payload)
100
+ continue;
101
+ try {
102
+ const data = JSON.parse(payload);
103
+ if (currentEvent === 'delta' && data.text !== undefined) {
104
+ const id = String(partId++);
105
+ if (!textStarted) {
106
+ controller.enqueue({ type: 'text-start', id });
107
+ textStarted = true;
108
+ }
109
+ controller.enqueue({ type: 'text-delta', id, delta: data.text });
110
+ }
111
+ if (currentEvent === 'done') {
112
+ if (textStarted) {
113
+ controller.enqueue({ type: 'text-end', id: String(partId++) });
114
+ }
115
+ const usage = data.usage;
116
+ controller.enqueue({
117
+ type: 'finish',
118
+ finishReason: { unified: 'stop', raw: 'stop' },
119
+ usage: {
120
+ inputTokens: {
121
+ total: usage?.inputTokens,
122
+ noCache: undefined,
123
+ cacheRead: undefined,
124
+ cacheWrite: undefined,
125
+ },
126
+ outputTokens: {
127
+ total: usage?.outputTokens,
128
+ text: undefined,
129
+ reasoning: undefined,
130
+ },
131
+ },
132
+ providerMetadata: data.cost ? {
133
+ llmkit: data.cost,
134
+ } : undefined,
135
+ });
136
+ }
137
+ }
138
+ catch {
139
+ // partial json, skip
140
+ }
141
+ }
142
+ }
143
+ }
144
+ finally {
145
+ reader.releaseLock();
146
+ controller.close();
147
+ }
148
+ },
149
+ });
150
+ return { stream };
151
+ },
152
+ };
153
+ }
154
+ return { chat, languageModel: chat };
155
+ }
156
+ function buildHeaders(config) {
157
+ const headers = {
158
+ 'Authorization': `Bearer ${config.apiKey}`,
159
+ 'Content-Type': 'application/json',
160
+ 'x-llmkit-format': 'llmkit',
161
+ };
162
+ if (config.sessionId)
163
+ headers['x-llmkit-session-id'] = config.sessionId;
164
+ if (config.provider)
165
+ headers['x-llmkit-provider'] = config.provider;
166
+ if (config.providerKey)
167
+ headers['x-llmkit-provider-key'] = config.providerKey;
168
+ return headers;
169
+ }
170
+ function flattenPrompt(prompt) {
171
+ return prompt.map((msg) => {
172
+ if (msg.role === 'system') {
173
+ return { role: 'system', content: msg.content };
174
+ }
175
+ if (msg.role === 'user') {
176
+ const text = msg.content
177
+ .filter((part) => part.type === 'text')
178
+ .map((part) => part.text)
179
+ .join('');
180
+ return { role: 'user', content: text };
181
+ }
182
+ if (msg.role === 'assistant') {
183
+ const text = msg.content
184
+ .filter((part) => part.type === 'text')
185
+ .map((part) => part.text)
186
+ .join('');
187
+ return { role: 'assistant', content: text };
188
+ }
189
+ return { role: 'tool', content: JSON.stringify(msg.content) };
190
+ });
191
+ }
192
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "@f3d1/llmkit-ai-sdk-provider",
3
+ "version": "0.0.1",
4
+ "license": "MIT",
5
+ "description": "Vercel AI SDK v6 custom provider for LLMKit proxy",
6
+ "type": "module",
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js"
13
+ }
14
+ },
15
+ "files": ["dist"],
16
+ "scripts": {
17
+ "build": "tsc",
18
+ "typecheck": "tsc --noEmit",
19
+ "clean": "rm -rf dist"
20
+ },
21
+ "dependencies": {
22
+ "@ai-sdk/provider": "^3.0.0"
23
+ },
24
+ "peerDependencies": {
25
+ "ai": ">=6.0.0"
26
+ },
27
+ "peerDependenciesMeta": {
28
+ "ai": { "optional": true }
29
+ },
30
+ "devDependencies": {
31
+ "typescript": "^5.7.0"
32
+ }
33
+ }