@ohm_studio/sdk-core 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.
- package/dist/client.d.ts +41 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +151 -14
- package/dist/client.js.map +1 -1
- package/dist/mock.d.ts +11 -0
- package/dist/mock.d.ts.map +1 -0
- package/dist/mock.js +71 -0
- package/dist/mock.js.map +1 -0
- package/dist/types.d.ts +46 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +6 -8
package/dist/client.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AudioExtractInput, AudioExtractResult, AudioTranscribeInput, AudioTranscribeResult, ExtractInput, ExtractResult, InsightsInput, InsightsResult, OHMClientOptions, SummarizeInput, SummarizeResult, UsageEvent } from "./types";
|
|
1
|
+
import type { AudioExtractInput, AudioExtractResult, AudioTranscribeInput, AudioTranscribeResult, ExtractInput, ExtractResult, InsightsInput, InsightsResult, OHMClientOptions, StreamChunk, SummarizeInput, SummarizeResult, UsageEvent } from "./types";
|
|
2
2
|
/**
|
|
3
3
|
* Platform-agnostic core client. Subclasses (sdk-js, sdk-react-native)
|
|
4
4
|
* supply the platform-specific multipart/audio adapter via the `attachAudio`
|
|
@@ -12,11 +12,27 @@ export declare abstract class OHMCoreClient {
|
|
|
12
12
|
protected readonly maxRetries: number;
|
|
13
13
|
protected readonly fetchImpl: typeof fetch;
|
|
14
14
|
protected readonly onUsage?: (e: UsageEvent) => void;
|
|
15
|
+
protected readonly _mock: boolean;
|
|
16
|
+
protected readonly _mockResponses?: OHMClientOptions["mockResponses"];
|
|
15
17
|
constructor(opts: OHMClientOptions);
|
|
16
18
|
/** Audio surface — subclasses fill in the multipart adapter. */
|
|
17
19
|
audio: {
|
|
18
20
|
transcribe: (input: AudioTranscribeInput) => Promise<AudioTranscribeResult>;
|
|
19
21
|
extract: <T = Record<string, unknown>>(input: AudioExtractInput) => Promise<AudioExtractResult<T>>;
|
|
22
|
+
/**
|
|
23
|
+
* Streaming variant of audio.extract — returns an AsyncIterable of
|
|
24
|
+
* StreamChunk events so UI can update transcript-then-fields as each
|
|
25
|
+
* step finishes. Backend uses Server-Sent Events.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* const stream = ohm.audio.extract.stream({ apiSlug, file });
|
|
29
|
+
* for await (const chunk of stream) {
|
|
30
|
+
* if (chunk.type === "transcript") setT(chunk.transcript);
|
|
31
|
+
* if (chunk.type === "data") setData(chunk.data);
|
|
32
|
+
* if (chunk.type === "error") throw new Error(chunk.message);
|
|
33
|
+
* }
|
|
34
|
+
*/
|
|
35
|
+
extractStream: <T = Record<string, unknown>>(input: AudioExtractInput) => AsyncIterable<StreamChunk<T>>;
|
|
20
36
|
};
|
|
21
37
|
extract<T = Record<string, unknown>>(input: ExtractInput): Promise<ExtractResult<T>>;
|
|
22
38
|
summarize(input: SummarizeInput): Promise<SummarizeResult>;
|
|
@@ -27,6 +43,30 @@ export declare abstract class OHMCoreClient {
|
|
|
27
43
|
file: any;
|
|
28
44
|
fields?: Record<string, string>;
|
|
29
45
|
}): Promise<T>;
|
|
46
|
+
/**
|
|
47
|
+
* Default SSE-based streaming for audio.extract.stream. Subclasses
|
|
48
|
+
* override `runMultipart` to construct the FormData body for their
|
|
49
|
+
* platform; this method reuses that body and parses an SSE event stream
|
|
50
|
+
* off the response.
|
|
51
|
+
*
|
|
52
|
+
* Each SSE message is a JSON object matching `StreamChunk`. The stream
|
|
53
|
+
* ends on the first `done` or `error` chunk (or when the response body
|
|
54
|
+
* closes). Errors during transport are surfaced as a synthetic
|
|
55
|
+
* `{ type: "error", message }` chunk so consumers always see one final
|
|
56
|
+
* frame.
|
|
57
|
+
*/
|
|
58
|
+
protected runMultipartStream<T>(opts: {
|
|
59
|
+
path: string;
|
|
60
|
+
file: any;
|
|
61
|
+
fields?: Record<string, string>;
|
|
62
|
+
}): AsyncGenerator<StreamChunk<T>>;
|
|
63
|
+
/**
|
|
64
|
+
* Builds a `FormData` (web/Node) or RN-shaped FormData. Subclasses
|
|
65
|
+
* already do this inside `runMultipart`; the streaming path needs the
|
|
66
|
+
* same logic. Default implementation throws — overrides should
|
|
67
|
+
* implement.
|
|
68
|
+
*/
|
|
69
|
+
protected buildMultipartBody(_file: unknown, _fields?: Record<string, string>): Promise<unknown>;
|
|
30
70
|
protected requestRaw<T>(method: string, path: string, init: RequestInit): Promise<T>;
|
|
31
71
|
private parseError;
|
|
32
72
|
}
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACrB,YAAY,EACZ,aAAa,EACb,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,UAAU,EACX,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACrB,YAAY,EACZ,aAAa,EACb,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,eAAe,EACf,UAAU,EACX,MAAM,SAAS,CAAC;AAOjB;;;;GAIG;AACH,8BAAsB,aAAa;IACjC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACnC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACnC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IACrC,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IACtC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,KAAK,CAAC;IAC3C,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IACrD,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IAClC,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,gBAAgB,CAAC,eAAe,CAAC,CAAC;gBAE1D,IAAI,EAAE,gBAAgB;IAmBlC,gEAAgE;IAChE,KAAK;4BACiB,oBAAoB,KAAG,OAAO,CAAC,qBAAqB,CAAC;kBAU/D,CAAC,mCACF,iBAAiB,KACvB,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;QAejC;;;;;;;;;;;;WAYG;wBACa,CAAC,mCACR,iBAAiB,KACvB,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;MAgBhC;IAEI,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAetB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAS1D,QAAQ,CAAC,CAAC,GAAG,OAAO,EACxB,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;cAcb,WAAW,CAAC,CAAC,EAC3B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,GACb,OAAO,CAAC,CAAC,CAAC;IAOb,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE;QACvC,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,GAAG,CAAC;QACV,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACjC,GAAG,OAAO,CAAC,CAAC,CAAC;IAEd;;;;;;;;;;;OAWG;cACc,kBAAkB,CAAC,CAAC,EAAE,IAAI,EAAE;QAC3C,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,GAAG,CAAC;QACV,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACjC,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IA4DlC;;;;;OAKG;IACH,SAAS,CAAC,kBAAkB,CAC1B,KAAK,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,OAAO,CAAC;cAOH,UAAU,CAAC,CAAC,EAC1B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,CAAC,CAAC;YA4DC,UAAU;CAkCzB"}
|
package/dist/client.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { OHMAuthError, OHMConfigError, OHMError, OHMRateLimitError, OHMServerError, OHMValidationError, } from "./errors";
|
|
2
2
|
import { backoffMs, isRetriableStatus } from "./retry";
|
|
3
|
+
import { mockResponseFor } from "./mock";
|
|
3
4
|
const DEFAULT_BASE_URL = "https://api.ohm.doctor";
|
|
4
5
|
const DEFAULT_TIMEOUT_MS = 60_000;
|
|
5
6
|
const DEFAULT_MAX_RETRIES = 2;
|
|
@@ -16,8 +17,12 @@ export class OHMCoreClient {
|
|
|
16
17
|
maxRetries;
|
|
17
18
|
fetchImpl;
|
|
18
19
|
onUsage;
|
|
20
|
+
_mock;
|
|
21
|
+
_mockResponses;
|
|
19
22
|
constructor(opts) {
|
|
20
|
-
|
|
23
|
+
// In mock mode the client doesn't need real auth — let tests construct
|
|
24
|
+
// freely. In normal mode at least one of apiKey/jwt is required.
|
|
25
|
+
if (!opts.mock && !opts.apiKey && !opts.jwt) {
|
|
21
26
|
throw new OHMConfigError({
|
|
22
27
|
message: "OHM client requires either `apiKey` or `jwt`",
|
|
23
28
|
});
|
|
@@ -29,24 +34,65 @@ export class OHMCoreClient {
|
|
|
29
34
|
this.maxRetries = opts.maxRetries ?? DEFAULT_MAX_RETRIES;
|
|
30
35
|
this.fetchImpl = opts.fetch ?? globalThis.fetch.bind(globalThis);
|
|
31
36
|
this.onUsage = opts.onUsage;
|
|
37
|
+
this._mock = !!opts.mock;
|
|
38
|
+
this._mockResponses = opts.mockResponses;
|
|
32
39
|
}
|
|
33
40
|
/** Audio surface — subclasses fill in the multipart adapter. */
|
|
34
41
|
audio = {
|
|
35
|
-
transcribe: (input) =>
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
42
|
+
transcribe: (input) => {
|
|
43
|
+
if (this._mock) {
|
|
44
|
+
return Promise.resolve(mockResponseFor.transcribe(this._mockResponses));
|
|
45
|
+
}
|
|
46
|
+
return this.runMultipart({
|
|
47
|
+
path: "/api/studio/v1/audio/transcribe",
|
|
48
|
+
file: input.file,
|
|
49
|
+
fields: input.language ? { language: input.language } : undefined,
|
|
50
|
+
});
|
|
51
|
+
},
|
|
52
|
+
extract: (input) => {
|
|
53
|
+
if (this._mock) {
|
|
54
|
+
return Promise.resolve(mockResponseFor.audioExtract(input.apiSlug, this._mockResponses));
|
|
55
|
+
}
|
|
56
|
+
return this.runMultipart({
|
|
57
|
+
path: `/api/studio/v1/audio/extract/${encodeURIComponent(input.apiSlug)}`,
|
|
58
|
+
file: input.file,
|
|
59
|
+
fields: {
|
|
60
|
+
...(input.language ? { language: input.language } : {}),
|
|
61
|
+
...(input.inputs ? { inputs: JSON.stringify(input.inputs) } : {}),
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
},
|
|
65
|
+
/**
|
|
66
|
+
* Streaming variant of audio.extract — returns an AsyncIterable of
|
|
67
|
+
* StreamChunk events so UI can update transcript-then-fields as each
|
|
68
|
+
* step finishes. Backend uses Server-Sent Events.
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* const stream = ohm.audio.extract.stream({ apiSlug, file });
|
|
72
|
+
* for await (const chunk of stream) {
|
|
73
|
+
* if (chunk.type === "transcript") setT(chunk.transcript);
|
|
74
|
+
* if (chunk.type === "data") setData(chunk.data);
|
|
75
|
+
* if (chunk.type === "error") throw new Error(chunk.message);
|
|
76
|
+
* }
|
|
77
|
+
*/
|
|
78
|
+
extractStream: (input) => {
|
|
79
|
+
if (this._mock) {
|
|
80
|
+
return mockResponseFor.audioExtractStream(input.apiSlug, this._mockResponses);
|
|
81
|
+
}
|
|
82
|
+
return this.runMultipartStream({
|
|
83
|
+
path: `/api/studio/v1/audio/extract/${encodeURIComponent(input.apiSlug)}/stream`,
|
|
84
|
+
file: input.file,
|
|
85
|
+
fields: {
|
|
86
|
+
...(input.language ? { language: input.language } : {}),
|
|
87
|
+
...(input.inputs ? { inputs: JSON.stringify(input.inputs) } : {}),
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
},
|
|
48
91
|
};
|
|
49
92
|
async extract(input) {
|
|
93
|
+
if (this._mock) {
|
|
94
|
+
return mockResponseFor.extract(input.apiSlug, this._mockResponses);
|
|
95
|
+
}
|
|
50
96
|
return this.requestJson("POST", `/api/studio/v1/extract/${encodeURIComponent(input.apiSlug)}`, {
|
|
51
97
|
text: input.text,
|
|
52
98
|
inputs: input.inputs,
|
|
@@ -54,9 +100,13 @@ export class OHMCoreClient {
|
|
|
54
100
|
});
|
|
55
101
|
}
|
|
56
102
|
async summarize(input) {
|
|
103
|
+
if (this._mock)
|
|
104
|
+
return mockResponseFor.summarize(this._mockResponses);
|
|
57
105
|
return this.requestJson("POST", "/api/studio/v1/summarize", input);
|
|
58
106
|
}
|
|
59
107
|
async insights(input) {
|
|
108
|
+
if (this._mock)
|
|
109
|
+
return mockResponseFor.insights(this._mockResponses);
|
|
60
110
|
return this.requestJson("POST", `/api/studio/v1/insights/${encodeURIComponent(input.apiSlug)}`, {
|
|
61
111
|
transcript: input.transcript,
|
|
62
112
|
priorNoteSummary: input.priorNoteSummary,
|
|
@@ -69,6 +119,93 @@ export class OHMCoreClient {
|
|
|
69
119
|
body: body !== undefined ? JSON.stringify(body) : undefined,
|
|
70
120
|
});
|
|
71
121
|
}
|
|
122
|
+
/**
|
|
123
|
+
* Default SSE-based streaming for audio.extract.stream. Subclasses
|
|
124
|
+
* override `runMultipart` to construct the FormData body for their
|
|
125
|
+
* platform; this method reuses that body and parses an SSE event stream
|
|
126
|
+
* off the response.
|
|
127
|
+
*
|
|
128
|
+
* Each SSE message is a JSON object matching `StreamChunk`. The stream
|
|
129
|
+
* ends on the first `done` or `error` chunk (or when the response body
|
|
130
|
+
* closes). Errors during transport are surfaced as a synthetic
|
|
131
|
+
* `{ type: "error", message }` chunk so consumers always see one final
|
|
132
|
+
* frame.
|
|
133
|
+
*/
|
|
134
|
+
async *runMultipartStream(opts) {
|
|
135
|
+
const url = `${this.baseUrl}${opts.path}`;
|
|
136
|
+
const headers = { Accept: "text/event-stream" };
|
|
137
|
+
if (this.apiKey)
|
|
138
|
+
headers.Authorization = `Bearer ${this.apiKey}`;
|
|
139
|
+
else if (this.jwt)
|
|
140
|
+
headers.Authorization = `Bearer ${this.jwt}`;
|
|
141
|
+
headers["X-OHM-Client"] = "@ohm_studio/sdk@0.2.0";
|
|
142
|
+
const body = (await this.buildMultipartBody(opts.file, opts.fields));
|
|
143
|
+
let res;
|
|
144
|
+
try {
|
|
145
|
+
res = await this.fetchImpl(url, { method: "POST", headers, body });
|
|
146
|
+
}
|
|
147
|
+
catch (err) {
|
|
148
|
+
yield { type: "error", message: err?.message || "network error" };
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
if (!res.ok || !res.body) {
|
|
152
|
+
yield {
|
|
153
|
+
type: "error",
|
|
154
|
+
message: `HTTP ${res.status}`,
|
|
155
|
+
code: String(res.status),
|
|
156
|
+
};
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
const reader = res.body.getReader();
|
|
160
|
+
const decoder = new TextDecoder();
|
|
161
|
+
let buf = "";
|
|
162
|
+
try {
|
|
163
|
+
while (true) {
|
|
164
|
+
const { value, done } = await reader.read();
|
|
165
|
+
if (done)
|
|
166
|
+
break;
|
|
167
|
+
buf += decoder.decode(value, { stream: true });
|
|
168
|
+
// SSE messages are separated by blank lines. Each message can have
|
|
169
|
+
// multiple `data:` fields; we concatenate them.
|
|
170
|
+
let sep;
|
|
171
|
+
while ((sep = buf.indexOf("\n\n")) !== -1) {
|
|
172
|
+
const block = buf.slice(0, sep);
|
|
173
|
+
buf = buf.slice(sep + 2);
|
|
174
|
+
const dataLines = block
|
|
175
|
+
.split(/\r?\n/)
|
|
176
|
+
.filter((l) => l.startsWith("data:"))
|
|
177
|
+
.map((l) => l.slice(5).trimStart());
|
|
178
|
+
if (dataLines.length === 0)
|
|
179
|
+
continue;
|
|
180
|
+
const payload = dataLines.join("\n");
|
|
181
|
+
try {
|
|
182
|
+
const parsed = JSON.parse(payload);
|
|
183
|
+
yield parsed;
|
|
184
|
+
if (parsed.type === "done" || parsed.type === "error")
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
yield { type: "error", message: "malformed stream event" };
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
catch (err) {
|
|
195
|
+
yield { type: "error", message: err?.message || "stream broken" };
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Builds a `FormData` (web/Node) or RN-shaped FormData. Subclasses
|
|
200
|
+
* already do this inside `runMultipart`; the streaming path needs the
|
|
201
|
+
* same logic. Default implementation throws — overrides should
|
|
202
|
+
* implement.
|
|
203
|
+
*/
|
|
204
|
+
buildMultipartBody(_file, _fields) {
|
|
205
|
+
throw new OHMConfigError({
|
|
206
|
+
message: "Streaming requires the SDK wrapper to implement buildMultipartBody",
|
|
207
|
+
});
|
|
208
|
+
}
|
|
72
209
|
async requestRaw(method, path, init) {
|
|
73
210
|
const url = `${this.baseUrl}${path}`;
|
|
74
211
|
const headers = new Headers(init.headers || {});
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,cAAc,EACd,QAAQ,EACR,iBAAiB,EACjB,cAAc,EACd,kBAAkB,GACnB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAgBvD,MAAM,gBAAgB,GAAG,wBAAwB,CAAC;AAClD,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAClC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAE9B;;;;GAIG;AACH,MAAM,OAAgB,aAAa;IACd,OAAO,CAAS;IAChB,MAAM,CAAU;IAChB,GAAG,CAAU;IACb,SAAS,CAAS;IAClB,UAAU,CAAS;IACnB,SAAS,CAAe;IACxB,OAAO,CAA2B;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/mock.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { AudioExtractResult, AudioTranscribeResult, ExtractResult, InsightsResult, OHMClientOptions, StreamChunk, SummarizeResult } from "./types";
|
|
2
|
+
export declare const mockResponseFor: {
|
|
3
|
+
extract<T = Record<string, unknown>>(apiSlug: string, overrides?: OHMClientOptions["mockResponses"]): ExtractResult<T>;
|
|
4
|
+
transcribe(overrides?: OHMClientOptions["mockResponses"]): AudioTranscribeResult;
|
|
5
|
+
audioExtract<T = Record<string, unknown>>(apiSlug: string, overrides?: OHMClientOptions["mockResponses"]): AudioExtractResult<T>;
|
|
6
|
+
summarize(overrides?: OHMClientOptions["mockResponses"]): SummarizeResult;
|
|
7
|
+
insights<T = unknown>(overrides?: OHMClientOptions["mockResponses"]): InsightsResult<T>;
|
|
8
|
+
/** Async iterator that emits the canned stream chunks for tests. */
|
|
9
|
+
audioExtractStream<T = Record<string, unknown>>(apiSlug: string, overrides?: OHMClientOptions["mockResponses"]): AsyncGenerator<StreamChunk<T>>;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=mock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../src/mock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,qBAAqB,EACrB,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,eAAe,EAChB,MAAM,SAAS,CAAC;AA+BjB,eAAO,MAAM,eAAe;YAClB,CAAC,qCACE,MAAM,cACH,gBAAgB,CAAC,eAAe,CAAC,GAC5C,aAAa,CAAC,CAAC,CAAC;2BAQL,gBAAgB,CAAC,eAAe,CAAC,GAC5C,qBAAqB;iBASX,CAAC,qCACH,MAAM,cACH,gBAAgB,CAAC,eAAe,CAAC,GAC5C,kBAAkB,CAAC,CAAC,CAAC;0BASV,gBAAgB,CAAC,eAAe,CAAC,GAC5C,eAAe;aAQT,CAAC,wBACI,gBAAgB,CAAC,eAAe,CAAC,GAC5C,cAAc,CAAC,CAAC,CAAC;IAUpB,oEAAoE;uBAC1C,CAAC,qCAChB,MAAM,cACH,gBAAgB,CAAC,eAAe,CAAC,GAC5C,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;CAOlC,CAAC"}
|
package/dist/mock.js
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deterministic mock responses used when `new OHM({ mock: true })`. Output
|
|
3
|
+
* is realistic enough for UI snapshots + integration tests without ever
|
|
4
|
+
* hitting the network. Customers can override per-method via `mockResponses`.
|
|
5
|
+
*/
|
|
6
|
+
const SAMPLE_DATA = {
|
|
7
|
+
vitals: {
|
|
8
|
+
bp: { systolic: 130, diastolic: 85 },
|
|
9
|
+
hr: 92,
|
|
10
|
+
temp: 38.6,
|
|
11
|
+
spo2: 97,
|
|
12
|
+
},
|
|
13
|
+
diagnoses: [{ name: "Fever", status: "active" }],
|
|
14
|
+
medications: [
|
|
15
|
+
{
|
|
16
|
+
name: "Paracetamol",
|
|
17
|
+
dosage: "650mg",
|
|
18
|
+
frequency: "TDS",
|
|
19
|
+
duration: "5 days",
|
|
20
|
+
},
|
|
21
|
+
],
|
|
22
|
+
};
|
|
23
|
+
const SAMPLE_TRANSCRIPT = "Patient is a 35-year-old male presenting with fever for 3 days. " +
|
|
24
|
+
"Blood pressure is 130 over 85, heart rate 92, temperature 38.6 Celsius. " +
|
|
25
|
+
"Started on Paracetamol 650mg three times a day for 5 days.";
|
|
26
|
+
export const mockResponseFor = {
|
|
27
|
+
extract(apiSlug, overrides) {
|
|
28
|
+
return overrides?.extract ?? {
|
|
29
|
+
data: SAMPLE_DATA,
|
|
30
|
+
apiSlug,
|
|
31
|
+
version: "mock@v0",
|
|
32
|
+
};
|
|
33
|
+
},
|
|
34
|
+
transcribe(overrides) {
|
|
35
|
+
return (overrides?.transcribe ?? {
|
|
36
|
+
transcript: SAMPLE_TRANSCRIPT,
|
|
37
|
+
language: "en",
|
|
38
|
+
durationSec: 28,
|
|
39
|
+
});
|
|
40
|
+
},
|
|
41
|
+
audioExtract(apiSlug, overrides) {
|
|
42
|
+
return overrides?.audioExtract ?? {
|
|
43
|
+
transcript: SAMPLE_TRANSCRIPT,
|
|
44
|
+
language: "en",
|
|
45
|
+
data: SAMPLE_DATA,
|
|
46
|
+
apiSlug,
|
|
47
|
+
};
|
|
48
|
+
},
|
|
49
|
+
summarize(overrides) {
|
|
50
|
+
return (overrides?.summarize ?? {
|
|
51
|
+
summary: "- 35-year-old male, fever 3 days\n- BP 130/85, HR 92, temp 38.6°C\n- Started on Paracetamol 650mg TDS",
|
|
52
|
+
});
|
|
53
|
+
},
|
|
54
|
+
insights(overrides) {
|
|
55
|
+
return (overrides?.insights ?? ({
|
|
56
|
+
insights: {
|
|
57
|
+
riskFactors: ["fever > 3 days"],
|
|
58
|
+
differentials: ["Viral fever", "Dengue"],
|
|
59
|
+
},
|
|
60
|
+
}));
|
|
61
|
+
},
|
|
62
|
+
/** Async iterator that emits the canned stream chunks for tests. */
|
|
63
|
+
async *audioExtractStream(apiSlug, overrides) {
|
|
64
|
+
const t = this.transcribe(overrides);
|
|
65
|
+
yield { type: "transcript", transcript: t.transcript, language: t.language };
|
|
66
|
+
const d = this.audioExtract(apiSlug, overrides);
|
|
67
|
+
yield { type: "data", data: d.data, apiSlug };
|
|
68
|
+
yield { type: "done", latencyMs: 42 };
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=mock.js.map
|
package/dist/mock.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock.js","sourceRoot":"","sources":["../src/mock.ts"],"names":[],"mappings":"AAUA;;;;GAIG;AAEH,MAAM,WAAW,GAAG;IAClB,MAAM,EAAE;QACN,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE;QACpC,EAAE,EAAE,EAAE;QACN,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,EAAE;KACT;IACD,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,QAAiB,EAAE,CAAC;IACzD,WAAW,EAAE;QACX;YACE,IAAI,EAAE,aAAa;YACnB,MAAM,EAAE,OAAO;YACf,SAAS,EAAE,KAAK;YAChB,QAAQ,EAAE,QAAQ;SACnB;KACF;CACF,CAAC;AAEF,MAAM,iBAAiB,GACrB,kEAAkE;IAClE,0EAA0E;IAC1E,4DAA4D,CAAC;AAE/D,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,OAAO,CACL,OAAe,EACf,SAA6C;QAE7C,OAAQ,SAAS,EAAE,OAA4B,IAAI;YACjD,IAAI,EAAE,WAA2B;YACjC,OAAO;YACP,OAAO,EAAE,SAAS;SACnB,CAAC;IACJ,CAAC;IACD,UAAU,CACR,SAA6C;QAE7C,OAAO,CACL,SAAS,EAAE,UAAU,IAAI;YACvB,UAAU,EAAE,iBAAiB;YAC7B,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,EAAE;SAChB,CACF,CAAC;IACJ,CAAC;IACD,YAAY,CACV,OAAe,EACf,SAA6C;QAE7C,OAAQ,SAAS,EAAE,YAAsC,IAAI;YAC3D,UAAU,EAAE,iBAAiB;YAC7B,QAAQ,EAAE,IAAI;YACd,IAAI,EAAE,WAA2B;YACjC,OAAO;SACR,CAAC;IACJ,CAAC;IACD,SAAS,CACP,SAA6C;QAE7C,OAAO,CACL,SAAS,EAAE,SAAS,IAAI;YACtB,OAAO,EACL,uGAAuG;SAC1G,CACF,CAAC;IACJ,CAAC;IACD,QAAQ,CACN,SAA6C;QAE7C,OAAO,CACJ,SAAS,EAAE,QAA8B,IAAI,CAAC;YAC7C,QAAQ,EAAE;gBACR,WAAW,EAAE,CAAC,gBAAgB,CAAC;gBAC/B,aAAa,EAAE,CAAC,aAAa,EAAE,QAAQ,CAAC;aACzB;SAClB,CAAC,CACH,CAAC;IACJ,CAAC;IACD,oEAAoE;IACpE,KAAK,CAAC,CAAC,kBAAkB,CACvB,OAAe,EACf,SAA6C;QAE7C,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACrC,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC7E,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAI,OAAO,EAAE,SAAS,CAAC,CAAC;QACnD,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;QAC9C,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IACxC,CAAC;CACF,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -22,6 +22,28 @@ export interface OHMClientOptions {
|
|
|
22
22
|
* runtime. Documented at docs.ohm.doctor/security/rn-key-handling.
|
|
23
23
|
*/
|
|
24
24
|
acknowledgeBundledKey?: boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Mock mode. When true, every method returns deterministic canned data
|
|
27
|
+
* without hitting the network. Use this in unit tests or local
|
|
28
|
+
* preview builds where you don't want to debit a real key.
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* const ohm = new OHM({ apiKey: "test", mock: true });
|
|
32
|
+
* const { data } = await ohm.extract({ apiSlug: "x", text: "..." });
|
|
33
|
+
* // data is a stub matching ExtractResult shape
|
|
34
|
+
*/
|
|
35
|
+
mock?: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Override the canned mock responses for specific methods. Only consulted
|
|
38
|
+
* when `mock: true`. Useful for golden-path test fixtures.
|
|
39
|
+
*/
|
|
40
|
+
mockResponses?: Partial<{
|
|
41
|
+
extract: ExtractResult;
|
|
42
|
+
transcribe: AudioTranscribeResult;
|
|
43
|
+
audioExtract: AudioExtractResult;
|
|
44
|
+
summarize: SummarizeResult;
|
|
45
|
+
insights: InsightsResult;
|
|
46
|
+
}>;
|
|
25
47
|
}
|
|
26
48
|
export interface UsageEvent {
|
|
27
49
|
endpoint: string;
|
|
@@ -78,4 +100,28 @@ export interface InsightsInput {
|
|
|
78
100
|
export interface InsightsResult<T = unknown> {
|
|
79
101
|
insights: T;
|
|
80
102
|
}
|
|
103
|
+
/**
|
|
104
|
+
* Streaming chunk emitted by `ohm.audio.extract.stream(...)`.
|
|
105
|
+
* Server emits, in order:
|
|
106
|
+
* 1. `transcript` — STT finished, transcript available
|
|
107
|
+
* 2. `data` — extraction finished, structured JSON available
|
|
108
|
+
* 3. `done` — stream complete (always last)
|
|
109
|
+
* `error` — surfaced if any step fails; consumer should break
|
|
110
|
+
*/
|
|
111
|
+
export type StreamChunk<T = Record<string, unknown>> = {
|
|
112
|
+
type: "transcript";
|
|
113
|
+
transcript: string;
|
|
114
|
+
language?: string;
|
|
115
|
+
} | {
|
|
116
|
+
type: "data";
|
|
117
|
+
data: T;
|
|
118
|
+
apiSlug: string;
|
|
119
|
+
} | {
|
|
120
|
+
type: "done";
|
|
121
|
+
latencyMs: number;
|
|
122
|
+
} | {
|
|
123
|
+
type: "error";
|
|
124
|
+
message: string;
|
|
125
|
+
code?: string;
|
|
126
|
+
};
|
|
81
127
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,MAAM,WAAW,gBAAgB;IAC/B,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oFAAoF;IACpF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB;;;OAGG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACtC;;;OAGG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ohm_studio/sdk-core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Shared core for @ohm/sdk and @ohm/sdk-react-native — http client, types, errors, retry, streaming. Use one of the platform wrappers instead of consuming this directly.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"publishConfig": {
|
|
@@ -22,14 +22,12 @@
|
|
|
22
22
|
"import": "./dist/index.js"
|
|
23
23
|
}
|
|
24
24
|
},
|
|
25
|
-
"files": [
|
|
26
|
-
"dist"
|
|
27
|
-
],
|
|
28
|
-
"devDependencies": {
|
|
29
|
-
"typescript": "^5.8.3"
|
|
30
|
-
},
|
|
25
|
+
"files": ["dist"],
|
|
31
26
|
"scripts": {
|
|
32
27
|
"build": "tsc -p tsconfig.json",
|
|
33
28
|
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
29
|
+
},
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"typescript": "^5.8.3"
|
|
34
32
|
}
|
|
35
|
-
}
|
|
33
|
+
}
|