AIvoices/server-deno/types.d.ts
2025-12-26 19:51:15 +07:00

211 lines
4.6 KiB
TypeScript

import { SupabaseClient } from "@supabase/supabase-js";
declare global {
interface IConversation {
conversation_id: string;
role: "user" | "assistant";
content: string;
user_id: string;
is_sensitive: boolean;
personality_key: string;
created_at: string;
}
interface IPayload {
user: IUser;
supabase: SupabaseClient;
timestamp: string;
}
interface IDevice {
device_id: string;
volume: number;
is_ota: boolean;
is_reset: boolean;
mac_address: string;
user_code: string;
}
type ModelProvider = "openai" | "gemini" | "elevenlabs" | "hume" | "grok";
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";
/**
* Note: oai_voice is essentially the name of the voice.
* the naming here sucks, please change it
*/
interface IPersonality {
personality_id: string;
is_doctor: boolean;
is_child_voice: boolean;
is_story: boolean;
key: string;
oai_voice: string;
provider: ModelProvider;
voice_description: string;
title: string;
subtitle: string;
short_description: string;
character_prompt: string;
voice_prompt: string;
creator_id: string | null;
pitch_factor: number;
first_message_prompt: string;
}
interface ILanguage {
language_id: string;
code: string;
name: string;
flag: string;
}
interface IDoctorMetadata {
doctor_name: string;
specialization: string;
hospital_name: string;
favorite_phrases: string;
}
interface IUserMetadata {}
interface IBusinessMetadata {}
type UserInfo =
| {
user_type: "user";
user_metadata: IUserMetadata;
}
| {
user_type: "doctor";
user_metadata: IDoctorMetadata;
}
| {
user_type: "business";
user_metadata: IBusinessMetadata;
};
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;
personality_id: string;
personality?: IPersonality;
language: ILanguage;
language_code: string;
session_time: number;
user_info: UserInfo;
device_id: string;
device?: IDevice;
}
// Hume EVI WebSocket message types
interface HumeMessage {
type: string;
[key: string]: any;
}
interface HumeAudioInput {
type: 'audio_input';
data: string; // base64 encoded audio
}
interface HumeUserInput {
type: 'user_input';
text: string;
}
interface HumeAssistantInput {
type: 'assistant_input';
text: string;
}
interface HumeSessionSettings {
type: 'session_settings';
[key: string]: any;
}
interface HumeAssistantMessage {
type: 'assistant_message';
message: {
role: 'assistant';
content: string;
};
models: {
prosody?: {
scores: Record<string, number>;
};
};
}
interface HumeAudioOutput {
type: 'audio_output';
data: string; // base64 encoded audio
}
interface HumeError {
type: 'error';
code: string;
message: string;
}
interface ProviderArgs {
ws: WebSocket;
payload: IPayload;
connectionPcmFile: Deno.FsFile | null;
firstMessage: string;
systemPrompt: string;
closeHandler: () => Promise<void>;
}
}