@gotcos/glasses-server 6.71.0 → 6.71.5
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/.env.example +8 -0
- package/CHANGELOG.md +47 -0
- package/README.md +14 -0
- package/docs/asr-canaries.md +103 -0
- package/docs/test-plan-6.71.2.md +111 -0
- package/docs/test-plan-6.71.3.md +30 -0
- package/docs/test-plan-6.71.5.md +36 -0
- package/managed-runtime-contract.json +2 -0
- package/package.json +9 -2
- package/server/lib/context-library-search.ts +3 -2
- package/server/lib/live-cos-ask.ts +139 -19
- package/server/lib/meeting-ask-confidence.ts +16 -0
- package/server/lib/meeting-ask-hq-transcript.ts +40 -0
- package/server/lib/meeting-ask-orientation.ts +47 -0
- package/server/lib/meeting-ask-refinement.ts +26 -0
- package/server/lib/meeting-ask-runtime.ts +169 -22
- package/server/lib/meeting-ask-store.ts +32 -1
- package/server/lib/meeting-ask-transcript-sources.ts +13 -0
- package/server/lib/meeting-ask-transcript.ts +132 -0
- package/server/lib/meeting-ask-web.ts +22 -4
- package/server/lib/meeting-batch-transcribe.ts +36 -0
- package/server/lib/meeting-library-search.ts +3 -1
- package/server/lib/meeting-public-topic.ts +61 -0
- package/server/lib/meeting-web-page.ts +80 -0
- package/server/lib/whisper-batch-timing.ts +86 -0
- package/server/lib/whisper-local.ts +43 -8
- package/server/routes/health.ts +3 -2
- package/server/routes/meeting-ask.ts +26 -8
- package/shared/meeting-ask.ts +51 -1
package/shared/meeting-ask.ts
CHANGED
|
@@ -11,6 +11,20 @@ export interface MeetingAskTurn {
|
|
|
11
11
|
speaker: string;
|
|
12
12
|
text: string;
|
|
13
13
|
}
|
|
14
|
+
/**
|
|
15
|
+
* GET /api/meeting-ask/transcript. A live meeting answers from memory. A meeting that has ended (6.71.1)
|
|
16
|
+
* answers from its saved record with ended: true, so it stays askable. 404 meeting_transcript_unavailable
|
|
17
|
+
* only when no source holds its words.
|
|
18
|
+
*/
|
|
19
|
+
export interface MeetingAskTranscript {
|
|
20
|
+
turns: MeetingAskTurn[];
|
|
21
|
+
elapsedMs: number;
|
|
22
|
+
notices: string[];
|
|
23
|
+
ended?: true;
|
|
24
|
+
/** When the recording stopped, if known. */
|
|
25
|
+
endedAt?: string;
|
|
26
|
+
source?: 'live' | 'active_file' | 'saved';
|
|
27
|
+
}
|
|
14
28
|
export interface MeetingAskFile {
|
|
15
29
|
id: string;
|
|
16
30
|
revision: string;
|
|
@@ -18,8 +32,12 @@ export interface MeetingAskFile {
|
|
|
18
32
|
status: 'ready' | 'pending' | 'unsupported' | 'failed' | 'removed' | 'secret-held';
|
|
19
33
|
text: string;
|
|
20
34
|
notice?: string;
|
|
35
|
+
/** "phone" for a file the phone attached through POST files/media (6.71.1). Control's rows omit it. */
|
|
36
|
+
origin?: 'phone';
|
|
21
37
|
}
|
|
22
38
|
export interface MeetingAskSource {
|
|
39
|
+
/** Server-owned accepted post-stop quotation; no live turn target or precise word clock. */
|
|
40
|
+
finalizedTranscript?: boolean
|
|
23
41
|
id: string;
|
|
24
42
|
kind: 'transcript' | 'memory' | 'meeting' | 'file' | 'web';
|
|
25
43
|
title: string;
|
|
@@ -145,6 +163,8 @@ export interface MeetingAskExchange {
|
|
|
145
163
|
sections?: MeetingAskSection[];
|
|
146
164
|
sources: MeetingAskSource[];
|
|
147
165
|
notices: string[];
|
|
166
|
+
/** Audited public query actually admitted for this answer, if any. */
|
|
167
|
+
publicWebQuery?: string;
|
|
148
168
|
throughMs: number;
|
|
149
169
|
files: MeetingAskFile[];
|
|
150
170
|
error?: string;
|
|
@@ -155,11 +175,27 @@ export interface MeetingAskCapabilities {
|
|
|
155
175
|
durableHistory: true;
|
|
156
176
|
attachmentContext: true;
|
|
157
177
|
webRetrieval: boolean;
|
|
178
|
+
publicTopics?: true;
|
|
179
|
+
/** 6.71.1: POST /api/meeting-ask/files/media turns uploaded media into meeting files. */
|
|
180
|
+
phoneFiles?: true;
|
|
181
|
+
/** 6.71.1: config carries cosSearch and PUT config {cosSearch} changes it. */
|
|
182
|
+
cosSearchMode?: true;
|
|
183
|
+
meetingContext?: true;
|
|
158
184
|
}
|
|
185
|
+
/**
|
|
186
|
+
* How Meeting Ask searches COS memory and earlier meetings (6.71.1). 'meaning' (default) adds the embedding
|
|
187
|
+
* search, which sends the search phrase to the COS install's embedding provider; 'keyword' matches words
|
|
188
|
+
* locally only, with no embedding request and no tokens.
|
|
189
|
+
*/
|
|
190
|
+
export type MeetingAskCosSearch = 'meaning' | 'keyword';
|
|
159
191
|
export interface MeetingAskConfig {
|
|
160
192
|
protocolVersion: 2;
|
|
161
193
|
serverInstanceId: string;
|
|
162
194
|
selected: MeetingAskModel;
|
|
195
|
+
/** 6.71.1. Missing on older servers, which always used 'meaning'. */
|
|
196
|
+
cosSearch?: MeetingAskCosSearch;
|
|
197
|
+
/** Explicit opt-in to public-topic selection from recent transcript for fact checks. */
|
|
198
|
+
publicTopics?: boolean;
|
|
163
199
|
models: Array<MeetingAskModel & {
|
|
164
200
|
available: boolean;
|
|
165
201
|
reason?: string;
|
|
@@ -171,12 +207,26 @@ export interface MeetingAskConfig {
|
|
|
171
207
|
};
|
|
172
208
|
capabilities: MeetingAskCapabilities;
|
|
173
209
|
}
|
|
174
|
-
/** All paths under /api/meeting-ask. GET config; PUT config {engine,model}.
|
|
210
|
+
/** All paths under /api/meeting-ask. GET config; PUT config {engine,model} and/or {cosSearch} (6.71.1); either part may come alone.
|
|
175
211
|
* POST requests MeetingAskSubmit -> 202 {exchange}; GET requests/:requestId -> {exchange}.
|
|
176
212
|
* POST requests/:requestId/cancel {serverInstanceId} -> {exchange}.
|
|
177
213
|
* GET history?sessionId=...&serverInstanceId=...&offset=0&limit=50&order=asc|desc -> {exchanges,nextOffset,files}.
|
|
178
214
|
* PUT files {sessionId,serverInstanceId,files:MeetingAskFile[]} -> {files}. Upsert only; removed is explicit.
|
|
215
|
+
* POST files/media {sessionId,serverInstanceId,media:[{id,name?}]} -> {files} (6.71.1, capabilities.phoneFiles):
|
|
216
|
+
* media already uploaded through /api/media joins the meeting's file list as id "phone_<mediaId>", origin "phone".
|
|
179
217
|
* GET export?sessionId=...&serverInstanceId=... -> {text}; composes persisted Ask/file context,
|
|
180
218
|
* client prepends its current canonical transcript. All operations use X-Cos-Token.
|
|
181
219
|
* GET config is the capability probe (404 means old server); health.capabilities.meetingAsk mirrors capabilities.
|
|
182
220
|
*/
|
|
221
|
+
|
|
222
|
+
/** User-confirmed navigation context for one meeting, never canonical transcript evidence. */
|
|
223
|
+
export type MeetingAskDomain = string;
|
|
224
|
+
export interface MeetingAskCalendarMatch {
|
|
225
|
+
id: string; title: string; start: string; end: string; suggestedDomain?: MeetingAskDomain;
|
|
226
|
+
}
|
|
227
|
+
export interface MeetingAskOrientation {
|
|
228
|
+
revision: number; domain: MeetingAskDomain | null; calendar: MeetingAskCalendarMatch | null;
|
|
229
|
+
}
|
|
230
|
+
export interface MeetingAskContext {
|
|
231
|
+
orientation: MeetingAskOrientation; domains: Array<{id: string; label: string}>; candidates: MeetingAskCalendarMatch[]; notices: string[];
|
|
232
|
+
}
|