diff --git a/app/components/ChatInput.vue b/app/components/ChatInput.vue index 6bd39e9..d7a4744 100644 --- a/app/components/ChatInput.vue +++ b/app/components/ChatInput.vue @@ -179,6 +179,10 @@ watch(() => props.agent?.defaultModelId, (newModelId) => { }) const handleSubmit = () => { + if (isUploading.value || hasFailedUploads.value) { + return; + } + if (props.loading) { emit('cancel'); return; diff --git a/app/components/Logo/DotsStudio.vue b/app/components/Logo/DotsStudio.vue new file mode 100644 index 0000000..711bf61 --- /dev/null +++ b/app/components/Logo/DotsStudio.vue @@ -0,0 +1,29 @@ + + + diff --git a/app/components/Logo/NexAgi.vue b/app/components/Logo/NexAgi.vue new file mode 100644 index 0000000..eeae7a3 --- /dev/null +++ b/app/components/Logo/NexAgi.vue @@ -0,0 +1,31 @@ + + + diff --git a/app/components/Logo/Poolside.vue b/app/components/Logo/Poolside.vue index 060cde5..361e573 100644 --- a/app/components/Logo/Poolside.vue +++ b/app/components/Logo/Poolside.vue @@ -16,17 +16,16 @@ const [a, b, c, d] = useFillIds(TITLE, 4); diff --git a/app/utils/model-mapping.ts b/app/utils/model-mapping.ts index 436361f..c3c4de2 100644 --- a/app/utils/model-mapping.ts +++ b/app/utils/model-mapping.ts @@ -54,6 +54,9 @@ import { LogoClosedRouter, LogoPoolside, LogoTencent, + LogoThinkingMachines, + LogoDotsStudio, + LogoNexAgi, LogoHuggingFace, } from '#components'; import { markRaw } from 'vue'; @@ -65,6 +68,18 @@ interface ModelConfig { } const MODEL_MAPPINGS: ModelConfig[] = [ + { + Icon: markRaw(LogoNexAgi), + keywords: [/nex-agi\//, /\/nex-/], + }, + { + Icon: markRaw(LogoDotsStudio), + keywords: [/dots-studio/, /^dots/, /\/dots/], + }, + { + Icon: markRaw(LogoThinkingMachines), + keywords: [/^thinkingmachines\//, /\/linkling/], + }, { Icon: markRaw(LogoOpenAI), keywords: [/gpt-3/], props: { type: 'gpt3' } }, { Icon: markRaw(LogoOpenAI), keywords: [/gpt-4/], props: { type: 'gpt4' } }, { Icon: markRaw(LogoOpenAI), keywords: [/gpt-5/], props: { type: 'gpt5' } }, @@ -99,7 +114,7 @@ const MODEL_MAPPINGS: ModelConfig[] = [ }, { Icon: markRaw(LogoGrok), - keywords: [/^grok-/, /^x-ai\//], + keywords: [/^grok-/, /^x-ai\//, /^~x-ai\/grok-latest$/], }, { Icon: markRaw(LogoGemini), @@ -164,7 +179,7 @@ const MODEL_MAPPINGS: ModelConfig[] = [ }, { Icon: markRaw(LogoZAI), - keywords: [/zai-/, /(^|\/|-)?glm-?\d/] + keywords: [/zai-/, /(^|\/|-)?glm-?\d/, /^~z-ai\/glm-(flash-)?latest$/] }, { Icon: markRaw(LogoGLMV), @@ -196,7 +211,7 @@ const MODEL_MAPPINGS: ModelConfig[] = [ }, { Icon: markRaw(LogoMeta), - keywords: [/llama/, /\/l3/, /meta-llama\//] + keywords: [/llama/, /\/l3/, /meta-llama\//, /(^|\/)muse-spark($|-)/, /^meta\//] }, { Icon: markRaw(LogoPerplexity), diff --git a/server/api/topic/[topicId]/chat/index.post.ts b/server/api/topic/[topicId]/chat/index.post.ts index 49dd853..60a88a7 100644 --- a/server/api/topic/[topicId]/chat/index.post.ts +++ b/server/api/topic/[topicId]/chat/index.post.ts @@ -431,13 +431,16 @@ type SearchTheWebConfig = SearchTheWebRerankedConfig | SearchTheWebUnrankedConfi export const searchTheWeb = (config: SearchTheWebConfig) => { return async (query: string) => { + const searchUrl = new URL(process.env.SEARCH_API_URL ?? process.env.SEARXNG_URL ?? ""); + searchUrl.pathname = `${searchUrl.pathname.replace(/\/+$/, "")}/search`; + const results = await $fetch<{ results: Array<{ title: string; url: string; content: string; }>; - }>(`${process.env.SEARXNG_URL}/search`, { + }>(searchUrl.toString(), { query: { q: query, format: 'json',