mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-30 23:28:52 +01:00
* feat: bare bones implementation of claude client (WIP) * feat: client implementation of Claude (WIP) * fix: add claude to store * feat: bare bones implementation of claude client (WIP) * switch eventsource * Try new method of calling claude with anthropic sdk * (WIP) Finish initial claude client implementation and api * debugging update * fix(ClaudeClient.js): fix prompt prefixes for HUMAN_PROMPT and AI_PROMPT fix(ClaudeClient.js): refactor buildMessages logic for correct handling of messages refactor(ClaudeClient.js): refactor buildPrompt method to buildMessages for use in BaseClient sendMessage method refactor(ClaudeClient.js): refactor getCompletion method to sendCompletion for use in BaseClient sendMessage method refactor(ClaudeClient.js): omit getMessageMapMethod method for future refactoring refactor(ClaudeClient.js): remove unused sendMessage method to prefer BaseClient message fix(askClaude.js): error in getIds method was causing a frontend crash, userMessage was not defined fix(askClaude.js): import abortMessage function from utils module feat(askClaude.js): add /abort route to handle message abort requests feat(askClaude.js): create abortControllers map to store abort controllers feat(askClaude.js): implement abortAsk function to handle message abort logic feat(askClaude.js): add onStart callback to handle message start logic feat(HoverButtons.jsx): add 'claude' as a supported endpoint for branching * fix(ClaudeClient.js): update defaultPrefix and promptPrefix messages includes 'Remember your instructions' as Claude is trained to recognize labels preceding colons as participants of a conversation * Change name from claude to anthropic * add settings to handleSubmit and models to endpoints * Implement Claude settings * use svg for anthropic icon * Implement abort * Implement reverse proxy * remove png icons * replace web browser plugin * remove default prefix * fix styling of claude icon * fix console error from svg properties * remove single quote requirement from eslintrc * fix(AnthropicClient.js): fix labels for HUMAN_PROMPT and AI_PROMPT feat(AnthropicClient.js): add support for custom userLabel and modelLabel options feat(AnthropicClient.js): add user_id metadata to requestOptions in getCompletion method feat(anthropic, AnthropicClient.js): add debug logging * refactor(AnthropicClient.js): change promptSuffix variable declaration from let to const * fix(EndpointOptionsDialog.jsx): remove unnecessary code that changes endpointName from 'anthropic' to 'Claude' fix(utils/index.jsx): fix alternateName value for 'anthropic' from 'Claude' to 'Anthropic' * fix(AnthropicIcon): fix sizing/rendering/name of anthropic icon * fix(AnthropicClient.js): change maxContextTokens default value to 99999 fix(AnthropicClient.js): change maxResponseTokens default value to 1500 fix(AnthropicClient.js): remove unnecessary code for setting maxContextTokens and maxResponseTokens based on modelOptions fix(AnthropicClient.js): change max_tokens_to_sample default value to 1500 fix(anthropic.js): pass endpointOption.token to AnthropicClient constructor * Update .env.example * fix(AnthropicClient.js): remove exceeding message when it puts us over the token limit fix(AnthropicClient.js): handle case when the first message exceeds the token limit fix(AnthropicClient.js): throw error when prompt is too long fix(AnthropicClient.js): adjust max tokens calculation to use maxOutputTokens fix(anthropic.js): remove console.log statement in ask route * feat(server/index): increase incoming json payload allowed size --------- Co-authored-by: Danny Avila <messagedaniel@protonmail.com>
64 lines
2.4 KiB
JavaScript
64 lines
2.4 KiB
JavaScript
import React, { useEffect, useState } from 'react';
|
|
import { useRecoilValue } from 'recoil';
|
|
import { Dialog, DialogTemplate, Input, Label } from '../ui/';
|
|
import { cn } from '~/utils/';
|
|
import cleanupPreset from '~/utils/cleanupPreset';
|
|
import { useCreatePresetMutation } from '@librechat/data-provider';
|
|
import store from '~/store';
|
|
|
|
const SaveAsPresetDialog = ({ open, onOpenChange, preset }) => {
|
|
const [title, setTitle] = useState(preset?.title || 'My Preset');
|
|
const endpointsConfig = useRecoilValue(store.endpointsConfig);
|
|
const createPresetMutation = useCreatePresetMutation();
|
|
|
|
const defaultTextProps =
|
|
'rounded-md border border-gray-300 bg-transparent text-sm shadow-[0_0_10px_rgba(0,0,0,0.10)] outline-none placeholder:text-gray-400 focus:outline-none focus:ring-gray-400 focus:ring-opacity-20 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-400 dark:bg-gray-700 dark:text-gray-50 dark:shadow-[0_0_15px_rgba(0,0,0,0.10)] dark:focus:border-gray-400 dark:focus:outline-none dark:focus:ring-0 dark:focus:ring-gray-400 dark:focus:ring-offset-0';
|
|
|
|
const submitPreset = () => {
|
|
const _preset = cleanupPreset({
|
|
preset: {
|
|
...preset,
|
|
title
|
|
},
|
|
endpointsConfig
|
|
});
|
|
createPresetMutation.mutate(_preset);
|
|
};
|
|
|
|
useEffect(() => {
|
|
setTitle(preset?.title || 'My Preset');
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
}, [open]);
|
|
|
|
return (
|
|
<Dialog open={open} onOpenChange={onOpenChange}>
|
|
<DialogTemplate
|
|
title="Save As Preset"
|
|
main={
|
|
<div className="grid w-full items-center gap-2">
|
|
<Label htmlFor="chatGptLabel" className="text-left text-sm font-medium">
|
|
Preset Name
|
|
</Label>
|
|
<Input
|
|
id="chatGptLabel"
|
|
value={title || ''}
|
|
onChange={(e) => setTitle(e.target.value || '')}
|
|
placeholder="Set a custom name for this preset"
|
|
className={cn(
|
|
defaultTextProps,
|
|
'flex h-10 max-h-10 w-full resize-none px-3 py-2 focus:outline-none focus:ring-0 focus:ring-opacity-0 focus:ring-offset-0'
|
|
)}
|
|
/>
|
|
</div>
|
|
}
|
|
selection={{
|
|
selectHandler: submitPreset,
|
|
selectClasses: 'bg-green-600 hover:bg-green-700 dark:hover:bg-green-800 text-white',
|
|
selectText: 'Save'
|
|
}}
|
|
/>
|
|
</Dialog>
|
|
);
|
|
};
|
|
|
|
export default SaveAsPresetDialog;
|