diff --git a/apps/client/src/services/llm_chat.ts b/apps/client/src/services/llm_chat.ts index 67fb728328..13f282fe02 100644 --- a/apps/client/src/services/llm_chat.ts +++ b/apps/client/src/services/llm_chat.ts @@ -98,7 +98,7 @@ export async function streamChatCompletion( callbacks.onDone(); break; } - } catch { + } catch (e) { console.error("Failed to parse SSE data line:", line, e); } } diff --git a/apps/client/src/widgets/sidebar/SidebarChat.tsx b/apps/client/src/widgets/sidebar/SidebarChat.tsx index 9aba9dae9e..2386e447fb 100644 --- a/apps/client/src/widgets/sidebar/SidebarChat.tsx +++ b/apps/client/src/widgets/sidebar/SidebarChat.tsx @@ -223,8 +223,7 @@ export default function SidebarChat() { <> diff --git a/apps/server/src/services/llm/providers/anthropic.ts b/apps/server/src/services/llm/providers/anthropic.ts index e26691b7f1..e8fc71cce1 100644 --- a/apps/server/src/services/llm/providers/anthropic.ts +++ b/apps/server/src/services/llm/providers/anthropic.ts @@ -1,5 +1,5 @@ import { createAnthropic, type AnthropicProvider as AnthropicSDKProvider } from "@ai-sdk/anthropic"; -import { generateText, streamText, stepCountIs, type CoreMessage } from "ai"; +import { generateText, streamText, stepCountIs, type CoreMessage, type ToolSet } from "ai"; import type { LlmMessage } from "@triliumnext/commons"; import becca from "../../../becca/becca.js"; @@ -191,7 +191,7 @@ export class AnthropicProvider implements LlmProvider { } // Build tools object - const tools: Record = {}; + const tools: ToolSet = {}; if (config.enableWebSearch) { tools.web_search = this.anthropic.tools.webSearch_20250305({ @@ -211,8 +211,6 @@ export class AnthropicProvider implements LlmProvider { if (Object.keys(tools).length > 0) { streamOptions.tools = tools; // Allow multiple tool use cycles before final response - streamOptions.maxSteps = 5; - // Override default stopWhen which stops after 1 step streamOptions.stopWhen = stepCountIs(5); // Let model decide when to use tools vs respond with text streamOptions.toolChoice = "auto"; @@ -232,7 +230,7 @@ export class AnthropicProvider implements LlmProvider { async generateTitle(firstMessage: string): Promise { const { text } = await generateText({ model: this.anthropic(TITLE_MODEL), - maxTokens: TITLE_MAX_TOKENS, + maxOutputTokens: TITLE_MAX_TOKENS, messages: [ { role: "user", diff --git a/apps/server/src/services/llm/types.ts b/apps/server/src/services/llm/types.ts index bbac0687b5..0e4ae71b32 100644 --- a/apps/server/src/services/llm/types.ts +++ b/apps/server/src/services/llm/types.ts @@ -46,6 +46,8 @@ export interface ModelInfo { costMultiplier?: number; /** Maximum context window size in tokens */ contextWindow?: number; + /** Whether this is a legacy/older model */ + isLegacy?: boolean; } export interface LlmProvider { diff --git a/packages/commons/src/lib/hidden_subtree.ts b/packages/commons/src/lib/hidden_subtree.ts index f30311fc37..03c137653f 100644 --- a/packages/commons/src/lib/hidden_subtree.ts +++ b/packages/commons/src/lib/hidden_subtree.ts @@ -44,7 +44,8 @@ export interface HiddenSubtreeItem { | "quickSearch" | "commandPalette" | "toggleZenMode" - | "mobileTabSwitcher"; + | "mobileTabSwitcher" + | "sidebarChat"; command?: keyof typeof Command; /** * If set to true, then branches will be enforced to be in the correct place.