{"version":3,"mappings":"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","names":["github","Layout","jsxs","styles","jsx","Link","Outlet","BACKEND_URI","getHeaders","headers","chatApi","request","body","fetchSummary","clearChatApi","getCitationFilePath","citation","RetrievalMode","GPT4VInput","VectorFieldOptions","parseAnswerToHtml","answer","isStreaming","onCitationClicked","citations","parsedAnswer","lastIndex","i","AnswerIcon","Sparkle28Filled","Answer","isSelected","onThoughtProcessClicked","onSupportingContentClicked","onFollowupQuestionClicked","showFollowupQuestions","messageContent","useMemo","sanitizedAnswerHtml","DOMPurify","Stack","x","path","AnswerLoading","animatedStyles","useSpring","animated","AnswerError","error","onRetry","ErrorCircle24Regular","PrimaryButton","QuestionInput","onSend","disabled","placeholder","clearOnSend","initQuestion","question","setQuestion","useState","useEffect","sendQuestion","onEnterPress","ev","onQuestionChange","_ev","newValue","useMsal","disableRequiredAccessControl","sendQuestionDisabled","TextField","Tooltip","Button","Send28Filled","Example","text","value","onClick","DEFAULT_EXAMPLES","GPT4V_EXAMPLES","ExampleList","onExampleClicked","useGPT4V","UserChatMessage","message","ClearChatButton","className","Delete24Regular","vectorFields","VectorSettings","updateRetrievalMode","updateVectorFields","showImageOptions","retrievalMode","setRetrievalMode","vectorFieldOption","setVectorFieldOption","onVectorFieldsChange","option","list","ChoiceGroup","Chat","isConfigPanelOpen","setIsConfigPanelOpen","promptTemplate","setPromptTemplate","retrieveCount","setRetrieveCount","useSemanticRanker","setUseSemanticRanker","shouldStream","setShouldStream","useSemanticCaptions","setUseSemanticCaptions","excludeCategory","setExcludeCategory","useSuggestFollowupQuestions","setUseSuggestFollowupQuestions","vectorFieldList","setVectorFieldList","setUseGPT4V","lastQuestionRef","useRef","chatMessageStreamEnd","isLoading","setIsLoading","setIsStreaming","setError","activeCitation","setActiveCitation","selectedAnswer","setSelectedAnswer","answers","setAnswers","showGPT4VOptions","setShowGPT4VOptions","sessionId","setSessionId","uuidv4","makeApiRequest","response","contentType","bodyText","parsedResponse","e","clearChat","onPromptTemplateChange","onRetrieveCountChange","onUseSemanticRankerChange","checked","onUseSemanticCaptionsChange","onShouldStreamChange","onExcludeCategoryChanged","onUseSuggestFollowupQuestionsChange","example","onShowCitation","index","c","q","Fragment","Panel","DefaultButton","SpinButton","Checkbox","options","AgentView","summary","setSummary","useParams","summaryData","layout","initializeIcons","router","createHashRouter","__vitePreload","ReactDOM","React","RouterProvider"],"sources":["../../src/assets/github.svg","../../src/pages/layout/Layout.tsx","../../src/api/BACKEND_URI.ts","../../src/api/api.ts","../../src/api/models.ts","../../src/components/Answer/AnswerParser.tsx","../../src/components/Answer/AnswerIcon.tsx","../../src/components/Answer/Answer.tsx","../../src/components/Answer/AnswerLoading.tsx","../../src/components/Answer/AnswerError.tsx","../../src/components/QuestionInput/QuestionInput.tsx","../../src/components/Example/Example.tsx","../../src/components/Example/ExampleList.tsx","../../src/components/UserChatMessage/UserChatMessage.tsx","../../src/components/ClearChatButton/ClearChatButton.tsx","../../src/components/VectorSettings/VectorSettings.tsx","../../src/pages/chat/Chat.tsx","../../src/pages/agent/Agent.tsx","../../src/index.tsx"],"sourcesContent":["export default \"__VITE_ASSET__4e6ad5ae__\"","import { Outlet, NavLink, Link } from \"react-router-dom\";\nimport React, { HTMLProps } from 'react';\n\nimport github from \"../../assets/github.svg\";\n\nimport styles from \"./Layout.module.css\";\n\ninterface VideoProps extends HTMLProps {\n autoplay?: boolean;\n muted?: boolean;\n loop?: boolean;\n playsinline?: boolean;\n className?: string;\n}\nconst Layout = () => {\n return (\n
\n
\n
\n \n

DTDL CustomerCare

\n \n \n

DTDL-CustomerCare

\n
\n
\n \n \n \n
\n
\n\n \n
\n );\n};\n\nexport default Layout;\n","export const BACKEND_URI = 'https://dghx6mmczrmj4mk-api.lemoncoast-95e11f85.eastus.azurecontainerapps.io';\n","import { ChatAppResponse, ChatAppResponseOrError, ChatAppRequest,ClearChatAppRequest,SummaryAppRequest, Config } from \"./models\";\nimport { BACKEND_URI } from \"./BACKEND_URI\";\n\nfunction getHeaders(): Record {\n var headers: Record = {\n \"Content-Type\": \"application/json\"\n };\n return headers;\n}\n\nexport async function chatApi(request: ChatAppRequest): Promise {\n const body = JSON.stringify(request);\n return await fetch(`${BACKEND_URI}/ai`, {\n method: \"POST\",\n mode: \"cors\",\n headers: getHeaders(),\n body: body\n });\n}\n\nexport async function fetchSummary(request: SummaryAppRequest): Promise {\n const body = JSON.stringify(request);\n return await fetch(`${BACKEND_URI}/summary`, {\n method: \"POST\",\n mode: \"cors\",\n headers: getHeaders(),\n body: body\n });\n}\n\nexport const clearChatApi = async (request: ClearChatAppRequest): Promise => {\n const response = await fetch(`${BACKEND_URI}/clear`, {\n method: 'DELETE',\n headers: getHeaders(), \n body: JSON.stringify(request),\n });\n return response;\n};\n\nexport function getCitationFilePath(citation: string): string {\n return `${BACKEND_URI}/content/${citation}`;\n}\n","export const enum RetrievalMode {\n Hybrid = \"hybrid\",\n Vectors = \"vectors\",\n Text = \"text\"\n}\n\nexport const enum GPT4VInput {\n TextAndImages = \"textAndImages\",\n Images = \"images\",\n Texts = \"texts\"\n}\n\nexport const enum VectorFieldOptions {\n Embedding = \"embedding\",\n ImageEmbedding = \"imageEmbedding\",\n Both = \"both\"\n}\n\nexport type ChatAppRequestOverrides = {\n retrieval_mode?: RetrievalMode;\n semantic_ranker?: boolean;\n semantic_captions?: boolean;\n exclude_category?: string;\n top?: number;\n temperature?: number;\n prompt_template?: string;\n prompt_template_prefix?: string;\n prompt_template_suffix?: string;\n suggest_followup_questions?: boolean;\n use_oid_security_filter?: boolean;\n use_groups_security_filter?: boolean;\n use_gpt4v?: boolean;\n gpt4v_input?: GPT4VInput;\n vector_fields: VectorFieldOptions[];\n};\n\nexport type ResponseMessage = {\n content: string;\n role: string;\n};\n\nexport type Thoughts = {\n title: string;\n description: any; // It can be any output from the api\n props?: { [key: string]: string };\n};\n\nexport type ResponseContext = {\n data_points: string[];\n followup_questions: string[] | null;\n thoughts: Thoughts[];\n};\n\nexport type ResponseChoice = {\n index: number;\n message: ResponseMessage;\n context: ResponseContext;\n session_state: any;\n};\n\nexport type ChatAppResponseOrError = {\n choices?: ResponseChoice[];\n error?: string;\n};\n\nexport type ChatAppResponse = {\n message: string;\n};\n\nexport type SummaryResponse ={\n message: string;\n}\n\nexport type ChatAppRequestContext = {\n overrides?: ChatAppRequestOverrides;\n};\n\nexport type ChatAppRequest = {\n session_id: string;\n prompt: string;\n};\n\nexport type ClearChatAppRequest = {\n session_id: string; \n};\n\nexport type SummaryAppRequest = {\n session_id: string; \n};\n\nexport type Config = {\n showGPT4VOptions: boolean;\n};\n","import { renderToStaticMarkup } from \"react-dom/server\";\nimport { getCitationFilePath } from \"../../api\";\n\ntype HtmlParsedAnswer = {\n answerHtml: string;\n citations: string[];\n};\n\nexport function parseAnswerToHtml(answer: string, isStreaming: boolean, onCitationClicked: (citationFilePath: string) => void): HtmlParsedAnswer {\n const citations: string[] = [];\n\n // trim any whitespace from the end of the answer after removing follow-up questions\n let parsedAnswer = answer.trim();\n\n // Omit a citation that is still being typed during streaming\n if (isStreaming) {\n let lastIndex = parsedAnswer.length;\n for (let i = parsedAnswer.length - 1; i >= 0; i--) {\n if (parsedAnswer[i] === \"]\") {\n break;\n } else if (parsedAnswer[i] === \"[\") {\n lastIndex = i;\n break;\n }\n }\n const truncatedAnswer = parsedAnswer.substring(0, lastIndex);\n parsedAnswer = truncatedAnswer;\n }\n\n /* This parses out the citations, but for the dev guide we don't need this functionality currently.\n const parts = parsedAnswer.split(/\\[([^\\]]+)\\]/g);\n\n const fragments: string[] = parts.map((part, index) => {\n if (index % 2 === 0) {\n return part;\n } else {\n let citationIndex: number;\n if (citations.indexOf(part) !== -1) {\n citationIndex = citations.indexOf(part) + 1;\n } else {\n citations.push(part);\n citationIndex = citations.length;\n }\n\n const path = getCitationFilePath(part);\n\n return renderToStaticMarkup(\n onCitationClicked(path)}>\n {citationIndex}\n \n );\n }\n });\n */\n\n const fragments: string[] = [parsedAnswer];\n\n\n return {\n answerHtml: fragments.join(\"\"),\n citations\n };\n}\n","import { Sparkle28Filled } from \"@fluentui/react-icons\";\n\nexport const AnswerIcon = () => {\n return ;\n};\n","import { useMemo } from \"react\";\nimport { Stack, IconButton } from \"@fluentui/react\";\nimport DOMPurify from \"dompurify\";\n\nimport styles from \"./Answer.module.css\";\n\nimport { ChatAppResponse, getCitationFilePath } from \"../../api\";\nimport { parseAnswerToHtml } from \"./AnswerParser\";\nimport { AnswerIcon } from \"./AnswerIcon\";\n\ninterface Props {\n answer: ChatAppResponse;\n isSelected?: boolean;\n isStreaming: boolean;\n onCitationClicked: (filePath: string) => void;\n onThoughtProcessClicked: () => void;\n onSupportingContentClicked: () => void;\n onFollowupQuestionClicked?: (question: string) => void;\n showFollowupQuestions?: boolean;\n}\n\nexport const Answer = ({\n answer,\n isSelected,\n isStreaming,\n onCitationClicked,\n onThoughtProcessClicked,\n onSupportingContentClicked,\n onFollowupQuestionClicked,\n showFollowupQuestions\n}: Props) => {\n //const followupQuestions = answer.choices[0].context.followup_questions;\n const messageContent = answer.message; //answer.choices[0].message.content;\n const parsedAnswer = useMemo(() => parseAnswerToHtml(messageContent, isStreaming, onCitationClicked), [answer]);\n\n const sanitizedAnswerHtml = DOMPurify.sanitize(parsedAnswer.answerHtml).replace(/```json/g, \"
\").replace(/```/g, \"
\");\n\n return (\n \n \n \n \n
\n {/* onThoughtProcessClicked()}\n // disabled={!answer.choices[0].context.thoughts?.length}\n />\n onSupportingContentClicked()}\n // disabled={!answer.choices[0].context.data_points}\n /> */}\n
\n
\n
\n\n \n
\n
\n\n {!!parsedAnswer.citations.length && (\n \n \n Citations:\n {parsedAnswer.citations.map((x, i) => {\n const path = getCitationFilePath(x);\n return (\n onCitationClicked(path)}>\n {`${++i}. ${x}`}\n \n );\n })}\n \n \n )}\n\n {/* {!!followupQuestions?.length && showFollowupQuestions && onFollowupQuestionClicked && (\n \n \n Follow-up questions:\n {followupQuestions.map((x, i) => {\n return (\n onFollowupQuestionClicked(x)}>\n {`${x}`}\n \n );\n })}\n \n \n )} */}\n
\n );\n};\n","import { Stack } from \"@fluentui/react\";\nimport { animated, useSpring } from \"@react-spring/web\";\n\nimport styles from \"./Answer.module.css\";\nimport { AnswerIcon } from \"./AnswerIcon\";\n\nexport const AnswerLoading = () => {\n const animatedStyles = useSpring({\n from: { opacity: 0 },\n to: { opacity: 1 }\n });\n\n return (\n \n \n \n \n

