@gotcos/glasses-server 6.73.0 → 6.73.1
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/CHANGELOG.md +6 -0
- package/package.json +1 -1
- package/server/lib/codex-model-catalog.ts +15 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
## 6.73.1 — GPT tier selection correction
|
|
2
|
+
|
|
3
|
+
- Resolve GPT Max/Frontier to the newest provider-described frontier model and GPT Balanced to the newest workhorse/balanced model. A newer workhorse version no longer displaces a frontier model: GPT-6-Astra serves Max, GPT-6.1-Sol serves Balanced in the current catalog.
|
|
4
|
+
- Keep version-based selection when the provider does not describe both tiers; preserve saved tier preferences, explicit model overrides, discovery refresh, and last-known-good fallback.
|
|
5
|
+
- Server catalog and execution share the corrected selection. Existing companion builds can receive the correction without an EHPK update. No transcription settings or experimental flags change.
|
|
6
|
+
|
|
1
7
|
## [6.73.0] - 2026-10-13 - Prompts and dictation follow the speech-to-text settings
|
|
2
8
|
|
|
3
9
|
Paired clients: none required. Every phone, including the public 618, already accepts the new dictation text (it never checks a model on dictation). COS Control and the phone can read the new `dictation` block in `GET /api/stt-settings` to replace "Dictation is unchanged" in their copy.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gotcos/glasses-server",
|
|
3
|
-
"version": "6.73.
|
|
3
|
+
"version": "6.73.1",
|
|
4
4
|
"description": "COS Glasses: self-hosted AI heads-up-display server for Even G2 smart glasses, powered by Claude Code, Codex, Cursor Agent CLI, or local Ollama",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -50,7 +50,7 @@ export interface CodexModelCatalog {
|
|
|
50
50
|
source: CodexCatalogSource
|
|
51
51
|
refreshedAt: string
|
|
52
52
|
autoUpdates: true
|
|
53
|
-
selectionPolicy: 'newest-generation
|
|
53
|
+
selectionPolicy: 'capability-tiers-then-newest-generation'
|
|
54
54
|
options: CodexModelOption[]
|
|
55
55
|
refreshError?: string
|
|
56
56
|
}
|
|
@@ -93,13 +93,24 @@ function isCapabilityCandidate(model: CodexCatalogModel): boolean {
|
|
|
93
93
|
return !/(?:fast and affordable|cost-efficient|small,? fast|ultra-fast)/i.test(model.description)
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
-
/**
|
|
96
|
+
/** Prefer the provider's frontier/workhorse tiers; use generation order when
|
|
97
|
+
* the catalog does not describe both tiers. A newer workhorse (6.1 Sol) must
|
|
98
|
+
* not replace the frontier (6 Astra) merely because its version is higher.
|
|
99
|
+
*/
|
|
97
100
|
export function selectTopCodexModels(models: CodexCatalogModel[]): CodexCatalogModel[] {
|
|
98
101
|
const visible = models.filter(model => !model.hidden && versionParts(model.id))
|
|
99
102
|
if (visible.length === 0) return []
|
|
100
103
|
|
|
101
104
|
const capable = visible.filter(isCapabilityCandidate)
|
|
102
105
|
const pool = capable.length > 0 ? capable : visible
|
|
106
|
+
const byNewest = (candidates: CodexCatalogModel[]): CodexCatalogModel | undefined =>
|
|
107
|
+
candidates.slice().sort((a, b) => compareVersionsDesc(versionParts(a.id) ?? [], versionParts(b.id) ?? []))[0]
|
|
108
|
+
const frontier = byNewest(pool.filter(model => /\bfrontier\b/i.test(model.description)))
|
|
109
|
+
const balanced = byNewest(pool.filter(model =>
|
|
110
|
+
!/\bfrontier\b/i.test(model.description) && /\b(workhorse|balanced)\b/i.test(model.description),
|
|
111
|
+
))
|
|
112
|
+
if (frontier && balanced) return [frontier, balanced]
|
|
113
|
+
|
|
103
114
|
const versions = pool
|
|
104
115
|
.map(model => versionParts(model.id))
|
|
105
116
|
.filter((parts): parts is number[] => !!parts)
|
|
@@ -144,7 +155,7 @@ export function buildCodexModelCatalog(
|
|
|
144
155
|
source,
|
|
145
156
|
refreshedAt,
|
|
146
157
|
autoUpdates: true,
|
|
147
|
-
selectionPolicy: 'newest-generation
|
|
158
|
+
selectionPolicy: 'capability-tiers-then-newest-generation',
|
|
148
159
|
options,
|
|
149
160
|
}
|
|
150
161
|
}
|
|
@@ -163,7 +174,7 @@ function cliDefaultCatalog(refreshError?: string): CodexModelCatalog {
|
|
|
163
174
|
source: 'cli-default',
|
|
164
175
|
refreshedAt: new Date().toISOString(),
|
|
165
176
|
autoUpdates: true,
|
|
166
|
-
selectionPolicy: 'newest-generation
|
|
177
|
+
selectionPolicy: 'capability-tiers-then-newest-generation',
|
|
167
178
|
options: [
|
|
168
179
|
{ ...common, preference: CODEX_FRONTIER_MODEL, displayName: 'GPT Frontier (auto)' },
|
|
169
180
|
{ ...common, preference: CODEX_BALANCED_MODEL, displayName: 'GPT Balanced (auto)', isDefault: false },
|