Skip to content

Commit 0f79990

Browse files
refactor(search_playground): prep for saved playgrounds (#217251)
## Summary Renaming types and files as well as moving providers around to make implmentating saved playground routes more straightforward. Naming updates to reduce future confusion from generic names that didn't fit when there are multiple providers etc.
1 parent 3485e52 commit 0f79990

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+297
-303
lines changed

x-pack/solutions/search/plugins/search_playground/public/application.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,14 @@
77

88
import React from 'react';
99
import ReactDOM from 'react-dom';
10+
import { QueryClientProvider } from '@tanstack/react-query';
1011
import { CoreStart } from '@kbn/core/public';
1112
import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render';
1213
import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public';
1314
import { I18nProvider } from '@kbn/i18n-react';
1415
import { Router } from '@kbn/shared-ux-router';
1516
import { AppPluginStartDependencies } from './types';
17+
import { queryClient } from './utils/query_client';
1618

1719
export const renderApp = async (
1820
core: CoreStart,
@@ -26,7 +28,9 @@ export const renderApp = async (
2628
<KibanaContextProvider services={{ ...core, ...services }}>
2729
<I18nProvider>
2830
<Router history={services.history}>
29-
<PlaygroundRouter />
31+
<QueryClientProvider client={queryClient}>
32+
<PlaygroundRouter />
33+
</QueryClientProvider>
3034
</Router>
3135
</I18nProvider>
3236
</KibanaContextProvider>

x-pack/solutions/search/plugins/search_playground/public/components/chat.tsx

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import { AnalyticsEvents } from '../analytics/constants';
2727
import { useAutoBottomScroll } from '../hooks/use_auto_bottom_scroll';
2828
import { ChatSidebar } from './chat_sidebar';
2929
import { useChat } from '../hooks/use_chat';
30-
import { ChatForm, ChatFormFields, ChatRequestData, MessageRole } from '../types';
30+
import { PlaygroundForm, PlaygroundFormFields, ChatRequestData, MessageRole } from '../types';
3131

3232
import { MessageList } from './message_list/message_list';
3333
import { QuestionInput } from './question_input';
@@ -38,19 +38,19 @@ import { useUsageTracker } from '../hooks/use_usage_tracker';
3838
import { PlaygroundBodySection } from './playground_body_section';
3939
import { elasticsearchQueryString } from '../utils/user_query';
4040

41-
const buildFormData = (formData: ChatForm): ChatRequestData => ({
42-
connector_id: formData[ChatFormFields.summarizationModel].connectorId!,
43-
prompt: formData[ChatFormFields.prompt],
44-
indices: formData[ChatFormFields.indices].join(),
45-
citations: formData[ChatFormFields.citations],
41+
const buildFormData = (formData: PlaygroundForm): ChatRequestData => ({
42+
connector_id: formData[PlaygroundFormFields.summarizationModel].connectorId!,
43+
prompt: formData[PlaygroundFormFields.prompt],
44+
indices: formData[PlaygroundFormFields.indices].join(),
45+
citations: formData[PlaygroundFormFields.citations],
4646
elasticsearch_query: elasticsearchQueryString(
47-
formData[ChatFormFields.elasticsearchQuery],
48-
formData[ChatFormFields.userElasticsearchQuery],
49-
formData[ChatFormFields.userElasticsearchQueryValidations]
47+
formData[PlaygroundFormFields.elasticsearchQuery],
48+
formData[PlaygroundFormFields.userElasticsearchQuery],
49+
formData[PlaygroundFormFields.userElasticsearchQueryValidations]
5050
),
51-
summarization_model: formData[ChatFormFields.summarizationModel].value,
52-
source_fields: JSON.stringify(formData[ChatFormFields.sourceFields]),
53-
doc_size: formData[ChatFormFields.docSize],
51+
summarization_model: formData[PlaygroundFormFields.summarizationModel].value,
52+
source_fields: JSON.stringify(formData[PlaygroundFormFields.sourceFields]),
53+
doc_size: formData[PlaygroundFormFields.docSize],
5454
});
5555

5656
export const Chat = () => {
@@ -61,12 +61,12 @@ export const Chat = () => {
6161
resetField,
6262
handleSubmit,
6363
getValues,
64-
} = useFormContext<ChatForm>();
64+
} = useFormContext<PlaygroundForm>();
6565
const { messages, append, stop: stopRequest, setMessages, reload } = useChat();
6666
const messagesRef = useAutoBottomScroll();
6767
const [isRegenerating, setIsRegenerating] = useState<boolean>(false);
6868
const usageTracker = useUsageTracker();
69-
const onSubmit = async (data: ChatForm) => {
69+
const onSubmit = async (data: PlaygroundForm) => {
7070
await append(
7171
{ content: data.question, role: MessageRole.user, createdAt: new Date() },
7272
{
@@ -75,7 +75,7 @@ export const Chat = () => {
7575
);
7676
usageTracker?.click(AnalyticsEvents.chatQuestionSent);
7777

78-
resetField(ChatFormFields.question);
78+
resetField(PlaygroundFormFields.question);
7979
};
8080
const handleStopRequest = () => {
8181
stopRequest();
@@ -190,7 +190,7 @@ export const Chat = () => {
190190
<EuiSpacer size="s" />
191191

192192
<Controller
193-
name={ChatFormFields.question}
193+
name={PlaygroundFormFields.question}
194194
control={control}
195195
defaultValue=""
196196
rules={{

x-pack/solutions/search/plugins/search_playground/public/components/chat_sidebar.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,14 @@ import { FormattedMessage } from '@kbn/i18n-react';
1919
import { useWatch } from 'react-hook-form';
2020
import { docLinks } from '../../common/doc_links';
2121
import { EditContextPanel } from './edit_context/edit_context_panel';
22-
import { ChatForm, ChatFormFields } from '../types';
22+
import { PlaygroundForm, PlaygroundFormFields } from '../types';
2323
import { useManagementLink } from '../hooks/use_management_link';
2424
import { SummarizationPanel } from './summarization_panel/summarization_panel';
2525

2626
export const ChatSidebar: React.FC = () => {
2727
const { euiTheme } = useEuiTheme();
28-
const selectedModel = useWatch<ChatForm, ChatFormFields.summarizationModel>({
29-
name: ChatFormFields.summarizationModel,
28+
const selectedModel = useWatch<PlaygroundForm, PlaygroundFormFields.summarizationModel>({
29+
name: PlaygroundFormFields.summarizationModel,
3030
});
3131
const managementLink = useManagementLink(selectedModel?.connectorId);
3232
const panels = [

x-pack/solutions/search/plugins/search_playground/public/components/data_action_button.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@ import React, { useState } from 'react';
99
import { FormattedMessage } from '@kbn/i18n-react';
1010
import { EuiButton } from '@elastic/eui';
1111
import { useWatch } from 'react-hook-form';
12-
import { ChatForm, ChatFormFields } from '../types';
12+
import { PlaygroundForm, PlaygroundFormFields } from '../types';
1313
import { SelectIndicesFlyout } from './select_indices_flyout';
1414

1515
export const DataActionButton: React.FC = () => {
16-
const selectedIndices = useWatch<ChatForm, ChatFormFields.indices>({
17-
name: ChatFormFields.indices,
16+
const selectedIndices = useWatch<PlaygroundForm, PlaygroundFormFields.indices>({
17+
name: PlaygroundFormFields.indices,
1818
});
1919
const [showFlyout, setShowFlyout] = useState(false);
2020
const handleFlyoutClose = () => setShowFlyout(false);

x-pack/solutions/search/plugins/search_playground/public/components/edit_context/edit_context_panel.test.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { render, fireEvent, screen } from '@testing-library/react';
1010
import { EditContextPanel } from './edit_context_panel';
1111
import { FormProvider, useForm } from 'react-hook-form';
1212
import { __IntlProvider as IntlProvider } from '@kbn/i18n-react';
13-
import { ChatFormFields } from '../../types';
13+
import { PlaygroundFormFields } from '../../types';
1414

1515
jest.mock('../../hooks/use_source_indices_field', () => ({
1616
useSourceIndicesFields: () => ({
@@ -44,9 +44,9 @@ jest.mock('../../hooks/use_usage_tracker', () => ({
4444
const MockFormProvider = ({ children }: { children: React.ReactElement }) => {
4545
const methods = useForm({
4646
values: {
47-
[ChatFormFields.indices]: ['index1'],
48-
[ChatFormFields.docSize]: 1,
49-
[ChatFormFields.sourceFields]: {
47+
[PlaygroundFormFields.indices]: ['index1'],
48+
[PlaygroundFormFields.docSize]: 1,
49+
[PlaygroundFormFields.sourceFields]: {
5050
index1: ['title'],
5151
index2: ['body'],
5252
},

x-pack/solutions/search/plugins/search_playground/public/components/edit_context/edit_context_panel.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import React, { useCallback } from 'react';
1212
import { useController } from 'react-hook-form';
1313
import { useSourceIndicesFields } from '../../hooks/use_source_indices_field';
1414
import { useUsageTracker } from '../../hooks/use_usage_tracker';
15-
import { ChatForm, ChatFormFields } from '../../types';
15+
import { PlaygroundForm, PlaygroundFormFields } from '../../types';
1616
import { AnalyticsEvents } from '../../analytics/constants';
1717
import { ContextFieldsSelect } from './context_fields_select';
1818

@@ -23,13 +23,13 @@ export const EditContextPanel: React.FC = () => {
2323
const {
2424
field: { onChange: onChangeSize, value: docSize },
2525
} = useController({
26-
name: ChatFormFields.docSize,
26+
name: PlaygroundFormFields.docSize,
2727
});
2828

2929
const {
3030
field: { onChange: onChangeSourceFields, value: sourceFields },
31-
} = useController<ChatForm, ChatFormFields.sourceFields>({
32-
name: ChatFormFields.sourceFields,
31+
} = useController<PlaygroundForm, PlaygroundFormFields.sourceFields>({
32+
name: PlaygroundFormFields.sourceFields,
3333
});
3434

3535
const updateSourceField = useCallback(

x-pack/solutions/search/plugins/search_playground/public/components/header.test.tsx

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import { render, screen } from '@testing-library/react';
1212
import React from 'react';
1313
import { Header } from './header';
14-
import { ChatFormFields, PlaygroundPageMode, PlaygroundViewMode } from '../types';
14+
import { PlaygroundFormFields, PlaygroundPageMode, PlaygroundViewMode } from '../types';
1515
import { __IntlProvider as IntlProvider } from '@kbn/i18n-react';
1616
import { EuiForm } from '@elastic/eui';
1717
import { FormProvider, useForm } from 'react-hook-form';
@@ -28,13 +28,13 @@ jest.mock('../hooks/use_playground_parameters', () => ({
2828
const MockFormProvider = ({ children }: { children: React.ReactElement }) => {
2929
const methods = useForm({
3030
values: {
31-
[ChatFormFields.indices]: ['index1', 'index2'],
32-
[ChatFormFields.queryFields]: { index1: ['field1'], index2: ['field1'] },
33-
[ChatFormFields.sourceFields]: {
31+
[PlaygroundFormFields.indices]: ['index1', 'index2'],
32+
[PlaygroundFormFields.queryFields]: { index1: ['field1'], index2: ['field1'] },
33+
[PlaygroundFormFields.sourceFields]: {
3434
index1: ['field1'],
3535
index2: ['field1'],
3636
},
37-
[ChatFormFields.elasticsearchQuery]: {
37+
[PlaygroundFormFields.elasticsearchQuery]: {
3838
retriever: {
3939
rrf: {
4040
retrievers: [
@@ -48,7 +48,7 @@ const MockFormProvider = ({ children }: { children: React.ReactElement }) => {
4848
});
4949
return <FormProvider {...methods}>{children}</FormProvider>;
5050
};
51-
const MockChatForm = ({
51+
const MockPlaygroundForm = ({
5252
children,
5353
handleSubmit,
5454
}: {
@@ -74,9 +74,9 @@ describe('Header', () => {
7474
});
7575
render(
7676
<IntlProvider locale="en">
77-
<MockChatForm handleSubmit={() => {}}>
77+
<MockPlaygroundForm handleSubmit={() => {}}>
7878
<Header onModeChange={() => {}} onSelectPageModeChange={() => {}} />
79-
</MockChatForm>
79+
</MockPlaygroundForm>
8080
</IntlProvider>
8181
);
8282

@@ -91,9 +91,9 @@ describe('Header', () => {
9191
});
9292
render(
9393
<IntlProvider locale="en">
94-
<MockChatForm handleSubmit={() => {}}>
94+
<MockPlaygroundForm handleSubmit={() => {}}>
9595
<Header onModeChange={() => {}} onSelectPageModeChange={() => {}} />
96-
</MockChatForm>
96+
</MockPlaygroundForm>
9797
</IntlProvider>
9898
);
9999

x-pack/solutions/search/plugins/search_playground/public/components/message_list/token_estimate_tooltip.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import { FormattedMessage } from '@kbn/i18n-react';
2222
import { useFormContext } from 'react-hook-form';
2323
import { docLinks } from '../../../common/doc_links';
2424
import { useLLMsModels } from '../../hooks/use_llms_models';
25-
import { ChatForm, ChatFormFields } from '../../types';
25+
import { PlaygroundForm, PlaygroundFormFields } from '../../types';
2626

2727
interface TokenEstimateTooltipProps {
2828
context: number;
@@ -37,8 +37,8 @@ export const TokenEstimateTooltip: React.FC<TokenEstimateTooltipProps> = ({
3737
}) => {
3838
const [showTooltip, setShowTooltip] = useState<boolean>(false);
3939
const models = useLLMsModels();
40-
const { getValues } = useFormContext<ChatForm>();
41-
const formValues = getValues(ChatFormFields.summarizationModel);
40+
const { getValues } = useFormContext<PlaygroundForm>();
41+
const formValues = getValues(PlaygroundFormFields.summarizationModel);
4242

4343
const selectedModel = models.find((m) => m.value === formValues?.value);
4444

x-pack/solutions/search/plugins/search_playground/public/components/app.tsx renamed to x-pack/solutions/search/plugins/search_playground/public/components/playgorund.tsx

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,12 @@ import { SearchQueryMode } from './query_mode/search_query_mode';
1515
import { ChatSetupPage } from './setup_page/chat_setup_page';
1616
import { Header } from './header';
1717
import { useLoadConnectors } from '../hooks/use_load_connectors';
18-
import { ChatForm, ChatFormFields, PlaygroundPageMode, PlaygroundViewMode } from '../types';
18+
import {
19+
PlaygroundForm,
20+
PlaygroundFormFields,
21+
PlaygroundPageMode,
22+
PlaygroundViewMode,
23+
} from '../types';
1924
import { Chat } from './chat';
2025
import { SearchMode } from './search_mode/search_mode';
2126
import { SearchPlaygroundSetupPage } from './setup_page/search_playground_setup_page';
@@ -34,14 +39,14 @@ export interface AppProps {
3439
showDocs?: boolean;
3540
}
3641

37-
export const App: React.FC<AppProps> = ({ showDocs = false }) => {
42+
export const Playground: React.FC<AppProps> = ({ showDocs = false }) => {
3843
const isSearchModeEnabled = useSearchPlaygroundFeatureFlag();
3944
const { pageMode, viewMode } = usePlaygroundParameters();
4045
const { application } = useKibana().services;
4146
const { data: connectors } = useLoadConnectors();
4247
const hasSelectedIndices = Boolean(
43-
useWatch<ChatForm, ChatFormFields.indices>({
44-
name: ChatFormFields.indices,
48+
useWatch<PlaygroundForm, PlaygroundFormFields.indices>({
49+
name: PlaygroundFormFields.indices,
4550
}).length
4651
);
4752
const navigateToView = useCallback(

x-pack/solutions/search/plugins/search_playground/public/components/query_mode/chat_prompt.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@ import React from 'react';
1010
import { EuiFieldText } from '@elastic/eui';
1111
import { Controller, useFormContext } from 'react-hook-form';
1212
import { i18n } from '@kbn/i18n';
13-
import { ChatFormFields } from '../../types';
13+
import { PlaygroundFormFields } from '../../types';
1414

1515
export const ChatPrompt = ({ isLoading }: { isLoading: boolean }) => {
1616
const { control } = useFormContext();
1717

1818
return (
1919
<Controller
2020
control={control}
21-
name={ChatFormFields.question}
21+
name={PlaygroundFormFields.question}
2222
render={({ field }) => (
2323
<EuiFieldText
2424
data-test-subj="searchPlaygroundChatQuestionFieldText"

0 commit comments

Comments
 (0)