@@ -6,16 +6,82 @@ import {
66 ResourceClientOptions ,
77} from "make-api-request-js" ;
88
9+ import {
10+ GenerateOptions ,
11+ GenerateRequestType ,
12+ } from "magic-hour/helpers/generate-type" ;
13+ import { getLogger } from "magic-hour/logger" ;
914import * as requests from "magic-hour/resources/v1/ai-voice-generator/request-types" ;
15+ import { ImageProjectsClient } from "magic-hour/resources/v1/image-projects" ;
1016import * as types from "magic-hour/types" ;
1117import { Schemas$V1AiVoiceGeneratorCreateBody } from "magic-hour/types/v1-ai-voice-generator-create-body" ;
1218import { Schemas$V1AiVoiceGeneratorCreateResponse } from "magic-hour/types/v1-ai-voice-generator-create-response" ;
1319
20+ type GenerateRequest = GenerateRequestType < requests . CreateRequest , { } > ;
21+
1422export class AiVoiceGeneratorClient extends CoreResourceClient {
1523 constructor ( coreClient : CoreClient , opts : ResourceClientOptions ) {
1624 super ( coreClient , opts ) ;
1725 }
1826
27+ /**
28+ * AI Voice Generator
29+ *
30+ * Generate speech from text
31+ *
32+ * This method provides a convenient way to create a request and automatically wait for completion and download outputs.
33+ *
34+ * @example
35+ * ```typescript
36+ * import Client from "magic-hour";
37+ *
38+ * const client = new Client({ token: process.env["API_TOKEN"]!! });
39+ * const res = await client.v1.aiVoiceGenerator.generate(
40+ * {
41+ * name: "Voice Generator audio",
42+ * style: { prompt: "Hello, how are you?", voiceName: "Elon Musk" },
43+ * },
44+ * {
45+ * waitForCompletion: true,
46+ * downloadOutputs: true,
47+ * downloadDirectory: "outputs",
48+ * },
49+ * );
50+ * ```
51+ */
52+ async generate ( request : GenerateRequest , opts : GenerateOptions = { } ) {
53+ const {
54+ waitForCompletion = true ,
55+ downloadOutputs = true ,
56+ downloadDirectory = undefined ,
57+ ...createOpts
58+ } = opts ;
59+
60+ const createResponse = await this . create ( request , createOpts ) ;
61+
62+ getLogger ( ) . info (
63+ `Created AiVoiceGeneratorClient project ${ createResponse . id } ` ,
64+ ) ;
65+
66+ const projectsClient = new ImageProjectsClient ( this . _client , this . _opts ) ;
67+
68+ getLogger ( ) . debug (
69+ `Checking result for AiVoiceGeneratorClient project ${ createResponse . id } ` ,
70+ ) ;
71+
72+ const result = await projectsClient . checkResult (
73+ { id : createResponse . id } ,
74+ {
75+ waitForCompletion,
76+ downloadOutputs,
77+ downloadDirectory,
78+ ...createOpts ,
79+ } ,
80+ ) ;
81+
82+ return result ;
83+ }
84+
1985 /**
2086 * AI Voice Generator
2187 *
0 commit comments