@simplellm/openclaw-provider 0.5.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 +29 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +171 -0
- package/dist/cli.js.map +1 -0
- package/dist/types.d.ts +12 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +32 -0
package/README.md
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# @simplellm/openclaw-provider
|
|
2
|
+
|
|
3
|
+
Set up [SimpleLLM](https://simplellm.eu) as an LLM provider for [OpenClaw](https://github.com/openclaw/openclaw) in one command.
|
|
4
|
+
|
|
5
|
+
## Quick Start
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npx @simplellm/openclaw-provider
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
This will:
|
|
12
|
+
1. Fetch available models from SimpleLLM
|
|
13
|
+
2. Ask for your API key (get one at [app.simplellm.eu](https://app.simplellm.eu))
|
|
14
|
+
3. Configure OpenClaw to use SimpleLLM as provider
|
|
15
|
+
|
|
16
|
+
## Environment Variables
|
|
17
|
+
|
|
18
|
+
| Variable | Description |
|
|
19
|
+
|---|---|
|
|
20
|
+
| `SIMPLELLM_BASE_URL` | Override API endpoint (default: `https://api.simplellm.eu`) |
|
|
21
|
+
| `SIMPLELLM_API_KEY` | API key (also written to `~/.openclaw/.env`) |
|
|
22
|
+
|
|
23
|
+
## What is SimpleLLM?
|
|
24
|
+
|
|
25
|
+
EU-hosted LLM inference. GDPR-compliant, no data leaves Europe. Self-hosted models, no third-party API proxying.
|
|
26
|
+
|
|
27
|
+
## License
|
|
28
|
+
|
|
29
|
+
MIT
|
package/dist/cli.d.ts
ADDED
package/dist/cli.js
ADDED
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createInterface } from 'node:readline';
|
|
3
|
+
import { readFile, writeFile, mkdir } from 'node:fs/promises';
|
|
4
|
+
import { homedir } from 'node:os';
|
|
5
|
+
import { join, dirname } from 'node:path';
|
|
6
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
7
|
+
const ask = (q) => new Promise((resolve) => rl.question(q, resolve));
|
|
8
|
+
const DEFAULT_BASE_URL = 'https://api.simplellm.eu';
|
|
9
|
+
// Cross-platform: respect OPENCLAW_STATE_DIR, fallback to ~/.openclaw
|
|
10
|
+
const OPENCLAW_DIR = process.env.OPENCLAW_STATE_DIR ?? join(homedir(), '.openclaw');
|
|
11
|
+
const OPENCLAW_CONFIG = join(OPENCLAW_DIR, 'openclaw.json');
|
|
12
|
+
const OPENCLAW_ENV = join(OPENCLAW_DIR, '.env');
|
|
13
|
+
async function readJSON(path) {
|
|
14
|
+
try {
|
|
15
|
+
return JSON.parse(await readFile(path, 'utf-8'));
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return {};
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
async function writeJSON(path, data) {
|
|
22
|
+
await mkdir(dirname(path), { recursive: true });
|
|
23
|
+
await writeFile(path, JSON.stringify(data, null, 2) + '\n');
|
|
24
|
+
}
|
|
25
|
+
async function main() {
|
|
26
|
+
const baseURL = process.env.SIMPLELLM_BASE_URL ?? DEFAULT_BASE_URL;
|
|
27
|
+
const apiURL = `${baseURL}/v1`;
|
|
28
|
+
console.log();
|
|
29
|
+
console.log(' SimpleLLM + OpenClaw Setup');
|
|
30
|
+
console.log(' ─────────────────────────');
|
|
31
|
+
console.log();
|
|
32
|
+
console.log(` Endpoint: ${baseURL}`);
|
|
33
|
+
console.log();
|
|
34
|
+
// Fetch models
|
|
35
|
+
console.log(' Fetching models...');
|
|
36
|
+
let models;
|
|
37
|
+
try {
|
|
38
|
+
const res = await fetch(`${baseURL}/api/models`);
|
|
39
|
+
if (!res.ok)
|
|
40
|
+
throw new Error(`HTTP ${res.status}`);
|
|
41
|
+
models = await res.json();
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
console.error(` Could not reach ${baseURL}`);
|
|
45
|
+
console.error(' Check your connection or set SIMPLELLM_BASE_URL.');
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
const enabled = models.filter((m) => m.enabled);
|
|
49
|
+
const available = enabled.filter((m) => m.tier !== 'premium');
|
|
50
|
+
const premium = enabled.filter((m) => m.tier === 'premium');
|
|
51
|
+
console.log(` ${available.length} model${available.length !== 1 ? 's' : ''} available:`);
|
|
52
|
+
for (const m of available) {
|
|
53
|
+
const label = m.display_name ?? m.id;
|
|
54
|
+
const tag = m.is_free ? ' (free)' : ` (SC ${m.price_sc_input}/${m.price_sc_output})`;
|
|
55
|
+
console.log(` - ${label}${tag}`);
|
|
56
|
+
}
|
|
57
|
+
if (premium.length > 0) {
|
|
58
|
+
console.log(` ${premium.length} coming soon:`);
|
|
59
|
+
for (const m of premium) {
|
|
60
|
+
console.log(` - ${m.display_name ?? m.id}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
console.log();
|
|
64
|
+
// API Key
|
|
65
|
+
const apiKey = (await ask(' API Key: ')).trim();
|
|
66
|
+
if (!apiKey) {
|
|
67
|
+
console.error(' API key is required.');
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
70
|
+
// Validate
|
|
71
|
+
try {
|
|
72
|
+
const res = await fetch(`${apiURL}/usage`, {
|
|
73
|
+
headers: { Authorization: `Bearer ${apiKey}` },
|
|
74
|
+
});
|
|
75
|
+
if (!res.ok)
|
|
76
|
+
throw new Error(`HTTP ${res.status}`);
|
|
77
|
+
const data = await res.json();
|
|
78
|
+
if (data.balance != null) {
|
|
79
|
+
console.log(` Balance: ${data.balance.toLocaleString()} SC`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
console.error(' Warning: Could not validate key. Saving anyway.');
|
|
84
|
+
}
|
|
85
|
+
console.log();
|
|
86
|
+
// Build OpenClaw model list
|
|
87
|
+
const clawModels = available.map((m) => {
|
|
88
|
+
const ctx = m.context_length ?? 32768;
|
|
89
|
+
return {
|
|
90
|
+
id: m.id,
|
|
91
|
+
name: m.display_name ?? m.id,
|
|
92
|
+
reasoning: false,
|
|
93
|
+
input: ['text'],
|
|
94
|
+
cost: {
|
|
95
|
+
input: m.price_sc_input / 1_000_000,
|
|
96
|
+
output: m.price_sc_output / 1_000_000,
|
|
97
|
+
cacheRead: 0,
|
|
98
|
+
cacheWrite: 0,
|
|
99
|
+
},
|
|
100
|
+
contextWindow: ctx,
|
|
101
|
+
maxTokens: Math.floor(ctx / 2),
|
|
102
|
+
};
|
|
103
|
+
});
|
|
104
|
+
const defaultModelId = available.find((m) => m.id === 'Qwen3-Coder-30B-A3B-Instruct')?.id
|
|
105
|
+
?? available[0]?.id
|
|
106
|
+
?? 'Qwen3-Coder-30B-A3B-Instruct';
|
|
107
|
+
// Write openclaw config
|
|
108
|
+
const existingConfig = await readJSON(OPENCLAW_CONFIG);
|
|
109
|
+
const existingModels = existingConfig.agents?.defaults?.models ?? {};
|
|
110
|
+
const simplellmModels = {};
|
|
111
|
+
for (const m of available) {
|
|
112
|
+
simplellmModels[`simplellm/${m.id}`] = { alias: m.display_name ?? m.id };
|
|
113
|
+
}
|
|
114
|
+
const newConfig = {
|
|
115
|
+
...existingConfig,
|
|
116
|
+
agents: {
|
|
117
|
+
...(existingConfig.agents ?? {}),
|
|
118
|
+
defaults: {
|
|
119
|
+
...(existingConfig.agents?.defaults ?? {}),
|
|
120
|
+
model: {
|
|
121
|
+
primary: `simplellm/${defaultModelId}`,
|
|
122
|
+
},
|
|
123
|
+
models: {
|
|
124
|
+
...existingModels,
|
|
125
|
+
...simplellmModels,
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
models: {
|
|
130
|
+
mode: 'merge',
|
|
131
|
+
providers: {
|
|
132
|
+
...(existingConfig.models?.providers ?? {}),
|
|
133
|
+
simplellm: {
|
|
134
|
+
baseUrl: apiURL,
|
|
135
|
+
apiKey: '${SIMPLELLM_API_KEY}',
|
|
136
|
+
api: 'openai-completions',
|
|
137
|
+
models: clawModels,
|
|
138
|
+
},
|
|
139
|
+
},
|
|
140
|
+
},
|
|
141
|
+
};
|
|
142
|
+
await writeJSON(OPENCLAW_CONFIG, newConfig);
|
|
143
|
+
console.log(` Config: ${OPENCLAW_CONFIG}`);
|
|
144
|
+
// Write API key to .env
|
|
145
|
+
let envContent = '';
|
|
146
|
+
try {
|
|
147
|
+
envContent = await readFile(OPENCLAW_ENV, 'utf-8');
|
|
148
|
+
}
|
|
149
|
+
catch { }
|
|
150
|
+
const keyLine = `SIMPLELLM_API_KEY=${apiKey}`;
|
|
151
|
+
if (envContent.includes('SIMPLELLM_API_KEY=')) {
|
|
152
|
+
envContent = envContent.replace(/SIMPLELLM_API_KEY=.*/g, keyLine);
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
envContent = envContent.trim() + (envContent.trim() ? '\n' : '') + keyLine + '\n';
|
|
156
|
+
}
|
|
157
|
+
await mkdir(dirname(OPENCLAW_ENV), { recursive: true });
|
|
158
|
+
await writeFile(OPENCLAW_ENV, envContent);
|
|
159
|
+
console.log(` Env: ${OPENCLAW_ENV}`);
|
|
160
|
+
console.log();
|
|
161
|
+
console.log(' Done! Start OpenClaw:');
|
|
162
|
+
console.log();
|
|
163
|
+
console.log(' openclaw');
|
|
164
|
+
console.log();
|
|
165
|
+
rl.close();
|
|
166
|
+
}
|
|
167
|
+
main().catch((err) => {
|
|
168
|
+
console.error(err);
|
|
169
|
+
process.exit(1);
|
|
170
|
+
});
|
|
171
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Model info as returned by SimpleLLM's /api/models endpoint */
|
|
2
|
+
export interface SimpleLLMModelInfo {
|
|
3
|
+
id: string;
|
|
4
|
+
display_name: string | null;
|
|
5
|
+
description: string | null;
|
|
6
|
+
context_length: number | null;
|
|
7
|
+
price_sc_input: number;
|
|
8
|
+
price_sc_output: number;
|
|
9
|
+
tier: 'free' | 'standard' | 'premium';
|
|
10
|
+
is_free: boolean;
|
|
11
|
+
enabled: boolean;
|
|
12
|
+
}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@simplellm/openclaw-provider",
|
|
3
|
+
"version": "0.5.0",
|
|
4
|
+
"description": "SimpleLLM provider setup for OpenClaw — one command, EU-hosted LLM inference",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"simplellm-openclaw": "dist/cli.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"dist/"
|
|
11
|
+
],
|
|
12
|
+
"keywords": [
|
|
13
|
+
"openclaw",
|
|
14
|
+
"simplellm",
|
|
15
|
+
"llm",
|
|
16
|
+
"eu-hosted",
|
|
17
|
+
"dsgvo",
|
|
18
|
+
"gdpr",
|
|
19
|
+
"ai"
|
|
20
|
+
],
|
|
21
|
+
"author": "Stage One Solutions UG <info@simplellm.eu>",
|
|
22
|
+
"homepage": "https://simplellm.eu",
|
|
23
|
+
"license": "MIT",
|
|
24
|
+
"scripts": {
|
|
25
|
+
"build": "tsc",
|
|
26
|
+
"prepublishOnly": "npm run build"
|
|
27
|
+
},
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"@types/node": "^22.0.0",
|
|
30
|
+
"typescript": "^5.9.3"
|
|
31
|
+
}
|
|
32
|
+
}
|