import { injectGeneration } from './inject-generation' import { reconstructSpeechResult } from '@tanstack/ai-client' import type { Signal } from '@angular/core' import type { TTSResult } from '@tanstack/ai' import type { GenerationClientState, GenerationPersistenceOptions, InferGenerationOutputFromReturn, SpeechGenerateInput, } from '@tanstack/ai-client' import type { InjectGenerationOptions, InjectGenerationResult, } from './inject-generation' export type InjectGenerateSpeechOptions = Omit< InjectGenerationOptions, 'onResult' | 'reconstructResult' > & { onResult?: (result: TTSResult) => TOutput | null | void } export interface InjectGenerateSpeechResult extends Omit< InjectGenerationResult, 'generate' > { generate: (input: SpeechGenerateInput) => Promise result: Signal isLoading: Signal error: Signal status: Signal } export function injectGenerateSpeech( options: Omit< InjectGenerateSpeechOptions, 'onResult' | 'persistence' | 'threadId' > & { onResult?: (result: TTSResult) => TTransformed } & GenerationPersistenceOptions, ): InjectGenerateSpeechResult< InferGenerationOutputFromReturn > { const devtools = { ...options.devtools, framework: 'angular' as const, hookName: 'injectGenerateSpeech', outputKind: 'audio' as const, } const generation = injectGeneration< SpeechGenerateInput, TTSResult, TTransformed >({ ...options, devtools, reconstructResult: reconstructSpeechResult, }) return generation }