AIvoices/frontend-nextjs/types/types.d.ts
2025-12-20 23:25:04 +07:00

275 lines
6 KiB
TypeScript

// types/type.d.ts
declare global {
interface IInbound {
inbound_id?: string;
name: string;
email: string;
type: "demo" | "preorder";
}
interface SidebarNavItem {
title: string;
href: string;
icon: React.ReactNode;
isPrimary?: boolean;
}
interface ILanguage {
language_id: string;
code: string;
name: string;
flag: string;
}
type ProductColor = "black" | "white" | "gray";
interface IDevice {
device_id: string;
is_reset: boolean;
is_ota: boolean;
volume: number;
mac_address: string;
user_code: string;
}
interface IUser {
user_id: string;
avatar_url: string;
is_premium: boolean;
email: string;
supervisor_name: string;
supervisee_name: string;
supervisee_persona: string;
supervisee_age: number;
session_time: number;
user_info: UserInfo;
// personality
personality_id: string;
personality?: IPersonality;
// language
language?: ILanguage;
language_code: string;
// device
device?: IDevice;
device_id: string | null;
}
type UserInfo =
| {
user_type: "user";
user_metadata: IUserMetadata;
}
| {
user_type: "doctor";
user_metadata: IDoctorMetadata;
}
| {
user_type: "business";
user_metadata: IBusinessMetadata;
};
interface IBusinessMetadata {}
interface IDoctorMetadata {
doctor_name: string;
specialization: string;
hospital_name: string;
favorite_phrases: string;
hospital_layout: string;
}
interface IUserMetadata {}
type Role = "user" | "assistant" | "doctor";
interface IConversation {
conversation_id?: string;
created_at?: string;
personality_key: string;
user_id: string;
role: Role;
content: string;
metadata: any;
chat_group_id: string | null;
is_sensitive: boolean;
}
type VoiceType =
| {
provider: "openai";
id: OaiVoice;
name: string;
description: string;
color: string;
emoji?: string;
}
| {
provider: "gemini";
id: GeminiVoice;
name: string;
description: string;
color: string;
emoji?: string;
}
| {
provider: "grok";
id: GrokVoice;
name: string;
description: string;
color: string;
emoji?: string;
};
type ModelProvider = "openai" | "gemini" | "grok" | "elevenlabs" | "hume";
type GrokVoice =
| "Ara"
| "Eve"
| "Leo"
| "Rex"
| "Sal";
type GeminiVoice =
| "Zephyr"
| "Puck"
| "Charon"
| "Kore"
| "Fenrir"
| "Leda"
| "Orus"
| "Aoede"
| "Callirrhoe"
| "Autonoe"
| "Enceladus"
| "Iapetus"
| "Umbriel"
| "Algieba"
| "Despina"
| "Erinome"
| "Algenib"
| "Rasalgethi"
| "Laomedeia"
| "Achernar"
| "Alnilam"
| "Schedar"
| "Gacrux"
| "Pulcherrima"
| "Achird"
| "Zubenelgenubi"
| "Vindemiatrix"
| "Sadachbia"
| "Sadaltager"
| "Sulafat";
type OaiVoice =
| "ash"
| "alloy"
| "echo"
| "shimmer"
| "ballad"
| "coral"
| "sage"
| "verse";
// characters <-> personalities table
/**
* oai_voice is for the name of any voice. grok, gemini and openai use this.
* I forgot to refactor this, please consider updating it for your setup :)
*/
interface IPersonality {
personality_id?: string;
is_doctor: boolean;
is_child_voice: boolean;
is_story: boolean;
key: string;
oai_voice: string;
provider: ModelProvider;
title: string;
subtitle: string;
short_description: string;
character_prompt: string;
voice_prompt: string;
first_message_prompt: string;
creator_id: string | null;
pitch_factor: number;
}
type PersonalityFilter = "is_child_voice" | "is_doctor" | "is_story";
type Module = "math" | "science" | "spelling" | "general_trivia";
type PieChartData = {
id: string;
label: string;
value: number | null;
};
interface DataPoint {
x: string;
y: number;
}
interface HeatMapData {
id: string;
data: DataPoint[];
}
interface LineChartData {
id: any;
name: string;
data: any;
}
interface ProcessedData {
cardData: CardData | null;
barData: BarData[];
lineData: LineData[];
pieData: PieData[];
suggestions: string | undefined;
}
interface CardData {
[key: string]: {
title: string;
value: number;
change: number | null;
};
}
interface BarData {
emotion: string;
[key: string]: number | string;
}
interface LineData {
id: string;
name: string;
data: { x: string; y: number | null }[];
}
interface PieData {
id: string;
label: string;
value: number | null;
}
interface LastJsonMessageType {
type: string;
audio_data: string | null;
text_data: string | null;
boundary: string | null;
task_id: string;
}
export interface MessageHistoryType {
type: string;
text_data: string | null;
task_id: string;
}
}
export {}; // This is necessary to make this file a module and avoid TypeScript errors.