refactor: Cleanup
This commit is contained in:
parent
dd30810d0a
commit
1adf173dd6
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue