@entro314labs/apple-intelligence-sdk 0.5.2 → 0.5.4
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 +31 -21
- package/dist/index.d.cts +0 -1
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +0 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +31 -21
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -4
package/dist/index.cjs
CHANGED
|
@@ -3,6 +3,31 @@ let _ai_sdk_provider_utils = require("@ai-sdk/provider-utils");
|
|
|
3
3
|
let _tauri_apps_api_core = require("@tauri-apps/api/core");
|
|
4
4
|
let _tauri_apps_api_event = require("@tauri-apps/api/event");
|
|
5
5
|
//#region src/provider.ts
|
|
6
|
+
/**
|
|
7
|
+
* Build an empty {@link LanguageModelV3Usage}.
|
|
8
|
+
*
|
|
9
|
+
* Apple Intelligence runs on-device and does not report token counts, so every
|
|
10
|
+
* field is `undefined`. The shape MUST be the nested LanguageModelV3/V4 usage
|
|
11
|
+
* (`inputTokens.total`, `outputTokens.total`) — the AI SDK's `asLanguageModelUsage`
|
|
12
|
+
* reads `usage.inputTokens.total`, so emitting the older flat shape
|
|
13
|
+
* (`inputTokens: undefined`) throws "Cannot read properties of undefined". A fresh
|
|
14
|
+
* object is returned per call so a consumer can never mutate shared state.
|
|
15
|
+
*/
|
|
16
|
+
function createEmptyUsage() {
|
|
17
|
+
return {
|
|
18
|
+
inputTokens: {
|
|
19
|
+
total: void 0,
|
|
20
|
+
noCache: void 0,
|
|
21
|
+
cacheRead: void 0,
|
|
22
|
+
cacheWrite: void 0
|
|
23
|
+
},
|
|
24
|
+
outputTokens: {
|
|
25
|
+
total: void 0,
|
|
26
|
+
text: void 0,
|
|
27
|
+
reasoning: void 0
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
}
|
|
6
31
|
function createAppleIntelligenceProvider(settings) {
|
|
7
32
|
const createModel = (modelId, modelSettings = {}) => new AppleIntelligenceChatLanguageModel(modelId, modelSettings, settings);
|
|
8
33
|
const provider = function(modelId, modelSettings) {
|
|
@@ -84,7 +109,7 @@ var AppleIntelligenceChatLanguageModel = class {
|
|
|
84
109
|
unified: "stop",
|
|
85
110
|
raw: "stop"
|
|
86
111
|
},
|
|
87
|
-
usage:
|
|
112
|
+
usage: createEmptyUsage(),
|
|
88
113
|
warnings: []
|
|
89
114
|
};
|
|
90
115
|
return {
|
|
@@ -96,7 +121,7 @@ var AppleIntelligenceChatLanguageModel = class {
|
|
|
96
121
|
unified: "stop",
|
|
97
122
|
raw: "stop"
|
|
98
123
|
},
|
|
99
|
-
usage:
|
|
124
|
+
usage: createEmptyUsage(),
|
|
100
125
|
warnings: []
|
|
101
126
|
};
|
|
102
127
|
}
|
|
@@ -121,7 +146,7 @@ var AppleIntelligenceChatLanguageModel = class {
|
|
|
121
146
|
unified: "tool-calls",
|
|
122
147
|
raw: "tool-calls"
|
|
123
148
|
},
|
|
124
|
-
usage:
|
|
149
|
+
usage: createEmptyUsage(),
|
|
125
150
|
warnings: []
|
|
126
151
|
};
|
|
127
152
|
return {
|
|
@@ -133,7 +158,7 @@ var AppleIntelligenceChatLanguageModel = class {
|
|
|
133
158
|
unified: "stop",
|
|
134
159
|
raw: "stop"
|
|
135
160
|
},
|
|
136
|
-
usage:
|
|
161
|
+
usage: createEmptyUsage(),
|
|
137
162
|
warnings: []
|
|
138
163
|
};
|
|
139
164
|
}
|
|
@@ -288,11 +313,7 @@ var AppleIntelligenceChatLanguageModel = class {
|
|
|
288
313
|
unified: "stop",
|
|
289
314
|
raw: "stop"
|
|
290
315
|
},
|
|
291
|
-
usage:
|
|
292
|
-
inputTokens: void 0,
|
|
293
|
-
outputTokens: void 0,
|
|
294
|
-
totalTokens: void 0
|
|
295
|
-
}
|
|
316
|
+
usage: createEmptyUsage()
|
|
296
317
|
});
|
|
297
318
|
controller.close();
|
|
298
319
|
} catch (err) {
|
|
@@ -336,11 +357,7 @@ var AppleIntelligenceChatLanguageModel = class {
|
|
|
336
357
|
unified: "stop",
|
|
337
358
|
raw: "stop"
|
|
338
359
|
},
|
|
339
|
-
usage:
|
|
340
|
-
inputTokens: void 0,
|
|
341
|
-
outputTokens: void 0,
|
|
342
|
-
totalTokens: void 0
|
|
343
|
-
}
|
|
360
|
+
usage: createEmptyUsage()
|
|
344
361
|
});
|
|
345
362
|
controller.close();
|
|
346
363
|
} catch (err) {
|
|
@@ -348,13 +365,6 @@ var AppleIntelligenceChatLanguageModel = class {
|
|
|
348
365
|
}
|
|
349
366
|
} });
|
|
350
367
|
}
|
|
351
|
-
emptyUsage() {
|
|
352
|
-
return {
|
|
353
|
-
inputTokens: void 0,
|
|
354
|
-
outputTokens: void 0,
|
|
355
|
-
totalTokens: void 0
|
|
356
|
-
};
|
|
357
|
-
}
|
|
358
368
|
};
|
|
359
369
|
//#endregion
|
|
360
370
|
//#region src/tauri.ts
|
package/dist/index.d.cts
CHANGED
|
@@ -142,7 +142,6 @@ declare class AppleIntelligenceChatLanguageModel implements LanguageModelV3 {
|
|
|
142
142
|
private formatToolResultOutput;
|
|
143
143
|
private createStreamFromEvents;
|
|
144
144
|
private createStreamFromChunks;
|
|
145
|
-
private emptyUsage;
|
|
146
145
|
}
|
|
147
146
|
//#endregion
|
|
148
147
|
export { type AppleIntelligenceAvailability, AppleIntelligenceChatLanguageModel, type AppleIntelligenceGenerateOptions, type AppleIntelligenceGenerateResult, type AppleIntelligenceMessage, type AppleIntelligenceStreamEvent, type AppleIntelligenceStreamOptions, type AppleIntelligenceToolCall, type AppleIntelligenceToolDefinition, type AppleIntelligenceTransport, type TauriAppleIntelligenceTransportOptions, createAppleIntelligenceProvider, createTauriAppleIntelligenceTransport };
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/transport.ts","../src/tauri.ts","../src/provider.ts"],"mappings":";;;;KAEY,wBAAA;EACV,IAAA;EACA,OAAA;EACA,IAAA;EACA,UAAA;EACA,SAAA,GAAY,KAAA;IACV,EAAA;IACA,IAAA;IACA,QAAA;MACE,IAAA;MACA,SAAA;IAAA;EAAA;AAAA;AAAA,KAKM,6BAAA;EACV,SAAA;EACA,MAAA;AAAA;AAAA,KAGU,+BAAA;EACV,IAAA;EACA,WAAA;EACA,UAAA,EAAY,WAAA;AAAA;AAAA,KAGF,yBAAA;EACV,EAAA;EACA,IAAA;EACA,QAAA;IACE,IAAA;IACA,SAAA;EAAA;AAAA;AAAA,KAIQ,gCAAA;EACV,QAAA,EAAU,wBAAA;EACV,KAAA,GAAQ,+BAAA;EACR,MAAA,GAAS,WAAA;EACT,WAAA;EACA,SAAA;EACA,kBAAA;AAAA;AAAA,KAGU,+BAAA;EACV,IAAA;EACA,SAAA,GAAY,yBAAA;EACZ,MAAA;AAAA;AAAA,KAGU,4BAAA;EACN,IAAA;EAAc,IAAA;AAAA;EAEd,IAAA;EACA,UAAA;EACA,QAAA;EACA,IAAA,EAAM,MAAA;AAAA;EAEN,IAAA;AAAA;EACA,IAAA;EAAe,OAAA;AAAA;AAAA,KAET,8BAAA;EACV,QAAA,EAAU,wBAAA;EACV,KAAA,GAAQ,+BAAA;EACR,WAAA;EACA,SAAA;EACA,kBAAA;EAzBA;AAGF;;;;EA4BE,WAAA,GAAc,WAAA;AAAA;AAAA,UAGC,0BAAA;EACf,iBAAA,IAAqB,OAAA,CAAQ,6BAAA;EAC7B,QAAA,CAAS,OAAA,EAAS,gCAAA,GAAmC,OAAA,CAAQ,+BAAA;EAC7D,MAAA,CAAO,OAAA,EAAS,8BAAA,GAAiC,aAAA,CAAc,4BAAA;AAAA;;;KChErD,sCAAA;EACV,aAAA;AAAA;AAAA,iBAGc,qCAAA,CACd,OAAA,GAAS,sCAAA,GACR,0BAAA;;;KCES,wBAAA;AAAA,KAEA,yBAAA;EACV,WAAA;EACA,SAAA;EACA,mBAAA;AAAA;AAAA,KAGU,iCAAA;EACV,SAAA,EAAW,0BAAA;EACX,UAAA;AAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/transport.ts","../src/tauri.ts","../src/provider.ts"],"mappings":"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"}
|
package/dist/index.d.mts
CHANGED
|
@@ -142,7 +142,6 @@ declare class AppleIntelligenceChatLanguageModel implements LanguageModelV3 {
|
|
|
142
142
|
private formatToolResultOutput;
|
|
143
143
|
private createStreamFromEvents;
|
|
144
144
|
private createStreamFromChunks;
|
|
145
|
-
private emptyUsage;
|
|
146
145
|
}
|
|
147
146
|
//#endregion
|
|
148
147
|
export { type AppleIntelligenceAvailability, AppleIntelligenceChatLanguageModel, type AppleIntelligenceGenerateOptions, type AppleIntelligenceGenerateResult, type AppleIntelligenceMessage, type AppleIntelligenceStreamEvent, type AppleIntelligenceStreamOptions, type AppleIntelligenceToolCall, type AppleIntelligenceToolDefinition, type AppleIntelligenceTransport, type TauriAppleIntelligenceTransportOptions, createAppleIntelligenceProvider, createTauriAppleIntelligenceTransport };
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/transport.ts","../src/tauri.ts","../src/provider.ts"],"mappings":";;;;KAEY,wBAAA;EACV,IAAA;EACA,OAAA;EACA,IAAA;EACA,UAAA;EACA,SAAA,GAAY,KAAA;IACV,EAAA;IACA,IAAA;IACA,QAAA;MACE,IAAA;MACA,SAAA;IAAA;EAAA;AAAA;AAAA,KAKM,6BAAA;EACV,SAAA;EACA,MAAA;AAAA;AAAA,KAGU,+BAAA;EACV,IAAA;EACA,WAAA;EACA,UAAA,EAAY,WAAA;AAAA;AAAA,KAGF,yBAAA;EACV,EAAA;EACA,IAAA;EACA,QAAA;IACE,IAAA;IACA,SAAA;EAAA;AAAA;AAAA,KAIQ,gCAAA;EACV,QAAA,EAAU,wBAAA;EACV,KAAA,GAAQ,+BAAA;EACR,MAAA,GAAS,WAAA;EACT,WAAA;EACA,SAAA;EACA,kBAAA;AAAA;AAAA,KAGU,+BAAA;EACV,IAAA;EACA,SAAA,GAAY,yBAAA;EACZ,MAAA;AAAA;AAAA,KAGU,4BAAA;EACN,IAAA;EAAc,IAAA;AAAA;EAEd,IAAA;EACA,UAAA;EACA,QAAA;EACA,IAAA,EAAM,MAAA;AAAA;EAEN,IAAA;AAAA;EACA,IAAA;EAAe,OAAA;AAAA;AAAA,KAET,8BAAA;EACV,QAAA,EAAU,wBAAA;EACV,KAAA,GAAQ,+BAAA;EACR,WAAA;EACA,SAAA;EACA,kBAAA;EAzBA;AAGF;;;;EA4BE,WAAA,GAAc,WAAA;AAAA;AAAA,UAGC,0BAAA;EACf,iBAAA,IAAqB,OAAA,CAAQ,6BAAA;EAC7B,QAAA,CAAS,OAAA,EAAS,gCAAA,GAAmC,OAAA,CAAQ,+BAAA;EAC7D,MAAA,CAAO,OAAA,EAAS,8BAAA,GAAiC,aAAA,CAAc,4BAAA;AAAA;;;KChErD,sCAAA;EACV,aAAA;AAAA;AAAA,iBAGc,qCAAA,CACd,OAAA,GAAS,sCAAA,GACR,0BAAA;;;KCES,wBAAA;AAAA,KAEA,yBAAA;EACV,WAAA;EACA,SAAA;EACA,mBAAA;AAAA;AAAA,KAGU,iCAAA;EACV,SAAA,EAAW,0BAAA;EACX,UAAA;AAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/transport.ts","../src/tauri.ts","../src/provider.ts"],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -2,6 +2,31 @@ import { generateId } from "@ai-sdk/provider-utils";
|
|
|
2
2
|
import { invoke } from "@tauri-apps/api/core";
|
|
3
3
|
import { listen } from "@tauri-apps/api/event";
|
|
4
4
|
//#region src/provider.ts
|
|
5
|
+
/**
|
|
6
|
+
* Build an empty {@link LanguageModelV3Usage}.
|
|
7
|
+
*
|
|
8
|
+
* Apple Intelligence runs on-device and does not report token counts, so every
|
|
9
|
+
* field is `undefined`. The shape MUST be the nested LanguageModelV3/V4 usage
|
|
10
|
+
* (`inputTokens.total`, `outputTokens.total`) — the AI SDK's `asLanguageModelUsage`
|
|
11
|
+
* reads `usage.inputTokens.total`, so emitting the older flat shape
|
|
12
|
+
* (`inputTokens: undefined`) throws "Cannot read properties of undefined". A fresh
|
|
13
|
+
* object is returned per call so a consumer can never mutate shared state.
|
|
14
|
+
*/
|
|
15
|
+
function createEmptyUsage() {
|
|
16
|
+
return {
|
|
17
|
+
inputTokens: {
|
|
18
|
+
total: void 0,
|
|
19
|
+
noCache: void 0,
|
|
20
|
+
cacheRead: void 0,
|
|
21
|
+
cacheWrite: void 0
|
|
22
|
+
},
|
|
23
|
+
outputTokens: {
|
|
24
|
+
total: void 0,
|
|
25
|
+
text: void 0,
|
|
26
|
+
reasoning: void 0
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
}
|
|
5
30
|
function createAppleIntelligenceProvider(settings) {
|
|
6
31
|
const createModel = (modelId, modelSettings = {}) => new AppleIntelligenceChatLanguageModel(modelId, modelSettings, settings);
|
|
7
32
|
const provider = function(modelId, modelSettings) {
|
|
@@ -83,7 +108,7 @@ var AppleIntelligenceChatLanguageModel = class {
|
|
|
83
108
|
unified: "stop",
|
|
84
109
|
raw: "stop"
|
|
85
110
|
},
|
|
86
|
-
usage:
|
|
111
|
+
usage: createEmptyUsage(),
|
|
87
112
|
warnings: []
|
|
88
113
|
};
|
|
89
114
|
return {
|
|
@@ -95,7 +120,7 @@ var AppleIntelligenceChatLanguageModel = class {
|
|
|
95
120
|
unified: "stop",
|
|
96
121
|
raw: "stop"
|
|
97
122
|
},
|
|
98
|
-
usage:
|
|
123
|
+
usage: createEmptyUsage(),
|
|
99
124
|
warnings: []
|
|
100
125
|
};
|
|
101
126
|
}
|
|
@@ -120,7 +145,7 @@ var AppleIntelligenceChatLanguageModel = class {
|
|
|
120
145
|
unified: "tool-calls",
|
|
121
146
|
raw: "tool-calls"
|
|
122
147
|
},
|
|
123
|
-
usage:
|
|
148
|
+
usage: createEmptyUsage(),
|
|
124
149
|
warnings: []
|
|
125
150
|
};
|
|
126
151
|
return {
|
|
@@ -132,7 +157,7 @@ var AppleIntelligenceChatLanguageModel = class {
|
|
|
132
157
|
unified: "stop",
|
|
133
158
|
raw: "stop"
|
|
134
159
|
},
|
|
135
|
-
usage:
|
|
160
|
+
usage: createEmptyUsage(),
|
|
136
161
|
warnings: []
|
|
137
162
|
};
|
|
138
163
|
}
|
|
@@ -287,11 +312,7 @@ var AppleIntelligenceChatLanguageModel = class {
|
|
|
287
312
|
unified: "stop",
|
|
288
313
|
raw: "stop"
|
|
289
314
|
},
|
|
290
|
-
usage:
|
|
291
|
-
inputTokens: void 0,
|
|
292
|
-
outputTokens: void 0,
|
|
293
|
-
totalTokens: void 0
|
|
294
|
-
}
|
|
315
|
+
usage: createEmptyUsage()
|
|
295
316
|
});
|
|
296
317
|
controller.close();
|
|
297
318
|
} catch (err) {
|
|
@@ -335,11 +356,7 @@ var AppleIntelligenceChatLanguageModel = class {
|
|
|
335
356
|
unified: "stop",
|
|
336
357
|
raw: "stop"
|
|
337
358
|
},
|
|
338
|
-
usage:
|
|
339
|
-
inputTokens: void 0,
|
|
340
|
-
outputTokens: void 0,
|
|
341
|
-
totalTokens: void 0
|
|
342
|
-
}
|
|
359
|
+
usage: createEmptyUsage()
|
|
343
360
|
});
|
|
344
361
|
controller.close();
|
|
345
362
|
} catch (err) {
|
|
@@ -347,13 +364,6 @@ var AppleIntelligenceChatLanguageModel = class {
|
|
|
347
364
|
}
|
|
348
365
|
} });
|
|
349
366
|
}
|
|
350
|
-
emptyUsage() {
|
|
351
|
-
return {
|
|
352
|
-
inputTokens: void 0,
|
|
353
|
-
outputTokens: void 0,
|
|
354
|
-
totalTokens: void 0
|
|
355
|
-
};
|
|
356
|
-
}
|
|
357
367
|
};
|
|
358
368
|
//#endregion
|
|
359
369
|
//#region src/tauri.ts
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../src/provider.ts","../src/tauri.ts"],"sourcesContent":["import type {\n LanguageModelV3,\n LanguageModelV3CallOptions,\n LanguageModelV3Content,\n LanguageModelV3FinishReason,\n LanguageModelV3Message,\n LanguageModelV3ResponseMetadata,\n LanguageModelV3StreamPart,\n LanguageModelV3ToolResultOutput,\n LanguageModelV3Usage,\n SharedV3Headers,\n SharedV3ProviderMetadata,\n SharedV3Warning,\n} from \"@ai-sdk/provider\";\nimport { generateId } from \"@ai-sdk/provider-utils\";\nimport type { JSONSchema7 } from \"json-schema\";\nimport type {\n AppleIntelligenceAvailability,\n AppleIntelligenceMessage,\n AppleIntelligenceStreamEvent,\n AppleIntelligenceToolDefinition,\n AppleIntelligenceTransport,\n} from \"./transport\";\n\nexport type AppleIntelligenceModelId = \"apple-on-device\" | (string & {});\n\nexport type AppleIntelligenceSettings = {\n temperature?: number;\n maxTokens?: number;\n requireAvailability?: boolean;\n};\n\nexport type AppleIntelligenceProviderSettings = {\n transport: AppleIntelligenceTransport;\n generateId?: () => string;\n};\n\nexport interface AppleIntelligenceProvider {\n (\n modelId: AppleIntelligenceModelId,\n settings?: AppleIntelligenceSettings\n ): AppleIntelligenceChatLanguageModel;\n languageModel(\n modelId: AppleIntelligenceModelId,\n settings?: AppleIntelligenceSettings\n ): AppleIntelligenceChatLanguageModel;\n chat(\n modelId: AppleIntelligenceModelId,\n settings?: AppleIntelligenceSettings\n ): AppleIntelligenceChatLanguageModel;\n}\n\nexport function createAppleIntelligenceProvider(\n settings: AppleIntelligenceProviderSettings\n): AppleIntelligenceProvider {\n const createModel = (\n modelId: AppleIntelligenceModelId,\n modelSettings: AppleIntelligenceSettings = {}\n ) => new AppleIntelligenceChatLanguageModel(modelId, modelSettings, settings);\n\n const provider = function (\n modelId: AppleIntelligenceModelId,\n modelSettings?: AppleIntelligenceSettings\n ) {\n if (new.target) {\n throw new Error(\n \"The Apple Intelligence provider cannot be called with the new keyword.\"\n );\n }\n\n return createModel(modelId, modelSettings);\n } as AppleIntelligenceProvider;\n\n provider.chat = createModel;\n provider.languageModel = createModel;\n\n return provider;\n}\n\nexport class AppleIntelligenceChatLanguageModel implements LanguageModelV3 {\n readonly specificationVersion = \"v3\";\n readonly provider = \"apple-intelligence\";\n readonly modelId: string;\n readonly defaultObjectGenerationMode = \"json\";\n\n supportsImageUrls = false;\n supportsStructuredOutputs = true;\n\n private readonly settings: AppleIntelligenceSettings;\n private readonly transport: AppleIntelligenceTransport;\n private readonly generateId: () => string;\n\n constructor(\n modelId: AppleIntelligenceModelId,\n settings: AppleIntelligenceSettings,\n providerSettings: AppleIntelligenceProviderSettings\n ) {\n this.modelId = modelId;\n this.settings = settings;\n this.transport = providerSettings.transport;\n this.generateId = providerSettings.generateId ?? generateId;\n }\n\n supportedUrls:\n | Record<string, RegExp[]>\n | PromiseLike<Record<string, RegExp[]>> = {};\n\n async doGenerate(\n options: LanguageModelV3CallOptions\n ): Promise<{\n content: Array<LanguageModelV3Content>;\n finishReason: LanguageModelV3FinishReason;\n usage: LanguageModelV3Usage;\n providerMetadata?: SharedV3ProviderMetadata;\n request?: { body?: unknown };\n response?: LanguageModelV3ResponseMetadata & {\n headers?: SharedV3Headers;\n body?: unknown;\n };\n warnings: Array<SharedV3Warning>;\n }> {\n await this.assertAvailability();\n\n const isStructured =\n options.responseFormat?.type === \"json\" &&\n Boolean(options.responseFormat.schema);\n\n if (isStructured) {\n return this.handleStructuredGeneration(options);\n }\n\n return this.handleRegularGeneration(options);\n }\n\n async doStream(\n options: LanguageModelV3CallOptions\n ): Promise<{ stream: ReadableStream<LanguageModelV3StreamPart> }> {\n await this.assertAvailability();\n\n const messages = this.convertPromptToMessages(options.prompt);\n const tools = options.tools?.length\n ? this.convertTools(options.tools)\n : undefined;\n\n const stream = tools?.length\n ? this.createStreamFromEvents(\n this.transport.stream({\n messages,\n tools,\n temperature: this.settings.temperature,\n maxTokens: options.maxOutputTokens ?? this.settings.maxTokens,\n stopAfterToolCalls: true,\n abortSignal: options.abortSignal,\n })\n )\n : this.createStreamFromChunks(\n this.transport.stream({\n messages,\n temperature: this.settings.temperature,\n maxTokens: options.maxOutputTokens ?? this.settings.maxTokens,\n abortSignal: options.abortSignal,\n })\n );\n\n return { stream };\n }\n\n supportsUrl?(_url: typeof URL): boolean {\n return true;\n }\n\n private async assertAvailability(): Promise<AppleIntelligenceAvailability> {\n if (this.settings.requireAvailability === false) {\n return { available: true, reason: \"Skipped availability check\" };\n }\n\n const availability = await this.transport.checkAvailability();\n if (!availability.available) {\n throw new Error(\n `Apple Intelligence not available: ${availability.reason}`\n );\n }\n\n return availability;\n }\n\n private async handleStructuredGeneration(\n options: LanguageModelV3CallOptions\n ): Promise<{\n content: Array<LanguageModelV3Content>;\n finishReason: LanguageModelV3FinishReason;\n usage: LanguageModelV3Usage;\n warnings: Array<SharedV3Warning>;\n }> {\n const schema = options.responseFormat?.schema as JSONSchema7 | undefined;\n if (!schema) {\n throw new Error(\n \"Structured generation requires a JSON schema in responseFormat.\"\n );\n }\n\n const messages = this.convertPromptToMessages(options.prompt);\n const result = await this.transport.generate({\n messages,\n schema,\n temperature: this.settings.temperature,\n maxTokens: options.maxOutputTokens ?? this.settings.maxTokens,\n });\n\n if (result.object !== undefined) {\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(result.object),\n },\n ],\n finishReason: { unified: \"stop\", raw: \"stop\" },\n usage: this.emptyUsage(),\n warnings: [],\n };\n }\n\n return {\n content: [{ type: \"text\", text: result.text ?? \"\" }],\n finishReason: { unified: \"stop\", raw: \"stop\" },\n usage: this.emptyUsage(),\n warnings: [],\n };\n }\n\n private async handleRegularGeneration(\n options: LanguageModelV3CallOptions\n ): Promise<{\n content: Array<LanguageModelV3Content>;\n finishReason: LanguageModelV3FinishReason;\n usage: LanguageModelV3Usage;\n warnings: Array<SharedV3Warning>;\n }> {\n const messages = this.convertPromptToMessages(options.prompt);\n const tools = options.tools?.length\n ? this.convertTools(options.tools)\n : undefined;\n\n const result = await this.transport.generate({\n messages,\n tools,\n temperature: this.settings.temperature,\n maxTokens: options.maxOutputTokens ?? this.settings.maxTokens,\n stopAfterToolCalls: true,\n });\n\n if (result.toolCalls?.length) {\n const toolCallContent: LanguageModelV3Content[] = result.toolCalls.map(\n (call) => ({\n type: \"tool-call\",\n toolCallId: call.id,\n toolName: call.function.name,\n input: call.function.arguments,\n })\n );\n\n return {\n content: toolCallContent,\n finishReason: { unified: \"tool-calls\", raw: \"tool-calls\" },\n usage: this.emptyUsage(),\n warnings: [],\n };\n }\n\n return {\n content: [{ type: \"text\", text: result.text ?? \"\" }],\n finishReason: { unified: \"stop\", raw: \"stop\" },\n usage: this.emptyUsage(),\n warnings: [],\n };\n }\n\n private convertTools(\n tools: LanguageModelV3CallOptions[\"tools\"]\n ): AppleIntelligenceToolDefinition[] {\n return tools\n ? tools.map((tool) => {\n if (tool.type !== \"function\") {\n throw new Error(`Unsupported tool type: ${tool.type}`);\n }\n\n return {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema,\n };\n })\n : [];\n }\n\n private convertPromptToMessages(\n prompt: Parameters<LanguageModelV3[\"doGenerate\"]>[0][\"prompt\"]\n ): AppleIntelligenceMessage[] {\n return prompt.map((message) => {\n switch (message.role) {\n case \"system\":\n return {\n role: \"system\",\n content: message.content,\n };\n case \"user\":\n return {\n role: \"user\",\n content: Array.isArray(message.content)\n ? message.content\n .map((part) =>\n part.type === \"text\" ? part.text : \"[unsupported content]\"\n )\n .join(\"\\n\")\n : message.content,\n };\n case \"assistant\":\n return this.convertAssistantMessage(message);\n case \"tool\":\n return this.convertToolMessage(message);\n default:\n return {\n role: \"user\",\n content: String(message.content ?? \"\"),\n };\n }\n });\n }\n\n private convertAssistantMessage(\n message: Extract<LanguageModelV3Message, { role: \"assistant\" }>\n ): AppleIntelligenceMessage {\n if (Array.isArray(message.content)) {\n const toolCalls = message.content.filter(\n (part) => part.type === \"tool-call\"\n );\n const textParts = message.content.filter((part) => part.type === \"text\");\n\n if (toolCalls.length > 0) {\n return {\n role: \"assistant\",\n content: textParts.map((part) => part.text).join(\"\\n\") || \"\",\n toolCalls: toolCalls.map((part) => ({\n id: part.toolCallId,\n type: \"function\",\n function: {\n name: part.toolName,\n arguments:\n typeof part.input === \"string\"\n ? part.input\n : JSON.stringify(part.input),\n },\n })),\n };\n }\n\n return {\n role: \"assistant\",\n content: message.content\n .map((part) => {\n switch (part.type) {\n case \"text\":\n case \"reasoning\":\n return part.text;\n default:\n return `[unsupported content - ${part.type}]`;\n }\n })\n .join(\"\\n\"),\n };\n }\n\n return {\n role: \"assistant\",\n content: message.content || \"\",\n };\n }\n\n private convertToolMessage(\n message: Extract<LanguageModelV3Message, { role: \"tool\" }>\n ): AppleIntelligenceMessage {\n const toolCalls = message.content\n .map((part) => {\n if (part.type === \"tool-result\") {\n return {\n id: part.toolCallId,\n toolName: part.toolName,\n segments: [\n {\n type: \"text\",\n text: this.formatToolResultOutput(part.output),\n },\n ],\n };\n }\n if (part.type === \"tool-approval-response\") {\n return {\n id: part.approvalId,\n toolName: \"tool-approval\",\n segments: [\n {\n type: \"text\",\n text: part.approved\n ? `Tool approval granted${\n part.reason ? `: ${part.reason}` : \"\"\n }`\n : `Tool approval denied${\n part.reason ? `: ${part.reason}` : \"\"\n }`,\n },\n ],\n };\n }\n return null;\n })\n .filter(Boolean);\n\n return {\n role: \"tool\",\n content: JSON.stringify({ tool_calls: toolCalls }),\n };\n }\n\n private formatToolResultOutput(\n output: LanguageModelV3ToolResultOutput\n ): string {\n switch (output.type) {\n case \"text\":\n case \"error-text\":\n return output.value;\n case \"json\":\n case \"error-json\":\n return JSON.stringify(output.value);\n case \"execution-denied\":\n return output.reason\n ? `Tool execution denied: ${output.reason}`\n : \"Tool execution denied\";\n case \"content\":\n return output.value\n .map((part) => {\n if (part.type === \"text\") {\n return part.text;\n }\n if (part.type === \"file-data\") {\n return `[file-data:${part.mediaType}]`;\n }\n if (part.type === \"file-url\") {\n return `[file-url:${part.url}]`;\n }\n return \"[file]\";\n })\n .join(\"\\n\");\n default:\n return \"[unsupported tool output]\";\n }\n }\n\n private createStreamFromEvents(\n nativeStream: AsyncIterable<AppleIntelligenceStreamEvent>\n ): ReadableStream<LanguageModelV3StreamPart> {\n return new ReadableStream<LanguageModelV3StreamPart>({\n async start(controller) {\n controller.enqueue({ type: \"stream-start\", warnings: [] });\n const textId = crypto.randomUUID();\n let hasText = false;\n let hasToolCalls = false;\n\n try {\n for await (const event of nativeStream) {\n if (event.type === \"text\") {\n if (!hasText) {\n controller.enqueue({ type: \"text-start\", id: textId });\n hasText = true;\n }\n controller.enqueue({\n type: \"text-delta\",\n delta: event.text,\n id: textId,\n });\n } else if (event.type === \"tool-call\") {\n hasToolCalls = true;\n controller.enqueue({\n type: \"tool-call\",\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n input: JSON.stringify(event.args),\n });\n } else if (event.type === \"error\") {\n controller.error(new Error(event.message));\n return;\n } else if (event.type === \"done\") {\n break;\n }\n }\n\n if (hasText) {\n controller.enqueue({ type: \"text-end\", id: textId });\n }\n\n controller.enqueue({\n type: \"finish\",\n finishReason: hasToolCalls\n ? { unified: \"tool-calls\", raw: \"tool-calls\" }\n : { unified: \"stop\", raw: \"stop\" },\n usage: {\n inputTokens: undefined,\n outputTokens: undefined,\n totalTokens: undefined,\n },\n });\n controller.close();\n } catch (err) {\n controller.error(err);\n }\n },\n });\n }\n\n private createStreamFromChunks(\n stream: AsyncIterable<AppleIntelligenceStreamEvent>\n ): ReadableStream<LanguageModelV3StreamPart> {\n return new ReadableStream<LanguageModelV3StreamPart>({\n async start(controller) {\n controller.enqueue({ type: \"stream-start\", warnings: [] });\n const textId = crypto.randomUUID();\n let hasText = false;\n\n try {\n for await (const event of stream) {\n if (event.type === \"text\") {\n if (!hasText) {\n controller.enqueue({ type: \"text-start\", id: textId });\n hasText = true;\n }\n controller.enqueue({\n type: \"text-delta\",\n delta: event.text,\n id: textId,\n });\n } else if (event.type === \"error\") {\n controller.error(new Error(event.message));\n return;\n } else if (event.type === \"done\") {\n break;\n }\n }\n\n if (hasText) {\n controller.enqueue({ type: \"text-end\", id: textId });\n }\n\n controller.enqueue({\n type: \"finish\",\n finishReason: { unified: \"stop\", raw: \"stop\" },\n usage: {\n inputTokens: undefined,\n outputTokens: undefined,\n totalTokens: undefined,\n },\n });\n controller.close();\n } catch (err) {\n controller.error(err);\n }\n },\n });\n }\n\n private emptyUsage(): LanguageModelV3Usage {\n return {\n inputTokens: undefined,\n outputTokens: undefined,\n totalTokens: undefined,\n };\n }\n}","import { invoke } from \"@tauri-apps/api/core\";\nimport { listen } from \"@tauri-apps/api/event\";\nimport type {\n AppleIntelligenceGenerateOptions,\n AppleIntelligenceGenerateResult,\n AppleIntelligenceStreamEvent,\n AppleIntelligenceStreamOptions,\n AppleIntelligenceTransport,\n AppleIntelligenceAvailability,\n} from \"./transport\";\n\ntype StreamStart = {\n streamId: string;\n eventName: string;\n};\n\nexport type TauriAppleIntelligenceTransportOptions = {\n commandPrefix?: string;\n};\n\nexport function createTauriAppleIntelligenceTransport(\n options: TauriAppleIntelligenceTransportOptions = {}\n): AppleIntelligenceTransport {\n const prefix = options.commandPrefix ?? \"apple_ai\";\n\n const command = (name: string) => `${prefix}_${name}`;\n\n return {\n async checkAvailability(): Promise<AppleIntelligenceAvailability> {\n return invoke(command(\"check_availability\"));\n },\n\n async generate(\n request: AppleIntelligenceGenerateOptions\n ): Promise<AppleIntelligenceGenerateResult> {\n return invoke(command(\"generate\"), { request });\n },\n\n async *stream(\n request: AppleIntelligenceStreamOptions\n ): AsyncIterable<AppleIntelligenceStreamEvent> {\n // The abort signal stays on this side of the IPC boundary — it is not serializable.\n const { abortSignal, ...payload } = request;\n const start = await invoke<StreamStart>(command(\"stream\"), {\n request: payload,\n });\n\n // Abort → host-side cancel. The cancelled stream still terminates through its normal\n // `done` event (emitted by the native cancellation handler), which ends the iterator and\n // detaches the listener below; a stale abort after completion is a no-op on the host.\n const cancel = () => {\n void invoke(command(\"cancel_stream\"), { streamId: start.streamId });\n };\n if (abortSignal?.aborted) {\n cancel();\n } else {\n abortSignal?.addEventListener(\"abort\", cancel, { once: true });\n }\n\n const queue: AppleIntelligenceStreamEvent[] = [];\n let done = false;\n let pendingResolve:\n | ((value: IteratorResult<AppleIntelligenceStreamEvent>) => void)\n | null = null;\n\n const unlisten = await listen<AppleIntelligenceStreamEvent>(\n start.eventName,\n (event) => {\n const payload = event.payload;\n if (pendingResolve) {\n pendingResolve({ value: payload, done: false });\n pendingResolve = null;\n } else {\n queue.push(payload);\n }\n\n if (payload.type === \"done\" || payload.type === \"error\") {\n done = true;\n unlisten();\n }\n }\n );\n\n try {\n while (true) {\n if (queue.length > 0) {\n const value = queue.shift()!;\n yield value;\n if (value.type === \"done\" || value.type === \"error\") {\n return;\n }\n continue;\n }\n\n if (done) {\n return;\n }\n\n const value = await new Promise<\n IteratorResult<AppleIntelligenceStreamEvent>\n >((resolve) => {\n pendingResolve = resolve;\n });\n\n if (value.value) {\n yield value.value;\n if (value.value.type === \"done\" || value.value.type === \"error\") {\n return;\n }\n }\n }\n } finally {\n if (!done) {\n unlisten();\n }\n }\n },\n } satisfies AppleIntelligenceTransport;\n}"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../src/provider.ts","../src/tauri.ts"],"sourcesContent":["import type {\n LanguageModelV3,\n LanguageModelV3CallOptions,\n LanguageModelV3Content,\n LanguageModelV3FinishReason,\n LanguageModelV3Message,\n LanguageModelV3ResponseMetadata,\n LanguageModelV3StreamPart,\n LanguageModelV3ToolResultOutput,\n LanguageModelV3Usage,\n SharedV3Headers,\n SharedV3ProviderMetadata,\n SharedV3Warning,\n} from \"@ai-sdk/provider\";\nimport { generateId } from \"@ai-sdk/provider-utils\";\nimport type { JSONSchema7 } from \"json-schema\";\nimport type {\n AppleIntelligenceAvailability,\n AppleIntelligenceMessage,\n AppleIntelligenceStreamEvent,\n AppleIntelligenceToolDefinition,\n AppleIntelligenceTransport,\n} from \"./transport\";\n\nexport type AppleIntelligenceModelId = \"apple-on-device\" | (string & {});\n\nexport type AppleIntelligenceSettings = {\n temperature?: number;\n maxTokens?: number;\n requireAvailability?: boolean;\n};\n\nexport type AppleIntelligenceProviderSettings = {\n transport: AppleIntelligenceTransport;\n generateId?: () => string;\n};\n\n/**\n * Build an empty {@link LanguageModelV3Usage}.\n *\n * Apple Intelligence runs on-device and does not report token counts, so every\n * field is `undefined`. The shape MUST be the nested LanguageModelV3/V4 usage\n * (`inputTokens.total`, `outputTokens.total`) — the AI SDK's `asLanguageModelUsage`\n * reads `usage.inputTokens.total`, so emitting the older flat shape\n * (`inputTokens: undefined`) throws \"Cannot read properties of undefined\". A fresh\n * object is returned per call so a consumer can never mutate shared state.\n */\nfunction createEmptyUsage(): LanguageModelV3Usage {\n return {\n inputTokens: {\n total: undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: undefined,\n text: undefined,\n reasoning: undefined,\n },\n };\n}\n\nexport interface AppleIntelligenceProvider {\n (\n modelId: AppleIntelligenceModelId,\n settings?: AppleIntelligenceSettings\n ): AppleIntelligenceChatLanguageModel;\n languageModel(\n modelId: AppleIntelligenceModelId,\n settings?: AppleIntelligenceSettings\n ): AppleIntelligenceChatLanguageModel;\n chat(\n modelId: AppleIntelligenceModelId,\n settings?: AppleIntelligenceSettings\n ): AppleIntelligenceChatLanguageModel;\n}\n\nexport function createAppleIntelligenceProvider(\n settings: AppleIntelligenceProviderSettings\n): AppleIntelligenceProvider {\n const createModel = (\n modelId: AppleIntelligenceModelId,\n modelSettings: AppleIntelligenceSettings = {}\n ) => new AppleIntelligenceChatLanguageModel(modelId, modelSettings, settings);\n\n const provider = function (\n modelId: AppleIntelligenceModelId,\n modelSettings?: AppleIntelligenceSettings\n ) {\n if (new.target) {\n throw new Error(\n \"The Apple Intelligence provider cannot be called with the new keyword.\"\n );\n }\n\n return createModel(modelId, modelSettings);\n } as AppleIntelligenceProvider;\n\n provider.chat = createModel;\n provider.languageModel = createModel;\n\n return provider;\n}\n\nexport class AppleIntelligenceChatLanguageModel implements LanguageModelV3 {\n readonly specificationVersion = \"v3\";\n readonly provider = \"apple-intelligence\";\n readonly modelId: string;\n readonly defaultObjectGenerationMode = \"json\";\n\n supportsImageUrls = false;\n supportsStructuredOutputs = true;\n\n private readonly settings: AppleIntelligenceSettings;\n private readonly transport: AppleIntelligenceTransport;\n private readonly generateId: () => string;\n\n constructor(\n modelId: AppleIntelligenceModelId,\n settings: AppleIntelligenceSettings,\n providerSettings: AppleIntelligenceProviderSettings\n ) {\n this.modelId = modelId;\n this.settings = settings;\n this.transport = providerSettings.transport;\n this.generateId = providerSettings.generateId ?? generateId;\n }\n\n supportedUrls:\n | Record<string, RegExp[]>\n | PromiseLike<Record<string, RegExp[]>> = {};\n\n async doGenerate(\n options: LanguageModelV3CallOptions\n ): Promise<{\n content: Array<LanguageModelV3Content>;\n finishReason: LanguageModelV3FinishReason;\n usage: LanguageModelV3Usage;\n providerMetadata?: SharedV3ProviderMetadata;\n request?: { body?: unknown };\n response?: LanguageModelV3ResponseMetadata & {\n headers?: SharedV3Headers;\n body?: unknown;\n };\n warnings: Array<SharedV3Warning>;\n }> {\n await this.assertAvailability();\n\n const isStructured =\n options.responseFormat?.type === \"json\" &&\n Boolean(options.responseFormat.schema);\n\n if (isStructured) {\n return this.handleStructuredGeneration(options);\n }\n\n return this.handleRegularGeneration(options);\n }\n\n async doStream(\n options: LanguageModelV3CallOptions\n ): Promise<{ stream: ReadableStream<LanguageModelV3StreamPart> }> {\n await this.assertAvailability();\n\n const messages = this.convertPromptToMessages(options.prompt);\n const tools = options.tools?.length\n ? this.convertTools(options.tools)\n : undefined;\n\n const stream = tools?.length\n ? this.createStreamFromEvents(\n this.transport.stream({\n messages,\n tools,\n temperature: this.settings.temperature,\n maxTokens: options.maxOutputTokens ?? this.settings.maxTokens,\n stopAfterToolCalls: true,\n abortSignal: options.abortSignal,\n })\n )\n : this.createStreamFromChunks(\n this.transport.stream({\n messages,\n temperature: this.settings.temperature,\n maxTokens: options.maxOutputTokens ?? this.settings.maxTokens,\n abortSignal: options.abortSignal,\n })\n );\n\n return { stream };\n }\n\n supportsUrl?(_url: typeof URL): boolean {\n return true;\n }\n\n private async assertAvailability(): Promise<AppleIntelligenceAvailability> {\n if (this.settings.requireAvailability === false) {\n return { available: true, reason: \"Skipped availability check\" };\n }\n\n const availability = await this.transport.checkAvailability();\n if (!availability.available) {\n throw new Error(\n `Apple Intelligence not available: ${availability.reason}`\n );\n }\n\n return availability;\n }\n\n private async handleStructuredGeneration(\n options: LanguageModelV3CallOptions\n ): Promise<{\n content: Array<LanguageModelV3Content>;\n finishReason: LanguageModelV3FinishReason;\n usage: LanguageModelV3Usage;\n warnings: Array<SharedV3Warning>;\n }> {\n const schema = options.responseFormat?.schema as JSONSchema7 | undefined;\n if (!schema) {\n throw new Error(\n \"Structured generation requires a JSON schema in responseFormat.\"\n );\n }\n\n const messages = this.convertPromptToMessages(options.prompt);\n const result = await this.transport.generate({\n messages,\n schema,\n temperature: this.settings.temperature,\n maxTokens: options.maxOutputTokens ?? this.settings.maxTokens,\n });\n\n if (result.object !== undefined) {\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(result.object),\n },\n ],\n finishReason: { unified: \"stop\", raw: \"stop\" },\n usage: createEmptyUsage(),\n warnings: [],\n };\n }\n\n return {\n content: [{ type: \"text\", text: result.text ?? \"\" }],\n finishReason: { unified: \"stop\", raw: \"stop\" },\n usage: createEmptyUsage(),\n warnings: [],\n };\n }\n\n private async handleRegularGeneration(\n options: LanguageModelV3CallOptions\n ): Promise<{\n content: Array<LanguageModelV3Content>;\n finishReason: LanguageModelV3FinishReason;\n usage: LanguageModelV3Usage;\n warnings: Array<SharedV3Warning>;\n }> {\n const messages = this.convertPromptToMessages(options.prompt);\n const tools = options.tools?.length\n ? this.convertTools(options.tools)\n : undefined;\n\n const result = await this.transport.generate({\n messages,\n tools,\n temperature: this.settings.temperature,\n maxTokens: options.maxOutputTokens ?? this.settings.maxTokens,\n stopAfterToolCalls: true,\n });\n\n if (result.toolCalls?.length) {\n const toolCallContent: LanguageModelV3Content[] = result.toolCalls.map(\n (call) => ({\n type: \"tool-call\",\n toolCallId: call.id,\n toolName: call.function.name,\n input: call.function.arguments,\n })\n );\n\n return {\n content: toolCallContent,\n finishReason: { unified: \"tool-calls\", raw: \"tool-calls\" },\n usage: createEmptyUsage(),\n warnings: [],\n };\n }\n\n return {\n content: [{ type: \"text\", text: result.text ?? \"\" }],\n finishReason: { unified: \"stop\", raw: \"stop\" },\n usage: createEmptyUsage(),\n warnings: [],\n };\n }\n\n private convertTools(\n tools: LanguageModelV3CallOptions[\"tools\"]\n ): AppleIntelligenceToolDefinition[] {\n return tools\n ? tools.map((tool) => {\n if (tool.type !== \"function\") {\n throw new Error(`Unsupported tool type: ${tool.type}`);\n }\n\n return {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema,\n };\n })\n : [];\n }\n\n private convertPromptToMessages(\n prompt: Parameters<LanguageModelV3[\"doGenerate\"]>[0][\"prompt\"]\n ): AppleIntelligenceMessage[] {\n return prompt.map((message) => {\n switch (message.role) {\n case \"system\":\n return {\n role: \"system\",\n content: message.content,\n };\n case \"user\":\n return {\n role: \"user\",\n content: Array.isArray(message.content)\n ? message.content\n .map((part) =>\n part.type === \"text\" ? part.text : \"[unsupported content]\"\n )\n .join(\"\\n\")\n : message.content,\n };\n case \"assistant\":\n return this.convertAssistantMessage(message);\n case \"tool\":\n return this.convertToolMessage(message);\n default:\n return {\n role: \"user\",\n content: String(message.content ?? \"\"),\n };\n }\n });\n }\n\n private convertAssistantMessage(\n message: Extract<LanguageModelV3Message, { role: \"assistant\" }>\n ): AppleIntelligenceMessage {\n if (Array.isArray(message.content)) {\n const toolCalls = message.content.filter(\n (part) => part.type === \"tool-call\"\n );\n const textParts = message.content.filter((part) => part.type === \"text\");\n\n if (toolCalls.length > 0) {\n return {\n role: \"assistant\",\n content: textParts.map((part) => part.text).join(\"\\n\") || \"\",\n toolCalls: toolCalls.map((part) => ({\n id: part.toolCallId,\n type: \"function\",\n function: {\n name: part.toolName,\n arguments:\n typeof part.input === \"string\"\n ? part.input\n : JSON.stringify(part.input),\n },\n })),\n };\n }\n\n return {\n role: \"assistant\",\n content: message.content\n .map((part) => {\n switch (part.type) {\n case \"text\":\n case \"reasoning\":\n return part.text;\n default:\n return `[unsupported content - ${part.type}]`;\n }\n })\n .join(\"\\n\"),\n };\n }\n\n return {\n role: \"assistant\",\n content: message.content || \"\",\n };\n }\n\n private convertToolMessage(\n message: Extract<LanguageModelV3Message, { role: \"tool\" }>\n ): AppleIntelligenceMessage {\n const toolCalls = message.content\n .map((part) => {\n if (part.type === \"tool-result\") {\n return {\n id: part.toolCallId,\n toolName: part.toolName,\n segments: [\n {\n type: \"text\",\n text: this.formatToolResultOutput(part.output),\n },\n ],\n };\n }\n if (part.type === \"tool-approval-response\") {\n return {\n id: part.approvalId,\n toolName: \"tool-approval\",\n segments: [\n {\n type: \"text\",\n text: part.approved\n ? `Tool approval granted${\n part.reason ? `: ${part.reason}` : \"\"\n }`\n : `Tool approval denied${\n part.reason ? `: ${part.reason}` : \"\"\n }`,\n },\n ],\n };\n }\n return null;\n })\n .filter(Boolean);\n\n return {\n role: \"tool\",\n content: JSON.stringify({ tool_calls: toolCalls }),\n };\n }\n\n private formatToolResultOutput(\n output: LanguageModelV3ToolResultOutput\n ): string {\n switch (output.type) {\n case \"text\":\n case \"error-text\":\n return output.value;\n case \"json\":\n case \"error-json\":\n return JSON.stringify(output.value);\n case \"execution-denied\":\n return output.reason\n ? `Tool execution denied: ${output.reason}`\n : \"Tool execution denied\";\n case \"content\":\n return output.value\n .map((part) => {\n if (part.type === \"text\") {\n return part.text;\n }\n if (part.type === \"file-data\") {\n return `[file-data:${part.mediaType}]`;\n }\n if (part.type === \"file-url\") {\n return `[file-url:${part.url}]`;\n }\n return \"[file]\";\n })\n .join(\"\\n\");\n default:\n return \"[unsupported tool output]\";\n }\n }\n\n private createStreamFromEvents(\n nativeStream: AsyncIterable<AppleIntelligenceStreamEvent>\n ): ReadableStream<LanguageModelV3StreamPart> {\n return new ReadableStream<LanguageModelV3StreamPart>({\n async start(controller) {\n controller.enqueue({ type: \"stream-start\", warnings: [] });\n const textId = crypto.randomUUID();\n let hasText = false;\n let hasToolCalls = false;\n\n try {\n for await (const event of nativeStream) {\n if (event.type === \"text\") {\n if (!hasText) {\n controller.enqueue({ type: \"text-start\", id: textId });\n hasText = true;\n }\n controller.enqueue({\n type: \"text-delta\",\n delta: event.text,\n id: textId,\n });\n } else if (event.type === \"tool-call\") {\n hasToolCalls = true;\n controller.enqueue({\n type: \"tool-call\",\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n input: JSON.stringify(event.args),\n });\n } else if (event.type === \"error\") {\n controller.error(new Error(event.message));\n return;\n } else if (event.type === \"done\") {\n break;\n }\n }\n\n if (hasText) {\n controller.enqueue({ type: \"text-end\", id: textId });\n }\n\n controller.enqueue({\n type: \"finish\",\n finishReason: hasToolCalls\n ? { unified: \"tool-calls\", raw: \"tool-calls\" }\n : { unified: \"stop\", raw: \"stop\" },\n usage: createEmptyUsage(),\n });\n controller.close();\n } catch (err) {\n controller.error(err);\n }\n },\n });\n }\n\n private createStreamFromChunks(\n stream: AsyncIterable<AppleIntelligenceStreamEvent>\n ): ReadableStream<LanguageModelV3StreamPart> {\n return new ReadableStream<LanguageModelV3StreamPart>({\n async start(controller) {\n controller.enqueue({ type: \"stream-start\", warnings: [] });\n const textId = crypto.randomUUID();\n let hasText = false;\n\n try {\n for await (const event of stream) {\n if (event.type === \"text\") {\n if (!hasText) {\n controller.enqueue({ type: \"text-start\", id: textId });\n hasText = true;\n }\n controller.enqueue({\n type: \"text-delta\",\n delta: event.text,\n id: textId,\n });\n } else if (event.type === \"error\") {\n controller.error(new Error(event.message));\n return;\n } else if (event.type === \"done\") {\n break;\n }\n }\n\n if (hasText) {\n controller.enqueue({ type: \"text-end\", id: textId });\n }\n\n controller.enqueue({\n type: \"finish\",\n finishReason: { unified: \"stop\", raw: \"stop\" },\n usage: createEmptyUsage(),\n });\n controller.close();\n } catch (err) {\n controller.error(err);\n }\n },\n });\n }\n}","import { invoke } from \"@tauri-apps/api/core\";\nimport { listen } from \"@tauri-apps/api/event\";\nimport type {\n AppleIntelligenceGenerateOptions,\n AppleIntelligenceGenerateResult,\n AppleIntelligenceStreamEvent,\n AppleIntelligenceStreamOptions,\n AppleIntelligenceTransport,\n AppleIntelligenceAvailability,\n} from \"./transport\";\n\ntype StreamStart = {\n streamId: string;\n eventName: string;\n};\n\nexport type TauriAppleIntelligenceTransportOptions = {\n commandPrefix?: string;\n};\n\nexport function createTauriAppleIntelligenceTransport(\n options: TauriAppleIntelligenceTransportOptions = {}\n): AppleIntelligenceTransport {\n const prefix = options.commandPrefix ?? \"apple_ai\";\n\n const command = (name: string) => `${prefix}_${name}`;\n\n return {\n async checkAvailability(): Promise<AppleIntelligenceAvailability> {\n return invoke(command(\"check_availability\"));\n },\n\n async generate(\n request: AppleIntelligenceGenerateOptions\n ): Promise<AppleIntelligenceGenerateResult> {\n return invoke(command(\"generate\"), { request });\n },\n\n async *stream(\n request: AppleIntelligenceStreamOptions\n ): AsyncIterable<AppleIntelligenceStreamEvent> {\n // The abort signal stays on this side of the IPC boundary — it is not serializable.\n const { abortSignal, ...payload } = request;\n const start = await invoke<StreamStart>(command(\"stream\"), {\n request: payload,\n });\n\n // Abort → host-side cancel. The cancelled stream still terminates through its normal\n // `done` event (emitted by the native cancellation handler), which ends the iterator and\n // detaches the listener below; a stale abort after completion is a no-op on the host.\n const cancel = () => {\n void invoke(command(\"cancel_stream\"), { streamId: start.streamId });\n };\n if (abortSignal?.aborted) {\n cancel();\n } else {\n abortSignal?.addEventListener(\"abort\", cancel, { once: true });\n }\n\n const queue: AppleIntelligenceStreamEvent[] = [];\n let done = false;\n let pendingResolve:\n | ((value: IteratorResult<AppleIntelligenceStreamEvent>) => void)\n | null = null;\n\n const unlisten = await listen<AppleIntelligenceStreamEvent>(\n start.eventName,\n (event) => {\n const payload = event.payload;\n if (pendingResolve) {\n pendingResolve({ value: payload, done: false });\n pendingResolve = null;\n } else {\n queue.push(payload);\n }\n\n if (payload.type === \"done\" || payload.type === \"error\") {\n done = true;\n unlisten();\n }\n }\n );\n\n try {\n while (true) {\n if (queue.length > 0) {\n const value = queue.shift()!;\n yield value;\n if (value.type === \"done\" || value.type === \"error\") {\n return;\n }\n continue;\n }\n\n if (done) {\n return;\n }\n\n const value = await new Promise<\n IteratorResult<AppleIntelligenceStreamEvent>\n >((resolve) => {\n pendingResolve = resolve;\n });\n\n if (value.value) {\n yield value.value;\n if (value.value.type === \"done\" || value.value.type === \"error\") {\n return;\n }\n }\n }\n } finally {\n if (!done) {\n unlisten();\n }\n }\n },\n } satisfies AppleIntelligenceTransport;\n}"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@entro314labs/apple-intelligence-sdk",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.4",
|
|
4
4
|
"description": "Apple Intelligence provider for the Vercel AI SDK with pluggable transports (Tauri, Node, etc.)",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -36,13 +36,13 @@
|
|
|
36
36
|
"LICENSE"
|
|
37
37
|
],
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@ai-sdk/provider": "
|
|
40
|
-
"@ai-sdk/provider-utils": "
|
|
39
|
+
"@ai-sdk/provider": "beta",
|
|
40
|
+
"@ai-sdk/provider-utils": "beta",
|
|
41
41
|
"@tauri-apps/api": "^2.11.1",
|
|
42
42
|
"json-schema": "^0.4.0"
|
|
43
43
|
},
|
|
44
44
|
"peerDependencies": {
|
|
45
|
-
"ai": "
|
|
45
|
+
"ai": "7.0.0-beta.184"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
48
|
"rimraf": "^6.1.3",
|