diff --git a/backend/main.py b/backend/main.py index 52da33155..d0e85ddda 100644 --- a/backend/main.py +++ b/backend/main.py @@ -416,15 +416,19 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware): ) return 0 - filter_ids = [ - function.id - for function in Functions.get_functions_by_type( - "filter", active_only=True - ) - ] - # Check if the model has any filters + filter_ids = [] if "info" in model and "meta" in model["info"]: - filter_ids.extend(model["info"]["meta"].get("filterIds", [])) + enabled_filter_ids = [ + function.id + for function in Functions.get_functions_by_type( + "filter", active_only=True + ) + ] + filter_ids = [ + filter_id + for filter_id in enabled_filter_ids + if filter_id in model["info"]["meta"].get("filterIds", []) + ] filter_ids = list(set(filter_ids)) filter_ids.sort(key=get_priority) @@ -1006,13 +1010,19 @@ async def chat_completed(form_data: dict, user=Depends(get_verified_user)): return (function.valves if function.valves else {}).get("priority", 0) return 0 - filter_ids = [ - function.id - for function in Functions.get_functions_by_type("filter", active_only=True) - ] - # Check if the model has any filters + filter_ids = [] if "info" in model and "meta" in model["info"]: - filter_ids.extend(model["info"]["meta"].get("filterIds", [])) + enabled_filter_ids = [ + function.id + for function in Functions.get_functions_by_type( + "filter", active_only=True + ) + ] + filter_ids = [ + filter_id + for filter_id in enabled_filter_ids + if filter_id in model["info"]["meta"].get("filterIds", []) + ] filter_ids = list(set(filter_ids)) # Sort filter_ids by priority, using the get_priority function diff --git a/src/lib/components/workspace/Functions.svelte b/src/lib/components/workspace/Functions.svelte index c010fd380..8a8f88812 100644 --- a/src/lib/components/workspace/Functions.svelte +++ b/src/lib/components/workspace/Functions.svelte @@ -286,13 +286,15 @@
- { - toggleFunctionById(localStorage.token, func.id); - models.set(await getModels(localStorage.token)); - }} - /> + + { + toggleFunctionById(localStorage.token, func.id); + models.set(await getModels(localStorage.token)); + }} + /> +
diff --git a/src/routes/(app)/workspace/models/create/+page.svelte b/src/routes/(app)/workspace/models/create/+page.svelte index 479e83cee..6534fb49c 100644 --- a/src/routes/(app)/workspace/models/create/+page.svelte +++ b/src/routes/(app)/workspace/models/create/+page.svelte @@ -2,7 +2,7 @@ import { v4 as uuidv4 } from 'uuid'; import { toast } from 'svelte-sonner'; import { goto } from '$app/navigation'; - import { settings, user, config, models, tools } from '$lib/stores'; + import { settings, user, config, models, tools, functions } from '$lib/stores'; import TurndownService from 'turndown'; @@ -17,6 +17,7 @@ import ToolsSelector from '$lib/components/workspace/Models/ToolsSelector.svelte'; import { stringify } from 'postcss'; import { parseFile } from '$lib/utils/characters'; + import FiltersSelector from '$lib/components/workspace/Models/FiltersSelector.svelte'; const i18n = getContext('i18n'); @@ -61,6 +62,7 @@ let toolIds = []; let knowledge = []; + let filterIds = []; $: if (name) { id = name @@ -105,6 +107,14 @@ } } + if (filterIds.length > 0) { + info.meta.filterIds = filterIds; + } else { + if (info.meta.filterIds) { + delete info.meta.filterIds; + } + } + info.params.stop = params.stop ? params.stop.split(',').filter((s) => s.trim()) : null; Object.keys(info.params).forEach((key) => { if (info.params[key] === '' || info.params[key] === null) { @@ -173,6 +183,10 @@ capabilities = { ...capabilities, ...(model?.info?.meta?.capabilities ?? {}) }; toolIds = model?.info?.meta?.toolIds ?? []; + if (model?.info?.meta?.filterIds) { + filterIds = [...model?.info?.meta?.filterIds]; + } + info = { ...info, ...model.info @@ -604,6 +618,13 @@ +
+ func.type === 'filter')} + /> +
+
{$i18n.t('Capabilities')}