@lunora/ai 0.0.0 → 1.0.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,30 @@
1
+ import { EmbeddingModel, LanguageModel } from 'ai';
2
+ export { type EmbeddingModel, type LanguageModel, embed, embedMany, generateObject, generateText, streamObject, streamText, tool } from 'ai';
3
+ export { createWorkersAI } from 'workers-ai-provider';
4
+ interface AiBindingLike {
5
+ run: (model: string, inputs: Record<string, unknown>, options?: Record<string, unknown>) => Promise<unknown>;
6
+ }
7
+ interface WorkersAiProviderLike {
8
+ (modelId: string, settings?: Record<string, unknown>): LanguageModel;
9
+ textEmbeddingModel?: (modelId: string) => EmbeddingModel;
10
+ }
11
+ interface AiGatewayOptions {
12
+ [key: string]: unknown;
13
+ id: string;
14
+ }
15
+ interface LunoraAiOptions {
16
+ binding?: AiBindingLike;
17
+ defaultModel?: string;
18
+ gateway?: AiGatewayOptions;
19
+ provider?: WorkersAiProviderLike;
20
+ }
21
+ type ModelInput = LanguageModel;
22
+ type EmbeddingModelInput = EmbeddingModel | string;
23
+ interface LunoraAi {
24
+ embeddingModel: (model?: EmbeddingModelInput) => EmbeddingModel;
25
+ model: (model?: ModelInput) => LanguageModel;
26
+ run: (model: string, inputs: Record<string, unknown>, options?: Record<string, unknown>) => Promise<unknown>;
27
+ workersai: WorkersAiProviderLike;
28
+ }
29
+ declare const createAi: (options: LunoraAiOptions) => LunoraAi;
30
+ export { type AiBindingLike, type AiGatewayOptions, type EmbeddingModelInput, type LunoraAi, type LunoraAiOptions, type ModelInput, type WorkersAiProviderLike, createAi };
@@ -0,0 +1,30 @@
1
+ import { EmbeddingModel, LanguageModel } from 'ai';
2
+ export { type EmbeddingModel, type LanguageModel, embed, embedMany, generateObject, generateText, streamObject, streamText, tool } from 'ai';
3
+ export { createWorkersAI } from 'workers-ai-provider';
4
+ interface AiBindingLike {
5
+ run: (model: string, inputs: Record<string, unknown>, options?: Record<string, unknown>) => Promise<unknown>;
6
+ }
7
+ interface WorkersAiProviderLike {
8
+ (modelId: string, settings?: Record<string, unknown>): LanguageModel;
9
+ textEmbeddingModel?: (modelId: string) => EmbeddingModel;
10
+ }
11
+ interface AiGatewayOptions {
12
+ [key: string]: unknown;
13
+ id: string;
14
+ }
15
+ interface LunoraAiOptions {
16
+ binding?: AiBindingLike;
17
+ defaultModel?: string;
18
+ gateway?: AiGatewayOptions;
19
+ provider?: WorkersAiProviderLike;
20
+ }
21
+ type ModelInput = LanguageModel;
22
+ type EmbeddingModelInput = EmbeddingModel | string;
23
+ interface LunoraAi {
24
+ embeddingModel: (model?: EmbeddingModelInput) => EmbeddingModel;
25
+ model: (model?: ModelInput) => LanguageModel;
26
+ run: (model: string, inputs: Record<string, unknown>, options?: Record<string, unknown>) => Promise<unknown>;
27
+ workersai: WorkersAiProviderLike;
28
+ }
29
+ declare const createAi: (options: LunoraAiOptions) => LunoraAi;
30
+ export { type AiBindingLike, type AiGatewayOptions, type EmbeddingModelInput, type LunoraAi, type LunoraAiOptions, type ModelInput, type WorkersAiProviderLike, createAi };
package/dist/index.mjs ADDED
@@ -0,0 +1,3 @@
1
+ export { default as createAi } from './packem_shared/createAi-CaLhvwAd.mjs';
2
+ export { embed, embedMany, generateObject, generateText, streamObject, streamText, tool } from 'ai';
3
+ export { createWorkersAI } from 'workers-ai-provider';
@@ -0,0 +1,49 @@
1
+ import { createWorkersAI } from 'workers-ai-provider';
2
+
3
+ const buildProvider = (binding, gateway) => createWorkersAI({ binding, gateway });
4
+ const createAi = (options) => {
5
+ const { binding, defaultModel, gateway, provider } = options;
6
+ if (!provider && !binding) {
7
+ throw new Error("@lunora/ai: createAi requires a `binding` (env.AI) or a pre-built `provider`");
8
+ }
9
+ const workersai = provider ?? buildProvider(binding, gateway);
10
+ const model = (input) => {
11
+ if (input === void 0) {
12
+ if (!defaultModel) {
13
+ throw new Error("@lunora/ai: no model supplied and no `defaultModel` configured — pass a model id or an AI SDK model");
14
+ }
15
+ return workersai(defaultModel);
16
+ }
17
+ return typeof input === "string" ? workersai(input) : input;
18
+ };
19
+ const resolveEmbeddingModel = (modelId) => {
20
+ const factory = workersai.textEmbeddingModel;
21
+ if (typeof factory !== "function") {
22
+ throw new TypeError(
23
+ "@lunora/ai: the Workers AI provider does not expose `textEmbeddingModel`; pass an AI SDK EmbeddingModel (e.g. from @ai-sdk/openai) to embed()"
24
+ );
25
+ }
26
+ return factory.call(workersai, modelId);
27
+ };
28
+ const embeddingModel = (input) => {
29
+ if (typeof input === "object") {
30
+ return input;
31
+ }
32
+ const modelId = input ?? defaultModel;
33
+ if (!modelId) {
34
+ throw new Error(
35
+ "@lunora/ai: no embedding model supplied and no `defaultModel` configured — pass an embedding model id or an AI SDK EmbeddingModel"
36
+ );
37
+ }
38
+ return resolveEmbeddingModel(modelId);
39
+ };
40
+ const run = async (modelId, inputs, runOptions) => {
41
+ if (!binding) {
42
+ throw new Error("@lunora/ai: ai.run requires the `binding` (env.AI) — it is unavailable when only a custom `provider` was supplied");
43
+ }
44
+ return binding.run(modelId, inputs, runOptions);
45
+ };
46
+ return { embeddingModel, model, run, workersai };
47
+ };
48
+
49
+ export { createAi as default };
package/package.json CHANGED
@@ -1,32 +1,68 @@
1
1
  {
2
2
  "name": "@lunora/ai",
3
- "version": "0.0.0",
3
+ "version": "1.0.0-alpha.2",
4
4
  "description": "Workers AI helper for Lunora: provider-agnostic AI SDK access from functions, Workers AI by default",
5
- "license": "FSL-1.1-Apache-2.0",
5
+ "keywords": [
6
+ "ai",
7
+ "ai-sdk",
8
+ "cloudflare",
9
+ "embeddings",
10
+ "inference",
11
+ "llm",
12
+ "lunora",
13
+ "workers",
14
+ "workers-ai"
15
+ ],
6
16
  "homepage": "https://lunora.sh",
17
+ "bugs": "https://github.com/anolilab/lunora/issues",
18
+ "license": "FSL-1.1-Apache-2.0",
19
+ "author": {
20
+ "name": "Daniel Bannert",
21
+ "email": "d.bannert@anolilab.de"
22
+ },
7
23
  "repository": {
8
24
  "type": "git",
9
25
  "url": "git+https://github.com/anolilab/lunora.git",
10
26
  "directory": "packages/ai"
11
27
  },
12
- "bugs": {
13
- "url": "https://github.com/anolilab/lunora/issues"
14
- },
15
- "keywords": [
16
- "lunora",
17
- "cloudflare",
18
- "workers",
19
- "workers-ai",
20
- "ai",
21
- "ai-sdk",
22
- "llm",
23
- "inference",
24
- "embeddings"
28
+ "files": [
29
+ "./dist",
30
+ "__assets__",
31
+ "README.md",
32
+ "LICENSE.md"
25
33
  ],
34
+ "type": "module",
35
+ "sideEffects": false,
36
+ "main": "./dist/index.mjs",
37
+ "module": "./dist/index.mjs",
38
+ "types": "./dist/index.d.ts",
39
+ "exports": {
40
+ ".": {
41
+ "types": "./dist/index.d.ts",
42
+ "import": "./dist/index.mjs"
43
+ },
44
+ "./package.json": "./package.json"
45
+ },
26
46
  "publishConfig": {
27
47
  "access": "public"
28
48
  },
29
- "files": [
30
- "README.md"
31
- ]
49
+ "dependencies": {
50
+ "ai": "6.0.208",
51
+ "workers-ai-provider": "3.2.0"
52
+ },
53
+ "peerDependencies": {
54
+ "@ai-sdk/anthropic": "3.0.85",
55
+ "@ai-sdk/openai": "3.0.73"
56
+ },
57
+ "peerDependenciesMeta": {
58
+ "@ai-sdk/anthropic": {
59
+ "optional": true
60
+ },
61
+ "@ai-sdk/openai": {
62
+ "optional": true
63
+ }
64
+ },
65
+ "engines": {
66
+ "node": "^22.15.0 || >=24.11.0"
67
+ }
32
68
  }