Automatic mode is now default

This commit is contained in:
Timothy Carambat
2026-03-31 13:11:46 -07:00
parent ddc89851fa
commit e1ad9080de
9 changed files with 54 additions and 28 deletions

View File

@@ -650,7 +650,7 @@ function apiWorkspaceEndpoints(app) {
const { slug } = request.params;
const {
message,
mode = "query",
mode = null,
sessionId = null,
attachments = [],
reset = false,
@@ -669,7 +669,11 @@ function apiWorkspaceEndpoints(app) {
return;
}
if ((!message?.length || !VALID_CHAT_MODE.includes(mode)) && !reset) {
const resolvedMode = mode ?? workspace.chatMode;
if (
(!message?.length || !VALID_CHAT_MODE.includes(resolvedMode)) &&
!reset
) {
response.status(400).json({
id: uuidv4(),
type: "abort",
@@ -678,7 +682,7 @@ function apiWorkspaceEndpoints(app) {
close: true,
error: !message?.length
? "Message is empty"
: `${mode} is not a valid mode.`,
: `${resolvedMode} is not a valid mode.`,
});
return;
}
@@ -686,7 +690,7 @@ function apiWorkspaceEndpoints(app) {
const result = await ApiChatHandler.chatSync({
workspace,
message,
mode,
mode: resolvedMode,
user: null,
thread: null,
sessionId: !!sessionId ? String(sessionId) : null,
@@ -801,7 +805,7 @@ function apiWorkspaceEndpoints(app) {
const { slug } = request.params;
const {
message,
mode = "query",
mode = null,
sessionId = null,
attachments = [],
reset = false,
@@ -820,7 +824,11 @@ function apiWorkspaceEndpoints(app) {
return;
}
if ((!message?.length || !VALID_CHAT_MODE.includes(mode)) && !reset) {
const resolvedMode = mode ?? workspace.chatMode;
if (
(!message?.length || !VALID_CHAT_MODE.includes(resolvedMode)) &&
!reset
) {
response.status(400).json({
id: uuidv4(),
type: "abort",
@@ -829,7 +837,7 @@ function apiWorkspaceEndpoints(app) {
close: true,
error: !message?.length
? "Message is empty"
: `${mode} is not a valid mode.`,
: `${resolvedMode} is not a valid mode.`,
});
return;
}
@@ -844,7 +852,7 @@ function apiWorkspaceEndpoints(app) {
response,
workspace,
message,
mode,
mode: resolvedMode,
user: null,
thread: null,
sessionId: !!sessionId ? String(sessionId) : null,

View File

@@ -385,7 +385,7 @@ function apiWorkspaceThreadEndpoints(app) {
const { slug, threadSlug } = request.params;
const {
message,
mode = "query",
mode = null,
userId,
attachments = [],
reset = false,
@@ -408,7 +408,11 @@ function apiWorkspaceThreadEndpoints(app) {
return;
}
if ((!message?.length || !VALID_CHAT_MODE.includes(mode)) && !reset) {
const resolvedMode = mode ?? workspace.chatMode;
if (
(!message?.length || !VALID_CHAT_MODE.includes(resolvedMode)) &&
!reset
) {
response.status(400).json({
id: uuidv4(),
type: "abort",
@@ -417,7 +421,7 @@ function apiWorkspaceThreadEndpoints(app) {
close: true,
error: !message?.length
? "Message is empty"
: `${mode} is not a valid mode.`,
: `${resolvedMode} is not a valid mode.`,
});
return;
}
@@ -426,7 +430,7 @@ function apiWorkspaceThreadEndpoints(app) {
const result = await ApiChatHandler.chatSync({
workspace,
message,
mode,
mode: resolvedMode,
user,
thread,
attachments,
@@ -553,7 +557,7 @@ function apiWorkspaceThreadEndpoints(app) {
const { slug, threadSlug } = request.params;
const {
message,
mode = "query",
mode = null,
userId,
attachments = [],
reset = false,
@@ -576,7 +580,11 @@ function apiWorkspaceThreadEndpoints(app) {
return;
}
if ((!message?.length || !VALID_CHAT_MODE.includes(mode)) && !reset) {
const resolvedMode = mode ?? workspace.chatMode;
if (
(!message?.length || !VALID_CHAT_MODE.includes(resolvedMode)) &&
!reset
) {
response.status(400).json({
id: uuidv4(),
type: "abort",
@@ -585,7 +593,7 @@ function apiWorkspaceThreadEndpoints(app) {
close: true,
error: !message?.length
? "Message is empty"
: `${mode} is not a valid mode.`,
: `${resolvedMode} is not a valid mode.`,
});
return;
}
@@ -602,7 +610,7 @@ function apiWorkspaceThreadEndpoints(app) {
response,
workspace,
message,
mode,
mode: resolvedMode,
user,
thread,
attachments,

View File

@@ -1,6 +1,12 @@
const { v4 } = require("uuid");
const prisma = require("../utils/prisma");
const { VALID_CHAT_MODE } = require("../utils/chats/stream");
/**
* Valid chat modes for embeds.
* - chat: Chat mode will use the workspace's chat mode.
* - query: Query mode will use the workspace's query mode.
* - automatic: Automatic mode is NOT supported for embeds.
*/
const VALID_CHAT_MODE = ["chat", "query"];
const EmbedConfig = {
writable: [

View File

@@ -94,7 +94,8 @@ const Workspace = {
return n;
},
chatMode: (value) => {
if (!value || !Workspace.VALID_CHAT_MODES.includes(value)) return "chat";
if (!value || !Workspace.VALID_CHAT_MODES.includes(value))
return "automatic";
return value;
},
chatProvider: (value) => {
@@ -206,7 +207,7 @@ const Workspace = {
const workspace = await prisma.workspaces.create({
data: {
name: this.validations.name(name),
chatMode: "chat", // default to chat mode for now
chatMode: "automatic",
...this.validateFields(additionalFields),
slug,
},

View File

@@ -112,7 +112,7 @@ async function processDocumentAttachments(attachments = []) {
async function chatSync({
workspace,
message = null,
mode = "chat",
mode = null,
user = null,
thread = null,
sessionId = null,
@@ -120,7 +120,7 @@ async function chatSync({
reset = false,
}) {
const uuid = uuidv4();
const chatMode = mode ?? "chat";
const chatMode = mode ?? workspace?.chatMode ?? "automatic";
// If the user wants to reset the chat history we do so pre-flight
// and continue execution. If no message is provided then the user intended
@@ -459,7 +459,7 @@ async function streamChat({
response,
workspace,
message = null,
mode = "chat",
mode = null,
user = null,
thread = null,
sessionId = null,
@@ -467,7 +467,7 @@ async function streamChat({
reset = false,
}) {
const uuid = uuidv4();
const chatMode = mode ?? "chat";
const chatMode = mode ?? workspace?.chatMode ?? "automatic";
// If the user wants to reset the chat history we do so pre-flight
// and continue execution. If no message is provided then the user intended

View File

@@ -18,7 +18,10 @@ async function streamChatWithForEmbed(
sessionId,
{ promptOverride, modelOverride, temperatureOverride, username }
) {
const chatMode = embed.chat_mode;
// Automatic mode is NOT valid for embeds, so we default to chat mode.
let chatMode = embed.chat_mode ?? "chat";
if (chatMode === "automatic") chatMode = "chat";
const chatModel = embed.allow_model_override ? modelOverride : null;
// If there are overrides in request & they are permitted, override the default workspace ref information.

View File

@@ -16,7 +16,7 @@ async function chatSync({
temperature = null,
}) {
const uuid = uuidv4();
const chatMode = workspace?.chatMode ?? "chat";
const chatMode = workspace?.chatMode ?? "automatic";
const LLMConnector = getLLMProvider({
provider: workspace?.chatProvider,
model: workspace?.chatModel,
@@ -219,7 +219,7 @@ async function streamChat({
temperature = null,
}) {
const uuid = uuidv4();
const chatMode = workspace?.chatMode ?? "chat";
const chatMode = workspace?.chatMode ?? "automatic";
const LLMConnector = getLLMProvider({
provider: workspace?.chatProvider,
model: workspace?.chatModel,

View File

@@ -19,7 +19,7 @@ async function streamChatWithWorkspace(
response,
workspace,
message,
chatMode = "chat",
chatMode = "automatic",
user = null,
thread = null,
attachments = []

View File

@@ -79,7 +79,7 @@ async function streamResponse({
(await AgentHandler.isAgentInvocation({
message,
workspace,
chatMode: workspace.chatMode ?? "chat",
chatMode: workspace.chatMode ?? "automatic",
}))
) {
return await handleAgentResponse(