From 1c53222582662934787e36c3065f24c80d9e8a01 Mon Sep 17 00:00:00 2001 From: icarus Date: Sat, 11 Oct 2025 17:57:19 +0800 Subject: [PATCH] feat(video): add video creation types and stubs for future implementation --- src/renderer/src/aiCore/index_new.ts | 8 ++++++++ .../legacy/clients/openai/OpenAIResponseAPIClient.ts | 6 ++++++ src/renderer/src/aiCore/legacy/index.ts | 10 ++++++++++ src/renderer/src/types/video.ts | 10 ++++++++++ 4 files changed, 34 insertions(+) create mode 100644 src/renderer/src/types/video.ts diff --git a/src/renderer/src/aiCore/index_new.ts b/src/renderer/src/aiCore/index_new.ts index 81c4aa1df3..d91b8bda24 100644 --- a/src/renderer/src/aiCore/index_new.ts +++ b/src/renderer/src/aiCore/index_new.ts @@ -14,6 +14,7 @@ import { addSpan, endSpan } from '@renderer/services/SpanManagerService' import { StartSpanParams } from '@renderer/trace/types/ModelSpanEntity' import type { Assistant, GenerateImageParams, Model, Provider } from '@renderer/types' import type { AiSdkModel, StreamTextParams } from '@renderer/types/aiCoreTypes' +import { CreateVideoParams, CreateVideoResult } from '@renderer/types/video' import { buildClaudeCodeSystemModelMessage } from '@shared/anthropic' import { type ImageModel, type LanguageModel, type Provider as AiSdkProvider, wrapLanguageModel } from 'ai' @@ -500,6 +501,13 @@ export default class ModernAiProvider { return images } + /** + * We manually implement this method before aisdk supports it well + */ + public async createVideo(params: CreateVideoParams): Promise { + return this.legacyProvider.createVideo(params) + } + public getBaseURL(): string { return this.legacyProvider.getBaseURL() } diff --git a/src/renderer/src/aiCore/legacy/clients/openai/OpenAIResponseAPIClient.ts b/src/renderer/src/aiCore/legacy/clients/openai/OpenAIResponseAPIClient.ts index 9e400a9f8d..bb2ce088ac 100644 --- a/src/renderer/src/aiCore/legacy/clients/openai/OpenAIResponseAPIClient.ts +++ b/src/renderer/src/aiCore/legacy/clients/openai/OpenAIResponseAPIClient.ts @@ -34,6 +34,7 @@ import { OpenAIResponseSdkTool, OpenAIResponseSdkToolCall } from '@renderer/types/sdk' +import { CreateVideoParams } from '@renderer/types/video' import { addImageFileToContents } from '@renderer/utils/formats' import { isSupportedToolUse, @@ -152,6 +153,11 @@ export class OpenAIResponseAPIClient extends OpenAIBaseClient< return await sdk.responses.create(payload, options) } + public async createVideo(params: CreateVideoParams) { + // TODO: implement it + throw new Error('Not implemented') + } + private async handlePdfFile(file: FileMetadata): Promise { if (file.size > 32 * MB) return undefined try { diff --git a/src/renderer/src/aiCore/legacy/index.ts b/src/renderer/src/aiCore/legacy/index.ts index adc81f03ad..37e5e5bc01 100644 --- a/src/renderer/src/aiCore/legacy/index.ts +++ b/src/renderer/src/aiCore/legacy/index.ts @@ -7,6 +7,7 @@ import { withSpanResult } from '@renderer/services/SpanManagerService' import { StartSpanParams } from '@renderer/trace/types/ModelSpanEntity' import type { GenerateImageParams, Model, Provider } from '@renderer/types' import type { RequestOptions, SdkModel } from '@renderer/types/sdk' +import { CreateVideoParams, CreateVideoResult } from '@renderer/types/video' import { isSupportedToolUse } from '@renderer/utils/mcp-tools' import { AihubmixAPIClient } from './clients/aihubmix/AihubmixAPIClient' @@ -179,6 +180,15 @@ export default class AiProvider { return this.apiClient.generateImage(params) } + public async createVideo(params: CreateVideoParams): Promise { + throw new Error('Not implemented') + // if (this.apiClient instanceof OpenAIResponseAPIClient) { + // return this.apiClient.createVideo(params) + // } else { + // throw new Error('Video generation is not supported by this provider') + // } + } + public getBaseURL(): string { return this.apiClient.getBaseURL() } diff --git a/src/renderer/src/types/video.ts b/src/renderer/src/types/video.ts new file mode 100644 index 0000000000..13dcb956b5 --- /dev/null +++ b/src/renderer/src/types/video.ts @@ -0,0 +1,10 @@ +export type CreateVideoRequest = { + type: 'openai' +} + +export type CreateVideoParams = { + providerId: string + modelId: string +} + +export type CreateVideoResult = {}