@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 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
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -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
+ }