@ohm_studio/sdk 0.5.3 → 0.6.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/README.md +49 -1
- package/dist/index.d.ts +11 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +97 -3
- package/dist/index.js.map +1 -1
- package/dist/react/index.d.ts +71 -0
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +137 -5
- package/dist/react/index.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -68,6 +68,31 @@ function Recorder() {
|
|
|
68
68
|
}
|
|
69
69
|
```
|
|
70
70
|
|
|
71
|
+
## Cancellation, upload progress, and discovery (v0.6+)
|
|
72
|
+
|
|
73
|
+
Every method now accepts a `signal?: AbortSignal`. `audio.transcribe`
|
|
74
|
+
and `audio.extract` accept an `onProgress` callback. `ohm.apis.list()`
|
|
75
|
+
enumerates published Studio APIs.
|
|
76
|
+
|
|
77
|
+
```ts
|
|
78
|
+
const controller = new AbortController();
|
|
79
|
+
|
|
80
|
+
const { data } = await ohm.audio.extract({
|
|
81
|
+
apiSlug: "opd-clinic",
|
|
82
|
+
file: blob,
|
|
83
|
+
signal: controller.signal, // user clicks Cancel → controller.abort()
|
|
84
|
+
onProgress: ({ percent }) => setUploadPct(percent),
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
const apis = await ohm.apis.list(); // [{ slug, name, status, version }]
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
The React hooks (`useOhmExtract`, `useOhmAudioExtract`,
|
|
91
|
+
`useOhmSummarize`, `useRecorder`) auto-abort on unmount and on the next
|
|
92
|
+
mutation, so navigating away mid-upload never debits a half-finished
|
|
93
|
+
call. Aborts surface as `OHMAbortError` (`code: "aborted"`) — pattern
|
|
94
|
+
match to ignore them.
|
|
95
|
+
|
|
71
96
|
## Error handling
|
|
72
97
|
|
|
73
98
|
```ts
|
|
@@ -75,17 +100,40 @@ import {
|
|
|
75
100
|
OHMAuthError,
|
|
76
101
|
OHMRateLimitError,
|
|
77
102
|
OHMValidationError,
|
|
103
|
+
OHMAbortError,
|
|
78
104
|
} from "@ohm_studio/sdk";
|
|
79
105
|
|
|
80
106
|
try {
|
|
81
107
|
await ohm.extract({ apiSlug: "opd", text });
|
|
82
108
|
} catch (e) {
|
|
83
|
-
if (e instanceof
|
|
109
|
+
if (e instanceof OHMAbortError) return; // user cancelled
|
|
110
|
+
if (e instanceof OHMRateLimitError) await sleep(e.retryAfterSec! * 1000);
|
|
84
111
|
if (e instanceof OHMAuthError) rotateKey();
|
|
85
112
|
if (e instanceof OHMValidationError) showFieldErrors(e.fields);
|
|
86
113
|
}
|
|
87
114
|
```
|
|
88
115
|
|
|
116
|
+
## Typed `data` with the Studio CLI
|
|
117
|
+
|
|
118
|
+
Pair this SDK with [`@ohm_studio/cli`](https://www.npmjs.com/package/@ohm_studio/cli)
|
|
119
|
+
to generate TypeScript interfaces from your published Studio API
|
|
120
|
+
schemas:
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
npm install -D @ohm_studio/cli
|
|
124
|
+
npx ohm-studio pull-all --out src/ohm
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
```ts
|
|
128
|
+
import type { OpdClinicData } from "./ohm/opd-clinic";
|
|
129
|
+
|
|
130
|
+
const { data } = await ohm.extract<OpdClinicData>({
|
|
131
|
+
apiSlug: "opd-clinic",
|
|
132
|
+
text: transcript,
|
|
133
|
+
});
|
|
134
|
+
// `data` is typed against your Studio schema
|
|
135
|
+
```
|
|
136
|
+
|
|
89
137
|
## Bundle size
|
|
90
138
|
|
|
91
139
|
`@ohm_studio/sdk` core ships < 25 KB gzipped. React hooks subentry adds ~3 KB. Zero polyfills for Node 18+ / modern browsers.
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { OHMCoreClient } from "@ohm_studio/sdk-core";
|
|
2
|
-
import type { OHMInit } from "@ohm_studio/sdk-core";
|
|
2
|
+
import type { OHMInit, UploadProgressEvent } from "@ohm_studio/sdk-core";
|
|
3
3
|
export * from "@ohm_studio/sdk-core";
|
|
4
4
|
export { Recorder, RecorderError, isRecordingSupported } from "./recorder";
|
|
5
5
|
export type { RecorderOptions, RecorderState, RecorderErrorCode, MicrophoneInfo, } from "./recorder";
|
|
@@ -29,7 +29,17 @@ export declare class OHM extends OHMCoreClient {
|
|
|
29
29
|
path: string;
|
|
30
30
|
file: any;
|
|
31
31
|
fields?: Record<string, string>;
|
|
32
|
+
signal?: AbortSignal;
|
|
33
|
+
onProgress?: (event: UploadProgressEvent) => void;
|
|
32
34
|
}): Promise<T>;
|
|
35
|
+
/**
|
|
36
|
+
* XHR-based multipart for environments that expose upload progress.
|
|
37
|
+
* Used when the caller passes `onProgress`. Mirrors `requestRaw`'s
|
|
38
|
+
* error-mapping (auth / 4xx / 5xx → typed OHMError subclasses) and
|
|
39
|
+
* abort semantics, minus the timeout-retry loop — onProgress requests
|
|
40
|
+
* are typically long uploads that the caller is already monitoring.
|
|
41
|
+
*/
|
|
42
|
+
private runMultipartXhr;
|
|
33
43
|
/**
|
|
34
44
|
* Build a browser/Node FormData from one of:
|
|
35
45
|
* - browser File
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,aAAa,EAId,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EACV,OAAO,EACP,mBAAmB,EACpB,MAAM,sBAAsB,CAAC;AAE9B,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAC3E,YAAY,EACV,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,aAAa,EACb,YAAY,EACZ,cAAc,EACd,eAAe,EACf,eAAe,EACf,sBAAsB,GACvB,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAEpD;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,GAAI,SAAQ,aAAa;gBACxB,IAAI,EAAE,OAAO;cAIT,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE;QACpC,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,GAAG,CAAC;QACV,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;KACnD,GAAG,OAAO,CAAC,CAAC,CAAC;IAuBd;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;IAmFvB;;;;;;;;OAQG;cACa,kBAAkB,CAChC,IAAI,EAAE,OAAO,EACb,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,OAAO,CAAC,QAAQ,CAAC;CAuBrB;AAED,eAAe,GAAG,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { OHMCoreClient } from "@ohm_studio/sdk-core";
|
|
1
|
+
import { OHMAbortError, OHMAuthError, OHMCoreClient, OHMRateLimitError, OHMServerError, OHMValidationError, } from "@ohm_studio/sdk-core";
|
|
2
2
|
export * from "@ohm_studio/sdk-core";
|
|
3
3
|
export { Recorder, RecorderError, isRecordingSupported } from "./recorder";
|
|
4
4
|
export { saveRecording, getRecording, listRecordings, removeRecording, clearRecordings, isPersistenceSupported, } from "./persist";
|
|
@@ -25,8 +25,102 @@ export class OHM extends OHMCoreClient {
|
|
|
25
25
|
super(init);
|
|
26
26
|
}
|
|
27
27
|
async runMultipart(opts) {
|
|
28
|
-
const fd = await this.buildMultipartBody(opts.file, opts.fields);
|
|
29
|
-
|
|
28
|
+
const fd = (await this.buildMultipartBody(opts.file, opts.fields));
|
|
29
|
+
// When the caller wants upload progress AND the runtime exposes
|
|
30
|
+
// XMLHttpRequest (browser + RN; Node 20+ also has it via undici),
|
|
31
|
+
// route through XHR — `fetch` has no upload-progress API. The
|
|
32
|
+
// fallback fetch path keeps zero-overhead for callers who don't ask
|
|
33
|
+
// for progress.
|
|
34
|
+
if (opts.onProgress && typeof XMLHttpRequest !== "undefined") {
|
|
35
|
+
return this.runMultipartXhr({
|
|
36
|
+
path: opts.path,
|
|
37
|
+
body: fd,
|
|
38
|
+
signal: opts.signal,
|
|
39
|
+
onProgress: opts.onProgress,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
return this.requestRaw("POST", opts.path, { body: fd }, { signal: opts.signal });
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* XHR-based multipart for environments that expose upload progress.
|
|
46
|
+
* Used when the caller passes `onProgress`. Mirrors `requestRaw`'s
|
|
47
|
+
* error-mapping (auth / 4xx / 5xx → typed OHMError subclasses) and
|
|
48
|
+
* abort semantics, minus the timeout-retry loop — onProgress requests
|
|
49
|
+
* are typically long uploads that the caller is already monitoring.
|
|
50
|
+
*/
|
|
51
|
+
runMultipartXhr(opts) {
|
|
52
|
+
const url = `${this.baseUrl}${opts.path}`;
|
|
53
|
+
const apiKey = this.apiKey;
|
|
54
|
+
const jwt = this.jwt;
|
|
55
|
+
return new Promise((resolve, reject) => {
|
|
56
|
+
if (opts.signal?.aborted) {
|
|
57
|
+
reject(new OHMAbortError());
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const xhr = new XMLHttpRequest();
|
|
61
|
+
xhr.open("POST", url, true);
|
|
62
|
+
if (apiKey)
|
|
63
|
+
xhr.setRequestHeader("Authorization", `Bearer ${apiKey}`);
|
|
64
|
+
else if (jwt)
|
|
65
|
+
xhr.setRequestHeader("Authorization", `Bearer ${jwt}`);
|
|
66
|
+
xhr.setRequestHeader("X-OHM-Client", "@ohm_studio/sdk@0.6.0");
|
|
67
|
+
xhr.upload.onprogress = (ev) => {
|
|
68
|
+
const total = ev.lengthComputable ? ev.total : 0;
|
|
69
|
+
const loaded = ev.loaded;
|
|
70
|
+
const percent = total > 0 ? Math.round((loaded / total) * 1000) / 10 : 0;
|
|
71
|
+
opts.onProgress({ loaded, total, percent });
|
|
72
|
+
};
|
|
73
|
+
xhr.onerror = () => reject(new OHMServerError({
|
|
74
|
+
message: "Network error during upload",
|
|
75
|
+
status: 0,
|
|
76
|
+
}));
|
|
77
|
+
xhr.onabort = () => reject(new OHMAbortError());
|
|
78
|
+
xhr.onload = () => {
|
|
79
|
+
const status = xhr.status;
|
|
80
|
+
const requestId = xhr.getResponseHeader("x-request-id") ||
|
|
81
|
+
xhr.getResponseHeader("x-ohm-request-id") ||
|
|
82
|
+
undefined;
|
|
83
|
+
let body = {};
|
|
84
|
+
try {
|
|
85
|
+
body = xhr.responseText ? JSON.parse(xhr.responseText) : {};
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
body = { message: xhr.responseText };
|
|
89
|
+
}
|
|
90
|
+
if (status >= 200 && status < 300) {
|
|
91
|
+
resolve(body);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const message = body?.message || `HTTP ${status}`;
|
|
95
|
+
if (status === 401 || status === 403) {
|
|
96
|
+
reject(new OHMAuthError({ message, status, requestId }));
|
|
97
|
+
}
|
|
98
|
+
else if (status === 422 || status === 400) {
|
|
99
|
+
reject(new OHMValidationError({
|
|
100
|
+
message,
|
|
101
|
+
status,
|
|
102
|
+
requestId,
|
|
103
|
+
fields: body?.fields,
|
|
104
|
+
}));
|
|
105
|
+
}
|
|
106
|
+
else if (status === 429) {
|
|
107
|
+
const retryAfter = xhr.getResponseHeader("retry-after");
|
|
108
|
+
reject(new OHMRateLimitError({
|
|
109
|
+
message,
|
|
110
|
+
status,
|
|
111
|
+
requestId,
|
|
112
|
+
retryAfterSec: retryAfter ? Number(retryAfter) : body?.retryAfterSec,
|
|
113
|
+
}));
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
reject(new OHMServerError({ message, status, requestId }));
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
if (opts.signal) {
|
|
120
|
+
opts.signal.addEventListener("abort", () => xhr.abort(), { once: true });
|
|
121
|
+
}
|
|
122
|
+
xhr.send(opts.body);
|
|
123
|
+
});
|
|
30
124
|
}
|
|
31
125
|
/**
|
|
32
126
|
* Build a browser/Node FormData from one of:
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/react/index.d.ts
CHANGED
|
@@ -6,29 +6,100 @@ export declare function OhmProvider({ client, children, }: {
|
|
|
6
6
|
client: OHM;
|
|
7
7
|
children: ReactNode;
|
|
8
8
|
}): import("react").FunctionComponentElement<import("react").ProviderProps<OHM | null>>;
|
|
9
|
+
/**
|
|
10
|
+
* React hook for `ohm.extract` (text → structured JSON).
|
|
11
|
+
*
|
|
12
|
+
* Returns the standard `{ data, error, isPending, mutate, mutateAsync,
|
|
13
|
+
* reset }` shape — matches TanStack Query's mutation API so it drops in
|
|
14
|
+
* cleanly. The `apiSlug` is bound at hook construction; only the per-call
|
|
15
|
+
* inputs (`text`, `inputs`) are passed to `mutate(...)`.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* function NotePanel() {
|
|
19
|
+
* const m = useOhmExtract({ apiSlug: "opd-clinic" });
|
|
20
|
+
*
|
|
21
|
+
* async function onSubmit(transcript: string) {
|
|
22
|
+
* const r = await m.mutateAsync({ text: transcript });
|
|
23
|
+
* form.setValues(r.data);
|
|
24
|
+
* }
|
|
25
|
+
*
|
|
26
|
+
* if (m.error) return <ErrorPanel err={m.error} />;
|
|
27
|
+
* if (m.isPending) return <Spinner />;
|
|
28
|
+
* return <Form onSubmit={onSubmit} />;
|
|
29
|
+
* }
|
|
30
|
+
*/
|
|
9
31
|
export declare function useOhmExtract<T = Record<string, unknown>>(opts: {
|
|
10
32
|
apiSlug: string;
|
|
11
33
|
}): {
|
|
12
34
|
mutateAsync: (input: Omit<ExtractInput, "apiSlug">) => Promise<ExtractResult<T>>;
|
|
13
35
|
mutate: (input: Omit<ExtractInput, "apiSlug">) => void;
|
|
36
|
+
/**
|
|
37
|
+
* Cancel the in-flight mutation, if any. Idempotent. Useful when
|
|
38
|
+
* the user explicitly clicks a Cancel button instead of navigating
|
|
39
|
+
* away (the unmount auto-cancel handles the latter).
|
|
40
|
+
*/
|
|
41
|
+
cancel: () => void;
|
|
14
42
|
reset: () => void;
|
|
15
43
|
data: ExtractResult<T> | null;
|
|
16
44
|
error: Error | null;
|
|
17
45
|
isPending: boolean;
|
|
18
46
|
};
|
|
47
|
+
/**
|
|
48
|
+
* React hook for `ohm.audio.extract` (audio file → transcript + structured
|
|
49
|
+
* JSON in one call). Pair with the {@link useRecorder} hook (or your own
|
|
50
|
+
* recorder) — the file you get from `recorder.stop()` is the file you
|
|
51
|
+
* pass to `mutate({ file })`.
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* const m = useOhmAudioExtract({ apiSlug: "opd-clinic" });
|
|
55
|
+
*
|
|
56
|
+
* async function onStop(blob: Blob) {
|
|
57
|
+
* const r = await m.mutateAsync({ file: blob, language: "auto" });
|
|
58
|
+
* setTranscript(r.transcript); // English
|
|
59
|
+
* form.setValues(r.data);
|
|
60
|
+
* }
|
|
61
|
+
*/
|
|
19
62
|
export declare function useOhmAudioExtract<T = Record<string, unknown>>(opts: {
|
|
20
63
|
apiSlug: string;
|
|
21
64
|
}): {
|
|
22
65
|
mutateAsync: (input: Omit<AudioExtractInput, "apiSlug">) => Promise<AudioExtractResult<T>>;
|
|
23
66
|
mutate: (input: Omit<AudioExtractInput, "apiSlug">) => void;
|
|
67
|
+
/**
|
|
68
|
+
* Cancel the in-flight mutation, if any. Idempotent. Useful when
|
|
69
|
+
* the user explicitly clicks a Cancel button instead of navigating
|
|
70
|
+
* away (the unmount auto-cancel handles the latter).
|
|
71
|
+
*/
|
|
72
|
+
cancel: () => void;
|
|
24
73
|
reset: () => void;
|
|
25
74
|
data: AudioExtractResult<T> | null;
|
|
26
75
|
error: Error | null;
|
|
27
76
|
isPending: boolean;
|
|
28
77
|
};
|
|
78
|
+
/**
|
|
79
|
+
* React hook for `ohm.summarize` (free clinical text → summary in one of
|
|
80
|
+
* 4 styles: patient / handover / executive / progress-note).
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* const m = useOhmSummarize();
|
|
84
|
+
*
|
|
85
|
+
* async function buildPatientLetter(consult: string) {
|
|
86
|
+
* const r = await m.mutateAsync({
|
|
87
|
+
* text: consult,
|
|
88
|
+
* style: "patient",
|
|
89
|
+
* maxLines: 5,
|
|
90
|
+
* });
|
|
91
|
+
* showLetter(r.summary);
|
|
92
|
+
* }
|
|
93
|
+
*/
|
|
29
94
|
export declare function useOhmSummarize(): {
|
|
30
95
|
mutateAsync: (input: SummarizeInput) => Promise<SummarizeResult>;
|
|
31
96
|
mutate: (input: SummarizeInput) => void;
|
|
97
|
+
/**
|
|
98
|
+
* Cancel the in-flight mutation, if any. Idempotent. Useful when
|
|
99
|
+
* the user explicitly clicks a Cancel button instead of navigating
|
|
100
|
+
* away (the unmount auto-cancel handles the latter).
|
|
101
|
+
*/
|
|
102
|
+
cancel: () => void;
|
|
32
103
|
reset: () => void;
|
|
33
104
|
data: SummarizeResult | null;
|
|
34
105
|
error: Error | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,cAAc,EACd,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAEL,aAAa,EACb,KAAK,eAAe,EACpB,KAAK,aAAa,EACnB,MAAM,aAAa,CAAC;AAkBrB,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,QAAQ,GACT,EAAE;IACD,MAAM,EAAE,GAAG,CAAC;IACZ,QAAQ,EAAE,SAAS,CAAC;CACrB,uFAEA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"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"}
|
package/dist/react/index.js
CHANGED
|
@@ -27,15 +27,63 @@ function useOhmMutation(fn) {
|
|
|
27
27
|
error: null,
|
|
28
28
|
isPending: false,
|
|
29
29
|
});
|
|
30
|
+
// Each mutateAsync owns one AbortController. We abort the previous one
|
|
31
|
+
// on a fresh mutate call (overlapping mutations are a UX antipattern in
|
|
32
|
+
// clinical apps — the user will see whichever finishes last) AND on
|
|
33
|
+
// unmount. Callers can still pass their own `signal` in `input`; both
|
|
34
|
+
// signals will trip the request.
|
|
35
|
+
const acRef = useRef(null);
|
|
36
|
+
const mountedRef = useRef(true);
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
mountedRef.current = true;
|
|
39
|
+
return () => {
|
|
40
|
+
mountedRef.current = false;
|
|
41
|
+
try {
|
|
42
|
+
acRef.current?.abort();
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
/* ignore */
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
}, []);
|
|
30
49
|
const mutateAsync = useCallback(async (input) => {
|
|
50
|
+
// Abort any in-flight previous call from this hook instance.
|
|
51
|
+
try {
|
|
52
|
+
acRef.current?.abort();
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
/* ignore */
|
|
56
|
+
}
|
|
57
|
+
const ac = new AbortController();
|
|
58
|
+
acRef.current = ac;
|
|
59
|
+
// Bridge caller-supplied signal into ours — either source aborts.
|
|
60
|
+
if (input.signal) {
|
|
61
|
+
if (input.signal.aborted)
|
|
62
|
+
ac.abort();
|
|
63
|
+
else
|
|
64
|
+
input.signal.addEventListener("abort", () => ac.abort(), {
|
|
65
|
+
once: true,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
31
68
|
setState({ data: null, error: null, isPending: true });
|
|
32
69
|
try {
|
|
33
|
-
const data = await fn(client, input);
|
|
34
|
-
|
|
70
|
+
const data = await fn(client, { ...input, signal: ac.signal });
|
|
71
|
+
if (!mountedRef.current)
|
|
72
|
+
return data;
|
|
73
|
+
if (acRef.current === ac) {
|
|
74
|
+
setState({ data, error: null, isPending: false });
|
|
75
|
+
}
|
|
35
76
|
return data;
|
|
36
77
|
}
|
|
37
78
|
catch (err) {
|
|
38
|
-
|
|
79
|
+
// Swallow aborts — they're caused by unmount or a fresh mutate
|
|
80
|
+
// call; surfacing them as errors confuses callers and triggers
|
|
81
|
+
// spurious error UI on navigation.
|
|
82
|
+
if (err?.code === "aborted")
|
|
83
|
+
throw err;
|
|
84
|
+
if (mountedRef.current && acRef.current === ac) {
|
|
85
|
+
setState({ data: null, error: err, isPending: false });
|
|
86
|
+
}
|
|
39
87
|
throw err;
|
|
40
88
|
}
|
|
41
89
|
}, [client, fn]);
|
|
@@ -43,17 +91,85 @@ function useOhmMutation(fn) {
|
|
|
43
91
|
...state,
|
|
44
92
|
mutateAsync,
|
|
45
93
|
mutate: (input) => {
|
|
46
|
-
void mutateAsync(input)
|
|
94
|
+
void mutateAsync(input).catch(() => {
|
|
95
|
+
/* state already captured the error */
|
|
96
|
+
});
|
|
97
|
+
},
|
|
98
|
+
/**
|
|
99
|
+
* Cancel the in-flight mutation, if any. Idempotent. Useful when
|
|
100
|
+
* the user explicitly clicks a Cancel button instead of navigating
|
|
101
|
+
* away (the unmount auto-cancel handles the latter).
|
|
102
|
+
*/
|
|
103
|
+
cancel: () => {
|
|
104
|
+
try {
|
|
105
|
+
acRef.current?.abort();
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
/* ignore */
|
|
109
|
+
}
|
|
47
110
|
},
|
|
48
111
|
reset: () => setState({ data: null, error: null, isPending: false }),
|
|
49
112
|
};
|
|
50
113
|
}
|
|
114
|
+
/**
|
|
115
|
+
* React hook for `ohm.extract` (text → structured JSON).
|
|
116
|
+
*
|
|
117
|
+
* Returns the standard `{ data, error, isPending, mutate, mutateAsync,
|
|
118
|
+
* reset }` shape — matches TanStack Query's mutation API so it drops in
|
|
119
|
+
* cleanly. The `apiSlug` is bound at hook construction; only the per-call
|
|
120
|
+
* inputs (`text`, `inputs`) are passed to `mutate(...)`.
|
|
121
|
+
*
|
|
122
|
+
* @example
|
|
123
|
+
* function NotePanel() {
|
|
124
|
+
* const m = useOhmExtract({ apiSlug: "opd-clinic" });
|
|
125
|
+
*
|
|
126
|
+
* async function onSubmit(transcript: string) {
|
|
127
|
+
* const r = await m.mutateAsync({ text: transcript });
|
|
128
|
+
* form.setValues(r.data);
|
|
129
|
+
* }
|
|
130
|
+
*
|
|
131
|
+
* if (m.error) return <ErrorPanel err={m.error} />;
|
|
132
|
+
* if (m.isPending) return <Spinner />;
|
|
133
|
+
* return <Form onSubmit={onSubmit} />;
|
|
134
|
+
* }
|
|
135
|
+
*/
|
|
51
136
|
export function useOhmExtract(opts) {
|
|
52
137
|
return useOhmMutation((c, input) => c.extract({ ...input, apiSlug: opts.apiSlug }));
|
|
53
138
|
}
|
|
139
|
+
/**
|
|
140
|
+
* React hook for `ohm.audio.extract` (audio file → transcript + structured
|
|
141
|
+
* JSON in one call). Pair with the {@link useRecorder} hook (or your own
|
|
142
|
+
* recorder) — the file you get from `recorder.stop()` is the file you
|
|
143
|
+
* pass to `mutate({ file })`.
|
|
144
|
+
*
|
|
145
|
+
* @example
|
|
146
|
+
* const m = useOhmAudioExtract({ apiSlug: "opd-clinic" });
|
|
147
|
+
*
|
|
148
|
+
* async function onStop(blob: Blob) {
|
|
149
|
+
* const r = await m.mutateAsync({ file: blob, language: "auto" });
|
|
150
|
+
* setTranscript(r.transcript); // English
|
|
151
|
+
* form.setValues(r.data);
|
|
152
|
+
* }
|
|
153
|
+
*/
|
|
54
154
|
export function useOhmAudioExtract(opts) {
|
|
55
155
|
return useOhmMutation((c, input) => c.audio.extract({ ...input, apiSlug: opts.apiSlug }));
|
|
56
156
|
}
|
|
157
|
+
/**
|
|
158
|
+
* React hook for `ohm.summarize` (free clinical text → summary in one of
|
|
159
|
+
* 4 styles: patient / handover / executive / progress-note).
|
|
160
|
+
*
|
|
161
|
+
* @example
|
|
162
|
+
* const m = useOhmSummarize();
|
|
163
|
+
*
|
|
164
|
+
* async function buildPatientLetter(consult: string) {
|
|
165
|
+
* const r = await m.mutateAsync({
|
|
166
|
+
* text: consult,
|
|
167
|
+
* style: "patient",
|
|
168
|
+
* maxLines: 5,
|
|
169
|
+
* });
|
|
170
|
+
* showLetter(r.summary);
|
|
171
|
+
* }
|
|
172
|
+
*/
|
|
57
173
|
export function useOhmSummarize() {
|
|
58
174
|
return useOhmMutation((c, input) => c.summarize(input));
|
|
59
175
|
}
|
|
@@ -105,6 +221,9 @@ export function useRecorder(opts = {}) {
|
|
|
105
221
|
}, 250);
|
|
106
222
|
return () => clearInterval(id);
|
|
107
223
|
}, [state]);
|
|
224
|
+
// Track the auto-extract abort controller so we can cancel it on
|
|
225
|
+
// unmount (e.g. user navigates away while the upload is in flight).
|
|
226
|
+
const extractAcRef = useRef(null);
|
|
108
227
|
// Cleanup on unmount.
|
|
109
228
|
useEffect(() => {
|
|
110
229
|
return () => {
|
|
@@ -114,6 +233,12 @@ export function useRecorder(opts = {}) {
|
|
|
114
233
|
catch {
|
|
115
234
|
/* ignore */
|
|
116
235
|
}
|
|
236
|
+
try {
|
|
237
|
+
extractAcRef.current?.abort();
|
|
238
|
+
}
|
|
239
|
+
catch {
|
|
240
|
+
/* ignore */
|
|
241
|
+
}
|
|
117
242
|
recRef.current = null;
|
|
118
243
|
};
|
|
119
244
|
}, []);
|
|
@@ -151,6 +276,8 @@ export function useRecorder(opts = {}) {
|
|
|
151
276
|
}
|
|
152
277
|
}
|
|
153
278
|
if (optsRef.current.apiSlug && client) {
|
|
279
|
+
const ac = new AbortController();
|
|
280
|
+
extractAcRef.current = ac;
|
|
154
281
|
setExtracting(true);
|
|
155
282
|
try {
|
|
156
283
|
const res = await client.audio.extract({
|
|
@@ -158,6 +285,7 @@ export function useRecorder(opts = {}) {
|
|
|
158
285
|
file: out,
|
|
159
286
|
inputs: optsRef.current.extractInputs,
|
|
160
287
|
language: optsRef.current.extractLanguage,
|
|
288
|
+
signal: ac.signal,
|
|
161
289
|
});
|
|
162
290
|
setTranscript(res.transcript ?? null);
|
|
163
291
|
setData(res.data);
|
|
@@ -170,10 +298,14 @@ export function useRecorder(opts = {}) {
|
|
|
170
298
|
}
|
|
171
299
|
}
|
|
172
300
|
catch (e) {
|
|
173
|
-
|
|
301
|
+
// Aborts on unmount aren't real errors — leave state alone.
|
|
302
|
+
if (e?.code !== "aborted")
|
|
303
|
+
setExtractError(e);
|
|
174
304
|
// Leave the persisted copy in place; caller can retry on next mount.
|
|
175
305
|
}
|
|
176
306
|
finally {
|
|
307
|
+
if (extractAcRef.current === ac)
|
|
308
|
+
extractAcRef.current = null;
|
|
177
309
|
setExtracting(false);
|
|
178
310
|
}
|
|
179
311
|
}
|
package/dist/react/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ohm_studio/sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "OHM Studio SDK for JavaScript / TypeScript / React. Voice-to-structured-JSON clinical extraction APIs.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"dependencies": {
|
|
44
44
|
"fix-webm-duration": "^1.0.6",
|
|
45
45
|
"idb-keyval": "^6.2.2",
|
|
46
|
-
"@ohm_studio/sdk-core": "0.
|
|
46
|
+
"@ohm_studio/sdk-core": "0.4.0"
|
|
47
47
|
},
|
|
48
48
|
"peerDependencies": {
|
|
49
49
|
"react": ">=17"
|