@tanstack/ai-svelte 0.6.2 → 0.6.4

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.
@@ -0,0 +1,136 @@
1
+ import { createGeneration } from './create-generation.svelte'
2
+ import type { StreamChunk, TranscriptionResult } from '@tanstack/ai'
3
+ import type {
4
+ ConnectionAdapter,
5
+ GenerationClientState,
6
+ GenerationFetcher,
7
+ InferGenerationOutput,
8
+ TranscriptionGenerateInput,
9
+ } from '@tanstack/ai-client'
10
+
11
+ /**
12
+ * Options for the createTranscription function.
13
+ *
14
+ * @template TOutput - The output type after optional transform (defaults to TranscriptionResult)
15
+ */
16
+ export interface CreateTranscriptionOptions<TOutput = TranscriptionResult> {
17
+ /** Connection adapter for streaming transport (SSE, HTTP stream, custom) */
18
+ connection?: ConnectionAdapter
19
+ /** Direct async function for transcription */
20
+ fetcher?: GenerationFetcher<TranscriptionGenerateInput, TranscriptionResult>
21
+ /** Unique identifier for this generation instance */
22
+ id?: string
23
+ /** Additional body parameters to send with ConnectionAdapter requests */
24
+ body?: Record<string, any>
25
+ /**
26
+ * Callback when transcription is complete. Can optionally return a transformed value.
27
+ *
28
+ * - Return a non-null value to transform and store it as the result
29
+ * - Return `null` to keep the previous result unchanged
30
+ * - Return nothing (`void`) to store the raw result as-is
31
+ */
32
+ onResult?: (result: TranscriptionResult) => TOutput | null | void
33
+ /** Callback when an error occurs */
34
+ onError?: (error: Error) => void
35
+ /** Callback when progress is reported (0-100) */
36
+ onProgress?: (progress: number, message?: string) => void
37
+ /** Callback for each stream chunk (ConnectionAdapter mode only) */
38
+ onChunk?: (chunk: StreamChunk) => void
39
+ }
40
+
41
+ /**
42
+ * Return type for the createTranscription function.
43
+ *
44
+ * @template TOutput - The output type (after optional transform)
45
+ */
46
+ export interface CreateTranscriptionReturn<TOutput = TranscriptionResult> {
47
+ /** The transcription result, or null */
48
+ readonly result: TOutput | null
49
+ /** Whether transcription is in progress */
50
+ readonly isLoading: boolean
51
+ /** Current error, if any */
52
+ readonly error: Error | undefined
53
+ /** Current state of the generation */
54
+ readonly status: GenerationClientState
55
+ /** Trigger transcription */
56
+ generate: (input: TranscriptionGenerateInput) => Promise<void>
57
+ /** Abort the current transcription */
58
+ stop: () => void
59
+ /** Clear result, error, and return to idle */
60
+ reset: () => void
61
+ /** Update additional body parameters */
62
+ updateBody: (body: Record<string, any>) => void
63
+ }
64
+
65
+ /**
66
+ * Creates a reactive audio transcription instance for Svelte 5.
67
+ *
68
+ * @example
69
+ * ```svelte
70
+ * <script>
71
+ * import { createTranscription, fetchServerSentEvents } from '@tanstack/ai-svelte'
72
+ *
73
+ * const transcription = createTranscription({
74
+ * connection: fetchServerSentEvents('/api/transcribe'),
75
+ * })
76
+ *
77
+ * function handleFile(e) {
78
+ * const file = e.target.files?.[0]
79
+ * if (file) {
80
+ * const reader = new FileReader()
81
+ * reader.onload = () => {
82
+ * transcription.generate({ audio: reader.result, language: 'en' })
83
+ * }
84
+ * reader.readAsDataURL(file)
85
+ * }
86
+ * }
87
+ * </script>
88
+ *
89
+ * <div>
90
+ * <input type="file" accept="audio/*" onchange={handleFile} />
91
+ * {#if transcription.isLoading}
92
+ * <p>Transcribing...</p>
93
+ * {/if}
94
+ * {#if transcription.result}
95
+ * <p>{transcription.result.text}</p>
96
+ * {/if}
97
+ * </div>
98
+ * ```
99
+ */
100
+ export function createTranscription<
101
+ TOnResult extends ((result: TranscriptionResult) => any) | undefined =
102
+ undefined,
103
+ >(
104
+ options: Omit<CreateTranscriptionOptions, 'onResult'> & {
105
+ onResult?: TOnResult
106
+ },
107
+ ): CreateTranscriptionReturn<
108
+ InferGenerationOutput<TranscriptionResult, TOnResult>
109
+ > {
110
+ const gen = createGeneration<
111
+ TranscriptionGenerateInput,
112
+ TranscriptionResult,
113
+ TOnResult
114
+ >(options)
115
+
116
+ return {
117
+ get result() {
118
+ return gen.result
119
+ },
120
+ get isLoading() {
121
+ return gen.isLoading
122
+ },
123
+ get error() {
124
+ return gen.error
125
+ },
126
+ get status() {
127
+ return gen.status
128
+ },
129
+ generate: gen.generate as (
130
+ input: TranscriptionGenerateInput,
131
+ ) => Promise<void>,
132
+ stop: gen.stop,
133
+ reset: gen.reset,
134
+ updateBody: gen.updateBody,
135
+ }
136
+ }
package/src/index.ts CHANGED
@@ -6,6 +6,43 @@ export type {
6
6
  ChatRequestBody,
7
7
  } from './types'
8
8
 
9
+ // Generation hooks
10
+ export { createGeneration } from './create-generation.svelte'
11
+ export type {
12
+ CreateGenerationOptions,
13
+ CreateGenerationReturn,
14
+ } from './create-generation.svelte'
15
+
16
+ export { createGenerateImage } from './create-generate-image.svelte'
17
+ export type {
18
+ CreateGenerateImageOptions,
19
+ CreateGenerateImageReturn,
20
+ } from './create-generate-image.svelte'
21
+
22
+ export { createGenerateSpeech } from './create-generate-speech.svelte'
23
+ export type {
24
+ CreateGenerateSpeechOptions,
25
+ CreateGenerateSpeechReturn,
26
+ } from './create-generate-speech.svelte'
27
+
28
+ export { createTranscription } from './create-transcription.svelte'
29
+ export type {
30
+ CreateTranscriptionOptions,
31
+ CreateTranscriptionReturn,
32
+ } from './create-transcription.svelte'
33
+
34
+ export { createSummarize } from './create-summarize.svelte'
35
+ export type {
36
+ CreateSummarizeOptions,
37
+ CreateSummarizeReturn,
38
+ } from './create-summarize.svelte'
39
+
40
+ export { createGenerateVideo } from './create-generate-video.svelte'
41
+ export type {
42
+ CreateGenerateVideoOptions,
43
+ CreateGenerateVideoReturn,
44
+ } from './create-generate-video.svelte'
45
+
9
46
  // Re-export from ai-client for convenience
10
47
  export {
11
48
  fetchServerSentEvents,
@@ -16,4 +53,12 @@ export {
16
53
  type ConnectionAdapter,
17
54
  type FetchConnectionOptions,
18
55
  type InferChatMessages,
56
+ type GenerationClientState,
57
+ type ImageGenerateInput,
58
+ type SpeechGenerateInput,
59
+ type TranscriptionGenerateInput,
60
+ type SummarizeGenerateInput,
61
+ type VideoGenerateInput,
62
+ type VideoGenerateResult,
63
+ type VideoStatusInfo,
19
64
  } from '@tanstack/ai-client'