2025-08-26 12:10:18 -04:00
|
|
|
const { isEnabled } = require('@librechat/api');
|
2025-02-06 18:13:18 -05:00
|
|
|
const { EModelEndpoint, CacheKeys, Constants, googleSettings } = require('librechat-data-provider');
|
2024-06-22 08:42:51 -07:00
|
|
|
const getLogStores = require('~/cache/getLogStores');
|
2025-02-06 18:13:18 -05:00
|
|
|
const initializeClient = require('./initialize');
|
2024-06-22 08:42:51 -07:00
|
|
|
const { saveConvo } = require('~/models');
|
|
|
|
|
|
|
|
|
|
const addTitle = async (req, { text, response, client }) => {
|
|
|
|
|
const { TITLE_CONVO = 'true' } = process.env ?? {};
|
|
|
|
|
if (!isEnabled(TITLE_CONVO)) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (client.options.titleConvo === false) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
const { GOOGLE_TITLE_MODEL } = process.env ?? {};
|
2025-08-26 12:10:18 -04:00
|
|
|
const appConfig = req.config;
|
|
|
|
|
const providerConfig = appConfig.endpoints?.[EModelEndpoint.google];
|
2025-02-06 18:13:18 -05:00
|
|
|
let model =
|
|
|
|
|
providerConfig?.titleModel ??
|
|
|
|
|
GOOGLE_TITLE_MODEL ??
|
|
|
|
|
client.options?.modelOptions.model ??
|
|
|
|
|
googleSettings.model.default;
|
2024-06-22 08:42:51 -07:00
|
|
|
|
|
|
|
|
if (GOOGLE_TITLE_MODEL === Constants.CURRENT_MODEL) {
|
|
|
|
|
model = client.options?.modelOptions.model;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const titleEndpointOptions = {
|
|
|
|
|
...client.options,
|
|
|
|
|
modelOptions: { ...client.options?.modelOptions, model: model },
|
|
|
|
|
attachments: undefined, // After a response, this is set to an empty array which results in an error during setOptions
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const { client: titleClient } = await initializeClient({
|
|
|
|
|
req,
|
|
|
|
|
res: response,
|
|
|
|
|
endpointOption: titleEndpointOptions,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const titleCache = getLogStores(CacheKeys.GEN_TITLE);
|
|
|
|
|
const key = `${req.user.id}-${response.conversationId}`;
|
|
|
|
|
|
2024-08-18 06:00:03 -04:00
|
|
|
const title = await titleClient.titleConvo({
|
|
|
|
|
text,
|
🪨 feat: AWS Bedrock support (#3935)
* feat: Add BedrockIcon component to SVG library
* feat: EModelEndpoint.bedrock
* feat: first pass, bedrock chat. note: AgentClient is returning `agents` as conversation.endpoint
* fix: declare endpoint in initialization step
* chore: Update @librechat/agents dependency to version 1.4.5
* feat: backend content aggregation for agents/bedrock
* feat: abort agent requests
* feat: AWS Bedrock icons
* WIP: agent provider schema parsing
* chore: Update EditIcon props type
* refactor(useGenerationsByLatest): make agents and bedrock editable
* refactor: non-assistant message content, parts
* fix: Bedrock response `sender`
* fix: use endpointOption.model_parameters not endpointOption.modelOptions
* fix: types for step handler
* refactor: Update Agents.ToolCallDelta type
* refactor: Remove unnecessary assignment of parentMessageId in AskController
* refactor: remove unnecessary assignment of parentMessageId (agent request handler)
* fix(bedrock/agents): message regeneration
* refactor: dynamic form elements using react-hook-form Controllers
* fix: agent icons/labels for messages
* fix: agent actions
* fix: use of new dynamic tags causing application crash
* refactor: dynamic settings touch-ups
* refactor: update Slider component to allow custom track class name
* refactor: update DynamicSlider component styles
* refactor: use Constants value for GLOBAL_PROJECT_NAME (enum)
* feat: agent share global methods/controllers
* fix: agents query
* fix: `getResponseModel`
* fix: share prompt a11y issue
* refactor: update SharePrompt dialog theme styles
* refactor: explicit typing for SharePrompt
* feat: add agent roles/permissions
* chore: update @librechat/agents dependency to version 1.4.7 for tool_call_ids edge case
* fix(Anthropic): messages.X.content.Y.tool_use.input: Input should be a valid dictionary
* fix: handle text parts with tool_call_ids and empty text
* fix: role initialization
* refactor: don't make instructions required
* refactor: improve typing of Text part
* fix: setShowStopButton for agents route
* chore: remove params for now
* fix: add streamBuffer and streamRate to help prevent 'Overloaded' errors from Anthropic API
* refactor: remove console.log statement in ContentRender component
* chore: typing, rename Context to Delete Button
* chore(DeleteButton): logging
* refactor(Action): make accessible
* style(Action): improve a11y again
* refactor: remove use/mention of mongoose sessions
* feat: first pass, sharing agents
* feat: visual indicator for global agent, remove author when serving to non-author
* wip: params
* chore: fix typing issues
* fix(schemas): typing
* refactor: improve accessibility of ListCard component and fix console React warning
* wip: reset templates for non-legacy new convos
* Revert "wip: params"
This reverts commit f8067e91d4adf7be9e0d9e914aaae79ac4689b80.
* Revert "refactor: dynamic form elements using react-hook-form Controllers"
This reverts commit 2150c4815d8c74a978a4b697aa8f54dc11e035d7.
* fix(Parameters): types and parameter effect update to only update local state to parameters
* refactor: optimize useDebouncedInput hook for better performance
* feat: first pass, anthropic bedrock params
* chore: paramEndpoints check for endpointType too
* fix: maxTokens to use coerceNumber.optional(),
* feat: extra chat model params
* chore: reduce code repetition
* refactor: improve preset title handling in SaveAsPresetDialog component
* refactor: improve preset handling in HeaderOptions component
* chore: improve typing, replace legacy dialog for SaveAsPresetDialog
* feat: save as preset from parameters panel
* fix: multi-search in select dropdown when using Option type
* refactor: update default showDefault value to false in Dynamic components
* feat: Bedrock presets settings
* chore: config, fix agents schema, update config version
* refactor: update AWS region variable name in bedrock options endpoint to BEDROCK_AWS_DEFAULT_REGION
* refactor: update baseEndpointSchema in config.ts to include baseURL property
* refactor: update createRun function to include req parameter and set streamRate based on provider
* feat: availableRegions via config
* refactor: remove unused demo agent controller file
* WIP: title
* Update @librechat/agents to version 1.5.0
* chore: addTitle.js to handle empty responseText
* feat: support images and titles
* feat: context token updates
* Refactor BaseClient test to use expect.objectContaining
* refactor: add model select, remove header options params, move side panel params below prompts
* chore: update models list, catch title error
* feat: model service for bedrock models (env)
* chore: Remove verbose debug log in AgentClient class following stream
* feat(bedrock): track token spend; fix: token rates, value key mapping for AWS models
* refactor: handle streamRate in `handleLLMNewToken` callback
* chore: AWS Bedrock example config in `.env.example`
* refactor: Rename bedrockMeta to bedrockGeneral in settings.ts and use for AI21 and Amazon Bedrock providers
* refactor: Update `.env.example` with AWS Bedrock model IDs URL and additional notes
* feat: titleModel support for bedrock
* refactor: Update `.env.example` with additional notes for AWS Bedrock model IDs
2024-09-09 12:06:59 -04:00
|
|
|
responseText: response?.text ?? '',
|
2024-08-18 06:00:03 -04:00
|
|
|
conversationId: response.conversationId,
|
|
|
|
|
});
|
2024-06-22 08:42:51 -07:00
|
|
|
await titleCache.set(key, title, 120000);
|
2024-07-20 01:51:59 -04:00
|
|
|
await saveConvo(
|
|
|
|
|
req,
|
|
|
|
|
{
|
|
|
|
|
conversationId: response.conversationId,
|
|
|
|
|
title,
|
|
|
|
|
},
|
|
|
|
|
{ context: 'api/server/services/Endpoints/google/addTitle.js' },
|
|
|
|
|
);
|
2024-06-22 08:42:51 -07:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
module.exports = addTitle;
|