google-veo3-1-mcp-server 1.0.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.
Files changed (52) hide show
  1. package/README.md +257 -0
  2. package/dist/cli/batch.d.ts +8 -0
  3. package/dist/cli/batch.d.ts.map +1 -0
  4. package/dist/cli/batch.js +289 -0
  5. package/dist/cli/batch.js.map +1 -0
  6. package/dist/index.d.ts +12 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +372 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/tools/extend.d.ts +14 -0
  11. package/dist/tools/extend.d.ts.map +1 -0
  12. package/dist/tools/extend.js +153 -0
  13. package/dist/tools/extend.js.map +1 -0
  14. package/dist/tools/generate.d.ts +10 -0
  15. package/dist/tools/generate.d.ts.map +1 -0
  16. package/dist/tools/generate.js +210 -0
  17. package/dist/tools/generate.js.map +1 -0
  18. package/dist/tools/interpolate.d.ts +12 -0
  19. package/dist/tools/interpolate.d.ts.map +1 -0
  20. package/dist/tools/interpolate.js +170 -0
  21. package/dist/tools/interpolate.js.map +1 -0
  22. package/dist/types/batch.d.ts +121 -0
  23. package/dist/types/batch.d.ts.map +1 -0
  24. package/dist/types/batch.js +37 -0
  25. package/dist/types/batch.js.map +1 -0
  26. package/dist/types/tools.d.ts +154 -0
  27. package/dist/types/tools.d.ts.map +1 -0
  28. package/dist/types/tools.js +134 -0
  29. package/dist/types/tools.js.map +1 -0
  30. package/dist/utils/batch-config.d.ts +26 -0
  31. package/dist/utils/batch-config.d.ts.map +1 -0
  32. package/dist/utils/batch-config.js +283 -0
  33. package/dist/utils/batch-config.js.map +1 -0
  34. package/dist/utils/batch-manager.d.ts +43 -0
  35. package/dist/utils/batch-manager.d.ts.map +1 -0
  36. package/dist/utils/batch-manager.js +310 -0
  37. package/dist/utils/batch-manager.js.map +1 -0
  38. package/dist/utils/debug.d.ts +16 -0
  39. package/dist/utils/debug.d.ts.map +1 -0
  40. package/dist/utils/debug.js +44 -0
  41. package/dist/utils/debug.js.map +1 -0
  42. package/dist/utils/path.d.ts +36 -0
  43. package/dist/utils/path.d.ts.map +1 -0
  44. package/dist/utils/path.js +97 -0
  45. package/dist/utils/path.js.map +1 -0
  46. package/dist/utils/video.d.ts +44 -0
  47. package/dist/utils/video.d.ts.map +1 -0
  48. package/dist/utils/video.js +261 -0
  49. package/dist/utils/video.js.map +1 -0
  50. package/docs/GOOGLE_VEO_3.1_API_SPECIFICATION.md +392 -0
  51. package/examples/batch-config.json +44 -0
  52. package/package.json +48 -0
