@entro314labs/apple-intelligence-sdk 0.3.2 → 0.5.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.
- package/dist/index.cjs +11 -3
- package/dist/index.d.cts +6 -0
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +6 -0
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +11 -3
- package/dist/index.mjs.map +1 -1
- package/package.json +6 -6
package/dist/index.cjs
CHANGED
|
@@ -44,11 +44,13 @@ var AppleIntelligenceChatLanguageModel = class {
|
|
|
44
44
|
tools,
|
|
45
45
|
temperature: this.settings.temperature,
|
|
46
46
|
maxTokens: options.maxOutputTokens ?? this.settings.maxTokens,
|
|
47
|
-
stopAfterToolCalls: true
|
|
47
|
+
stopAfterToolCalls: true,
|
|
48
|
+
abortSignal: options.abortSignal
|
|
48
49
|
})) : this.createStreamFromChunks(this.transport.stream({
|
|
49
50
|
messages,
|
|
50
51
|
temperature: this.settings.temperature,
|
|
51
|
-
maxTokens: options.maxOutputTokens ?? this.settings.maxTokens
|
|
52
|
+
maxTokens: options.maxOutputTokens ?? this.settings.maxTokens,
|
|
53
|
+
abortSignal: options.abortSignal
|
|
52
54
|
})) };
|
|
53
55
|
}
|
|
54
56
|
supportsUrl(_url) {
|
|
@@ -367,7 +369,13 @@ function createTauriAppleIntelligenceTransport(options = {}) {
|
|
|
367
369
|
return (0, _tauri_apps_api_core.invoke)(command("generate"), { request });
|
|
368
370
|
},
|
|
369
371
|
async *stream(request) {
|
|
370
|
-
const
|
|
372
|
+
const { abortSignal, ...payload } = request;
|
|
373
|
+
const start = await (0, _tauri_apps_api_core.invoke)(command("stream"), { request: payload });
|
|
374
|
+
const cancel = () => {
|
|
375
|
+
(0, _tauri_apps_api_core.invoke)(command("cancel_stream"), { streamId: start.streamId });
|
|
376
|
+
};
|
|
377
|
+
if (abortSignal?.aborted) cancel();
|
|
378
|
+
else abortSignal?.addEventListener("abort", cancel, { once: true });
|
|
371
379
|
const queue = [];
|
|
372
380
|
let done = false;
|
|
373
381
|
let pendingResolve = null;
|
package/dist/index.d.cts
CHANGED
|
@@ -66,6 +66,12 @@ type AppleIntelligenceStreamOptions = {
|
|
|
66
66
|
temperature?: number;
|
|
67
67
|
maxTokens?: number;
|
|
68
68
|
stopAfterToolCalls?: boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Aborting this signal cancels the in-flight on-device generation (the transport calls the
|
|
71
|
+
* host's cancel API). The stream then ends with a normal `done` event. Without it, a superseded
|
|
72
|
+
* generation keeps running to completion — wasted inference for typing-driven consumers.
|
|
73
|
+
*/
|
|
74
|
+
abortSignal?: AbortSignal;
|
|
69
75
|
};
|
|
70
76
|
interface AppleIntelligenceTransport {
|
|
71
77
|
checkAvailability(): Promise<AppleIntelligenceAvailability>;
|
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,KAAK;IACf,EAAA;IACA,IAAA;IACA,QAAA;MACE,IAAA;MACA,SAAA;IAAA;EAAA;AAAA;AAAA,KAKM,6BAAA;EACV,SAAA;EACA,MAAM;AAAA;AAAA,KAGI,+BAAA;EACV,IAAA;EACA,WAAA;EACA,UAAA,EAAY,WAAW;AAAA;AAAA,KAGb,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,yBAAyB;EACrC,MAAA;AAAA;AAAA,KAGU,4BAAA;EACN,IAAA;EAAc,IAAA;AAAA;EAEd,IAAA;EACA,UAAA;EACA,QAAA;EACA,IAAA,EAAM,MAAM;AAAA;EAEZ,IAAA;AAAA;EACA,IAAA;EAAe,OAAA;AAAA;AAAA,KAET,8BAAA;EACV,QAAA,EAAU,wBAAA;EACV,KAAA,GAAQ,+
|
|
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
|
@@ -66,6 +66,12 @@ type AppleIntelligenceStreamOptions = {
|
|
|
66
66
|
temperature?: number;
|
|
67
67
|
maxTokens?: number;
|
|
68
68
|
stopAfterToolCalls?: boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Aborting this signal cancels the in-flight on-device generation (the transport calls the
|
|
71
|
+
* host's cancel API). The stream then ends with a normal `done` event. Without it, a superseded
|
|
72
|
+
* generation keeps running to completion — wasted inference for typing-driven consumers.
|
|
73
|
+
*/
|
|
74
|
+
abortSignal?: AbortSignal;
|
|
69
75
|
};
|
|
70
76
|
interface AppleIntelligenceTransport {
|
|
71
77
|
checkAvailability(): Promise<AppleIntelligenceAvailability>;
|
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,KAAK;IACf,EAAA;IACA,IAAA;IACA,QAAA;MACE,IAAA;MACA,SAAA;IAAA;EAAA;AAAA;AAAA,KAKM,6BAAA;EACV,SAAA;EACA,MAAM;AAAA;AAAA,KAGI,+BAAA;EACV,IAAA;EACA,WAAA;EACA,UAAA,EAAY,WAAW;AAAA;AAAA,KAGb,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,yBAAyB;EACrC,MAAA;AAAA;AAAA,KAGU,4BAAA;EACN,IAAA;EAAc,IAAA;AAAA;EAEd,IAAA;EACA,UAAA;EACA,QAAA;EACA,IAAA,EAAM,MAAM;AAAA;EAEZ,IAAA;AAAA;EACA,IAAA;EAAe,OAAA;AAAA;AAAA,KAET,8BAAA;EACV,QAAA,EAAU,wBAAA;EACV,KAAA,GAAQ,+
|
|
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
|
@@ -43,11 +43,13 @@ var AppleIntelligenceChatLanguageModel = class {
|
|
|
43
43
|
tools,
|
|
44
44
|
temperature: this.settings.temperature,
|
|
45
45
|
maxTokens: options.maxOutputTokens ?? this.settings.maxTokens,
|
|
46
|
-
stopAfterToolCalls: true
|
|
46
|
+
stopAfterToolCalls: true,
|
|
47
|
+
abortSignal: options.abortSignal
|
|
47
48
|
})) : this.createStreamFromChunks(this.transport.stream({
|
|
48
49
|
messages,
|
|
49
50
|
temperature: this.settings.temperature,
|
|
50
|
-
maxTokens: options.maxOutputTokens ?? this.settings.maxTokens
|
|
51
|
+
maxTokens: options.maxOutputTokens ?? this.settings.maxTokens,
|
|
52
|
+
abortSignal: options.abortSignal
|
|
51
53
|
})) };
|
|
52
54
|
}
|
|
53
55
|
supportsUrl(_url) {
|
|
@@ -366,7 +368,13 @@ function createTauriAppleIntelligenceTransport(options = {}) {
|
|
|
366
368
|
return invoke(command("generate"), { request });
|
|
367
369
|
},
|
|
368
370
|
async *stream(request) {
|
|
369
|
-
const
|
|
371
|
+
const { abortSignal, ...payload } = request;
|
|
372
|
+
const start = await invoke(command("stream"), { request: payload });
|
|
373
|
+
const cancel = () => {
|
|
374
|
+
invoke(command("cancel_stream"), { streamId: start.streamId });
|
|
375
|
+
};
|
|
376
|
+
if (abortSignal?.aborted) cancel();
|
|
377
|
+
else abortSignal?.addEventListener("abort", cancel, { once: true });
|
|
370
378
|
const queue = [];
|
|
371
379
|
let done = false;
|
|
372
380
|
let pendingResolve = null;
|
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 })\n )\n : this.createStreamFromChunks(\n this.transport.stream({\n messages,\n temperature: this.settings.temperature,\n maxTokens: options.maxOutputTokens ?? this.settings.maxTokens,\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 const start = await invoke<StreamStart>(command(\"stream\"), { request });\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\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":";;;;AAoDA,SAAgB,gCACd,UAC2B;CAC3B,MAAM,eACJ,SACA,gBAA2C,CAAC,MACzC,IAAI,mCAAmC,SAAS,eAAe,QAAQ;CAE5E,MAAM,WAAW,SACf,SACA,eACA;EACA,IAAI,IAAI,QACN,MAAM,IAAI,MACR,wEACF;EAGF,OAAO,YAAY,SAAS,aAAa;CAC3C;CAEA,SAAS,OAAO;CAChB,SAAS,gBAAgB;CAEzB,OAAO;AACT;AAEA,IAAa,qCAAb,MAA2E;CACzE,uBAAgC;CAChC,WAAoB;CACpB;CACA,8BAAuC;CAEvC,oBAAoB;CACpB,4BAA4B;CAE5B;CACA;CACA;CAEA,YACE,SACA,UACA,kBACA;EACA,KAAK,UAAU;EACf,KAAK,WAAW;EAChB,KAAK,YAAY,iBAAiB;EAClC,KAAK,aAAa,iBAAiB,cAAc;CACnD;CAEA,gBAE4C,CAAC;CAE7C,MAAM,WACJ,SAYC;EACD,MAAM,KAAK,mBAAmB;EAM9B,IAHE,QAAQ,gBAAgB,SAAS,UACjC,QAAQ,QAAQ,eAAe,MAAM,GAGrC,OAAO,KAAK,2BAA2B,OAAO;EAGhD,OAAO,KAAK,wBAAwB,OAAO;CAC7C;CAEA,MAAM,SACJ,SACgE;EAChE,MAAM,KAAK,mBAAmB;EAE9B,MAAM,WAAW,KAAK,wBAAwB,QAAQ,MAAM;EAC5D,MAAM,QAAQ,QAAQ,OAAO,SACzB,KAAK,aAAa,QAAQ,KAAK,IAC/B,KAAA;EAsBJ,OAAO,EAAE,QApBM,OAAO,SAClB,KAAK,uBACH,KAAK,UAAU,OAAO;GACpB;GACA;GACA,aAAa,KAAK,SAAS;GAC3B,WAAW,QAAQ,mBAAmB,KAAK,SAAS;GACpD,oBAAoB;GACpB,aAAa,QAAQ;EACvB,CAAC,CACH,IACA,KAAK,uBACH,KAAK,UAAU,OAAO;GACpB;GACA,aAAa,KAAK,SAAS;GAC3B,WAAW,QAAQ,mBAAmB,KAAK,SAAS;GACpD,aAAa,QAAQ;EACvB,CAAC,CACH,EAEY;CAClB;CAEA,YAAa,MAA2B;EACtC,OAAO;CACT;CAEA,MAAc,qBAA6D;EACzE,IAAI,KAAK,SAAS,wBAAwB,OACxC,OAAO;GAAE,WAAW;GAAM,QAAQ;EAA6B;EAGjE,MAAM,eAAe,MAAM,KAAK,UAAU,kBAAkB;EAC5D,IAAI,CAAC,aAAa,WAChB,MAAM,IAAI,MACR,qCAAqC,aAAa,QACpD;EAGF,OAAO;CACT;CAEA,MAAc,2BACZ,SAMC;EACD,MAAM,SAAS,QAAQ,gBAAgB;EACvC,IAAI,CAAC,QACH,MAAM,IAAI,MACR,iEACF;EAGF,MAAM,WAAW,KAAK,wBAAwB,QAAQ,MAAM;EAC5D,MAAM,SAAS,MAAM,KAAK,UAAU,SAAS;GAC3C;GACA;GACA,aAAa,KAAK,SAAS;GAC3B,WAAW,QAAQ,mBAAmB,KAAK,SAAS;EACtD,CAAC;EAED,IAAI,OAAO,WAAW,KAAA,GACpB,OAAO;GACL,SAAS,CACP;IACE,MAAM;IACN,MAAM,KAAK,UAAU,OAAO,MAAM;GACpC,CACF;GACA,cAAc;IAAE,SAAS;IAAQ,KAAK;GAAO;GAC7C,OAAO,KAAK,WAAW;GACvB,UAAU,CAAC;EACb;EAGF,OAAO;GACL,SAAS,CAAC;IAAE,MAAM;IAAQ,MAAM,OAAO,QAAQ;GAAG,CAAC;GACnD,cAAc;IAAE,SAAS;IAAQ,KAAK;GAAO;GAC7C,OAAO,KAAK,WAAW;GACvB,UAAU,CAAC;EACb;CACF;CAEA,MAAc,wBACZ,SAMC;EACD,MAAM,WAAW,KAAK,wBAAwB,QAAQ,MAAM;EAC5D,MAAM,QAAQ,QAAQ,OAAO,SACzB,KAAK,aAAa,QAAQ,KAAK,IAC/B,KAAA;EAEJ,MAAM,SAAS,MAAM,KAAK,UAAU,SAAS;GAC3C;GACA;GACA,aAAa,KAAK,SAAS;GAC3B,WAAW,QAAQ,mBAAmB,KAAK,SAAS;GACpD,oBAAoB;EACtB,CAAC;EAED,IAAI,OAAO,WAAW,QAUpB,OAAO;GACL,SAVgD,OAAO,UAAU,KAChE,UAAU;IACT,MAAM;IACN,YAAY,KAAK;IACjB,UAAU,KAAK,SAAS;IACxB,OAAO,KAAK,SAAS;GACvB,EAIuB;GACvB,cAAc;IAAE,SAAS;IAAc,KAAK;GAAa;GACzD,OAAO,KAAK,WAAW;GACvB,UAAU,CAAC;EACb;EAGF,OAAO;GACL,SAAS,CAAC;IAAE,MAAM;IAAQ,MAAM,OAAO,QAAQ;GAAG,CAAC;GACnD,cAAc;IAAE,SAAS;IAAQ,KAAK;GAAO;GAC7C,OAAO,KAAK,WAAW;GACvB,UAAU,CAAC;EACb;CACF;CAEA,aACE,OACmC;EACnC,OAAO,QACH,MAAM,KAAK,SAAS;GAClB,IAAI,KAAK,SAAS,YAChB,MAAM,IAAI,MAAM,0BAA0B,KAAK,MAAM;GAGvD,OAAO;IACL,MAAM,KAAK;IACX,aAAa,KAAK;IAClB,YAAY,KAAK;GACnB;EACF,CAAC,IACD,CAAC;CACP;CAEA,wBACE,QAC4B;EAC5B,OAAO,OAAO,KAAK,YAAY;GAC7B,QAAQ,QAAQ,MAAhB;IACE,KAAK,UACH,OAAO;KACL,MAAM;KACN,SAAS,QAAQ;IACnB;IACF,KAAK,QACH,OAAO;KACL,MAAM;KACN,SAAS,MAAM,QAAQ,QAAQ,OAAO,IAClC,QAAQ,QACL,KAAK,SACJ,KAAK,SAAS,SAAS,KAAK,OAAO,uBACrC,CAAC,CACA,KAAK,IAAI,IACZ,QAAQ;IACd;IACF,KAAK,aACH,OAAO,KAAK,wBAAwB,OAAO;IAC7C,KAAK,QACH,OAAO,KAAK,mBAAmB,OAAO;IACxC,SACE,OAAO;KACL,MAAM;KACN,SAAS,OAAO,QAAQ,WAAW,EAAE;IACvC;GACJ;EACF,CAAC;CACH;CAEA,wBACE,SAC0B;EAC1B,IAAI,MAAM,QAAQ,QAAQ,OAAO,GAAG;GAClC,MAAM,YAAY,QAAQ,QAAQ,QAC/B,SAAS,KAAK,SAAS,WAC1B;GACA,MAAM,YAAY,QAAQ,QAAQ,QAAQ,SAAS,KAAK,SAAS,MAAM;GAEvE,IAAI,UAAU,SAAS,GACrB,OAAO;IACL,MAAM;IACN,SAAS,UAAU,KAAK,SAAS,KAAK,IAAI,CAAC,CAAC,KAAK,IAAI,KAAK;IAC1D,WAAW,UAAU,KAAK,UAAU;KAClC,IAAI,KAAK;KACT,MAAM;KACN,UAAU;MACR,MAAM,KAAK;MACX,WACE,OAAO,KAAK,UAAU,WAClB,KAAK,QACL,KAAK,UAAU,KAAK,KAAK;KACjC;IACF,EAAE;GACJ;GAGF,OAAO;IACL,MAAM;IACN,SAAS,QAAQ,QACd,KAAK,SAAS;KACb,QAAQ,KAAK,MAAb;MACE,KAAK;MACL,KAAK,aACH,OAAO,KAAK;MACd,SACE,OAAO,0BAA0B,KAAK,KAAK;KAC/C;IACF,CAAC,CAAC,CACD,KAAK,IAAI;GACd;EACF;EAEA,OAAO;GACL,MAAM;GACN,SAAS,QAAQ,WAAW;EAC9B;CACF;CAEA,mBACE,SAC0B;EAC1B,MAAM,YAAY,QAAQ,QACvB,KAAK,SAAS;GACb,IAAI,KAAK,SAAS,eAChB,OAAO;IACL,IAAI,KAAK;IACT,UAAU,KAAK;IACf,UAAU,CACR;KACE,MAAM;KACN,MAAM,KAAK,uBAAuB,KAAK,MAAM;IAC/C,CACF;GACF;GAEF,IAAI,KAAK,SAAS,0BAChB,OAAO;IACL,IAAI,KAAK;IACT,UAAU;IACV,UAAU,CACR;KACE,MAAM;KACN,MAAM,KAAK,WACP,wBACE,KAAK,SAAS,KAAK,KAAK,WAAW,OAErC,uBACE,KAAK,SAAS,KAAK,KAAK,WAAW;IAE3C,CACF;GACF;GAEF,OAAO;EACT,CAAC,CAAC,CACD,OAAO,OAAO;EAEjB,OAAO;GACL,MAAM;GACN,SAAS,KAAK,UAAU,EAAE,YAAY,UAAU,CAAC;EACnD;CACF;CAEA,uBACE,QACQ;EACR,QAAQ,OAAO,MAAf;GACE,KAAK;GACL,KAAK,cACH,OAAO,OAAO;GAChB,KAAK;GACL,KAAK,cACH,OAAO,KAAK,UAAU,OAAO,KAAK;GACpC,KAAK,oBACH,OAAO,OAAO,SACV,0BAA0B,OAAO,WACjC;GACN,KAAK,WACH,OAAO,OAAO,MACX,KAAK,SAAS;IACb,IAAI,KAAK,SAAS,QAChB,OAAO,KAAK;IAEd,IAAI,KAAK,SAAS,aAChB,OAAO,cAAc,KAAK,UAAU;IAEtC,IAAI,KAAK,SAAS,YAChB,OAAO,aAAa,KAAK,IAAI;IAE/B,OAAO;GACT,CAAC,CAAC,CACD,KAAK,IAAI;GACd,SACE,OAAO;EACX;CACF;CAEA,uBACE,cAC2C;EAC3C,OAAO,IAAI,eAA0C,EACnD,MAAM,MAAM,YAAY;GACtB,WAAW,QAAQ;IAAE,MAAM;IAAgB,UAAU,CAAC;GAAE,CAAC;GACzD,MAAM,SAAS,OAAO,WAAW;GACjC,IAAI,UAAU;GACd,IAAI,eAAe;GAEnB,IAAI;IACF,WAAW,MAAM,SAAS,cACxB,IAAI,MAAM,SAAS,QAAQ;KACzB,IAAI,CAAC,SAAS;MACZ,WAAW,QAAQ;OAAE,MAAM;OAAc,IAAI;MAAO,CAAC;MACrD,UAAU;KACZ;KACA,WAAW,QAAQ;MACjB,MAAM;MACN,OAAO,MAAM;MACb,IAAI;KACN,CAAC;IACH,OAAO,IAAI,MAAM,SAAS,aAAa;KACrC,eAAe;KACf,WAAW,QAAQ;MACjB,MAAM;MACN,YAAY,MAAM;MAClB,UAAU,MAAM;MAChB,OAAO,KAAK,UAAU,MAAM,IAAI;KAClC,CAAC;IACH,OAAO,IAAI,MAAM,SAAS,SAAS;KACjC,WAAW,MAAM,IAAI,MAAM,MAAM,OAAO,CAAC;KACzC;IACF,OAAO,IAAI,MAAM,SAAS,QACxB;IAIJ,IAAI,SACF,WAAW,QAAQ;KAAE,MAAM;KAAY,IAAI;IAAO,CAAC;IAGrD,WAAW,QAAQ;KACjB,MAAM;KACN,cAAc,eACV;MAAE,SAAS;MAAc,KAAK;KAAa,IAC3C;MAAE,SAAS;MAAQ,KAAK;KAAO;KACnC,OAAO;MACL,aAAa,KAAA;MACb,cAAc,KAAA;MACd,aAAa,KAAA;KACf;IACF,CAAC;IACD,WAAW,MAAM;GACnB,SAAS,KAAK;IACZ,WAAW,MAAM,GAAG;GACtB;EACF,EACF,CAAC;CACH;CAEA,uBACE,QAC2C;EAC3C,OAAO,IAAI,eAA0C,EACnD,MAAM,MAAM,YAAY;GACtB,WAAW,QAAQ;IAAE,MAAM;IAAgB,UAAU,CAAC;GAAE,CAAC;GACzD,MAAM,SAAS,OAAO,WAAW;GACjC,IAAI,UAAU;GAEd,IAAI;IACF,WAAW,MAAM,SAAS,QACxB,IAAI,MAAM,SAAS,QAAQ;KACzB,IAAI,CAAC,SAAS;MACZ,WAAW,QAAQ;OAAE,MAAM;OAAc,IAAI;MAAO,CAAC;MACrD,UAAU;KACZ;KACA,WAAW,QAAQ;MACjB,MAAM;MACN,OAAO,MAAM;MACb,IAAI;KACN,CAAC;IACH,OAAO,IAAI,MAAM,SAAS,SAAS;KACjC,WAAW,MAAM,IAAI,MAAM,MAAM,OAAO,CAAC;KACzC;IACF,OAAO,IAAI,MAAM,SAAS,QACxB;IAIJ,IAAI,SACF,WAAW,QAAQ;KAAE,MAAM;KAAY,IAAI;IAAO,CAAC;IAGrD,WAAW,QAAQ;KACjB,MAAM;KACN,cAAc;MAAE,SAAS;MAAQ,KAAK;KAAO;KAC7C,OAAO;MACL,aAAa,KAAA;MACb,cAAc,KAAA;MACd,aAAa,KAAA;KACf;IACF,CAAC;IACD,WAAW,MAAM;GACnB,SAAS,KAAK;IACZ,WAAW,MAAM,GAAG;GACtB;EACF,EACF,CAAC;CACH;CAEA,aAA2C;EACzC,OAAO;GACL,aAAa,KAAA;GACb,cAAc,KAAA;GACd,aAAa,KAAA;EACf;CACF;AACF;;;AC5iBA,SAAgB,sCACd,UAAkD,CAAC,GACvB;CAC5B,MAAM,SAAS,QAAQ,iBAAiB;CAExC,MAAM,WAAW,SAAiB,GAAG,OAAO,GAAG;CAE/C,OAAO;EACL,MAAM,oBAA4D;GAChE,OAAO,OAAO,QAAQ,oBAAoB,CAAC;EAC7C;EAEA,MAAM,SACJ,SAC0C;GAC1C,OAAO,OAAO,QAAQ,UAAU,GAAG,EAAE,QAAQ,CAAC;EAChD;EAEA,OAAO,OACL,SAC6C;GAE7C,MAAM,EAAE,aAAa,GAAG,YAAY;GACpC,MAAM,QAAQ,MAAM,OAAoB,QAAQ,QAAQ,GAAG,EACzD,SAAS,QACX,CAAC;GAKD,MAAM,eAAe;IACnB,OAAY,QAAQ,eAAe,GAAG,EAAE,UAAU,MAAM,SAAS,CAAC;GACpE;GACA,IAAI,aAAa,SACf,OAAO;QAEP,aAAa,iBAAiB,SAAS,QAAQ,EAAE,MAAM,KAAK,CAAC;GAG/D,MAAM,QAAwC,CAAC;GAC/C,IAAI,OAAO;GACX,IAAI,iBAEO;GAEX,MAAM,WAAW,MAAM,OACrB,MAAM,YACL,UAAU;IACT,MAAM,UAAU,MAAM;IACtB,IAAI,gBAAgB;KAClB,eAAe;MAAE,OAAO;MAAS,MAAM;KAAM,CAAC;KAC9C,iBAAiB;IACnB,OACE,MAAM,KAAK,OAAO;IAGpB,IAAI,QAAQ,SAAS,UAAU,QAAQ,SAAS,SAAS;KACvD,OAAO;KACP,SAAS;IACX;GACF,CACF;GAEA,IAAI;IACF,OAAO,MAAM;KACX,IAAI,MAAM,SAAS,GAAG;MACpB,MAAM,QAAQ,MAAM,MAAM;MAC1B,MAAM;MACN,IAAI,MAAM,SAAS,UAAU,MAAM,SAAS,SAC1C;MAEF;KACF;KAEA,IAAI,MACF;KAGF,MAAM,QAAQ,MAAM,IAAI,SAErB,YAAY;MACb,iBAAiB;KACnB,CAAC;KAED,IAAI,MAAM,OAAO;MACf,MAAM,MAAM;MACZ,IAAI,MAAM,MAAM,SAAS,UAAU,MAAM,MAAM,SAAS,SACtD;KAEJ;IACF;GACF,UAAU;IACR,IAAI,CAAC,MACH,SAAS;GAEb;EACF;CACF;AACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@entro314labs/apple-intelligence-sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.1",
|
|
4
4
|
"description": "Apple Intelligence provider for the Vercel AI SDK with pluggable transports (Tauri, Node, etc.)",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -32,17 +32,17 @@
|
|
|
32
32
|
],
|
|
33
33
|
"dependencies": {
|
|
34
34
|
"@ai-sdk/provider": "^3.0.10",
|
|
35
|
-
"@ai-sdk/provider-utils": "^4.0.
|
|
36
|
-
"@tauri-apps/api": "^2.11.
|
|
35
|
+
"@ai-sdk/provider-utils": "^4.0.30",
|
|
36
|
+
"@tauri-apps/api": "^2.11.1",
|
|
37
37
|
"json-schema": "^0.4.0"
|
|
38
38
|
},
|
|
39
39
|
"peerDependencies": {
|
|
40
|
-
"ai": "^6.0.
|
|
40
|
+
"ai": "^6.0.209"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
43
|
"rimraf": "^6.1.3",
|
|
44
|
-
"tsdown": "^0.22.
|
|
45
|
-
"typescript": "
|
|
44
|
+
"tsdown": "^0.22.3",
|
|
45
|
+
"typescript": "rc"
|
|
46
46
|
},
|
|
47
47
|
"keywords": [
|
|
48
48
|
"apple",
|