]> git.djapps.eu Git - pkg/ggml/sources/llama.cpp/commitdiff
feat: Add WAV MIME type variants and improve audio format detection (#23396)
authorAleksander Grygier <redacted>
Wed, 20 May 2026 14:55:24 +0000 (16:55 +0200)
committerGitHub <redacted>
Wed, 20 May 2026 14:55:24 +0000 (16:55 +0200)
tools/ui/src/lib/enums/files.enums.ts
tools/ui/src/lib/services/chat.service.ts
tools/ui/src/lib/types/api.d.ts
tools/ui/src/lib/types/index.ts
tools/ui/src/lib/utils/file-type.ts

index 5aef3955ebeabb6e9bba35b15f358c7fa4f89281..2f583d52eae698178826414ac0c138fe1f98036a 100644 (file)
@@ -183,6 +183,10 @@ export enum MimeTypeAudio {
        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'
 }
index 82abedcc4f19602c062c0d8d97fed291addeb044..aee5014efb0b16ae024403d71017b98bda47bc4c 100644 (file)
@@ -10,7 +10,9 @@ import {
 import {
        AttachmentType,
        ContentPartType,
+       FileTypeAudio,
        MessageRole,
+       MimeTypeAudio,
        ReasoningFormat,
        UrlProtocol
 } from '$lib/enums';
@@ -19,9 +21,29 @@ import type {
        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 {
        /**
         *
@@ -879,7 +901,7 @@ export class ChatService {
                                type: ContentPartType.INPUT_AUDIO,
                                input_audio: {
                                        data: audio.base64Data,
-                                       format: audio.mimeType.includes('wav') ? 'wav' : 'mp3'
+                                       format: getAudioInputFormat(audio.mimeType)
                                }
                        });
                }
index 5f0a38dd3c3a2e8b3ff60c1c25b15e55517be67d..c78035180193e8d8c627e06d784e0f923f53e4b0 100644 (file)
@@ -1,6 +1,8 @@
-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;
@@ -20,7 +22,7 @@ export interface ApiChatMessageContentPart {
        };
        input_audio?: {
                data: string;
-               format: 'wav' | 'mp3';
+               format: AudioInputFormat;
        };
        input_video?: {
                data: string;
index d704a4b3c8abf10ec7026e87a1a5c2abf4580da8..0eb1e670133ca848b48aaebc64ffd8d93eae779d 100644 (file)
@@ -29,7 +29,8 @@ export type {
        ApiRouterModelsStatusResponse,
        ApiRouterModelsListResponse,
        ApiRouterModelsUnloadRequest,
-       ApiRouterModelsUnloadResponse
+       ApiRouterModelsUnloadResponse,
+       AudioInputFormat
 } from './api';
 
 // Chat types
index ae814e8059a8883671073631f7d558b5b4e0d3ee..7495163d15d466f1e68a9c921150c69524740c14 100644 (file)
@@ -18,8 +18,12 @@ import {
        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:
@@ -33,6 +37,10 @@ export function getFileTypeCategory(mimeType: string): FileTypeCategory | null {
                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;