Files
ALwrity/frontend/src/components/PodcastMaker/PodcastDashboard/utils.ts
2025-12-12 21:43:09 +05:30

77 lines
2.1 KiB
TypeScript

import { ResearchConfig, DateRange } from "../../../services/blogWriterApi";
import { CreateProjectPayload, Knobs } from "../types";
export const DEFAULT_KNOBS: Knobs = {
voice_emotion: "neutral",
voice_speed: 1,
resolution: "720p",
scene_length_target: 45,
sample_rate: 24000,
bitrate: "standard",
};
export const allowedDateRanges: DateRange[] = [
"last_week",
"last_month",
"last_3_months",
"last_6_months",
"last_year",
"all_time",
];
export const sanitizeExaConfig = (
exa?: CreateProjectPayload["knobs"] & any & { exa_suggested_config?: any } | any
): ResearchConfig | undefined => {
if (!exa) return undefined;
const cfg = exa as {
exa_search_type?: "auto" | "keyword" | "neural";
exa_category?: string;
exa_include_domains?: string[];
exa_exclude_domains?: string[];
max_sources?: number;
include_statistics?: boolean;
date_range?: string;
};
const searchType: ResearchConfig["exa_search_type"] =
cfg.exa_search_type && ["auto", "keyword", "neural"].includes(cfg.exa_search_type)
? cfg.exa_search_type
: undefined;
const dateRange: DateRange | undefined = cfg.date_range && allowedDateRanges.includes(cfg.date_range as DateRange)
? (cfg.date_range as DateRange)
: undefined;
return {
provider: "exa",
exa_search_type: searchType,
exa_category: cfg.exa_category,
exa_include_domains: cfg.exa_include_domains,
exa_exclude_domains: cfg.exa_exclude_domains,
max_sources: cfg.max_sources,
include_statistics: cfg.include_statistics,
date_range: dateRange,
};
};
export const announceError = (setAnnouncement: (msg: string) => void, error: unknown) => {
const message = error instanceof Error ? error.message : "Unexpected error";
setAnnouncement(message);
};
export const getStepLabel = (step: string | null): string => {
switch (step) {
case "analysis":
return "Analysis";
case "research":
return "Research";
case "script":
return "Script Editing";
case "render":
return "Rendering";
default:
return "Unknown";
}
};