ai-speedometer 2.1.1 → 2.1.4
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/dist/ai-speedometer +20 -24
- package/package.json +7 -11
- package/README.md +0 -127
- package/ai-benchmark-config.json.template +0 -21
- package/docs/README.md +0 -191
- package/docs/custom-verified-providers.md +0 -463
- package/docs/models-dev-integration.md +0 -488
- package/docs/publish-and-build.md +0 -68
- package/docs/token-counting-fallback.md +0 -345
- package/scripts/shebang +0 -6
package/dist/ai-speedometer
CHANGED
|
@@ -17,7 +17,7 @@ var __export = (target, all) => {
|
|
|
17
17
|
};
|
|
18
18
|
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
19
19
|
|
|
20
|
-
// custom-verified-providers.json
|
|
20
|
+
// ../core/custom-verified-providers.json
|
|
21
21
|
var custom_verified_providers_default;
|
|
22
22
|
var init_custom_verified_providers = __esm(() => {
|
|
23
23
|
custom_verified_providers_default = {
|
|
@@ -142,7 +142,7 @@ var init_custom_verified_providers = __esm(() => {
|
|
|
142
142
|
};
|
|
143
143
|
});
|
|
144
144
|
|
|
145
|
-
// src/models-dev.ts
|
|
145
|
+
// ../core/src/models-dev.ts
|
|
146
146
|
var exports_models_dev = {};
|
|
147
147
|
__export(exports_models_dev, {
|
|
148
148
|
transformModelsDevData: () => transformModelsDevData,
|
|
@@ -387,7 +387,7 @@ var init_models_dev = __esm(() => {
|
|
|
387
387
|
];
|
|
388
388
|
});
|
|
389
389
|
|
|
390
|
-
// src/ai-config.ts
|
|
390
|
+
// ../core/src/ai-config.ts
|
|
391
391
|
var exports_ai_config = {};
|
|
392
392
|
__export(exports_ai_config, {
|
|
393
393
|
writeAIConfig: () => writeAIConfig,
|
|
@@ -558,7 +558,7 @@ var getAIConfigPaths = () => {
|
|
|
558
558
|
};
|
|
559
559
|
var init_ai_config = () => {};
|
|
560
560
|
|
|
561
|
-
// node_modules/jsonc-parser/lib/esm/impl/scanner.js
|
|
561
|
+
// ../../node_modules/.bun/jsonc-parser@3.3.1/node_modules/jsonc-parser/lib/esm/impl/scanner.js
|
|
562
562
|
function createScanner(text, ignoreTrivia = false) {
|
|
563
563
|
const len = text.length;
|
|
564
564
|
let pos = 0, value = "", tokenOffset = 0, token = 16, lineNumber = 0, lineStartOffset = 0, tokenLineStartOffset = 0, prevTokenLineStartOffset = 0, scanError = 0;
|
|
@@ -975,7 +975,7 @@ var init_scanner = __esm(() => {
|
|
|
975
975
|
})(CharacterCodes || (CharacterCodes = {}));
|
|
976
976
|
});
|
|
977
977
|
|
|
978
|
-
// node_modules/jsonc-parser/lib/esm/impl/string-intern.js
|
|
978
|
+
// ../../node_modules/.bun/jsonc-parser@3.3.1/node_modules/jsonc-parser/lib/esm/impl/string-intern.js
|
|
979
979
|
var cachedSpaces, maxCachedValues = 200, cachedBreakLinesWithSpaces;
|
|
980
980
|
var init_string_intern = __esm(() => {
|
|
981
981
|
cachedSpaces = new Array(20).fill(0).map((_, index) => {
|
|
@@ -1011,13 +1011,13 @@ var init_string_intern = __esm(() => {
|
|
|
1011
1011
|
};
|
|
1012
1012
|
});
|
|
1013
1013
|
|
|
1014
|
-
// node_modules/jsonc-parser/lib/esm/impl/format.js
|
|
1014
|
+
// ../../node_modules/.bun/jsonc-parser@3.3.1/node_modules/jsonc-parser/lib/esm/impl/format.js
|
|
1015
1015
|
var init_format = __esm(() => {
|
|
1016
1016
|
init_scanner();
|
|
1017
1017
|
init_string_intern();
|
|
1018
1018
|
});
|
|
1019
1019
|
|
|
1020
|
-
// node_modules/jsonc-parser/lib/esm/impl/parser.js
|
|
1020
|
+
// ../../node_modules/.bun/jsonc-parser@3.3.1/node_modules/jsonc-parser/lib/esm/impl/parser.js
|
|
1021
1021
|
function parse(text, errors = [], options = ParseOptions.DEFAULT) {
|
|
1022
1022
|
let currentProperty = null;
|
|
1023
1023
|
let currentParent = [];
|
|
@@ -1323,13 +1323,13 @@ var init_parser = __esm(() => {
|
|
|
1323
1323
|
})(ParseOptions || (ParseOptions = {}));
|
|
1324
1324
|
});
|
|
1325
1325
|
|
|
1326
|
-
// node_modules/jsonc-parser/lib/esm/impl/edit.js
|
|
1326
|
+
// ../../node_modules/.bun/jsonc-parser@3.3.1/node_modules/jsonc-parser/lib/esm/impl/edit.js
|
|
1327
1327
|
var init_edit = __esm(() => {
|
|
1328
1328
|
init_format();
|
|
1329
1329
|
init_parser();
|
|
1330
1330
|
});
|
|
1331
1331
|
|
|
1332
|
-
// node_modules/jsonc-parser/lib/esm/main.js
|
|
1332
|
+
// ../../node_modules/.bun/jsonc-parser@3.3.1/node_modules/jsonc-parser/lib/esm/main.js
|
|
1333
1333
|
var ScanError, SyntaxKind, parse2, ParseErrorCode;
|
|
1334
1334
|
var init_main = __esm(() => {
|
|
1335
1335
|
init_format();
|
|
@@ -1385,7 +1385,7 @@ var init_main = __esm(() => {
|
|
|
1385
1385
|
})(ParseErrorCode || (ParseErrorCode = {}));
|
|
1386
1386
|
});
|
|
1387
1387
|
|
|
1388
|
-
// src/opencode-integration.ts
|
|
1388
|
+
// ../core/src/opencode-integration.ts
|
|
1389
1389
|
var exports_opencode_integration = {};
|
|
1390
1390
|
__export(exports_opencode_integration, {
|
|
1391
1391
|
writeOpencodeConfig: () => writeOpencodeConfig,
|
|
@@ -1704,10 +1704,10 @@ var init_opencode_integration = __esm(() => {
|
|
|
1704
1704
|
init_main();
|
|
1705
1705
|
});
|
|
1706
1706
|
|
|
1707
|
-
// src/constants.ts
|
|
1707
|
+
// ../core/src/constants.ts
|
|
1708
1708
|
var TEST_PROMPT = `make a 300 word story`;
|
|
1709
1709
|
|
|
1710
|
-
// src/benchmark.ts
|
|
1710
|
+
// ../core/src/benchmark.ts
|
|
1711
1711
|
var exports_benchmark = {};
|
|
1712
1712
|
__export(exports_benchmark, {
|
|
1713
1713
|
benchmarkSingleModelRest: () => benchmarkSingleModelRest
|
|
@@ -1904,7 +1904,7 @@ async function benchmarkSingleModelRest(model) {
|
|
|
1904
1904
|
}
|
|
1905
1905
|
var init_benchmark = () => {};
|
|
1906
1906
|
|
|
1907
|
-
// src/headless.ts
|
|
1907
|
+
// ../core/src/headless.ts
|
|
1908
1908
|
var exports_headless = {};
|
|
1909
1909
|
__export(exports_headless, {
|
|
1910
1910
|
runHeadlessBenchmark: () => runHeadlessBenchmark
|
|
@@ -2161,24 +2161,20 @@ var package_default;
|
|
|
2161
2161
|
var init_package = __esm(() => {
|
|
2162
2162
|
package_default = {
|
|
2163
2163
|
name: "ai-speedometer",
|
|
2164
|
-
version: "2.1.
|
|
2164
|
+
version: "2.1.4",
|
|
2165
2165
|
description: "A comprehensive CLI tool for benchmarking AI models across multiple providers with parallel execution and professional metrics",
|
|
2166
2166
|
bin: {
|
|
2167
2167
|
"ai-speedometer": "dist/ai-speedometer",
|
|
2168
2168
|
aispeed: "dist/ai-speedometer"
|
|
2169
2169
|
},
|
|
2170
2170
|
engines: {
|
|
2171
|
-
bun: ">=1.0.0"
|
|
2172
|
-
node: ">=18.0.0"
|
|
2171
|
+
bun: ">=1.0.0"
|
|
2173
2172
|
},
|
|
2174
2173
|
scripts: {
|
|
2175
2174
|
start: "bun src/index.ts",
|
|
2176
2175
|
dev: "bun --watch src/index.ts",
|
|
2177
|
-
|
|
2178
|
-
"test:watch": "bun test --watch",
|
|
2179
|
-
"test:update": "bun test --update-snapshots",
|
|
2176
|
+
build: "bun build src/index.ts --outdir dist --target bun --external '@opentui/core' --external '@opentui/react' --external 'react' --external 'react-reconciler' && cat ../../scripts/shebang dist/index.js > dist/ai-speedometer && chmod +x dist/ai-speedometer && rm dist/index.js",
|
|
2180
2177
|
typecheck: "bun tsc --noEmit",
|
|
2181
|
-
build: "bun build src/index.ts --outdir dist --target bun --external '@opentui/core' --external '@opentui/react' --external 'react' --external 'react-reconciler' && cat scripts/shebang dist/index.js > dist/ai-speedometer && chmod +x dist/ai-speedometer && rm dist/index.js",
|
|
2182
2178
|
prepublishOnly: "bun run build"
|
|
2183
2179
|
},
|
|
2184
2180
|
keywords: [
|
|
@@ -2208,10 +2204,9 @@ var init_package = __esm(() => {
|
|
|
2208
2204
|
homepage: "https://github.com/aptdnfapt/Ai-speedometer#readme",
|
|
2209
2205
|
files: [
|
|
2210
2206
|
"dist/",
|
|
2211
|
-
"docs/",
|
|
2212
|
-
"
|
|
2213
|
-
"
|
|
2214
|
-
"ai-benchmark-config.json.template"
|
|
2207
|
+
"../../docs/",
|
|
2208
|
+
"../../README.md",
|
|
2209
|
+
"../../ai-benchmark-config.json.template"
|
|
2215
2210
|
],
|
|
2216
2211
|
dependencies: {
|
|
2217
2212
|
"@opentui/core": "0.1.79",
|
|
@@ -2220,6 +2215,7 @@ var init_package = __esm(() => {
|
|
|
2220
2215
|
"react-reconciler": "^0.32.0"
|
|
2221
2216
|
},
|
|
2222
2217
|
devDependencies: {
|
|
2218
|
+
"@ai-speedometer/core": "workspace:*",
|
|
2223
2219
|
"jsonc-parser": "^3.3.1"
|
|
2224
2220
|
}
|
|
2225
2221
|
};
|
package/package.json
CHANGED
|
@@ -1,23 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ai-speedometer",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.4",
|
|
4
4
|
"description": "A comprehensive CLI tool for benchmarking AI models across multiple providers with parallel execution and professional metrics",
|
|
5
5
|
"bin": {
|
|
6
6
|
"ai-speedometer": "dist/ai-speedometer",
|
|
7
7
|
"aispeed": "dist/ai-speedometer"
|
|
8
8
|
},
|
|
9
9
|
"engines": {
|
|
10
|
-
"bun": ">=1.0.0"
|
|
11
|
-
"node": ">=18.0.0"
|
|
10
|
+
"bun": ">=1.0.0"
|
|
12
11
|
},
|
|
13
12
|
"scripts": {
|
|
14
13
|
"start": "bun src/index.ts",
|
|
15
14
|
"dev": "bun --watch src/index.ts",
|
|
16
|
-
"
|
|
17
|
-
"test:watch": "bun test --watch",
|
|
18
|
-
"test:update": "bun test --update-snapshots",
|
|
15
|
+
"build": "bun build src/index.ts --outdir dist --target bun --external '@opentui/core' --external '@opentui/react' --external 'react' --external 'react-reconciler' && cat ../../scripts/shebang dist/index.js > dist/ai-speedometer && chmod +x dist/ai-speedometer && rm dist/index.js",
|
|
19
16
|
"typecheck": "bun tsc --noEmit",
|
|
20
|
-
"build": "bun build src/index.ts --outdir dist --target bun --external '@opentui/core' --external '@opentui/react' --external 'react' --external 'react-reconciler' && cat scripts/shebang dist/index.js > dist/ai-speedometer && chmod +x dist/ai-speedometer && rm dist/index.js",
|
|
21
17
|
"prepublishOnly": "bun run build"
|
|
22
18
|
},
|
|
23
19
|
"keywords": [
|
|
@@ -47,10 +43,9 @@
|
|
|
47
43
|
"homepage": "https://github.com/aptdnfapt/Ai-speedometer#readme",
|
|
48
44
|
"files": [
|
|
49
45
|
"dist/",
|
|
50
|
-
"docs/",
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"ai-benchmark-config.json.template"
|
|
46
|
+
"../../docs/",
|
|
47
|
+
"../../README.md",
|
|
48
|
+
"../../ai-benchmark-config.json.template"
|
|
54
49
|
],
|
|
55
50
|
"dependencies": {
|
|
56
51
|
"@opentui/core": "0.1.79",
|
|
@@ -59,6 +54,7 @@
|
|
|
59
54
|
"react-reconciler": "^0.32.0"
|
|
60
55
|
},
|
|
61
56
|
"devDependencies": {
|
|
57
|
+
"@ai-speedometer/core": "workspace:*",
|
|
62
58
|
"jsonc-parser": "^3.3.1"
|
|
63
59
|
}
|
|
64
60
|
}
|
package/README.md
DELETED
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
# Ai-speedometer
|
|
2
|
-
|
|
3
|
-
A CLI tool for benchmarking AI models across multiple providers with parallel execution and performance metrics.
|
|
4
|
-
|
|
5
|
-
[](https://discord.gg/6S7HwCxbMy)
|
|
6
|
-
|
|
7
|
-
Track OSS model speeds over time: [ai-speedometer.oliveowl.xyz](https://ai-speedometer.oliveowl.xyz/)
|
|
8
|
-
|
|
9
|
-

|
|
10
|
-
|
|
11
|
-

|
|
12
|
-
|
|
13
|
-
## Install
|
|
14
|
-
|
|
15
|
-
Requires [Bun](https://bun.sh) runtime.
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
bun install -g ai-speedometer
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
Or with npm (Bun still required at runtime):
|
|
22
|
-
|
|
23
|
-
```bash
|
|
24
|
-
npm install -g ai-speedometer
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
Or run directly from source:
|
|
28
|
-
|
|
29
|
-
```bash
|
|
30
|
-
bun src/index.ts
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
## What It Measures
|
|
34
|
-
|
|
35
|
-
- **TTFT** (Time to First Token) - How fast the first response token arrives
|
|
36
|
-
- **Total Time** - Complete request duration
|
|
37
|
-
- **Tokens/Second** - Real-time throughput
|
|
38
|
-
- **Token Counts** - Input, output, and total tokens used
|
|
39
|
-
|
|
40
|
-
## Features
|
|
41
|
-
|
|
42
|
-
- **Interactive TUI** - Full terminal UI with Tokyo Night theme, menus, search, and live benchmark progress
|
|
43
|
-
- **REST API Benchmarking** - Default method, works with all OpenAI-compatible providers
|
|
44
|
-
- **Headless Mode** - Run benchmarks without interactive CLI using command-line arguments
|
|
45
|
-
- **Parallel Execution** - Benchmark multiple models simultaneously
|
|
46
|
-
- **Provider Management** - Add verified, custom verified, and custom providers
|
|
47
|
-
|
|
48
|
-
## Quick Setup
|
|
49
|
-
|
|
50
|
-
1. **Set Model**
|
|
51
|
-
```bash
|
|
52
|
-
ai-speedometer
|
|
53
|
-
# Select "Run Benchmark" → "Add Verified Provider" → Choose provider (OpenAI, Anthropic, etc.)
|
|
54
|
-
# Enter your API key when prompted
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
2. **Choose Model Provider**
|
|
58
|
-
- Verified providers (OpenAI, Anthropic, Google) - auto-configured via models.dev
|
|
59
|
-
- Custom verified providers (pre-configured trusted providers) - add API key
|
|
60
|
-
- Custom providers (Ollama, local models) - add your base URL
|
|
61
|
-
|
|
62
|
-
3. **Add API Key**
|
|
63
|
-
- Get API keys from your provider's dashboard
|
|
64
|
-
- Enter when prompted - stored securely in:
|
|
65
|
-
- `~/.local/share/opencode/auth.json` (primary storage)
|
|
66
|
-
- `~/.config/ai-speedometer/ai-benchmark-config.json` (backup storage)
|
|
67
|
-
|
|
68
|
-
4. **Run Benchmark**
|
|
69
|
-
```bash
|
|
70
|
-
ai-speedometer
|
|
71
|
-
# Select "Run Benchmark" → choose models → press Enter
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
## Usage
|
|
75
|
-
|
|
76
|
-
```bash
|
|
77
|
-
# Start interactive TUI
|
|
78
|
-
ai-speedometer
|
|
79
|
-
|
|
80
|
-
# Short alias
|
|
81
|
-
aispeed
|
|
82
|
-
|
|
83
|
-
# Debug mode
|
|
84
|
-
ai-speedometer --debug
|
|
85
|
-
|
|
86
|
-
# Headless benchmark
|
|
87
|
-
ai-speedometer --bench openai:gpt-4
|
|
88
|
-
# With custom API key
|
|
89
|
-
ai-speedometer --bench openai:gpt-4 --api-key "sk-your-key"
|
|
90
|
-
# Custom provider
|
|
91
|
-
ai-speedometer --bench-custom myprovider:mymodel --base-url https://... --api-key "..."
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
## Development
|
|
95
|
-
|
|
96
|
-
```bash
|
|
97
|
-
# Run from source
|
|
98
|
-
bun src/index.ts
|
|
99
|
-
|
|
100
|
-
# Run with auto-reload
|
|
101
|
-
bun --watch src/index.ts
|
|
102
|
-
|
|
103
|
-
# Run tests
|
|
104
|
-
bun test
|
|
105
|
-
|
|
106
|
-
# Typecheck
|
|
107
|
-
bun run typecheck
|
|
108
|
-
|
|
109
|
-
# Build standalone binary
|
|
110
|
-
bun run build # → dist/ai-speedometer
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
## Configuration Files
|
|
114
|
-
|
|
115
|
-
API keys and configuration are stored in:
|
|
116
|
-
|
|
117
|
-
- **Verified + Custom Verified Providers**:
|
|
118
|
-
- Primary: `~/.local/share/opencode/auth.json`
|
|
119
|
-
- Backup: `~/.config/ai-speedometer/ai-benchmark-config.json` (verifiedProviders section)
|
|
120
|
-
- **Custom Providers**: `~/.config/ai-speedometer/ai-benchmark-config.json` (customProviders section)
|
|
121
|
-
- **Provider Definitions**: `./custom-verified-providers.json` (bundled at build time)
|
|
122
|
-
|
|
123
|
-
## Requirements
|
|
124
|
-
|
|
125
|
-
- **Runtime**: Bun 1.0+ (required — install from [bun.sh](https://bun.sh))
|
|
126
|
-
- API keys for AI providers
|
|
127
|
-
- Terminal with arrow keys and ANSI colors
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"verifiedProviders": {
|
|
3
|
-
"openai": "sk-your-openai-api-key",
|
|
4
|
-
"anthropic": "sk-ant-your-anthropic-api-key"
|
|
5
|
-
},
|
|
6
|
-
"customProviders": [
|
|
7
|
-
{
|
|
8
|
-
"id": "my-custom-provider",
|
|
9
|
-
"name": "My Custom Provider",
|
|
10
|
-
"type": "openai-compatible",
|
|
11
|
-
"baseUrl": "https://api.custom.com/v1",
|
|
12
|
-
"apiKey": "YOUR_API_KEY_HERE",
|
|
13
|
-
"models": [
|
|
14
|
-
{
|
|
15
|
-
"name": "custom-model",
|
|
16
|
-
"id": "custom_model_1"
|
|
17
|
-
}
|
|
18
|
-
]
|
|
19
|
-
}
|
|
20
|
-
]
|
|
21
|
-
}
|
package/docs/README.md
DELETED
|
@@ -1,191 +0,0 @@
|
|
|
1
|
-
# AI Speedometer Documentation
|
|
2
|
-
|
|
3
|
-
Welcome to the documentation for the AI Speedometer benchmark CLI. This documentation covers everything you need to know about using, configuring, and understanding the system.
|
|
4
|
-
|
|
5
|
-
## Quick Start
|
|
6
|
-
|
|
7
|
-
- [User Guide](README.md) - Main README with installation and usage
|
|
8
|
-
- [Bug Fixes v1.0](bug-fixes-v1.md) - Critical issues resolved in latest version
|
|
9
|
-
- [Models.dev Integration](models-dev-integration.md) - How provider and model loading works
|
|
10
|
-
- [Custom Verified Providers](custom-verified-providers.md) - Adding and configuring custom verified providers
|
|
11
|
-
|
|
12
|
-
## Documentation Structure
|
|
13
|
-
|
|
14
|
-
### 📚 User Documentation
|
|
15
|
-
|
|
16
|
-
#### Getting Started
|
|
17
|
-
- [Main README](../README.md) - Installation, setup, and basic usage
|
|
18
|
-
- [Configuration Guide](../README.md#setup-guide) - Setting up providers and API keys
|
|
19
|
-
|
|
20
|
-
#### Features
|
|
21
|
-
- **Parallel Benchmarking** - Run multiple models simultaneously
|
|
22
|
-
- **Provider Management** - Add verified and custom providers
|
|
23
|
-
- **Model Selection** - Interactive search and selection interface
|
|
24
|
-
- **Performance Metrics** - Comprehensive benchmark results and charts
|
|
25
|
-
|
|
26
|
-
### 🔧 Technical Documentation
|
|
27
|
-
|
|
28
|
-
#### Architecture
|
|
29
|
-
- [Models.dev Integration](models-dev-integration.md) - Provider ecosystem and API integration
|
|
30
|
-
- [Custom Verified Providers](custom-verified-providers.md) - Pre-configured provider setup and management
|
|
31
|
-
- [Bug Fixes](bug-fixes-v1.md) - Critical issues and their solutions
|
|
32
|
-
|
|
33
|
-
#### Configuration
|
|
34
|
-
- **Provider Configuration** - Setting up different AI providers
|
|
35
|
-
- **Authentication** - API key management and security
|
|
36
|
-
- **Custom Providers** - Adding your own AI providers
|
|
37
|
-
- **Custom Verified Providers** - Pre-configured trusted providers
|
|
38
|
-
|
|
39
|
-
#### Development
|
|
40
|
-
- **Code Structure** - Organization of modules and components
|
|
41
|
-
- **Testing Guide** - Running and writing tests
|
|
42
|
-
- **Contributing** - How to contribute to the project
|
|
43
|
-
|
|
44
|
-
## Key Concepts
|
|
45
|
-
|
|
46
|
-
### Providers and Models
|
|
47
|
-
|
|
48
|
-
The system supports three types of providers:
|
|
49
|
-
|
|
50
|
-
1. **Verified Providers** - From models.dev ecosystem
|
|
51
|
-
- OpenAI, Anthropic, Google, and other major providers
|
|
52
|
-
- Automatically updated with latest models
|
|
53
|
-
- Pre-configured endpoints and authentication
|
|
54
|
-
|
|
55
|
-
2. **Custom Verified Providers** - Pre-configured trusted providers
|
|
56
|
-
- Curated providers not in models.dev but treated as verified
|
|
57
|
-
- Pre-configured with specific models and endpoints
|
|
58
|
-
- Available in `custom-verified-providers.json`
|
|
59
|
-
|
|
60
|
-
3. **Custom Providers** - User-defined providers
|
|
61
|
-
- Your own AI endpoints or local models
|
|
62
|
-
- Full configuration flexibility
|
|
63
|
-
- Support for OpenAI-compatible APIs
|
|
64
|
-
|
|
65
|
-
### Benchmarking Methods
|
|
66
|
-
|
|
67
|
-
- **AI SDK Method** - Uses Vercel AI SDK with streaming
|
|
68
|
-
- Real-time token counting
|
|
69
|
-
- Time to First Token (TTFT) metrics
|
|
70
|
-
- Streaming response analysis
|
|
71
|
-
|
|
72
|
-
- **REST API Method** - Direct HTTP API calls
|
|
73
|
-
- No streaming, complete response timing
|
|
74
|
-
- Consistent across all providers
|
|
75
|
-
- Fallback for compatibility
|
|
76
|
-
|
|
77
|
-
### Performance Metrics
|
|
78
|
-
|
|
79
|
-
- **Total Time** - Complete request duration
|
|
80
|
-
- **TTFT** - Time to First Token (streaming only)
|
|
81
|
-
- **Tokens/Second** - Real-time throughput calculation
|
|
82
|
-
- **Token Counts** - Input, output, and total tokens
|
|
83
|
-
- **Provider Rankings** - Performance comparison across providers
|
|
84
|
-
|
|
85
|
-
## Recent Updates
|
|
86
|
-
|
|
87
|
-
### Phase 8 — Build, Polish & Cleanup
|
|
88
|
-
|
|
89
|
-
Production-ready build with full TypeScript, clean dependencies, and proper binary distribution:
|
|
90
|
-
|
|
91
|
-
- **Standalone binary** — `bun build --compile` produces a single ELF executable at `dist/ai-speedometer`
|
|
92
|
-
- **Scripts**: `bun run build`, `bun run typecheck`, `bun test`, `bun test --watch`, `bun test --update-snapshots`
|
|
93
|
-
- **Removed unused deps** — `@ai-sdk/anthropic`, `@ai-sdk/openai-compatible`, `ai`, `cli-table3`, `dotenv`, `esbuild` removed; only `jsonc-parser` remains
|
|
94
|
-
- **SIGINT handler** — `renderer.destroy()` + `process.exit(0)` on `SIGINT` in `src/tui/index.tsx`
|
|
95
|
-
- **Loading guard** — `ModelSelectScreen` shows "Loading config..." during initial config load
|
|
96
|
-
- **0 TypeScript errors** — `bun tsc --noEmit` passes clean
|
|
97
|
-
|
|
98
|
-
Build: `bun run build` → `dist/ai-speedometer` (standalone binary, no bun required)
|
|
99
|
-
|
|
100
|
-
### Phase 7 — Tests
|
|
101
|
-
|
|
102
|
-
Comprehensive test suite using `bun test` + `@opentui/react/test-utils`:
|
|
103
|
-
|
|
104
|
-
- **51 tests** across 11 files — all passing
|
|
105
|
-
- Component tests: Header, Footer, MenuList, BarChart, ModelRow, ResultsTable
|
|
106
|
-
- Screen tests: MainMenuScreen, ModelSelectScreen, AddVerifiedScreen, AddCustomScreen
|
|
107
|
-
- Benchmark logic tests with mocked fetch (openai-compatible, anthropic, google)
|
|
108
|
-
- 14 snapshots for visual regression detection
|
|
109
|
-
- Test factories in `src/tests/setup.ts`: `mockModel`, `mockBenchmarkResult`, `mockProvider`, `mockModelBenchState`
|
|
110
|
-
|
|
111
|
-
Run with: `bun test`
|
|
112
|
-
|
|
113
|
-
### Version 1.0 Bug Fixes
|
|
114
|
-
|
|
115
|
-
The latest release includes critical fixes for:
|
|
116
|
-
|
|
117
|
-
- ✅ **Parallel Model Execution** - Multi-model selection now works correctly
|
|
118
|
-
- ✅ **AI SDK Model Support** - Verified providers work in benchmarks
|
|
119
|
-
- ✅ **Search Performance** - Reduced lag and flickering in search
|
|
120
|
-
- ✅ **Screen Rendering** - Fixed text overlapping issues
|
|
121
|
-
|
|
122
|
-
See [Bug Fixes v1.0](bug-fixes-v1.md) for detailed technical information.
|
|
123
|
-
|
|
124
|
-
### Models.dev Integration Enhancement
|
|
125
|
-
|
|
126
|
-
- **Improved Caching** - Better performance with 1-hour cache expiration
|
|
127
|
-
- **Enhanced Search** - Debounced filtering with 50ms delay
|
|
128
|
-
- **Provider Type Detection** - Automatic SDK selection based on provider
|
|
129
|
-
- **Error Handling** - Graceful degradation and fallback mechanisms
|
|
130
|
-
|
|
131
|
-
See [Models.dev Integration](models-dev-integration.md) for complete architectural details.
|
|
132
|
-
|
|
133
|
-
### Custom Verified Providers
|
|
134
|
-
|
|
135
|
-
- **Pre-configured Providers** - Curated list of trusted providers not in models.dev
|
|
136
|
-
- **Structured Configuration** - Standardized format for provider definitions
|
|
137
|
-
- **Model Management** - Predefined models with display names and API IDs
|
|
138
|
-
- **Authentication Integration** - Seamless integration with existing auth system
|
|
139
|
-
|
|
140
|
-
See [Custom Verified Providers](custom-verified-providers.md) for complete setup and configuration guide.
|
|
141
|
-
|
|
142
|
-
## Getting Help
|
|
143
|
-
|
|
144
|
-
### Troubleshooting
|
|
145
|
-
|
|
146
|
-
#### Common Issues
|
|
147
|
-
1. **Models Not Showing** - Check API key configuration and provider authentication
|
|
148
|
-
2. **Search Lag** - Clear cache and ensure proper file permissions
|
|
149
|
-
3. **Benchmark Failures** - Verify API keys and network connectivity
|
|
150
|
-
|
|
151
|
-
#### Debug Mode
|
|
152
|
-
Enable detailed logging for troubleshooting:
|
|
153
|
-
```bash
|
|
154
|
-
npm run cli:debug
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
This creates `debug.log` with API request/response details.
|
|
158
|
-
|
|
159
|
-
### Community Support
|
|
160
|
-
|
|
161
|
-
- **GitHub Issues** - Report bugs and request features
|
|
162
|
-
- **Documentation** - Check these docs for common questions
|
|
163
|
-
- **Debug Logs** - Include debug logs when reporting issues
|
|
164
|
-
|
|
165
|
-
### Contributing
|
|
166
|
-
|
|
167
|
-
We welcome contributions! See the main project README for guidelines on:
|
|
168
|
-
- Reporting bugs
|
|
169
|
-
- Requesting features
|
|
170
|
-
- Submitting pull requests
|
|
171
|
-
- Improving documentation
|
|
172
|
-
|
|
173
|
-
## Documentation Index
|
|
174
|
-
|
|
175
|
-
| Document | Description | Audience |
|
|
176
|
-
|----------|-------------|----------|
|
|
177
|
-
| [Main README](../README.md) | Installation, setup, and basic usage | Users |
|
|
178
|
-
| [Bug Fixes v1.0](bug-fixes-v1.md) | Critical issues and solutions | Developers/Users |
|
|
179
|
-
| [Models.dev Integration](models-dev-integration.md) | Provider ecosystem architecture | Developers |
|
|
180
|
-
| [Custom Verified Providers](custom-verified-providers.md) | Pre-configured provider setup | Developers/Users |
|
|
181
|
-
|
|
182
|
-
## Quick Links
|
|
183
|
-
|
|
184
|
-
- **Project Home:** [GitHub Repository](https://github.com/aptdnfapt/Ai-speedometer)
|
|
185
|
-
- **Issues:** [GitHub Issues](https://github.com/aptdnfapt/Ai-speedometer/issues)
|
|
186
|
-
- **Models.dev:** [Provider Registry](https://models.dev)
|
|
187
|
-
|
|
188
|
-
---
|
|
189
|
-
|
|
190
|
-
*Documentation last updated: September 2025*
|
|
191
|
-
*Version: 1.0.0*
|