@@ -0,0 +1,210 @@
1
+ /**
2
+ * Video Generation Tool for Veo 3.1
3
+ * Supports Text-to-Video, Image-to-Video, and Reference Images
4
+ */
5
+ import { GEMINI_API_BASE_URL, DEFAULT_POLL_INTERVAL, DEFAULT_MAX_POLL_ATTEMPTS, normalizeModel, normalizeResolution, normalizeAspectRatio, normalizeDuration, calculateCost, isValidResolutionForModel } from '../types/tools.js';
6
+ import { getApiKey, pollVideoResult, downloadAndSaveVideo, extractVideoFromResponse, readImageAsBase64 } from '../utils/video.js';
7
+ import { generateDefaultOutputPath, getDisplayPath } from '../utils/path.js';
8
+ import { debugLog, errorLog } from '../utils/debug.js';
9
+ /**
10
+ * Generate a video using Veo 3.1 API
11
+ */
12
+ export async function generateVideo(params) {
13
+ const apiKey = getApiKey();
14
+ // Normalize parameters
15
+ const model = normalizeModel(params.model);
16
+ const resolution = normalizeResolution(params.resolution);
17
+ const aspectRatio = normalizeAspectRatio(params.aspect_ratio);
18
+ const durationSeconds = normalizeDuration(params.duration_seconds);
19
+ const generateAudio = params.generate_audio ?? true;
20
+ const sampleCount = typeof params.sample_count === 'string'
21
+ ? parseInt(params.sample_count, 10)
22
+ : (params.sample_count ?? 1);
23
+ // Validate resolution for model
24
+ if (!isValidResolutionForModel(resolution, model)) {
25
+ return {
26
+ success: false,
27
+ error: `Resolution ${resolution} is not available for model ${model}. Fast model only supports 720p and 1080p.`
28
+ };
29
+ }
30
+ // Validate prompt
31
+ if (!params.prompt && !params.image) {
32
+ return {
33
+ success: false,
34
+ error: 'Either prompt or image is required for video generation'
35
+ };
36
+ }
37
+ debugLog('Generating video with parameters', {
38
+ model,
39
+ resolution,
40
+ aspectRatio,
41
+ durationSeconds,
42
+ generateAudio,
43
+ hasImage: !!params.image,
44
+ hasReferenceImages: !!params.reference_images?.length
45
+ });
46
+ try {
47
+ // Build request instance
48
+ const instance = {};
49
+ if (params.prompt) {
50
+ instance.prompt = params.prompt;
51
+ }
52
+ // Handle input image (Image-to-Video)
53
+ if (params.image) {
54
+ if (params.image.startsWith('gs://')) {
55
+ instance.image = { gcsUri: params.image };
56
+ }
57
+ else {
58
+ const base64Data = await readImageAsBase64(params.image);
59
+ instance.image = { bytesBase64Encoded: base64Data };
60
+ }
61
+ }
62
+ // Handle reference images
63
+ if (params.reference_images && params.reference_images.length > 0) {
64
+ instance.referenceImages = [];
65
+ for (const refImage of params.reference_images) {
66
+ let imageInput;
67
+ if (refImage.image.startsWith('gs://')) {
68
+ imageInput = { gcsUri: refImage.image };
69
+ }
70
+ else {
71
+ const base64Data = await readImageAsBase64(refImage.image);
72
+ imageInput = { bytesBase64Encoded: base64Data };
73
+ }
74
+ instance.referenceImages.push({
75
+ image: imageInput,
76
+ referenceType: refImage.reference_type
77
+ });
78
+ }
79
+ }
80
+ // Build request parameters
81
+ // Note: generateAudio is NOT supported in Gemini API preview models
82
+ // Audio is always generated by default in Veo 3.1 preview
83
+ const requestParams = {
84
+ aspectRatio,
85
+ resolution,
86
+ durationSeconds,
87
+ sampleCount
88
+ };
89
+ if (params.negative_prompt) {
90
+ requestParams.negativePrompt = params.negative_prompt;
91
+ }
92
+ if (params.person_generation) {
93
+ requestParams.personGeneration = params.person_generation;
94
+ }
95
+ if (params.seed !== undefined) {
96
+ requestParams.seed = typeof params.seed === 'string'
97
+ ? parseInt(params.seed, 10)
98
+ : params.seed;
99
+ }
100
+ if (params.compression_quality) {
101
+ requestParams.compressionQuality = params.compression_quality;
102
+ }
103
+ if (params.resize_mode) {
104
+ requestParams.resizeMode = params.resize_mode;
105
+ }
106
+ if (params.storage_uri) {
107
+ requestParams.storageUri = params.storage_uri;
108
+ }
109
+ // Build full request
110
+ const request = {
111
+ instances: [instance],
112
+ parameters: requestParams
113
+ };
114
+ debugLog('API Request', request);
115
+ // Make API call
116
+ const url = `${GEMINI_API_BASE_URL}/models/${model}:predictLongRunning?key=${apiKey}`;
117
+ const response = await fetch(url, {
118
+ method: 'POST',
119
+ headers: {
120
+ 'Content-Type': 'application/json'
121
+ },
122
+ body: JSON.stringify(request)
123
+ });
124
+ if (!response.ok) {
125
+ const errorText = await response.text();
126
+ errorLog('API request failed', { status: response.status, error: errorText });
127
+ // Handle specific error codes
128
+ if (response.status === 401) {
129
+ return {
130
+ success: false,
131
+ error: 'Authentication failed. Please check your GOOGLE_API_KEY.'
132
+ };
133
+ }
134
+ if (response.status === 403) {
135
+ return {
136
+ success: false,
137
+ error: 'Access denied. Your API key may not have access to Veo 3.1.'
138
+ };
139
+ }
140
+ if (response.status === 429) {
141
+ return {
142
+ success: false,
143
+ error: 'Rate limit exceeded. Please try again later.'
144
+ };
145
+ }
146
+ return {
147
+ success: false,
148
+ error: `API request failed: ${response.status} ${response.statusText} - ${errorText}`
149
+ };
150
+ }
151
+ const operationResponse = await response.json();
152
+ debugLog('Initial operation response', operationResponse);
153
+ const operationName = operationResponse.name;
154
+ // Calculate estimated cost
155
+ const estimatedCost = calculateCost(model, resolution, durationSeconds, generateAudio);
156
+ // Poll for completion
157
+ const pollInterval = parseInt(process.env.VIDEO_POLL_INTERVAL || '') || DEFAULT_POLL_INTERVAL;
158
+ const maxAttempts = parseInt(process.env.VIDEO_MAX_POLL_ATTEMPTS || '') || DEFAULT_MAX_POLL_ATTEMPTS;
159
+ const finalResponse = await pollVideoResult(operationName, apiKey, pollInterval, maxAttempts);
160
+ // Check for errors
161
+ if (finalResponse.error) {
162
+ return {
163
+ success: false,
164
+ operation_name: operationName,
165
+ error: finalResponse.error.message,
166
+ failure_reason: `Error code: ${finalResponse.error.code}`
167
+ };
168
+ }
169
+ // Extract video data
170
+ const videoData = extractVideoFromResponse(finalResponse);
171
+ if (!videoData) {
172
+ return {
173
+ success: false,
174
+ operation_name: operationName,
175
+ error: 'No video was generated. The content may have been filtered by safety policies.',
176
+ estimated_cost: estimatedCost
177
+ };
178
+ }
179
+ // Download and save if output path specified
180
+ let videoPath;
181
+ let videoUrl = videoData.url;
182
+ if (params.output_path || process.env.OUTPUT_DIR) {
183
+ const outputPath = params.output_path || generateDefaultOutputPath(process.env.OUTPUT_DIR || './output', 'veo3');
184
+ try {
185
+ videoPath = await downloadAndSaveVideo(videoData.url, videoData.base64, outputPath);
186
+ debugLog('Video saved', { path: videoPath });
187
+ }
188
+ catch (downloadError) {
189
+ errorLog('Failed to save video', downloadError);
190
+ // Don't fail the whole operation if download fails
191
+ }
192
+ }
193
+ return {
194
+ success: true,
195
+ operation_name: operationName,
196
+ video_url: videoUrl,
197
+ video_path: videoPath ? getDisplayPath(videoPath) : undefined,
198
+ duration_seconds: durationSeconds,
199
+ estimated_cost: estimatedCost
200
+ };
201
+ }
202
+ catch (error) {
203
+ errorLog('Video generation failed', error);
204
+ return {
205
+ success: false,
206
+ error: error instanceof Error ? error.message : String(error)
207
+ };
208
+ }
209
+ }
210
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/tools/generate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Frame Interpolation Tool for Veo 3.1
3
+ * Generates video between first and last frames
4
+ */
5
+ import { type InterpolateFramesParams, type VideoGenerationResult } from '../types/tools.js';
6
+ /**
7
+ * Interpolate between first and last frames to generate video
8
+ *
9
+ * Creates a smooth video transition between two keyframes
10
+ */
11
+ export declare function interpolateFrames(params: InterpolateFramesParams): Promise<VideoGenerationResult>;
12
+ //# sourceMappingURL=interpolate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interpolate.d.ts","sourceRoot":"","sources":["../../src/tools/interpolate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EASL,KAAK,uBAAuB,EAG5B,KAAK,qBAAqB,EAG3B,MAAM,mBAAmB,CAAC;AAW3B;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA0LvG"}
@@ -0,0 +1,170 @@
1
+ /**
2
+ * Frame Interpolation Tool for Veo 3.1
3
+ * Generates video between first and last frames
4
+ */
5
+ import { GEMINI_API_BASE_URL, DEFAULT_MODEL, DEFAULT_RESOLUTION, DEFAULT_POLL_INTERVAL, DEFAULT_MAX_POLL_ATTEMPTS, normalizeDuration, calculateCost } from '../types/tools.js';
6
+ import { getApiKey, pollVideoResult, downloadAndSaveVideo, extractVideoFromResponse, readImageAsBase64 } from '../utils/video.js';
7
+ import { generateDefaultOutputPath, getDisplayPath } from '../utils/path.js';
8
+ import { debugLog, errorLog } from '../utils/debug.js';
9
+ /**
10
+ * Interpolate between first and last frames to generate video
11
+ *
12
+ * Creates a smooth video transition between two keyframes
13
+ */
14
+ export async function interpolateFrames(params) {
15
+ const apiKey = getApiKey();
16
+ // Validate required parameters
17
+ if (!params.first_frame) {
18
+ return {
19
+ success: false,
20
+ error: 'first_frame parameter is required for frame interpolation'
21
+ };
22
+ }
23
+ if (!params.last_frame) {
24
+ return {
25
+ success: false,
26
+ error: 'last_frame parameter is required for frame interpolation'
27
+ };
28
+ }
29
+ const model = DEFAULT_MODEL;
30
+ const durationSeconds = normalizeDuration(params.duration_seconds);
31
+ const generateAudio = params.generate_audio ?? true;
32
+ const resolution = DEFAULT_RESOLUTION;
33
+ debugLog('Interpolating frames with parameters', {
34
+ model,
35
+ durationSeconds,
36
+ generateAudio,
37
+ hasPrompt: !!params.prompt
38
+ });
39
+ try {
40
+ // Build request instance
41
+ const instance = {};
42
+ if (params.prompt) {
43
+ instance.prompt = params.prompt;
44
+ }
45
+ // Handle first frame (image)
46
+ if (params.first_frame.startsWith('gs://')) {
47
+ instance.image = { gcsUri: params.first_frame };
48
+ }
49
+ else {
50
+ const base64Data = await readImageAsBase64(params.first_frame);
51
+ instance.image = { bytesBase64Encoded: base64Data };
52
+ }
53
+ // Handle last frame
54
+ if (params.last_frame.startsWith('gs://')) {
55
+ instance.lastFrame = { gcsUri: params.last_frame };
56
+ }
57
+ else {
58
+ const base64Data = await readImageAsBase64(params.last_frame);
59
+ instance.lastFrame = { bytesBase64Encoded: base64Data };
60
+ }
61
+ // Build request parameters
62
+ // Note: generateAudio is NOT supported in Gemini API preview models
63
+ const parameters = {
64
+ durationSeconds
65
+ };
66
+ const request = {
67
+ instances: [instance],
68
+ parameters
69
+ };
70
+ debugLog('API Request', request);
71
+ // Make API call
72
+ const url = `${GEMINI_API_BASE_URL}/models/${model}:predictLongRunning?key=${apiKey}`;
73
+ const response = await fetch(url, {
74
+ method: 'POST',
75
+ headers: {
76
+ 'Content-Type': 'application/json'
77
+ },
78
+ body: JSON.stringify(request)
79
+ });
80
+ if (!response.ok) {
81
+ const errorText = await response.text();
82
+ errorLog('API request failed', { status: response.status, error: errorText });
83
+ if (response.status === 401) {
84
+ return {
85
+ success: false,
86
+ error: 'Authentication failed. Please check your GOOGLE_API_KEY.'
87
+ };
88
+ }
89
+ if (response.status === 403) {
90
+ return {
91
+ success: false,
92
+ error: 'Access denied. Your API key may not have access to Veo 3.1.'
93
+ };
94
+ }
95
+ if (response.status === 429) {
96
+ return {
97
+ success: false,
98
+ error: 'Rate limit exceeded. Please try again later.'
99
+ };
100
+ }
101
+ if (response.status === 400) {
102
+ return {
103
+ success: false,
104
+ error: `Invalid frame images for interpolation. Details: ${errorText}`
105
+ };
106
+ }
107
+ return {
108
+ success: false,
109
+ error: `API request failed: ${response.status} ${response.statusText} - ${errorText}`
110
+ };
111
+ }
112
+ const operationResponse = await response.json();
113
+ debugLog('Initial operation response', operationResponse);
114
+ const operationName = operationResponse.name;
115
+ // Calculate estimated cost
116
+ const estimatedCost = calculateCost(model, resolution, durationSeconds, generateAudio);
117
+ // Poll for completion
118
+ const pollInterval = parseInt(process.env.VIDEO_POLL_INTERVAL || '') || DEFAULT_POLL_INTERVAL;
119
+ const maxAttempts = parseInt(process.env.VIDEO_MAX_POLL_ATTEMPTS || '') || DEFAULT_MAX_POLL_ATTEMPTS;
120
+ const finalResponse = await pollVideoResult(operationName, apiKey, pollInterval, maxAttempts);
121
+ // Check for errors
122
+ if (finalResponse.error) {
123
+ return {
124
+ success: false,
125
+ operation_name: operationName,
126
+ error: finalResponse.error.message,
127
+ failure_reason: `Error code: ${finalResponse.error.code}`
128
+ };
129
+ }
130
+ // Extract video data
131
+ const videoData = extractVideoFromResponse(finalResponse);
132
+ if (!videoData) {
133
+ return {
134
+ success: false,
135
+ operation_name: operationName,
136
+ error: 'No video was generated. The content may have been filtered by safety policies.',
137
+ estimated_cost: estimatedCost
138
+ };
139
+ }
140
+ // Download and save if output path specified
141
+ let videoPath;
142
+ let videoUrl = videoData.url;
143
+ if (params.output_path || process.env.OUTPUT_DIR) {
144
+ const outputPath = params.output_path || generateDefaultOutputPath(process.env.OUTPUT_DIR || './output', 'veo3_interpolated');
145
+ try {
146
+ videoPath = await downloadAndSaveVideo(videoData.url, videoData.base64, outputPath);
147
+ debugLog('Interpolated video saved', { path: videoPath });
148
+ }
149
+ catch (downloadError) {
150
+ errorLog('Failed to save interpolated video', downloadError);
151
+ }
152
+ }
153
+ return {
154
+ success: true,
155
+ operation_name: operationName,
156
+ video_url: videoUrl,
157
+ video_path: videoPath ? getDisplayPath(videoPath) : undefined,
158
+ duration_seconds: durationSeconds,
159
+ estimated_cost: estimatedCost
160
+ };
161
+ }
162
+ catch (error) {
163
+ errorLog('Frame interpolation failed', error);
164
+ return {
165
+ success: false,
166
+ error: error instanceof Error ? error.message : String(error)
167
+ };
168
+ }
169
+ }
170
+ //# sourceMappingURL=interpolate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interpolate.js","sourceRoot":"","sources":["../../src/tools/interpolate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Batch Processing Type Definitions
3
+ */
4
+ import type { Model, Resolution, AspectRatio, Duration, ReferenceImage } from './tools.js';
5
+ export type JobType = 'generate' | 'extend' | 'interpolate';
6
+ export interface BaseJob {
7
+ type?: JobType;
8
+ output_path?: string;
9
+ }
10
+ export interface GenerateJob extends BaseJob {
11
+ type?: 'generate';
12
+ prompt: string;
13
+ model?: Model;
14
+ aspect_ratio?: AspectRatio;
15
+ resolution?: Resolution;
16
+ duration_seconds?: Duration | number;
17
+ generate_audio?: boolean;
18
+ negative_prompt?: string;
19
+ image?: string;
20
+ reference_images?: ReferenceImage[];
21
+ }
22
+ export interface ExtendJob extends BaseJob {
23
+ type: 'extend';
24
+ video: string;
25
+ prompt?: string;
26
+ }
27
+ export interface InterpolateJob extends BaseJob {
28
+ type: 'interpolate';
29
+ first_frame: string;
30
+ last_frame: string;
31
+ prompt?: string;
32
+ duration_seconds?: Duration | number;
33
+ generate_audio?: boolean;
34
+ }
35
+ export type BatchJob = GenerateJob | ExtendJob | InterpolateJob;
36
+ export interface RetryPolicy {
37
+ max_retries: number;
38
+ retry_delay_ms: number;
39
+ retry_on_errors: string[];
40
+ }
41
+ export declare const DEFAULT_RETRY_POLICY: RetryPolicy;
42
+ export interface BatchConfig {
43
+ jobs: BatchJob[];
44
+ output_dir?: string;
45
+ default_model?: Model;
46
+ default_resolution?: Resolution;
47
+ default_aspect_ratio?: AspectRatio;
48
+ default_duration_seconds?: Duration | number;
49
+ default_generate_audio?: boolean;
50
+ max_concurrent?: number;
51
+ poll_interval?: number;
52
+ timeout?: number;
53
+ retry_policy?: RetryPolicy;
54
+ }
55
+ export interface BatchExecutionOptions {
56
+ outputDir: string;
57
+ maxConcurrent: number;
58
+ pollInterval: number;
59
+ timeout: number;
60
+ retryPolicy: RetryPolicy;
61
+ estimateOnly: boolean;
62
+ format: 'text' | 'json';
63
+ noAudio: boolean;
64
+ allowAnyPath: boolean;
65
+ }
66
+ export declare const DEFAULT_BATCH_OPTIONS: BatchExecutionOptions;
67
+ export interface JobResult {
68
+ index: number;
69
+ job: BatchJob;
70
+ success: boolean;
71
+ operation_name?: string;
72
+ video_url?: string;
73
+ video_path?: string;
74
+ estimated_cost?: number;
75
+ error?: string;
76
+ failure_reason?: string;
77
+ started_at?: Date;
78
+ completed_at?: Date;
79
+ duration_ms?: number;
80
+ retries?: number;
81
+ }
82
+ export interface BatchResult {
83
+ total_jobs: number;
84
+ successful: number;
85
+ failed: number;
86
+ cancelled: number;
87
+ total_estimated_cost: number;
88
+ jobs: JobResult[];
89
+ started_at: Date;
90
+ completed_at: Date;
91
+ duration_ms: number;
92
+ }
93
+ export interface JobCostEstimate {
94
+ index: number;
95
+ job_type: JobType;
96
+ model: Model;
97
+ resolution: Resolution;
98
+ duration_seconds: number;
99
+ generate_audio: boolean;
100
+ estimated_cost: number;
101
+ }
102
+ export interface BatchCostEstimate {
103
+ jobs: JobCostEstimate[];
104
+ total_estimated_cost: number;
105
+ total_duration_seconds: number;
106
+ }
107
+ export declare const BATCH_CONSTRAINTS: {
108
+ minJobs: number;
109
+ maxJobs: number;
110
+ minConcurrent: number;
111
+ maxConcurrent: number;
112
+ minTimeout: number;
113
+ maxTimeout: number;
114
+ minPollInterval: number;
115
+ maxPollInterval: number;
116
+ minRetries: number;
117
+ maxRetries: number;
118
+ minRetryDelay: number;
119
+ maxRetryDelay: number;
120
+ };
121
+ //# sourceMappingURL=batch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch.d.ts","sourceRoot":"","sources":["../../src/types/batch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Batch Processing Type Definitions
3
+ */
4
+ export const DEFAULT_RETRY_POLICY = {
5
+ max_retries: 2,
6
+ retry_delay_ms: 5000,
7
+ retry_on_errors: ['rate_limit', 'timeout', '429', '503', 'RESOURCE_EXHAUSTED']
8
+ };
9
+ export const DEFAULT_BATCH_OPTIONS = {
10
+ outputDir: './output',
11
+ maxConcurrent: 2,
12
+ pollInterval: 15000,
13
+ timeout: 1800000, // 30 minutes
14
+ retryPolicy: DEFAULT_RETRY_POLICY,
15
+ estimateOnly: false,
16
+ format: 'text',
17
+ noAudio: false,
18
+ allowAnyPath: false
19
+ };
20
+ // =============================================================================
21
+ // Validation Constraints
22
+ // =============================================================================
23
+ export const BATCH_CONSTRAINTS = {
24
+ minJobs: 1,
25
+ maxJobs: 100,
26
+ minConcurrent: 1,
27
+ maxConcurrent: 5,
28
+ minTimeout: 60000, // 1 minute
29
+ maxTimeout: 3600000, // 1 hour
30
+ minPollInterval: 5000, // 5 seconds
31
+ maxPollInterval: 60000, // 60 seconds
32
+ minRetries: 0,
33
+ maxRetries: 5,
34
+ minRetryDelay: 100,
35
+ maxRetryDelay: 60000
36
+ };
37
+ //# sourceMappingURL=batch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch.js","sourceRoot":"","sources":["../../src/types/batch.ts"],"names":[],"mappings":"AAAA;;GAEG;AAuDH,MAAM,CAAC,MAAM,oBAAoB,GAAgB;IAC/C,WAAW,EAAE,CAAC;IACd,cAAc,EAAE,IAAI;IACpB,eAAe,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,oBAAoB,CAAC;CAC/E,CAAC;AAoCF,MAAM,CAAC,MAAM,qBAAqB,GAA0B;IAC1D,SAAS,EAAE,UAAU;IACrB,aAAa,EAAE,CAAC;IAChB,YAAY,EAAE,KAAK;IACnB,OAAO,EAAE,OAAO,EAAE,aAAa;IAC/B,WAAW,EAAE,oBAAoB;IACjC,YAAY,EAAE,KAAK;IACnB,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,KAAK;IACd,YAAY,EAAE,KAAK;CACpB,CAAC;AA0DF,gFAAgF;AAChF,yBAAyB;AACzB,gFAAgF;AAEhF,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,GAAG;IACZ,aAAa,EAAE,CAAC;IAChB,aAAa,EAAE,CAAC;IAChB,UAAU,EAAE,KAAK,EAAO,WAAW;IACnC,UAAU,EAAE,OAAO,EAAK,SAAS;IACjC,eAAe,EAAE,IAAI,EAAG,YAAY;IACpC,eAAe,EAAE,KAAK,EAAE,aAAa;IACrC,UAAU,EAAE,CAAC;IACb,UAAU,EAAE,CAAC;IACb,aAAa,EAAE,GAAG;IAClB,aAAa,EAAE,KAAK;CACrB,CAAC"}