Added video studio router and endpoints. Added research router and endpoints. Added youtube router and endpoints. Added onboarding utils router and endpoints. Added onboarding utils service. Added onboarding utils models. Added onboarding utils routes. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils. Added onboarding utils utils.
This commit is contained in:
73
frontend/src/services/researchEngineApi.ts
Normal file
73
frontend/src/services/researchEngineApi.ts
Normal file
@@ -0,0 +1,73 @@
|
||||
import { apiClient } from '../api/client';
|
||||
import { ResearchConfig, BlogResearchResponse } from './blogWriterApi';
|
||||
|
||||
export interface ResearchEngineRequest {
|
||||
query: string;
|
||||
keywords: string[];
|
||||
goal?: string; // factual | trending | competitive | educational | technical | inspirational
|
||||
depth?: string; // quick | standard | comprehensive | expert
|
||||
provider?: string; // auto | exa | tavily | google
|
||||
content_type?: string; // blog | podcast | video | social | email | newsletter | whitepaper | general
|
||||
industry?: string;
|
||||
target_audience?: string;
|
||||
tone?: string;
|
||||
max_sources?: number;
|
||||
recency?: string; // day | week | month | year
|
||||
include_domains?: string[];
|
||||
exclude_domains?: string[];
|
||||
advanced_mode?: boolean;
|
||||
// Raw provider params (optional)
|
||||
exa_category?: string;
|
||||
exa_search_type?: string;
|
||||
tavily_topic?: string;
|
||||
tavily_search_depth?: string;
|
||||
tavily_include_answer?: boolean | string;
|
||||
tavily_include_raw_content?: boolean | string;
|
||||
tavily_time_range?: string;
|
||||
tavily_country?: string;
|
||||
config?: ResearchConfig; // keep compatibility
|
||||
}
|
||||
|
||||
export interface ResearchEngineResponse extends BlogResearchResponse {
|
||||
provider_used?: string;
|
||||
search_queries?: string[];
|
||||
}
|
||||
|
||||
export interface ResearchTaskResponse {
|
||||
task_id: string;
|
||||
}
|
||||
|
||||
export interface ResearchTaskStatusResponse {
|
||||
status: string;
|
||||
progress_messages?: Array<{ timestamp: string; message: string }>;
|
||||
result?: ResearchEngineResponse | null;
|
||||
error?: string;
|
||||
error_status?: number;
|
||||
error_data?: any;
|
||||
}
|
||||
|
||||
export const researchEngineApi = {
|
||||
async execute(request: ResearchEngineRequest): Promise<ResearchEngineResponse> {
|
||||
const { data } = await apiClient.post('/api/research/execute', request);
|
||||
return data;
|
||||
},
|
||||
|
||||
async start(request: ResearchEngineRequest): Promise<ResearchTaskResponse> {
|
||||
const { data } = await apiClient.post('/api/research/start', request);
|
||||
return data;
|
||||
},
|
||||
|
||||
async pollStatus(taskId: string): Promise<ResearchTaskStatusResponse> {
|
||||
const { data } = await apiClient.get(`/api/research/status/${taskId}`);
|
||||
// Normalize shape to match usePolling expectations
|
||||
return {
|
||||
status: data.status || 'pending',
|
||||
progress_messages: data.progress_messages || [],
|
||||
result: data.result || null,
|
||||
error: data.error,
|
||||
error_status: data.error_status,
|
||||
error_data: data.error_data,
|
||||
};
|
||||
},
|
||||
};
|
||||
|
||||
@@ -194,6 +194,7 @@ export interface SceneAudioRequest {
|
||||
sceneTitle: string;
|
||||
text: string;
|
||||
voiceId?: string;
|
||||
language?: string;
|
||||
speed?: number;
|
||||
volume?: number;
|
||||
pitch?: number;
|
||||
@@ -287,12 +288,18 @@ export const youtubeApi = {
|
||||
|
||||
/**
|
||||
* Get render task status.
|
||||
* Returns null if task not found (matches podcast pattern for graceful handling).
|
||||
*/
|
||||
async getRenderStatus(taskId: string): Promise<TaskStatus> {
|
||||
async getRenderStatus(taskId: string): Promise<TaskStatus | null> {
|
||||
try {
|
||||
const response = await apiClient.get(`${API_BASE}/render/${taskId}`);
|
||||
return response.data;
|
||||
// Backend returns null if task not found
|
||||
return response.data || null;
|
||||
} catch (error: any) {
|
||||
// If 404, return null instead of throwing (matches podcast pattern)
|
||||
if (error.response?.status === 404) {
|
||||
return null;
|
||||
}
|
||||
const errorMessage = error.response?.data?.message || error.response?.data?.detail || error.message || 'Failed to get render status';
|
||||
throw new Error(errorMessage);
|
||||
}
|
||||
@@ -515,7 +522,7 @@ export const youtubeApi = {
|
||||
scene_id: params.sceneId,
|
||||
scene_title: params.sceneTitle,
|
||||
text: params.text,
|
||||
voice_id: params.voiceId || 'Wise_Woman',
|
||||
// Only send voice_id if explicitly set; otherwise backend will auto-select
|
||||
speed: params.speed ?? 1.0,
|
||||
volume: params.volume ?? 1.0,
|
||||
pitch: params.pitch ?? 0.0,
|
||||
@@ -523,6 +530,14 @@ export const youtubeApi = {
|
||||
english_normalization: params.englishNormalization ?? false,
|
||||
enable_sync_mode: params.enableSyncMode !== false,
|
||||
};
|
||||
|
||||
if (params.voiceId !== undefined && params.voiceId !== null && String(params.voiceId).trim() !== '') {
|
||||
requestBody.voice_id = params.voiceId;
|
||||
}
|
||||
|
||||
if (params.language !== undefined && params.language !== null && String(params.language).trim() !== '') {
|
||||
requestBody.language = params.language;
|
||||
}
|
||||
|
||||
// Only include optional fields if they are defined and valid
|
||||
// WaveSpeed has strict validation for these parameters
|
||||
|
||||
Reference in New Issue
Block a user