duskware 0.1.0 → 0.2.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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inference.d.ts","sourceRoot":"","sources":["../../src/commands/inference.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"inference.d.ts","sourceRoot":"","sources":["../../src/commands/inference.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqCpC,eAAO,MAAM,gBAAgB,SACsB,CAAC"}
|
|
@@ -1,25 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* duskware inference
|
|
3
|
-
* AI inference via
|
|
3
|
+
* AI inference via Duskware Credits (unified balance)
|
|
4
4
|
*/
|
|
5
5
|
import { Command } from 'commander';
|
|
6
6
|
import ora from 'ora';
|
|
7
|
-
import { wrapFetchWithPayment, createSigner } from 'x402-fetch';
|
|
8
7
|
import * as output from '../utils/output.js';
|
|
9
8
|
import { loadConfig, loadWallet } from '../utils/config.js';
|
|
10
9
|
// Inference proxy URL
|
|
11
10
|
const INFERENCE_URL = process.env.INFERENCE_URL || 'https://duskware-inference.fly.dev';
|
|
12
|
-
//
|
|
13
|
-
const
|
|
14
|
-
// Max payment amount (0.50 USDC in base units - 6 decimals)
|
|
15
|
-
const MAX_PAYMENT = BigInt(500000);
|
|
11
|
+
// Credits API URL
|
|
12
|
+
const CREDITS_API_URL = process.env.CREDITS_API_URL || 'https://duskware-credits-api.fly.dev';
|
|
16
13
|
export const inferenceCommand = new Command('inference')
|
|
17
|
-
.description('AI inference via
|
|
14
|
+
.description('AI inference via Duskware Credits');
|
|
18
15
|
// Send inference request
|
|
19
16
|
inferenceCommand
|
|
20
17
|
.command('prompt <text>')
|
|
21
|
-
.description('Send a prompt
|
|
22
|
-
.option('-m, --model <model>', 'Model to use', 'claude-
|
|
18
|
+
.description('Send a prompt using Duskware Credits')
|
|
19
|
+
.option('-m, --model <model>', 'Model to use', 'claude-4.5-sonnet')
|
|
23
20
|
.option('--max-tokens <n>', 'Maximum tokens', '1000')
|
|
24
21
|
.option('--system <text>', 'System prompt')
|
|
25
22
|
.action(async (text, options) => {
|
|
@@ -33,30 +30,40 @@ inferenceCommand
|
|
|
33
30
|
output.keyValue('Model', options.model);
|
|
34
31
|
output.keyValue('Max Tokens', options.maxTokens);
|
|
35
32
|
output.keyValue('Agent', config.agentAddress);
|
|
36
|
-
const spinner = ora('
|
|
33
|
+
const spinner = ora('Checking credits balance...').start();
|
|
37
34
|
try {
|
|
38
|
-
//
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
35
|
+
// Check balance first
|
|
36
|
+
const balanceRes = await fetch(`${CREDITS_API_URL}/balance/${config.agentAddress}`);
|
|
37
|
+
const balanceData = await balanceRes.json();
|
|
38
|
+
spinner.text = `Balance: ${balanceData.balance || '$0.00'} - Sending inference request...`;
|
|
42
39
|
// Build messages array
|
|
43
40
|
const messages = [];
|
|
44
41
|
if (options.system) {
|
|
45
42
|
messages.push({ role: 'system', content: options.system });
|
|
46
43
|
}
|
|
47
44
|
messages.push({ role: 'user', content: text });
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
const response = await x402Fetch(`${INFERENCE_URL}/inference/${options.model}`, {
|
|
45
|
+
// Make request with address for prepaid credits
|
|
46
|
+
const response = await fetch(`${INFERENCE_URL}/inference/${options.model}`, {
|
|
51
47
|
method: 'POST',
|
|
52
48
|
headers: { 'Content-Type': 'application/json' },
|
|
53
49
|
body: JSON.stringify({
|
|
54
50
|
messages,
|
|
55
51
|
maxTokens: parseInt(options.maxTokens),
|
|
52
|
+
address: config.agentAddress,
|
|
56
53
|
}),
|
|
57
54
|
});
|
|
58
55
|
if (!response.ok) {
|
|
59
56
|
const errorData = await response.json().catch(() => ({}));
|
|
57
|
+
if (response.status === 402) {
|
|
58
|
+
spinner.fail('Payment required');
|
|
59
|
+
output.error('Insufficient credits balance');
|
|
60
|
+
output.keyValue('Required', errorData.price || 'Unknown');
|
|
61
|
+
output.keyValue('Current Balance', errorData.currentBalance || '$0.00');
|
|
62
|
+
console.log();
|
|
63
|
+
output.info('Top up your credits:');
|
|
64
|
+
output.info(' duskware credits deposit <amount>');
|
|
65
|
+
process.exit(1);
|
|
66
|
+
}
|
|
60
67
|
throw new Error(errorData.error || `Request failed: ${response.status}`);
|
|
61
68
|
}
|
|
62
69
|
const result = await response.json();
|
|
@@ -68,8 +75,12 @@ inferenceCommand
|
|
|
68
75
|
output.keyValue('Model', result.model);
|
|
69
76
|
output.keyValue('Tokens', `${result.usage.totalTokens} (${result.usage.promptTokens} prompt + ${result.usage.completionTokens} completion)`);
|
|
70
77
|
if (result.payment) {
|
|
71
|
-
output.keyValue('
|
|
72
|
-
output.keyValue('
|
|
78
|
+
output.keyValue('Cost', result.payment.amount);
|
|
79
|
+
output.keyValue('Payment Method', result.payment.method);
|
|
80
|
+
}
|
|
81
|
+
// Show remaining balance
|
|
82
|
+
if (result.balance) {
|
|
83
|
+
output.keyValue('Remaining Balance', result.balance);
|
|
73
84
|
}
|
|
74
85
|
}
|
|
75
86
|
catch (err) {
|
|
@@ -78,11 +89,10 @@ inferenceCommand
|
|
|
78
89
|
if (err.message.includes('fetch') || err.message.includes('ECONNREFUSED')) {
|
|
79
90
|
output.warning('Inference proxy not available.');
|
|
80
91
|
output.info(`Make sure the proxy is running at ${INFERENCE_URL}`);
|
|
81
|
-
output.info('Run: cd inference-proxy && npm run dev');
|
|
82
92
|
}
|
|
83
93
|
else if (err.message.includes('insufficient') || err.message.includes('balance')) {
|
|
84
|
-
output.error('Insufficient
|
|
85
|
-
output.info('
|
|
94
|
+
output.error('Insufficient credits balance.');
|
|
95
|
+
output.info('Top up with: duskware credits deposit <amount>');
|
|
86
96
|
}
|
|
87
97
|
else {
|
|
88
98
|
output.error(err.message);
|
|
@@ -107,19 +117,19 @@ inferenceCommand
|
|
|
107
117
|
spinner.stop();
|
|
108
118
|
output.printTable(['Model ID', 'Name', 'Provider', 'Price'], models.map(m => [m.id, m.name, m.provider, m.pricePerRequest]));
|
|
109
119
|
console.log();
|
|
110
|
-
output.info(
|
|
111
|
-
output.info('
|
|
120
|
+
output.info('Payment: Automatic via Duskware Credits');
|
|
121
|
+
output.info('Top up: duskware credits deposit <amount>');
|
|
112
122
|
}
|
|
113
123
|
catch {
|
|
114
124
|
spinner.stop();
|
|
115
125
|
output.warning('Inference proxy not available. Showing default models:');
|
|
116
126
|
console.log();
|
|
117
127
|
const defaultModels = [
|
|
118
|
-
{ id: 'claude-
|
|
119
|
-
{ id: 'claude-
|
|
120
|
-
{ id: 'claude-
|
|
121
|
-
{ id: 'gpt-
|
|
122
|
-
{ id: 'gpt-
|
|
128
|
+
{ id: 'claude-4.5-haiku', name: 'Claude 4.5 Haiku', provider: 'anthropic', price: '$0.01' },
|
|
129
|
+
{ id: 'claude-4.5-sonnet', name: 'Claude 4.5 Sonnet', provider: 'anthropic', price: '$0.05' },
|
|
130
|
+
{ id: 'claude-4.5-opus', name: 'Claude 4.5 Opus', provider: 'anthropic', price: '$0.25' },
|
|
131
|
+
{ id: 'gpt-5.2', name: 'GPT-5.2', provider: 'openai', price: '$0.10' },
|
|
132
|
+
{ id: 'gpt-5-mini', name: 'GPT-5 Mini', provider: 'openai', price: '$0.03' },
|
|
123
133
|
];
|
|
124
134
|
output.printTable(['Model ID', 'Name', 'Provider', 'Price'], defaultModels.map(m => [m.id, m.name, m.provider, m.price]));
|
|
125
135
|
}
|
|
@@ -135,8 +145,8 @@ inferenceCommand
|
|
|
135
145
|
const data = await response.json();
|
|
136
146
|
output.keyValue('Status', data.status === 'ok' ? '✓ Healthy' : '✗ Unhealthy');
|
|
137
147
|
output.keyValue('Version', data.version);
|
|
138
|
-
output.keyValue('Facilitator', data.facilitator);
|
|
139
148
|
output.keyValue('Network', data.network);
|
|
149
|
+
output.keyValue('Min Deposit', data.minDeposit || '$5.00');
|
|
140
150
|
output.keyValue('Timestamp', data.timestamp);
|
|
141
151
|
}
|
|
142
152
|
catch {
|
|
@@ -145,4 +155,33 @@ inferenceCommand
|
|
|
145
155
|
process.exit(1);
|
|
146
156
|
}
|
|
147
157
|
});
|
|
158
|
+
// Check credits balance
|
|
159
|
+
inferenceCommand
|
|
160
|
+
.command('balance')
|
|
161
|
+
.description('Check your Duskware Credits balance')
|
|
162
|
+
.action(async () => {
|
|
163
|
+
const config = loadConfig();
|
|
164
|
+
if (!config) {
|
|
165
|
+
output.error('Agent not initialized. Run `duskware init` first.');
|
|
166
|
+
process.exit(1);
|
|
167
|
+
}
|
|
168
|
+
output.header('Duskware Credits');
|
|
169
|
+
const spinner = ora('Fetching balance...').start();
|
|
170
|
+
try {
|
|
171
|
+
const response = await fetch(`${CREDITS_API_URL}/balance/${config.agentAddress}`);
|
|
172
|
+
const data = await response.json();
|
|
173
|
+
spinner.stop();
|
|
174
|
+
output.keyValue('Address', data.address);
|
|
175
|
+
output.keyValue('Balance', data.balance || '$0.00');
|
|
176
|
+
output.keyValue('Total Deposited', data.totalDeposited || '$0.00');
|
|
177
|
+
output.keyValue('Total Spent', data.totalSpent || '$0.00');
|
|
178
|
+
console.log();
|
|
179
|
+
output.info('Top up: duskware credits deposit <amount>');
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
spinner.fail('Failed to fetch balance');
|
|
183
|
+
output.error('Credits API not reachable');
|
|
184
|
+
process.exit(1);
|
|
185
|
+
}
|
|
186
|
+
});
|
|
148
187
|
//# sourceMappingURL=inference.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inference.js","sourceRoot":"","sources":["../../src/commands/inference.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,
|
|
1
|
+
{"version":3,"file":"inference.js","sourceRoot":"","sources":["../../src/commands/inference.ts"],"names":[],"mappings":"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"}
|