mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-21 19:00:13 +01:00
* fix: agent initialization, add `collectedUsage` handling * style: improve side panel styling * refactor(loadAgent): Optimize order agent project ID retrieval * feat: code execution * fix: typing issues * feat: ExecuteCode content part * refactor: use local state for default collapsed state of analysis content parts * fix: code parsing in ExecuteCode component * chore: bump agents package, export loadAuthValues * refactor: Update handleTools.js to use EnvVar for code execution tool authentication * WIP * feat: download code outputs * fix(useEventHandlers): type issues * feat: backend handling for code outputs * Refactor: Remove console.log statement in Part.tsx * refactor: add attachments to TMessage/messageSchema * WIP: prelim handling for code outputs * feat: attachments rendering * refactor: improve attachments rendering * fix: attachments, nullish edge case, handle attachments from event stream, bump agents package * fix filename download * fix: tool assignment for 'run code' on agent creation * fix: image handling by adding attachments * refactor: prevent agent creation without provider/model * refactor: remove unnecessary space in agent creation success message * refactor: select first model if selecting provider from empty on form * fix: Agent avatar bug * fix: `defaultAgentFormValues` causing boolean typing issue and typeerror * fix: capabilities counting as tools, causing duplication of them * fix: formatted messages edge case where consecutive content text type parts with the latter having tool_call_ids would cause consecutive AI messages to be created. furthermore, content could not be an array for tool_use messages (anthropic limitation) * chore: bump @librechat/agents dependency to version 1.6.9 * feat: bedrock agents * feat: new Agents icon * feat: agent titling * feat: agent landing * refactor: allow sharing agent globally only if user is admin or author * feat: initial AgentPanelSkeleton * feat: AgentPanelSkeleton * feat: collaborative agents * chore: add potential authorName as part of schema * chore: Remove unnecessary console.log statement * WIP: agent model parameters * chore: ToolsDialog typing and tool related localization chnages * refactor: update tool instance type (latest langchain class), and rename google tool to 'google' proper * chore: add back tools * feat: Agent knowledge files upload * refactor: better verbiage for disabled knowledge * chore: debug logs for file deletions * chore: debug logs for file deletions * feat: upload/delete agent knowledge/file-search files * feat: file search UI for agents * feat: first pass, file search tool * chore: update default agent capabilities and info
81 lines
2.4 KiB
TypeScript
81 lines
2.4 KiB
TypeScript
import { useState } from 'react';
|
|
import { useRecoilValue } from 'recoil';
|
|
import { CodeInProgress } from './Parts/CodeProgress';
|
|
import { useProgress, useLocalize } from '~/hooks';
|
|
import ProgressText from './ProgressText';
|
|
import FinishedIcon from './FinishedIcon';
|
|
import MarkdownLite from './MarkdownLite';
|
|
import store from '~/store';
|
|
|
|
export default function CodeAnalyze({
|
|
initialProgress = 0.1,
|
|
code,
|
|
outputs = [],
|
|
isSubmitting,
|
|
}: {
|
|
initialProgress: number;
|
|
code: string;
|
|
outputs: Record<string, unknown>[];
|
|
isSubmitting: boolean;
|
|
}) {
|
|
const localize = useLocalize();
|
|
const progress = useProgress(initialProgress);
|
|
const showAnalysisCode = useRecoilValue(store.showCode);
|
|
const [showCode, setShowCode] = useState(showAnalysisCode);
|
|
|
|
const radius = 56.08695652173913;
|
|
const circumference = 2 * Math.PI * radius;
|
|
const offset = circumference - progress * circumference;
|
|
|
|
const logs = outputs.reduce((acc, output) => {
|
|
if (output['logs']) {
|
|
return acc + output['logs'] + '\n';
|
|
}
|
|
return acc;
|
|
}, '');
|
|
|
|
return (
|
|
<>
|
|
<div className="my-2.5 flex items-center gap-2.5">
|
|
<div className="relative h-5 w-5 shrink-0">
|
|
{progress < 1 ? (
|
|
<CodeInProgress
|
|
offset={offset}
|
|
radius={radius}
|
|
progress={progress}
|
|
isSubmitting={isSubmitting}
|
|
circumference={circumference}
|
|
/>
|
|
) : (
|
|
<FinishedIcon />
|
|
)}
|
|
</div>
|
|
<ProgressText
|
|
progress={progress}
|
|
onClick={() => setShowCode((prev) => !prev)}
|
|
inProgressText="Analyzing"
|
|
finishedText="Finished analyzing"
|
|
hasInput={!!code.length}
|
|
/>
|
|
</div>
|
|
{showCode && (
|
|
<div className="code-analyze-block mb-3 mt-0.5 overflow-hidden rounded-xl bg-black">
|
|
<MarkdownLite content={code ? `\`\`\`python\n${code}\n\`\`\`` : ''} />
|
|
{logs && (
|
|
<div className="bg-gray-700 p-4 text-xs">
|
|
<div className="mb-1 text-gray-400">{localize('com_ui_result')}</div>
|
|
<div
|
|
className="prose flex flex-col-reverse text-white"
|
|
style={{
|
|
color: 'white',
|
|
}}
|
|
>
|
|
<pre className="shrink-0">{logs}</pre>
|
|
</div>
|
|
</div>
|
|
)}
|
|
</div>
|
|
)}
|
|
</>
|
|
);
|
|
}
|