diff --git a/.prettierignore b/.prettierignore index 5f4f13c..966727d 100644 --- a/.prettierignore +++ b/.prettierignore @@ -16,5 +16,6 @@ BUILD.bazel copy.bara.sky copybara.sh .env +**/.env.sample temp temp-docs diff --git a/package.json b/package.json index 4f3b789..a8cf71b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "assemblyai", - "version": "4.16.1", + "version": "4.17.0", "description": "The AssemblyAI JavaScript SDK provides an easy-to-use interface for interacting with the AssemblyAI API, which supports async and real-time transcription, as well as the latest LeMUR models.", "engines": { "node": ">=18" diff --git a/src/services/lemur/index.ts b/src/services/lemur/index.ts index 3da5d4e..6dad8da 100644 --- a/src/services/lemur/index.ts +++ b/src/services/lemur/index.ts @@ -13,62 +13,83 @@ import { import { BaseService } from "../base"; export class LemurService extends BaseService { - summary(params: LemurSummaryParams): Promise { + summary( + params: LemurSummaryParams, + signal?: AbortSignal, + ): Promise { return this.fetchJson("/lemur/v3/generate/summary", { method: "POST", body: JSON.stringify(params), + signal, }); } questionAnswer( params: LemurQuestionAnswerParams, + signal?: AbortSignal, ): Promise { return this.fetchJson( "/lemur/v3/generate/question-answer", { method: "POST", body: JSON.stringify(params), + signal, }, ); } actionItems( params: LemurActionItemsParams, + signal?: AbortSignal, ): Promise { return this.fetchJson( "/lemur/v3/generate/action-items", { method: "POST", body: JSON.stringify(params), + signal, }, ); } - task(params: LemurTaskParams): Promise { + task( + params: LemurTaskParams, + signal?: AbortSignal, + ): Promise { return this.fetchJson("/lemur/v3/generate/task", { method: "POST", body: JSON.stringify(params), + signal, }); } /** * Retrieve a LeMUR response that was previously generated. * @param id - The ID of the LeMUR request you previously made. This would be found in the response of the original request. + * @param signal - Optional AbortSignal to cancel the request * @returns The LeMUR response. */ - getResponse(id: string): Promise; - getResponse(id: string): Promise; - getResponse(id: string): Promise { - return this.fetchJson(`/lemur/v3/${id}`); + getResponse( + id: string, + signal?: AbortSignal, + ): Promise; + getResponse(id: string, signal?: AbortSignal): Promise; + getResponse(id: string, signal?: AbortSignal): Promise { + return this.fetchJson(`/lemur/v3/${id}`, { signal }); } /** * Delete the data for a previously submitted LeMUR request. * @param id - ID of the LeMUR request + * @param signal - Optional AbortSignal to cancel the request */ - purgeRequestData(id: string): Promise { + purgeRequestData( + id: string, + signal?: AbortSignal, + ): Promise { return this.fetchJson(`/lemur/v3/${id}`, { method: "DELETE", + signal, }); } } diff --git a/src/services/streaming/service.ts b/src/services/streaming/service.ts index c4d8d01..92bac99 100644 --- a/src/services/streaming/service.ts +++ b/src/services/streaming/service.ts @@ -118,7 +118,10 @@ export class StreamingTranscriber { } if (this.params.filterProfanity) { - searchParams.set("filter_profanity", this.params.filterProfanity.toString()); + searchParams.set( + "filter_profanity", + this.params.filterProfanity.toString(), + ); } url.search = searchParams.toString(); diff --git a/tests/integration/lemur.test.ts b/tests/integration/lemur.test.ts index 7919509..95afc26 100644 --- a/tests/integration/lemur.test.ts +++ b/tests/integration/lemur.test.ts @@ -101,4 +101,41 @@ describe("lemur", () => { expect(deletionRequest.deleted).toBeTruthy(); expect(deletionRequest.request_id_to_purge).toBe(request_id); }); + + it("should abort a summary request", async () => { + const controller = new AbortController(); + + // Start the request + const promise = client.lemur.summary( + { + final_model: "basic", + transcript_ids: knownTranscriptIds, + answer_format: "one sentence", + }, + controller.signal, + ); + + // Abort immediately + controller.abort(); + + // Should throw an error + await expect(promise).rejects.toThrow(); + }); + + it("should abort a task request", async () => { + const controller = new AbortController(); + + const promise = client.lemur.task( + { + final_model: "basic", + transcript_ids: knownTranscriptIds, + prompt: "Write a haiku about this conversation.", + }, + controller.signal, + ); + + controller.abort(); + + await expect(promise).rejects.toThrow(); + }); });