\n Generating answer\n \n

\n
\n
\n
\n );\n};\n","import { Stack, PrimaryButton } from \"@fluentui/react\";\nimport { ErrorCircle24Regular } from \"@fluentui/react-icons\";\n\nimport styles from \"./Answer.module.css\";\n\ninterface Props {\n error: string;\n onRetry: () => void;\n}\n\nexport const AnswerError = ({ error, onRetry }: Props) => {\n return (\n \n \n\n \n

An Error Occurred:

\n

{error}

\n
\n\n \n
\n );\n};\n","import { useEffect, useState } from \"react\";\nimport { useMsal } from \"@azure/msal-react\";\nimport { Stack, TextField } from \"@fluentui/react\";\nimport { Button, Tooltip, Field, Textarea } from \"@fluentui/react-components\";\nimport { Send28Filled } from \"@fluentui/react-icons\";\n\nimport styles from \"./QuestionInput.module.css\";\n\ninterface Props {\n onSend: (question: string) => void;\n disabled: boolean;\n initQuestion?: string;\n placeholder?: string;\n clearOnSend?: boolean;\n}\n\nexport const QuestionInput = ({ onSend, disabled, placeholder, clearOnSend, initQuestion }: Props) => {\n const [question, setQuestion] = useState(\"\");\n\n useEffect(() => {\n initQuestion && setQuestion(initQuestion);\n }, [initQuestion]);\n\n const sendQuestion = () => {\n if (disabled || !question.trim()) {\n return;\n }\n\n onSend(question);\n\n if (clearOnSend) {\n setQuestion(\"\");\n }\n };\n\n const onEnterPress = (ev: React.KeyboardEvent) => {\n if (ev.key === \"Enter\" && !ev.shiftKey) {\n ev.preventDefault();\n sendQuestion();\n }\n };\n\n const onQuestionChange = (_ev: React.FormEvent, newValue?: string) => {\n if (!newValue) {\n setQuestion(\"\");\n } else if (newValue.length <= 1000) {\n setQuestion(newValue);\n }\n };\n\n const { instance } = useMsal();\n const disableRequiredAccessControl = false; //requireAccessControl && !isLoggedIn(instance);\n const sendQuestionDisabled = disabled || !question.trim() || disableRequiredAccessControl;\n\n if (disableRequiredAccessControl) {\n placeholder = \"Please login to continue...\";\n }\n\n return (\n \n \n
\n \n
\n
\n );\n};\n","import styles from \"./Example.module.css\";\n\ninterface Props {\n text: string;\n value: string;\n onClick: (value: string) => void;\n}\n\nexport const Example = ({ text, value, onClick }: Props) => {\n return (\n
onClick(value)}>\n

