diff --git a/api/app/clients/OpenAIClient.js b/api/app/clients/OpenAIClient.js
index 8b71dcbc52..76b0bdf8dc 100644
--- a/api/app/clients/OpenAIClient.js
+++ b/api/app/clients/OpenAIClient.js
@@ -1286,6 +1286,8 @@ ${convo}
) {
delete modelOptions.stream;
delete modelOptions.stop;
+ } else if (!this.isO1Model && modelOptions.reasoning_effort != null) {
+ delete modelOptions.reasoning_effort;
}
let reasoningKey = 'reasoning_content';
diff --git a/api/package.json b/api/package.json
index f7104d8944..caeccc5bf4 100644
--- a/api/package.json
+++ b/api/package.json
@@ -44,7 +44,7 @@
"@langchain/google-genai": "^0.1.7",
"@langchain/google-vertexai": "^0.1.8",
"@langchain/textsplitters": "^0.1.0",
- "@librechat/agents": "^1.9.97",
+ "@librechat/agents": "^1.9.98",
"@waylaidwanderer/fetch-event-source": "^3.0.1",
"axios": "^1.7.7",
"bcryptjs": "^2.4.3",
diff --git a/api/server/controllers/agents/callbacks.js b/api/server/controllers/agents/callbacks.js
index 53b45d3b6d..33fe585f42 100644
--- a/api/server/controllers/agents/callbacks.js
+++ b/api/server/controllers/agents/callbacks.js
@@ -3,6 +3,7 @@ const {
EnvVar,
Providers,
GraphEvents,
+ getMessageId,
ToolEndHandler,
handleToolCalls,
ChatModelStreamHandler,
@@ -46,7 +47,7 @@ class ModelEndHandler {
}
try {
- if (metadata.provider === Providers.GOOGLE) {
+ if (metadata.provider === Providers.GOOGLE || graph.clientOptions?.disableStreaming) {
handleToolCalls(data?.output?.tool_calls, metadata, graph);
}
@@ -59,6 +60,38 @@ class ModelEndHandler {
}
this.collectedUsage.push(usage);
+ if (!graph.clientOptions?.disableStreaming) {
+ return;
+ }
+ if (!data.output.content) {
+ return;
+ }
+ const stepKey = graph.getStepKey(metadata);
+ const message_id = getMessageId(stepKey, graph) ?? '';
+ if (message_id) {
+ graph.dispatchRunStep(stepKey, {
+ type: StepTypes.MESSAGE_CREATION,
+ message_creation: {
+ message_id,
+ },
+ });
+ }
+ const stepId = graph.getStepIdByKey(stepKey);
+ const content = data.output.content;
+ if (typeof content === 'string') {
+ graph.dispatchMessageDelta(stepId, {
+ content: [
+ {
+ type: 'text',
+ text: content,
+ },
+ ],
+ });
+ } else if (content.every((c) => c.type?.startsWith('text'))) {
+ graph.dispatchMessageDelta(stepId, {
+ content,
+ });
+ }
} catch (error) {
logger.error('Error handling model end event:', error);
}
diff --git a/api/server/controllers/agents/run.js b/api/server/controllers/agents/run.js
index db7f945ca2..0fcc58a379 100644
--- a/api/server/controllers/agents/run.js
+++ b/api/server/controllers/agents/run.js
@@ -41,6 +41,11 @@ async function createRun({
agent.model_parameters,
);
+ if (/o1(?!-(?:mini|preview)).*$/.test(llmConfig.model)) {
+ llmConfig.streaming = false;
+ llmConfig.disableStreaming = true;
+ }
+
/** @type {StandardGraphConfig} */
const graphConfig = {
signal,
diff --git a/client/src/components/Artifacts/Artifact.tsx b/client/src/components/Artifacts/Artifact.tsx
index 97558302b5..1f89ca2b39 100644
--- a/client/src/components/Artifacts/Artifact.tsx
+++ b/client/src/components/Artifacts/Artifact.tsx
@@ -6,8 +6,8 @@ import type { Pluggable } from 'unified';
import type { Artifact } from '~/common';
import { useMessageContext, useArtifactContext } from '~/Providers';
import { artifactsState } from '~/store/artifacts';
+import { logger, extractContent } from '~/utils';
import ArtifactButton from './ArtifactButton';
-import { logger } from '~/utils';
export const artifactPlugin: Pluggable = () => {
return (tree) => {
@@ -22,21 +22,6 @@ export const artifactPlugin: Pluggable = () => {
};
};
-const extractContent = (
- children: React.ReactNode | { props: { children: React.ReactNode } } | string,
-): string => {
- if (typeof children === 'string') {
- return children;
- }
- if (React.isValidElement(children)) {
- return extractContent((children.props as { children?: React.ReactNode }).children);
- }
- if (Array.isArray(children)) {
- return children.map(extractContent).join('');
- }
- return '';
-};
-
export function Artifact({
// eslint-disable-next-line @typescript-eslint/no-unused-vars
node,
diff --git a/client/src/components/Artifacts/Thinking.tsx b/client/src/components/Artifacts/Thinking.tsx
index ed0540d337..08e241c6e8 100644
--- a/client/src/components/Artifacts/Thinking.tsx
+++ b/client/src/components/Artifacts/Thinking.tsx
@@ -3,6 +3,7 @@ import { useRecoilValue } from 'recoil';
import { Atom, ChevronDown } from 'lucide-react';
import type { MouseEvent, FC } from 'react';
import { useLocalize } from '~/hooks';
+import { cn } from '~/utils';
import store from '~/store';
const BUTTON_STYLES = {
@@ -63,19 +64,21 @@ const Thinking: React.ElementType = memo(({ children }: { children: React.ReactN
}
return (
-
-
+ <>
+
+
+
- {children}
+ {children}
-
+ >
);
});
diff --git a/client/src/components/Chat/Messages/Content/Markdown.tsx b/client/src/components/Chat/Messages/Content/Markdown.tsx
index 8cb33948b4..34b46b9d3d 100644
--- a/client/src/components/Chat/Messages/Content/Markdown.tsx
+++ b/client/src/components/Chat/Messages/Content/Markdown.tsx
@@ -17,7 +17,6 @@ import {
import { Artifact, artifactPlugin } from '~/components/Artifacts/Artifact';
import { langSubset, preprocessLaTeX, handleDoubleClick } from '~/utils';
import CodeBlock from '~/components/Messages/Content/CodeBlock';
-import Thinking from '~/components/Artifacts/Thinking';
import { useFileDownload } from '~/data-provider';
import useLocalize from '~/hooks/useLocalize';
import store from '~/store';
@@ -223,7 +222,6 @@ const Markdown = memo(({ content = '', showCursor, isLatestMessage }: TContentPr
a,
p,
artifact: Artifact,
- thinking: Thinking,
} as {
[nodeType: string]: React.ElementType;
}
diff --git a/client/src/components/Chat/Messages/Content/MessageContent.tsx b/client/src/components/Chat/Messages/Content/MessageContent.tsx
index 4afabdcde9..21bbe231e6 100644
--- a/client/src/components/Chat/Messages/Content/MessageContent.tsx
+++ b/client/src/components/Chat/Messages/Content/MessageContent.tsx
@@ -1,9 +1,9 @@
-import { Fragment, Suspense, useMemo } from 'react';
+import { memo, Suspense, useMemo } from 'react';
import { useRecoilValue } from 'recoil';
-import type { TMessage, TResPlugin } from 'librechat-data-provider';
+import type { TMessage } from 'librechat-data-provider';
import type { TMessageContentProps, TDisplayProps } from '~/common';
-import Plugin from '~/components/Messages/Content/Plugin';
import Error from '~/components/Messages/Content/Error';
+import Thinking from '~/components/Artifacts/Thinking';
import { DelayedRender } from '~/components/ui';
import { useChatContext } from '~/Providers';
import MarkdownLite from './MarkdownLite';
@@ -117,7 +117,6 @@ export const UnfinishedMessage = ({ message }: { message: TMessage }) => (
/>
);
-// Content Component
const MessageContent = ({
text,
edit,
@@ -127,72 +126,49 @@ const MessageContent = ({
isLast,
...props
}: TMessageContentProps) => {
+ const { message } = props;
+ const { messageId } = message;
+
+ const { thinkingContent, regularContent } = useMemo(() => {
+ const thinkingMatch = text.match(/:::thinking([\s\S]*?):::/);
+ return {
+ thinkingContent: thinkingMatch ? thinkingMatch[1].trim() : '',
+ regularContent: thinkingMatch ? text.replace(/:::thinking[\s\S]*?:::/, '').trim() : text,
+ };
+ }, [text]);
+
+ const showRegularCursor = useMemo(() => isLast && isSubmitting, [isLast, isSubmitting]);
+
+ const unfinishedMessage = useMemo(
+ () =>
+ !isSubmitting && unfinished ? (
+
+
+
+
+
+ ) : null,
+ [isSubmitting, unfinished, message],
+ );
+
if (error) {
return ;
} else if (edit) {
return ;
- } else {
- const marker = ':::plugin:::\n';
- const splitText = text.split(marker);
- const { message } = props;
- const { plugins, messageId } = message;
- const displayedIndices = new Set();
- // Function to get the next non-empty text index
- const getNextNonEmptyTextIndex = (currentIndex: number) => {
- for (let i = currentIndex + 1; i < splitText.length; i++) {
- // Allow the last index to be last in case it has text
- // this may need to change if I add back streaming
- if (i === splitText.length - 1) {
- return currentIndex;
- }
-
- if (splitText[i].trim() !== '' && !displayedIndices.has(i)) {
- return i;
- }
- }
- return currentIndex; // If no non-empty text is found, return the current index
- };
-
- return splitText.map((text, idx) => {
- let currentText = text.trim();
- let plugin: TResPlugin | null = null;
-
- if (plugins) {
- plugin = plugins[idx];
- }
-
- // If the current text is empty, get the next non-empty text index
- const displayTextIndex = currentText === '' ? getNextNonEmptyTextIndex(idx) : idx;
- currentText = splitText[displayTextIndex];
- const isLastIndex = displayTextIndex === splitText.length - 1;
- const isEmpty = currentText.trim() === '';
- const showText =
- (currentText && !isEmpty && !displayedIndices.has(displayTextIndex)) ||
- (isEmpty && isLastIndex);
- displayedIndices.add(displayTextIndex);
-
- return (
-
- {plugin && }
- {showText ? (
-
- ) : null}
- {!isSubmitting && unfinished && (
-
-
-
-
-
- )}
-
- );
- });
}
+
+ return (
+ <>
+ {thinkingContent && {thinkingContent}}
+
+ {unfinishedMessage}
+ >
+ );
};
-export default MessageContent;
+export default memo(MessageContent);
diff --git a/client/src/components/Chat/Messages/Content/Parts/Reasoning.tsx b/client/src/components/Chat/Messages/Content/Parts/Reasoning.tsx
index 2dcb616a16..447bf2f2c4 100644
--- a/client/src/components/Chat/Messages/Content/Parts/Reasoning.tsx
+++ b/client/src/components/Chat/Messages/Content/Parts/Reasoning.tsx
@@ -18,7 +18,7 @@ const Reasoning = memo(({ reasoning }: ReasoningProps) => {
= {
optionType: 'model',
columnSpan: 2,
},
+ reasoning_effort: {
+ key: 'reasoning_effort',
+ label: 'com_endpoint_reasoning_effort',
+ labelCode: true,
+ description: 'com_endpoint_openai_reasoning_effort',
+ descriptionCode: true,
+ type: 'enum',
+ default: ReasoningEffort.medium,
+ component: 'slider',
+ options: [ReasoningEffort.low, ReasoningEffort.medium, ReasoningEffort.high],
+ optionType: 'model',
+ columnSpan: 4,
+ },
};
const anthropic: Record
= {
@@ -446,6 +460,7 @@ const openAI: SettingsConfiguration = [
baseDefinitions.stop,
librechat.resendFiles,
baseDefinitions.imageDetail,
+ openAIParams.reasoning_effort,
];
const openAICol1: SettingsConfiguration = [
@@ -453,6 +468,7 @@ const openAICol1: SettingsConfiguration = [
openAIParams.chatGptLabel,
librechat.promptPrefix,
librechat.maxContextTokens,
+ openAIParams.reasoning_effort,
];
const openAICol2: SettingsConfiguration = [
diff --git a/client/src/localization/languages/Eng.ts b/client/src/localization/languages/Eng.ts
index 7ca511f8cf..140b884f5d 100644
--- a/client/src/localization/languages/Eng.ts
+++ b/client/src/localization/languages/Eng.ts
@@ -578,6 +578,7 @@ export default {
com_endpoint_top_k: 'Top K',
com_endpoint_max_output_tokens: 'Max Output Tokens',
com_endpoint_stop: 'Stop Sequences',
+ com_endpoint_reasoning_effort: 'Reasoning Effort',
com_endpoint_stop_placeholder: 'Separate values by pressing `Enter`',
com_endpoint_openai_max_tokens: `Optional \`max_tokens\` field, representing the maximum number of tokens that can be generated in the chat completion.
@@ -596,6 +597,8 @@ export default {
'Resend all previously attached images. Note: this can significantly increase token cost and you may experience errors with many image attachments.',
com_endpoint_openai_resend_files:
'Resend all previously attached files. Note: this will increase token cost and you may experience errors with many attachments.',
+ com_endpoint_openai_reasoning_effort:
+ 'o1 models only: constrains effort on reasoning for reasoning models. Reducing reasoning effort can result in faster responses and fewer tokens used on reasoning in a response.',
com_endpoint_openai_detail:
'The resolution for Vision requests. "Low" is cheaper and faster, "High" is more detailed and expensive, and "Auto" will automatically choose between the two based on the image resolution.',
com_endpoint_openai_stop: 'Up to 4 sequences where the API will stop generating further tokens.',
diff --git a/client/src/routes/RouteErrorBoundary.tsx b/client/src/routes/RouteErrorBoundary.tsx
index 082d964559..6221ab25b8 100644
--- a/client/src/routes/RouteErrorBoundary.tsx
+++ b/client/src/routes/RouteErrorBoundary.tsx
@@ -1,5 +1,6 @@
import { useRouteError } from 'react-router-dom';
import { Button } from '~/components/ui';
+import logger from '~/utils/logger';
interface UserAgentData {
getHighEntropyValues(hints: string[]): Promise<{ platform: string; platformVersion: string }>;
@@ -31,7 +32,8 @@ const getPlatformInfo = async (): Promise => {
version: highEntropyValues.platformVersion,
};
} catch (e) {
- console.warn('Failed to get high entropy values:', e);
+ logger.warn('Failed to get high entropy values');
+ logger.error(e);
}
}
@@ -85,28 +87,33 @@ export default function RouteErrorBoundary() {
};
const handleDownloadLogs = async () => {
- const browser = await getBrowserInfo();
- const errorLog = {
- timestamp: new Date().toISOString(),
- browser,
- error: {
- ...errorDetails,
- stack:
- errorDetails.stack != null && errorDetails.stack.trim() !== ''
- ? formatStackTrace(errorDetails.stack)
- : undefined,
- },
- };
+ try {
+ const browser = await getBrowserInfo();
+ const errorLog = {
+ timestamp: new Date().toISOString(),
+ browser,
+ error: {
+ ...errorDetails,
+ stack:
+ errorDetails.stack != null && errorDetails.stack.trim() !== ''
+ ? formatStackTrace(errorDetails.stack)
+ : undefined,
+ },
+ };
- const blob = new Blob([JSON.stringify(errorLog, null, 2)], { type: 'application/json' });
- const url = URL.createObjectURL(blob);
- const a = document.createElement('a');
- a.href = url;
- a.download = `error-log-${new Date().toISOString()}.json`;
- document.body.appendChild(a);
- a.click();
- document.body.removeChild(a);
- URL.revokeObjectURL(url);
+ const blob = new Blob([JSON.stringify(errorLog, null, 2)], { type: 'application/json' });
+ const url = URL.createObjectURL(blob);
+ const a = document.createElement('a');
+ a.href = url;
+ a.download = `error-log-${new Date().toISOString()}.json`;
+ document.body.appendChild(a);
+ a.click();
+ document.body.removeChild(a);
+ URL.revokeObjectURL(url);
+ } catch (e) {
+ logger.warn('Failed to download error logs:');
+ logger.error(e);
+ }
};
const handleCopyStack = async () => {
diff --git a/client/src/utils/index.ts b/client/src/utils/index.ts
index 5d2991abd5..0d365d7beb 100644
--- a/client/src/utils/index.ts
+++ b/client/src/utils/index.ts
@@ -1,3 +1,5 @@
+import React from 'react';
+
export * from './map';
export * from './json';
export * from './files';
@@ -82,3 +84,18 @@ export const handleDoubleClick: React.MouseEventHandler = (event) =
selection.removeAllRanges();
selection.addRange(range);
};
+
+export const extractContent = (
+ children: React.ReactNode | { props: { children: React.ReactNode } } | string,
+): string => {
+ if (typeof children === 'string') {
+ return children;
+ }
+ if (React.isValidElement(children)) {
+ return extractContent((children.props as { children?: React.ReactNode }).children);
+ }
+ if (Array.isArray(children)) {
+ return children.map(extractContent).join('');
+ }
+ return '';
+};
diff --git a/package-lock.json b/package-lock.json
index c2c632510d..a4ee58a353 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -53,7 +53,7 @@
"@langchain/google-genai": "^0.1.7",
"@langchain/google-vertexai": "^0.1.8",
"@langchain/textsplitters": "^0.1.0",
- "@librechat/agents": "^1.9.97",
+ "@librechat/agents": "^1.9.98",
"@waylaidwanderer/fetch-event-source": "^3.0.1",
"axios": "^1.7.7",
"bcryptjs": "^2.4.3",
@@ -643,565 +643,6 @@
"@langchain/core": ">=0.2.21 <0.4.0"
}
},
- "api/node_modules/@librechat/agents": {
- "version": "1.9.97",
- "resolved": "https://registry.npmjs.org/@librechat/agents/-/agents-1.9.97.tgz",
- "integrity": "sha512-saV8eY3fj0xnBClBHij/I6Xfq8WaNmctNHqEK6d1pJj7+7jTrI+3Ub8ZT6baa8khMuspFLCP5e7zewOKprudBQ==",
- "dependencies": {
- "@aws-crypto/sha256-js": "^5.2.0",
- "@aws-sdk/credential-provider-node": "^3.613.0",
- "@aws-sdk/types": "^3.609.0",
- "@langchain/anthropic": "^0.3.12",
- "@langchain/aws": "^0.1.3",
- "@langchain/community": "^0.3.27",
- "@langchain/core": "^0.3.36",
- "@langchain/google-genai": "^0.1.7",
- "@langchain/google-vertexai": "^0.1.8",
- "@langchain/langgraph": "^0.2.41",
- "@langchain/mistralai": "^0.0.26",
- "@langchain/ollama": "^0.1.5",
- "@langchain/openai": "^0.4.2",
- "@smithy/eventstream-codec": "^2.2.0",
- "@smithy/protocol-http": "^3.0.6",
- "@smithy/signature-v4": "^2.0.10",
- "@smithy/util-utf8": "^2.0.0",
- "dotenv": "^16.4.5",
- "nanoid": "^3.3.7"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "api/node_modules/@librechat/agents/node_modules/@langchain/community": {
- "version": "0.3.27",
- "resolved": "https://registry.npmjs.org/@langchain/community/-/community-0.3.27.tgz",
- "integrity": "sha512-YdVDysg/k4LiRJgtGo5IHlrtAMsWK5o7/WtgUGsyABAfKNAcFY2dBV5NClbEwS2GuE4Ll8TC3PxSWIctH42oeg==",
- "dependencies": {
- "@langchain/openai": ">=0.2.0 <0.5.0",
- "binary-extensions": "^2.2.0",
- "expr-eval": "^2.0.2",
- "flat": "^5.0.2",
- "js-yaml": "^4.1.0",
- "langchain": ">=0.2.3 <0.3.0 || >=0.3.4 <0.4.0",
- "langsmith": ">=0.2.8 <0.4.0",
- "uuid": "^10.0.0",
- "zod": "^3.22.3",
- "zod-to-json-schema": "^3.22.5"
- },
- "engines": {
- "node": ">=18"
- },
- "peerDependencies": {
- "@arcjet/redact": "^v1.0.0-alpha.23",
- "@aws-crypto/sha256-js": "^5.0.0",
- "@aws-sdk/client-bedrock-agent-runtime": "^3.583.0",
- "@aws-sdk/client-bedrock-runtime": "^3.422.0",
- "@aws-sdk/client-dynamodb": "^3.310.0",
- "@aws-sdk/client-kendra": "^3.352.0",
- "@aws-sdk/client-lambda": "^3.310.0",
- "@aws-sdk/client-s3": "^3.310.0",
- "@aws-sdk/client-sagemaker-runtime": "^3.310.0",
- "@aws-sdk/client-sfn": "^3.310.0",
- "@aws-sdk/credential-provider-node": "^3.388.0",
- "@azure/search-documents": "^12.0.0",
- "@azure/storage-blob": "^12.15.0",
- "@browserbasehq/sdk": "*",
- "@browserbasehq/stagehand": "^1.0.0",
- "@clickhouse/client": "^0.2.5",
- "@cloudflare/ai": "*",
- "@datastax/astra-db-ts": "^1.0.0",
- "@elastic/elasticsearch": "^8.4.0",
- "@getmetal/metal-sdk": "*",
- "@getzep/zep-cloud": "^1.0.6",
- "@getzep/zep-js": "^0.9.0",
- "@gomomento/sdk": "^1.51.1",
- "@gomomento/sdk-core": "^1.51.1",
- "@google-ai/generativelanguage": "*",
- "@google-cloud/storage": "^6.10.1 || ^7.7.0",
- "@gradientai/nodejs-sdk": "^1.2.0",
- "@huggingface/inference": "^2.6.4",
- "@huggingface/transformers": "^3.2.3",
- "@ibm-cloud/watsonx-ai": "*",
- "@lancedb/lancedb": "^0.12.0",
- "@langchain/core": ">=0.2.21 <0.4.0",
- "@layerup/layerup-security": "^1.5.12",
- "@libsql/client": "^0.14.0",
- "@mendable/firecrawl-js": "^1.4.3",
- "@mlc-ai/web-llm": "*",
- "@mozilla/readability": "*",
- "@neondatabase/serverless": "*",
- "@notionhq/client": "^2.2.10",
- "@opensearch-project/opensearch": "*",
- "@pinecone-database/pinecone": "*",
- "@planetscale/database": "^1.8.0",
- "@premai/prem-sdk": "^0.3.25",
- "@qdrant/js-client-rest": "^1.8.2",
- "@raycast/api": "^1.55.2",
- "@rockset/client": "^0.9.1",
- "@smithy/eventstream-codec": "^2.0.5",
- "@smithy/protocol-http": "^3.0.6",
- "@smithy/signature-v4": "^2.0.10",
- "@smithy/util-utf8": "^2.0.0",
- "@spider-cloud/spider-client": "^0.0.21",
- "@supabase/supabase-js": "^2.45.0",
- "@tensorflow-models/universal-sentence-encoder": "*",
- "@tensorflow/tfjs-converter": "*",
- "@tensorflow/tfjs-core": "*",
- "@upstash/ratelimit": "^1.1.3 || ^2.0.3",
- "@upstash/redis": "^1.20.6",
- "@upstash/vector": "^1.1.1",
- "@vercel/kv": "*",
- "@vercel/postgres": "*",
- "@writerai/writer-sdk": "^0.40.2",
- "@xata.io/client": "^0.28.0",
- "@zilliz/milvus2-sdk-node": ">=2.3.5",
- "apify-client": "^2.7.1",
- "assemblyai": "^4.6.0",
- "better-sqlite3": ">=9.4.0 <12.0.0",
- "cassandra-driver": "^4.7.2",
- "cborg": "^4.1.1",
- "cheerio": "^1.0.0-rc.12",
- "chromadb": "*",
- "closevector-common": "0.1.3",
- "closevector-node": "0.1.6",
- "closevector-web": "0.1.6",
- "cohere-ai": "*",
- "convex": "^1.3.1",
- "crypto-js": "^4.2.0",
- "d3-dsv": "^2.0.0",
- "discord.js": "^14.14.1",
- "dria": "^0.0.3",
- "duck-duck-scrape": "^2.2.5",
- "epub2": "^3.0.1",
- "faiss-node": "^0.5.1",
- "fast-xml-parser": "*",
- "firebase-admin": "^11.9.0 || ^12.0.0",
- "google-auth-library": "*",
- "googleapis": "*",
- "hnswlib-node": "^3.0.0",
- "html-to-text": "^9.0.5",
- "ibm-cloud-sdk-core": "*",
- "ignore": "^5.2.0",
- "interface-datastore": "^8.2.11",
- "ioredis": "^5.3.2",
- "it-all": "^3.0.4",
- "jsdom": "*",
- "jsonwebtoken": "^9.0.2",
- "llmonitor": "^0.5.9",
- "lodash": "^4.17.21",
- "lunary": "^0.7.10",
- "mammoth": "^1.6.0",
- "mongodb": ">=5.2.0",
- "mysql2": "^3.9.8",
- "neo4j-driver": "*",
- "notion-to-md": "^3.1.0",
- "officeparser": "^4.0.4",
- "openai": "*",
- "pdf-parse": "1.1.1",
- "pg": "^8.11.0",
- "pg-copy-streams": "^6.0.5",
- "pickleparser": "^0.2.1",
- "playwright": "^1.32.1",
- "portkey-ai": "^0.1.11",
- "puppeteer": "*",
- "pyodide": ">=0.24.1 <0.27.0",
- "redis": "*",
- "replicate": "^0.29.4",
- "sonix-speech-recognition": "^2.1.1",
- "srt-parser-2": "^1.2.3",
- "typeorm": "^0.3.20",
- "typesense": "^1.5.3",
- "usearch": "^1.1.1",
- "voy-search": "0.6.2",
- "weaviate-ts-client": "*",
- "web-auth-library": "^1.0.3",
- "word-extractor": "*",
- "ws": "^8.14.2",
- "youtubei.js": "*"
- },
- "peerDependenciesMeta": {
- "@arcjet/redact": {
- "optional": true
- },
- "@aws-crypto/sha256-js": {
- "optional": true
- },
- "@aws-sdk/client-bedrock-agent-runtime": {
- "optional": true
- },
- "@aws-sdk/client-bedrock-runtime": {
- "optional": true
- },
- "@aws-sdk/client-dynamodb": {
- "optional": true
- },
- "@aws-sdk/client-kendra": {
- "optional": true
- },
- "@aws-sdk/client-lambda": {
- "optional": true
- },
- "@aws-sdk/client-s3": {
- "optional": true
- },
- "@aws-sdk/client-sagemaker-runtime": {
- "optional": true
- },
- "@aws-sdk/client-sfn": {
- "optional": true
- },
- "@aws-sdk/credential-provider-node": {
- "optional": true
- },
- "@azure/search-documents": {
- "optional": true
- },
- "@azure/storage-blob": {
- "optional": true
- },
- "@browserbasehq/sdk": {
- "optional": true
- },
- "@clickhouse/client": {
- "optional": true
- },
- "@cloudflare/ai": {
- "optional": true
- },
- "@datastax/astra-db-ts": {
- "optional": true
- },
- "@elastic/elasticsearch": {
- "optional": true
- },
- "@getmetal/metal-sdk": {
- "optional": true
- },
- "@getzep/zep-cloud": {
- "optional": true
- },
- "@getzep/zep-js": {
- "optional": true
- },
- "@gomomento/sdk": {
- "optional": true
- },
- "@gomomento/sdk-core": {
- "optional": true
- },
- "@google-ai/generativelanguage": {
- "optional": true
- },
- "@google-cloud/storage": {
- "optional": true
- },
- "@gradientai/nodejs-sdk": {
- "optional": true
- },
- "@huggingface/inference": {
- "optional": true
- },
- "@huggingface/transformers": {
- "optional": true
- },
- "@lancedb/lancedb": {
- "optional": true
- },
- "@layerup/layerup-security": {
- "optional": true
- },
- "@libsql/client": {
- "optional": true
- },
- "@mendable/firecrawl-js": {
- "optional": true
- },
- "@mlc-ai/web-llm": {
- "optional": true
- },
- "@mozilla/readability": {
- "optional": true
- },
- "@neondatabase/serverless": {
- "optional": true
- },
- "@notionhq/client": {
- "optional": true
- },
- "@opensearch-project/opensearch": {
- "optional": true
- },
- "@pinecone-database/pinecone": {
- "optional": true
- },
- "@planetscale/database": {
- "optional": true
- },
- "@premai/prem-sdk": {
- "optional": true
- },
- "@qdrant/js-client-rest": {
- "optional": true
- },
- "@raycast/api": {
- "optional": true
- },
- "@rockset/client": {
- "optional": true
- },
- "@smithy/eventstream-codec": {
- "optional": true
- },
- "@smithy/protocol-http": {
- "optional": true
- },
- "@smithy/signature-v4": {
- "optional": true
- },
- "@smithy/util-utf8": {
- "optional": true
- },
- "@spider-cloud/spider-client": {
- "optional": true
- },
- "@supabase/supabase-js": {
- "optional": true
- },
- "@tensorflow-models/universal-sentence-encoder": {
- "optional": true
- },
- "@tensorflow/tfjs-converter": {
- "optional": true
- },
- "@tensorflow/tfjs-core": {
- "optional": true
- },
- "@upstash/ratelimit": {
- "optional": true
- },
- "@upstash/redis": {
- "optional": true
- },
- "@upstash/vector": {
- "optional": true
- },
- "@vercel/kv": {
- "optional": true
- },
- "@vercel/postgres": {
- "optional": true
- },
- "@writerai/writer-sdk": {
- "optional": true
- },
- "@xata.io/client": {
- "optional": true
- },
- "@zilliz/milvus2-sdk-node": {
- "optional": true
- },
- "apify-client": {
- "optional": true
- },
- "assemblyai": {
- "optional": true
- },
- "better-sqlite3": {
- "optional": true
- },
- "cassandra-driver": {
- "optional": true
- },
- "cborg": {
- "optional": true
- },
- "cheerio": {
- "optional": true
- },
- "chromadb": {
- "optional": true
- },
- "closevector-common": {
- "optional": true
- },
- "closevector-node": {
- "optional": true
- },
- "closevector-web": {
- "optional": true
- },
- "cohere-ai": {
- "optional": true
- },
- "convex": {
- "optional": true
- },
- "crypto-js": {
- "optional": true
- },
- "d3-dsv": {
- "optional": true
- },
- "discord.js": {
- "optional": true
- },
- "dria": {
- "optional": true
- },
- "duck-duck-scrape": {
- "optional": true
- },
- "epub2": {
- "optional": true
- },
- "faiss-node": {
- "optional": true
- },
- "fast-xml-parser": {
- "optional": true
- },
- "firebase-admin": {
- "optional": true
- },
- "google-auth-library": {
- "optional": true
- },
- "googleapis": {
- "optional": true
- },
- "hnswlib-node": {
- "optional": true
- },
- "html-to-text": {
- "optional": true
- },
- "ignore": {
- "optional": true
- },
- "interface-datastore": {
- "optional": true
- },
- "ioredis": {
- "optional": true
- },
- "it-all": {
- "optional": true
- },
- "jsdom": {
- "optional": true
- },
- "jsonwebtoken": {
- "optional": true
- },
- "llmonitor": {
- "optional": true
- },
- "lodash": {
- "optional": true
- },
- "lunary": {
- "optional": true
- },
- "mammoth": {
- "optional": true
- },
- "mongodb": {
- "optional": true
- },
- "mysql2": {
- "optional": true
- },
- "neo4j-driver": {
- "optional": true
- },
- "notion-to-md": {
- "optional": true
- },
- "officeparser": {
- "optional": true
- },
- "pdf-parse": {
- "optional": true
- },
- "pg": {
- "optional": true
- },
- "pg-copy-streams": {
- "optional": true
- },
- "pickleparser": {
- "optional": true
- },
- "playwright": {
- "optional": true
- },
- "portkey-ai": {
- "optional": true
- },
- "puppeteer": {
- "optional": true
- },
- "pyodide": {
- "optional": true
- },
- "redis": {
- "optional": true
- },
- "replicate": {
- "optional": true
- },
- "sonix-speech-recognition": {
- "optional": true
- },
- "srt-parser-2": {
- "optional": true
- },
- "typeorm": {
- "optional": true
- },
- "typesense": {
- "optional": true
- },
- "usearch": {
- "optional": true
- },
- "voy-search": {
- "optional": true
- },
- "weaviate-ts-client": {
- "optional": true
- },
- "web-auth-library": {
- "optional": true
- },
- "word-extractor": {
- "optional": true
- },
- "ws": {
- "optional": true
- },
- "youtubei.js": {
- "optional": true
- }
- }
- },
- "api/node_modules/@librechat/agents/node_modules/@langchain/openai": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/@langchain/openai/-/openai-0.4.2.tgz",
- "integrity": "sha512-Cuj7qbVcycALTP0aqZuPpEc7As8cwiGaU21MhXRyZFs+dnWxKYxZ1Q1z4kcx6cYkq/I+CNwwmk+sP+YruU73Aw==",
- "dependencies": {
- "js-tiktoken": "^1.0.12",
- "openai": "^4.77.0",
- "zod": "^3.22.4",
- "zod-to-json-schema": "^3.22.3"
- },
- "engines": {
- "node": ">=18"
- },
- "peerDependencies": {
- "@langchain/core": ">=0.3.29 <0.4.0"
- }
- },
"api/node_modules/@types/node": {
"version": "18.19.14",
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.14.tgz",
@@ -10772,11 +10213,11 @@
}
},
"node_modules/@langchain/langgraph": {
- "version": "0.2.41",
- "resolved": "https://registry.npmjs.org/@langchain/langgraph/-/langgraph-0.2.41.tgz",
- "integrity": "sha512-NeNizWP4k9voEwJxuFtfopF02Lx1isuEsdZKYCN3ueJpOnkVg0iGx8woPBsQpYcrWcySkIt3zOkgtUsrNHqo3g==",
+ "version": "0.2.43",
+ "resolved": "https://registry.npmjs.org/@langchain/langgraph/-/langgraph-0.2.43.tgz",
+ "integrity": "sha512-uhdbzm3psUIEqxQUQPXeafLC5dxTzALrVGRnnGZi9gt0qlDueRfopZoh7uWJy+Zol+yN/E2mM3M6ZztSsfUEuQ==",
"dependencies": {
- "@langchain/langgraph-checkpoint": "~0.0.13",
+ "@langchain/langgraph-checkpoint": "~0.0.14",
"@langchain/langgraph-sdk": "~0.0.32",
"uuid": "^10.0.0",
"zod": "^3.23.8"
@@ -10789,9 +10230,9 @@
}
},
"node_modules/@langchain/langgraph-checkpoint": {
- "version": "0.0.13",
- "resolved": "https://registry.npmjs.org/@langchain/langgraph-checkpoint/-/langgraph-checkpoint-0.0.13.tgz",
- "integrity": "sha512-amdmBcNT8a9xP2VwcEWxqArng4gtRDcnVyVI4DsQIo1Aaz8e8+hH17zSwrUF3pt1pIYztngIfYnBOim31mtKMg==",
+ "version": "0.0.15",
+ "resolved": "https://registry.npmjs.org/@langchain/langgraph-checkpoint/-/langgraph-checkpoint-0.0.15.tgz",
+ "integrity": "sha512-AiJkvsYHqNbCh1Tx823qs2lf2qRqeB4EAMejirOk8gkpPszAGYua5c3niKYkcKR2tU8Snhrmj7Gm9HKZSFOXyw==",
"dependencies": {
"uuid": "^10.0.0"
},
@@ -11090,6 +10531,577 @@
"@lezer/common": "^1.0.0"
}
},
+ "node_modules/@librechat/agents": {
+ "version": "1.9.98",
+ "resolved": "https://registry.npmjs.org/@librechat/agents/-/agents-1.9.98.tgz",
+ "integrity": "sha512-5J+JH9OK/ZvgfvNwvlBvK62CMvknC4wdgCAuqzyAgFc1AJdg91XKm6S9W2ZBheJziLPv1/3TZTjqYY5jel8EsQ==",
+ "dependencies": {
+ "@aws-crypto/sha256-js": "^5.2.0",
+ "@aws-sdk/credential-provider-node": "^3.613.0",
+ "@aws-sdk/types": "^3.609.0",
+ "@langchain/anthropic": "^0.3.12",
+ "@langchain/aws": "^0.1.3",
+ "@langchain/community": "^0.3.27",
+ "@langchain/core": "^0.3.36",
+ "@langchain/google-genai": "^0.1.7",
+ "@langchain/google-vertexai": "^0.1.8",
+ "@langchain/langgraph": "^0.2.41",
+ "@langchain/mistralai": "^0.0.26",
+ "@langchain/ollama": "^0.1.5",
+ "@langchain/openai": "^0.4.2",
+ "@smithy/eventstream-codec": "^2.2.0",
+ "@smithy/protocol-http": "^3.0.6",
+ "@smithy/signature-v4": "^2.0.10",
+ "@smithy/util-utf8": "^2.0.0",
+ "dotenv": "^16.4.5",
+ "nanoid": "^3.3.7"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@librechat/agents/node_modules/@langchain/community": {
+ "version": "0.3.27",
+ "resolved": "https://registry.npmjs.org/@langchain/community/-/community-0.3.27.tgz",
+ "integrity": "sha512-YdVDysg/k4LiRJgtGo5IHlrtAMsWK5o7/WtgUGsyABAfKNAcFY2dBV5NClbEwS2GuE4Ll8TC3PxSWIctH42oeg==",
+ "dependencies": {
+ "@langchain/openai": ">=0.2.0 <0.5.0",
+ "binary-extensions": "^2.2.0",
+ "expr-eval": "^2.0.2",
+ "flat": "^5.0.2",
+ "js-yaml": "^4.1.0",
+ "langchain": ">=0.2.3 <0.3.0 || >=0.3.4 <0.4.0",
+ "langsmith": ">=0.2.8 <0.4.0",
+ "uuid": "^10.0.0",
+ "zod": "^3.22.3",
+ "zod-to-json-schema": "^3.22.5"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@arcjet/redact": "^v1.0.0-alpha.23",
+ "@aws-crypto/sha256-js": "^5.0.0",
+ "@aws-sdk/client-bedrock-agent-runtime": "^3.583.0",
+ "@aws-sdk/client-bedrock-runtime": "^3.422.0",
+ "@aws-sdk/client-dynamodb": "^3.310.0",
+ "@aws-sdk/client-kendra": "^3.352.0",
+ "@aws-sdk/client-lambda": "^3.310.0",
+ "@aws-sdk/client-s3": "^3.310.0",
+ "@aws-sdk/client-sagemaker-runtime": "^3.310.0",
+ "@aws-sdk/client-sfn": "^3.310.0",
+ "@aws-sdk/credential-provider-node": "^3.388.0",
+ "@azure/search-documents": "^12.0.0",
+ "@azure/storage-blob": "^12.15.0",
+ "@browserbasehq/sdk": "*",
+ "@browserbasehq/stagehand": "^1.0.0",
+ "@clickhouse/client": "^0.2.5",
+ "@cloudflare/ai": "*",
+ "@datastax/astra-db-ts": "^1.0.0",
+ "@elastic/elasticsearch": "^8.4.0",
+ "@getmetal/metal-sdk": "*",
+ "@getzep/zep-cloud": "^1.0.6",
+ "@getzep/zep-js": "^0.9.0",
+ "@gomomento/sdk": "^1.51.1",
+ "@gomomento/sdk-core": "^1.51.1",
+ "@google-ai/generativelanguage": "*",
+ "@google-cloud/storage": "^6.10.1 || ^7.7.0",
+ "@gradientai/nodejs-sdk": "^1.2.0",
+ "@huggingface/inference": "^2.6.4",
+ "@huggingface/transformers": "^3.2.3",
+ "@ibm-cloud/watsonx-ai": "*",
+ "@lancedb/lancedb": "^0.12.0",
+ "@langchain/core": ">=0.2.21 <0.4.0",
+ "@layerup/layerup-security": "^1.5.12",
+ "@libsql/client": "^0.14.0",
+ "@mendable/firecrawl-js": "^1.4.3",
+ "@mlc-ai/web-llm": "*",
+ "@mozilla/readability": "*",
+ "@neondatabase/serverless": "*",
+ "@notionhq/client": "^2.2.10",
+ "@opensearch-project/opensearch": "*",
+ "@pinecone-database/pinecone": "*",
+ "@planetscale/database": "^1.8.0",
+ "@premai/prem-sdk": "^0.3.25",
+ "@qdrant/js-client-rest": "^1.8.2",
+ "@raycast/api": "^1.55.2",
+ "@rockset/client": "^0.9.1",
+ "@smithy/eventstream-codec": "^2.0.5",
+ "@smithy/protocol-http": "^3.0.6",
+ "@smithy/signature-v4": "^2.0.10",
+ "@smithy/util-utf8": "^2.0.0",
+ "@spider-cloud/spider-client": "^0.0.21",
+ "@supabase/supabase-js": "^2.45.0",
+ "@tensorflow-models/universal-sentence-encoder": "*",
+ "@tensorflow/tfjs-converter": "*",
+ "@tensorflow/tfjs-core": "*",
+ "@upstash/ratelimit": "^1.1.3 || ^2.0.3",
+ "@upstash/redis": "^1.20.6",
+ "@upstash/vector": "^1.1.1",
+ "@vercel/kv": "*",
+ "@vercel/postgres": "*",
+ "@writerai/writer-sdk": "^0.40.2",
+ "@xata.io/client": "^0.28.0",
+ "@zilliz/milvus2-sdk-node": ">=2.3.5",
+ "apify-client": "^2.7.1",
+ "assemblyai": "^4.6.0",
+ "better-sqlite3": ">=9.4.0 <12.0.0",
+ "cassandra-driver": "^4.7.2",
+ "cborg": "^4.1.1",
+ "cheerio": "^1.0.0-rc.12",
+ "chromadb": "*",
+ "closevector-common": "0.1.3",
+ "closevector-node": "0.1.6",
+ "closevector-web": "0.1.6",
+ "cohere-ai": "*",
+ "convex": "^1.3.1",
+ "crypto-js": "^4.2.0",
+ "d3-dsv": "^2.0.0",
+ "discord.js": "^14.14.1",
+ "dria": "^0.0.3",
+ "duck-duck-scrape": "^2.2.5",
+ "epub2": "^3.0.1",
+ "faiss-node": "^0.5.1",
+ "fast-xml-parser": "*",
+ "firebase-admin": "^11.9.0 || ^12.0.0",
+ "google-auth-library": "*",
+ "googleapis": "*",
+ "hnswlib-node": "^3.0.0",
+ "html-to-text": "^9.0.5",
+ "ibm-cloud-sdk-core": "*",
+ "ignore": "^5.2.0",
+ "interface-datastore": "^8.2.11",
+ "ioredis": "^5.3.2",
+ "it-all": "^3.0.4",
+ "jsdom": "*",
+ "jsonwebtoken": "^9.0.2",
+ "llmonitor": "^0.5.9",
+ "lodash": "^4.17.21",
+ "lunary": "^0.7.10",
+ "mammoth": "^1.6.0",
+ "mongodb": ">=5.2.0",
+ "mysql2": "^3.9.8",
+ "neo4j-driver": "*",
+ "notion-to-md": "^3.1.0",
+ "officeparser": "^4.0.4",
+ "openai": "*",
+ "pdf-parse": "1.1.1",
+ "pg": "^8.11.0",
+ "pg-copy-streams": "^6.0.5",
+ "pickleparser": "^0.2.1",
+ "playwright": "^1.32.1",
+ "portkey-ai": "^0.1.11",
+ "puppeteer": "*",
+ "pyodide": ">=0.24.1 <0.27.0",
+ "redis": "*",
+ "replicate": "^0.29.4",
+ "sonix-speech-recognition": "^2.1.1",
+ "srt-parser-2": "^1.2.3",
+ "typeorm": "^0.3.20",
+ "typesense": "^1.5.3",
+ "usearch": "^1.1.1",
+ "voy-search": "0.6.2",
+ "weaviate-ts-client": "*",
+ "web-auth-library": "^1.0.3",
+ "word-extractor": "*",
+ "ws": "^8.14.2",
+ "youtubei.js": "*"
+ },
+ "peerDependenciesMeta": {
+ "@arcjet/redact": {
+ "optional": true
+ },
+ "@aws-crypto/sha256-js": {
+ "optional": true
+ },
+ "@aws-sdk/client-bedrock-agent-runtime": {
+ "optional": true
+ },
+ "@aws-sdk/client-bedrock-runtime": {
+ "optional": true
+ },
+ "@aws-sdk/client-dynamodb": {
+ "optional": true
+ },
+ "@aws-sdk/client-kendra": {
+ "optional": true
+ },
+ "@aws-sdk/client-lambda": {
+ "optional": true
+ },
+ "@aws-sdk/client-s3": {
+ "optional": true
+ },
+ "@aws-sdk/client-sagemaker-runtime": {
+ "optional": true
+ },
+ "@aws-sdk/client-sfn": {
+ "optional": true
+ },
+ "@aws-sdk/credential-provider-node": {
+ "optional": true
+ },
+ "@azure/search-documents": {
+ "optional": true
+ },
+ "@azure/storage-blob": {
+ "optional": true
+ },
+ "@browserbasehq/sdk": {
+ "optional": true
+ },
+ "@clickhouse/client": {
+ "optional": true
+ },
+ "@cloudflare/ai": {
+ "optional": true
+ },
+ "@datastax/astra-db-ts": {
+ "optional": true
+ },
+ "@elastic/elasticsearch": {
+ "optional": true
+ },
+ "@getmetal/metal-sdk": {
+ "optional": true
+ },
+ "@getzep/zep-cloud": {
+ "optional": true
+ },
+ "@getzep/zep-js": {
+ "optional": true
+ },
+ "@gomomento/sdk": {
+ "optional": true
+ },
+ "@gomomento/sdk-core": {
+ "optional": true
+ },
+ "@google-ai/generativelanguage": {
+ "optional": true
+ },
+ "@google-cloud/storage": {
+ "optional": true
+ },
+ "@gradientai/nodejs-sdk": {
+ "optional": true
+ },
+ "@huggingface/inference": {
+ "optional": true
+ },
+ "@huggingface/transformers": {
+ "optional": true
+ },
+ "@lancedb/lancedb": {
+ "optional": true
+ },
+ "@layerup/layerup-security": {
+ "optional": true
+ },
+ "@libsql/client": {
+ "optional": true
+ },
+ "@mendable/firecrawl-js": {
+ "optional": true
+ },
+ "@mlc-ai/web-llm": {
+ "optional": true
+ },
+ "@mozilla/readability": {
+ "optional": true
+ },
+ "@neondatabase/serverless": {
+ "optional": true
+ },
+ "@notionhq/client": {
+ "optional": true
+ },
+ "@opensearch-project/opensearch": {
+ "optional": true
+ },
+ "@pinecone-database/pinecone": {
+ "optional": true
+ },
+ "@planetscale/database": {
+ "optional": true
+ },
+ "@premai/prem-sdk": {
+ "optional": true
+ },
+ "@qdrant/js-client-rest": {
+ "optional": true
+ },
+ "@raycast/api": {
+ "optional": true
+ },
+ "@rockset/client": {
+ "optional": true
+ },
+ "@smithy/eventstream-codec": {
+ "optional": true
+ },
+ "@smithy/protocol-http": {
+ "optional": true
+ },
+ "@smithy/signature-v4": {
+ "optional": true
+ },
+ "@smithy/util-utf8": {
+ "optional": true
+ },
+ "@spider-cloud/spider-client": {
+ "optional": true
+ },
+ "@supabase/supabase-js": {
+ "optional": true
+ },
+ "@tensorflow-models/universal-sentence-encoder": {
+ "optional": true
+ },
+ "@tensorflow/tfjs-converter": {
+ "optional": true
+ },
+ "@tensorflow/tfjs-core": {
+ "optional": true
+ },
+ "@upstash/ratelimit": {
+ "optional": true
+ },
+ "@upstash/redis": {
+ "optional": true
+ },
+ "@upstash/vector": {
+ "optional": true
+ },
+ "@vercel/kv": {
+ "optional": true
+ },
+ "@vercel/postgres": {
+ "optional": true
+ },
+ "@writerai/writer-sdk": {
+ "optional": true
+ },
+ "@xata.io/client": {
+ "optional": true
+ },
+ "@zilliz/milvus2-sdk-node": {
+ "optional": true
+ },
+ "apify-client": {
+ "optional": true
+ },
+ "assemblyai": {
+ "optional": true
+ },
+ "better-sqlite3": {
+ "optional": true
+ },
+ "cassandra-driver": {
+ "optional": true
+ },
+ "cborg": {
+ "optional": true
+ },
+ "cheerio": {
+ "optional": true
+ },
+ "chromadb": {
+ "optional": true
+ },
+ "closevector-common": {
+ "optional": true
+ },
+ "closevector-node": {
+ "optional": true
+ },
+ "closevector-web": {
+ "optional": true
+ },
+ "cohere-ai": {
+ "optional": true
+ },
+ "convex": {
+ "optional": true
+ },
+ "crypto-js": {
+ "optional": true
+ },
+ "d3-dsv": {
+ "optional": true
+ },
+ "discord.js": {
+ "optional": true
+ },
+ "dria": {
+ "optional": true
+ },
+ "duck-duck-scrape": {
+ "optional": true
+ },
+ "epub2": {
+ "optional": true
+ },
+ "faiss-node": {
+ "optional": true
+ },
+ "fast-xml-parser": {
+ "optional": true
+ },
+ "firebase-admin": {
+ "optional": true
+ },
+ "google-auth-library": {
+ "optional": true
+ },
+ "googleapis": {
+ "optional": true
+ },
+ "hnswlib-node": {
+ "optional": true
+ },
+ "html-to-text": {
+ "optional": true
+ },
+ "ignore": {
+ "optional": true
+ },
+ "interface-datastore": {
+ "optional": true
+ },
+ "ioredis": {
+ "optional": true
+ },
+ "it-all": {
+ "optional": true
+ },
+ "jsdom": {
+ "optional": true
+ },
+ "jsonwebtoken": {
+ "optional": true
+ },
+ "llmonitor": {
+ "optional": true
+ },
+ "lodash": {
+ "optional": true
+ },
+ "lunary": {
+ "optional": true
+ },
+ "mammoth": {
+ "optional": true
+ },
+ "mongodb": {
+ "optional": true
+ },
+ "mysql2": {
+ "optional": true
+ },
+ "neo4j-driver": {
+ "optional": true
+ },
+ "notion-to-md": {
+ "optional": true
+ },
+ "officeparser": {
+ "optional": true
+ },
+ "pdf-parse": {
+ "optional": true
+ },
+ "pg": {
+ "optional": true
+ },
+ "pg-copy-streams": {
+ "optional": true
+ },
+ "pickleparser": {
+ "optional": true
+ },
+ "playwright": {
+ "optional": true
+ },
+ "portkey-ai": {
+ "optional": true
+ },
+ "puppeteer": {
+ "optional": true
+ },
+ "pyodide": {
+ "optional": true
+ },
+ "redis": {
+ "optional": true
+ },
+ "replicate": {
+ "optional": true
+ },
+ "sonix-speech-recognition": {
+ "optional": true
+ },
+ "srt-parser-2": {
+ "optional": true
+ },
+ "typeorm": {
+ "optional": true
+ },
+ "typesense": {
+ "optional": true
+ },
+ "usearch": {
+ "optional": true
+ },
+ "voy-search": {
+ "optional": true
+ },
+ "weaviate-ts-client": {
+ "optional": true
+ },
+ "web-auth-library": {
+ "optional": true
+ },
+ "word-extractor": {
+ "optional": true
+ },
+ "ws": {
+ "optional": true
+ },
+ "youtubei.js": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@librechat/agents/node_modules/@langchain/openai": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/@langchain/openai/-/openai-0.4.2.tgz",
+ "integrity": "sha512-Cuj7qbVcycALTP0aqZuPpEc7As8cwiGaU21MhXRyZFs+dnWxKYxZ1Q1z4kcx6cYkq/I+CNwwmk+sP+YruU73Aw==",
+ "dependencies": {
+ "js-tiktoken": "^1.0.12",
+ "openai": "^4.77.0",
+ "zod": "^3.22.4",
+ "zod-to-json-schema": "^3.22.3"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@langchain/core": ">=0.3.29 <0.4.0"
+ }
+ },
+ "node_modules/@librechat/agents/node_modules/uuid": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz",
+ "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==",
+ "funding": [
+ "https://github.com/sponsors/broofa",
+ "https://github.com/sponsors/ctavan"
+ ],
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
"node_modules/@librechat/backend": {
"resolved": "api",
"link": true
@@ -35916,7 +35928,7 @@
},
"packages/data-provider": {
"name": "librechat-data-provider",
- "version": "0.7.695",
+ "version": "0.7.696",
"license": "ISC",
"dependencies": {
"axios": "^1.7.7",
diff --git a/packages/data-provider/package.json b/packages/data-provider/package.json
index 107504b5c8..841a2d7dc7 100644
--- a/packages/data-provider/package.json
+++ b/packages/data-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "librechat-data-provider",
- "version": "0.7.695",
+ "version": "0.7.696",
"description": "data services for librechat apps",
"main": "dist/index.js",
"module": "dist/index.es.js",
diff --git a/packages/data-provider/src/actions.ts b/packages/data-provider/src/actions.ts
index d4fafdb718..657268f7a6 100644
--- a/packages/data-provider/src/actions.ts
+++ b/packages/data-provider/src/actions.ts
@@ -427,8 +427,8 @@ export function openapiToFunction(
path,
method,
operationId,
- !!(operationObj['x-openai-isConsequential'] ?? false), // Custom extension for consequential actions
- operationObj.requestBody ? 'application/json' : 'application/x-www-form-urlencoded',
+ !!(operationObj['x-openai-isConsequential'] ?? false),
+ operationObj.requestBody ? 'application/json' : '',
);
requestBuilders[operationId] = actionRequest;
diff --git a/packages/data-provider/src/schemas.ts b/packages/data-provider/src/schemas.ts
index 8e54e377c3..880637ac12 100644
--- a/packages/data-provider/src/schemas.ts
+++ b/packages/data-provider/src/schemas.ts
@@ -110,6 +110,12 @@ export enum ImageDetail {
high = 'high',
}
+export enum ReasoningEffort {
+ low = 'low',
+ medium = 'medium',
+ high = 'high',
+}
+
export const imageDetailNumeric = {
[ImageDetail.low]: 0,
[ImageDetail.auto]: 1,
@@ -123,6 +129,7 @@ export const imageDetailValue = {
};
export const eImageDetailSchema = z.nativeEnum(ImageDetail);
+export const eReasoningEffortSchema = z.nativeEnum(ReasoningEffort);
export const defaultAssistantFormValues = {
assistant: '',
@@ -564,6 +571,8 @@ export const tConversationSchema = z.object({
file_ids: z.array(z.string()).optional(),
/* vision */
imageDetail: eImageDetailSchema.optional(),
+ /* OpenAI: o1 only */
+ reasoning_effort: eReasoningEffortSchema.optional(),
/* assistant */
assistant_id: z.string().optional(),
/* agents */
@@ -1055,6 +1064,7 @@ export const openAISchema = tConversationSchema
spec: true,
maxContextTokens: true,
max_tokens: true,
+ reasoning_effort: true,
})
.transform((obj: Partial) => removeNullishValues(obj))
.catch(() => ({}));