Skip to content

Commit

Permalink
feat: providers clear logs #921 (#922)
Browse files Browse the repository at this point in the history
  • Loading branch information
mikbry committed May 22, 2024
1 parent be60265 commit 095037e
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 16 deletions.
12 changes: 6 additions & 6 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

45 changes: 38 additions & 7 deletions webapp/components/views/Providers/Provider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,14 @@

'use client';

import { Bug, Settings2 } from 'lucide-react';
import { Bug, Settings2, Trash } from 'lucide-react';
import useTranslation from '@/hooks/useTranslation';
import useBackend from '@/hooks/useBackendContext';
import useProviderState from '@/hooks/useProviderState';
import { ProviderType, ServerStatus } from '@/types';
import ContentView from '@/components/common/ContentView';
import CopyToClipBoard from '@/components/common/CopyToClipBoard';
import { Button } from '@/components/ui/button';
import Toolbar from './Toolbar';
import Server from './server';
import OpenAI from './openai';
Expand All @@ -36,9 +37,15 @@ type ProviderViewProps = {
function ProviderView({ selectedId: selectedProviderId }: ProviderViewProps) {
const { t } = useTranslation();

const { provider, hasParametersChanged, onParametersSave, onParameterChange, onProviderToggle } =
useProviderState(selectedProviderId);
const { server } = useBackend();
const {
provider,
hasParametersChanged,
onParametersSave,
onParameterChange,
onProviderToggle,
updateProvider,
} = useProviderState(selectedProviderId);
const { server, updateBackendServer } = useBackend();

const buildLogs = () => {
let logs = '';
Expand All @@ -51,6 +58,20 @@ function ProviderView({ selectedId: selectedProviderId }: ProviderViewProps) {
return logs;
};

const handleClearLogs = () => {
if (provider?.type === ProviderType.opla) {
updateBackendServer({ stderr: [], stdout: [] });
} else {
updateProvider({ errors: [] });
}
};

let emptyLogs = true;
if (provider?.type === ProviderType.opla) {
emptyLogs = (server.stderr?.length ?? 0) + (server.stdout?.length ?? 0) === 0;
} else {
emptyLogs = (provider?.errors?.length ?? 0) === 0;
}
return (
<Tabs defaultValue="settings" className="h-full">
<ContentView
Expand Down Expand Up @@ -114,16 +135,26 @@ function ProviderView({ selectedId: selectedProviderId }: ProviderViewProps) {
</ScrollArea>
)}
</TabsContent>
<TabsContent value="debug" className="h-full w-full p-4">
<div className="flex w-full flex-row-reverse">
<TabsContent value="debug" className="h-full w-full">
<div className="flex w-full flex-row-reverse items-center px-4">
<Button
variant="ghost"
size="sm"
aria-label={t('Clear logs')}
title={t('Clear logs')}
disabled={emptyLogs}
onClick={handleClearLogs}
>
<Trash className="h-4 w-4 text-muted-foreground" strokeWidth={1.5} />
</Button>
<CopyToClipBoard
title={t('Copy logs to clipboard')}
message={t('Logs copied to clipboard')}
text={buildLogs()}
/>
</div>
{provider && (
<ScrollArea>
<ScrollArea className="h-full p-4">
{provider.type === ProviderType.opla && (
<>
{server.status === ServerStatus.ERROR && (
Expand Down
8 changes: 8 additions & 0 deletions webapp/hooks/useBackendContext.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ type Context = OplaContext & {
disconnectBackend: () => Promise<void>;
setSettings: (settings: Settings) => Promise<void>;
updateBackendStore: () => Promise<void>;
updateBackendServer: (partials: Partial<OplaServer>) => Promise<void>;
start: (params: ServerParameters | undefined) => Promise<BackendResult>;
stop: () => Promise<BackendResult>;
restart: (params: ServerParameters | undefined) => Promise<BackendResult>;
Expand All @@ -101,6 +102,7 @@ const defaultContext: Context = {
disconnectBackend: async () => {},
setSettings: async () => {},
updateBackendStore: async () => {},
updateBackendServer: async () => {},
start: async () => ({ status: 'error', error: 'not implemented' }),
stop: async () => ({ status: 'error', error: 'not implemented' }),
restart: async () => ({ status: 'error', error: 'not implemented' }),
Expand Down Expand Up @@ -160,6 +162,10 @@ function BackendProvider({ children }: { children: React.ReactNode }) {
updateConfig(store);
}, []);

const updateBackendServer = useCallback(async (partials: Partial<OplaServer>) => {
updateServer(partials);
}, []);

const updateMessageContent = useCallback(
async (
message_or_id: Message | String,
Expand Down Expand Up @@ -503,6 +509,7 @@ function BackendProvider({ children }: { children: React.ReactNode }) {
disconnectBackend,
setSettings,
updateBackendStore,
updateBackendServer,
start,
stop,
restart,
Expand All @@ -524,6 +531,7 @@ function BackendProvider({ children }: { children: React.ReactNode }) {
startBackend,
stop,
updateBackendStore,
updateBackendServer,
],
);

Expand Down
21 changes: 18 additions & 3 deletions webapp/hooks/useProviderState.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,14 +62,28 @@ const useProviderState = (providerId?: string, newProvider?: Provider) => {
setUpdatedProvider(mergedProvider);
};

const handleParametersSave = (partialProvider: Partial<Provider> = {}) => {
const update = (partialProvider: Partial<Provider> = {}): Provider | undefined => {
if (!provider) {
return undefined;
}
const mergedProvider = deepMerge<Provider>(provider, partialProvider);
const updatedProviders = updateProvider(mergedProvider, providers);
setProviders(updatedProviders);
logger.info('update Provider', mergedProvider, updatedProviders);
return mergedProvider;
};

const handleParametersSave = (partialProvider: Partial<Provider> = {}) => {
const mergedProvider = update(partialProvider);
if (!mergedProvider) {
return;
}
/* if (!provider) {
return;
}
const mergedProvider = deepMerge<Provider>(provider, partialProvider);
const newProviders = updateProvider(mergedProvider, providers);
logger.info('handleParametersSave', mergedProvider, newProviders);
setProviders(newProviders);
setProviders(newProviders); */
setUpdatedProvider({ id: providerId });
if (mergedProvider.type === ProviderType.opla) {
const providerServer = mergedProvider.metadata?.server;
Expand Down Expand Up @@ -108,6 +122,7 @@ const useProviderState = (providerId?: string, newProvider?: Provider) => {
onParameterChange: handleParameterChange,
onParametersSave: handleParametersSave,
onProviderToggle: handleProviderToggle,
updateProvider: update,
};
};

Expand Down

0 comments on commit 095037e

Please sign in to comment.