hci-atrium 0.1.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/LICENSE +21 -0
- package/README.md +182 -0
- package/dist/atrium.d.ts +522 -0
- package/dist/atrium.d.ts.map +1 -0
- package/dist/atrium.js +806 -0
- package/dist/atrium.js.map +1 -0
- package/dist/auth.d.ts +85 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +369 -0
- package/dist/auth.js.map +1 -0
- package/dist/by.d.ts +84 -0
- package/dist/by.d.ts.map +1 -0
- package/dist/by.js +87 -0
- package/dist/by.js.map +1 -0
- package/dist/decider.d.ts +40 -0
- package/dist/decider.d.ts.map +1 -0
- package/dist/decider.js +76 -0
- package/dist/decider.js.map +1 -0
- package/dist/discovery.d.ts +15 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/discovery.js +38 -0
- package/dist/discovery.js.map +1 -0
- package/dist/env.d.ts +11 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +28 -0
- package/dist/env.js.map +1 -0
- package/dist/errors.d.ts +67 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +86 -0
- package/dist/errors.js.map +1 -0
- package/dist/files.d.ts +7 -0
- package/dist/files.d.ts.map +1 -0
- package/dist/files.js +2 -0
- package/dist/files.js.map +1 -0
- package/dist/http.d.ts +11 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +21 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/models.d.ts +456 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +487 -0
- package/dist/models.js.map +1 -0
- package/dist/pkce.d.ts +16 -0
- package/dist/pkce.d.ts.map +1 -0
- package/dist/pkce.js +40 -0
- package/dist/pkce.js.map +1 -0
- package/dist/react/index.d.ts +37 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +89 -0
- package/dist/react/index.js.map +1 -0
- package/dist/rooms/armed-set.d.ts +33 -0
- package/dist/rooms/armed-set.d.ts.map +1 -0
- package/dist/rooms/armed-set.js +65 -0
- package/dist/rooms/armed-set.js.map +1 -0
- package/dist/rooms/brokers.d.ts +62 -0
- package/dist/rooms/brokers.d.ts.map +1 -0
- package/dist/rooms/brokers.js +109 -0
- package/dist/rooms/brokers.js.map +1 -0
- package/dist/rooms/codec.d.ts +100 -0
- package/dist/rooms/codec.d.ts.map +1 -0
- package/dist/rooms/codec.js +101 -0
- package/dist/rooms/codec.js.map +1 -0
- package/dist/rooms/index.d.ts +40 -0
- package/dist/rooms/index.d.ts.map +1 -0
- package/dist/rooms/index.js +45 -0
- package/dist/rooms/index.js.map +1 -0
- package/dist/rooms/offer-capture.d.ts +96 -0
- package/dist/rooms/offer-capture.d.ts.map +1 -0
- package/dist/rooms/offer-capture.js +338 -0
- package/dist/rooms/offer-capture.js.map +1 -0
- package/dist/rooms/offer-transcription.d.ts +63 -0
- package/dist/rooms/offer-transcription.d.ts.map +1 -0
- package/dist/rooms/offer-transcription.js +231 -0
- package/dist/rooms/offer-transcription.js.map +1 -0
- package/dist/rooms/participant.d.ts +35 -0
- package/dist/rooms/participant.d.ts.map +1 -0
- package/dist/rooms/participant.js +53 -0
- package/dist/rooms/participant.js.map +1 -0
- package/dist/rooms/recorder.d.ts +74 -0
- package/dist/rooms/recorder.d.ts.map +1 -0
- package/dist/rooms/recorder.js +157 -0
- package/dist/rooms/recorder.js.map +1 -0
- package/dist/rooms/room.d.ts +542 -0
- package/dist/rooms/room.d.ts.map +1 -0
- package/dist/rooms/room.js +1357 -0
- package/dist/rooms/room.js.map +1 -0
- package/dist/rooms/snippet.d.ts +48 -0
- package/dist/rooms/snippet.d.ts.map +1 -0
- package/dist/rooms/snippet.js +70 -0
- package/dist/rooms/snippet.js.map +1 -0
- package/dist/rooms/sse.d.ts +102 -0
- package/dist/rooms/sse.d.ts.map +1 -0
- package/dist/rooms/sse.js +347 -0
- package/dist/rooms/sse.js.map +1 -0
- package/dist/rooms/standing-source.d.ts +190 -0
- package/dist/rooms/standing-source.d.ts.map +1 -0
- package/dist/rooms/standing-source.js +431 -0
- package/dist/rooms/standing-source.js.map +1 -0
- package/dist/rooms/transcriber.d.ts +81 -0
- package/dist/rooms/transcriber.d.ts.map +1 -0
- package/dist/rooms/transcriber.js +111 -0
- package/dist/rooms/transcriber.js.map +1 -0
- package/dist/rooms/transport-shared.d.ts +28 -0
- package/dist/rooms/transport-shared.d.ts.map +1 -0
- package/dist/rooms/transport-shared.js +42 -0
- package/dist/rooms/transport-shared.js.map +1 -0
- package/dist/rooms/transport.d.ts +161 -0
- package/dist/rooms/transport.d.ts.map +1 -0
- package/dist/rooms/transport.js +258 -0
- package/dist/rooms/transport.js.map +1 -0
- package/dist/shaping/assets.d.ts +42 -0
- package/dist/shaping/assets.d.ts.map +1 -0
- package/dist/shaping/assets.js +77 -0
- package/dist/shaping/assets.js.map +1 -0
- package/dist/shaping/chat.d.ts +39 -0
- package/dist/shaping/chat.d.ts.map +1 -0
- package/dist/shaping/chat.js +62 -0
- package/dist/shaping/chat.js.map +1 -0
- package/dist/shaping/index.d.ts +14 -0
- package/dist/shaping/index.d.ts.map +1 -0
- package/dist/shaping/index.js +13 -0
- package/dist/shaping/index.js.map +1 -0
- package/dist/shaping/library.d.ts +84 -0
- package/dist/shaping/library.d.ts.map +1 -0
- package/dist/shaping/library.js +288 -0
- package/dist/shaping/library.js.map +1 -0
- package/dist/shaping/request.d.ts +47 -0
- package/dist/shaping/request.d.ts.map +1 -0
- package/dist/shaping/request.js +25 -0
- package/dist/shaping/request.js.map +1 -0
- package/dist/shaping/rooms.d.ts +128 -0
- package/dist/shaping/rooms.d.ts.map +1 -0
- package/dist/shaping/rooms.js +330 -0
- package/dist/shaping/rooms.js.map +1 -0
- package/dist/shaping/sources.d.ts +29 -0
- package/dist/shaping/sources.d.ts.map +1 -0
- package/dist/shaping/sources.js +51 -0
- package/dist/shaping/sources.js.map +1 -0
- package/dist/shaping/structured.d.ts +47 -0
- package/dist/shaping/structured.d.ts.map +1 -0
- package/dist/shaping/structured.js +115 -0
- package/dist/shaping/structured.js.map +1 -0
- package/dist/storage.d.ts +36 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +86 -0
- package/dist/storage.js.map +1 -0
- package/dist/transcribe-stream.d.ts +81 -0
- package/dist/transcribe-stream.d.ts.map +1 -0
- package/dist/transcribe-stream.js +253 -0
- package/dist/transcribe-stream.js.map +1 -0
- package/dist/transcribe.d.ts +57 -0
- package/dist/transcribe.d.ts.map +1 -0
- package/dist/transcribe.js +267 -0
- package/dist/transcribe.js.map +1 -0
- package/dist/types.d.ts +20 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +56 -0
package/dist/atrium.d.ts
ADDED
|
@@ -0,0 +1,522 @@
|
|
|
1
|
+
/** The ``Atrium`` client — the entry point that owns auth, an authenticated transport, and the
|
|
2
|
+
* phase-1 namespaces (``library`` / ``assets`` / ``sources`` / ``sessions`` / ``rooms``) plus the
|
|
3
|
+
* ``chat`` and ``embed`` methods. */
|
|
4
|
+
import { Auth } from "./auth.js";
|
|
5
|
+
import type { OperandLike } from "./by.js";
|
|
6
|
+
import { DEFAULT_BASE_URL } from "./env.js";
|
|
7
|
+
import type { FileSource } from "./files.js";
|
|
8
|
+
import type { Candidate } from "./models.js";
|
|
9
|
+
import { type Asset, type AssetBinder, type AssetPage, type AssetRef, type AssetVector, type AssetVectorsOptions, type ChatReply, type CompareResult, type Filters, type IndexEntry, type SessionEvent as ReadSessionEvent, type SearchByExamplesHit, type SearchHit, type SegmentRef, type Session, type Event as SessionEvent, type SessionInfo, type SourceInfo, type SourceSearchResult, type Space, type TagDefinition, type Transcript } from "./models.js";
|
|
10
|
+
import { type FetchImpl, Room, type RoomTransportMode, type WebSocketCtor } from "./rooms/index.js";
|
|
11
|
+
import { type ChatMessage, type SessionExportFormat, type ShapedRequest, type ZodLike } from "./shaping/index.js";
|
|
12
|
+
export type { SessionExportFormat } from "./shaping/rooms.js";
|
|
13
|
+
import { type AudioChunk, type TranscribeStreamOptions } from "./transcribe.js";
|
|
14
|
+
export { DEFAULT_BASE_URL };
|
|
15
|
+
export interface AtriumOptions {
|
|
16
|
+
/** The Atrium instance URL. Falls back to ``ATRIUM_BASE_URL``, then the deployed instance. */
|
|
17
|
+
baseUrl?: string;
|
|
18
|
+
/** The app's public OAuth client id (for "Sign in with Atrium"). Falls back to ``ATRIUM_CLIENT_ID``. */
|
|
19
|
+
clientId?: string;
|
|
20
|
+
/**
|
|
21
|
+
* An ``atr_…`` API key. Falls back to ``ATRIUM_API_KEY``. When set, requests authenticate with the
|
|
22
|
+
* key and the OAuth flow is bypassed. Works in the browser too (research prototypes hosted
|
|
23
|
+
* locally) — see the one-time console note when a key is used in a page.
|
|
24
|
+
*/
|
|
25
|
+
apiKey?: string;
|
|
26
|
+
/** Default project scope applied to calls that don't pass their own ``project``. */
|
|
27
|
+
project?: string;
|
|
28
|
+
/** Default collection scope applied to calls that don't pass their own ``collection``. */
|
|
29
|
+
collection?: string;
|
|
30
|
+
}
|
|
31
|
+
/** The internal transport the namespaces build on. */
|
|
32
|
+
interface ClientInternal {
|
|
33
|
+
readonly baseUrl: string;
|
|
34
|
+
request(req: ShapedRequest, signal?: AbortSignal): Promise<unknown>;
|
|
35
|
+
/** Like {@link request} but returns the raw response bytes (session/data exports serve
|
|
36
|
+
* jsonl/csv/zip, not JSON). */
|
|
37
|
+
requestBytes(req: ShapedRequest, signal?: AbortSignal): Promise<Uint8Array>;
|
|
38
|
+
/** The client's ``assets`` namespace, threaded into parsed assets so their bound
|
|
39
|
+
* ``vectors()`` / ``segments()`` / ``index()`` methods resolve. */
|
|
40
|
+
readonly assetBinder: AssetBinder;
|
|
41
|
+
scope(project?: string, collection?: string): {
|
|
42
|
+
project?: string;
|
|
43
|
+
collection?: string;
|
|
44
|
+
};
|
|
45
|
+
/** Resolve a space by id (passthrough) or friendly name to its id, via a per-client cached list. */
|
|
46
|
+
resolveSpace(nameOrId: string): Promise<string>;
|
|
47
|
+
/** The full space list, fetched once and cached per client (shared with {@link resolveSpace}). */
|
|
48
|
+
cachedSpaces(): Promise<Space[]>;
|
|
49
|
+
/** Embed text or media into a vector — the surface a room's ``audioVectors`` embeds each snippet with. */
|
|
50
|
+
embed(opts: EmbedOptions): Promise<number[]>;
|
|
51
|
+
/** Chat completion — a room's ``offerChat`` broker generates replies with it. */
|
|
52
|
+
chat(messages: string | ChatMessage[], opts?: ChatOptions): Promise<ChatReply>;
|
|
53
|
+
/** The library namespace — a room's ``audioVectors`` / ``audioScores`` read ``spaces`` / ``compare``. */
|
|
54
|
+
readonly library: Library;
|
|
55
|
+
/** The shared live-transcription engine — behind ``transcribeLive`` and a room's ``transcribe``. */
|
|
56
|
+
transcribeStream(clips: AsyncIterable<AudioChunk>, opts: TranscribeStreamOptions): AsyncIterable<Transcript>;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* A client bound to one Atrium instance and one credential (an OAuth ``clientId`` or an ``apiKey``).
|
|
60
|
+
*
|
|
61
|
+
* Construction is import-safe and side-effect-light. Namespaces (``library`` / ``assets`` /
|
|
62
|
+
* ``sources`` / ``sessions`` / ``rooms``) and the ``chat`` / ``embed`` methods each shape a request,
|
|
63
|
+
* send it over the authenticated transport, and parse the response. ``close()`` (or
|
|
64
|
+
* ``await using``) aborts any in-flight calls.
|
|
65
|
+
*/
|
|
66
|
+
export declare class Atrium implements ClientInternal, AsyncDisposable {
|
|
67
|
+
/** The auth module: ``signIn``, ``signOut``, ``user``, ``onChange`` (OAuth path). */
|
|
68
|
+
readonly auth: Auth;
|
|
69
|
+
readonly baseUrl: string;
|
|
70
|
+
readonly clientId: string | undefined;
|
|
71
|
+
readonly library: Library;
|
|
72
|
+
readonly assets: Assets;
|
|
73
|
+
readonly sources: Sources;
|
|
74
|
+
readonly sessions: Sessions;
|
|
75
|
+
readonly rooms: Rooms;
|
|
76
|
+
private readonly apiKey;
|
|
77
|
+
private readonly defaultProject;
|
|
78
|
+
private readonly defaultCollection;
|
|
79
|
+
private readonly lifecycle;
|
|
80
|
+
private spacesPromise;
|
|
81
|
+
constructor(opts?: AtriumOptions);
|
|
82
|
+
/**
|
|
83
|
+
* ``fetch`` against this instance with the signed-in user's bearer token attached, silent refresh,
|
|
84
|
+
* and a one-shot retry on 401. Relative paths resolve against ``baseUrl``.
|
|
85
|
+
*/
|
|
86
|
+
fetch(path: string, init?: RequestInit): Promise<Response>;
|
|
87
|
+
/** Resolves once initial auth (callback handling / session resume) has settled. */
|
|
88
|
+
ready(): Promise<void>;
|
|
89
|
+
/** Abort any in-flight requests. Idempotent; called automatically by ``await using``. */
|
|
90
|
+
close(): Promise<void>;
|
|
91
|
+
[Symbol.asyncDispose]: () => Promise<void>;
|
|
92
|
+
/**
|
|
93
|
+
* Chat completion (``POST /v1/chat/completions``). Pass ``responseFormat`` a **Zod schema** for
|
|
94
|
+
* structured output: the reply is validated and the parsed value returned (with one repair turn,
|
|
95
|
+
* then {@link StructuredOutputError}). A raw ``responseFormat`` dict passes through as an OpenAI
|
|
96
|
+
* param. Streaming is a later pass.
|
|
97
|
+
*/
|
|
98
|
+
chat<T>(messages: string | ChatMessage[], opts: ChatOptions & {
|
|
99
|
+
responseFormat: ZodLike<T>;
|
|
100
|
+
}): Promise<T>;
|
|
101
|
+
chat(messages: string | ChatMessage[], opts?: ChatOptions): Promise<ChatReply>;
|
|
102
|
+
private chatParse;
|
|
103
|
+
/**
|
|
104
|
+
* Embed text or a media file into a vector (``POST /v1/embeddings``). Pass exactly one of
|
|
105
|
+
* ``text`` / ``image`` / ``audio`` / ``video``. ``model`` is required — an embedding's model is
|
|
106
|
+
* part of your data contract.
|
|
107
|
+
*/
|
|
108
|
+
embed(opts: EmbedOptions): Promise<number[]>;
|
|
109
|
+
/**
|
|
110
|
+
* Transcribe speech to text (``POST /v1/audio/transcriptions``). ``opts.verbose`` fills
|
|
111
|
+
* ``.language`` / ``.duration`` / ``.segments`` on the result; ``opts.format`` names the media
|
|
112
|
+
* type for nameless bytes.
|
|
113
|
+
*/
|
|
114
|
+
transcribe(audio: FileSource, opts?: TranscribeOptions): Promise<Transcript>;
|
|
115
|
+
/**
|
|
116
|
+
* Transcribe a live audio stream, yielding a {@link Transcript} per finalized sentence.
|
|
117
|
+
*
|
|
118
|
+
* **True streaming when the backend offers it, with a silent fallback.** The primary path opens the
|
|
119
|
+
* live transcription route (``WS /v1/audio/transcriptions/stream``) and pumps ``chunks`` up while
|
|
120
|
+
* reading transcript events down. If that route can't be reached — an old deploy, a proxy that
|
|
121
|
+
* strips the WebSocket upgrade, a refused connection — it degrades to the batch ``transcribe`` route
|
|
122
|
+
* (each chunk POSTed, finals only). A **rejected credential** (close 4401) is *not* a fallback case
|
|
123
|
+
* — it throws {@link AuthError}, since retrying won't heal it. The fallback is **connect-time only**:
|
|
124
|
+
* once live, a mid-session drop throws rather than silently degrading.
|
|
125
|
+
*
|
|
126
|
+
* By default (``partials`` off) it yields **finals only** — each a settled sentence with
|
|
127
|
+
* ``.final === true`` and ``.raw`` carrying ``start`` / ``end`` timings. ``partials`` additionally
|
|
128
|
+
* yields the live partial hypothesis (``.final === false``), a revisable guess at the current tail —
|
|
129
|
+
* render the latest, don't append.
|
|
130
|
+
*
|
|
131
|
+
* Input comes in two shapes: **container clips** (``format`` = ``"webm"`` / ``"wav"`` / … — each
|
|
132
|
+
* chunk a self-contained clip, the browser ``MediaRecorder`` shape) or **raw PCM**
|
|
133
|
+
* (``format="pcm16"``, a continuous PCM16LE-mono stream, which **requires** ``sampleRate`` because
|
|
134
|
+
* raw PCM is headerless). Passing ``sampleRate`` with a container format is an error.
|
|
135
|
+
*/
|
|
136
|
+
transcribeLive(chunks: AsyncIterable<AudioChunk>, opts?: TranscribeLiveOptions): AsyncGenerator<Transcript>;
|
|
137
|
+
transcribeStream(clips: AsyncIterable<AudioChunk>, opts: TranscribeStreamOptions): AsyncGenerator<Transcript>;
|
|
138
|
+
private streamToken;
|
|
139
|
+
private encodeMedia;
|
|
140
|
+
scope(project?: string, collection?: string): {
|
|
141
|
+
project?: string;
|
|
142
|
+
collection?: string;
|
|
143
|
+
};
|
|
144
|
+
/** Resolve a space name-or-id to its id via the client-cached space list (mirror of Python's
|
|
145
|
+
* ``_resolve_space``): an id passes through; a case-insensitive name maps to its id; an unknown
|
|
146
|
+
* value is returned as-is for the server to report. The list is fetched once and cached. */
|
|
147
|
+
resolveSpace(nameOrId: string): Promise<string>;
|
|
148
|
+
/** The full space list, fetched once and cached per client (shared with {@link resolveSpace}). */
|
|
149
|
+
cachedSpaces(): Promise<Space[]>;
|
|
150
|
+
/** The client's ``assets`` namespace — the binder threaded into every parsed asset so a bound
|
|
151
|
+
* ``asset.vectors()`` / ``.segments()`` / ``.index()`` resolves through this client. */
|
|
152
|
+
get assetBinder(): AssetBinder;
|
|
153
|
+
private send;
|
|
154
|
+
request(req: ShapedRequest, signal?: AbortSignal): Promise<unknown>;
|
|
155
|
+
requestBytes(req: ShapedRequest, signal?: AbortSignal): Promise<Uint8Array>;
|
|
156
|
+
private keyedFetch;
|
|
157
|
+
private resolveUrl;
|
|
158
|
+
private buildInit;
|
|
159
|
+
}
|
|
160
|
+
interface Scoped {
|
|
161
|
+
project?: string;
|
|
162
|
+
collection?: string;
|
|
163
|
+
signal?: AbortSignal;
|
|
164
|
+
}
|
|
165
|
+
export interface SearchOptions extends Scoped {
|
|
166
|
+
like?: Asset | SearchHit | string;
|
|
167
|
+
likeBy?: string;
|
|
168
|
+
modality?: string;
|
|
169
|
+
space?: string;
|
|
170
|
+
limit?: number;
|
|
171
|
+
tags?: string[];
|
|
172
|
+
anyTags?: string[];
|
|
173
|
+
excludeTags?: string[];
|
|
174
|
+
provider?: string | string[];
|
|
175
|
+
filters?: Filters;
|
|
176
|
+
image?: FileSource;
|
|
177
|
+
audio?: FileSource;
|
|
178
|
+
video?: FileSource;
|
|
179
|
+
vector?: number[];
|
|
180
|
+
/** Inline one vector per hit onto ``hit.vector`` (off by default — vectors are large and never
|
|
181
|
+
* leave Postgres in the search path). ``true`` returns the vector that scored the hit (its
|
|
182
|
+
* identity is the hit's ``matchedBy``); a space id/name returns that space's vector per hit (which
|
|
183
|
+
* can differ from the one that ranked it). */
|
|
184
|
+
includeVectors?: boolean | string;
|
|
185
|
+
}
|
|
186
|
+
export interface CompareOptions {
|
|
187
|
+
/** Force the embedding space (required for a raw ``vector`` operand or cross-modal operands). */
|
|
188
|
+
space?: string;
|
|
189
|
+
/** Fill {@link CompareResult.features} with per-feature terms — concept operands only (a plain
|
|
190
|
+
* asset/vector compare has no per-feature structure, so it stays ``undefined``). Read them as raw
|
|
191
|
+
* per-feature terms, not additive contributions (see {@link CompareFeature}). */
|
|
192
|
+
breakdown?: boolean;
|
|
193
|
+
signal?: AbortSignal;
|
|
194
|
+
}
|
|
195
|
+
export interface LibraryVectorsOptions {
|
|
196
|
+
/** The space(s) to fetch (id or human name, one or a list). Required — a bulk fetch is a
|
|
197
|
+
* single-select context. */
|
|
198
|
+
space: string | string[];
|
|
199
|
+
/** An exact stored signal to fetch. Omitted → per-asset resolution (one call can then return mixed
|
|
200
|
+
* ``matchedBy`` values across assets). */
|
|
201
|
+
matchBy?: string;
|
|
202
|
+
/** Throw if any id is missing (doesn't exist / isn't visible), listing them; default silently omits. */
|
|
203
|
+
strict?: boolean;
|
|
204
|
+
signal?: AbortSignal;
|
|
205
|
+
}
|
|
206
|
+
export interface TagOptions {
|
|
207
|
+
/** Also fetch the materialized concept boundary onto ``tag.snapshot``. */
|
|
208
|
+
includeSnapshot?: boolean;
|
|
209
|
+
signal?: AbortSignal;
|
|
210
|
+
}
|
|
211
|
+
export interface SessionListOptions {
|
|
212
|
+
project?: string;
|
|
213
|
+
/** Filter by study phase (a string or list); the empty string ``""`` matches sessions with no
|
|
214
|
+
* phase set. */
|
|
215
|
+
phase?: string | string[];
|
|
216
|
+
signal?: AbortSignal;
|
|
217
|
+
}
|
|
218
|
+
export interface SessionEventsOptions {
|
|
219
|
+
/** Return only events with ``seq`` greater than this (a sequence number, not a timestamp). */
|
|
220
|
+
after?: number;
|
|
221
|
+
/** Cap the page (1..500, server default 100). */
|
|
222
|
+
limit?: number;
|
|
223
|
+
signal?: AbortSignal;
|
|
224
|
+
}
|
|
225
|
+
export interface EnrichOptions {
|
|
226
|
+
/** The asset modality to enrich, e.g. ``"audio"``. */
|
|
227
|
+
modality: string;
|
|
228
|
+
tags?: string[];
|
|
229
|
+
total?: number;
|
|
230
|
+
/** Dry-run — return the candidates that *would* be pulled, importing nothing. */
|
|
231
|
+
preview?: boolean;
|
|
232
|
+
/** With ``preview`` off, stage synchronously and return the queued rows (else enqueue a job). */
|
|
233
|
+
wait?: boolean;
|
|
234
|
+
signal?: AbortSignal;
|
|
235
|
+
}
|
|
236
|
+
export interface TranscribeOptions {
|
|
237
|
+
model?: string;
|
|
238
|
+
language?: string;
|
|
239
|
+
prompt?: string;
|
|
240
|
+
/** Ask for segment timings + detected language (fills ``.segments`` / ``.language`` / ``.duration``). */
|
|
241
|
+
verbose?: boolean;
|
|
242
|
+
/** Override the inferred media format (e.g. ``"wav"``) — needed for nameless bytes. */
|
|
243
|
+
format?: string;
|
|
244
|
+
signal?: AbortSignal;
|
|
245
|
+
}
|
|
246
|
+
export interface TranscribeLiveOptions {
|
|
247
|
+
model?: string;
|
|
248
|
+
language?: string;
|
|
249
|
+
/** ``"pcm16"`` for a raw headerless PCM16LE-mono stream (needs ``sampleRate``), else a container
|
|
250
|
+
* format (default ``"wav"``) — each chunk a self-contained clip (the ``MediaRecorder`` shape). */
|
|
251
|
+
format?: string;
|
|
252
|
+
/** Required iff ``format: 'pcm16'`` (raw PCM carries no embedded rate); rejected otherwise. */
|
|
253
|
+
sampleRate?: number;
|
|
254
|
+
/** Also yield revisable partial hypotheses (``.final === false``) — the streaming path only. */
|
|
255
|
+
partials?: boolean;
|
|
256
|
+
/** Drop finalized sentences that transcribe to empty text (default ``true``). */
|
|
257
|
+
skipEmpty?: boolean;
|
|
258
|
+
/** Injected ``WebSocket`` constructor for the stream handshake (defaults to the runtime global) —
|
|
259
|
+
* the test seam, and the Node <22 escape hatch (no global ``WebSocket``). */
|
|
260
|
+
webSocketCtor?: WebSocketCtor;
|
|
261
|
+
}
|
|
262
|
+
export interface SearchByExamplesOptions extends Scoped {
|
|
263
|
+
negatives?: OperandLike[];
|
|
264
|
+
method?: "centroid" | "cav" | "probe";
|
|
265
|
+
limit?: number;
|
|
266
|
+
matchBy?: string[] | Record<string, number>;
|
|
267
|
+
filters?: Filters;
|
|
268
|
+
spaces?: string[];
|
|
269
|
+
features?: Record<string, unknown>;
|
|
270
|
+
contrastSamples?: number;
|
|
271
|
+
}
|
|
272
|
+
export interface AssetListOptions extends Scoped {
|
|
273
|
+
modality?: string;
|
|
274
|
+
contentKind?: string[];
|
|
275
|
+
limit?: number;
|
|
276
|
+
cursor?: string;
|
|
277
|
+
}
|
|
278
|
+
export interface UploadOptions {
|
|
279
|
+
modality?: string;
|
|
280
|
+
description?: string;
|
|
281
|
+
collection?: string;
|
|
282
|
+
signal?: AbortSignal;
|
|
283
|
+
}
|
|
284
|
+
export interface SourcesSearchOptions {
|
|
285
|
+
providers?: string | string[];
|
|
286
|
+
k?: number;
|
|
287
|
+
mode?: string;
|
|
288
|
+
modality?: string;
|
|
289
|
+
signal?: AbortSignal;
|
|
290
|
+
}
|
|
291
|
+
export interface SourceImportOptions {
|
|
292
|
+
candidate?: Candidate;
|
|
293
|
+
sourceId?: string;
|
|
294
|
+
externalId?: string;
|
|
295
|
+
modality?: string;
|
|
296
|
+
description?: string;
|
|
297
|
+
signal?: AbortSignal;
|
|
298
|
+
}
|
|
299
|
+
export interface SessionStartOptions {
|
|
300
|
+
project?: string;
|
|
301
|
+
name?: string;
|
|
302
|
+
participantRef?: string;
|
|
303
|
+
/** The experimental condition/arm the session belongs to. */
|
|
304
|
+
condition?: string;
|
|
305
|
+
meta?: Record<string, unknown>;
|
|
306
|
+
signal?: AbortSignal;
|
|
307
|
+
}
|
|
308
|
+
export interface SessionEventOptions {
|
|
309
|
+
payload?: Record<string, unknown>;
|
|
310
|
+
source?: string;
|
|
311
|
+
via?: Record<string, unknown>;
|
|
312
|
+
signal?: AbortSignal;
|
|
313
|
+
}
|
|
314
|
+
/** Live-connection knobs shared by ``rooms.open`` / ``rooms.get`` / ``rooms.join`` (all optional). */
|
|
315
|
+
export interface LiveRoomOptions {
|
|
316
|
+
/** Stable presence identity for the returned handle (e.g. ``"host:studio"``). */
|
|
317
|
+
identity?: string;
|
|
318
|
+
/** Presence announce metadata peers see on join. */
|
|
319
|
+
announce?: Record<string, unknown>;
|
|
320
|
+
/** Default ``room.request`` timeout (ms). */
|
|
321
|
+
requestTimeout?: number;
|
|
322
|
+
/** Reconnect on unexpected drop (default true). */
|
|
323
|
+
reconnect?: boolean;
|
|
324
|
+
/** Signal transport preference (default ``"auto"`` — WS, falling back to SSE behind a proxy that
|
|
325
|
+
* strips WS upgrades, like the production edge). */
|
|
326
|
+
transport?: RoomTransportMode;
|
|
327
|
+
/** Injected ``WebSocket`` constructor (Node <22 has none global; also the test seam). */
|
|
328
|
+
WebSocketCtor?: WebSocketCtor;
|
|
329
|
+
/** Injected ``fetch`` for the SSE transport / roster reads — the test seam. */
|
|
330
|
+
fetchImpl?: FetchImpl;
|
|
331
|
+
/** Aborting this closes the returned room handle. */
|
|
332
|
+
signal?: AbortSignal;
|
|
333
|
+
}
|
|
334
|
+
export interface RoomOpenOptions extends LiveRoomOptions {
|
|
335
|
+
name?: string;
|
|
336
|
+
project?: string;
|
|
337
|
+
embeddingSpace?: string;
|
|
338
|
+
}
|
|
339
|
+
export interface ChatOptions {
|
|
340
|
+
model?: string;
|
|
341
|
+
responseFormat?: ZodLike | Record<string, unknown>;
|
|
342
|
+
strictParams?: boolean;
|
|
343
|
+
signal?: AbortSignal;
|
|
344
|
+
[key: string]: unknown;
|
|
345
|
+
}
|
|
346
|
+
export interface EmbedOptions {
|
|
347
|
+
model: string;
|
|
348
|
+
text?: string;
|
|
349
|
+
image?: FileSource;
|
|
350
|
+
audio?: FileSource;
|
|
351
|
+
video?: FileSource;
|
|
352
|
+
format?: string;
|
|
353
|
+
signal?: AbortSignal;
|
|
354
|
+
}
|
|
355
|
+
/** Semantic library search and mood-board (search-by-examples) queries. */
|
|
356
|
+
export declare class Library {
|
|
357
|
+
private readonly c;
|
|
358
|
+
constructor(c: ClientInternal);
|
|
359
|
+
/** List the searchable embedding spaces (``GET /v1/library/spaces``). */
|
|
360
|
+
spaces(opts?: {
|
|
361
|
+
signal?: AbortSignal;
|
|
362
|
+
}): Promise<Space[]>;
|
|
363
|
+
/**
|
|
364
|
+
* Resolve ``modality`` to the deployment's default space (or ``undefined``).
|
|
365
|
+
*
|
|
366
|
+
* So an app never has to hardcode a deployment's space ids — those leak deployment config into
|
|
367
|
+
* caller code. The deployment declares its defaults (``defaultModalities``); the app just asks.
|
|
368
|
+
* Returns the first space whose ``defaultModalities`` include ``modality``, else the first whose
|
|
369
|
+
* ``modalities`` include it, else ``undefined`` — reading the client's cached space list (no
|
|
370
|
+
* per-call refetch). The returned space's ``id`` is what search/scoring take as ``space``.
|
|
371
|
+
*/
|
|
372
|
+
defaultSpace(modality: string): Promise<Space | undefined>;
|
|
373
|
+
/** Semantic search — by text, an example asset (``like``), a media file, or a raw ``vector``. */
|
|
374
|
+
search(query?: string, opts?: SearchOptions): Promise<SearchHit[]>;
|
|
375
|
+
/** Find assets similar to a *set* of example assets (a mood board). */
|
|
376
|
+
searchByExamples(positives: OperandLike[], opts?: SearchByExamplesOptions): Promise<SearchByExamplesHit[]>;
|
|
377
|
+
/**
|
|
378
|
+
* Compare two operands and return their similarity (raw + calibrated when available). Each operand
|
|
379
|
+
* is an ``Asset``, a bare text string, or a ``by.*`` marker — ``by.asset(id)`` for a bare id,
|
|
380
|
+
* ``by.vector([…])`` for a raw vector, ``by.file(…)`` for a file, ``by.concept(name)`` for a tag's
|
|
381
|
+
* concept. ``space`` forces the embedding space (required for a raw vector or cross-modal pair).
|
|
382
|
+
*/
|
|
383
|
+
compare(a: OperandLike, b: OperandLike, opts?: CompareOptions): Promise<CompareResult>;
|
|
384
|
+
/**
|
|
385
|
+
* Pull external candidates (Freesound / Openverse / …) for a query into the library. ``preview``
|
|
386
|
+
* is a dry-run that returns the candidates that *would* be pulled. The response is the raw payload
|
|
387
|
+
* (a deliberately unwrapped long tail — preview steps, or the staged/enqueued result).
|
|
388
|
+
*/
|
|
389
|
+
enrich(query: string, opts: EnrichOptions): Promise<Record<string, unknown>>;
|
|
390
|
+
/**
|
|
391
|
+
* Fetch stored embedding vectors for many assets at once (``POST /v1/library/vectors``,
|
|
392
|
+
* member-gated). ``ids`` elements are ``Asset`` objects, ``SearchHit`` results, or bare id strings.
|
|
393
|
+
* ``space`` (id or human name, one or a list) selects the space(s); ``matchBy`` picks an exact
|
|
394
|
+
* stored signal. **With ``matchBy`` omitted the signal is resolved per asset**, so one call can
|
|
395
|
+
* return mixed ``matchedBy`` values across assets — read {@link AssetVector.matchedBy}. Ids that
|
|
396
|
+
* don't exist or aren't visible land in the server's ``missing`` list: default silently omits them;
|
|
397
|
+
* ``strict: true`` throws, listing them.
|
|
398
|
+
*/
|
|
399
|
+
vectors(ids: AssetRef[], opts: LibraryVectorsOptions): Promise<AssetVector[]>;
|
|
400
|
+
private resolveSpaceArg;
|
|
401
|
+
/** List the tag definitions in scope (``GET /v1/library/tags``) — read-only. Inherits the
|
|
402
|
+
* client's collection scoping (own + inherited tags, else the root Library's vocabulary). Tag
|
|
403
|
+
* create/update/delete stay platform-only. */
|
|
404
|
+
tags(opts?: {
|
|
405
|
+
signal?: AbortSignal;
|
|
406
|
+
}): Promise<TagDefinition[]>;
|
|
407
|
+
/** Fetch one tag definition by name or id (``GET /v1/library/tags/{ref}``) — read-only. The name
|
|
408
|
+
* is resolved within the client's collection scope. ``includeSnapshot: true`` also fetches the
|
|
409
|
+
* materialized concept boundary onto ``tag.snapshot``. */
|
|
410
|
+
tag(nameOrId: string, opts?: TagOptions): Promise<TagDefinition>;
|
|
411
|
+
}
|
|
412
|
+
/** Browse and fetch asset metadata. */
|
|
413
|
+
export declare class Assets {
|
|
414
|
+
private readonly c;
|
|
415
|
+
constructor(c: ClientInternal);
|
|
416
|
+
/** List assets in scope, newest first (``GET /v1/assets``). */
|
|
417
|
+
list(opts?: AssetListOptions): Promise<AssetPage>;
|
|
418
|
+
/** Fetch a single asset's metadata (``GET /v1/assets/{id}``). */
|
|
419
|
+
get(assetId: string, opts?: {
|
|
420
|
+
collection?: string;
|
|
421
|
+
signal?: AbortSignal;
|
|
422
|
+
}): Promise<Asset>;
|
|
423
|
+
/**
|
|
424
|
+
* Fetch one asset's stored embedding vectors (``GET /v1/assets/{id}/vectors``, public by-id).
|
|
425
|
+
* ``assetOrId`` is an ``Asset``, a ``SearchHit``, or a bare id. No ``space``/``matchBy`` returns
|
|
426
|
+
* every stored vector; ``space`` (id or human name, one or a list) and ``matchBy`` (a coarse class
|
|
427
|
+
* like ``native``/``manual``, or an exact value like ``bridge:text``/``seg:<id>``) narrow them.
|
|
428
|
+
* Also available as the bound ``asset.vectors(...)``.
|
|
429
|
+
*/
|
|
430
|
+
vectors(assetOrId: AssetRef, opts?: AssetVectorsOptions): Promise<AssetVector[]>;
|
|
431
|
+
/** Fetch one asset's sound-event segments (``GET /v1/assets/{id}/segments``, public by-id). Each
|
|
432
|
+
* {@link SegmentRef} carries a ``contentUrl`` for just that slice's pre-cut bytes. Also available
|
|
433
|
+
* as the bound ``asset.segments()``. */
|
|
434
|
+
segments(assetOrId: AssetRef): Promise<SegmentRef[]>;
|
|
435
|
+
/** Fetch one asset's per-signal index map (``GET /v1/assets/{id}/index``, authenticated). Each
|
|
436
|
+
* {@link IndexEntry} is one stored signal's processing state; the server's internal ``via``
|
|
437
|
+
* surfaces as ``matchedBy``. Also available as the bound ``asset.index()``. */
|
|
438
|
+
index(assetOrId: AssetRef): Promise<IndexEntry[]>;
|
|
439
|
+
/** Upload a file to the library (``POST /v1/assets``); it indexes in the background. */
|
|
440
|
+
upload(file: FileSource, opts?: UploadOptions): Promise<Asset>;
|
|
441
|
+
}
|
|
442
|
+
/** External sources — search several providers at once, then import what you pick. */
|
|
443
|
+
export declare class Sources {
|
|
444
|
+
private readonly c;
|
|
445
|
+
constructor(c: ClientInternal);
|
|
446
|
+
/** List the registered external sources (``GET /v1/library/sources``). */
|
|
447
|
+
list(opts?: {
|
|
448
|
+
signal?: AbortSignal;
|
|
449
|
+
}): Promise<SourceInfo[]>;
|
|
450
|
+
/** Search external sources for a query (``POST /v1/library/sources/search``) — read-only. */
|
|
451
|
+
search(query: string, opts?: SourcesSearchOptions): Promise<SourceSearchResult>;
|
|
452
|
+
/** Import one candidate into the shared library (``POST …/{source}/import``). */
|
|
453
|
+
import(opts: SourceImportOptions): Promise<Asset>;
|
|
454
|
+
}
|
|
455
|
+
/** Start / resume sessions and append to their durable log. */
|
|
456
|
+
export declare class Sessions {
|
|
457
|
+
private readonly c;
|
|
458
|
+
constructor(c: ClientInternal);
|
|
459
|
+
/** Start a new session — a standalone durable record (``POST /v1/sessions``). */
|
|
460
|
+
start(opts?: SessionStartOptions): Promise<Session>;
|
|
461
|
+
/** Resume an existing session by id (``GET /v1/sessions/{id}``) — the live {@link Session} handle
|
|
462
|
+
* for continued logging. For a read-only analysis view use {@link get}, which GETs the same route
|
|
463
|
+
* but returns a {@link SessionInfo} read model. */
|
|
464
|
+
resume(sessionId: string, opts?: {
|
|
465
|
+
signal?: AbortSignal;
|
|
466
|
+
}): Promise<Session>;
|
|
467
|
+
/** List a project's sessions, newest first (``GET /v1/sessions``) — the read model. No ``project``
|
|
468
|
+
* → the client's default project. ``phase`` (a string or list) filters by study phase; the empty
|
|
469
|
+
* string ``""`` matches sessions with no phase set. Each row is a {@link SessionInfo};
|
|
470
|
+
* ``hasTranscript`` is ``null`` in list results (only {@link get} populates it). There is no
|
|
471
|
+
* participant filter server-side — filter the returned rows on ``participantRef`` yourself. */
|
|
472
|
+
list(opts?: SessionListOptions): Promise<SessionInfo[]>;
|
|
473
|
+
/** Fetch a session's read model for analysis (``GET /v1/sessions/{id}``) — a {@link SessionInfo}
|
|
474
|
+
* with ``hasTranscript`` populated. This is the **read model**; to keep *writing* to the log use
|
|
475
|
+
* {@link resume}, which GETs the same route but returns the live {@link Session} handle. */
|
|
476
|
+
get(sessionId: string, opts?: {
|
|
477
|
+
signal?: AbortSignal;
|
|
478
|
+
}): Promise<SessionInfo>;
|
|
479
|
+
/** A session's durable event log as flat rows (``GET /v1/sessions/{id}/events/history``). ``after``
|
|
480
|
+
* returns only events with ``seq`` greater than it (a sequence number, not a timestamp); ``limit``
|
|
481
|
+
* caps the page (1..500, server default 100). Each row is a {@link ReadSessionEvent}. */
|
|
482
|
+
events(sessionId: string, opts?: SessionEventsOptions): Promise<ReadSessionEvent[]>;
|
|
483
|
+
/**
|
|
484
|
+
* Export one session's data as raw bytes, dispatching ``format`` to its fixed export route.
|
|
485
|
+
* ``"jsonl"`` / ``"csv"`` are the event log; ``"transcript"`` is the plain-text transcript (404s
|
|
486
|
+
* when the session has none); ``"bundle"`` is a zip of everything. There is no ``?format=`` param
|
|
487
|
+
* server-side — each is a distinct path.
|
|
488
|
+
*
|
|
489
|
+
* Returns a ``Uint8Array``: the SDK is browser + Node, and the core never touches the filesystem
|
|
490
|
+
* (``files.ts``), so there is no ``path=`` file-writing (a Node caller writes the bytes itself).
|
|
491
|
+
*/
|
|
492
|
+
export(sessionId: string, format?: SessionExportFormat, opts?: {
|
|
493
|
+
signal?: AbortSignal;
|
|
494
|
+
}): Promise<Uint8Array>;
|
|
495
|
+
/** Export several sessions as one zip (``GET /v1/sessions/export/bundle``), returned as raw bytes.
|
|
496
|
+
* ``ids`` is required; the server caps a call at 100 **distinct** ids — more (or an empty list)
|
|
497
|
+
* throws (never silently truncated or chunked). Data access is required on every id. */
|
|
498
|
+
exportBundle(ids: string[], opts?: {
|
|
499
|
+
signal?: AbortSignal;
|
|
500
|
+
}): Promise<Uint8Array>;
|
|
501
|
+
/** Append a durable event to a session's log (``POST /v1/sessions/{id}/events``). */
|
|
502
|
+
event(sessionId: string, type: string, opts?: SessionEventOptions): Promise<SessionEvent>;
|
|
503
|
+
}
|
|
504
|
+
/** Open / fetch / join rooms — each returns a live {@link Room} handle (connect, send, on, request,
|
|
505
|
+
* player controls, audio signals). ``connect()`` (called for you by any wire method) opens the socket. */
|
|
506
|
+
export declare class Rooms {
|
|
507
|
+
private readonly c;
|
|
508
|
+
constructor(c: ClientInternal);
|
|
509
|
+
private wrap;
|
|
510
|
+
/** Open a room (``POST /v1/rooms``) and return a live handle. */
|
|
511
|
+
open(opts?: RoomOpenOptions): Promise<Room>;
|
|
512
|
+
/** Fetch a room by id (``GET /v1/rooms/{id}``) and return a live handle. */
|
|
513
|
+
get(roomId: string, opts?: LiveRoomOptions): Promise<Room>;
|
|
514
|
+
/** List the rooms you can see (``GET /v1/rooms``) as live handles. */
|
|
515
|
+
list(opts?: {
|
|
516
|
+
signal?: AbortSignal;
|
|
517
|
+
}): Promise<Room[]>;
|
|
518
|
+
/** Join a room by its connect code (``GET /v1/rooms/resolve``) — a participant handle that can
|
|
519
|
+
* ``send`` / ``on`` / ``request`` / play / consume audio, but not manage the room. */
|
|
520
|
+
join(code: string, opts?: LiveRoomOptions): Promise<Room>;
|
|
521
|
+
}
|
|
522
|
+
//# sourceMappingURL=atrium.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atrium.d.ts","sourceRoot":"","sources":["../src/atrium.ts"],"names":[],"mappings":"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"}
|