@better-agent/openrouter 0.2.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,36 @@
1
+ import { OpenAICompatibleEmbeddingProviderOptions, OpenAICompatibleProviderOptions, OpenAICompatibleProviderSettings } from "@ai-sdk/openai-compatible";
2
+ import { AgentCapabilities, AgentModel, EmbeddingGenerationModel, ImageGenerationModel, TextGenerationModel } from "@better-agent/core";
3
+
4
+ //#region src/model.d.ts
5
+ type OpenRouterModelId = string;
6
+ type OpenRouterEmbeddingModelId = string & {};
7
+ type OpenRouterImageModelId = string & {};
8
+ type CreateOpenRouterOptions = Omit<OpenAICompatibleProviderSettings, "baseURL" | "name"> & {
9
+ baseURL?: string;
10
+ };
11
+ type OpenRouterProviderOptions = {
12
+ openrouter?: OpenAICompatibleProviderOptions & Record<string, unknown>;
13
+ };
14
+ type OpenRouterTextProviderOptions = OpenRouterProviderOptions;
15
+ type OpenRouterEmbeddingProviderOptions = {
16
+ openrouter?: OpenAICompatibleEmbeddingProviderOptions & Record<string, unknown>;
17
+ };
18
+ type OpenRouterImageProviderOptions = {
19
+ openrouter?: Record<string, unknown>;
20
+ };
21
+ type OpenRouterGenerationProviderOptions = OpenRouterProviderOptions | OpenRouterTextProviderOptions | OpenRouterEmbeddingProviderOptions | OpenRouterImageProviderOptions;
22
+ type OpenRouterTextModelId = OpenRouterModelId;
23
+ type OpenRouterModel<TModelId extends OpenRouterModelId = OpenRouterModelId> = AgentModel<AgentCapabilities, undefined, OpenRouterProviderOptions, TModelId>;
24
+ type OpenRouterTextModel<TModelId extends OpenRouterTextModelId = OpenRouterTextModelId> = TextGenerationModel<OpenRouterTextProviderOptions, TModelId>;
25
+ type OpenRouterEmbeddingModel<TModelId extends OpenRouterEmbeddingModelId = OpenRouterEmbeddingModelId> = EmbeddingGenerationModel<OpenRouterEmbeddingProviderOptions, TModelId>;
26
+ type OpenRouterImageModel<TModelId extends OpenRouterImageModelId = OpenRouterImageModelId> = ImageGenerationModel<OpenRouterImageProviderOptions, TModelId>;
27
+ type OpenRouterProvider = {
28
+ <TModelId extends OpenRouterModelId>(modelId: TModelId): OpenRouterModel<TModelId>;
29
+ text<TModelId extends OpenRouterTextModelId>(modelId: TModelId): OpenRouterTextModel<TModelId>;
30
+ embedding<TModelId extends OpenRouterEmbeddingModelId>(modelId: TModelId): OpenRouterEmbeddingModel<TModelId>;
31
+ image<TModelId extends OpenRouterImageModelId>(modelId: TModelId): OpenRouterImageModel<TModelId>;
32
+ };
33
+ declare const createOpenRouter: (options?: CreateOpenRouterOptions) => OpenRouterProvider;
34
+ //#endregion
35
+ export { type CreateOpenRouterOptions, type OpenRouterEmbeddingModel, type OpenRouterEmbeddingModelId, type OpenRouterEmbeddingProviderOptions, type OpenRouterGenerationProviderOptions, type OpenRouterImageModel, type OpenRouterImageModelId, type OpenRouterImageProviderOptions, type OpenRouterModel, type OpenRouterModelId, type OpenRouterProvider, type OpenRouterProviderOptions, type OpenRouterTextModel, type OpenRouterTextModelId, type OpenRouterTextProviderOptions, createOpenRouter };
36
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/model.ts"],"mappings":";;;;KAsBY,iBAAA;AAAA,KAEA,0BAAA;AAAA,KACA,sBAAA;AAAA,KAIA,uBAAA,GAA0B,IAAA,CAAK,gCAAA;EACvC,OAAA;AAAA;AAAA,KAGQ,yBAAA;EACR,UAAA,GAAa,+BAAA,GAAkC,MAAA;AAAA;AAAA,KAEvC,6BAAA,GAAgC,yBAAA;AAAA,KAChC,kCAAA;EACR,UAAA,GAAa,wCAAA,GAA2C,MAAA;AAAA;AAAA,KAEhD,8BAAA;EACR,UAAA,GAAa,MAAA;AAAA;AAAA,KAEL,mCAAA,GACN,yBAAA,GACA,6BAAA,GACA,kCAAA,GACA,8BAAA;AAAA,KAEM,qBAAA,GAAwB,iBAAA;AAAA,KAExB,eAAA,kBAAiC,iBAAA,GAAoB,iBAAA,IAAqB,UAAA,CAClF,iBAAA,aAEA,yBAAA,EACA,QAAA;AAAA,KAEQ,mBAAA,kBAAqC,qBAAA,GAAwB,qBAAA,IACrE,mBAAA,CAAoB,6BAAA,EAA+B,QAAA;AAAA,KAC3C,wBAAA,kBACS,0BAAA,GAA6B,0BAAA,IAC9C,wBAAA,CAAyB,kCAAA,EAAoC,QAAA;AAAA,KACrD,oBAAA,kBAAsC,sBAAA,GAAyB,sBAAA,IACvE,oBAAA,CAAqB,8BAAA,EAAgC,QAAA;AAAA,KAE7C,kBAAA;EAAA,kBACU,iBAAA,EAAmB,OAAA,EAAS,QAAA,GAAW,eAAA,CAAgB,QAAA;EACzE,IAAA,kBAAsB,qBAAA,EAAuB,OAAA,EAAS,QAAA,GAAW,mBAAA,CAAoB,QAAA;EACrF,SAAA,kBAA2B,0BAAA,EACvB,OAAA,EAAS,QAAA,GACV,wBAAA,CAAyB,QAAA;EAC5B,KAAA,kBAAuB,sBAAA,EACnB,OAAA,EAAS,QAAA,GACV,oBAAA,CAAqB,QAAA;AAAA;AAAA,cAoGf,gBAAA,GAAgB,OAAA,GAAa,uBAAA,KAA+B,kBAAA"}
package/dist/index.mjs ADDED
@@ -0,0 +1,68 @@
1
+ import { createOpenAICompatible } from "@ai-sdk/openai-compatible";
2
+ import { aiSdkEmbeddingModel, aiSdkImageModel, aiSdkModel, aiSdkTextModel } from "@better-agent/ai-sdk";
3
+
4
+ //#region src/model.ts
5
+ const OPENROUTER_BASE_URL = "https://openrouter.ai/api/v1";
6
+ const openRouterCapabilities = {
7
+ identity: { provider: "openrouter" },
8
+ transport: { streaming: true },
9
+ output: { supportedMimeTypes: ["text/plain", "application/json"] }
10
+ };
11
+ const createOpenAICompatibleOpenRouter = (options = {}) => {
12
+ return createOpenAICompatible({
13
+ ...options,
14
+ name: "openrouter",
15
+ baseURL: options.baseURL ?? OPENROUTER_BASE_URL
16
+ });
17
+ };
18
+ const createAgentModel = (provider, modelId) => {
19
+ return aiSdkModel({
20
+ model: provider(modelId),
21
+ providerId: "openrouter",
22
+ modelId,
23
+ capabilities: openRouterCapabilities
24
+ });
25
+ };
26
+ const createTextModel = (provider, modelId) => {
27
+ return aiSdkTextModel({
28
+ model: provider(modelId),
29
+ providerId: "openrouter",
30
+ modelId
31
+ });
32
+ };
33
+ const createEmbeddingModel = (provider, modelId) => {
34
+ return aiSdkEmbeddingModel({
35
+ model: provider.embeddingModel(modelId),
36
+ providerId: "openrouter",
37
+ modelId
38
+ });
39
+ };
40
+ const createImageModel = (provider, modelId) => {
41
+ return aiSdkImageModel({
42
+ model: provider.imageModel(modelId),
43
+ providerId: "openrouter",
44
+ modelId
45
+ });
46
+ };
47
+ const createProvider = (provider) => {
48
+ return Object.assign((modelId) => {
49
+ return createAgentModel(provider, modelId);
50
+ }, {
51
+ text(modelId) {
52
+ return createTextModel(provider, modelId);
53
+ },
54
+ embedding(modelId) {
55
+ return createEmbeddingModel(provider, modelId);
56
+ },
57
+ image(modelId) {
58
+ return createImageModel(provider, modelId);
59
+ }
60
+ });
61
+ };
62
+ const createOpenRouter = (options = {}) => {
63
+ return createProvider(createOpenAICompatibleOpenRouter(options));
64
+ };
65
+
66
+ //#endregion
67
+ export { createOpenRouter };
68
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":["createAiSdkOpenAICompatible"],"sources":["../src/model.ts"],"sourcesContent":["import {\n type OpenAICompatibleEmbeddingProviderOptions,\n type OpenAICompatibleProviderOptions,\n type OpenAICompatibleProviderSettings,\n createOpenAICompatible as createAiSdkOpenAICompatible,\n} from \"@ai-sdk/openai-compatible\";\nimport {\n aiSdkEmbeddingModel,\n aiSdkImageModel,\n aiSdkModel,\n aiSdkTextModel,\n} from \"@better-agent/ai-sdk\";\nimport type {\n AgentCapabilities,\n AgentModel,\n EmbeddingGenerationModel,\n ImageGenerationModel,\n TextGenerationModel,\n} from \"@better-agent/core\";\n\nconst OPENROUTER_BASE_URL = \"https://openrouter.ai/api/v1\";\n\nexport type OpenRouterModelId = string;\ntype OpenRouterCompletionModelId = string & {};\nexport type OpenRouterEmbeddingModelId = string & {};\nexport type OpenRouterImageModelId = string & {};\n\ntype AiSdkOpenRouterProvider = ReturnType<typeof createOpenAICompatibleOpenRouter>;\n\nexport type CreateOpenRouterOptions = Omit<OpenAICompatibleProviderSettings, \"baseURL\" | \"name\"> & {\n baseURL?: string;\n};\n\nexport type OpenRouterProviderOptions = {\n openrouter?: OpenAICompatibleProviderOptions & Record<string, unknown>;\n};\nexport type OpenRouterTextProviderOptions = OpenRouterProviderOptions;\nexport type OpenRouterEmbeddingProviderOptions = {\n openrouter?: OpenAICompatibleEmbeddingProviderOptions & Record<string, unknown>;\n};\nexport type OpenRouterImageProviderOptions = {\n openrouter?: Record<string, unknown>;\n};\nexport type OpenRouterGenerationProviderOptions =\n | OpenRouterProviderOptions\n | OpenRouterTextProviderOptions\n | OpenRouterEmbeddingProviderOptions\n | OpenRouterImageProviderOptions;\n\nexport type OpenRouterTextModelId = OpenRouterModelId;\n\nexport type OpenRouterModel<TModelId extends OpenRouterModelId = OpenRouterModelId> = AgentModel<\n AgentCapabilities,\n undefined,\n OpenRouterProviderOptions,\n TModelId\n>;\nexport type OpenRouterTextModel<TModelId extends OpenRouterTextModelId = OpenRouterTextModelId> =\n TextGenerationModel<OpenRouterTextProviderOptions, TModelId>;\nexport type OpenRouterEmbeddingModel<\n TModelId extends OpenRouterEmbeddingModelId = OpenRouterEmbeddingModelId,\n> = EmbeddingGenerationModel<OpenRouterEmbeddingProviderOptions, TModelId>;\nexport type OpenRouterImageModel<TModelId extends OpenRouterImageModelId = OpenRouterImageModelId> =\n ImageGenerationModel<OpenRouterImageProviderOptions, TModelId>;\n\nexport type OpenRouterProvider = {\n <TModelId extends OpenRouterModelId>(modelId: TModelId): OpenRouterModel<TModelId>;\n text<TModelId extends OpenRouterTextModelId>(modelId: TModelId): OpenRouterTextModel<TModelId>;\n embedding<TModelId extends OpenRouterEmbeddingModelId>(\n modelId: TModelId,\n ): OpenRouterEmbeddingModel<TModelId>;\n image<TModelId extends OpenRouterImageModelId>(\n modelId: TModelId,\n ): OpenRouterImageModel<TModelId>;\n};\n\nconst openRouterCapabilities = {\n identity: {\n provider: \"openrouter\",\n },\n transport: {\n streaming: true,\n },\n output: {\n supportedMimeTypes: [\"text/plain\", \"application/json\"],\n },\n} as const satisfies AgentCapabilities;\n\nconst createOpenAICompatibleOpenRouter = (options: CreateOpenRouterOptions = {}) => {\n return createAiSdkOpenAICompatible<\n OpenRouterModelId,\n OpenRouterCompletionModelId,\n OpenRouterEmbeddingModelId,\n OpenRouterImageModelId\n >({\n ...options,\n name: \"openrouter\",\n baseURL: options.baseURL ?? OPENROUTER_BASE_URL,\n });\n};\n\nconst createAgentModel = <TModelId extends OpenRouterModelId>(\n provider: AiSdkOpenRouterProvider,\n modelId: TModelId,\n): OpenRouterModel<TModelId> => {\n return aiSdkModel<AgentCapabilities, OpenRouterProviderOptions, TModelId>({\n model: provider(modelId),\n providerId: \"openrouter\",\n modelId,\n capabilities: openRouterCapabilities,\n });\n};\n\nconst createTextModel = <TModelId extends OpenRouterTextModelId>(\n provider: AiSdkOpenRouterProvider,\n modelId: TModelId,\n): OpenRouterTextModel<TModelId> => {\n return aiSdkTextModel<OpenRouterTextProviderOptions, TModelId>({\n model: provider(modelId),\n providerId: \"openrouter\",\n modelId,\n });\n};\n\nconst createEmbeddingModel = <TModelId extends OpenRouterEmbeddingModelId>(\n provider: AiSdkOpenRouterProvider,\n modelId: TModelId,\n): OpenRouterEmbeddingModel<TModelId> => {\n return aiSdkEmbeddingModel<OpenRouterEmbeddingProviderOptions, TModelId>({\n model: provider.embeddingModel(modelId),\n providerId: \"openrouter\",\n modelId,\n });\n};\n\nconst createImageModel = <TModelId extends OpenRouterImageModelId>(\n provider: AiSdkOpenRouterProvider,\n modelId: TModelId,\n): OpenRouterImageModel<TModelId> => {\n return aiSdkImageModel<OpenRouterImageProviderOptions, TModelId>({\n model: provider.imageModel(modelId),\n providerId: \"openrouter\",\n modelId,\n });\n};\n\nconst createProvider = (provider: AiSdkOpenRouterProvider): OpenRouterProvider => {\n const createOpenRouterModel: OpenRouterProvider = Object.assign(\n <TModelId extends OpenRouterModelId>(modelId: TModelId): OpenRouterModel<TModelId> => {\n return createAgentModel(provider, modelId);\n },\n {\n text<TModelId extends OpenRouterTextModelId>(\n modelId: TModelId,\n ): OpenRouterTextModel<TModelId> {\n return createTextModel(provider, modelId);\n },\n embedding<TModelId extends OpenRouterEmbeddingModelId>(\n modelId: TModelId,\n ): OpenRouterEmbeddingModel<TModelId> {\n return createEmbeddingModel(provider, modelId);\n },\n image<TModelId extends OpenRouterImageModelId>(\n modelId: TModelId,\n ): OpenRouterImageModel<TModelId> {\n return createImageModel(provider, modelId);\n },\n },\n );\n\n return createOpenRouterModel;\n};\n\nexport const createOpenRouter = (options: CreateOpenRouterOptions = {}): OpenRouterProvider => {\n return createProvider(createOpenAICompatibleOpenRouter(options));\n};\n"],"mappings":";;;;AAoBA,MAAM,sBAAsB;AAwD5B,MAAM,yBAAyB;CAC3B,UAAU,EACN,UAAU,cACb;CACD,WAAW,EACP,WAAW,MACd;CACD,QAAQ,EACJ,oBAAoB,CAAC,cAAc,mBAAmB,EACzD;CACJ;AAED,MAAM,oCAAoC,UAAmC,EAAE,KAAK;AAChF,QAAOA,uBAKL;EACE,GAAG;EACH,MAAM;EACN,SAAS,QAAQ,WAAW;EAC/B,CAAC;;AAGN,MAAM,oBACF,UACA,YAC4B;AAC5B,QAAO,WAAmE;EACtE,OAAO,SAAS,QAAQ;EACxB,YAAY;EACZ;EACA,cAAc;EACjB,CAAC;;AAGN,MAAM,mBACF,UACA,YACgC;AAChC,QAAO,eAAwD;EAC3D,OAAO,SAAS,QAAQ;EACxB,YAAY;EACZ;EACH,CAAC;;AAGN,MAAM,wBACF,UACA,YACqC;AACrC,QAAO,oBAAkE;EACrE,OAAO,SAAS,eAAe,QAAQ;EACvC,YAAY;EACZ;EACH,CAAC;;AAGN,MAAM,oBACF,UACA,YACiC;AACjC,QAAO,gBAA0D;EAC7D,OAAO,SAAS,WAAW,QAAQ;EACnC,YAAY;EACZ;EACH,CAAC;;AAGN,MAAM,kBAAkB,aAA0D;AAwB9E,QAvBkD,OAAO,QAChB,YAAiD;AAClF,SAAO,iBAAiB,UAAU,QAAQ;IAE9C;EACI,KACI,SAC6B;AAC7B,UAAO,gBAAgB,UAAU,QAAQ;;EAE7C,UACI,SACkC;AAClC,UAAO,qBAAqB,UAAU,QAAQ;;EAElD,MACI,SAC8B;AAC9B,UAAO,iBAAiB,UAAU,QAAQ;;EAEjD,CACJ;;AAKL,MAAa,oBAAoB,UAAmC,EAAE,KAAyB;AAC3F,QAAO,eAAe,iCAAiC,QAAQ,CAAC"}
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "@better-agent/openrouter",
3
+ "version": "0.2.0-beta.1",
4
+ "description": "Better Agent OpenRouter provider",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/better-agent/better-agent.git",
9
+ "directory": "packages/openrouter"
10
+ },
11
+ "homepage": "https://github.com/better-agent/better-agent/tree/main/packages/openrouter",
12
+ "bugs": {
13
+ "url": "https://github.com/better-agent/better-agent/issues"
14
+ },
15
+ "engines": {
16
+ "bun": ">=1.3.3",
17
+ "node": ">=20"
18
+ },
19
+ "type": "module",
20
+ "types": "./dist/index.d.mts",
21
+ "sideEffects": false,
22
+ "exports": {
23
+ ".": {
24
+ "types": "./dist/index.d.mts",
25
+ "import": "./dist/index.mjs"
26
+ }
27
+ },
28
+ "scripts": {
29
+ "build": "bunx tsdown",
30
+ "dev": "bunx tsdown --watch --no-clean",
31
+ "lint:package": "bunx publint run --strict",
32
+ "lint:types": "npm_config_cache=../../.npm-cache bunx attw --profile esm-only --pack .",
33
+ "lint": "bunx biome check .",
34
+ "typecheck": "bunx tsc -p tsconfig.json --noEmit",
35
+ "format": "bunx biome format --write .",
36
+ "clean": "bunx rimraf dist"
37
+ },
38
+ "files": ["dist"],
39
+ "publishConfig": {
40
+ "access": "public"
41
+ },
42
+ "dependencies": {
43
+ "@ai-sdk/openai-compatible": "^2.0.41",
44
+ "@better-agent/ai-sdk": "0.2.0-beta.1",
45
+ "ai": "^6.0.168"
46
+ },
47
+ "devDependencies": {
48
+ "@better-agent/core": "0.2.0-beta.1",
49
+ "@types/bun": "^1.3.12",
50
+ "@types/node": "^22.19.17"
51
+ },
52
+ "peerDependencies": {
53
+ "@better-agent/core": "0.2.0-beta.1"
54
+ }
55
+ }