MP3 = 'audio/mp3',
MP4 = 'audio/mp4',
WAV = 'audio/wav',
+ WAVE = 'audio/wave',
+ X_WAV = 'audio/x-wav',
+ X_WAVE = 'audio/x-wave',
+ X_PN_WAV = 'audio/x-pn-wav',
WEBM = 'audio/webm',
WEBM_OPUS = 'audio/webm;codecs=opus'
}
import {
AttachmentType,
ContentPartType,
+ FileTypeAudio,
MessageRole,
+ MimeTypeAudio,
ReasoningFormat,
UrlProtocol
} from '$lib/enums';
ApiChatMessageData,
ApiChatCompletionToolCall
} from '$lib/types/api';
-import type { DatabaseMessageExtraMcpPrompt, DatabaseMessageExtraMcpResource } from '$lib/types';
+import type {
+ AudioInputFormat,
+ DatabaseMessageExtraMcpPrompt,
+ DatabaseMessageExtraMcpResource
+} from '$lib/types';
import { modelsStore } from '$lib/stores/models.svelte';
+function getAudioInputFormat(mimeType: string): AudioInputFormat {
+ const normalizedMimeType = mimeType.trim().toLowerCase();
+
+ if (
+ normalizedMimeType === MimeTypeAudio.WAV ||
+ normalizedMimeType === MimeTypeAudio.WAVE ||
+ normalizedMimeType === MimeTypeAudio.X_WAV ||
+ normalizedMimeType === MimeTypeAudio.X_WAVE ||
+ normalizedMimeType === MimeTypeAudio.X_PN_WAV
+ ) {
+ return FileTypeAudio.WAV;
+ }
+
+ return FileTypeAudio.MP3;
+}
+
export class ChatService {
/**
*
type: ContentPartType.INPUT_AUDIO,
input_audio: {
data: audio.base64Data,
- format: audio.mimeType.includes('wav') ? 'wav' : 'mp3'
+ format: getAudioInputFormat(audio.mimeType)
}
});
}
-import type { ContentPartType, ServerModelStatus, ServerRole } from '$lib/enums';
+import type { ContentPartType, FileTypeAudio, ServerModelStatus, ServerRole } from '$lib/enums';
import type { ChatMessagePromptProgress, ChatRole } from './chat';
+export type AudioInputFormat = FileTypeAudio.WAV | FileTypeAudio.MP3;
+
export interface ApiChatCompletionToolFunction {
name: string;
description?: string;
};
input_audio?: {
data: string;
- format: 'wav' | 'mp3';
+ format: AudioInputFormat;
};
input_video?: {
data: string;
ApiRouterModelsStatusResponse,
ApiRouterModelsListResponse,
ApiRouterModelsUnloadRequest,
- ApiRouterModelsUnloadResponse
+ ApiRouterModelsUnloadResponse,
+ AudioInputFormat
} from './api';
// Chat types
MimeTypeText
} from '$lib/enums';
+function normalizeMimeType(mimeType: string): string {
+ return mimeType.trim().toLowerCase();
+}
+
export function getFileTypeCategory(mimeType: string): FileTypeCategory | null {
- switch (mimeType) {
+ switch (normalizeMimeType(mimeType)) {
// Images
case MimeTypeImage.JPEG:
case MimeTypeImage.PNG:
case MimeTypeAudio.MP3:
case MimeTypeAudio.MP4:
case MimeTypeAudio.WAV:
+ case MimeTypeAudio.WAVE:
+ case MimeTypeAudio.X_WAV:
+ case MimeTypeAudio.X_WAVE:
+ case MimeTypeAudio.X_PN_WAV:
case MimeTypeAudio.WEBM:
case MimeTypeAudio.WEBM_OPUS:
return FileTypeCategory.AUDIO;