From 73b53eea4f8329622a6c0ce2f78fd2c45166a16b Mon Sep 17 00:00:00 2001 From: WenjiaoYue Date: Tue, 14 Jan 2025 17:20:33 +0800 Subject: [PATCH 1/3] Add AgentQnA UI code Integrate the AgentQnA UI code, along with an updated README specific to the UI, a Dockerfile for deployment, and the necessary startup scripts. Signed-off-by: WenjiaoYue --- .github/workflows/check-online-doc-build.yml | 2 +- ...pr-dockerfile-path-and-build-yaml-scan.yml | 2 +- AgentQnA/README.md | 2 +- AgentQnA/assets/{ => img}/agent_qna_arch.png | Bin AgentQnA/assets/img/agent_ui.png | Bin 0 -> 57092 bytes AgentQnA/assets/img/agent_ui_result.png | Bin 0 -> 58255 bytes AgentQnA/docker_image_build/build.yaml | 6 + AgentQnA/ui/docker/Dockerfile | 26 ++ AgentQnA/ui/svelte/.editorconfig | 10 + AgentQnA/ui/svelte/.env | 1 + AgentQnA/ui/svelte/.eslintignore | 13 + AgentQnA/ui/svelte/.eslintrc.cjs | 20 ++ AgentQnA/ui/svelte/.prettierignore | 13 + AgentQnA/ui/svelte/.prettierrc | 13 + AgentQnA/ui/svelte/README.md | 60 ++++ AgentQnA/ui/svelte/package.json | 60 ++++ AgentQnA/ui/svelte/postcss.config.cjs | 13 + AgentQnA/ui/svelte/src/app.d.ts | 50 ++++ AgentQnA/ui/svelte/src/app.html | 17 ++ AgentQnA/ui/svelte/src/app.postcss | 82 +++++ .../src/lib/assets/Agent/createSub.svelte | 25 ++ .../src/lib/assets/Agent/download.svelte | 9 + .../ui/svelte/src/lib/assets/Agent/eye.svelte | 16 + .../svelte/src/lib/assets/Agent/newAI.svelte | 97 ++++++ .../src/lib/assets/Agent/resource.svelte | 8 + .../svelte/src/lib/assets/Agent/search.svelte | 13 + .../src/lib/assets/Agent/searchDelete.svelte | 17 ++ .../src/lib/assets/Agent/searchResult.svelte | 20 ++ .../svelte/src/lib/assets/Agent/star.svelte | 22 ++ .../src/lib/assets/Agent/summary.svelte | 44 +++ .../src/lib/assets/Agent/taskIcon.svelte | 24 ++ .../src/lib/assets/Agent/taskResult.svelte | 60 ++++ .../svelte/src/lib/assets/Agent/time.svelte | 8 + .../src/lib/assets/Agent/toolIcon.svelte | 36 +++ .../icons/ActiveDislikeButtonIcon.svelte | 28 ++ .../assets/icons/ActiveLikeButtonIcon.svelte | 24 ++ .../svelte/src/lib/assets/icons/Folder.svelte | 28 ++ .../src/lib/assets/icons/Knowledge.svelte | 38 +++ .../src/lib/assets/icons/NoTranslate.svelte | 32 ++ .../src/lib/assets/icons/OldHelp.svelte | 41 +++ .../src/lib/assets/icons/Question.svelte | 6 + .../src/lib/assets/icons/addKnowledge.svelte | 92 ++++++ .../lib/assets/icons/adminKnowledge.svelte | 229 ++++++++++++++ .../lib/assets/icons/arrow-path-icon.svelte | 25 ++ .../src/lib/assets/icons/assistant.svelte | 33 +++ .../assets/icons/chat-bubble-left-icon.svelte | 25 ++ .../svelte/src/lib/assets/icons/chat.svelte | 6 + .../src/lib/assets/icons/check-icon.svelte | 25 ++ .../ui/svelte/src/lib/assets/icons/csv.svg | 12 + .../lib/assets/icons/dislikeButtonIcon.svelte | 28 ++ .../assets/icons/download-directory.svelte | 16 + .../lib/assets/icons/likeButtonIcon.svelte | 24 ++ .../icons/loading-button-spinner-icon.svelte | 25 ++ .../lib/assets/icons/message-avatar.svelte | 17 ++ .../src/lib/assets/icons/no-file.svelte | 37 +++ .../lib/assets/icons/paper-airplane.svelte | 27 ++ .../src/lib/assets/icons/paste-link.svelte | 20 ++ .../assets/icons/pencil-square-icon.svelte | 25 ++ .../src/lib/assets/icons/plus-icon.svelte | 27 ++ .../src/lib/assets/icons/portrait.svelte | 20 ++ .../src/lib/assets/icons/translateIcon.svelte | 32 ++ .../src/lib/assets/icons/trash-icon.svelte | 25 ++ .../lib/assets/icons/upload-directory.svelte | 14 + .../src/lib/assets/icons/upload-files.svelte | 14 + .../lib/assets/icons/upoadKnowledge.svelte | 6 + .../src/lib/assets/icons/warning.svelte | 22 ++ .../src/lib/assets/icons/x-mark-icon.svelte | 20 ++ AgentQnA/ui/svelte/src/lib/common/sse.d.ts | 15 + AgentQnA/ui/svelte/src/lib/common/timediff.ts | 26 ++ .../lib/components/agent/loadingStatic.svelte | 16 + .../src/lib/components/chat/chat.svelte | 239 +++++++++++++++ .../src/lib/components/chat/history.svelte | 166 +++++++++++ .../components/chat/loadingAnimation.svelte | 37 +++ .../svelte/src/lib/components/content.svelte | 33 +++ .../svelte/src/lib/components/create.svelte | 238 +++++++++++++++ .../src/lib/components/generateGoal.svelte | 279 ++++++++++++++++++ .../ui/svelte/src/lib/components/home.svelte | 154 ++++++++++ .../svelte/src/lib/components/layout.svelte | 45 +++ .../lib/components/shared/click-outside.ts | 18 ++ .../src/lib/components/shared/overlay.svelte | 15 + .../src/lib/components/shared/shared-utils.ts | 167 +++++++++++ .../src/lib/components/shared/shared.store.ts | 34 +++ .../src/lib/components/shared/shared.type.ts | 83 ++++++ .../svelte/src/lib/components/shared/store.ts | 11 + .../svelte/src/lib/components/timeline.svelte | 68 +++++ .../lib/modules/chat/sidebar-chat-item.svelte | 169 +++++++++++ .../modules/chat/wait-for-knowledge.svelte | 33 +++ AgentQnA/ui/svelte/src/lib/modules/network.ts | 24 ++ AgentQnA/ui/svelte/src/routes/+layout.svelte | 13 + AgentQnA/ui/svelte/src/routes/+page.svelte | 15 + AgentQnA/ui/svelte/src/routes/+page.ts | 36 +++ AgentQnA/ui/svelte/static/favicon.png | Bin 0 -> 70954 bytes AgentQnA/ui/svelte/svelte.config.js | 27 ++ AgentQnA/ui/svelte/tailwind.config.cjs | 11 + AgentQnA/ui/svelte/tsconfig.json | 13 + AgentQnA/ui/svelte/vite.config.ts | 21 ++ 96 files changed, 3835 insertions(+), 3 deletions(-) rename AgentQnA/assets/{ => img}/agent_qna_arch.png (100%) create mode 100644 AgentQnA/assets/img/agent_ui.png create mode 100644 AgentQnA/assets/img/agent_ui_result.png create mode 100644 AgentQnA/ui/docker/Dockerfile create mode 100644 AgentQnA/ui/svelte/.editorconfig create mode 100644 AgentQnA/ui/svelte/.env create mode 100644 AgentQnA/ui/svelte/.eslintignore create mode 100644 AgentQnA/ui/svelte/.eslintrc.cjs create mode 100644 AgentQnA/ui/svelte/.prettierignore create mode 100644 AgentQnA/ui/svelte/.prettierrc create mode 100644 AgentQnA/ui/svelte/README.md create mode 100644 AgentQnA/ui/svelte/package.json create mode 100644 AgentQnA/ui/svelte/postcss.config.cjs create mode 100644 AgentQnA/ui/svelte/src/app.d.ts create mode 100644 AgentQnA/ui/svelte/src/app.html create mode 100644 AgentQnA/ui/svelte/src/app.postcss create mode 100644 AgentQnA/ui/svelte/src/lib/assets/Agent/createSub.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/Agent/download.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/Agent/eye.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/Agent/newAI.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/Agent/resource.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/Agent/search.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/Agent/searchDelete.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/Agent/searchResult.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/Agent/star.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/Agent/summary.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/Agent/taskIcon.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/Agent/taskResult.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/Agent/time.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/Agent/toolIcon.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/icons/ActiveDislikeButtonIcon.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/icons/ActiveLikeButtonIcon.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/icons/Folder.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/icons/Knowledge.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/icons/NoTranslate.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/icons/OldHelp.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/icons/Question.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/icons/addKnowledge.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/icons/adminKnowledge.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/icons/arrow-path-icon.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/icons/assistant.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/icons/chat-bubble-left-icon.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/icons/chat.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/icons/check-icon.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/icons/csv.svg create mode 100644 AgentQnA/ui/svelte/src/lib/assets/icons/dislikeButtonIcon.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/icons/download-directory.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/icons/likeButtonIcon.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/icons/loading-button-spinner-icon.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/icons/message-avatar.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/icons/no-file.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/icons/paper-airplane.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/icons/paste-link.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/icons/pencil-square-icon.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/icons/plus-icon.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/icons/portrait.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/icons/translateIcon.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/icons/trash-icon.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/icons/upload-directory.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/icons/upload-files.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/icons/upoadKnowledge.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/icons/warning.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/assets/icons/x-mark-icon.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/common/sse.d.ts create mode 100644 AgentQnA/ui/svelte/src/lib/common/timediff.ts create mode 100644 AgentQnA/ui/svelte/src/lib/components/agent/loadingStatic.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/components/chat/chat.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/components/chat/history.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/components/chat/loadingAnimation.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/components/content.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/components/create.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/components/generateGoal.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/components/home.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/components/layout.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/components/shared/click-outside.ts create mode 100644 AgentQnA/ui/svelte/src/lib/components/shared/overlay.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/components/shared/shared-utils.ts create mode 100644 AgentQnA/ui/svelte/src/lib/components/shared/shared.store.ts create mode 100644 AgentQnA/ui/svelte/src/lib/components/shared/shared.type.ts create mode 100644 AgentQnA/ui/svelte/src/lib/components/shared/store.ts create mode 100644 AgentQnA/ui/svelte/src/lib/components/timeline.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/modules/chat/sidebar-chat-item.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/modules/chat/wait-for-knowledge.svelte create mode 100644 AgentQnA/ui/svelte/src/lib/modules/network.ts create mode 100644 AgentQnA/ui/svelte/src/routes/+layout.svelte create mode 100644 AgentQnA/ui/svelte/src/routes/+page.svelte create mode 100644 AgentQnA/ui/svelte/src/routes/+page.ts create mode 100644 AgentQnA/ui/svelte/static/favicon.png create mode 100644 AgentQnA/ui/svelte/svelte.config.js create mode 100644 AgentQnA/ui/svelte/tailwind.config.cjs create mode 100644 AgentQnA/ui/svelte/tsconfig.json create mode 100644 AgentQnA/ui/svelte/vite.config.ts diff --git a/.github/workflows/check-online-doc-build.yml b/.github/workflows/check-online-doc-build.yml index 4972f398dc..fecb227503 100644 --- a/.github/workflows/check-online-doc-build.yml +++ b/.github/workflows/check-online-doc-build.yml @@ -13,7 +13,7 @@ on: jobs: build: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - name: Checkout diff --git a/.github/workflows/pr-dockerfile-path-and-build-yaml-scan.yml b/.github/workflows/pr-dockerfile-path-and-build-yaml-scan.yml index 9fa9d03342..dc62caaa35 100644 --- a/.github/workflows/pr-dockerfile-path-and-build-yaml-scan.yml +++ b/.github/workflows/pr-dockerfile-path-and-build-yaml-scan.yml @@ -60,7 +60,7 @@ jobs: shopt -s globstar no_add="FALSE" cd ${{github.workspace}} - Dockerfiles=$(realpath $(find ./ -name '*Dockerfile*' ! -path './tests/*')) + Dockerfiles=$(realpath $(find ./ -name '*Dockerfile*' ! -path '*/tests/*')) if [ -n "$Dockerfiles" ]; then for dockerfile in $Dockerfiles; do service=$(echo "$dockerfile" | awk -F '/GenAIExamples/' '{print $2}' | awk -F '/' '{print $2}') diff --git a/AgentQnA/README.md b/AgentQnA/README.md index de36805b11..551eb239c0 100644 --- a/AgentQnA/README.md +++ b/AgentQnA/README.md @@ -3,7 +3,7 @@ ## Overview This example showcases a hierarchical multi-agent system for question-answering applications. The architecture diagram is shown below. The supervisor agent interfaces with the user and dispatch tasks to the worker agent and other tools to gather information and come up with answers. The worker agent uses the retrieval tool to generate answers to the queries posted by the supervisor agent. Other tools used by the supervisor agent may include APIs to interface knowledge graphs, SQL databases, external knowledge bases, etc. -![Architecture Overview](assets/agent_qna_arch.png) +![Architecture Overview](assets/img/agent_qna_arch.png) The AgentQnA example is implemented using the component-level microservices defined in [GenAIComps](https://github.com/opea-project/GenAIComps). The flow chart below shows the information flow between different microservices for this example. diff --git a/AgentQnA/assets/agent_qna_arch.png b/AgentQnA/assets/img/agent_qna_arch.png similarity index 100% rename from AgentQnA/assets/agent_qna_arch.png rename to AgentQnA/assets/img/agent_qna_arch.png diff --git a/AgentQnA/assets/img/agent_ui.png b/AgentQnA/assets/img/agent_ui.png new file mode 100644 index 0000000000000000000000000000000000000000..154c85be83df747718ff6c42ed800289681d35ca GIT binary patch literal 57092 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�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 require("typescript"), + }, + parserOptions: { + sourceType: "module", + ecmaVersion: 2020, + }, + env: { + browser: true, + es2017: true, + node: true, + }, +}; diff --git a/AgentQnA/ui/svelte/.prettierignore b/AgentQnA/ui/svelte/.prettierignore new file mode 100644 index 0000000000..38972655fa --- /dev/null +++ b/AgentQnA/ui/svelte/.prettierignore @@ -0,0 +1,13 @@ +.DS_Store +node_modules +/build +/.svelte-kit +/package +.env +.env.* +!.env.example + +# Ignore files for PNPM, NPM and YARN +pnpm-lock.yaml +package-lock.json +yarn.lock diff --git a/AgentQnA/ui/svelte/.prettierrc b/AgentQnA/ui/svelte/.prettierrc new file mode 100644 index 0000000000..3b2006102e --- /dev/null +++ b/AgentQnA/ui/svelte/.prettierrc @@ -0,0 +1,13 @@ +{ + "pluginSearchDirs": [ + "." + ], + "overrides": [ + { + "files": "*.svelte", + "options": { + "parser": "svelte" + } + } + ] +} \ No newline at end of file diff --git a/AgentQnA/ui/svelte/README.md b/AgentQnA/ui/svelte/README.md new file mode 100644 index 0000000000..bd0ae2da10 --- /dev/null +++ b/AgentQnA/ui/svelte/README.md @@ -0,0 +1,60 @@ +# AgentQnA + +## 📸 Project Screenshots + +![project-screenshot](../../assets/img/agent_ui.png) +![project-screenshot](../../assets/img/agent_ui_result.png) + +## 🧐 Features + +Here're some of the project's features: + +- Create Agent:Provide more precise answers based on user queries, showcase the high-quality output process of complex queries across different dimensions, and consolidate information to present comprehensive answers. + +## 🛠️ Get it Running + +1. Clone the repo. + +2. cd command to the current folder. + + ``` + cd AgentQnA/ui + ``` + +3. Modify the required .env variables. + + ``` + AGENT_URL = '' + ``` + +4. **For Local Development:** + +- Install the dependencies: + + ``` + npm install + ``` + +- Start the development server: + + ``` + npm run dev + ``` + +- The application will be available at `http://localhost:3000`. + +5. **For Docker Setup:** + +- Build the Docker image: + + ``` + docker build -t opea:agent-ui . + ``` + +- Run the Docker container: + + ``` + docker run -d -p 3000:3000 --name agent-ui opea:agent-ui + ``` + +- The application will be available at `http://localhost:3000`. diff --git a/AgentQnA/ui/svelte/package.json b/AgentQnA/ui/svelte/package.json new file mode 100644 index 0000000000..b778040bec --- /dev/null +++ b/AgentQnA/ui/svelte/package.json @@ -0,0 +1,60 @@ +{ + "name": "agent-example", + "version": "0.0.1", + "private": true, + "scripts": { + "dev": "vite dev --host 0.0.0.0", + "build": "vite build", + "preview": "vite preview", + "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", + "lint": "prettier --check . && eslint .", + "format": "prettier --write ." + }, + "devDependencies": { + "@fortawesome/free-solid-svg-icons": "6.2.0", + "@sveltejs/adapter-auto": "1.0.0-next.75", + "@sveltejs/kit": "^1.20.1", + "@tailwindcss/typography": "0.5.7", + "@types/debug": "4.1.7", + "@typescript-eslint/eslint-plugin": "^5.27.0", + "@typescript-eslint/parser": "^5.27.0", + "autoprefixer": "^10.4.7", + "daisyui": "^2.52.0", + "debug": "4.3.4", + "eslint": "^8.16.0", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-neverthrow": "1.1.4", + "eslint-plugin-svelte3": "^4.0.0", + "neverthrow": "5.0.0", + "pocketbase": "0.7.0", + "postcss": "^8.4.23", + "postcss-load-config": "^4.0.1", + "postcss-preset-env": "^8.3.2", + "prettier": "^2.8.8", + "prettier-plugin-svelte": "^2.7.0", + "prettier-plugin-tailwindcss": "^0.3.0", + "svelte": "^3.59.1", + "svelte-check": "^2.7.1", + "svelte-fa": "3.0.3", + "svelte-preprocess": "^4.10.7", + "tailwindcss": "^3.1.5", + "ts-pattern": "4.0.5", + "tslib": "^2.3.1", + "typescript": "^4.7.4", + "vite": "^4.3.9" + }, + "type": "module", + "dependencies": { + "@heroicons/vue": "^2.1.5", + "echarts": "^5.4.2", + "flowbite-svelte": "^0.38.5", + "flowbite-svelte-icons": "^0.3.6", + "fuse.js": "^6.6.2", + "marked": "^15.0.0", + "ramda": "^0.29.0", + "sjcl": "^1.0.8", + "sse.js": "^0.6.1", + "svelte-notifications": "^0.9.98" + } +} diff --git a/AgentQnA/ui/svelte/postcss.config.cjs b/AgentQnA/ui/svelte/postcss.config.cjs new file mode 100644 index 0000000000..e68d4de268 --- /dev/null +++ b/AgentQnA/ui/svelte/postcss.config.cjs @@ -0,0 +1,13 @@ +const tailwindcss = require("tailwindcss"); +const autoprefixer = require("autoprefixer"); + +const config = { + plugins: [ + //Some plugins, like tailwindcss/nesting, need to run before Tailwind, + tailwindcss(), + //But others, like autoprefixer, need to run after, + autoprefixer, + ], +}; + +module.exports = config; diff --git a/AgentQnA/ui/svelte/src/app.d.ts b/AgentQnA/ui/svelte/src/app.d.ts new file mode 100644 index 0000000000..76f5cae98c --- /dev/null +++ b/AgentQnA/ui/svelte/src/app.d.ts @@ -0,0 +1,50 @@ +// Copyright (C) 2025 Intel Corporation +// SPDX-License-Identifier: Apache-2.0 + +// See: https://kit.svelte.dev/docs/types#app +// import { Result} from "neverthrow"; + +declare namespace App { + interface Locals { + user?: User; + } + // interface PageData { } + // interface PageError {} + // interface Platform {} +} + +interface User { + id?: string; + email: string; + password?: string; + token?: string; + [key: string]: any; +} + +type AuthResponse = Result; + +interface AuthAdapter { + login(props: { email: string; password: string }): Promise; + signup(props: { email: string; password: string; password_confirm: string }): Promise; + validate_session(props: { token: string }): Promise; + logout(props: { token: string; email: string }): Promise>; + forgotPassword(props: { email: string; password: string }): Promise>; +} + +interface ChatAdapter { + modelList(props: {}): Promise>; + txt2img(props: {}): Promise>; +} + +interface ChatMessage { + role: string; + content: string; +} + +interface ChatMessageType { + model: string; + knowledge: string; + temperature: string; + max_new_tokens: string; + topk: string; +} diff --git a/AgentQnA/ui/svelte/src/app.html b/AgentQnA/ui/svelte/src/app.html new file mode 100644 index 0000000000..5baaf1750e --- /dev/null +++ b/AgentQnA/ui/svelte/src/app.html @@ -0,0 +1,17 @@ + + + + + + + + + %sveltekit.head% + + +
%sveltekit.body%
+ + diff --git a/AgentQnA/ui/svelte/src/app.postcss b/AgentQnA/ui/svelte/src/app.postcss new file mode 100644 index 0000000000..c3e0519c6a --- /dev/null +++ b/AgentQnA/ui/svelte/src/app.postcss @@ -0,0 +1,82 @@ +/* Write your global styles here, in PostCSS syntax */ +@tailwind base; +@tailwind components; +@tailwind utilities; + +.btn { + @apply flex-nowrap; +} +a.btn { + @apply no-underline; +} +.input { + @apply text-base; +} + +.bg-dark-blue { + background-color: #004a86; +} + +.bg-light-blue { + background-color: #0068b5; +} + +.bg-turquoise { + background-color: #00a3f6; +} + +.bg-header { + background-color: #ffffff; +} + +.bg-button { + background-color: #0068b5; +} + +.bg-title { + background-color: #f7f7f7; +} + +.text-header { + color: #0068b5; +} + +.text-button { + color: #0071c5; +} + +.text-title-color { + color: rgb(38,38,38); +} + +.font-intel { + font-family: "intel-clear","tahoma",Helvetica,"helvetica",Arial,sans-serif; +} + +.font-title-intel { + font-family: "intel-one","intel-clear",Helvetica,Arial,sans-serif; +} + +.bg-footer { + background-color: #e7e7e7; +} + +.bg-light-green { + background-color: #d7f3a1; +} + +.bg-purple { + background-color: #653171; +} + +.bg-dark-blue { + background-color: #224678; +} + +.border-input-color { + border-color: #605e5c; +} + +.w-12\/12 { + width: 100% +} \ No newline at end of file diff --git a/AgentQnA/ui/svelte/src/lib/assets/Agent/createSub.svelte b/AgentQnA/ui/svelte/src/lib/assets/Agent/createSub.svelte new file mode 100644 index 0000000000..b31044d0fc --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/Agent/createSub.svelte @@ -0,0 +1,25 @@ + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/Agent/download.svelte b/AgentQnA/ui/svelte/src/lib/assets/Agent/download.svelte new file mode 100644 index 0000000000..da8bcefb3d --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/Agent/download.svelte @@ -0,0 +1,9 @@ + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/Agent/eye.svelte b/AgentQnA/ui/svelte/src/lib/assets/Agent/eye.svelte new file mode 100644 index 0000000000..06f9a821e4 --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/Agent/eye.svelte @@ -0,0 +1,16 @@ + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/Agent/newAI.svelte b/AgentQnA/ui/svelte/src/lib/assets/Agent/newAI.svelte new file mode 100644 index 0000000000..6fc1179daf --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/Agent/newAI.svelte @@ -0,0 +1,97 @@ + + + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/Agent/resource.svelte b/AgentQnA/ui/svelte/src/lib/assets/Agent/resource.svelte new file mode 100644 index 0000000000..6460bb34d2 --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/Agent/resource.svelte @@ -0,0 +1,8 @@ + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/Agent/search.svelte b/AgentQnA/ui/svelte/src/lib/assets/Agent/search.svelte new file mode 100644 index 0000000000..79c22c7b2f --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/Agent/search.svelte @@ -0,0 +1,13 @@ + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/Agent/searchDelete.svelte b/AgentQnA/ui/svelte/src/lib/assets/Agent/searchDelete.svelte new file mode 100644 index 0000000000..e6907c21df --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/Agent/searchDelete.svelte @@ -0,0 +1,17 @@ + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/Agent/searchResult.svelte b/AgentQnA/ui/svelte/src/lib/assets/Agent/searchResult.svelte new file mode 100644 index 0000000000..378f3cdf50 --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/Agent/searchResult.svelte @@ -0,0 +1,20 @@ + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/Agent/star.svelte b/AgentQnA/ui/svelte/src/lib/assets/Agent/star.svelte new file mode 100644 index 0000000000..1a0e4175cc --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/Agent/star.svelte @@ -0,0 +1,22 @@ + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/Agent/summary.svelte b/AgentQnA/ui/svelte/src/lib/assets/Agent/summary.svelte new file mode 100644 index 0000000000..952c986061 --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/Agent/summary.svelte @@ -0,0 +1,44 @@ + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/Agent/taskIcon.svelte b/AgentQnA/ui/svelte/src/lib/assets/Agent/taskIcon.svelte new file mode 100644 index 0000000000..737b7a8cbc --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/Agent/taskIcon.svelte @@ -0,0 +1,24 @@ + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/Agent/taskResult.svelte b/AgentQnA/ui/svelte/src/lib/assets/Agent/taskResult.svelte new file mode 100644 index 0000000000..f4b3833002 --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/Agent/taskResult.svelte @@ -0,0 +1,60 @@ + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/Agent/time.svelte b/AgentQnA/ui/svelte/src/lib/assets/Agent/time.svelte new file mode 100644 index 0000000000..140f544c82 --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/Agent/time.svelte @@ -0,0 +1,8 @@ + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/Agent/toolIcon.svelte b/AgentQnA/ui/svelte/src/lib/assets/Agent/toolIcon.svelte new file mode 100644 index 0000000000..342f5df387 --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/Agent/toolIcon.svelte @@ -0,0 +1,36 @@ + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/icons/ActiveDislikeButtonIcon.svelte b/AgentQnA/ui/svelte/src/lib/assets/icons/ActiveDislikeButtonIcon.svelte new file mode 100644 index 0000000000..b5c1ea06b0 --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/icons/ActiveDislikeButtonIcon.svelte @@ -0,0 +1,28 @@ + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/icons/ActiveLikeButtonIcon.svelte b/AgentQnA/ui/svelte/src/lib/assets/icons/ActiveLikeButtonIcon.svelte new file mode 100644 index 0000000000..b410c73386 --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/icons/ActiveLikeButtonIcon.svelte @@ -0,0 +1,24 @@ + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/icons/Folder.svelte b/AgentQnA/ui/svelte/src/lib/assets/icons/Folder.svelte new file mode 100644 index 0000000000..c338962899 --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/icons/Folder.svelte @@ -0,0 +1,28 @@ + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/icons/Knowledge.svelte b/AgentQnA/ui/svelte/src/lib/assets/icons/Knowledge.svelte new file mode 100644 index 0000000000..7b1593d757 --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/icons/Knowledge.svelte @@ -0,0 +1,38 @@ + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/icons/NoTranslate.svelte b/AgentQnA/ui/svelte/src/lib/assets/icons/NoTranslate.svelte new file mode 100644 index 0000000000..7f94dcef9c --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/icons/NoTranslate.svelte @@ -0,0 +1,32 @@ + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/icons/OldHelp.svelte b/AgentQnA/ui/svelte/src/lib/assets/icons/OldHelp.svelte new file mode 100644 index 0000000000..71c3cfb132 --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/icons/OldHelp.svelte @@ -0,0 +1,41 @@ + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/icons/Question.svelte b/AgentQnA/ui/svelte/src/lib/assets/icons/Question.svelte new file mode 100644 index 0000000000..c4f296e2c2 --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/icons/Question.svelte @@ -0,0 +1,6 @@ + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/icons/addKnowledge.svelte b/AgentQnA/ui/svelte/src/lib/assets/icons/addKnowledge.svelte new file mode 100644 index 0000000000..001de15b19 --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/icons/addKnowledge.svelte @@ -0,0 +1,92 @@ + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/icons/adminKnowledge.svelte b/AgentQnA/ui/svelte/src/lib/assets/icons/adminKnowledge.svelte new file mode 100644 index 0000000000..2ec562e6ae --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/icons/adminKnowledge.svelte @@ -0,0 +1,229 @@ + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/icons/arrow-path-icon.svelte b/AgentQnA/ui/svelte/src/lib/assets/icons/arrow-path-icon.svelte new file mode 100644 index 0000000000..cecb4b1273 --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/icons/arrow-path-icon.svelte @@ -0,0 +1,25 @@ + + + + + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/icons/assistant.svelte b/AgentQnA/ui/svelte/src/lib/assets/icons/assistant.svelte new file mode 100644 index 0000000000..73e947fa4b --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/icons/assistant.svelte @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/icons/chat-bubble-left-icon.svelte b/AgentQnA/ui/svelte/src/lib/assets/icons/chat-bubble-left-icon.svelte new file mode 100644 index 0000000000..9ea21455b0 --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/icons/chat-bubble-left-icon.svelte @@ -0,0 +1,25 @@ + + + + + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/icons/chat.svelte b/AgentQnA/ui/svelte/src/lib/assets/icons/chat.svelte new file mode 100644 index 0000000000..d62154acad --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/icons/chat.svelte @@ -0,0 +1,6 @@ + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/icons/check-icon.svelte b/AgentQnA/ui/svelte/src/lib/assets/icons/check-icon.svelte new file mode 100644 index 0000000000..5905fc0866 --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/icons/check-icon.svelte @@ -0,0 +1,25 @@ + + + + + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/icons/csv.svg b/AgentQnA/ui/svelte/src/lib/assets/icons/csv.svg new file mode 100644 index 0000000000..1e808ba6cf --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/icons/csv.svg @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/AgentQnA/ui/svelte/src/lib/assets/icons/dislikeButtonIcon.svelte b/AgentQnA/ui/svelte/src/lib/assets/icons/dislikeButtonIcon.svelte new file mode 100644 index 0000000000..2ae9f8ed84 --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/icons/dislikeButtonIcon.svelte @@ -0,0 +1,28 @@ + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/icons/download-directory.svelte b/AgentQnA/ui/svelte/src/lib/assets/icons/download-directory.svelte new file mode 100644 index 0000000000..d5ad5fb259 --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/icons/download-directory.svelte @@ -0,0 +1,16 @@ + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/icons/likeButtonIcon.svelte b/AgentQnA/ui/svelte/src/lib/assets/icons/likeButtonIcon.svelte new file mode 100644 index 0000000000..aaabc6c072 --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/icons/likeButtonIcon.svelte @@ -0,0 +1,24 @@ + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/icons/loading-button-spinner-icon.svelte b/AgentQnA/ui/svelte/src/lib/assets/icons/loading-button-spinner-icon.svelte new file mode 100644 index 0000000000..9be0ceb5b2 --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/icons/loading-button-spinner-icon.svelte @@ -0,0 +1,25 @@ + + + + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/icons/message-avatar.svelte b/AgentQnA/ui/svelte/src/lib/assets/icons/message-avatar.svelte new file mode 100644 index 0000000000..0cbe61c7ed --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/icons/message-avatar.svelte @@ -0,0 +1,17 @@ + + + + +{#if role === "Assistant"} + +{:else} + +{/if} diff --git a/AgentQnA/ui/svelte/src/lib/assets/icons/no-file.svelte b/AgentQnA/ui/svelte/src/lib/assets/icons/no-file.svelte new file mode 100644 index 0000000000..2e22f76cd0 --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/icons/no-file.svelte @@ -0,0 +1,37 @@ + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/icons/paper-airplane.svelte b/AgentQnA/ui/svelte/src/lib/assets/icons/paper-airplane.svelte new file mode 100644 index 0000000000..6ee8c19f1c --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/icons/paper-airplane.svelte @@ -0,0 +1,27 @@ + + + + + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/icons/paste-link.svelte b/AgentQnA/ui/svelte/src/lib/assets/icons/paste-link.svelte new file mode 100644 index 0000000000..79f5b4d351 --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/icons/paste-link.svelte @@ -0,0 +1,20 @@ + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/icons/pencil-square-icon.svelte b/AgentQnA/ui/svelte/src/lib/assets/icons/pencil-square-icon.svelte new file mode 100644 index 0000000000..3b55df66c1 --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/icons/pencil-square-icon.svelte @@ -0,0 +1,25 @@ + + + + + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/icons/plus-icon.svelte b/AgentQnA/ui/svelte/src/lib/assets/icons/plus-icon.svelte new file mode 100644 index 0000000000..e97c9d6fbb --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/icons/plus-icon.svelte @@ -0,0 +1,27 @@ + + + + + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/icons/portrait.svelte b/AgentQnA/ui/svelte/src/lib/assets/icons/portrait.svelte new file mode 100644 index 0000000000..2f9828b88c --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/icons/portrait.svelte @@ -0,0 +1,20 @@ + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/icons/translateIcon.svelte b/AgentQnA/ui/svelte/src/lib/assets/icons/translateIcon.svelte new file mode 100644 index 0000000000..47a2f38ea1 --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/icons/translateIcon.svelte @@ -0,0 +1,32 @@ + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/icons/trash-icon.svelte b/AgentQnA/ui/svelte/src/lib/assets/icons/trash-icon.svelte new file mode 100644 index 0000000000..363430c6d8 --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/icons/trash-icon.svelte @@ -0,0 +1,25 @@ + + + + + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/icons/upload-directory.svelte b/AgentQnA/ui/svelte/src/lib/assets/icons/upload-directory.svelte new file mode 100644 index 0000000000..2020d107f3 --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/icons/upload-directory.svelte @@ -0,0 +1,14 @@ + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/icons/upload-files.svelte b/AgentQnA/ui/svelte/src/lib/assets/icons/upload-files.svelte new file mode 100644 index 0000000000..59913cbedc --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/icons/upload-files.svelte @@ -0,0 +1,14 @@ + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/icons/upoadKnowledge.svelte b/AgentQnA/ui/svelte/src/lib/assets/icons/upoadKnowledge.svelte new file mode 100644 index 0000000000..a9f3f8f813 --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/icons/upoadKnowledge.svelte @@ -0,0 +1,6 @@ + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/icons/warning.svelte b/AgentQnA/ui/svelte/src/lib/assets/icons/warning.svelte new file mode 100644 index 0000000000..ba821a9a48 --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/icons/warning.svelte @@ -0,0 +1,22 @@ + + + diff --git a/AgentQnA/ui/svelte/src/lib/assets/icons/x-mark-icon.svelte b/AgentQnA/ui/svelte/src/lib/assets/icons/x-mark-icon.svelte new file mode 100644 index 0000000000..8df3b7a20d --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/assets/icons/x-mark-icon.svelte @@ -0,0 +1,20 @@ + + + diff --git a/AgentQnA/ui/svelte/src/lib/common/sse.d.ts b/AgentQnA/ui/svelte/src/lib/common/sse.d.ts new file mode 100644 index 0000000000..c3f8ed69d6 --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/common/sse.d.ts @@ -0,0 +1,15 @@ +// Copyright (C) 2025 Intel Corporation +// SPDX-License-Identifier: Apache-2.0 + +declare module "sse.js" { + export type SSEOptions = EventSourceInit & { + headers?: Record; + payload?: string; + method?: string; + }; + + export class SSE extends EventSource { + constructor(url: string | URL, sseOptions?: SSEOptions); + stream(): void; + } +} diff --git a/AgentQnA/ui/svelte/src/lib/common/timediff.ts b/AgentQnA/ui/svelte/src/lib/common/timediff.ts new file mode 100644 index 0000000000..09d191d8ae --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/common/timediff.ts @@ -0,0 +1,26 @@ +// Copyright (C) 2025 Intel Corporation +// SPDX-License-Identifier: Apache-2.0 + +export default function timeDifference(current: number, previous: number) { + const msPerMinute = 60 * 1000; + const msPerHour = msPerMinute * 60; + const msPerDay = msPerHour * 24; + const msPerMonth = msPerDay * 30; + const msPerYear = msPerDay * 365; + + const elapsed = current - previous; + + if (elapsed < msPerMinute) { + return Math.round(elapsed / 1000) + " seconds ago"; + } else if (elapsed < msPerHour) { + return Math.round(elapsed / msPerMinute) + " minutes ago"; + } else if (elapsed < msPerDay) { + return Math.round(elapsed / msPerHour) + " hours ago"; + } else if (elapsed < msPerMonth) { + return "approximately " + Math.round(elapsed / msPerDay) + " days ago"; + } else if (elapsed < msPerYear) { + return "approximately " + Math.round(elapsed / msPerMonth) + " months ago"; + } else { + return "approximately " + Math.round(elapsed / msPerYear) + " years ago"; + } +} diff --git a/AgentQnA/ui/svelte/src/lib/components/agent/loadingStatic.svelte b/AgentQnA/ui/svelte/src/lib/components/agent/loadingStatic.svelte new file mode 100644 index 0000000000..e100fce92a --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/components/agent/loadingStatic.svelte @@ -0,0 +1,16 @@ + + +
+
+
+
+
+
+
+
+
+
+
diff --git a/AgentQnA/ui/svelte/src/lib/components/chat/chat.svelte b/AgentQnA/ui/svelte/src/lib/components/chat/chat.svelte new file mode 100644 index 0000000000..b140e7d1b4 --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/components/chat/chat.svelte @@ -0,0 +1,239 @@ + + + + + + AI Agent + + + + +
+ {#if chatMessages.length === 0 && query === ""} + + {:else if showAgent || chatMessages.length > 0} +
+
+
+ +
+

+ {agentName} +

+ +

+ {agentDescripe} +

+
+
+
+
+
+ {#if loading} +
+ +
+ {:else} + + {/if} +
+ + + + +
+
+
+
+ {/if} +
diff --git a/AgentQnA/ui/svelte/src/lib/components/chat/history.svelte b/AgentQnA/ui/svelte/src/lib/components/chat/history.svelte new file mode 100644 index 0000000000..81d9c277f4 --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/components/chat/history.svelte @@ -0,0 +1,166 @@ + + + + + diff --git a/AgentQnA/ui/svelte/src/lib/components/chat/loadingAnimation.svelte b/AgentQnA/ui/svelte/src/lib/components/chat/loadingAnimation.svelte new file mode 100644 index 0000000000..5adffb1d0a --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/components/chat/loadingAnimation.svelte @@ -0,0 +1,37 @@ + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/AgentQnA/ui/svelte/src/lib/components/content.svelte b/AgentQnA/ui/svelte/src/lib/components/content.svelte new file mode 100644 index 0000000000..b09f31fadd --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/components/content.svelte @@ -0,0 +1,33 @@ + + + + +
+ + +
+ {#key currentChatID} + + {/key} +
+
diff --git a/AgentQnA/ui/svelte/src/lib/components/create.svelte b/AgentQnA/ui/svelte/src/lib/components/create.svelte new file mode 100644 index 0000000000..4d7595b1e4 --- /dev/null +++ b/AgentQnA/ui/svelte/src/lib/components/create.svelte @@ -0,0 +1,238 @@ + + + + +
+

+ + Create Agent +

+ +
+
+
+ +
+
+ +
+
+
+ +
+ +
+