refactor: Cleanup

This commit is contained in:
Aleksander Grygier 2025-11-28 19:36:03 +01:00
parent dd30810d0a
commit 1adf173dd6
2 changed files with 22 additions and 9 deletions

View File

@ -119,6 +119,7 @@
void modelPropsVersion; // Trigger reactivity on props fetch void modelPropsVersion; // Trigger reactivity on props fetch
return modelsStore.modelSupportsAudio(activeModelId); return modelsStore.modelSupportsAudio(activeModelId);
} }
return false; return false;
}); });
@ -127,6 +128,7 @@
void modelPropsVersion; // Trigger reactivity on props fetch void modelPropsVersion; // Trigger reactivity on props fetch
return modelsStore.modelSupportsVision(activeModelId); return modelsStore.modelSupportsVision(activeModelId);
} }
return false; return false;
}); });
@ -136,6 +138,7 @@
chatFormActionsRef?.openModelSelector(); chatFormActionsRef?.openModelSelector();
return false; return false;
} }
return true; return true;
} }
@ -143,14 +146,18 @@
switch (fileType) { switch (fileType) {
case FileTypeCategory.IMAGE: case FileTypeCategory.IMAGE:
return [...Object.values(FileExtensionImage), ...Object.values(MimeTypeImage)].join(','); return [...Object.values(FileExtensionImage), ...Object.values(MimeTypeImage)].join(',');
case FileTypeCategory.AUDIO: case FileTypeCategory.AUDIO:
return [...Object.values(FileExtensionAudio), ...Object.values(MimeTypeAudio)].join(','); return [...Object.values(FileExtensionAudio), ...Object.values(MimeTypeAudio)].join(',');
case FileTypeCategory.PDF: case FileTypeCategory.PDF:
return [...Object.values(FileExtensionPdf), ...Object.values(MimeTypeApplication)].join( return [...Object.values(FileExtensionPdf), ...Object.values(MimeTypeApplication)].join(
',' ','
); );
case FileTypeCategory.TEXT: case FileTypeCategory.TEXT:
return [...Object.values(FileExtensionText), MimeTypeText.PLAIN].join(','); return [...Object.values(FileExtensionText), MimeTypeText.PLAIN].join(',');
default: default:
return ''; return '';
} }
@ -210,6 +217,7 @@
if (files.length > 0) { if (files.length > 0) {
event.preventDefault(); event.preventDefault();
onFileUpload?.(files); onFileUpload?.(files);
return; return;
} }
@ -233,6 +241,7 @@
async function handleMicClick() { async function handleMicClick() {
if (!audioRecorder || !recordingSupported) { if (!audioRecorder || !recordingSupported) {
console.warn('Audio recording not supported'); console.warn('Audio recording not supported');
return; return;
} }

View File

@ -76,26 +76,23 @@
let isCurrentConversationLoading = $derived(isLoading()); let isCurrentConversationLoading = $derived(isLoading());
// Model-specific capability detection (same logic as ChatFormActions)
let isRouter = $derived(isRouterMode()); let isRouter = $derived(isRouterMode());
let conversationModel = $derived( let conversationModel = $derived(
chatStore.getConversationModel(activeMessages() as DatabaseMessage[]) chatStore.getConversationModel(activeMessages() as DatabaseMessage[])
); );
// Get active model ID for fetching props
let activeModelId = $derived.by(() => { let activeModelId = $derived.by(() => {
if (!isRouter) return null; if (!isRouter) return null;
const options = modelOptions(); const options = modelOptions();
// First try user-selected model
const selectedId = selectedModelId(); const selectedId = selectedModelId();
if (selectedId) { if (selectedId) {
const model = options.find((m) => m.id === selectedId); const model = options.find((m) => m.id === selectedId);
if (model) return model.model; if (model) return model.model;
} }
// Fallback to conversation model
if (conversationModel) { if (conversationModel) {
const model = options.find((m) => m.model === conversationModel); const model = options.find((m) => m.model === conversationModel);
if (model) return model.model; if (model) return model.model;
@ -104,10 +101,8 @@
return null; return null;
}); });
// State for model props reactivity
let modelPropsVersion = $state(0); let modelPropsVersion = $state(0);
// Fetch model props when active model changes
$effect(() => { $effect(() => {
if (isRouter && activeModelId) { if (isRouter && activeModelId) {
const cached = modelsStore.getModelProps(activeModelId); const cached = modelsStore.getModelProps(activeModelId);
@ -119,34 +114,40 @@
} }
}); });
// Derive modalities from active model (works for both MODEL and ROUTER mode)
let hasAudioModality = $derived.by(() => { let hasAudioModality = $derived.by(() => {
if (activeModelId) { if (activeModelId) {
void modelPropsVersion; // Trigger reactivity on props fetch void modelPropsVersion;
return modelsStore.modelSupportsAudio(activeModelId); return modelsStore.modelSupportsAudio(activeModelId);
} }
return false; return false;
}); });
let hasVisionModality = $derived.by(() => { let hasVisionModality = $derived.by(() => {
if (activeModelId) { if (activeModelId) {
void modelPropsVersion; // Trigger reactivity on props fetch void modelPropsVersion;
return modelsStore.modelSupportsVision(activeModelId); return modelsStore.modelSupportsVision(activeModelId);
} }
return false; return false;
}); });
async function handleDeleteConfirm() { async function handleDeleteConfirm() {
const conversation = activeConversation(); const conversation = activeConversation();
if (conversation) { if (conversation) {
await conversationsStore.deleteConversation(conversation.id); await conversationsStore.deleteConversation(conversation.id);
} }
showDeleteDialog = false; showDeleteDialog = false;
} }
function handleDragEnter(event: DragEvent) { function handleDragEnter(event: DragEvent) {
event.preventDefault(); event.preventDefault();
dragCounter++; dragCounter++;
if (event.dataTransfer?.types.includes('Files')) { if (event.dataTransfer?.types.includes('Files')) {
isDragOver = true; isDragOver = true;
} }
@ -154,7 +155,9 @@
function handleDragLeave(event: DragEvent) { function handleDragLeave(event: DragEvent) {
event.preventDefault(); event.preventDefault();
dragCounter--; dragCounter--;
if (dragCounter === 0) { if (dragCounter === 0) {
isDragOver = false; isDragOver = false;
} }
@ -172,6 +175,7 @@
function handleDrop(event: DragEvent) { function handleDrop(event: DragEvent) {
event.preventDefault(); event.preventDefault();
isDragOver = false; isDragOver = false;
dragCounter = 0; dragCounter = 0;