{text}

\n
\n );\n};\n","import { Example } from \"./Example\";\n\nimport styles from \"./Example.module.css\";\n\nconst DEFAULT_EXAMPLES: string[] = [\n \"What was the price of the product with sku `PH-TM30`?\",\n \"Can you compare the various TV packages available?\",\n \"Could you list the products available in the Mobile Phone category that are priced under 500 euros?\"\n];\n\nconst GPT4V_EXAMPLES: string[] = [\n \"Compare the impact of interest rates and GDP in financial markets.\",\n \"What is the expected trend for the S&P 500 index over the next five years? Compare it to the past S&P 500 performance\",\n \"Can you identify any correlation between oil prices and stock market trends?\"\n];\n\ninterface Props {\n onExampleClicked: (value: string) => void;\n useGPT4V?: boolean;\n}\n\nexport const ExampleList = ({ onExampleClicked, useGPT4V }: Props) => {\n return (\n
    \n {(useGPT4V ? GPT4V_EXAMPLES : DEFAULT_EXAMPLES).map((question, i) => (\n
  • \n \n
  • \n ))}\n
\n );\n};\n","import styles from \"./UserChatMessage.module.css\";\n\ninterface Props {\n message: string;\n}\n\nexport const UserChatMessage = ({ message }: Props) => {\n return (\n
\n
{message}
\n
\n );\n};\n","import { Delete24Regular } from \"@fluentui/react-icons\";\nimport { Button } from \"@fluentui/react-components\";\n\nimport styles from \"./ClearChatButton.module.css\";\n\ninterface Props {\n className?: string;\n onClick: () => void;\n disabled?: boolean;\n}\n\nexport const ClearChatButton = ({ className, disabled, onClick }: Props) => {\n return (\n
\n \n
\n );\n};\n","import { useEffect, useState } from \"react\";\nimport { ChoiceGroup, IChoiceGroupOption, Stack, IDropdownOption, Dropdown } from \"@fluentui/react\";\n\nimport styles from \"./VectorSettings.module.css\";\nimport { RetrievalMode, VectorFieldOptions } from \"../../api\";\n\ninterface Props {\n showImageOptions?: boolean;\n updateRetrievalMode: (retrievalMode: RetrievalMode) => void;\n updateVectorFields: (options: VectorFieldOptions[]) => void;\n}\n\nconst vectorFields: IChoiceGroupOption[] = [\n {\n key: VectorFieldOptions.Embedding,\n text: \"Text Embeddings\"\n },\n {\n key: VectorFieldOptions.ImageEmbedding,\n text: \"Image Embeddings\"\n },\n {\n key: VectorFieldOptions.Both,\n text: \"Text and Image embeddings\"\n }\n];\n\nexport const VectorSettings = ({ updateRetrievalMode, updateVectorFields, showImageOptions }: Props) => {\n const [retrievalMode, setRetrievalMode] = useState(RetrievalMode.Hybrid);\n const [vectorFieldOption, setVectorFieldOption] = useState();\n\n const onVectorFieldsChange = (_ev?: React.FormEvent, option?: IChoiceGroupOption) => {\n option && setVectorFieldOption(option.key);\n let list;\n if (option?.key === \"both\") {\n list = [VectorFieldOptions.Embedding, VectorFieldOptions.ImageEmbedding];\n } else {\n list = [option?.key as VectorFieldOptions];\n }\n updateVectorFields(list);\n };\n\n useEffect(() => {\n showImageOptions\n ? updateVectorFields([VectorFieldOptions.Embedding, VectorFieldOptions.ImageEmbedding])\n : updateVectorFields([VectorFieldOptions.Embedding]);\n }, [showImageOptions]);\n\n return (\n \n {showImageOptions && [RetrievalMode.Vectors, RetrievalMode.Hybrid].includes(retrievalMode) && (\n \n )}\n \n );\n};\n","import { useRef, useState, useEffect } from \"react\";\nimport { Checkbox, Panel, DefaultButton, TextField, SpinButton } from \"@fluentui/react\";\nimport { SparkleFilled } from \"@fluentui/react-icons\";\nimport readNDJSONStream from \"ndjson-readablestream\";\nimport { v4 as uuidv4 } from 'uuid';\n\n\nimport styles from \"./Chat.module.css\";\n\nimport {\n chatApi,\n clearChatApi,\n RetrievalMode,\n ChatAppResponse,\n ChatAppResponseOrError,\n ChatAppRequest,\n ClearChatAppRequest,\n ResponseMessage,\n VectorFieldOptions,\n GPT4VInput\n} from \"../../api\";\nimport { Answer, AnswerError, AnswerLoading } from \"../../components/Answer\";\nimport { QuestionInput } from \"../../components/QuestionInput\";\nimport { ExampleList } from \"../../components/Example\";\nimport { UserChatMessage } from \"../../components/UserChatMessage\";\nimport { ClearChatButton } from \"../../components/ClearChatButton\";\nimport { VectorSettings } from \"../../components/VectorSettings\";\n//import { useMsal } from \"@azure/msal-react\";\n\nconst Chat = () => {\n const [isConfigPanelOpen, setIsConfigPanelOpen] = useState(false);\n const [promptTemplate, setPromptTemplate] = useState(\"\");\n const [retrieveCount, setRetrieveCount] = useState(3);\n const [retrievalMode, setRetrievalMode] = useState(RetrievalMode.Hybrid);\n const [useSemanticRanker, setUseSemanticRanker] = useState(true);\n const [shouldStream, setShouldStream] = useState(true);\n const [useSemanticCaptions, setUseSemanticCaptions] = useState(false);\n const [excludeCategory, setExcludeCategory] = useState(\"\");\n const [useSuggestFollowupQuestions, setUseSuggestFollowupQuestions] = useState(false);\n const [vectorFieldList, setVectorFieldList] = useState([VectorFieldOptions.Embedding]);\n const [useOidSecurityFilter, setUseOidSecurityFilter] = useState(false);\n const [useGroupsSecurityFilter, setUseGroupsSecurityFilter] = useState(false);\n const [gpt4vInput, setGPT4VInput] = useState(GPT4VInput.TextAndImages);\n const [useGPT4V, setUseGPT4V] = useState(false);\n\n const lastQuestionRef = useRef(\"\");\n const chatMessageStreamEnd = useRef(null);\n\n const [isLoading, setIsLoading] = useState(false);\n const [isStreaming, setIsStreaming] = useState(false);\n const [error, setError] = useState();\n\n const [activeCitation, setActiveCitation] = useState();\n\n const [selectedAnswer, setSelectedAnswer] = useState(0);\n const [answers, setAnswers] = useState<[user: string, response: ChatAppResponse][]>([]);\n const [showGPT4VOptions, setShowGPT4VOptions] = useState(false);\n const [sessionId, setSessionId] = useState(uuidv4());\n\n\n const makeApiRequest = async (question: string) => {\n lastQuestionRef.current = question;\n\n error && setError(undefined);\n setIsLoading(true);\n setActiveCitation(undefined);\n\n try {\n const request: ChatAppRequest = {\n prompt: question,\n session_id: sessionId \n };\n\n const response = await chatApi(request);\n const contentType = response.headers.get(\"content-type\");\n if (!response.body) {\n throw Error(\"No response body\");\n } else if (contentType?.indexOf('text/html') !== -1 || contentType?.indexOf('text/plain') !== -1) {\n const bodyText = await response.text();\n console.error(`Chat Error: ${bodyText}`);\n setError(bodyText);\n } else {\n const parsedResponse: ChatAppResponse = await response.json();\n setAnswers([...answers, [question, parsedResponse]]);\n }\n // if (shouldStream) {\n // const parsedResponse: ChatAppResponse = await handleAsyncRequest(question, answers, setAnswers, response.body);\n // setAnswers([...answers, [question, parsedResponse]]);\n // } else {\n // const parsedResponse: ChatAppResponseOrError = await response.json();\n // if (response.status > 299 || !response.ok) {\n // throw Error(parsedResponse.error || \"Unknown error\");\n // }\n // setAnswers([...answers, [question, parsedResponse as ChatAppResponse]]);\n // }\n } catch (e) {\n console.error(`Chat Error: ${e}`);\n setError(e);\n } finally {\n setIsLoading(false);\n }\n };\n const clearChat = async () => {\n try {\n const request: ClearChatAppRequest = { \n session_id: sessionId \n };\n const response = await clearChatApi(request);\n if (!response.ok) {\n throw new Error(\"Failed to clear chat\");\n }\n // Clear the chat state\n lastQuestionRef.current = \"\";\n error && setError(undefined);\n setActiveCitation(undefined);\n setAnswers([]);\n setIsLoading(false);\n setIsStreaming(false);\n } catch (e) {\n console.error(`Clear Chat Error: ${e}`);\n setError(e);\n }\n };\n\n useEffect(() => chatMessageStreamEnd.current?.scrollIntoView({ behavior: \"smooth\" }), [isLoading]);\n //useEffect(() => chatMessageStreamEnd.current?.scrollIntoView({ behavior: \"auto\" }), [streamedAnswers]);\n // useEffect(() => {\n // getConfig();\n // }, []);\n\n const onPromptTemplateChange = (_ev?: React.FormEvent, newValue?: string) => {\n setPromptTemplate(newValue || \"\");\n };\n\n const onRetrieveCountChange = (_ev?: React.SyntheticEvent, newValue?: string) => {\n setRetrieveCount(parseInt(newValue || \"3\"));\n };\n\n const onUseSemanticRankerChange = (_ev?: React.FormEvent, checked?: boolean) => {\n setUseSemanticRanker(!!checked);\n };\n\n const onUseSemanticCaptionsChange = (_ev?: React.FormEvent, checked?: boolean) => {\n setUseSemanticCaptions(!!checked);\n };\n\n const onShouldStreamChange = (_ev?: React.FormEvent, checked?: boolean) => {\n setShouldStream(!!checked);\n };\n\n const onExcludeCategoryChanged = (_ev?: React.FormEvent, newValue?: string) => {\n setExcludeCategory(newValue || \"\");\n };\n\n const onUseSuggestFollowupQuestionsChange = (_ev?: React.FormEvent, checked?: boolean) => {\n setUseSuggestFollowupQuestions(!!checked);\n };\n\n const onUseOidSecurityFilterChange = (_ev?: React.FormEvent, checked?: boolean) => {\n setUseOidSecurityFilter(!!checked);\n };\n\n const onUseGroupsSecurityFilterChange = (_ev?: React.FormEvent, checked?: boolean) => {\n setUseGroupsSecurityFilter(!!checked);\n };\n\n const onExampleClicked = (example: string) => {\n makeApiRequest(example);\n };\n\n const onShowCitation = (citation: string, index: number) => {\n // if (activeCitation === citation && activeAnalysisPanelTab === AnalysisPanelTabs.CitationTab && selectedAnswer === index) {\n // setActiveAnalysisPanelTab(undefined);\n // } else {\n setActiveCitation(citation);\n // setActiveAnalysisPanelTab(AnalysisPanelTabs.CitationTab);\n //}\n\n setSelectedAnswer(index);\n };\n\n return (\n
\n
\n \n
\n
\n
\n {!lastQuestionRef.current ? (\n
\n
\n \"\"\n
\n

Customer Support

\n

Empowering Connections: Your Premier Deutsche Telekom Support Hub

\n \n
\n ) : (\n
\n {/* {isStreaming &&\n streamedAnswers.map((streamedAnswer, index) => (\n
\n \n
\n onShowCitation(c, index)}\n onThoughtProcessClicked={() => onToggleTab(AnalysisPanelTabs.ThoughtProcessTab, index)}\n onSupportingContentClicked={() => onToggleTab(AnalysisPanelTabs.SupportingContentTab, index)}\n onFollowupQuestionClicked={q => makeApiRequest(q)}\n showFollowupQuestions={useSuggestFollowupQuestions && answers.length - 1 === index}\n />\n
\n
\n ))} */}\n {!isStreaming &&\n answers.map((answer, index) => (\n
\n \n
\n onShowCitation(c, index)}\n onThoughtProcessClicked={() => {}} // {() => onToggleTab(AnalysisPanelTabs.ThoughtProcessTab, index)}\n onSupportingContentClicked={() => {}} // {() => onToggleTab(AnalysisPanelTabs.SupportingContentTab, index)}\n onFollowupQuestionClicked={q => makeApiRequest(q)}\n showFollowupQuestions={useSuggestFollowupQuestions && answers.length - 1 === index}\n />\n
\n
\n ))}\n {isLoading && (\n <>\n \n
\n \n
\n \n )}\n {error ? (\n <>\n \n
\n makeApiRequest(lastQuestionRef.current)} />\n
\n \n ) : null}\n
\n
\n )}\n\n
\n makeApiRequest(question)}\n />\n
\n
\n\n setIsConfigPanelOpen(false)}\n closeButtonAriaLabel=\"Close\"\n onRenderFooterContent={() => setIsConfigPanelOpen(false)}>Close}\n isFooterAtBottom={true}\n >\n \n\n \n \n \n \n \n\n setVectorFieldList(options)}\n updateRetrievalMode={(retrievalMode: RetrievalMode) => setRetrievalMode(retrievalMode)}\n />\n\n \n \n
\n
\n );\n};\n\nexport default Chat;\n","import React, { useEffect, useState } from 'react';\nimport Chat from '../chat/Chat';\nimport styles from './Agent.module.css';\nimport { SummaryAppRequest, SummaryResponse, fetchSummary } from '../../api';\nimport { useParams } from 'react-router-dom';\n\n\nconst AgentView = () => {\n const [summary, setSummary] = useState('');\n const { sessionId } = useParams<{ sessionId: any }>(); \n\n useEffect(() => {\n \n const getSummary = async () => {\n const request: SummaryAppRequest = { \n session_id: sessionId\n };\n\n const response = await fetchSummary(request); \n const contentType = response.headers.get(\"content-type\");\n if (!response.body) {\n throw Error(\"No response body\");\n } else if (contentType?.indexOf('text/html') !== -1 || contentType?.indexOf('text/plain') !== -1) {\n const bodyText = await response.text();\n console.error(`Chat Error: ${bodyText}`); \n }else {\n const parsedResponse: SummaryResponse = await response.json();\n const summaryData= parsedResponse.message;\n if (summaryData && Object.keys(summaryData).length > 0) { \n setSummary(summaryData);\n }\n }\n \n };\n\n getSummary();\n }, [sessionId]);\n\n return (\n
\n
\n \n
\n
\n \n {summary && Object.keys(summary).length > 0 && (\n <>\n

Conversation Summary

\n
{summary}
{/* Using
 to preserve newlines */}\n                    \n                )}\n            
\n
\n );\n};\n\nexport default AgentView;\n","import React from \"react\";\nimport ReactDOM from \"react-dom/client\";\nimport { createHashRouter, RouterProvider } from \"react-router-dom\";\nimport { initializeIcons } from \"@fluentui/react\";\nimport { MsalProvider } from \"@azure/msal-react\";\n\nimport \"./index.css\";\n\nimport Layout from \"./pages/layout/Layout\";\nimport Chat from \"./pages/chat/Chat\";\nimport AgentView from \"./pages/agent/Agent\";\n\nvar layout;\n\nlayout = ;\n\ninitializeIcons();\n\nconst router = createHashRouter([\n {\n path: \"/\",\n element: layout,\n children: [\n {\n index: true,\n element: \n },\n {\n path: \"agent/:sessionId\",\n element: \n },\n {\n path: \"*\",\n lazy: () => import(\"./pages/NoPage\")\n }\n ]\n }\n]);\n\nReactDOM.createRoot(document.getElementById(\"root\") as HTMLElement).render(\n \n \n \n);\n"],"file":"assets/index-7fbd1275.js"}