@agentdock-ai/models 0.1.0
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/README.md +25 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +87 -0
- package/dist/index.js.map +1 -0
- package/package.json +45 -0
package/README.md
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# @agentdock-ai/models
|
|
2
|
+
|
|
3
|
+
Optional provider configuration resolver for [AgentDock](https://www.npmjs.com/package/@agentdock-ai/agentdock). It creates a standard LangChain `BaseChatModel`, so AgentDock stays provider-neutral.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
yarn add @agentdock-ai/agentdock @agentdock-ai/models
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
import { AgentDock } from "@agentdock-ai/agentdock";
|
|
15
|
+
import { AgentDockModel } from "@agentdock-ai/models";
|
|
16
|
+
|
|
17
|
+
const model = AgentDockModel.openAI({
|
|
18
|
+
model: "gpt-5.4-mini",
|
|
19
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
const dock = new AgentDock({ model });
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Supported providers are `openai`, `ollama`, and `openrouter`. An omitted API key leaves the provider's normal environment-variable configuration in effect.
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { BaseChatModel } from "@langchain/core/language_models/chat_models";
|
|
2
|
+
interface AgentDockModelSettings {
|
|
3
|
+
readonly model: string;
|
|
4
|
+
readonly temperature?: number;
|
|
5
|
+
}
|
|
6
|
+
export interface OpenAIModelConfig extends AgentDockModelSettings {
|
|
7
|
+
readonly apiKey?: string;
|
|
8
|
+
readonly baseUrl?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface OllamaModelConfig extends AgentDockModelSettings {
|
|
11
|
+
readonly baseUrl?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface OpenRouterModelConfig extends AgentDockModelSettings {
|
|
14
|
+
readonly apiKey?: string;
|
|
15
|
+
readonly baseUrl?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Creates LangChain chat models for the providers supported by AgentDock.
|
|
19
|
+
* Provider environment variables remain available when an API key is omitted.
|
|
20
|
+
*/
|
|
21
|
+
export declare class AgentDockModel {
|
|
22
|
+
private constructor();
|
|
23
|
+
static openRouter(config: OpenRouterModelConfig): BaseChatModel;
|
|
24
|
+
static openAI(config: OpenAIModelConfig): BaseChatModel;
|
|
25
|
+
static ollama(config: OllamaModelConfig): BaseChatModel;
|
|
26
|
+
}
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAKjF,UAAU,sBAAsB;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAkB,SAAQ,sBAAsB;IAC/D,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAkB,SAAQ,sBAAsB;IAC/D,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAsB,SAAQ,sBAAsB;IACnE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,eAAiB;IAExB,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,qBAAqB,GAAG,aAAa,CAW9D;IAED,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,aAAa,CAWtD;IAED,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,aAAa,CAStD;CACF"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { ChatOllama } from "@langchain/ollama";
|
|
2
|
+
import { ChatOpenAI } from "@langchain/openai";
|
|
3
|
+
import { ChatOpenRouter } from "@langchain/openrouter";
|
|
4
|
+
/**
|
|
5
|
+
* Creates LangChain chat models for the providers supported by AgentDock.
|
|
6
|
+
* Provider environment variables remain available when an API key is omitted.
|
|
7
|
+
*/
|
|
8
|
+
export class AgentDockModel {
|
|
9
|
+
constructor() { }
|
|
10
|
+
static openRouter(config) {
|
|
11
|
+
validateModelConfig(config);
|
|
12
|
+
assertOptionalNonEmptyString(config.apiKey, "apiKey");
|
|
13
|
+
assertOptionalUrl(config.baseUrl, "baseUrl");
|
|
14
|
+
return new ChatOpenRouter({
|
|
15
|
+
model: config.model,
|
|
16
|
+
temperature: config.temperature,
|
|
17
|
+
apiKey: config.apiKey,
|
|
18
|
+
baseURL: config.baseUrl,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
static openAI(config) {
|
|
22
|
+
validateModelConfig(config);
|
|
23
|
+
assertOptionalNonEmptyString(config.apiKey, "apiKey");
|
|
24
|
+
assertOptionalUrl(config.baseUrl, "baseUrl");
|
|
25
|
+
return new ChatOpenAI({
|
|
26
|
+
model: config.model,
|
|
27
|
+
temperature: config.temperature,
|
|
28
|
+
apiKey: config.apiKey,
|
|
29
|
+
configuration: config.baseUrl ? { baseURL: config.baseUrl } : undefined,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
static ollama(config) {
|
|
33
|
+
validateModelConfig(config);
|
|
34
|
+
assertOptionalUrl(config.baseUrl, "baseUrl");
|
|
35
|
+
return new ChatOllama({
|
|
36
|
+
model: config.model,
|
|
37
|
+
temperature: config.temperature,
|
|
38
|
+
baseUrl: config.baseUrl,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function validateModelConfig(config) {
|
|
43
|
+
if (!isRecord(config)) {
|
|
44
|
+
throw new Error("AgentDock model configuration must be an object.");
|
|
45
|
+
}
|
|
46
|
+
assertNonEmptyString(config.model, "model");
|
|
47
|
+
assertOptionalTemperature(config.temperature);
|
|
48
|
+
}
|
|
49
|
+
function assertNonEmptyString(value, name) {
|
|
50
|
+
if (typeof value !== "string" || value.trim().length === 0) {
|
|
51
|
+
throw new Error(`AgentDock model ${name} must be a non-empty string.`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function assertOptionalNonEmptyString(value, name) {
|
|
55
|
+
if (value !== undefined) {
|
|
56
|
+
assertNonEmptyString(value, name);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function assertOptionalTemperature(value) {
|
|
60
|
+
if (value === undefined)
|
|
61
|
+
return;
|
|
62
|
+
if (typeof value !== "number" ||
|
|
63
|
+
!Number.isFinite(value) ||
|
|
64
|
+
value < 0 ||
|
|
65
|
+
value > 2) {
|
|
66
|
+
throw new Error("AgentDock model temperature must be a number from 0 to 2.");
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
function assertOptionalUrl(value, name) {
|
|
70
|
+
if (value === undefined)
|
|
71
|
+
return;
|
|
72
|
+
assertNonEmptyString(value, name);
|
|
73
|
+
let url;
|
|
74
|
+
try {
|
|
75
|
+
url = new URL(value);
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
throw new Error(`AgentDock model ${name} must be a valid HTTP(S) URL.`);
|
|
79
|
+
}
|
|
80
|
+
if (url.protocol !== "http:" && url.protocol !== "https:") {
|
|
81
|
+
throw new Error(`AgentDock model ${name} must be a valid HTTP(S) URL.`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
function isRecord(value) {
|
|
85
|
+
return typeof value === "object" && value !== null;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@agentdock-ai/models",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Optional LangChain model resolver for AgentDock",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/agentdock-ai/agentdock.git",
|
|
9
|
+
"directory": "packages/models"
|
|
10
|
+
},
|
|
11
|
+
"main": "./dist/index.js",
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"exports": {
|
|
14
|
+
".": {
|
|
15
|
+
"types": "./dist/index.d.ts",
|
|
16
|
+
"import": "./dist/index.js"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"files": [
|
|
20
|
+
"dist",
|
|
21
|
+
"README.md"
|
|
22
|
+
],
|
|
23
|
+
"sideEffects": false,
|
|
24
|
+
"scripts": {
|
|
25
|
+
"build": "tsc -p tsconfig.json",
|
|
26
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
27
|
+
"test": "vitest run test",
|
|
28
|
+
"prepack": "yarn build"
|
|
29
|
+
},
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"@langchain/core": "^1.2.9",
|
|
32
|
+
"@langchain/ollama": "^1.3.0",
|
|
33
|
+
"@langchain/openai": "^1.5.10",
|
|
34
|
+
"@langchain/openrouter": "^0.4.10"
|
|
35
|
+
},
|
|
36
|
+
"devDependencies": {
|
|
37
|
+
"@types/node": "^26.1.2",
|
|
38
|
+
"typescript": "^7.0.2",
|
|
39
|
+
"vitest": "^4.1.11"
|
|
40
|
+
},
|
|
41
|
+
"engines": {
|
|
42
|
+
"node": ">=22"
|
|
43
|
+
},
|
|
44
|
+
"license": "MIT"
|
|
45
|
+
}
|