mirror of
https://github.com/danny-avila/LibreChat.git
synced 2026-01-10 04:28:50 +01:00
* 🔄 fix: Include usage in stream options for OpenAI and Azure endpoints * fix: Agents support for Azure serverless endpoints * fix: Refactor condition for assistants and azureAssistants endpoint handling * AWS Titan via Bedrock: model doesn't support system messages, Closes #6456 * fix: Add EndpointSchemaKey type to endpoint parameters in buildDefaultConvo and ensure assistantId is always defined * fix: Handle new conversation state for assistants endpoint in finalHandler * fix: Add spec and iconURL parameters to `saveAssistantMessage` to persist modelSpec fields * fix: Handle assistant unlinking even if no valid files to delete * chore: move type definitions from callbacks.js to typedefs.js * chore: Add StandardGraph typedef to typedefs.js * chore: Update parameter type for graph in ModelEndHandler to StandardGraph --------- Co-authored-by: Andres Restrepo <andres@enric.ai>
89 lines
2.6 KiB
TypeScript
89 lines
2.6 KiB
TypeScript
import {
|
|
parseConvo,
|
|
EModelEndpoint,
|
|
isAssistantsEndpoint,
|
|
isAgentsEndpoint,
|
|
} from 'librechat-data-provider';
|
|
import type { TConversation, EndpointSchemaKey } from 'librechat-data-provider';
|
|
import { getLocalStorageItems } from './localStorage';
|
|
|
|
const buildDefaultConvo = ({
|
|
models,
|
|
conversation,
|
|
endpoint = null,
|
|
lastConversationSetup,
|
|
}: {
|
|
models: string[];
|
|
conversation: TConversation;
|
|
endpoint?: EModelEndpoint | null;
|
|
lastConversationSetup: TConversation | null;
|
|
}): TConversation => {
|
|
const { lastSelectedModel, lastSelectedTools } = getLocalStorageItems();
|
|
const endpointType = lastConversationSetup?.endpointType ?? conversation.endpointType;
|
|
|
|
if (!endpoint) {
|
|
return {
|
|
...conversation,
|
|
endpointType,
|
|
endpoint,
|
|
};
|
|
}
|
|
|
|
const availableModels = models;
|
|
const model = lastConversationSetup?.model ?? lastSelectedModel?.[endpoint] ?? '';
|
|
const secondaryModel: string | null =
|
|
endpoint === EModelEndpoint.gptPlugins
|
|
? (lastConversationSetup?.agentOptions?.model ?? lastSelectedModel?.secondaryModel ?? null)
|
|
: null;
|
|
|
|
let possibleModels: string[], secondaryModels: string[];
|
|
|
|
if (availableModels.includes(model)) {
|
|
possibleModels = [model, ...availableModels];
|
|
} else {
|
|
possibleModels = [...availableModels];
|
|
}
|
|
|
|
if (secondaryModel != null && secondaryModel !== '' && availableModels.includes(secondaryModel)) {
|
|
secondaryModels = [secondaryModel, ...availableModels];
|
|
} else {
|
|
secondaryModels = [...availableModels];
|
|
}
|
|
|
|
const convo = parseConvo({
|
|
endpoint: endpoint as EndpointSchemaKey,
|
|
endpointType: endpointType as EndpointSchemaKey,
|
|
conversation: lastConversationSetup,
|
|
possibleValues: {
|
|
models: possibleModels,
|
|
secondaryModels,
|
|
},
|
|
});
|
|
|
|
const defaultConvo = {
|
|
...conversation,
|
|
...convo,
|
|
endpointType,
|
|
endpoint,
|
|
};
|
|
|
|
// Ensures assistant_id is always defined
|
|
const assistantId = convo?.assistant_id ?? conversation?.assistant_id ?? '';
|
|
const defaultAssistantId = lastConversationSetup?.assistant_id ?? '';
|
|
if (isAssistantsEndpoint(endpoint) && !defaultAssistantId && assistantId) {
|
|
defaultConvo.assistant_id = assistantId;
|
|
}
|
|
|
|
// Ensures agent_id is always defined
|
|
const agentId = convo?.agent_id ?? '';
|
|
const defaultAgentId = lastConversationSetup?.agent_id ?? '';
|
|
if (isAgentsEndpoint(endpoint) && !defaultAgentId && agentId) {
|
|
defaultConvo.agent_id = agentId;
|
|
}
|
|
|
|
defaultConvo.tools = lastConversationSetup?.tools ?? lastSelectedTools ?? defaultConvo.tools;
|
|
|
|
return defaultConvo;
|
|
};
|
|
|
|
export default buildDefaultConvo;
|