Compare commits

...

127 Commits

Author SHA1 Message Date
WenjiaoYue
abafd5de20 Update UI of the three demos: faqGen, VisualQnA, and DocSum. (#1528)
Signed-off-by: WenjiaoYue <wenjiao.yue@intel.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-02-12 15:57:51 +08:00
Louie Tsai
970b869838 Add a new section to change LLM model such as deepseek based on validated model table in LLM microservice (#1501)
Signed-off-by: Tsai, Louie <louie.tsai@intel.com>
Co-authored-by: Wang, Kai Lawrence <109344418+wangkl2@users.noreply.github.com>
Co-authored-by: xiguiw <111278656+xiguiw@users.noreply.github.com>
2025-02-12 09:34:56 +08:00
XinyaoWa
87ff149f61 Remove vllm hpu triton version fix (#1515)
vllm-fork has fix triton version issue, remove duplicated code https://github.com/HabanaAI/vllm-fork/blob/habana_main/requirements-hpu.txt

Signed-off-by: Xinyao Wang <xinyao.wang@intel.com>
Co-authored-by: chen, suyue <suyue.chen@intel.com>
2025-02-12 09:24:38 +08:00
chen, suyue
c39a569ab2 Update workflow condition and env (#1522)
Signed-off-by: chensuyue <suyue.chen@intel.com>
2025-02-12 09:08:22 +08:00
chen, suyue
81b02bb947 Revert "HUGGINGFACEHUB_API_TOKEN environment is change to HF_TOKEN (#… (#1521)
Revert this PR since the test is not triggered properly due to the false merge of a WIP CI PR, 44a689b0bf, which block the CI test.

This change will be submitted in another PR.
2025-02-11 18:36:12 +08:00
Louie Tsai
47069ac70c fix a test script issue due to name change for telemetry yaml files (#1516)
Signed-off-by: Tsai, Louie <louie.tsai@intel.com>
2025-02-11 17:58:42 +08:00
chen, suyue
6ce7730863 Update CI/CD workflow (#1520)
1. Update auto commit account.
2. Fix test condition.

Signed-off-by: chensuyue <suyue.chen@intel.com>
Signed-off-by: ZePan110 <ze.pan@intel.com>
2025-02-11 17:48:37 +08:00
Louie Tsai
ad5523bac7 Enable OpenTelemtry Tracing for ChatQnA on Xeon and Gaudi by docker compose merge feature (#1488)
Signed-off-by: Louie, Tsai <louie.tsai@intel.com>
Signed-off-by: Tsai, Louie <louie.tsai@intel.com>
2025-02-10 22:58:50 -08:00
Louie Tsai
88a8235f21 Update README.md for Agent UI (#1495)
Signed-off-by: Tsai, Louie <louie.tsai@intel.com>
2025-02-10 22:22:55 -08:00
ZePan110
63ad850052 Update docker image list (#1513)
Signed-off-by: ZePan110 <ze.pan@intel.com>
2025-02-11 13:18:22 +08:00
ZePan110
9a0c547112 Fix publish issue (#1514)
Signed-off-by: ZePan110 <ze.pan@intel.com>
2025-02-11 11:43:00 +08:00
ZePan110
26a6da4123 Fix nightly triggered exceptions (#1505)
Signed-off-by: ZePan110 <ze.pan@intel.com>
2025-02-10 16:51:34 +08:00
xiguiw
45d5da2ddd HUGGINGFACEHUB_API_TOKEN environment is change to HF_TOKEN (#1503)
Signed-off-by: Wang, Xigui <xigui.wang@intel.com>
2025-02-09 20:33:06 +08:00
xiguiw
1b3291a1c8 Fix docker compose.yaml error (#1496)
Signed-off-by: Wang, Xigui <xigui.wang@intel.com>
2025-02-07 09:53:20 +08:00
ZePan110
7ac8cf517a Restore test code. (#1502)
Remove nightly test code.

Signed-off-by: ZePan110 <ze.pan@intel.com>
2025-02-07 09:50:21 +08:00
ZePan110
44a689b0bf Fix null value_file judgment (#1470)
Signed-off-by: ZePan110 <ze.pan@intel.com>
Co-authored-by: Malini Bhandaru <malini.bhandaru@intel.com>
2025-02-06 17:09:01 +08:00
xiguiw
388d3eb5c5 [Doc] Clean empty document (#1497)
Signed-off-by: Wang, Xigui <xigui.wang@intel.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-02-06 10:53:25 +08:00
chyundunovDatamonsters
ef9ad61440 DBQnA - Adding files to deploy DBQnA application on AMD GPU (#1273)
Signed-off-by: Chingis Yundunov <YundunovCN@sibedge.com>
Co-authored-by: Chingis Yundunov <YundunovCN@sibedge.com>
Co-authored-by: Malini Bhandaru <malini.bhandaru@intel.com>
2025-02-06 09:41:59 +08:00
Louie Tsai
4c41a5db83 Update README.md for OPEA OTLP tracing (#1406)
Signed-off-by: louie-tsai <louie.tsai@intel.com>
Signed-off-by: Tsai, Louie <louie.tsai@intel.com>
Co-authored-by: Eero Tamminen <eero.t.tamminen@intel.com>
2025-02-05 13:03:15 -08:00
Liang Lv
9adf7a6af0 Add support for latest deepseek models on Gaudi (#1491)
Signed-off-by: lvliang-intel <liang1.lv@intel.com>
2025-02-05 08:30:04 +08:00
chen, suyue
a4d028e8ea update image release workflow (#1303)
Signed-off-by: chensuyue <suyue.chen@intel.com>
Co-authored-by: Malini Bhandaru <malini.bhandaru@intel.com>
2025-02-03 17:07:07 -08:00
Omar Khleif
32d4f714fd Fix for NLTK related import failure (#1487)
Signed-off-by: okhleif-IL <omar.khleif@intel.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-02-01 10:04:37 +08:00
chyundunovDatamonsters
fdbc27a9b5 AvatarChatbot - Adding files to deploy AvatarChatbot application on AMD GPU (#1288)
Signed-off-by: Chingis Yundunov <YundunovCN@sibedge.com>
2025-01-27 11:30:52 +08:00
XinyuYe-Intel
5f4b1828a5 Added UT for rerank finetuning on Gaudi (#1472)
Signed-off-by: Ye, Xinyu <xinyu.ye@intel.com>
2025-01-27 11:24:05 +08:00
chyundunovDatamonsters
39abef8be8 SearchQnA App - Adding files to deploy SearchQnA application on AMD GPU (#1193)
Signed-off-by: Chingis Yundunov <YundunovCN@sibedge.com>
2025-01-27 10:58:55 +08:00
bjzhjing
ed163087ba Provide unified scalable deployment and benchmarking support for exam… (#1315)
Signed-off-by: Cathy Zhang <cathy.zhang@intel.com>
Signed-off-by: letonghan <letong.han@intel.com>
Co-authored-by: letonghan <letong.han@intel.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-01-24 22:27:49 +08:00
chen, suyue
259099d19f Remove kubernetes manifest related code and tests (#1466)
Remove deprecated kubernetes manifest related code and tests.
k8s implementation for those examples based on helm charts will target for next release.

Signed-off-by: chensuyue <suyue.chen@intel.com>
2025-01-24 15:23:12 +08:00
chen, suyue
9a1118730b Freeze the triton version in vllm-gaudi image to 3.1.0 (#1463)
The new triton version 3.2.0 can't work with vllm-gaudi. Freeze the triton version in vllm-gaudi image to 3.1.0.

Issue create for vllm-fork: HabanaAI/vllm-fork#732
Signed-off-by: chensuyue <suyue.chen@intel.com>
2025-01-24 09:50:59 +08:00
chen, suyue
ffce7068aa Fix image on push action due to manifest test remove (#1460)
1. Fix image on push action due to manifest test remove.
2. Fix helm test cd workflow get test matrix step.
Signed-off-by: chensuyue <suyue.chen@intel.com>
2025-01-23 14:30:09 +08:00
dolpher
9b0f98be8b Update ChatQnA helm chart README. (#1459)
Signed-off-by: Dolpher Du <dolpher.du@intel.com>
2025-01-23 10:54:39 +08:00
XinyuYe-Intel
f0fea7b706 Add docker compose yaml for text2image example (#1418)
Signed-off-by: Ye, Xinyu <xinyu.ye@intel.com>
2025-01-23 09:57:54 +08:00
Melanie Hart Buehler
1864fac978 Fixes MultimodalQnA dataprep endpoint and port in the UI (#1457)
Signed-off-by: Melanie Buehler <melanie.h.buehler@intel.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-01-22 17:11:09 -08:00
Lianhao Lu
94f71f2322 Update top level readme (#1458)
Add helm support of SeachQnA and Text2Image in top level readme.

Signed-off-by: Lianhao Lu <lianhao.lu@intel.com>
2025-01-23 09:07:33 +08:00
chen, suyue
6600c32a9b remove image build condition (#1456)
Test compose cd workflow depend on image build, so if we want to run both compose and helm charts deployment in cd workflow, this condition should be removed.

Signed-off-by: chensuyue <suyue.chen@intel.com>
2025-01-23 00:17:04 +08:00
Liang Lv
d953332f43 Fix multimodal docker image issue for MutimodalQnA on Gaudi (#1455)
Signed-off-by: lvliang-intel <liang1.lv@intel.com>
2025-01-23 00:12:06 +08:00
chyundunovDatamonsters
cbe5805f47 AgentQnA - add README file for deploy on ROCm (#1379)
Signed-off-by: Chingis Yundunov <YundunovCN@sibedge.com>
2025-01-22 21:57:15 +08:00
Ervin Castelino
27fdbcab58 [chore/chatqna] Missing protocol in curl command (#1447)
This PR fixes the missing protocol for in the curl command mentioned in chatqna readme for tei-embedding-service.
2025-01-22 21:41:47 +08:00
lkk
f07cf1dad2 Fix wrong vllm repo. (#1454)
Use vllm-fork for gaudi.

fix the issue #1451
2025-01-22 21:22:56 +08:00
dolpher
ee0e5cc8d9 Sync value files from GenAIInfra (#1428)
All gaudi values updated with extra flags.
Added helm support for 2 new examples Text2Image and SearchQnA. Minor fix for llm-uservice.

Signed-off-by: Dolpher Du <dolpher.du@intel.com>
2025-01-22 17:44:11 +08:00
chen, suyue
5c36443b11 Use local hub cache for AgentQnA test (#1450)
Use local hub cache for AgentQnA test to save workspace.

Signed-off-by: chensuyue <suyue.chen@intel.com>
2025-01-22 13:23:00 +08:00
Lianhao Lu
62cea74a23 CI: improve helm CI (#1452)
Signed-off-by: Lianhao Lu <lianhao.lu@intel.com>
2025-01-22 09:18:35 +08:00
WenjiaoYue
b721c256f9 Fix Domain Access Issue in Latest Vite Version (#1444)
Fix the restriction on using domain names when users are using the latest version of Vite

When users use the new version of Vite, the UI cannot be accessed via domain names due to Vite's new rules. This fix adds the corresponding parameters according to Vite's new rules, ensuring that users can access the frontend via domain names when building the UI.

Fixes #1441

Co-authored-by: WenjiaoYue <wenjiao.yue@intel.com>
2025-01-21 23:28:37 +08:00
chen, suyue
927698e23e Simplify git clone code in CI test (#1434)
1. Simplify git clone code in CI test.
2. Replace git clone branch in Dockerfile.

Signed-off-by: chensuyue <suyue.chen@intel.com>
2025-01-21 23:00:08 +08:00
ZePan110
c3e84b5ffa Fix test matrix for helm charts (#1449)
Signed-off-by: ZePan110 <ze.pan@intel.com>
2025-01-21 22:28:31 +08:00
ZePan110
6b2a041f25 Fix Helm-chart workflow issues. (#1448)
Fix matrix error issues and CD test files cannot be obtained.

Signed-off-by: ZePan110 <ze.pan@intel.com>
2025-01-21 21:48:57 +08:00
ZePan110
842f46326b Switch helm-chart test runs-on label. (#1446)
Switch helm-chart test runs-on label from ${{ inputs.hardware }} to k8s-${{ inputs.hardware }}.

Signed-off-by: ZePan110 <ze.pan@intel.com>
2025-01-21 18:07:03 +08:00
Wang, Kai Lawrence
284db982be [ROCm] Fix the hf-token setting for TGI and TEI in ChatQnA (#1432)
This PR is to correct the env variable names in chatqna example on ROCm platform passing to the docker container of TGI and TEI. For tgi, either HF_TOKEN and HUGGING_FACE_HUB_TOKEN could be parsed in TGI while HF_API_TOKEN can be parsed in TEI.

TGI: https://github.com/huggingface/text-generation-inference/blob/main/router/src/server.rs#L1700C1-L1702C15
TEI: https://github.com/huggingface/text-embeddings-inference/blob/main/router/src/main.rs#L112

Signed-off-by: Wang, Kai Lawrence <kai.lawrence.wang@intel.com>
2025-01-21 14:22:39 +08:00
ZePan110
fc96fe83e2 Fix CD workflow issue (#1443)
Fix the issue of CD workflow values_files errors.

Signed-off-by: ZePan110 <ze.pan@intel.com>
2025-01-21 11:54:12 +08:00
Hoong Tee, Yeoh
0316114c4b ProductivitySuite: Fix FaqGen Microservice CI test fail (#1437)
Change in FAQGen microservice for content-type header result in CI failure.

#1431
Signed-off-by: Yeoh, Hoong Tee <hoong.tee.yeoh@intel.com>
2025-01-21 10:23:35 +08:00
chen, suyue
0408453fa2 Unify the yaml name to fix the CD workflow (#1435)
Fix the issue in #1372

Signed-off-by: chensuyue <suyue.chen@intel.com>
2025-01-21 01:10:41 +08:00
XinyaoWa
d0cd0aaf53 Update GraphRAG to be compatible with latest component changes (#1427)
- Updated ENV VARS to align with recent changes in neo4j dataprep and retriever.
- upgraded tgi-gaudi image version
Related to GenAIComps repo issue #1025 (opea-project/GenAIComps#1025)

Original PR #1384
Original contributor is @rbrugaro

Signed-off-by: Xinyao Wang <xinyao.wang@intel.com>
Co-authored-by: Liang Lv <liang1.lv@intel.com>
2025-01-21 00:18:01 +08:00
chen, suyue
0ba3decb6b Simplify git clone code in CI test (#1422)
1. Simplify git clone code in CI test. 
2. Replace git clone branch in Dockerfile.

Signed-off-by: chensuyue <suyue.chen@intel.com>
2025-01-20 23:55:20 +08:00
Wang, Kai Lawrence
3d3ac59bfb [ChatQnA] Update the default LLM to llama3-8B on cpu/gpu/hpu (#1430)
Update the default LLM to llama3-8B on cpu/nvgpu/amdgpu/gaudi for docker-compose deployment to avoid the potential model serving issue or the missing chat-template issue using neural-chat-7b.

Slow serving issue of neural-chat-7b on ICX: #1420
Signed-off-by: Wang, Kai Lawrence <kai.lawrence.wang@intel.com>
2025-01-20 22:47:56 +08:00
Melanie Hart Buehler
f11ab458d8 MultimodalQnA image query, pdf, dynamic ports, and UI updates (#1381)
Per the proposed changes in this [RFC](https://github.com/opea-project/docs/blob/main/community/rfcs/24-10-02-GenAIExamples-001-Image_and_Audio_Support_in_MultimodalQnA.md)'s Phase 2 plan, this PR adds support for image queries, PDF ingestion and display, and dynamic ports. There are also some bug fixes. This PR goes with [this one in GenAIComps](https://github.com/opea-project/GenAIComps/pull/1134).

Signed-off-by: Melanie Buehler <melanie.h.buehler@intel.com>
Co-authored-by: Liang Lv <liang1.lv@intel.com>
2025-01-20 22:41:52 +08:00
ZePan110
f3562bef36 Add helm e2e test workflow (#1372)
Add both CICD workflow for helm charts values test. 

Signed-off-by: ZePan110 <ze.pan@intel.com>
2025-01-20 21:04:11 +08:00
chen, suyue
7a54064d65 remove Dockerfile.wrapper (#1429)
Remove Dockerfile.wrapper, it's not used anymore and no test cover this Dockerfile. So remove this Dockerfile to avoid regression.

Signed-off-by: chensuyue <suyue.chen@intel.com>
2025-01-20 20:49:18 +08:00
Liang Lv
0f7e5a37ac Adapt code for dataprep microservice refactor (#1408)
https://github.com/opea-project/GenAIComps/pull/1153

Signed-off-by: lvliang-intel <liang1.lv@intel.com>
2025-01-20 20:37:03 +08:00
xiguiw
2d5898244c Enchance health check in GenAIExample docker-compose (#1410)
Fix service launch issue

1. Update Gaudi TGI image from 2.0.6 to 2.3.1
2. Change the hpu-gaudi TGI health check condition.

Signed-off-by: Wang, Xigui <xigui.wang@intel.com>
2025-01-20 20:13:13 +08:00
Neo Zhang Jianyu
59722d2bc9 [Bug] Enhance the template (#1396)
Enhance the bug & feature template according to the issue #1002.
Co-authored-by: ZhangJianyu <zhang.jianyu@outlook.com>
2025-01-20 17:56:14 +08:00
chen, suyue
6bfd156573 Clean up test scripts and enhance git clone (#1417)
1. Clean up test code in scripts.
2. Simplify git clone code.
3. Replace git clone branch in Dockerfile.

Signed-off-by: chensuyue <suyue.chen@intel.com>
2025-01-20 16:34:28 +08:00
XinyuYe-Intel
528770a8d7 Add UT for Text2Image on Gaudi (#1424)
Add UT for Text2Image on Gaudi.

#1421
Signed-off-by: Ye, Xinyu <xinyu.ye@intel.com>
2025-01-20 16:01:35 +08:00
chen, suyue
239995da16 Update DocIndexRetriever CI test scripts (#1416)
1. Add image build condition.
2. Update single branch clone.

Signed-off-by: chensuyue <suyue.chen@intel.com>
2025-01-20 11:16:38 +08:00
chen, suyue
f65e8d8668 Add port 5000 checking and warning (#1414)
Port 5000 is used by local docker registry, please DO NOT use it in docker compose deployment!!!

Signed-off-by: chensuyue <suyue.chen@intel.com>
2025-01-20 09:09:31 +08:00
chen, suyue
a49a36cebc Add secrets OPENAI_API_KEY (#1412)
Add secrets OPENAI_API_KEY for AMD GPU CI test. 

Signed-off-by: chensuyue <suyue.chen@intel.com>
2025-01-19 19:39:45 +08:00
Wang, Kai Lawrence
742cb6ddd3 [ChatQnA] Switch to vLLM as default llm backend on Xeon (#1403)
Switching from TGI to vLLM as the default LLM serving backend on Xeon for the ChatQnA example to enhance the perf.

https://github.com/opea-project/GenAIExamples/issues/1213
Signed-off-by: Wang, Kai Lawrence <kai.lawrence.wang@intel.com>
2025-01-17 20:48:19 +08:00
Wang, Kai Lawrence
00e9da9ced [ChatQnA] Switch to vLLM as default llm backend on Gaudi (#1404)
Switching from TGI to vLLM as the default LLM serving backend on Gaudi for the ChatQnA example to enhance the perf. 

https://github.com/opea-project/GenAIExamples/issues/1213
Signed-off-by: Wang, Kai Lawrence <kai.lawrence.wang@intel.com>
2025-01-17 20:46:38 +08:00
chyundunovDatamonsters
277222a922 General README.md - add deploy on AMD info (#1409)
Signed-off-by: Chingis Yundunov <YundunovCN@sibedge.com>
Co-authored-by: Chingis Yundunov <YundunovCN@sibedge.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-01-17 20:26:59 +08:00
lkk
5c68effc9f update agent example for the GenAIComps changes. (#1407)
Update build.yaml and compose_vllm.yaml because of refactoring of GenAIComps.

Fix issue left by https://github.com/opea-project/GenAIExamples/pull/1353
2025-01-17 11:29:11 +08:00
XinyaoWa
39409d7f61 Align OpenAI API for FaqGen, DocSum (#1401)
Signed-off-by: Xinyao Wang <xinyao.wang@intel.com>
2025-01-17 11:19:35 +08:00
XinyaoWa
71e3c57366 Standardize name for LLM comps (#1402)
Update all the names for classes and files in llm comps to follow the standard format, related GenAIComps PR opea-project/GenAIComps#1162

Signed-off-by: Xinyao Wang <xinyao.wang@intel.com>
2025-01-16 23:10:27 +08:00
Letong Han
5ad24af2ee Fix Vectorestores Path Issue of Refactor (#1399)
Fix vectorestores path issue caused by refactor in PR opea-project/GenAIComps#1159.
Modify docker image name and file path in docker_images_list.md.

Signed-off-by: letonghan <letong.han@intel.com>
2025-01-16 19:50:59 +08:00
WenjiaoYue
3a9a24a51a Agent ui (#1389)
Signed-off-by: WenjiaoYue <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>
Co-authored-by: WenjiaoYue <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>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-01-16 18:47:46 +08:00
XinyaoWa
301b5e9a69 Fix vllm hpu to a stable release (#1398)
Signed-off-by: Xinyao Wang <xinyao.wang@intel.com>
2025-01-16 16:35:32 +08:00
Yao Qing
b4269d6c4f Modify the corresponding path based on the refactor of chathistory in GenAIComps. (#1397)
GenAIComps has refactored chathistory based on E-RAG code structure. Related path in GenAIExample have been modified.

Fix GenAIComps Issue https://github.com/opea-project/GenAIComps/issues/989 
Signed-off-by: Yao, Qing <qing.yao@intel.com>
2025-01-16 14:26:17 +08:00
Letong Han
4cabd55778 Refactor Retrievers related Examples (#1387)
Delete redundant retrievers docker image in docker_images_list.md.
Refactor Retrievers related Examples READMEs.
Change all of the comps/retrievers/xxx/xxx/Dockerfile path into comps/retrievers/src/Dockerfile.

Fix the Examples CI issues of PR opea-project/GenAIComps#1138.
Signed-off-by: letonghan <letong.han@intel.com>
2025-01-16 14:21:48 +08:00
xiguiw
698a06edbf [DOC] Fix document issue (#1395)
Signed-off-by: Wang, Xigui <xigui.wang@intel.com>
2025-01-16 11:30:07 +08:00
Eero Tamminen
0eae391fda Use staged builds to minimize final image sizes (#1031)
Staged image builds so that final images do not have redundant things like:
- Git tool and its deps
- Git repo history
- Test directories

Fixes: #225
Signed-off-by: Eero Tamminen <eero.t.tamminen@intel.com>
2025-01-16 11:14:47 +08:00
XinyaoWa
23d885bf60 Refactor vllm openvino to third parties (#1388)
vllm-openvino is a dependency for text generation comps, in GenAIComps PR opea-project/GenAIComps#1141 we move it to third-parties folder, update the path accordingly.

#998 
Signed-off-by: Xinyao Wang <xinyao.wang@intel.com>
2025-01-16 10:07:56 +08:00
minmin-intel
287f03a834 Add SQL agent to AgentQnA (#1370)
Signed-off-by: minmin-intel <minmin.hou@intel.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: chen, suyue <suyue.chen@intel.com>
2025-01-15 09:31:13 -08:00
ZePan110
a65a1e5598 Fix CI filter issue (#1393)
Signed-off-by: ZePan110 <ze.pan@intel.com>
2025-01-15 11:39:51 +08:00
Neo Zhang Jianyu
9812c2fb45 Update check-online-doc-build.yml (#1390) 2025-01-15 09:07:02 +08:00
XinyaoWa
7d218b9f36 Remove vllm hpu commit id limit (#1386)
Signed-off-by: Xinyao Wang <xinyao.wang@intel.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-01-14 11:05:32 +08:00
Zhu Yongbo
ba9892f8ee minor bug fix for EC-RAG (#1378)
Signed-off-by: Zhu, Yongbo <yongbo.zhu@intel.com>
2025-01-14 10:45:15 +08:00
XinyaoWa
ff1310b11a Refactor docsum (#1336)
Signed-off-by: Xinyao Wang <xinyao.wang@intel.com>
2025-01-13 15:49:48 +08:00
Sihan Chen
ca15fe9bdb Refactor lvm related examples (#1333) 2025-01-13 13:42:06 +08:00
XinyaoWa
f48bd8e74f Refactor Faqgen (#1323)
Signed-off-by: Xinyao Wang <xinyao.wang@intel.com>
2025-01-13 13:01:04 +08:00
Ying Hu
91ff520baa Update README.md for add K8S cluster link for Gaudi (#1380) 2025-01-13 09:33:58 +08:00
Liang Lv
3ca78867eb Update example code for embedding dependency moving to 3rd_party (#1368)
Signed-off-by: lvliang-intel <liang1.lv@intel.com>
2025-01-10 15:36:58 +08:00
Yao Qing
7a3dfa90ca Fix for animation dockerfile path. (#1371)
Signed-off-by: Yao, Qing <qing.yao@intel.com>
Co-authored-by: chen, suyue <suyue.chen@intel.com>
2025-01-10 11:44:57 +08:00
dolpher
c795ef2203 Add helm deployment instructions for GenAIExamples (#1373)
Add helm deployment instructions for ChatQnA, AgentQnA, AudioQnA, CodeTrans, DocSum, FaqGen and VisualQnA

Signed-off-by: Dolpher Du <dolpher.du@intel.com>
2025-01-10 09:55:31 +08:00
chen, suyue
99120f4cd2 Update action token for CI (#1374)
Signed-off-by: chensuyue <suyue.chen@intel.com>
2025-01-09 17:19:07 +08:00
XinyuYe-Intel
9fe480b010 Update dockerfile path for text2image (#1307)
Signed-off-by: Ye, Xinyu <xinyu.ye@intel.com>
2025-01-09 12:03:27 +08:00
XinyuYe-Intel
113281d073 Update path for finetuning (#1306)
Signed-off-by: Ye, Xinyu <xinyu.ye@intel.com>
Signed-off-by: chensuyue <suyue.chen@intel.com>
2025-01-09 12:01:59 +08:00
Liang Lv
370d6928c1 Update example code for prompt registry refactor (#1362)
Signed-off-by: lvliang-intel <liang1.lv@intel.com>
2025-01-09 11:59:32 +08:00
Liang Lv
2b26450bb9 Update docker file path for feedback management refactor (#1364)
Signed-off-by: lvliang-intel <liang1.lv@intel.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-01-09 11:21:25 +08:00
Louie Tsai
81022355a7 Enable OpenTelemetry Tracing for ChatQnA TGI serving on Gaudi (#1316)
Signed-off-by: Tsai, Louie <louie.tsai@intel.com>
2025-01-08 17:20:13 -08:00
Jaswanth Karani
ddacb7e86d fixed build issue (#1367) 2025-01-08 22:19:23 +08:00
Sihan Chen
5128c2d650 Refactor web retrievers links (#1338) 2025-01-08 16:19:50 +08:00
Liang Lv
b3c405a5f6 Adapt example code for guardrails refactor (#1360)
Signed-off-by: lvliang-intel <liang1.lv@intel.com>
Signed-off-by: chensuyue <suyue.chen@intel.com>
2025-01-08 14:35:23 +08:00
dolpher
5638075d65 Add helm deployment instructions for codegen (#1351)
Signed-off-by: Dolpher Du <dolpher.du@intel.com>
2025-01-08 13:20:32 +08:00
chen, suyue
23117871c2 remove chatqna-conversation-ui build in CI test (#1361)
Signed-off-by: chensuyue <suyue.chen@intel.com>
2025-01-08 12:09:33 +08:00
WenjiaoYue
9970605460 Adapt refactor comps (#1340)
Signed-off-by: WenjiaoYue
2025-01-08 10:36:24 +08:00
dolpher
28206311fd Disable GMC CI temporarily (#1359)
Signed-off-by: Dolpher Du <dolpher.du@intel.com>
2025-01-08 09:55:53 +08:00
ZePan110
589bfb2b7a Change license template from 2024 to 2025 (#1358)
Signed-off-by: ZePan110 <ze.pan@intel.com>
2025-01-07 19:29:55 +08:00
Pranav Singh
d2b49bbc82 [ChatQNA] Fix K8s Deployment for CPU/HPU (#1274)
Signed-off-by: Pranav Singh <pranav.singh@intel.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-01-07 13:45:09 +08:00
Ying Hu
41374d865b Update README.md for support matrix (#983)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: lvliang-intel <liang1.lv@intel.com>
Co-authored-by: xiguiw <111278656+xiguiw@users.noreply.github.com>
2025-01-07 11:45:42 +08:00
pre-commit-ci[bot]
2c624e1f5f [pre-commit.ci] pre-commit autoupdate (#1356)
Signed-off-by: Sun, Xuehao <xuehao.sun@intel.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-01-07 11:13:07 +08:00
Ying Hu
00241d01d2 Update README.md for quick start guide (#1355)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-01-07 10:08:16 +08:00
ZePan110
ed2b8ed983 Exclude dockerfile under tests and exclude check Dockerfile under tests. (#1354)
Signed-off-by: ZePan110 <ze.pan@intel.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-01-07 09:05:01 +08:00
lkk
a6e702e4d5 refine agent directories. (#1353) 2025-01-06 17:40:24 +08:00
ZePan110
aa5c91d7ee Check duplicated dockerfile (#1289)
Signed-off-by: ZePan110 <ze.pan@intel.com>
2025-01-06 17:30:12 +08:00
chen, suyue
b88d09e23f Fix code owner list (#1352)
Signed-off-by: chensuyue <suyue.chen@intel.com>
2025-01-06 14:00:13 +08:00
XinyaoWa
464e2d3125 Rename streaming to stream to align with OpenAI API (#1332)
Signed-off-by: Xinyao Wang <xinyao.wang@intel.com>
2025-01-06 13:25:55 +08:00
chen, suyue
1f29eca288 fix chatqna benchmark without rerank config issue (#1341)
Signed-off-by: chensuyue <suyue.chen@intel.com>
2025-01-06 09:16:20 +08:00
chen, suyue
1d7ac82979 Fix changed file detect issue (#1339)
Signed-off-by: chensuyue <suyue.chen@intel.com>
2025-01-03 11:24:02 +08:00
chen, suyue
5c7a5bd850 Update Code and README for GenAIComps Refactor (#1285)
Signed-off-by: lvliang-intel <liang1.lv@intel.com>
Signed-off-by: chensuyue <suyue.chen@intel.com>
Signed-off-by: Xinyao Wang <xinyao.wang@intel.com>
Signed-off-by: letonghan <letong.han@intel.com>
Signed-off-by: ZePan110 <ze.pan@intel.com>
Signed-off-by: WenjiaoYue <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>
2025-01-02 20:03:26 +08:00
Yao Qing
72f8079289 Refactor text2sql. (#1304)
Signed-off-by: Yao, Qing <qing.yao@intel.com>
Signed-off-by: chensuyue <suyue.chen@intel.com>
2025-01-02 10:52:21 +08:00
Zhu Yongbo
6169ea4921 add new feature and bug fix for EC-RAG (#1324)
Signed-off-by: Zhu, Yongbo <yongbo.zhu@intel.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-01-02 09:25:20 +08:00
chyundunovDatamonsters
75b0961a48 Translation App - Adding files to deploy Translation application on AMD GPU (#1191)
Signed-off-by: artem-astafev <a.astafev@datamonsters.com>
2025-01-02 09:19:44 +08:00
Sihan Chen
cc1d97f816 Refactor AudioQnA/MultiModalQnA/AvatarChatbot (#1310)
Signed-off-by: chensuyue <suyue.chen@intel.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: chensuyue <suyue.chen@intel.com>
2024-12-31 12:47:30 +08:00
xiguiw
250ffb8b66 [DOC] Fix docker build command in document (#1287)
Signed-off-by: Wang, Xigui <xigui.wang@intel.com>
2024-12-31 00:02:22 +08:00
ZePan110
1e9d111982 Block the manifest test first and restore it after the Refactor work is completed. (#1321)
Signed-off-by: ZePan110 <ze.pan@intel.com>
2024-12-30 16:24:19 +08:00
Ying Hu
597f17b979 Update set_env.sh to fix LOGFLAG warning (#1319) 2024-12-30 10:54:26 +08:00
Yao Qing
b9790d809b Refactoring animation. (#1301)
Signed-off-by: Yao, Qing <qing.yao@intel.com>
Signed-off-by: chensuyue <suyue.chen@intel.com>
2024-12-27 17:21:47 +08:00
Daniel De León
b27b48c488 Add microservice resources to no_proxy in the main ChatQnA README (#1269)
Signed-off-by: Daniel Deleon <daniel.de.leon@intel.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Abolfazl Shahbazi <12436063+ashahba@users.noreply.github.com>
2024-12-27 16:14:28 +08:00
Dina Suehiro Jones
0bf1d0be65 Bug fix to add missing BRIDGE_TOWER_EMBEDDING env var for MultimodalQnA (#1280)
Signed-off-by: dmsuehir <dina.s.jones@intel.com>
2024-12-26 23:30:57 -08:00
Sihan Chen
a01729a5c2 Refactor DocSum example (#1286)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2024-12-26 14:45:17 +08:00
650 changed files with 39982 additions and 27256 deletions

4
.github/CODEOWNERS vendored
View File

@@ -1,3 +1,4 @@
* liang1.lv@intel.com feng.tian@intel.com suyue.chen@intel.com
/.github/ suyue.chen@intel.com ze.pan@intel.com
/AgentQnA/ kaokao.lv@intel.com minmin.hou@intel.com
/AudioQnA/ sihan.chen@intel.com wenjiao.yue@intel.com
@@ -19,5 +20,4 @@
/Text2Image/ wenjiao.yue@intel.com xinyu.ye@intel.com
/Translation/ liang1.lv@intel.com sihan.chen@intel.com
/VideoQnA/ huiling.bao@intel.com xinyao.wang@intel.com
/VisualQnA/ liang1.lv@intel.com sihan.chen@intel.com
/*/ liang1.lv@intel.com feng.tian@intel.com suyue.chen@intel.com
/VisualQnA/ liang1.lv@intel.com sihan.chen@intel.com

View File

@@ -66,6 +66,7 @@ body:
options:
- label: Pull docker images from hub.docker.com
- label: Build docker images from source
- label: Other
validations:
required: true
@@ -74,10 +75,11 @@ body:
attributes:
label: Deploy method
options:
- label: Docker compose
- label: Docker
- label: Kubernetes
- label: Helm
- label: Docker Compose
- label: Kubernetes Helm Charts
- label: Kubernetes GMC
- label: Other
validations:
required: true
@@ -88,6 +90,7 @@ body:
options:
- Single Node
- Multiple Nodes
- Other
default: 0
validations:
required: true
@@ -127,3 +130,12 @@ body:
render: shell
validations:
required: false
- type: textarea
id: attachments
attributes:
label: Attachments
description: Attach any relevant files or screenshots.
validations:
required: false

View File

@@ -66,6 +66,7 @@ body:
options:
- Single Node
- Multiple Nodes
- Other
default: 0
validations:
required: true

View File

@@ -1,2 +1,2 @@
Copyright (C) 2024 Intel Corporation
Copyright (C) 2025 Intel Corporation
SPDX-License-Identifier: Apache-2.0

View File

@@ -28,7 +28,7 @@ on:
default: false
required: false
type: boolean
test_k8s:
test_helmchart:
default: false
required: false
type: boolean
@@ -74,15 +74,14 @@ jobs:
cd ${{ github.workspace }}/${{ inputs.example }}/docker_image_build
docker_compose_path=${{ github.workspace }}/${{ inputs.example }}/docker_image_build/build.yaml
if [[ $(grep -c "vllm:" ${docker_compose_path}) != 0 ]]; then
git clone https://github.com/vllm-project/vllm.git
git clone --depth 1 https://github.com/vllm-project/vllm.git
cd vllm && git rev-parse HEAD && cd ../
fi
if [[ $(grep -c "vllm-gaudi:" ${docker_compose_path}) != 0 ]]; then
git clone https://github.com/HabanaAI/vllm-fork.git
cd vllm-fork && git checkout 3c39626 && cd ../
git clone --depth 1 --branch v0.6.4.post2+Gaudi-1.19.0 https://github.com/HabanaAI/vllm-fork.git
fi
git clone https://github.com/opea-project/GenAIComps.git
cd GenAIComps && git checkout ${{ inputs.opea_branch }} && git rev-parse HEAD && cd ../
git clone --depth 1 --branch ${{ inputs.opea_branch }} https://github.com/opea-project/GenAIComps.git
cd GenAIComps && git rev-parse HEAD && cd ../
- name: Build Image
if: ${{ fromJSON(inputs.build) }}
@@ -110,16 +109,16 @@ jobs:
####################################################################################################
# K8S Test
# helmchart Test
####################################################################################################
test-k8s-manifest:
needs: [build-images]
if: ${{ fromJSON(inputs.test_k8s) }}
uses: ./.github/workflows/_manifest-e2e.yml
test-helmchart:
if: ${{ fromJSON(inputs.test_helmchart) }}
uses: ./.github/workflows/_helm-e2e.yml
with:
example: ${{ inputs.example }}
hardware: ${{ inputs.node }}
tag: ${{ inputs.tag }}
mode: "CD"
secrets: inherit
####################################################################################################

View File

@@ -60,9 +60,11 @@ jobs:
base_commit=$(git rev-parse HEAD~1) # push event
fi
merged_commit=$(git log -1 --format='%H')
echo "print all changed files..."
git diff --name-only ${base_commit} ${merged_commit}
changed_files="$(git diff --name-only ${base_commit} ${merged_commit} | \
grep -vE '${{ inputs.diff_excluded_files }}')" || true
echo "changed_files=$changed_files"
echo "filtered changed_files=$changed_files"
export changed_files=$changed_files
export test_mode=${{ inputs.test_mode }}
export WORKSPACE=${{ github.workspace }}

234
.github/workflows/_helm-e2e.yml vendored Normal file
View File

@@ -0,0 +1,234 @@
# Copyright (C) 2024 Intel Corporation
# SPDX-License-Identifier: Apache-2.0
name: Helm Chart E2e Test For Call
permissions: read-all
on:
workflow_call:
inputs:
example:
default: "chatqna"
required: true
type: string
description: "example to test, chatqna or common/asr"
hardware:
default: "xeon"
required: true
type: string
dockerhub:
default: "false"
required: false
type: string
description: "Set to true if you want to use released docker images at dockerhub. By default using internal docker registry."
mode:
default: "CD"
description: "Whether the test range is CI, CD or CICD"
required: false
type: string
tag:
default: "latest"
required: false
type: string
version:
default: "0-latest"
required: false
type: string
jobs:
get-test-case:
runs-on: ubuntu-latest
outputs:
value_files: ${{ steps.get-test-files.outputs.value_files }}
CHECKOUT_REF: ${{ steps.get-checkout-ref.outputs.CHECKOUT_REF }}
steps:
- name: Get checkout ref
id: get-checkout-ref
run: |
if [ "${{ github.event_name }}" == "pull_request" ] || [ "${{ github.event_name }}" == "pull_request_target" ]; then
CHECKOUT_REF=refs/pull/${{ github.event.number }}/merge
else
CHECKOUT_REF=${{ github.ref }}
fi
echo "CHECKOUT_REF=${CHECKOUT_REF}" >> $GITHUB_OUTPUT
echo "checkout ref ${CHECKOUT_REF}"
- name: Checkout Repo
uses: actions/checkout@v4
with:
ref: ${{ steps.get-checkout-ref.outputs.CHECKOUT_REF }}
fetch-depth: 0
- name: Get test Services
id: get-test-files
run: |
set -x
if [ "${{ inputs.mode }}" = "CI" ]; then
base_commit=${{ github.event.pull_request.base.sha }}
merged_commit=$(git log -1 --format='%H')
values_files=$(git diff --name-only ${base_commit} ${merged_commit} | \
grep "${{ inputs.example }}/kubernetes/helm" | \
grep "values.yaml" |\
sort -u)
echo $values_files
elif [ "${{ inputs.mode }}" = "CD" ]; then
values_files=$(ls ${{ inputs.example }}/kubernetes/helm/*values.yaml || true)
fi
value_files="["
for file in ${values_files}; do
if [ -f "$file" ]; then
filename=$(basename "$file")
if [[ "$filename" == *"gaudi"* ]]; then
if [[ "${{ inputs.hardware }}" == "gaudi" ]]; then
value_files="${value_files}\"${filename}\","
fi
elif [[ "$filename" == *"nv"* ]]; then
continue
else
if [[ "${{ inputs.hardware }}" == "xeon" ]]; then
value_files="${value_files}\"${filename}\","
fi
fi
fi
done
value_files="${value_files%,}]"
echo "value_files=${value_files}"
echo "value_files=${value_files}" >> $GITHUB_OUTPUT
helm-test:
needs: [get-test-case]
if: ${{ fromJSON(needs.get-test-case.outputs.value_files).length != 0 }}
strategy:
matrix:
value_file: ${{ fromJSON(needs.get-test-case.outputs.value_files) }}
fail-fast: false
runs-on: k8s-${{ inputs.hardware }}
continue-on-error: true
steps:
- name: Clean Up Working Directory
run: |
echo "value_file=${{ matrix.value_file }}"
sudo rm -rf ${{github.workspace}}/*
- name: Get checkout ref
id: get-checkout-ref
run: |
if [ "${{ github.event_name }}" == "pull_request" ] || [ "${{ github.event_name }}" == "pull_request_target" ]; then
CHECKOUT_REF=refs/pull/${{ github.event.number }}/merge
else
CHECKOUT_REF=${{ github.ref }}
fi
echo "CHECKOUT_REF=${CHECKOUT_REF}" >> $GITHUB_OUTPUT
echo "checkout ref ${CHECKOUT_REF}"
- name: Checkout Repo
uses: actions/checkout@v4
with:
ref: ${{ steps.get-checkout-ref.outputs.CHECKOUT_REF }}
fetch-depth: 0
- name: Set variables
env:
example: ${{ inputs.example }}
run: |
CHART_NAME="${example,,}" # CodeGen
echo "CHART_NAME=$CHART_NAME" >> $GITHUB_ENV
echo "RELEASE_NAME=${CHART_NAME}$(date +%Y%m%d%H%M%S)" >> $GITHUB_ENV
echo "NAMESPACE=${CHART_NAME}-$(date +%Y%m%d%H%M%S)" >> $GITHUB_ENV
echo "ROLLOUT_TIMEOUT_SECONDS=600s" >> $GITHUB_ENV
echo "TEST_TIMEOUT_SECONDS=600s" >> $GITHUB_ENV
echo "KUBECTL_TIMEOUT_SECONDS=60s" >> $GITHUB_ENV
echo "should_cleanup=false" >> $GITHUB_ENV
echo "skip_validate=false" >> $GITHUB_ENV
echo "CHART_FOLDER=${example}/kubernetes/helm" >> $GITHUB_ENV
- name: Helm install
id: install
env:
GOOGLE_CSE_ID: ${{ secrets.GOOGLE_CSE_ID }}
GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }}
HUGGINGFACEHUB_API_TOKEN: ${{ secrets.HUGGINGFACEHUB_API_TOKEN }}
HFTOKEN: ${{ secrets.HUGGINGFACEHUB_API_TOKEN }}
value_file: ${{ matrix.value_file }}
run: |
set -xe
echo "should_cleanup=true" >> $GITHUB_ENV
if [[ ! -f ${{ github.workspace }}/${{ env.CHART_FOLDER }}/${value_file} ]]; then
echo "No value file found, exiting test!"
echo "skip_validate=true" >> $GITHUB_ENV
echo "should_cleanup=false" >> $GITHUB_ENV
exit 0
fi
for img in `helm template -n $NAMESPACE $RELEASE_NAME oci://ghcr.io/opea-project/charts/${CHART_NAME} -f ${{ inputs.example }}/kubernetes/helm/${value_file} --version ${{ inputs.version }} | grep 'image:' | grep 'opea/' | awk '{print $2}' | xargs`;
do
# increase helm install wait for for vllm-gaudi case
if [[ $img == *"vllm-gaudi"* ]]; then
ROLLOUT_TIMEOUT_SECONDS=900s
fi
done
if ! helm install \
--create-namespace \
--namespace $NAMESPACE \
$RELEASE_NAME \
oci://ghcr.io/opea-project/charts/${CHART_NAME} \
--set global.HUGGINGFACEHUB_API_TOKEN=${HFTOKEN} \
--set global.modelUseHostPath=/home/sdp/.cache/huggingface/hub \
--set GOOGLE_API_KEY=${{ env.GOOGLE_API_KEY}} \
--set GOOGLE_CSE_ID=${{ env.GOOGLE_CSE_ID}} \
--set web-retriever.GOOGLE_API_KEY=${{ env.GOOGLE_API_KEY}} \
--set web-retriever.GOOGLE_CSE_ID=${{ env.GOOGLE_CSE_ID}} \
-f ${{ inputs.example }}/kubernetes/helm/${value_file} \
--version ${{ inputs.version }} \
--wait --timeout "$ROLLOUT_TIMEOUT_SECONDS"; then
echo "Failed to install chart ${{ inputs.example }}"
echo "skip_validate=true" >> $GITHUB_ENV
.github/workflows/scripts/k8s-utils.sh dump_pods_status $NAMESPACE
exit 1
fi
- name: Validate e2e test
if: always()
run: |
set -xe
if $skip_validate; then
echo "Skip validate"
else
LOG_PATH=/home/$(whoami)/helm-logs
chart=${{ env.CHART_NAME }}
helm test -n $NAMESPACE $RELEASE_NAME --logs --timeout "$TEST_TIMEOUT_SECONDS" | tee ${LOG_PATH}/charts-${chart}.log
exit_code=$?
if [ $exit_code -ne 0 ]; then
echo "Chart ${chart} test failed, please check the logs in ${LOG_PATH}!"
exit 1
fi
echo "Checking response results, make sure the output is reasonable. "
teststatus=false
if [[ -f $LOG_PATH/charts-${chart}.log ]] && \
[[ $(grep -c "^Phase:.*Failed" $LOG_PATH/charts-${chart}.log) != 0 ]]; then
teststatus=false
${{ github.workspace }}/.github/workflows/scripts/k8s-utils.sh dump_all_pod_logs $NAMESPACE
else
teststatus=true
fi
if [ $teststatus == false ]; then
echo "Response check failed, please check the logs in artifacts!"
exit 1
else
echo "Response check succeeded!"
exit 0
fi
fi
- name: Helm uninstall
if: always()
run: |
if $should_cleanup; then
helm uninstall $RELEASE_NAME --namespace $NAMESPACE
if ! kubectl delete ns $NAMESPACE --timeout=$KUBECTL_TIMEOUT_SECONDS; then
kubectl delete pods --namespace $NAMESPACE --force --grace-period=0 --all
kubectl delete ns $NAMESPACE --force --grace-period=0 --timeout=$KUBECTL_TIMEOUT_SECONDS
fi
fi

View File

@@ -1,185 +0,0 @@
# Copyright (C) 2024 Intel Corporation
# SPDX-License-Identifier: Apache-2.0
name: Single Kubernetes Manifest E2e Test For Call
on:
workflow_call:
inputs:
example:
default: "ChatQnA"
description: "The example to test on K8s"
required: true
type: string
hardware:
default: "xeon"
description: "Nodes to run the test, xeon or gaudi"
required: true
type: string
tag:
default: "latest"
description: "Tag to apply to images, default is latest"
required: false
type: string
jobs:
get-test-case:
runs-on: ubuntu-latest
outputs:
test_cases: ${{ steps.test-case-matrix.outputs.test_cases }}
CHECKOUT_REF: ${{ steps.get-checkout-ref.outputs.CHECKOUT_REF }}
steps:
- name: Get checkout ref
id: get-checkout-ref
run: |
if [ "${{ github.event_name }}" == "pull_request" ] || [ "${{ github.event_name }}" == "pull_request_target" ]; then
CHECKOUT_REF=refs/pull/${{ github.event.number }}/merge
else
CHECKOUT_REF=${{ github.ref }}
fi
echo "CHECKOUT_REF=${CHECKOUT_REF}" >> $GITHUB_OUTPUT
echo "checkout ref ${CHECKOUT_REF}"
- name: Checkout out Repo
uses: actions/checkout@v4
with:
ref: ${{ steps.get-checkout-ref.outputs.CHECKOUT_REF }}
fetch-depth: 0
- name: Get test matrix
shell: bash
id: test-case-matrix
run: |
example_l=$(echo ${{ inputs.example }} | tr '[:upper:]' '[:lower:]')
cd ${{ github.workspace }}/${{ inputs.example }}/tests
run_test_cases=""
default_test_case=$(find . -type f -name "test_manifest_on_${{ inputs.hardware }}.sh" | cut -d/ -f2)
if [ "$default_test_case" ]; then run_test_cases="$default_test_case"; fi
other_test_cases=$(find . -type f -name "test_manifest_*_on_${{ inputs.hardware }}.sh" | cut -d/ -f2)
echo "default_test_case=$default_test_case"
echo "other_test_cases=$other_test_cases"
if [ "${{ inputs.tag }}" == "ci" ]; then
base_commit=$(curl -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
"https://api.github.com/repos/opea-project/GenAIExamples/commits?sha=${{ github.event.pull_request.base.ref }}" | jq -r '.[0].sha')
merged_commit=$(git log -1 --format='%H')
changed_files="$(git diff --name-only ${base_commit} ${merged_commit} | grep -vE '${{ inputs.diff_excluded_files }}')" || true
fi
for test_case in $other_test_cases; do
if [ "${{ inputs.tag }}" == "ci" ]; then
flag=${test_case%_on_*}
flag=${flag#test_compose_}
if [[ $(printf '%s\n' "${changed_files[@]}" | grep ${{ inputs.example }} | grep ${flag}) ]]; then
run_test_cases="$run_test_cases $test_case"
fi
else
run_test_cases="$run_test_cases $test_case"
fi
done
test_cases=$(echo $run_test_cases | tr ' ' '\n' | sort -u | jq -R '.' | jq -sc '.')
echo "test_cases=$test_cases"
echo "test_cases=$test_cases" >> $GITHUB_OUTPUT
manifest-test:
needs: [get-test-case]
strategy:
matrix:
test_case: ${{ fromJSON(needs.get-test-case.outputs.test_cases) }}
fail-fast: false
runs-on: "k8s-${{ inputs.hardware }}"
continue-on-error: true
steps:
- name: Clean Up Working Directory
run: sudo rm -rf ${{github.workspace}}/*
- name: Get checkout ref
run: |
if [ "${{ github.event_name }}" == "pull_request" ] || [ "${{ github.event_name }}" == "pull_request_target" ]; then
echo "CHECKOUT_REF=refs/pull/${{ github.event.number }}/merge" >> $GITHUB_ENV
else
echo "CHECKOUT_REF=${{ github.ref }}" >> $GITHUB_ENV
fi
echo "checkout ref ${{ env.CHECKOUT_REF }}"
- name: Checkout out Repo
uses: actions/checkout@v4
with:
ref: ${{ env.CHECKOUT_REF }}
fetch-depth: 0
- name: Set variables
env:
test_case: ${{ matrix.test_case }}
run: |
echo "IMAGE_REPO=${OPEA_IMAGE_REPO}opea" >> $GITHUB_ENV
echo "IMAGE_TAG=${{ inputs.tag }}" >> $GITHUB_ENV
lower_example=$(echo "${{ inputs.example }}" | tr '[:upper:]' '[:lower:]')
name=$(echo "$test_case" | cut -d/ -f2 | cut -d'_' -f3- |cut -d'_' -f1 | grep -v 'on' | sed 's/^/-/')
echo "NAMESPACE=$lower_example$name-$(tr -dc a-z0-9 </dev/urandom | head -c 16)" >> $GITHUB_ENV
echo "ROLLOUT_TIMEOUT_SECONDS=1800s" >> $GITHUB_ENV
echo "KUBECTL_TIMEOUT_SECONDS=60s" >> $GITHUB_ENV
echo "continue_test=true" >> $GITHUB_ENV
echo "should_cleanup=false" >> $GITHUB_ENV
echo "skip_validate=true" >> $GITHUB_ENV
echo "NAMESPACE=$NAMESPACE"
- name: Kubectl install
id: install
env:
test_case: ${{ matrix.test_case }}
run: |
set -x
echo "test_case=$test_case"
if [[ ! -f ${{ github.workspace }}/${{ inputs.example }}/tests/${test_case} ]]; then
echo "No test script found, exist test!"
exit 0
else
${{ github.workspace }}/${{ inputs.example }}/tests/${test_case} init_${{ inputs.example }}
echo "should_cleanup=true" >> $GITHUB_ENV
kubectl create ns $NAMESPACE
${{ github.workspace }}/${{ inputs.example }}/tests/${test_case} install_${{ inputs.example }} $NAMESPACE
echo "Testing ${{ inputs.example }}, waiting for pod ready..."
if kubectl rollout status deployment --namespace "$NAMESPACE" --timeout "$ROLLOUT_TIMEOUT_SECONDS"; then
echo "Testing manifests ${{ inputs.example }}, waiting for pod ready done!"
echo "skip_validate=false" >> $GITHUB_ENV
else
echo "Timeout waiting for pods in namespace $NAMESPACE to be ready!"
.github/workflows/scripts/k8s-utils.sh dump_pods_status $NAMESPACE
exit 1
fi
sleep 60
fi
- name: Validate e2e test
if: always()
env:
test_case: ${{ matrix.test_case }}
run: |
if $skip_validate; then
echo "Skip validate"
else
if ${{ github.workspace }}/${{ inputs.example }}/tests/${test_case} validate_${{ inputs.example }} $NAMESPACE ; then
echo "Validate ${test_case} successful!"
else
echo "Validate ${test_case} failure!!!"
echo "Check the logs in 'Dump logs when e2e test failed' step!!!"
exit 1
fi
fi
- name: Dump logs when e2e test failed
if: failure()
run: |
.github/workflows/scripts/k8s-utils.sh dump_all_pod_logs $NAMESPACE
- name: Kubectl uninstall
if: always()
run: |
if $should_cleanup; then
if ! kubectl delete ns $NAMESPACE --timeout=$KUBECTL_TIMEOUT_SECONDS; then
kubectl delete pods --namespace $NAMESPACE --force --grace-period=0 --all
kubectl delete ns $NAMESPACE --force --grace-period=0 --timeout=$KUBECTL_TIMEOUT_SECONDS
fi
fi

View File

@@ -89,8 +89,9 @@ jobs:
echo "test_cases=$test_cases"
echo "test_cases=$test_cases" >> $GITHUB_OUTPUT
run-test:
compose-test:
needs: [get-test-case]
if: ${{ needs.get-test-case.outputs.test_cases != '' }}
strategy:
matrix:
test_case: ${{ fromJSON(needs.get-test-case.outputs.test_cases) }}
@@ -126,12 +127,14 @@ jobs:
shell: bash
env:
HUGGINGFACEHUB_API_TOKEN: ${{ secrets.HUGGINGFACEHUB_API_TOKEN }}
HF_TOKEN: ${{ secrets.HUGGINGFACEHUB_API_TOKEN }}
GOOGLE_CSE_ID: ${{ secrets.GOOGLE_CSE_ID }}
GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }}
PINECONE_KEY: ${{ secrets.PINECONE_KEY }}
PINECONE_KEY_LANGCHAIN_TEST: ${{ secrets.PINECONE_KEY_LANGCHAIN_TEST }}
SDK_BASE_URL: ${{ secrets.SDK_BASE_URL }}
SERVING_TOKEN: ${{ secrets.SERVING_TOKEN }}
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
IMAGE_REPO: ${{ inputs.registry }}
IMAGE_TAG: ${{ inputs.tag }}
example: ${{ inputs.example }}

View File

@@ -13,7 +13,7 @@ on:
jobs:
build:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
steps:
- name: Checkout

View File

@@ -41,9 +41,11 @@ jobs:
publish:
needs: [get-image-list]
if: ${{ needs.get-image-list.outputs.matrix != '' }}
strategy:
matrix:
image: ${{ fromJSON(needs.get-image-list.outputs.matrix) }}
fail-fast: false
runs-on: "docker-build-${{ inputs.node }}"
steps:
- uses: docker/login-action@v3.2.0

View File

@@ -47,6 +47,7 @@ jobs:
scan-docker:
needs: get-image-list
runs-on: "docker-build-${{ inputs.node }}"
if: ${{ fromJSON(needs.get-image-list.outputs.matrix).length != 0 }}
strategy:
matrix:
image: ${{ fromJson(needs.get-image-list.outputs.matrix) }}

View File

@@ -35,9 +35,9 @@ on:
description: 'Test examples with docker compose'
required: false
type: boolean
test_k8s:
default: false
description: 'Test examples with k8s'
test_helmchart:
default: true
description: 'Test examples with helm charts'
required: false
type: boolean
test_gmc:
@@ -76,7 +76,7 @@ jobs:
build-deploy-gmc:
needs: [get-test-matrix]
if: ${{ fromJSON(inputs.deploy_gmc) }}
if: ${{ fromJSON(inputs.deploy_gmc) }} && ${{ fromJSON(needs.get-test-matrix.outputs.nodes).length != 0 }}
strategy:
matrix:
node: ${{ fromJson(needs.get-test-matrix.outputs.nodes) }}
@@ -90,7 +90,7 @@ jobs:
run-examples:
needs: [get-test-matrix, build-deploy-gmc]
if: always()
if: always() && ${{ fromJSON(needs.get-test-matrix.outputs.examples).length != 0 }}
strategy:
matrix:
example: ${{ fromJson(needs.get-test-matrix.outputs.examples) }}
@@ -103,7 +103,7 @@ jobs:
tag: ${{ inputs.tag }}
build: ${{ fromJSON(inputs.build) }}
test_compose: ${{ fromJSON(inputs.test_compose) }}
test_k8s: ${{ fromJSON(inputs.test_k8s) }}
test_helmchart: ${{ fromJSON(inputs.test_helmchart) }}
test_gmc: ${{ fromJSON(inputs.test_gmc) }}
opea_branch: ${{ inputs.opea_branch }}
inject_commit: ${{ inputs.inject_commit }}

View File

@@ -25,9 +25,9 @@ jobs:
- name: Set up Git
run: |
git config --global user.name "NeuralChatBot"
git config --global user.email "grp_neural_chat_bot@intel.com"
git remote set-url origin https://NeuralChatBot:"${{ secrets.ACTION_TOKEN }}"@github.com/opea-project/GenAIExamples.git
git config --global user.name "CICD-at-OPEA"
git config --global user.email "CICD@opea.dev"
git remote set-url origin https://CICD-at-OPEA:"${{ secrets.ACTION_TOKEN }}"@github.com/opea-project/GenAIExamples.git
- name: Run script
run: |

View File

@@ -51,6 +51,7 @@ jobs:
image-build:
needs: get-test-matrix
if: ${{ needs.get-test-matrix.outputs.nodes != '' }}
strategy:
matrix:
node: ${{ fromJson(needs.get-test-matrix.outputs.nodes) }}

View File

@@ -33,6 +33,7 @@ jobs:
clean-up:
needs: get-build-matrix
if: ${{ fromJSON(needs.get-build-matrix.outputs.nodes).length != 0 }}
strategy:
matrix:
node: ${{ fromJson(needs.get-build-matrix.outputs.nodes) }}
@@ -47,6 +48,7 @@ jobs:
build:
needs: [get-build-matrix, clean-up]
if: ${{ fromJSON(needs.get-build-matrix.outputs.nodes).length != 0 }}
strategy:
matrix:
example: ${{ fromJson(needs.get-build-matrix.outputs.examples) }}

View File

@@ -34,6 +34,7 @@ jobs:
build-and-test:
needs: get-build-matrix
if: ${{ needs.get-build-matrix.outputs.examples_json != '' }}
strategy:
matrix:
example: ${{ fromJSON(needs.get-build-matrix.outputs.examples_json) }}
@@ -53,9 +54,11 @@ jobs:
publish:
needs: [get-build-matrix, get-image-list, build-and-test]
if: ${{ needs.get-image-list.outputs.matrix != '' }}
strategy:
matrix:
image: ${{ fromJSON(needs.get-image-list.outputs.matrix) }}
fail-fast: false
runs-on: "docker-build-gaudi"
steps:
- uses: docker/login-action@v3.2.0

76
.github/workflows/pr-chart-e2e.yml vendored Normal file
View File

@@ -0,0 +1,76 @@
# Copyright (C) 2024 Intel Corporation
# SPDX-License-Identifier: Apache-2.0
name: E2E Test with Helm Charts
on:
pull_request_target:
branches: [main]
types: [opened, reopened, ready_for_review, synchronize] # added `ready_for_review` since draft is skipped
paths:
- "!**.md"
- "**/helm/**"
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
job1:
name: Get-Test-Matrix
runs-on: ubuntu-latest
outputs:
run_matrix: ${{ steps.get-test-matrix.outputs.run_matrix }}
steps:
- name: Checkout Repo
uses: actions/checkout@v4
with:
ref: "refs/pull/${{ github.event.number }}/merge"
fetch-depth: 0
- name: Get Test Matrix
id: get-test-matrix
run: |
set -x
echo "base_commit=${{ github.event.pull_request.base.sha }}"
base_commit=${{ github.event.pull_request.base.sha }}
merged_commit=$(git log -1 --format='%H')
values_files=$(git diff --name-only ${base_commit} ${merged_commit} | \
grep "values.yaml" | \
sort -u ) #CodeGen/kubernetes/helm/cpu-values.yaml
run_matrix="{\"include\":["
for values_file in ${values_files}; do
if [ -f "$values_file" ]; then
valuefile=$(basename "$values_file") # cpu-values.yaml
example=$(echo "$values_file" | cut -d'/' -f1) # CodeGen
if [[ "$valuefile" == *"gaudi"* ]]; then
hardware="gaudi"
elif [[ "$valuefile" == *"nv"* ]]; then
continue
else
hardware="xeon"
fi
echo "example=${example}, hardware=${hardware}, valuefile=${valuefile}"
if [[ $(echo ${run_matrix} | grep -c "{\"example\":\"${example}\",\"hardware\":\"${hardware}\"},") == 0 ]]; then
run_matrix="${run_matrix}{\"example\":\"${example}\",\"hardware\":\"${hardware}\"},"
echo "------------------ add one values file ------------------"
fi
fi
done
run_matrix="${run_matrix%,}"
run_matrix=$run_matrix"]}"
echo "run_matrix="${run_matrix}""
echo "run_matrix="${run_matrix}"" >> $GITHUB_OUTPUT
helm-chart-test:
needs: [job1]
if: always() && ${{ fromJSON(needs.job1.outputs.run_matrix).length != 0 }}
uses: ./.github/workflows/_helm-e2e.yml
strategy:
matrix: ${{ fromJSON(needs.job1.outputs.run_matrix) }}
with:
example: ${{ matrix.example }}
hardware: ${{ matrix.hardware }}
mode: "CI"
secrets: inherit

View File

@@ -28,19 +28,19 @@ jobs:
if: ${{ !github.event.pull_request.draft }}
uses: ./.github/workflows/_get-test-matrix.yml
with:
diff_excluded_files: '.github|*.md|*.txt|kubernetes|manifest|gmc|assets|benchmark'
diff_excluded_files: '\.github|\.md|\.txt|kubernetes|gmc|assets|benchmark'
example-test:
needs: [get-test-matrix]
if: ${{ needs.get-test-matrix.outputs.run_matrix != '' }}
strategy:
matrix: ${{ fromJSON(needs.get-test-matrix.outputs.run_matrix) }}
fail-fast: false
if: ${{ !github.event.pull_request.draft }}
uses: ./.github/workflows/_run-docker-compose.yml
with:
registry: "opea"
tag: "ci"
example: ${{ matrix.example }}
hardware: ${{ matrix.hardware }}
diff_excluded_files: '.github|*.md|*.txt|kubernetes|manifest|gmc|assets|benchmark'
diff_excluded_files: '\.github|\.md|\.txt|kubernetes|gmc|assets|benchmark'
secrets: inherit

View File

@@ -21,7 +21,7 @@ jobs:
- name: Clone Repo GenAIComps
run: |
cd ..
git clone https://github.com/opea-project/GenAIComps.git
git clone --depth 1 https://github.com/opea-project/GenAIComps.git
- name: Check for Missing Dockerfile Paths in GenAIComps
run: |
@@ -60,7 +60,7 @@ jobs:
shopt -s globstar
no_add="FALSE"
cd ${{github.workspace}}
Dockerfiles=$(realpath $(find ./ -name '*Dockerfile*'))
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}')

View File

@@ -8,11 +8,10 @@ on:
branches: ["main", "*rc"]
types: [opened, reopened, ready_for_review, synchronize] # added `ready_for_review` since draft is skipped
paths:
- "**/kubernetes/**/gmc/**"
- "**/kubernetes/gmc/**"
- "**/tests/test_gmc**"
- "!**.md"
- "!**.txt"
- "!**/kubernetes/**/manifest/**"
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
@@ -22,7 +21,7 @@ jobs:
job1:
uses: ./.github/workflows/_get-test-matrix.yml
with:
diff_excluded_files: '.github|docker_compose|manifest|assets|*.md|*.txt'
diff_excluded_files: '\.github|docker_compose|assets|\.md|\.txt'
test_mode: "gmc"
gmc-test:

View File

@@ -1,42 +0,0 @@
# Copyright (C) 2024 Intel Corporation
# SPDX-License-Identifier: Apache-2.0
name: E2E test with manifests
on:
pull_request_target:
branches: ["main", "*rc"]
types: [opened, reopened, ready_for_review, synchronize] # added `ready_for_review` since draft is skipped
paths:
- "**/Dockerfile**"
- "**.py"
- "**/kubernetes/**/manifest/**"
- "**/tests/test_manifest**"
- "!**.md"
- "!**.txt"
- "!**/kubernetes/**/gmc/**"
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
job1:
uses: ./.github/workflows/_get-test-matrix.yml
with:
diff_excluded_files: '.github|docker_compose|gmc|assets|*.md|*.txt|benchmark'
test_mode: "manifest"
run-example:
needs: job1
strategy:
matrix: ${{ fromJSON(needs.job1.outputs.run_matrix) }}
fail-fast: false
uses: ./.github/workflows/_example-workflow.yml
with:
node: ${{ matrix.hardware }}
example: ${{ matrix.example }}
tag: ${{ github.event.pull_request.head.sha }}
test_k8s: true
secrets: inherit

View File

@@ -24,6 +24,7 @@ jobs:
image-build:
needs: job1
if: ${{ fromJSON(needs.job1.outputs.run_matrix).length != 0 }}
strategy:
matrix: ${{ fromJSON(needs.job1.outputs.run_matrix) }}
fail-fast: false

View File

@@ -40,7 +40,7 @@ jobs:
- name: Create Issue
uses: daisy-ycguo/create-issue-action@stable
with:
token: ${{ secrets.Infra_Issue_Token }}
token: ${{ secrets.ACTION_TOKEN }}
owner: opea-project
repo: GenAIInfra
title: |
@@ -54,6 +54,6 @@ jobs:
${{ env.changed_files }}
Please verify if the helm charts and manifests need to be changed accordingly.
Please verify if the helm charts need to be changed accordingly.
> This issue was created automatically by CI.

View File

@@ -9,6 +9,8 @@ import sys
import yaml
images = {}
dockerfiles = {}
errors = []
def check_docker_compose_build_definition(file_path):
@@ -30,18 +32,26 @@ def check_docker_compose_build_definition(file_path):
if not os.path.isfile(dockerfile):
# dockerfile not exists in the current repo context, assume it's in 3rd party context
dockerfile = os.path.normpath(os.path.join(context, build.get("dockerfile", "")))
item = {"file_path": file_path, "service": service, "dockerfile": dockerfile}
item = {"file_path": file_path, "service": service, "dockerfile": dockerfile, "image": image}
if image in images and dockerfile != images[image]["dockerfile"]:
print("ERROR: !!! Found Conflicts !!!")
print(f"Image: {image}, Dockerfile: {dockerfile}, defined in Service: {service}, File: {file_path}")
print(
errors.append(
f"ERROR: !!! Found Conflicts !!!\n"
f"Image: {image}, Dockerfile: {dockerfile}, defined in Service: {service}, File: {file_path}\n"
f"Image: {image}, Dockerfile: {images[image]['dockerfile']}, defined in Service: {images[image]['service']}, File: {images[image]['file_path']}"
)
sys.exit(1)
else:
# print(f"Add Image: {image} Dockerfile: {dockerfile}")
images[image] = item
if dockerfile in dockerfiles and image != dockerfiles[dockerfile]["image"]:
errors.append(
f"WARNING: Different images using the same Dockerfile\n"
f"Dockerfile: {dockerfile}, Image: {image}, defined in Service: {service}, File: {file_path}\n"
f"Dockerfile: {dockerfile}, Image: {dockerfiles[dockerfile]['image']}, defined in Service: {dockerfiles[dockerfile]['service']}, File: {dockerfiles[dockerfile]['file_path']}"
)
else:
dockerfiles[dockerfile] = item
def parse_arg():
parser = argparse.ArgumentParser(
@@ -56,6 +66,12 @@ def main():
for file_path in args.files:
check_docker_compose_build_definition(file_path)
print("SUCCESS: No Conlicts Found.")
if errors:
for error in errors:
print(error)
sys.exit(1)
else:
print("SUCCESS: No Conflicts Found.")
return 0

View File

@@ -26,14 +26,20 @@ case "$1" in
echo "Release all ports used by the services in $yaml_file ..."
pip install jq yq
ports=$(yq '.services[].ports[] | split(":")[0]' $yaml_file | grep -o '[0-9a-zA-Z_-]\+')
echo "All ports list..."
echo "$ports"
for port in $ports; do
if [[ $port =~ [a-zA-Z_-] ]]; then
port=$(grep -E "export $port=" tests/$test_case | cut -d'=' -f2)
fi
echo $port
cid=$(docker ps --filter "publish=${port}" --format "{{.ID}}")
if [[ ! -z "$cid" ]]; then docker stop $cid && docker rm $cid && sleep 1s; fi
if [[ $port =~ [0-9] ]]; then
if [[ $port == 5000 ]]; then
echo "Error: Port 5000 is used by local docker registry, please DO NOT use it in docker compose deployment!!!"
exit 1
fi
cid=$(docker ps --filter "publish=${port}" --format "{{.ID}}")
if [[ ! -z "$cid" ]]; then docker stop $cid && docker rm $cid && echo "release $port"; fi
fi
done
;;
*)

View File

@@ -17,15 +17,15 @@ for example in ${examples}; do
cd tests
ls -l
if [[ "$test_mode" == "docker_image_build" ]]; then
find_name="test_manifest_on_*.sh"
hardware_list="gaudi xeon"
else
find_name="test_${test_mode}*_on_*.sh"
hardware_list=$(find . -type f -name "${find_name}" | cut -d/ -f2 | cut -d. -f1 | awk -F'_on_' '{print $2}'| sort -u)
fi
hardware_list=$(find . -type f -name "${find_name}" | cut -d/ -f2 | cut -d. -f1 | awk -F'_on_' '{print $2}'| sort -u)
echo -e "Test supported hardware list: \n${hardware_list}"
run_hardware=""
if [[ $(printf '%s\n' "${changed_files[@]}" | grep ${example} | cut -d'/' -f2 | grep -E '*.py|Dockerfile*|ui|docker_image_build' ) ]]; then
if [[ $(printf '%s\n' "${changed_files[@]}" | grep ${example} | cut -d'/' -f2 | grep -E '\.py|Dockerfile*|ui|docker_image_build' ) ]]; then
# run test on all hardware if megaservice or ui code change
run_hardware=$hardware_list
else

View File

@@ -2,7 +2,7 @@
# Copyright (C) 2024 Intel Corporation
# SPDX-License-Identifier: Apache-2.0
#set -xe
set -e
function dump_pod_log() {
pod_name=$1
@@ -12,7 +12,7 @@ function dump_pod_log() {
kubectl describe pod $pod_name -n $namespace
echo "-----------------------------------"
echo "#kubectl logs $pod_name -n $namespace"
kubectl logs $pod_name -n $namespace
kubectl logs $pod_name -n $namespace --all-containers --prefix=true
echo "-----------------------------------"
}
@@ -44,8 +44,13 @@ function dump_pods_status() {
function dump_all_pod_logs() {
namespace=$1
echo "------SUMMARY of POD STATUS in NS $namespace------"
kubectl get pods -n $namespace -o wide
echo "------SUMMARY of SVC STATUS in NS $namespace------"
kubectl get services -n $namespace -o wide
echo "------SUMMARY of endpoint STATUS in NS $namespace------"
kubectl get endpoints -n $namespace -o wide
echo "-----DUMP POD STATUS AND LOG in NS $namespace------"
pods=$(kubectl get pods -n $namespace -o jsonpath='{.items[*].metadata.name}')
for pod_name in $pods
do

View File

@@ -16,8 +16,8 @@ jobs:
freeze-images:
runs-on: ubuntu-latest
env:
USER_NAME: "NeuralChatBot"
USER_EMAIL: "grp_neural_chat_bot@intel.com"
USER_NAME: "CICD-at-OPEA"
USER_EMAIL: "CICD@opea.dev"
BRANCH_NAME: "update_images_tag"
steps:
- name: Checkout repository

View File

@@ -7,7 +7,7 @@ ci:
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.6.0
rev: v5.0.0
hooks:
- id: end-of-file-fixer
files: (.*\.(py|md|rst|yaml|yml|json|ts|js|html|svelte|sh))$
@@ -100,18 +100,18 @@ repos:
- prettier@3.2.5
- repo: https://github.com/psf/black.git
rev: 24.4.2
rev: 24.10.0
hooks:
- id: black
files: (.*\.py)$
- repo: https://github.com/asottile/blacken-docs
rev: 1.18.0
rev: 1.19.1
hooks:
- id: blacken-docs
args: [--line-length=120, --skip-errors]
additional_dependencies:
- black==24.4.2
- black==24.10.0
- repo: https://github.com/codespell-project/codespell
rev: v2.3.0
@@ -122,7 +122,7 @@ repos:
- tomli
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.5.0
rev: v0.8.6
hooks:
- id: ruff
args: [--fix, --exit-non-zero-on-fix, --no-cache]

View File

@@ -2,8 +2,8 @@
## 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)
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 two worker agents to gather information and come up with answers. The worker RAG agent uses the retrieval tool to retrieve relevant documents from the knowledge base (a vector database). The worker SQL agent retrieve relevant data from the SQL database. Although not included in this example, but other tools such as a web search tool or a knowledge graph query tool can be used by the supervisor agent to gather information from additional sources.
![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.
@@ -38,6 +38,7 @@ flowchart LR
end
AG_REACT([Agent MicroService - react]):::blue
AG_RAG([Agent MicroService - rag]):::blue
AG_SQL([Agent MicroService - sql]):::blue
LLM_gen{{LLM Service <br>}}
DP([Data Preparation MicroService]):::blue
TEI_RER{{Reranking service<br>}}
@@ -51,6 +52,7 @@ flowchart LR
direction LR
a[User Input Query] --> AG_REACT
AG_REACT --> AG_RAG
AG_REACT --> AG_SQL
AG_RAG --> DocIndexRetriever-MegaService
EM ==> RET
RET ==> RER
@@ -59,6 +61,7 @@ flowchart LR
%% Embedding service flow
direction LR
AG_RAG <-.-> LLM_gen
AG_SQL <-.-> LLM_gen
AG_REACT <-.-> LLM_gen
EM <-.-> TEI_EM
RET <-.-> R_RET
@@ -75,11 +78,11 @@ flowchart LR
### Why Agent for question answering?
1. Improve relevancy of retrieved context.
Agent can rephrase user queries, decompose user queries, and iterate to get the most relevant context for answering user's questions. Compared to conventional RAG, RAG agent can significantly improve the correctness and relevancy of the answer.
2. Use tools to get additional knowledge.
For example, knowledge graphs and SQL databases can be exposed as APIs for Agents to gather knowledge that may be missing in the retrieval vector database.
3. Hierarchical agent can further improve performance.
Expert worker agents, such as retrieval agent, knowledge graph agent, SQL agent, etc., can provide high-quality output for different aspects of a complex query, and the supervisor agent can aggregate the information together to provide a comprehensive answer.
RAG agent can rephrase user queries, decompose user queries, and iterate to get the most relevant context for answering user's questions. Compared to conventional RAG, RAG agent can significantly improve the correctness and relevancy of the answer.
2. Expand scope of the agent.
The supervisor agent can interact with multiple worker agents that specialize in different domains with different skills (e.g., retrieve documents, write SQL queries, etc.), and thus can answer questions in multiple domains.
3. Hierarchical multi-agents can improve performance.
Expert worker agents, such as RAG agent and SQL agent, can provide high-quality output for different aspects of a complex query, and the supervisor agent can aggregate the information together to provide a comprehensive answer. If we only use one agent and provide all the tools to this single agent, it may get overwhelmed and not able to provide accurate answers.
## Deployment with docker
@@ -100,7 +103,7 @@ Then build the agent docker image. Both the supervisor agent and the worker agen
```
cd GenAIComps
docker build -t opea/agent-langchain:latest --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy -f comps/agent/langchain/Dockerfile .
docker build -t opea/agent:latest --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy -f comps/agent/src/Dockerfile .
```
2. Set up environment for this example </br>
@@ -148,28 +151,55 @@ docker build -t opea/agent-langchain:latest --build-arg https_proxy=$https_proxy
bash run_ingest_data.sh
```
4. Launch other tools. </br>
4. Prepare SQL database
In this example, we will use the Chinook SQLite database. Run the commands below.
```
# Download data
cd $WORKDIR
git clone https://github.com/lerocha/chinook-database.git
cp chinook-database/ChinookDatabase/DataSources/Chinook_Sqlite.sqlite $WORKDIR/GenAIExamples/AgentQnA/tests/
```
5. Launch other tools. </br>
In this example, we will use some of the mock APIs provided in the Meta CRAG KDD Challenge to demonstrate the benefits of gaining additional context from mock knowledge graphs.
```
docker run -d -p=8080:8000 docker.io/aicrowd/kdd-cup-24-crag-mock-api:v0
```
5. Launch agent services</br>
We provide two options for `llm_engine` of the agents: 1. open-source LLMs, 2. OpenAI models via API calls.
Deploy it on Gaudi or Xeon respectively
6. Launch multi-agent system. </br>
We provide two options for `llm_engine` of the agents: 1. open-source LLMs on Intel Gaudi2, 2. OpenAI models via API calls.
::::{tab-set}
:::{tab-item} Gaudi
:sync: Gaudi
To use open-source LLMs on Gaudi2, run commands below.
On Gaudi2 we will serve `meta-llama/Meta-Llama-3.1-70B-Instruct` using vllm.
First build vllm-gaudi docker image.
```bash
cd $WORKDIR
git clone https://github.com/vllm-project/vllm.git
cd ./vllm
git checkout v0.6.6
docker build --no-cache -f Dockerfile.hpu -t opea/vllm-gaudi:latest --shm-size=128g . --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy
```
cd $WORKDIR/GenAIExamples/AgentQnA/docker_compose/intel/hpu/gaudi
bash launch_tgi_gaudi.sh
bash launch_agent_service_tgi_gaudi.sh
Then launch vllm on Gaudi2 with the command below.
```bash
vllm_port=8086
model="meta-llama/Meta-Llama-3.1-70B-Instruct"
docker run -d --runtime=habana --rm --name "vllm-gaudi-server" -e HABANA_VISIBLE_DEVICES=0,1,2,3 -p $vllm_port:8000 -v $vllm_volume:/data -e HF_TOKEN=$HF_TOKEN -e HUGGING_FACE_HUB_TOKEN=$HF_TOKEN -e HF_HOME=/data -e OMPI_MCA_btl_vader_single_copy_mechanism=none -e PT_HPU_ENABLE_LAZY_COLLECTIVES=true -e http_proxy=$http_proxy -e https_proxy=$https_proxy -e no_proxy=$no_proxy -e VLLM_SKIP_WARMUP=true --cap-add=sys_nice --ipc=host opea/vllm-gaudi:latest --model ${model} --max-seq-len-to-capture 16384 --tensor-parallel-size 4
```
Then launch Agent microservices.
```bash
cd $WORKDIR/GenAIExamples/AgentQnA/docker_compose/intel/hpu/gaudi/
bash launch_agent_service_gaudi.sh
```
:::
@@ -179,6 +209,7 @@ docker build -t opea/agent-langchain:latest --build-arg https_proxy=$https_proxy
To use OpenAI models, run commands below.
```
export OPENAI_API_KEY=<your-openai-key>
cd $WORKDIR/GenAIExamples/AgentQnA/docker_compose/intel/cpu/xeon
bash launch_agent_service_openai.sh
```
@@ -186,13 +217,20 @@ docker build -t opea/agent-langchain:latest --build-arg https_proxy=$https_proxy
:::
::::
## Deploy using Helm Chart
Refer to the [AgentQnA helm chart](./kubernetes/helm/README.md) for instructions on deploying AgentQnA on Kubernetes.
## Validate services
First look at logs of the agent docker containers:
```
# worker agent
# worker RAG agent
docker logs rag-agent-endpoint
# worker SQL agent
docker logs sql-agent-endpoint
```
```
@@ -202,22 +240,36 @@ docker logs react-agent-endpoint
You should see something like "HTTP server setup successful" if the docker containers are started successfully.</p>
Second, validate worker agent:
Second, validate worker RAG agent:
```
curl http://${host_ip}:9095/v1/chat/completions -X POST -H "Content-Type: application/json" -d '{
"query": "Most recent album by Taylor Swift"
"messages": "Michael Jackson song Thriller"
}'
```
Third, validate supervisor agent:
Third, validate worker SQL agent:
```
curl http://${host_ip}:9096/v1/chat/completions -X POST -H "Content-Type: application/json" -d '{
"messages": "How many employees are in the company"
}'
```
Finally, validate supervisor agent:
```
curl http://${host_ip}:9090/v1/chat/completions -X POST -H "Content-Type: application/json" -d '{
"query": "Most recent album by Taylor Swift"
"messages": "How many albums does Iron Maiden have?"
}'
```
## Deploy AgentQnA UI
The AgentQnA UI can be deployed locally or using Docker.
For detailed instructions on deploying AgentQnA UI, refer to the [AgentQnA UI Guide](./ui/svelte/README.md).
## How to register your own tools with agent
You can take a look at the tools yaml and python files in this example. For more details, please refer to the "Provide your own tools" section in the instructions [here](https://github.com/opea-project/GenAIComps/tree/main/comps/agent/langchain/README.md).
You can take a look at the tools yaml and python files in this example. For more details, please refer to the "Provide your own tools" section in the instructions [here](https://github.com/opea-project/GenAIComps/tree/main/comps/agent/src/README.md).

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 207 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

View File

@@ -0,0 +1,101 @@
# Single node on-prem deployment with Docker Compose on AMD GPU
This example showcases a hierarchical multi-agent system for question-answering applications. We deploy the example on Xeon. For LLMs, we use OpenAI models via API calls. For instructions on using open-source LLMs, please refer to the deployment guide [here](../../../../README.md).
## Deployment with docker
1. First, clone this repo.
```
export WORKDIR=<your-work-directory>
cd $WORKDIR
git clone https://github.com/opea-project/GenAIExamples.git
```
2. Set up environment for this example </br>
```
# Example: host_ip="192.168.1.1" or export host_ip="External_Public_IP"
export host_ip=$(hostname -I | awk '{print $1}')
# if you are in a proxy environment, also set the proxy-related environment variables
export http_proxy="Your_HTTP_Proxy"
export https_proxy="Your_HTTPs_Proxy"
# Example: no_proxy="localhost, 127.0.0.1, 192.168.1.1"
export no_proxy="Your_No_Proxy"
export TOOLSET_PATH=$WORKDIR/GenAIExamples/AgentQnA/tools/
#OPANAI_API_KEY if you want to use OpenAI models
export OPENAI_API_KEY=<your-openai-key>
# Set AMD GPU settings
export AGENTQNA_CARD_ID="card1"
export AGENTQNA_RENDER_ID="renderD136"
```
3. Deploy the retrieval tool (i.e., DocIndexRetriever mega-service)
First, launch the mega-service.
```
cd $WORKDIR/GenAIExamples/AgentQnA/retrieval_tool
bash launch_retrieval_tool.sh
```
Then, ingest data into the vector database. Here we provide an example. You can ingest your own data.
```
bash run_ingest_data.sh
```
4. Launch Tool service
In this example, we will use some of the mock APIs provided in the Meta CRAG KDD Challenge to demonstrate the benefits of gaining additional context from mock knowledge graphs.
```
docker run -d -p=8080:8000 docker.io/aicrowd/kdd-cup-24-crag-mock-api:v0
```
5. Launch `Agent` service
```
cd $WORKDIR/GenAIExamples/AgentQnA/docker_compose/amd/gpu/rocm
bash launch_agent_service_tgi_rocm.sh
```
6. [Optional] Build `Agent` docker image if pulling images failed.
```
git clone https://github.com/opea-project/GenAIComps.git
cd GenAIComps
docker build -t opea/agent:latest -f comps/agent/src/Dockerfile .
```
## Validate services
First look at logs of the agent docker containers:
```
# worker agent
docker logs rag-agent-endpoint
```
```
# supervisor agent
docker logs react-agent-endpoint
```
You should see something like "HTTP server setup successful" if the docker containers are started successfully.</p>
Second, validate worker agent:
```
curl http://${host_ip}:9095/v1/chat/completions -X POST -H "Content-Type: application/json" -d '{
"query": "Most recent album by Taylor Swift"
}'
```
Third, validate supervisor agent:
```
curl http://${host_ip}:9090/v1/chat/completions -X POST -H "Content-Type: application/json" -d '{
"query": "Most recent album by Taylor Swift"
}'
```
## How to register your own tools with agent
You can take a look at the tools yaml and python files in this example. For more details, please refer to the "Provide your own tools" section in the instructions [here](https://github.com/opea-project/GenAIComps/tree/main/comps/agent/src/README.md).

View File

@@ -31,7 +31,7 @@ services:
command: --model-id ${LLM_MODEL_ID} --max-input-length 4096 --max-total-tokens 8192
worker-rag-agent:
image: opea/agent-langchain:latest
image: opea/agent:latest
container_name: rag-agent-endpoint
volumes:
# - ${WORKDIR}/GenAIExamples/AgentQnA/docker_image_build/GenAIComps/comps/agent/langchain/:/home/user/comps/agent/langchain/
@@ -49,7 +49,7 @@ services:
model: ${LLM_MODEL_ID}
temperature: ${temperature}
max_new_tokens: ${max_new_tokens}
streaming: false
stream: false
tools: /home/user/tools/worker_agent_tools.yaml
require_human_feedback: false
RETRIEVAL_TOOL_URL: ${RETRIEVAL_TOOL_URL}
@@ -62,7 +62,7 @@ services:
port: 9095
supervisor-react-agent:
image: opea/agent-langchain:latest
image: opea/agent:latest
container_name: react-agent-endpoint
depends_on:
- agent-tgi-server
@@ -83,7 +83,7 @@ services:
model: ${LLM_MODEL_ID}
temperature: ${temperature}
max_new_tokens: ${max_new_tokens}
streaming: false
stream: false
tools: /home/user/tools/supervisor_agent_tools.yaml
require_human_feedback: false
no_proxy: ${no_proxy}

View File

@@ -40,8 +40,8 @@ export EMBEDDING_SERVICE_HOST_IP=${host_ip}
export RETRIEVER_SERVICE_HOST_IP=${host_ip}
export RERANK_SERVICE_HOST_IP=${host_ip}
export BACKEND_SERVICE_ENDPOINT="http://${host_ip}:8889/v1/retrievaltool"
export DATAPREP_SERVICE_ENDPOINT="http://${host_ip}:6007/v1/dataprep"
export DATAPREP_GET_FILE_ENDPOINT="http://${host_ip}:6007/v1/dataprep/get_file"
export DATAPREP_DELETE_FILE_ENDPOINT="http://${host_ip}:6007/v1/dataprep/delete_file"
export DATAPREP_SERVICE_ENDPOINT="http://${host_ip}:6007/v1/dataprep/ingest"
export DATAPREP_GET_FILE_ENDPOINT="http://${host_ip}:6007/v1/dataprep/get"
export DATAPREP_DELETE_FILE_ENDPOINT="http://${host_ip}:6007/v1/dataprep/delete"
docker compose -f compose.yaml up -d

View File

@@ -41,6 +41,6 @@ export EMBEDDING_SERVICE_HOST_IP=${host_ip}
export RETRIEVER_SERVICE_HOST_IP=${host_ip}
export RERANK_SERVICE_HOST_IP=${host_ip}
export BACKEND_SERVICE_ENDPOINT="http://${host_ip}:8889/v1/retrievaltool"
export DATAPREP_SERVICE_ENDPOINT="http://${host_ip}:6007/v1/dataprep"
export DATAPREP_GET_FILE_ENDPOINT="http://${host_ip}:6007/v1/dataprep/get_file"
export DATAPREP_DELETE_FILE_ENDPOINT="http://${host_ip}:6007/v1/dataprep/delete_file"
export DATAPREP_SERVICE_ENDPOINT="http://${host_ip}:6007/v1/dataprep/ingest"
export DATAPREP_GET_FILE_ENDPOINT="http://${host_ip}:6007/v1/dataprep/get"
export DATAPREP_DELETE_FILE_ENDPOINT="http://${host_ip}:6007/v1/dataprep/delete"

View File

@@ -41,26 +41,38 @@ This example showcases a hierarchical multi-agent system for question-answering
bash run_ingest_data.sh
```
4. Launch Tool service
4. Prepare SQL database
In this example, we will use the SQLite database provided in the [TAG-Bench](https://github.com/TAG-Research/TAG-Bench/tree/main). Run the commands below.
```
# Download data
cd $WORKDIR
git clone https://github.com/TAG-Research/TAG-Bench.git
cd TAG-Bench/setup
chmod +x get_dbs.sh
./get_dbs.sh
```
5. Launch Tool service
In this example, we will use some of the mock APIs provided in the Meta CRAG KDD Challenge to demonstrate the benefits of gaining additional context from mock knowledge graphs.
```
docker run -d -p=8080:8000 docker.io/aicrowd/kdd-cup-24-crag-mock-api:v0
```
5. Launch `Agent` service
6. Launch multi-agent system
The configurations of the supervisor agent and the worker agent are defined in the docker-compose yaml file. We currently use openAI GPT-4o-mini as LLM, and llama3.1-70B-instruct (served by TGI-Gaudi) in Gaudi example. To use openai llm, run command below.
The configurations of the supervisor agent and the worker agents are defined in the docker-compose yaml file. We currently use openAI GPT-4o-mini as LLM.
```
cd $WORKDIR/GenAIExamples/AgentQnA/docker_compose/intel/cpu/xeon
bash launch_agent_service_openai.sh
```
6. [Optional] Build `Agent` docker image if pulling images failed.
7. [Optional] Build `Agent` docker image if pulling images failed.
```
git clone https://github.com/opea-project/GenAIComps.git
cd GenAIComps
docker build -t opea/agent-langchain:latest -f comps/agent/langchain/Dockerfile .
docker build -t opea/agent:latest -f comps/agent/src/Dockerfile .
```
## Validate services
@@ -68,8 +80,11 @@ This example showcases a hierarchical multi-agent system for question-answering
First look at logs of the agent docker containers:
```
# worker agent
# worker RAG agent
docker logs rag-agent-endpoint
# worker SQL agent
docker logs sql-agent-endpoint
```
```
@@ -79,22 +94,30 @@ docker logs react-agent-endpoint
You should see something like "HTTP server setup successful" if the docker containers are started successfully.</p>
Second, validate worker agent:
Second, validate worker RAG agent:
```
curl http://${host_ip}:9095/v1/chat/completions -X POST -H "Content-Type: application/json" -d '{
"query": "Most recent album by Taylor Swift"
"messages": "Michael Jackson song Thriller"
}'
```
Third, validate supervisor agent:
Third, validate worker SQL agent:
```
curl http://${host_ip}:9095/v1/chat/completions -X POST -H "Content-Type: application/json" -d '{
"messages": "How many employees are in the company?"
}'
```
Finally, validate supervisor agent:
```
curl http://${host_ip}:9090/v1/chat/completions -X POST -H "Content-Type: application/json" -d '{
"query": "Most recent album by Taylor Swift"
"messages": "How many albums does Iron Maiden have?"
}'
```
## How to register your own tools with agent
You can take a look at the tools yaml and python files in this example. For more details, please refer to the "Provide your own tools" section in the instructions [here](https://github.com/opea-project/GenAIComps/tree/main/comps/agent/langchain/README.md).
You can take a look at the tools yaml and python files in this example. For more details, please refer to the "Provide your own tools" section in the instructions [here](https://github.com/opea-project/GenAIComps/tree/main/comps/agent/src/README.md).

View File

@@ -3,7 +3,7 @@
services:
worker-rag-agent:
image: opea/agent-langchain:latest
image: opea/agent:latest
container_name: rag-agent-endpoint
volumes:
- ${TOOLSET_PATH}:/home/user/tools/
@@ -19,7 +19,7 @@ services:
model: ${model}
temperature: ${temperature}
max_new_tokens: ${max_new_tokens}
streaming: false
stream: false
tools: /home/user/tools/worker_agent_tools.yaml
require_human_feedback: false
RETRIEVAL_TOOL_URL: ${RETRIEVAL_TOOL_URL}
@@ -31,9 +31,36 @@ services:
LANGCHAIN_PROJECT: "opea-worker-agent-service"
port: 9095
worker-sql-agent:
image: opea/agent:latest
container_name: sql-agent-endpoint
volumes:
- ${WORKDIR}/TAG-Bench/:/home/user/TAG-Bench # SQL database
ports:
- "9096:9096"
ipc: host
environment:
ip_address: ${ip_address}
strategy: sql_agent
db_name: ${db_name}
db_path: ${db_path}
use_hints: false
hints_file: /home/user/TAG-Bench/${db_name}_hints.csv
recursion_limit: ${recursion_limit_worker}
llm_engine: openai
OPENAI_API_KEY: ${OPENAI_API_KEY}
model: ${model}
temperature: 0
max_new_tokens: ${max_new_tokens}
stream: false
require_human_feedback: false
no_proxy: ${no_proxy}
http_proxy: ${http_proxy}
https_proxy: ${https_proxy}
port: 9096
supervisor-react-agent:
image: opea/agent-langchain:latest
image: opea/agent:latest
container_name: react-agent-endpoint
depends_on:
- worker-rag-agent
@@ -51,7 +78,7 @@ services:
model: ${model}
temperature: ${temperature}
max_new_tokens: ${max_new_tokens}
streaming: false
stream: false
tools: /home/user/tools/supervisor_agent_tools.yaml
require_human_feedback: false
no_proxy: ${no_proxy}

View File

@@ -13,7 +13,10 @@ export temperature=0
export max_new_tokens=4096
export OPENAI_API_KEY=${OPENAI_API_KEY}
export WORKER_AGENT_URL="http://${ip_address}:9095/v1/chat/completions"
export SQL_AGENT_URL="http://${ip_address}:9096/v1/chat/completions"
export RETRIEVAL_TOOL_URL="http://${ip_address}:8889/v1/retrievaltool"
export CRAG_SERVER=http://${ip_address}:8080
export db_name=california_schools
export db_path="sqlite:////home/user/TAG-Bench/dev_folder/dev_databases/${db_name}/${db_name}.sqlite"
docker compose -f compose_openai.yaml up -d

View File

@@ -1,6 +1,6 @@
# Single node on-prem deployment AgentQnA on Gaudi
This example showcases a hierarchical multi-agent system for question-answering applications. We deploy the example on Gaudi using open-source LLMs,
This example showcases a hierarchical multi-agent system for question-answering applications. We deploy the example on Gaudi using open-source LLMs.
For more details, please refer to the deployment guide [here](../../../../README.md).
## Deployment with docker
@@ -45,27 +45,58 @@ For more details, please refer to the deployment guide [here](../../../../README
bash run_ingest_data.sh
```
4. Launch Tool service
4. Prepare SQL database
In this example, we will use the Chinook SQLite database. Run the commands below.
```
# Download data
cd $WORKDIR
git clone https://github.com/lerocha/chinook-database.git
cp chinook-database/ChinookDatabase/DataSources/Chinook_Sqlite.sqlite $WORKDIR/GenAIExamples/AgentQnA/tests/
```
5. Launch Tool service
In this example, we will use some of the mock APIs provided in the Meta CRAG KDD Challenge to demonstrate the benefits of gaining additional context from mock knowledge graphs.
```
docker run -d -p=8080:8000 docker.io/aicrowd/kdd-cup-24-crag-mock-api:v0
```
5. Launch `Agent` service
6. Launch multi-agent system
To use open-source LLMs on Gaudi2, run commands below.
On Gaudi2 we will serve `meta-llama/Meta-Llama-3.1-70B-Instruct` using vllm.
```
cd $WORKDIR/GenAIExamples/AgentQnA/docker_compose/intel/hpu/gaudi
bash launch_tgi_gaudi.sh
bash launch_agent_service_tgi_gaudi.sh
First build vllm-gaudi docker image.
```bash
cd $WORKDIR
git clone https://github.com/vllm-project/vllm.git
cd ./vllm
git checkout v0.6.6
docker build --no-cache -f Dockerfile.hpu -t opea/vllm-gaudi:latest --shm-size=128g . --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy
```
6. [Optional] Build `Agent` docker image if pulling images failed.
Then launch vllm on Gaudi2 with the command below.
```bash
vllm_port=8086
model="meta-llama/Meta-Llama-3.1-70B-Instruct"
docker run -d --runtime=habana --rm --name "vllm-gaudi-server" -e HABANA_VISIBLE_DEVICES=0,1,2,3 -p $vllm_port:8000 -v $vllm_volume:/data -e HF_TOKEN=$HF_TOKEN -e HUGGING_FACE_HUB_TOKEN=$HF_TOKEN -e HF_HOME=/data -e OMPI_MCA_btl_vader_single_copy_mechanism=none -e PT_HPU_ENABLE_LAZY_COLLECTIVES=true -e http_proxy=$http_proxy -e https_proxy=$https_proxy -e no_proxy=$no_proxy -e VLLM_SKIP_WARMUP=true --cap-add=sys_nice --ipc=host opea/vllm-gaudi:latest --model ${model} --max-seq-len-to-capture 16384 --tensor-parallel-size 4
```
Then launch Agent microservices.
```bash
cd $WORKDIR/GenAIExamples/AgentQnA/docker_compose/intel/hpu/gaudi/
bash launch_agent_service_gaudi.sh
```
7. [Optional] Build `Agent` docker image if pulling images failed.
If docker image pulling failed in Step 6 above, build the agent docker image with the commands below. After image build, try Step 6 again.
```
git clone https://github.com/opea-project/GenAIComps.git
cd GenAIComps
docker build -t opea/agent-langchain:latest -f comps/agent/langchain/Dockerfile .
docker build -t opea/agent:latest -f comps/agent/src/Dockerfile .
```
## Validate services
@@ -73,8 +104,11 @@ For more details, please refer to the deployment guide [here](../../../../README
First look at logs of the agent docker containers:
```
# worker agent
# worker RAG agent
docker logs rag-agent-endpoint
# worker SQL agent
docker logs sql-agent-endpoint
```
```
@@ -84,22 +118,30 @@ docker logs react-agent-endpoint
You should see something like "HTTP server setup successful" if the docker containers are started successfully.</p>
Second, validate worker agent:
Second, validate worker RAG agent:
```
curl http://${host_ip}:9095/v1/chat/completions -X POST -H "Content-Type: application/json" -d '{
"query": "Most recent album by Taylor Swift"
"messages": "Michael Jackson song Thriller"
}'
```
Third, validate supervisor agent:
Third, validate worker SQL agent:
```
curl http://${host_ip}:9095/v1/chat/completions -X POST -H "Content-Type: application/json" -d '{
"messages": "How many employees are in the company?"
}'
```
Finally, validate supervisor agent:
```
curl http://${host_ip}:9090/v1/chat/completions -X POST -H "Content-Type: application/json" -d '{
"query": "Most recent album by Taylor Swift"
"messages": "How many albums does Iron Maiden have?"
}'
```
## How to register your own tools with agent
You can take a look at the tools yaml and python files in this example. For more details, please refer to the "Provide your own tools" section in the instructions [here](https://github.com/opea-project/GenAIComps/tree/main/comps/agent/langchain/README.md).
You can take a look at the tools yaml and python files in this example. For more details, please refer to the "Provide your own tools" section in the instructions [here](https://github.com/opea-project/GenAIComps/tree/main/comps/agent/src/README.md).

View File

@@ -3,10 +3,9 @@
services:
worker-rag-agent:
image: opea/agent-langchain:latest
image: opea/agent:latest
container_name: rag-agent-endpoint
volumes:
# - ${WORKDIR}/GenAIExamples/AgentQnA/docker_image_build/GenAIComps/comps/agent/langchain/:/home/user/comps/agent/langchain/
- ${TOOLSET_PATH}:/home/user/tools/
ports:
- "9095:9095"
@@ -15,13 +14,13 @@ services:
ip_address: ${ip_address}
strategy: rag_agent_llama
recursion_limit: ${recursion_limit_worker}
llm_engine: tgi
llm_engine: vllm
HUGGINGFACEHUB_API_TOKEN: ${HUGGINGFACEHUB_API_TOKEN}
llm_endpoint_url: ${LLM_ENDPOINT_URL}
model: ${LLM_MODEL_ID}
temperature: ${temperature}
max_new_tokens: ${max_new_tokens}
streaming: false
stream: false
tools: /home/user/tools/worker_agent_tools.yaml
require_human_feedback: false
RETRIEVAL_TOOL_URL: ${RETRIEVAL_TOOL_URL}
@@ -33,14 +32,41 @@ services:
LANGCHAIN_PROJECT: "opea-worker-agent-service"
port: 9095
worker-sql-agent:
image: opea/agent:latest
container_name: sql-agent-endpoint
volumes:
- ${WORKDIR}/GenAIExamples/AgentQnA/tests:/home/user/chinook-db # test db
ports:
- "9096:9096"
ipc: host
environment:
ip_address: ${ip_address}
strategy: sql_agent_llama
db_name: ${db_name}
db_path: ${db_path}
use_hints: false
recursion_limit: ${recursion_limit_worker}
llm_engine: vllm
HUGGINGFACEHUB_API_TOKEN: ${HUGGINGFACEHUB_API_TOKEN}
llm_endpoint_url: ${LLM_ENDPOINT_URL}
model: ${LLM_MODEL_ID}
temperature: ${temperature}
max_new_tokens: ${max_new_tokens}
stream: false
require_human_feedback: false
no_proxy: ${no_proxy}
http_proxy: ${http_proxy}
https_proxy: ${https_proxy}
port: 9096
supervisor-react-agent:
image: opea/agent-langchain:latest
image: opea/agent:latest
container_name: react-agent-endpoint
depends_on:
- worker-rag-agent
- worker-sql-agent
volumes:
# - ${WORKDIR}/GenAIExamples/AgentQnA/docker_image_build/GenAIComps/comps/agent/langchain/:/home/user/comps/agent/langchain/
- ${TOOLSET_PATH}:/home/user/tools/
ports:
- "9090:9090"
@@ -49,13 +75,13 @@ services:
ip_address: ${ip_address}
strategy: react_llama
recursion_limit: ${recursion_limit_supervisor}
llm_engine: tgi
llm_engine: vllm
HUGGINGFACEHUB_API_TOKEN: ${HUGGINGFACEHUB_API_TOKEN}
llm_endpoint_url: ${LLM_ENDPOINT_URL}
model: ${LLM_MODEL_ID}
temperature: ${temperature}
max_new_tokens: ${max_new_tokens}
streaming: false
stream: false
tools: /home/user/tools/supervisor_agent_tools.yaml
require_human_feedback: false
no_proxy: ${no_proxy}
@@ -66,4 +92,5 @@ services:
LANGCHAIN_PROJECT: "opea-supervisor-agent-service"
CRAG_SERVER: $CRAG_SERVER
WORKER_AGENT_URL: $WORKER_AGENT_URL
SQL_AGENT_URL: $SQL_AGENT_URL
port: 9090

View File

@@ -16,8 +16,8 @@ ls $HF_CACHE_DIR
export HUGGINGFACEHUB_API_TOKEN=${HUGGINGFACEHUB_API_TOKEN}
export LLM_MODEL_ID="meta-llama/Meta-Llama-3.1-70B-Instruct"
export NUM_SHARDS=4
export LLM_ENDPOINT_URL="http://${ip_address}:8085"
export temperature=0.01
export LLM_ENDPOINT_URL="http://${ip_address}:8086"
export temperature=0
export max_new_tokens=4096
# agent related environment variables
@@ -26,7 +26,11 @@ echo "TOOLSET_PATH=${TOOLSET_PATH}"
export recursion_limit_worker=12
export recursion_limit_supervisor=10
export WORKER_AGENT_URL="http://${ip_address}:9095/v1/chat/completions"
export SQL_AGENT_URL="http://${ip_address}:9096/v1/chat/completions"
export RETRIEVAL_TOOL_URL="http://${ip_address}:8889/v1/retrievaltool"
export CRAG_SERVER=http://${ip_address}:8080
export db_name=Chinook
export db_path="sqlite:////home/user/chinook-db/Chinook_Sqlite.sqlite"
docker compose -f compose.yaml up -d

View File

@@ -2,12 +2,18 @@
# SPDX-License-Identifier: Apache-2.0
services:
agent-langchain:
agent:
build:
context: GenAIComps
dockerfile: comps/agent/langchain/Dockerfile
dockerfile: comps/agent/src/Dockerfile
args:
http_proxy: ${http_proxy}
https_proxy: ${https_proxy}
no_proxy: ${no_proxy}
image: ${REGISTRY:-opea}/agent-langchain:${TAG:-latest}
image: ${REGISTRY:-opea}/agent:${TAG:-latest}
agent-ui:
build:
context: ../ui
dockerfile: ./docker/Dockerfile
extends: agent
image: ${REGISTRY:-opea}/agent-ui:${TAG:-latest}

View File

@@ -0,0 +1,11 @@
# Deploy AgentQnA on Kubernetes cluster
- You should have Helm (version >= 3.15) installed. Refer to the [Helm Installation Guide](https://helm.sh/docs/intro/install/) for more information.
- For more deploy options, refer to [helm charts README](https://github.com/opea-project/GenAIInfra/tree/main/helm-charts#readme).
## Deploy on Gaudi
```
export HFTOKEN="insert-your-huggingface-token-here"
helm install agentqna oci://ghcr.io/opea-project/charts/agentqna --set global.HUGGINGFACEHUB_API_TOKEN=${HFTOKEN} -f gaudi-values.yaml
```

View File

@@ -0,0 +1,16 @@
# Copyright (C) 2024 Intel Corporation
# SPDX-License-Identifier: Apache-2.0
# Accelerate inferencing in heaviest components to improve performance
# by overriding their subchart values
vllm:
enabled: true
image:
repository: opea/vllm-gaudi
supervisor:
llm_endpoint_url: http://{{ .Release.Name }}-vllm
ragagent:
llm_endpoint_url: http://{{ .Release.Name }}-vllm
sqlagent:
llm_endpoint_url: http://{{ .Release.Name }}-vllm

View File

@@ -53,7 +53,7 @@ def main():
host_ip = args.host_ip
port = args.port
proxies = {"http": ""}
url = "http://{host_ip}:{port}/v1/dataprep".format(host_ip=host_ip, port=port)
url = "http://{host_ip}:{port}/v1/dataprep/ingest".format(host_ip=host_ip, port=port)
# Split jsonl file into json files
files = split_jsonl_into_txts(os.path.join(args.filedir, args.filename))

View File

@@ -13,13 +13,14 @@ export TEI_EMBEDDING_ENDPOINT="http://${host_ip}:6006"
export TEI_RERANKING_ENDPOINT="http://${host_ip}:8808"
export REDIS_URL="redis://${host_ip}:6379"
export INDEX_NAME="rag-redis"
export RERANK_TYPE="tei"
export MEGA_SERVICE_HOST_IP=${host_ip}
export EMBEDDING_SERVICE_HOST_IP=${host_ip}
export RETRIEVER_SERVICE_HOST_IP=${host_ip}
export RERANK_SERVICE_HOST_IP=${host_ip}
export BACKEND_SERVICE_ENDPOINT="http://${host_ip}:8889/v1/retrievaltool"
export DATAPREP_SERVICE_ENDPOINT="http://${host_ip}:6007/v1/dataprep"
export DATAPREP_GET_FILE_ENDPOINT="http://${host_ip}:6008/v1/dataprep/get_file"
export DATAPREP_DELETE_FILE_ENDPOINT="http://${host_ip}:6009/v1/dataprep/delete_file"
export DATAPREP_SERVICE_ENDPOINT="http://${host_ip}:6007/v1/dataprep/ingest"
export DATAPREP_GET_FILE_ENDPOINT="http://${host_ip}:6008/v1/dataprep/get"
export DATAPREP_DELETE_FILE_ENDPOINT="http://${host_ip}:6009/v1/dataprep/delete"
docker compose -f $WORKDIR/GenAIExamples/DocIndexRetriever/docker_compose/intel/cpu/xeon/compose.yaml up -d

View File

@@ -15,7 +15,7 @@ function stop_agent_and_api_server() {
echo "Stopping CRAG server"
docker stop $(docker ps -q --filter ancestor=docker.io/aicrowd/kdd-cup-24-crag-mock-api:v0)
echo "Stopping Agent services"
docker stop $(docker ps -q --filter ancestor=opea/agent-langchain:latest)
docker stop $(docker ps -q --filter ancestor=opea/agent:latest)
}
function stop_retrieval_tool() {

View File

@@ -0,0 +1,6 @@
# Copyright (C) 2024 Intel Corporation
# SPDX-License-Identifier: Apache-2.0
DATAPATH=$WORKDIR/TAG-Bench/tag_queries.csv
OUTFOLDER=$WORKDIR/TAG-Bench/query_by_db
python3 split_data.py --path $DATAPATH --output $OUTFOLDER

View File

@@ -0,0 +1,27 @@
# Copyright (C) 2024 Intel Corporation
# SPDX-License-Identifier: Apache-2.0
import argparse
import os
import pandas as pd
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--path", type=str, required=True)
parser.add_argument("--output", type=str, required=True)
args = parser.parse_args()
# if output folder does not exist, create it
if not os.path.exists(args.output):
os.makedirs(args.output)
# Load the data
data = pd.read_csv(args.path)
# Split the data by domain
domains = data["DB used"].unique()
for domain in domains:
domain_data = data[data["DB used"] == domain]
out = os.path.join(args.output, f"query_{domain}.csv")
domain_data.to_csv(out, index=False)

View File

@@ -11,17 +11,16 @@ export ip_address=$(hostname -I | awk '{print $1}')
function get_genai_comps() {
if [ ! -d "GenAIComps" ] ; then
git clone https://github.com/opea-project/GenAIComps.git && cd GenAIComps && git checkout "${opea_branch:-"main"}" && cd ../
git clone --depth 1 --branch ${opea_branch:-"main"} https://github.com/opea-project/GenAIComps.git
fi
}
function build_docker_images_for_retrieval_tool(){
cd $WORKDIR/GenAIExamples/DocIndexRetriever/docker_image_build/
# git clone https://github.com/opea-project/GenAIComps.git && cd GenAIComps && git checkout "${opea_branch:-"main"}" && cd ../
get_genai_comps
echo "Build all the images with --no-cache..."
service_list="doc-index-retriever dataprep-redis embedding-tei retriever-redis reranking-tei"
service_list="doc-index-retriever dataprep embedding retriever reranking"
docker compose -f build.yaml build ${service_list} --no-cache
docker pull ghcr.io/huggingface/text-embeddings-inference:cpu-1.5
@@ -35,6 +34,25 @@ function build_agent_docker_image() {
docker compose -f build.yaml build --no-cache
}
function build_vllm_docker_image() {
echo "Building the vllm docker image"
cd $WORKPATH
echo $WORKPATH
if [ ! -d "./vllm-fork" ]; then
git clone https://github.com/HabanaAI/vllm-fork.git
fi
cd ./vllm-fork
git checkout v0.6.4.post2+Gaudi-1.19.0
docker build --no-cache -f Dockerfile.hpu -t opea/vllm-gaudi:ci --shm-size=128g . --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy
if [ $? -ne 0 ]; then
echo "opea/vllm-gaudi:ci failed"
exit 1
else
echo "opea/vllm-gaudi:ci successful"
fi
}
function main() {
echo "==================== Build docker images for retrieval tool ===================="
build_docker_images_for_retrieval_tool
@@ -43,6 +61,12 @@ function main() {
echo "==================== Build agent docker image ===================="
build_agent_docker_image
echo "==================== Build agent docker image completed ===================="
echo "==================== Build vllm docker image ===================="
build_vllm_docker_image
echo "==================== Build vllm docker image completed ===================="
docker image ls | grep vllm
}
main

View File

@@ -7,6 +7,7 @@ WORKPATH=$(dirname "$PWD")
export WORKDIR=$WORKPATH/../../
echo "WORKDIR=${WORKDIR}"
export ip_address=$(hostname -I | awk '{print $1}')
export host_ip=${ip_address}
export HF_CACHE_DIR=$WORKDIR/hf_cache
if [ ! -d "$HF_CACHE_DIR" ]; then

View File

@@ -8,15 +8,22 @@ WORKPATH=$(dirname "$PWD")
export WORKDIR=$WORKPATH/../../
echo "WORKDIR=${WORKDIR}"
export ip_address=$(hostname -I | awk '{print $1}')
export TOOLSET_PATH=$WORKDIR/GenAIExamples/AgentQnA/tools/
export TOOLSET_PATH=$WORKPATH/tools/
export HUGGINGFACEHUB_API_TOKEN=${HUGGINGFACEHUB_API_TOKEN}
HF_TOKEN=${HUGGINGFACEHUB_API_TOKEN}
model="meta-llama/Meta-Llama-3.1-70B-Instruct"
export HF_CACHE_DIR=$WORKDIR/hf_cache
export HF_CACHE_DIR=/data2/huggingface
if [ ! -d "$HF_CACHE_DIR" ]; then
HF_CACHE_DIR=$WORKDIR/hf_cache
mkdir -p "$HF_CACHE_DIR"
fi
echo "HF_CACHE_DIR=$HF_CACHE_DIR"
ls $HF_CACHE_DIR
vllm_port=8086
vllm_volume=${HF_CACHE_DIR}
function start_tgi(){
echo "Starting tgi-gaudi server"
cd $WORKDIR/GenAIExamples/AgentQnA/docker_compose/intel/hpu/gaudi
@@ -24,14 +31,67 @@ function start_tgi(){
}
function start_vllm_service_70B() {
echo "token is ${HF_TOKEN}"
echo "start vllm gaudi service"
echo "**************model is $model**************"
vllm_image=opea/vllm-gaudi:ci
docker run -d --runtime=habana --rm --name "vllm-gaudi-server" -e HABANA_VISIBLE_DEVICES=0,1,2,3 -p $vllm_port:8000 -v $vllm_volume:/data -e HF_TOKEN=$HF_TOKEN -e HUGGING_FACE_HUB_TOKEN=$HF_TOKEN -e HF_HOME=/data -e OMPI_MCA_btl_vader_single_copy_mechanism=none -e PT_HPU_ENABLE_LAZY_COLLECTIVES=true -e http_proxy=$http_proxy -e https_proxy=$https_proxy -e no_proxy=$no_proxy -e VLLM_SKIP_WARMUP=true --cap-add=sys_nice --ipc=host $vllm_image --model ${model} --max-seq-len-to-capture 16384 --tensor-parallel-size 4
sleep 5s
echo "Waiting vllm gaudi ready"
n=0
LOG_PATH=$PWD
until [[ "$n" -ge 100 ]] || [[ $ready == true ]]; do
docker logs vllm-gaudi-server
docker logs vllm-gaudi-server &> ${LOG_PATH}/vllm-gaudi-service.log
n=$((n+1))
if grep -q "Uvicorn running on" ${LOG_PATH}/vllm-gaudi-service.log; then
break
fi
if grep -q "No such container" ${LOG_PATH}/vllm-gaudi-service.log; then
echo "container vllm-gaudi-server not found"
exit 1
fi
sleep 5s
done
sleep 5s
echo "Service started successfully"
}
function prepare_data() {
cd $WORKDIR
echo "Downloading data..."
git clone https://github.com/TAG-Research/TAG-Bench.git
cd TAG-Bench/setup
chmod +x get_dbs.sh
./get_dbs.sh
echo "Split data..."
cd $WORKPATH/tests/sql_agent_test
bash run_data_split.sh
echo "Data preparation done!"
}
function download_chinook_data(){
echo "Downloading chinook data..."
cd $WORKDIR
git clone https://github.com/lerocha/chinook-database.git
cp chinook-database/ChinookDatabase/DataSources/Chinook_Sqlite.sqlite $WORKDIR/GenAIExamples/AgentQnA/tests/
}
function start_agent_and_api_server() {
echo "Starting CRAG server"
docker run -d --runtime=runc --name=kdd-cup-24-crag-service -p=8080:8000 docker.io/aicrowd/kdd-cup-24-crag-mock-api:v0
echo "Starting Agent services"
cd $WORKDIR/GenAIExamples/AgentQnA/docker_compose/intel/hpu/gaudi
bash launch_agent_service_tgi_gaudi.sh
sleep 10
bash launch_agent_service_gaudi.sh
sleep 2m
}
function validate() {
@@ -49,35 +109,76 @@ function validate() {
}
function validate_agent_service() {
echo "----------------Test agent ----------------"
# local CONTENT=$(http_proxy="" curl http://${ip_address}:9095/v1/chat/completions -X POST -H "Content-Type: application/json" -d '{
# "query": "Tell me about Michael Jackson song thriller"
# }')
# # test worker rag agent
echo "======================Testing worker rag agent======================"
export agent_port="9095"
local CONTENT=$(python3 $WORKDIR/GenAIExamples/AgentQnA/tests/test.py)
prompt="Tell me about Michael Jackson song Thriller"
local CONTENT=$(python3 $WORKDIR/GenAIExamples/AgentQnA/tests/test.py --prompt "$prompt")
# echo $CONTENT
local EXIT_CODE=$(validate "$CONTENT" "Thriller" "rag-agent-endpoint")
docker logs rag-agent-endpoint
echo $EXIT_CODE
local EXIT_CODE="${EXIT_CODE:0-1}"
if [ "$EXIT_CODE" == "1" ]; then
docker logs rag-agent-endpoint
exit 1
fi
# local CONTENT=$(http_proxy="" curl http://${ip_address}:9090/v1/chat/completions -X POST -H "Content-Type: application/json" -d '{
# "query": "Tell me about Michael Jackson song thriller"
# }')
export agent_port="9090"
local CONTENT=$(python3 $WORKDIR/GenAIExamples/AgentQnA/tests/test.py)
local EXIT_CODE=$(validate "$CONTENT" "Thriller" "react-agent-endpoint")
docker logs react-agent-endpoint
# # test worker sql agent
echo "======================Testing worker sql agent======================"
export agent_port="9096"
prompt="How many employees are there in the company?"
local CONTENT=$(python3 $WORKDIR/GenAIExamples/AgentQnA/tests/test.py --prompt "$prompt")
local EXIT_CODE=$(validate "$CONTENT" "8" "sql-agent-endpoint")
echo $CONTENT
# echo $EXIT_CODE
local EXIT_CODE="${EXIT_CODE:0-1}"
if [ "$EXIT_CODE" == "1" ]; then
docker logs sql-agent-endpoint
exit 1
fi
# test supervisor react agent
echo "======================Testing supervisor react agent======================"
export agent_port="9090"
prompt="How many albums does Iron Maiden have?"
local CONTENT=$(python3 $WORKDIR/GenAIExamples/AgentQnA/tests/test.py --prompt "$prompt")
local EXIT_CODE=$(validate "$CONTENT" "21" "react-agent-endpoint")
# echo $CONTENT
echo $EXIT_CODE
local EXIT_CODE="${EXIT_CODE:0-1}"
if [ "$EXIT_CODE" == "1" ]; then
docker logs react-agent-endpoint
exit 1
fi
}
function remove_data() {
echo "Removing data..."
cd $WORKDIR
if [ -d "TAG-Bench" ]; then
rm -rf TAG-Bench
fi
echo "Data removed!"
}
function remove_chinook_data(){
echo "Removing chinook data..."
cd $WORKDIR
if [ -d "chinook-database" ]; then
rm -rf chinook-database
fi
echo "Chinook data removed!"
}
function main() {
echo "==================== Start TGI ===================="
start_tgi
echo "==================== TGI started ===================="
echo "==================== Prepare data ===================="
download_chinook_data
echo "==================== Data prepare done ===================="
echo "==================== Start VLLM service ===================="
start_vllm_service_70B
echo "==================== VLLM service started ===================="
echo "==================== Start agent ===================="
start_agent_and_api_server
@@ -88,4 +189,8 @@ function main() {
echo "==================== Agent service validated ===================="
}
remove_data
remove_chinook_data
main
remove_data
remove_chinook_data

View File

@@ -1,6 +1,7 @@
# Copyright (C) 2024 Intel Corporation
# SPDX-License-Identifier: Apache-2.0
import argparse
import os
import requests
@@ -9,17 +10,47 @@ import requests
def generate_answer_agent_api(url, prompt):
proxies = {"http": ""}
payload = {
"query": prompt,
"messages": prompt,
}
response = requests.post(url, json=payload, proxies=proxies)
answer = response.json()["text"]
return answer
def process_request(url, query, is_stream=False):
proxies = {"http": ""}
payload = {
"messages": query,
}
try:
resp = requests.post(url=url, json=payload, proxies=proxies, stream=is_stream)
if not is_stream:
ret = resp.json()["text"]
print(ret)
else:
for line in resp.iter_lines(decode_unicode=True):
print(line)
ret = None
resp.raise_for_status() # Raise an exception for unsuccessful HTTP status codes
return ret
except requests.exceptions.RequestException as e:
ret = f"An error occurred:{e}"
print(ret)
return False
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--prompt", type=str)
parser.add_argument("--stream", action="store_true")
args = parser.parse_args()
ip_address = os.getenv("ip_address", "localhost")
agent_port = os.getenv("agent_port", "9095")
agent_port = os.getenv("agent_port", "9090")
url = f"http://{ip_address}:{agent_port}/v1/chat/completions"
prompt = "Tell me about Michael Jackson song thriller"
answer = generate_answer_agent_api(url, prompt)
print(answer)
prompt = args.prompt
process_request(url, prompt, args.stream)

View File

@@ -1,8 +1,7 @@
#!/bin/bash
# Copyright (C) 2024 Intel Corporation
# SPDX-License-Identifier: Apache-2.0
set -e
set -xe
WORKPATH=$(dirname "$PWD")
export WORKDIR=$WORKPATH/../../
@@ -27,7 +26,7 @@ function stop_agent_docker() {
done
}
function stop_tgi(){
function stop_llm(){
cd $WORKPATH/docker_compose/intel/hpu/gaudi/
container_list=$(cat tgi_gaudi.yaml | grep container_name | cut -d':' -f2)
for container_name in $container_list; do
@@ -36,6 +35,14 @@ function stop_tgi(){
if [[ ! -z "$cid" ]]; then docker rm $cid -f && sleep 1s; fi
done
cid=$(docker ps -aq --filter "name=vllm-gaudi-server")
echo "Stopping container $cid"
if [[ ! -z "$cid" ]]; then docker rm $cid -f && sleep 1s; fi
cid=$(docker ps -aq --filter "name=test-comps-vllm-gaudi-service")
echo "Stopping container $cid"
if [[ ! -z "$cid" ]]; then docker rm $cid -f && sleep 1s; fi
}
function stop_retrieval_tool() {
@@ -52,7 +59,7 @@ function stop_retrieval_tool() {
echo "workpath: $WORKPATH"
echo "=================== Stop containers ===================="
stop_crag
stop_tgi
stop_llm
stop_agent_docker
stop_retrieval_tool
@@ -78,8 +85,9 @@ echo "=================== #5 Stop agent and API server===================="
stop_crag
stop_agent_docker
stop_retrieval_tool
stop_llm
echo "=================== #5 Agent and API server stopped===================="
echo y | docker system prune
echo "ALL DONE!"
echo "ALL DONE!!"

View File

@@ -2,7 +2,7 @@
# Copyright (C) 2024 Advanced Micro Devices, Inc.
# SPDX-License-Identifier: Apache-2.0
set -e
set -xe
WORKPATH=$(dirname "$PWD")
export WORKDIR=$WORKPATH/../../
@@ -72,4 +72,4 @@ echo "=================== #5 Agent and API server stopped===================="
echo y | docker system prune
echo "ALL DONE!"
echo "ALL DONE!!"

View File

@@ -2,7 +2,7 @@
# SPDX-License-Identifier: Apache-2.0
search_knowledge_base:
description: Search knowledge base for a given query. Returns text related to the query.
description: Search a knowledge base for a given query. Returns text related to the query.
callable_api: tools.py:search_knowledge_base
args_schema:
query:
@@ -10,6 +10,15 @@ search_knowledge_base:
description: query
return_output: retrieved_data
search_artist_database:
description: Search a SQL database on artists and their music with a natural language query. Returns text related to the query.
callable_api: tools.py:search_sql_database
args_schema:
query:
type: str
description: natural language query
return_output: retrieved_data
get_artist_birth_place:
description: Get the birth place of an artist.
callable_api: tools.py:get_artist_birth_place

View File

@@ -8,13 +8,30 @@ from tools.pycragapi import CRAG
def search_knowledge_base(query: str) -> str:
"""Search the knowledge base for a specific query."""
# use worker agent (DocGrader) to search the knowledge base
"""Search a knowledge base about music and singers for a given query.
Returns text related to the query.
"""
url = os.environ.get("WORKER_AGENT_URL")
print(url)
proxies = {"http": ""}
payload = {
"query": query,
"messages": query,
}
response = requests.post(url, json=payload, proxies=proxies)
return response.json()["text"]
def search_sql_database(query: str) -> str:
"""Search a SQL database on artists and their music with a natural language query.
Returns text related to the query.
"""
url = os.environ.get("SQL_AGENT_URL")
print(url)
proxies = {"http": ""}
payload = {
"messages": query,
}
response = requests.post(url, json=payload, proxies=proxies)
return response.json()["text"]

View File

@@ -12,7 +12,7 @@ def search_knowledge_base(query: str) -> str:
print(url)
proxies = {"http": ""}
payload = {
"messages": query,
"text": query,
}
response = requests.post(url, json=payload, proxies=proxies)
print(response)

View File

@@ -0,0 +1,26 @@
# Copyright (C) 2024 Intel Corporation
# SPDX-License-Identifier: Apache-2.0
# Use node 20.11.1 as the base image
FROM node:20.11.1
# Update package manager and install Git
RUN apt-get update -y && apt-get install -y git
# Copy the front-end code repository
COPY svelte /home/user/svelte
# Set the working directory
WORKDIR /home/user/svelte
# Install front-end dependencies
RUN npm install
# Build the front-end application
RUN npm run build
# Expose the port of the front-end application
EXPOSE 5173
# Run the front-end application in preview mode
CMD ["npm", "run", "preview", "--", "--port", "5173", "--host", "0.0.0.0"]

View File

@@ -0,0 +1,10 @@
[*]
indent_style = tab
[package.json]
indent_style = space
indent_size = 2
[*.md]
indent_style = space
indent_size = 2

1
AgentQnA/ui/svelte/.env Normal file
View File

@@ -0,0 +1 @@
AGENT_URL = '/v1/chat/completions'

View File

@@ -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

View File

@@ -0,0 +1,20 @@
module.exports = {
root: true,
parser: "@typescript-eslint/parser",
extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended", "prettier"],
plugins: ["svelte3", "@typescript-eslint", "neverthrow"],
ignorePatterns: ["*.cjs"],
overrides: [{ files: ["*.svelte"], processor: "svelte3/svelte3" }],
settings: {
"svelte3/typescript": () => require("typescript"),
},
parserOptions: {
sourceType: "module",
ecmaVersion: 2020,
},
env: {
browser: true,
es2017: true,
node: true,
},
};

View File

@@ -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

View File

@@ -0,0 +1,13 @@
{
"pluginSearchDirs": [
"."
],
"overrides": [
{
"files": "*.svelte",
"options": {
"parser": "svelte"
}
}
]
}

View File

@@ -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 AgentProvide 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/svelte
```
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:5173`.
5. **For Docker Setup:**
- Build the Docker image:
```
docker build -t opea:agent-ui .
```
- Run the Docker container:
```
docker run -d -p 5173:5173 --name agent-ui opea:agent-ui
```
- The application will be available at `http://localhost:5173`.

View File

@@ -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"
}
}

View File

@@ -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;

50
AgentQnA/ui/svelte/src/app.d.ts vendored Normal file
View File

@@ -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<User>;
interface AuthAdapter {
login(props: { email: string; password: string }): Promise<AuthResponse>;
signup(props: { email: string; password: string; password_confirm: string }): Promise<AuthResponse>;
validate_session(props: { token: string }): Promise<AuthResponse>;
logout(props: { token: string; email: string }): Promise<Result<void>>;
forgotPassword(props: { email: string; password: string }): Promise<Result<void>>;
}
interface ChatAdapter {
modelList(props: {}): Promise<Result<void>>;
txt2img(props: {}): Promise<Result<void>>;
}
interface ChatMessage {
role: string;
content: string;
}
interface ChatMessageType {
model: string;
knowledge: string;
temperature: string;
max_new_tokens: string;
topk: string;
}

View File

@@ -0,0 +1,17 @@
<!--
Copyright (C) 2025 Intel Corporation
SPDX-License-Identifier: Apache-2.0
-->
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="%sveltekit.assets%/favicon.png" />
<meta name="viewport" content="width=device-width" />
%sveltekit.head%
</head>
<body>
<div>%sveltekit.body%</div>
</body>
</html>

View File

@@ -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%
}

View File

@@ -0,0 +1,25 @@
<!--
Copyright (C) 2025 Intel Corporation
SPDX-License-Identifier: Apache-2.0
-->
<svg
t="1731984271860"
class="w-8 h-8"
viewBox="0 0 1024 1024"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="11418"
width="200"
height="200"
><path
d="M0 0m170.666667 0l682.666666 0q170.666667 0 170.666667 170.666667l0 682.666666q0 170.666667-170.666667 170.666667l-682.666666 0q-170.666667 0-170.666667-170.666667l0-682.666666q0-170.666667 170.666667-170.666667Z"
fill="#1890FF"
fill-opacity=".1"
p-id="11419"
/><path
d="M404.352 552.661333a63.018667 63.018667 0 1 0 0-125.994666 63.018667 63.018667 0 0 0 0 125.994666z m0 213.333334a63.018667 63.018667 0 1 0 0-125.994667 63.018667 63.018667 0 0 0 0 125.994667z m-213.333333-426.666667a63.018667 63.018667 0 1 0 0-125.994667 63.018667 63.018667 0 0 0 0 125.994667z m669.653333-10.88H376.362667a35.669333 35.669333 0 0 1-35.114667-36.096c0-19.882667 15.786667-36.096 35.114667-36.096h484.394666c19.370667 0 35.157333 16.213333 35.157334 36.096a35.669333 35.669333 0 0 1-35.242667 36.096z m16.384 213.034667h-260.821333c-10.410667 0-18.901333-16.213333-18.901334-36.096 0-19.925333 8.490667-36.138667 18.901334-36.138667h260.864c10.410667 0 18.901333 16.213333 18.901333 36.138667-0.042667 19.882667-8.490667 36.096-18.944 36.096z m0 212.992h-260.821333c-10.410667 0-18.901333-16.213333-18.901334-36.096 0-19.925333 8.490667-36.096 18.901334-36.096h260.864c10.410667 0 18.901333 16.213333 18.901333 36.096-0.042667 19.882667-8.490667 36.096-18.944 36.096z"
fill="#1890FF"
p-id="11420"
/></svg
>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -0,0 +1,9 @@
<!--
Copyright (C) 2025 Intel Corporation
SPDX-License-Identifier: Apache-2.0
-->
<svg class="w-3.5 h-3.5 me-2.5" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20">
<path d="M14.707 7.793a1 1 0 0 0-1.414 0L11 10.086V1.5a1 1 0 0 0-2 0v8.586L6.707 7.793a1 1 0 1 0-1.414 1.414l4 4a1 1 0 0 0 1.416 0l4-4a1 1 0 0 0-.002-1.414Z"/>
<path d="M18 12h-2.55l-2.975 2.975a3.5 3.5 0 0 1-4.95 0L4.55 12H2a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2Zm-3 5a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"/>
</svg>

After

Width:  |  Height:  |  Size: 559 B

View File

@@ -0,0 +1,16 @@
<!--
Copyright (C) 2025 Intel Corporation
SPDX-License-Identifier: Apache-2.0
-->
<svg
class="me-2 h-3 w-3"
aria-hidden="true"
xmlns="http://www.w3.org/2000/svg"
fill="currentColor"
viewBox="0 0 20 14"
>
<path
d="M10 0C4.612 0 0 5.336 0 7c0 1.742 3.546 7 10 7 6.454 0 10-5.258 10-7 0-1.664-4.612-7-10-7Zm0 10a3 3 0 1 1 0-6 3 3 0 0 1 0 6Z"
/>
</svg>

After

Width:  |  Height:  |  Size: 413 B

View File

@@ -0,0 +1,97 @@
<!--
Copyright (C) 2025 Intel Corporation
SPDX-License-Identifier: Apache-2.0
-->
<!-- <svg class="h-11 w-11 flex-none overflow-visible" fill="none"
><defs
><filter
id="step-icon-2"
x="-3"
y="-1"
width="50"
height="50"
filterUnits="userSpaceOnUse"
color-interpolation-filters="sRGB"
><feFlood flood-opacity="0" result="BackgroundImageFix" /><feColorMatrix
in="SourceAlpha"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
result="hardAlpha"
/><feOffset dy="2" /><feGaussianBlur stdDeviation="2.5" /><feComposite
in2="hardAlpha"
operator="out"
/><feColorMatrix
values="0 0 0 0 0.054902 0 0 0 0 0.647059 0 0 0 0 0.913725 0 0 0 0.12 0"
/><feBlend
in2="BackgroundImageFix"
result="effect1_dropShadow_804_95228"
/><feBlend
in="SourceGraphic"
in2="effect1_dropShadow_804_95228"
result="shape"
/></filter
></defs
><g filter="url(#step-icon-2)"
><path
d="M2.75 10A7.25 7.25 0 0 1 10 2.75h24A7.25 7.25 0 0 1 41.25 10v24A7.25 7.25 0 0 1 34 41.25H10A7.25 7.25 0 0 1 2.75 34V10Z"
fill="#EEF2FF"
/><path
d="M2.75 10A7.25 7.25 0 0 1 10 2.75h24A7.25 7.25 0 0 1 41.25 10v24A7.25 7.25 0 0 1 34 41.25H10A7.25 7.25 0 0 1 2.75 34V10Z"
stroke="#6366F1"
stroke-width="1.5"
stroke-linecap="round"
stroke-linejoin="round"
/></g
><path
fill-rule="evenodd"
clip-rule="evenodd"
d="M23 35.25c.69 0 1.25-.56 1.25-1.25A3.75 3.75 0 0 1 28 30.25a1.25 1.25 0 1 0 0-2.5A3.75 3.75 0 0 1 24.25 24a1.25 1.25 0 1 0-2.5 0A3.75 3.75 0 0 1 18 27.75a1.25 1.25 0 0 0 0 2.5A3.75 3.75 0 0 1 21.75 34c0 .69.56 1.25 1.25 1.25Z"
fill="#fff"
/><path
d="M28 27a.75.75 0 0 0 0 1.5V27Zm-4.5 7a.5.5 0 0 1-.5.5V36a2 2 0 0 0 2-2h-1.5Zm5-5a.5.5 0 0 1-.5.5V31a2 2 0 0 0 2-2h-1.5Zm-.5-.5a.5.5 0 0 1 .5.5H30a2 2 0 0 0-2-2v1.5Zm-5-5a.5.5 0 0 1 .5.5H25a2 2 0 0 0-2-2v1.5Zm-.5.5a.5.5 0 0 1 .5-.5V22a2 2 0 0 0-2 2h1.5Zm-5 5a.5.5 0 0 1 .5-.5V27a2 2 0 0 0-2 2h1.5Zm.5.5a.5.5 0 0 1-.5-.5H16a2 2 0 0 0 2 2v-1.5Zm5 5a.5.5 0 0 1-.5-.5H21a2 2 0 0 0 2 2v-1.5ZM18 31a3 3 0 0 1 3 3h1.5a4.5 4.5 0 0 0-4.5-4.5V31Zm3-7a3 3 0 0 1-3 3v1.5a4.5 4.5 0 0 0 4.5-4.5H21Zm7 3a3 3 0 0 1-3-3h-1.5a4.5 4.5 0 0 0 4.5 4.5V27Zm-3 7a3 3 0 0 1 3-3v-1.5a4.5 4.5 0 0 0-4.5 4.5H25Z"
fill="#6366F1"
/><path
fill-rule="evenodd"
clip-rule="evenodd"
d="M13 27.25c.69 0 1.25-.56 1.25-1.25 0-.966.784-1.75 1.75-1.75a1.25 1.25 0 1 0 0-2.5A1.75 1.75 0 0 1 14.25 20a1.25 1.25 0 1 0-2.5 0A1.75 1.75 0 0 1 10 21.75a1.25 1.25 0 0 0 0 2.5c.966 0 1.75.784 1.75 1.75 0 .69.56 1.25 1.25 1.25Z"
fill="#fff"
/><path
d="M16 21a.75.75 0 0 0 0 1.5V21Zm-2.5 5a.5.5 0 0 1-.5.5V28a2 2 0 0 0 2-2h-1.5Zm3-3a.5.5 0 0 1-.5.5V25a2 2 0 0 0 2-2h-1.5Zm-.5-.5a.5.5 0 0 1 .5.5H18a2 2 0 0 0-2-2v1.5Zm-3-3a.5.5 0 0 1 .5.5H15a2 2 0 0 0-2-2v1.5Zm-.5.5a.5.5 0 0 1 .5-.5V18a2 2 0 0 0-2 2h1.5Zm-3 3a.5.5 0 0 1 .5-.5V21a2 2 0 0 0-2 2h1.5Zm.5.5a.5.5 0 0 1-.5-.5H8a2 2 0 0 0 2 2v-1.5Zm3 3a.5.5 0 0 1-.5-.5H11a2 2 0 0 0 2 2v-1.5ZM10 25a1 1 0 0 1 1 1h1.5a2.5 2.5 0 0 0-2.5-2.5V25Zm1-5a1 1 0 0 1-1 1v1.5a2.5 2.5 0 0 0 2.5-2.5H11Zm5 1a1 1 0 0 1-1-1h-1.5a2.5 2.5 0 0 0 2.5 2.5V21Zm-1 5a1 1 0 0 1 1-1v-1.5a2.5 2.5 0 0 0-2.5 2.5H15Z"
fill="#6366F1"
/><path
opacity=".4"
d="M29.75 35.25h2.5a3 3 0 0 0 3-3v-20.5a3 3 0 0 0-3-3h-20.5a3 3 0 0 0-3 3v5.5M12.75 14.25h18.5"
stroke="#6366F1"
stroke-width="1.5"
stroke-linecap="round"
stroke-linejoin="round"
/></svg
> -->
<svg
t="1731984480564"
class="h-10 w-10"
viewBox="0 0 1114 1024"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="29550"
width="200"
height="200"
><path
d="M1081.916235 788.781176H909.312v172.634353a24.696471 24.696471 0 0 1-49.332706 0V788.781176H687.314824a24.696471 24.696471 0 0 1 0-49.362823H859.949176V566.814118a24.696471 24.696471 0 0 1 49.332706 0v172.634353h172.664471a24.696471 24.696471 0 0 1 0 49.362823z"
fill="#0972E7"
p-id="29551"
/><path
d="M174.772706 143.028706h509.831529c43.550118 0 78.516706 35.689412 78.516706 80.173176v280.576c0 44.453647-34.966588 80.173176-78.516706 80.173177H174.772706c-43.550118 0-78.516706-35.719529-78.516706-80.173177V223.171765c0-43.851294 34.966588-80.173176 78.516706-80.173177z"
fill="#CAE4FF"
p-id="29552"
/><path
d="M335.600941 910.637176H104.899765c-24.545882 0-43.550118-20.028235-43.550118-45.086117V107.098353c0-25.057882 19.636706-45.086118 44.182588-45.086118h742.912c23.913412 0 44.182588 20.028235 44.182589 44.453647V282.503529c0 16.896 13.492706 31.322353 30.659764 31.322353a30.72 30.72 0 0 0 30.689883-31.322353V106.465882C953.976471 47.585882 906.721882 0 849.046588 0H104.899765C47.224471 0 0 48.218353 0 107.098353v758.452706c0 58.88 46.622118 107.098353 104.297412 107.098353h230.671059c16.564706 0 30.659765-13.793882 30.659764-31.322353a30.027294 30.027294 0 0 0-30.057411-30.689883z"
fill="#0972E7"
p-id="29553"
/><path
d="M709.180235 219.196235c0-16.896-13.492706-31.322353-30.659764-31.322353H171.760941c-16.564706 0-30.659765 13.793882-30.659765 31.322353 0 16.926118 13.492706 31.322353 30.659765 31.322353h506.75953a30.72 30.72 0 0 0 30.659764-31.322353zM171.760941 436.525176c-16.564706 0-30.659765 13.793882-30.659765 31.322353 0 16.896 13.492706 31.322353 30.659765 31.322353h344.786824c16.564706 0 30.689882-13.793882 30.689882-31.322353 0-16.926118-13.522824-31.322353-30.689882-31.322353H171.760941z"
fill="#0972E7"
p-id="29554"
/></svg
>

View File

@@ -0,0 +1,8 @@
<!--
Copyright (C) 2025 Intel Corporation
SPDX-License-Identifier: Apache-2.0
-->
<svg class="h-5 w-5 flex-shrink-0 text-[#1d4dd5]" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon">
<path fill-rule="evenodd" d="M15.621 4.379a3 3 0 0 0-4.242 0l-7 7a3 3 0 0 0 4.241 4.243h.001l.497-.5a.75.75 0 0 1 1.064 1.057l-.498.501-.002.002a4.5 4.5 0 0 1-6.364-6.364l7-7a4.5 4.5 0 0 1 6.368 6.36l-3.455 3.553A2.625 2.625 0 1 1 9.52 9.52l3.45-3.451a.75.75 0 1 1 1.061 1.06l-3.45 3.451a1.125 1.125 0 0 0 1.587 1.595l3.454-3.553a3 3 0 0 0 0-4.242Z" clip-rule="evenodd"></path>
</svg>

After

Width:  |  Height:  |  Size: 601 B

View File

@@ -0,0 +1,13 @@
<!--
Copyright (C) 2025 Intel Corporation
SPDX-License-Identifier: Apache-2.0
-->
<svg
class="pointer-events-none absolute left-0 ml-4 hidden h-4 w-4 fill-current text-gray-500 group-hover:text-gray-400 sm:block"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 20 20"
><path
d="M12.9 14.32a8 8 0 1 1 1.41-1.41l5.35 5.33-1.42 1.42-5.33-5.34zM8 14A6 6 0 1 0 8 2a6 6 0 0 0 0 12z"
/></svg
>

After

Width:  |  Height:  |  Size: 413 B

View File

@@ -0,0 +1,17 @@
<!--
Copyright (C) 2025 Intel Corporation
SPDX-License-Identifier: Apache-2.0
-->
<svg
fill="none"
class="relative h-5 w-5"
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
stroke="currentColor"
viewBox="0 0 24 24"
><path
d="M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z"
/></svg
>

After

Width:  |  Height:  |  Size: 369 B

View File

@@ -0,0 +1,20 @@
<!--
Copyright (C) 2025 Intel Corporation
SPDX-License-Identifier: Apache-2.0
-->
<svg
t="1731987484014"
class="w-5 h-5"
viewBox="0 0 1267 1024"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="49311"
width="200"
height="200"
><path
d="M56.880762 910.214095H1194.666667a57.051429 57.051429 0 0 1 56.880762 56.905143A57.051429 57.051429 0 0 1 1194.666667 1024H56.880762A57.051429 57.051429 0 0 1 0 967.119238a57.051429 57.051429 0 0 1 56.880762-56.905143z m1024-56.880762H170.666667a114.102857 114.102857 0 0 1-113.785905-113.785904V113.785905A114.102857 114.102857 0 0 1 170.666667 0h910.214095A114.102857 114.102857 0 0 1 1194.666667 113.785905l-0.560762 625.761524C1194.105905 802.133333 1143.466667 853.333333 1080.880762 853.333333zM495.006476 227.328a198.948571 198.948571 0 0 0-63.219809 59.977143c-43.227429 63.707429-45.519238 150.747429-3.974096 215.600762 63.146667 99.547429 187.733333 120.027429 277.040762 63.146666l88.185905 88.161524a42.910476 42.910476 0 0 0 60.294095 0 42.910476 42.910476 0 0 0 0-60.294095l-88.746666-88.185905c49.493333-77.360762 40.399238-180.906667-26.745905-248.027428a198.92419 198.92419 0 0 0-242.834286-30.378667z m216.112762 170.910476a113.785905 113.785905 0 1 1-227.571809 0 113.785905 113.785905 0 0 1 227.571809 0z"
fill="#0377FF"
p-id="49312"
/></svg
>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -0,0 +1,22 @@
<!--
Copyright (C) 2025 Intel Corporation
SPDX-License-Identifier: Apache-2.0
-->
<svg
t="1730766012593"
viewBox="0 0 1024 1024"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="11065"
class="w-4 h-4"
><path
d="M996.693333 494.933333l-341.333333-126.293333-126.293333-341.333333c-3.413333-13.653333-27.306667-13.653333-30.72 0l-126.293334 341.333333-341.333333 126.293333c-6.826667 3.413333-10.24 10.24-10.24 17.066667s3.413333 13.653333 10.24 17.066667l341.333333 126.293333 126.293334 341.333333c3.413333 6.826667 10.24 10.24 17.066666 10.24s13.653333-3.413333 17.066667-10.24l126.293333-341.333333 341.333334-126.293333c6.826667-3.413333 10.24-10.24 10.24-17.066667s-6.826667-13.653333-13.653334-17.066667z m-314.026666 34.133334h-153.6V682.666667c0 10.24-6.826667 17.066667-17.066667 17.066666s-17.066667-6.826667-17.066667-17.066666v-153.6H341.333333c-10.24 0-17.066667-6.826667-17.066666-17.066667s6.826667-17.066667 17.066666-17.066667h153.6V341.333333c0-10.24 6.826667-17.066667 17.066667-17.066666s17.066667 6.826667 17.066667 17.066666v153.6H682.666667c10.24 0 17.066667 6.826667 17.066666 17.066667s-6.826667 17.066667-17.066666 17.066667z"
fill="#ffffff"
p-id="11066"
/><path
d="M293.546667 703.146667l-136.533334 136.533333c-6.826667 6.826667-6.826667 17.066667 0 23.893333 3.413333 3.413333 6.826667 3.413333 13.653334 3.413334s10.24 0 13.653333-3.413334l136.533333-136.533333c6.826667-6.826667 6.826667-17.066667 0-23.893333s-20.48-6.826667-27.306666 0zM716.8 324.266667c3.413333 0 10.24 0 13.653333-3.413334l136.533334-136.533333c6.826667-6.826667 6.826667-17.066667 0-23.893333s-17.066667-6.826667-23.893334 0l-136.533333 136.533333c-6.826667 6.826667-6.826667 17.066667 0 23.893333 0 0 6.826667 3.413333 10.24 3.413334zM293.546667 317.44c3.413333 3.413333 10.24 6.826667 13.653333 6.826667s10.24 0 13.653333-3.413334c6.826667-6.826667 6.826667-17.066667 0-23.893333l-136.533333-136.533333c-6.826667-6.826667-17.066667-6.826667-23.893333 0s-6.826667 17.066667 0 23.893333l133.12 133.12zM730.453333 703.146667c-6.826667-6.826667-17.066667-6.826667-23.893333 0s-6.826667 17.066667 0 23.893333l136.533333 136.533333c3.413333 3.413333 6.826667 3.413333 13.653334 3.413334s10.24 0 13.653333-3.413334c6.826667-6.826667 6.826667-17.066667 0-23.893333l-139.946667-136.533333z"
fill="#ffffff"
p-id="11067"
/></svg
>

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@@ -0,0 +1,44 @@
<!--
Copyright (C) 2025 Intel Corporation
SPDX-License-Identifier: Apache-2.0
-->
<svg
t="1731984744752"
class="w-12 h-12"
viewBox="0 0 1024 1024"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="31753"
width="200"
height="200"
><path
d="M244.224 370.78016h526.336c48.64 0 87.552 39.424 87.552 87.552v292.352c0 48.64-39.424 87.552-87.552 87.552H244.224c-48.64 0-87.552-39.424-87.552-87.552v-292.352c-0.512-48.128 38.912-87.552 87.552-87.552z"
fill="#CAE4FF"
p-id="31754"
/><path
d="M760.832 983.30624H245.76c-114.176 0-206.848-92.672-206.848-206.848v-357.888c0-114.176 92.672-206.336 206.848-206.848h515.072c114.176 0 206.336 92.672 206.848 206.848v357.888c0 114.176-92.672 206.848-206.848 206.848zM245.76 270.09024c-81.92 0-148.48 66.56-148.48 148.48v357.888c0 81.92 66.56 148.48 148.48 148.48h515.072c81.92 0 148.48-66.56 148.48-148.48v-357.888c0-81.92-66.56-148.48-148.48-148.48H245.76z"
fill="#0972E7"
p-id="31755"
/><path
d="M303.616 748.29824c0.512 14.848-11.264 27.648-26.112 28.16-14.848 0.512-27.648-11.264-28.16-26.112v-291.328c0.512-14.848 13.312-26.624 28.16-26.112 14.336 0.512 25.6 11.776 26.112 26.112v289.28z"
fill="#0972E7"
p-id="31756"
/><path
d="M742.912 758.53824c0 13.824-11.264 25.088-25.088 25.088H274.432c-13.824 0.512-25.6-9.728-26.112-23.552-0.512-13.824 9.728-25.6 23.552-26.112h446.464c13.312 0 24.576 11.264 24.576 24.576z m-261.12-224.768c-9.728-10.24-26.112-10.24-36.352-0.512l-78.848 79.36c-10.24 10.24-10.24 26.624 0 36.864 9.728 10.24 26.112 10.24 36.352 0.512l79.36-78.848c9.728-10.752 9.728-27.136-0.512-37.376z"
fill="#0972E7"
p-id="31757"
/><path
d="M564.736 648.97024c10.24-9.728 10.24-26.112 0-36.352l-79.36-78.848c-10.24-10.24-26.624-10.24-36.864 0-10.24 9.728-10.24 26.112 0 36.352l78.848 78.848c10.752 10.24 27.136 10.24 37.376 0z"
fill="#0972E7"
p-id="31758"
/><path
d="M649.216 533.77024c-9.728-10.24-26.112-10.24-36.352-0.512l-79.36 78.848c-10.24 10.24-10.24 26.624 0 36.864 9.728 10.24 26.112 10.24 36.352 0.512l79.36-78.848c9.728-10.24 9.728-26.624 0-36.864z"
fill="#0972E7"
p-id="31759"
/><path
d="M714.24 468.74624c-9.728-10.24-26.112-10.24-36.352-0.512l-79.36 78.848c-10.24 10.24-10.24 26.624 0 36.864 9.728 10.24 26.112 10.24 36.352 0.512l79.36-78.848c10.24-10.24 10.24-27.136 0-36.864zM97.792 404.74624H39.936c0-51.2-0.512-120.832-0.512-120.832 0-112.128 91.136-203.264 203.264-203.264h136.704c123.392 0 194.56 66.56 194.56 182.784h-57.856c0-83.968-44.544-124.928-136.192-124.928H242.688c-80.384 0-145.408 65.024-145.408 145.408 0 0 0.512 69.632 0.512 120.832z"
fill="#0972E7"
p-id="31760"
/></svg
>

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@@ -0,0 +1,24 @@
<!--
Copyright (C) 2025 Intel Corporation
SPDX-License-Identifier: Apache-2.0
-->
<svg
t="1731987065328"
class="w-5 h-5"
viewBox="0 0 1024 1024"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="35111"
width="200"
height="200"
><path
d="M740.565333 112c63.146667 0 114.304 51.2 114.304 114.304v457.130667H169.130667V226.304c0-63.146667 51.2-114.304 114.304-114.304h457.130666z m-219.434666 326.826667H331.434667c-32 0-48 16.042667-48 48.042666l0.213333 6.186667c2.005333 27.861333 17.92 41.813333 47.786667 41.813333h189.696c32 0 48-16 48-48l-0.213334-6.186666c-1.962667-27.904-17.92-41.813333-47.786666-41.813334z m171.434666-212.522667H331.434667c-32 0-48 16-48 48l0.213333 6.186667c2.005333 27.861333 17.92 41.813333 47.786667 41.813333h361.130666c32 0 48-16 48-48l-0.213333-6.186667c-2.005333-27.904-17.92-41.813333-47.786667-41.813333z"
fill="#93C0FB"
p-id="35112"
/><path
d="M154.752 422.101333l343.68 196.096a28.586667 28.586667 0 0 0 28.330667 0l342.485333-196.010666a28.586667 28.586667 0 0 1 42.752 24.789333v350.72c0 63.146667-51.2 114.304-114.304 114.304H226.261333c-63.104 0-114.261333-51.2-114.261333-114.304v-350.805333a28.586667 28.586667 0 0 1 42.752-24.789334z"
fill="#4B96F9"
p-id="35113"
/></svg
>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -0,0 +1,60 @@
<!--
Copyright (C) 2025 Intel Corporation
SPDX-License-Identifier: Apache-2.0
-->
<svg
t="1731987759041"
class="w-7 h-7"
viewBox="0 0 1230 1024"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="50480"
width="200"
height="200"
><path
d="M455.756297 168.055915a69.477515 69.477515 0 0 1-1.687986 16.069629c-2.768298 18.837927-9.385204 26.062508-9.385204 31.058948s5.536595 6.076751 10.465515 6.07675c30.991428 0 98.51088-32.679414 196.414084-32.679414 28.695767 0 112.554925 3.848609 112.554926 32.139259C764.117632 276.154556 533.403666 351.101147 533.403666 351.101147a0.540156 0.540156 0 0 0 0.540156 0.540156h15.461954c40.511671-2.228142 140.643017-39.36384 321.662667-39.36384 118.024001 0 291.819069 21.606224 291.819069 62.590531 0 23.901886-56.783859 73.731241-116.94369 121.535013-51.7199 40.849268-122.885402 77.51233-122.885402 118.024001 0 27.007781 30.856389 31.599103 59.012001 31.599103 55.703547 0 139.02255-19.378083 193.645786-19.378083 23.766847 0 54.623236 3.848609 54.623236 27.007781 0 37.743373-262.042991 370.344191-652.710536 370.344191-44.090202 0-102.021891-6.751945-102.021891-49.896875s55.163392-108.031122 103.169721-145.301859c38.080971-29.303442 67.519451-38.216009 67.519452-43.752605 0-3.308453-11.07319-3.916128-14.921799-3.916128-32.00422 0-110.866939 16.137149-183.720427 60.767507-55.703547 34.367401-71.165502 48.208888-121.535013 73.73124-31.396545 15.529474-63.94092 37.135698-110.326783 37.135699-62.320454 0-93.784518-37.743373-93.784518-93.716999 0-63.738362 60.767506-81.495978 60.767506-143.006198C183.180272 657.571937 47.263616 698.556244 47.263616 629.821443c0-29.911117 27.007781-65.966504 33.759726-74.811552 114.242912-152.458921 226.190162-143.613873 253.805618-157.995517 31.464064-16.069629-2.768298-25.522353-25.387314-25.522352-20.998549 0-45.778188 8.304893-67.519452 17.21746-9.385204 3.848609-22.078861 16.069629-40.51167 16.069629-14.921799 0-19.378083-14.989318-19.378083-29.978636C180.95213 282.231307 374.057761 143.681393 434.757748 143.681393c15.461954 0 20.998549 8.845048 20.998549 24.374522z"
fill="#E1EBFF"
p-id="50481"
/><path
d="M898.751418 191.350125H341.513385A24.712119 24.712119 0 0 0 316.666227 216.062244v671.886061a24.712119 24.712119 0 0 0 24.847158 24.374522h557.238033a25.049716 25.049716 0 0 0 24.847158-24.374522V216.062244a24.712119 24.712119 0 0 0-24.847158-24.374521"
fill="#335DFF"
p-id="50482"
/><path
d="M847.436635 853.783463h-458.457075a25.049716 25.049716 0 0 1-24.847159-24.374522V279.463009a24.6446 24.6446 0 0 1 24.847159-24.374522h458.457075a25.049716 25.049716 0 0 1 24.847158 24.374522v549.945932a24.712119 24.712119 0 0 1-24.847158 24.374522z"
fill="#FFFFFF"
p-id="50483"
/><path
d="M58.471845 792.273243H41.389424v-17.21746a8.507451 8.507451 0 0 0-8.304893-8.304893 8.439931 8.439931 0 0 0-8.237373 8.304893v17.21746H8.304893a8.304893 8.304893 0 1 0 0 16.609785h17.082421v17.21746A8.507451 8.507451 0 0 0 33.759726 834.40538a8.57497 8.57497 0 0 0 8.237373-8.304892v-17.21746h17.082421a8.304893 8.304893 0 1 0-0.607675-16.609785z"
fill="#D2DFFF"
p-id="50484"
/><path
d="M809.355664 225.717526h-371.356983a16.204668 16.204668 0 0 1-16.542265-16.069629v-39.903996a16.204668 16.204668 0 0 1 16.542265-16.137149h371.356983a16.204668 16.204668 0 0 1 16.609785 16.069629v40.511671a16.137149 16.137149 0 0 1-16.609785 15.529474z"
fill="#8FAFFF"
p-id="50485"
/><path
d="M677.490175 181.357246H570.471845A16.542266 16.542266 0 0 1 553.659502 165.287617v-55.973625a16.137149 16.137149 0 0 1 16.542265-16.06963h107.018331a16.542266 16.542266 0 0 1 16.609785 16.06963v56.513781a16.474746 16.474746 0 0 1-16.339708 15.529473z"
fill="#8FAFFF"
p-id="50486"
/><path
d="M459.13227 688.02321h280.205723a16.272188 16.272188 0 0 1 16.542265 16.609785v8.912567a16.272188 16.272188 0 0 1-16.542265 16.609785H459.13227a16.272188 16.272188 0 0 1-16.542266-16.002109v-9.520243A17.014902 17.014902 0 0 1 459.13227 688.02321z m0-111.947251h224.569695a16.272188 16.272188 0 0 1 16.542266 16.609785v8.845049a16.272188 16.272188 0 0 1-16.542266 16.677304H459.13227a16.272188 16.272188 0 0 1-16.542266-16.069629 1.890545 1.890545 0 0 1 0-0.607675v-8.845049A16.609785 16.609785 0 0 1 459.13227 576.075959z m0-112.014769h224.569695a16.272188 16.272188 0 0 1 16.542266 16.609785v8.912567a16.272188 16.272188 0 0 1-16.677305 16.812344H459.13227a16.204668 16.204668 0 0 1-16.542266-16.00211 1.890545 1.890545 0 0 1 0-0.607676v-9.115125A16.677304 16.677304 0 0 1 459.13227 464.06119z m0-111.947251h280.205723a16.272188 16.272188 0 0 1 16.879863 16.609785v8.912568a16.272188 16.272188 0 0 1-16.542266 16.609785H459.13227A16.339707 16.339707 0 0 1 442.454965 378.108928v-9.452723A16.609785 16.609785 0 0 1 459.13227 352.113939zM247.526309 0.810233l-10.465515 18.905447a39.093762 39.093762 0 0 1-14.921799 14.921799l-18.230252 10.533034a2.160622 2.160622 0 0 0 0 3.375973l18.230252 10.465515A39.296321 39.296321 0 0 1 237.060794 74.271397l10.465515 18.837926a2.025584 2.025584 0 0 0 3.308453 0L261.300277 74.271397a38.823685 38.823685 0 0 1 14.921799-14.989319l18.230252-10.465515a2.160622 2.160622 0 0 0 0-3.375972l-18.230252-10.533035a38.621126 38.621126 0 0 1-14.921799-15.191876L250.834762 0.810233c-0.540156-0.810233-2.228142-0.810233-3.308453 0zM1057.624687 183.585388a22.754055 22.754055 0 1 1-22.011341 22.686536 21.606224 21.606224 0 0 1 22.011341-22.686536z m0-11.07319a33.759726 33.759726 0 0 0-33.084531 33.759726 33.152051 33.152051 0 1 0 66.236581 0 33.354609 33.354609 0 0 0-33.15205-33.759726z"
fill="#D2DFFF"
p-id="50487"
/><path
d="M642.785177 138.144798a22.821575 22.821575 0 0 1-22.686535 22.686535 22.281419 22.281419 0 0 1-22.551497-22.213899 1.147831 1.147831 0 0 1 0-0.472636 22.821575 22.821575 0 0 1 22.619016-22.754056 22.416458 22.416458 0 0 1 22.686536 22.2139z m68.059607 445.628379A178.791507 178.791507 0 1 0 762.969801 456.971647a179.66926 179.66926 0 0 0-52.125017 126.869049z"
fill="#FFFFFF"
p-id="50488"
/><path
d="M889.298694 436.91837a145.706976 145.706976 0 0 0-145.504417 145.909535v1.012791a145.571937 145.571937 0 1 0 291.076355 0.742714v-0.742714a146.787287 146.787287 0 0 0-145.571938-146.989845z"
fill="#2ED073"
p-id="50489"
/><path
d="M856.230925 638.373959m5.681472-5.681472l95.534667-95.534667q5.681472-5.681472 11.362944 0l0 0q5.681472 5.681472 0 11.362943l-95.534667 95.534668q-5.681472 5.681472-11.362944 0l0 0q-5.681472-5.681472 0-11.362944Z"
fill="#FFFFFF"
p-id="50490"
/><path
d="M804.217647 586.365756m5.681472-5.681472l0 0q5.681472-5.681472 11.362944 0l51.944886 51.944887q5.681472 5.681472 0 11.362944l0 0q-5.681472 5.681472-11.362944 0l-51.944886-51.944887q-5.681472-5.681472 0-11.362944Z"
fill="#FFFFFF"
p-id="50491"
/></svg
>

After

Width:  |  Height:  |  Size: 6.6 KiB

View File

@@ -0,0 +1,8 @@
<!--
Copyright (C) 2025 Intel Corporation
SPDX-License-Identifier: Apache-2.0
-->
<svg class="w-2.5 h-2.5 text-blue-800 dark:text-blue-300" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20">
<path d="M20 4a2 2 0 0 0-2-2h-2V1a1 1 0 0 0-2 0v1h-3V1a1 1 0 0 0-2 0v1H6V1a1 1 0 0 0-2 0v1H2a2 2 0 0 0-2 2v2h20V4ZM0 18a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V8H0v10Zm5-8h10a1 1 0 0 1 0 2H5a1 1 0 0 1 0-2Z"/>
</svg>

After

Width:  |  Height:  |  Size: 451 B

View File

@@ -0,0 +1,36 @@
<!--
Copyright (C) 2025 Intel Corporation
SPDX-License-Identifier: Apache-2.0
-->
<svg
t="1731987374334"
class="w-4 h-4"
viewBox="0 0 1024 1024"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="47097"
width="200"
height="200"
><path
d="M210.488889 246.670222m35.043555 0l349.923556 0q35.043556 0 35.043556 35.043556l0 0.056889q0 35.043556-35.043556 35.043555l-349.923556 0q-35.043556 0-35.043555-35.043555l0-0.056889q0-35.043556 35.043555-35.043556Z"
fill="#89BAF7"
p-id="47098"
/><path
d="M210.488889 471.210667m35.043555 0l349.923556 0q35.043556 0 35.043556 35.043555l0 0.056889q0 35.043556-35.043556 35.043556l-349.923556 0q-35.043556 0-35.043555-35.043556l0-0.056889q0-35.043556 35.043555-35.043555Z"
fill="#89BAF7"
p-id="47099"
/><path
d="M210.488889 695.296m35.043555 0l140.344889 0q35.043556 0 35.043556 35.043556l0 0.056888q0 35.043556-35.043556 35.043556l-140.344889 0q-35.043556 0-35.043555-35.043556l0-0.056888q0-35.043556 35.043555-35.043556Z"
fill="#89BAF7"
p-id="47100"
/><path
d="M436.565333 982.186667h-261.176889a175.559111 175.559111 0 0 1-175.331555-175.388445v-631.466666a175.559111 175.559111 0 0 1 175.331555-175.388445h490.951112a175.559111 175.559111 0 0 1 175.331555 175.388445v278.016a35.100444 35.100444 0 1 1-70.144 0v-278.016a105.358222 105.358222 0 0 0-105.187555-105.244445h-490.951112a105.358222 105.358222 0 0 0-105.187555 105.244445v631.466666a105.358222 105.358222 0 0 0 105.187555 105.244445h261.176889a35.100444 35.100444 0 0 1 0 70.144z"
fill="#0A71EF"
p-id="47101"
/><path
d="M1008.184889 628.167111l-5.688889-11.889778-2.104889-2.616889a19.683556 19.683556 0 0 0-24.519111-2.616888h-0.910222l-97.28 97.336888-49.265778-49.265777 101.489778-101.717334-1.080889-1.422222a18.090667 18.090667 0 0 0-4.039111-18.944 16.668444 16.668444 0 0 0-5.688889-3.868444l-10.695111-4.721778a192.056889 192.056889 0 0 0-258.958222 235.292444l-105.927112 105.927111a87.608889 87.608889 0 0 0 0 123.619556 87.608889 87.608889 0 0 0 123.448889 0l105.927111-106.097778a188.757333 188.757333 0 0 0 59.278223 9.500445 192.056889 192.056889 0 0 0 176.355555-268.288z m-176.355556 215.836445a137.728 137.728 0 0 1-55.409777-11.377778l-16.327112-6.997334-130.446222 130.446223a35.669333 35.669333 0 0 1-49.265778 0 34.702222 34.702222 0 0 1 0-49.265778l130.446223-130.446222-6.997334-16.497778a136.192 136.192 0 0 1-11.377777-55.239111 139.719111 139.719111 0 0 1 139.548444-139.548445 111.502222 111.502222 0 0 1 15.303111 0.853334l-79.985778 79.985777a20.650667 20.650667 0 0 0-3.356444 21.219556l-0.512 1.251556 101.489778 101.546666a19.569778 19.569778 0 0 0 24.746666 0.341334l81.009778-81.009778a151.210667 151.210667 0 0 1 0.853333 15.416889 139.719111 139.719111 0 0 1-139.605333 139.320889z"
fill="#FD7733"
p-id="47102"
/></svg
>

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@@ -0,0 +1,28 @@
<!--
Copyright (C) 2025 Intel Corporation
SPDX-License-Identifier: Apache-2.0
-->
<svg
t="1699532005309"
class="icon"
viewBox="0 0 1024 1024"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="31791"
width="1rem"
height="1rem"
><path
d="M505.088 513.1264m-450.816 0a450.816 450.816 0 1 0 901.632 0 450.816 450.816 0 1 0-901.632 0Z"
fill="#e02424"
p-id="31792"
data-spm-anchor-id="a313x.search_index.0.i28.33343a81AAN1qI"
class="selected"
/><path
d="M356.6592 575.0784c0-54.5792 0.3584-109.1584-0.2048-163.6864-0.1536-15.872 5.5296-24.2176 20.992-29.5424 58.88-20.2752 93.7472-63.1296 110.848-121.9072 5.9392-20.4288 11.4176-41.216 19.7632-60.672 13.4656-31.5904 38.2464-42.7008 72.6528-35.328 26.5216 5.6832 43.3152 28.3648 43.5712 60.16 0.3584 40.4992 0.0512 80.9984 0.1536 121.4976 0.0512 22.2208 3.9424 26.7264 26.5728 26.9824 45.568 0.512 91.1872 1.536 136.704-0.256 40.5504-1.5872 69.9392 24.832 59.7504 69.9904-12.2368 54.0672-27.648 107.4688-42.7008 160.8704-9.2672 32.9216-20.1728 65.4336-30.8736 97.9456-14.1312 43.008-40.448 62.0544-84.8896 62.0544H390.2976c-32.1024 0-33.6384-1.536-33.6384-32.8704v-155.2384zM307.8656 573.9008c0 52.8896 0.1024 105.7792-0.0512 158.6688-0.1024 26.0096-4.9152 30.6176-30.3616 30.6688-7.3216 0-14.6432 0.0512-21.9648 0-29.8496-0.1536-44.032-14.08-44.2368-44.6976-0.3072-55.1424-0.1024-110.2848-0.1024-165.4272 0-40.4992-0.1536-81.0496 0.0512-121.5488 0.2048-32.2048 15.7696-47.616 47.5136-47.7184 49.1008-0.2048 49.152-0.2048 49.152 48.2304 0.0512 47.2576 0.0512 94.5152 0 141.824z"
fill="#ffffff"
p-id="31793"
data-spm-anchor-id="a313x.search_index.0.i26.33343a81AAN1qI"
class=""
/></svg
>

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -0,0 +1,24 @@
<!--
Copyright (C) 2025 Intel Corporation
SPDX-License-Identifier: Apache-2.0
-->
<svg
t="1699531880178"
class="icon"
viewBox="0 0 1024 1024"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="26552"
width="1rem"
height="1rem"
><path
d="M505.088 513.1264m-450.816 0a450.816 450.816 0 1 0 901.632 0 450.816 450.816 0 1 0-901.632 0Z"
fill="#FFBC42"
p-id="26553"
/><path
d="M356.6592 575.0784c0-54.5792 0.3584-109.1584-0.2048-163.6864-0.1536-15.872 5.5296-24.2176 20.992-29.5424 58.88-20.2752 93.7472-63.1296 110.848-121.9072 5.9392-20.4288 11.4176-41.216 19.7632-60.672 13.4656-31.5904 38.2464-42.7008 72.6528-35.328 26.5216 5.6832 43.3152 28.3648 43.5712 60.16 0.3584 40.4992 0.0512 80.9984 0.1536 121.4976 0.0512 22.2208 3.9424 26.7264 26.5728 26.9824 45.568 0.512 91.1872 1.536 136.704-0.256 40.5504-1.5872 69.9392 24.832 59.7504 69.9904-12.2368 54.0672-27.648 107.4688-42.7008 160.8704-9.2672 32.9216-20.1728 65.4336-30.8736 97.9456-14.1312 43.008-40.448 62.0544-84.8896 62.0544H390.2976c-32.1024 0-33.6384-1.536-33.6384-32.8704v-155.2384zM307.8656 573.9008c0 52.8896 0.1024 105.7792-0.0512 158.6688-0.1024 26.0096-4.9152 30.6176-30.3616 30.6688-7.3216 0-14.6432 0.0512-21.9648 0-29.8496-0.1536-44.032-14.08-44.2368-44.6976-0.3072-55.1424-0.1024-110.2848-0.1024-165.4272 0-40.4992-0.1536-81.0496 0.0512-121.5488 0.2048-32.2048 15.7696-47.616 47.5136-47.7184 49.1008-0.2048 49.152-0.2048 49.152 48.2304 0.0512 47.2576 0.0512 94.5152 0 141.824z"
fill="#FFFFFF"
p-id="26554"
/></svg
>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -0,0 +1,28 @@
<!--
Copyright (C) 2025 Intel Corporation
SPDX-License-Identifier: Apache-2.0
-->
<svg
t="1697617760586"
class="h-10 w-10"
viewBox="0 0 1024 1024"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="5216"
width="200"
height="200"
><path
d="M826.9 461.6h-723v391.5c0 21.7 17.7 39.4 39.4 39.4h677c4.1-6.4 6.6-14.1 6.6-22.3V461.6zM826.9 422.3v-64.7c0-22.9-18.6-41.6-41.6-41.6H340l-32.7-61.2c-7.2-13.5-21.3-22-36.7-22H134.9c-12.4 0-23.4 5.5-31 14.2v175.2l723 0.1z"
fill="#FFD524"
p-id="5217"
/><path
d="M687 252.6h11.4c10.8 0 19.6-8.8 19.6-19.6s-8.8-19.6-19.6-19.6H687c-10.8 0-19.6 8.8-19.6 19.6s8.8 19.6 19.6 19.6zM753.3 252.6h18c10.8 0 19.6-8.8 19.6-19.6s-8.8-19.6-19.6-19.6h-18c-10.8 0-19.6 8.8-19.6 19.6s8.7 19.6 19.6 19.6z"
fill="#6B400D"
p-id="5218"
/><path
d="M881.6 213.3h-44.9c-10.8 0-19.6 8.8-19.6 19.6s8.8 19.6 19.6 19.6h44.9c21.7 0 39.4 17.7 39.4 39.4v130.3H103.8V173.9c0-21.7 17.7-39.4 39.4-39.4h193c14.6 0 27.9 8 34.7 20.8l46.5 86.9c3.4 6.4 10.1 10.4 17.3 10.4h84.5c10.8 0 19.6-8.8 19.6-19.6s-8.8-19.6-19.6-19.6h-72.7l-40.9-76.5c-13.7-25.7-40.3-41.6-69.4-41.6H143.3c-43.4 0-78.7 35.3-78.7 78.7v679.3c0 43.4 35.3 78.7 78.7 78.7h738.3c43.4 0 78.7-35.3 78.7-78.7V292c0-43.4-35.3-78.7-78.7-78.7z m39.5 639.8c0 21.7-17.7 39.4-39.4 39.4H143.4c-21.7 0-39.4-17.7-39.4-39.4V461.6h817.2v391.5z"
fill="#6B400D"
p-id="5219"
/></svg
>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -0,0 +1,38 @@
<!--
Copyright (C) 2025 Intel Corporation
SPDX-License-Identifier: Apache-2.0
-->
<svg
class="h-10 w-10"
viewBox="0 0 1024 1024"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
width="200"
height="200"
><path
d="M192.028 0.008c-47.06 0-85.34 38.282-85.34 85.342V853.34c0 11.782 9.53 21.312 21.342 21.312h106.654V0.008H192.028z"
fill="#656D78"
/><path
d="M192.028 789.34c-35.374 0-63.998 28.656-63.998 64s28.624 63.996 63.998 63.996H896V789.34H192.028z"
fill="#E6E9ED"
/><path
d="M917.312 21.352c0-11.782-9.562-21.344-21.312-21.344H234.684v810.644H896c11.75 0 21.312-9.532 21.312-21.312V21.352z"
fill="#5D9CEC"
/><path
d="M384.026 874.652H213.34c-11.75 0-21.312-9.532-21.312-21.312s9.562-21.344 21.312-21.344h170.686c11.782 0 21.312 9.562 21.312 21.344s-9.532 21.312-21.312 21.312zM725.316 831.996c-11.75 0-21.312 9.562-21.312 21.344s9.562 21.312 21.312 21.312H896v-42.656h-170.684z"
fill="#CCD1D9"
/><path d="M320.026 149.35h490.662v255.996H320.026z" fill="#E6E9ED" /><path
d="M128.03 170.678c11.782 0 21.312-9.546 21.312-21.328s-9.532-21.344-21.312-21.344H106.686v42.672h21.344zM128.03 298.676c11.782 0 21.312-9.546 21.312-21.328 0-11.78-9.532-21.342-21.312-21.342H106.686v42.67h21.344zM128.03 426.672c11.782 0 21.312-9.546 21.312-21.328 0-11.78-9.532-21.342-21.312-21.342H106.686v42.67h21.344zM128.03 554.656c11.782 0 21.312-9.532 21.312-21.312S139.81 512 128.03 512H106.686v42.656h21.344zM128.03 682.656c11.782 0 21.312-9.532 21.312-21.312S139.81 640 128.03 640H106.686v42.656h21.344zM725.316 298.676h-319.98c-11.75 0-21.312-9.546-21.312-21.328 0-11.78 9.562-21.342 21.312-21.342h319.98c11.812 0 21.376 9.562 21.376 21.342s-9.564 21.328-21.376 21.328z"
fill="#434A54"
/><path
d="M917.312 917.336c0-11.782-9.562-21.344-21.312-21.344H234.684v42.656H896c11.75 0 21.312-9.53 21.312-21.312z"
fill="#5D9CEC"
/><path
d="M234.684 895.992H192.028c-23.53 0-42.686-19.152-42.686-42.652 0-23.532 19.156-42.688 42.686-42.688h42.656v-42.656H192.028c-47.06 0-85.34 38.282-85.34 85.344 0 47.028 38.28 85.308 85.34 85.308h42.656v-42.656z"
fill="#656D78"
/><path
d="M362.682 853.34H213.34v149.308c0 6.876 3.312 13.312 8.876 17.312s12.718 5.094 19.218 2.938l57.25-19.094 57.25 19.094c2.218 0.718 4.468 1.094 6.75 1.094 4.406 0 8.782-1.376 12.468-4.032 5.562-4 8.876-10.438 8.876-17.312V853.34h-21.346z"
fill="#ED5564"
/></svg
>

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@@ -0,0 +1,32 @@
<!--
Copyright (C) 2025 Intel Corporation
SPDX-License-Identifier: Apache-2.0
-->
<svg
t="1699516160889"
class="icon"
viewBox="0 0 1024 1024"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="1937"
width="14"
height="14"
><path
d="M226.94 618.816L191.296 751.88l-130.278 2.756C22.084 682.422 0 599.8 0 512c0-84.902 20.648-164.966 57.248-235.464h0.028L173.26 297.8l50.808 115.288c-10.634 31.002-16.43 64.282-16.43 98.912 0.004 37.584 6.812 73.594 19.302 106.816z"
fill="#FBBB00"
p-id="1938"
/><path
d="M1015.054 416.352C1020.934 447.324 1024 479.31 1024 512c0 36.656-3.854 72.412-11.196 106.902-24.924 117.366-90.05 219.85-180.268 292.374l-0.028-0.028-146.088-7.454-20.676-129.07c59.864-35.108 106.648-90.05 131.292-155.822h-273.78V416.352h491.798z"
fill="#518EF8"
p-id="1939"
/><path
d="M832.506 911.248l0.028 0.028C744.792 981.802 633.332 1024 512 1024c-194.982 0-364.504-108.982-450.982-269.362l165.922-135.82c43.238 115.396 154.556 197.542 285.06 197.542 56.094 0 108.646-15.164 153.74-41.636l166.766 136.524z"
fill="#28B446"
p-id="1940"
/><path
d="M838.808 117.872l-165.866 135.792C626.272 224.492 571.104 207.64 512 207.64c-133.458 0-246.858 85.914-287.93 205.448l-166.794-136.552h-0.028C142.46 112.246 314.12 0 512 0c124.23 0 238.136 44.252 326.808 117.872z"
fill="#F14336"
p-id="1941"
/></svg
>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -0,0 +1,41 @@
<!--
Copyright (C) 2025 Intel Corporation
SPDX-License-Identifier: Apache-2.0
-->
<svg
t="1689149335476"
class="icon"
viewBox="0 0 1024 1024"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="1964"
width="32"
height="32"
data-spm-anchor-id="a313x.7781069.0.i17"
><path
d="M949.333333 96v704H614.4l-21.333333 25.6v2.133333L512 906.666667l-78.933333-78.933334-2.133334-2.133333-21.333333-25.6H74.666667v-704h874.666666M960 21.333333H64C27.733333 21.333333 0 49.066667 0 85.333333v725.333334c0 36.266667 27.733333 64 64 64h311.466667v2.133333l121.6 121.6c4.266667 4.266667 10.666667 6.4 14.933333 6.4s10.666667-2.133333 14.933333-6.4l121.6-121.6V874.666667H960c36.266667 0 64-27.733333 64-64V85.333333c0-36.266667-27.733333-64-64-64z"
fill="#0071c5"
p-id="1965"
data-spm-anchor-id="a313x.7781069.0.i8"
class=""
/><path
d="M512 601.6c-21.333333 0-38.4-17.066667-38.4-36.266667v-27.733333c0-21.333333 17.066667-36.266667 36.266667-36.266667 21.333333 0 36.266667 17.066667 36.266666 36.266667v27.733333c4.266667 19.2-12.8 36.266667-34.133333 36.266667z"
fill="#0071c5"
p-id="1966"
data-spm-anchor-id="a313x.7781069.0.i9"
class=""
/><path
d="M512 742.4c-23.466667 0-42.666667-19.2-42.666667-42.666667s19.2-42.666667 42.666667-42.666666 42.666667 19.2 42.666667 42.666666-19.2 42.666667-42.666667 42.666667z"
fill="#0071c5"
p-id="1967"
data-spm-anchor-id="a313x.7781069.0.i7"
class="selected"
/><path
d="M512 576c-21.333333 0-38.4-17.066667-38.4-38.4s17.066667-38.4 38.4-38.4c68.266667 0 121.6-55.466667 121.6-123.733333S580.266667 256 512 256c-64 0-119.466667 51.2-121.6 115.2-2.133333 21.333333-19.2 36.266667-38.4 34.133333-21.333333-2.133333-36.266667-19.2-34.133333-38.4 6.4-104.533333 91.733333-185.6 196.266666-185.6 108.8 0 196.266667 87.466667 196.266667 196.266667S620.8 576 512 576z"
fill="#0071c5"
p-id="1968"
data-spm-anchor-id="a313x.7781069.0.i10"
class="selected"
/></svg
>

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -0,0 +1,6 @@
<!--
Copyright (C) 2025 Intel Corporation
SPDX-License-Identifier: Apache-2.0
-->
<svg t="1689232479587" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="20682" width="32" height="32"><path d="M512 512m-384 0a384 384 0 1 0 768 0 384 384 0 1 0-768 0Z" fill="#2196F3" p-id="20683"></path><path d="M465.28 613.333333c0-134.4 109.013333-138.453333 109.013333-217.386666a58.88 58.88 0 0 0-61.013333-64 59.093333 59.093333 0 0 0-64 59.946666h-81.066667c0-21.333333 10.24-128 144.64-128 142.08 0 142.08 108.586667 142.08 128 0 106.666667-114.346667 119.04-114.346666 220.373334z m-5.546667 103.68a42.666667 42.666667 0 0 1 45.653334-43.946666 42.666667 42.666667 0 0 1 45.866666 43.946666 42.666667 42.666667 0 0 1-45.866666 42.666667 42.666667 42.666667 0 0 1-45.653334-42.666667z" fill="#FFFFFF" p-id="20684"></path></svg>

After

Width:  |  Height:  |  Size: 866 B

View File

@@ -0,0 +1,92 @@
<!--
Copyright (C) 2025 Intel Corporation
SPDX-License-Identifier: Apache-2.0
-->
<svg
t="1710303075816"
class="icon"
viewBox="0 0 1024 1024"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="32606"
width="6rem"
height="6rem"
><path
d="M241.0496 404.48a31.470933 31.470933 0 0 1-31.1296-28.2624 31.061333 31.061333 0 1 1 33.5872 28.2624z m0-54.613333H238.933333A23.415467 23.415467 0 0 0 217.7024 375.466667a23.7568 23.7568 0 0 0 25.3952 21.2992 23.415467 23.415467 0 0 0-2.048-46.6944z m572.6208 331.3664a22.254933 22.254933 0 0 1-21.777067-19.933867 21.504 21.504 0 0 1 20.0704-23.7568 22.596267 22.596267 0 0 1 15.9744 4.9152 21.162667 21.162667 0 0 1 7.7824 15.1552 21.504 21.504 0 0 1-20.0704 23.7568z m0-36.4544H812.373333a14.882133 14.882133 0 0 0-13.1072 15.5648 14.609067 14.609067 0 0 0 15.5648 13.1072 14.882133 14.882133 0 0 0 13.1072-15.5648 14.609067 14.609067 0 0 0-14.267733-12.970667z m-493.568-375.466667a16.1792 16.1792 0 0 1-11.0592-4.096 17.8176 17.8176 0 0 1-6.144-11.8784 17.271467 17.271467 0 0 1 34.133333-3.2768 16.452267 16.452267 0 0 1-4.096 12.6976 16.1792 16.1792 0 0 1-11.8784 6.144 1.501867 1.501867 0 0 1-0.955733 0.4096z m0-27.306667h-0.8192A9.284267 9.284267 0 0 0 310.6816 252.586667a10.103467 10.103467 0 0 0 3.345067 6.826666 8.8064 8.8064 0 0 0 6.826666 2.048 10.103467 10.103467 0 0 0 6.826667-3.2768 8.8064 8.8064 0 0 0 2.048-6.826666 9.352533 9.352533 0 0 0-9.6256-9.079467z"
fill="#82A0F6"
p-id="32607"
/><path
d="M254.1568 719.0528h-32.3584a3.6864 3.6864 0 1 1 0-7.3728h32.3584a3.6864 3.6864 0 0 1 0 7.3728z"
fill="#2B77EF"
p-id="32608"
/><path
d="M237.7728 735.0272a3.6864 3.6864 0 0 1-3.6864-3.6864v-32.3584a3.6864 3.6864 0 1 1 7.3728 0v32.3584c0.4096 2.048-1.2288 3.6864-3.6864 3.6864z"
fill="#2B77EF"
p-id="32609"
/><path
d="M800.9728 430.6944h-32.3584a3.6864 3.6864 0 1 1 0-7.3728h32.3584a3.6864 3.6864 0 1 1 0 7.3728z"
fill="#82A0F6"
p-id="32610"
/><path
d="M785.066667 446.6688a3.6864 3.6864 0 0 1-3.6864-3.6864v-32.3584a3.6864 3.6864 0 0 1 7.3728 0v32.3584a3.6864 3.6864 0 0 1-3.6864 3.6864z"
fill="#82A0F6"
p-id="32611"
/><path
d="M531.8656 645.7344h-315.392a31.9488 31.9488 0 0 1 0-63.8976h315.392a31.9488 31.9488 0 1 1 0 63.8976z"
fill="#E3EEFF"
p-id="32612"
/><path
d="M533.0944 759.6032h-4.5056a56.9344 56.9344 0 0 1 0-113.8688h4.5056v-63.8976H237.7728v63.8976h107.3152a56.9344 56.9344 0 1 1 0 113.8688H237.7728v63.8976H532.48v-63.8976z"
fill="#E3EEFF"
p-id="32613"
/><path
d="M550.7072 484.693333a21.640533 21.640533 0 0 0-20.8896-21.2992h-211.626667a21.2992 21.2992 0 0 0 0 42.5984h86.016a38.0928 38.0928 0 1 1 0 76.1856H332.8v43.008h197.0176v-43.008h-3.2768a38.0928 38.0928 0 1 1 0-76.1856h3.2768A21.640533 21.640533 0 0 0 550.7072 484.693333zM669.013333 759.6032H216.4736a31.9488 31.9488 0 1 0 0 63.8976H669.013333z m11.8784 0h27.306667v63.8976h-27.306667z m59.8016 0h17.066667v63.8976h-17.6128z m67.1744 0h-40.5504v63.8976h40.5504a31.9488 31.9488 0 0 0 0-63.8976z"
fill="#E3EEFF"
p-id="32614"
/><path
d="M803.4304 273.408a3.6864 3.6864 0 0 1-3.6864-3.6864V245.76l-16.7936 16.7936a3.754667 3.754667 0 0 1-5.3248-5.3248l16.7936-16.7936h-24.1664a3.6864 3.6864 0 1 1 0-7.3728h23.7568l-16.7936-16.7936a3.754667 3.754667 0 0 1 5.3248-5.3248l16.7936 16.7936v-23.552a3.6864 3.6864 0 0 1 7.3728 0v23.7568l16.7936-16.7936a3.754667 3.754667 0 0 1 5.3248 5.3248L812.373333 233.2672h23.7568a3.6864 3.6864 0 0 1 0 7.3728H812.373333l16.7936 16.7936a3.754667 3.754667 0 0 1-5.3248 5.3248L806.7072 245.76v23.7568a3.140267 3.140267 0 0 1-3.2768 3.8912z"
fill="#82A0F6"
p-id="32615"
/><path
d="M669.013333 735.8464c0 20.0704-13.653333 36.4544-30.72 36.4544 16.7936 0 30.72 16.384 30.72 36.4544 0-20.0704 13.653333-36.4544 30.72-36.4544-17.066667 0-30.72-16.384-30.72-36.4544z"
fill="#76A6EF"
p-id="32616"
/><path
d="M644.5056 269.312a22.254933 22.254933 0 0 1-13.653333-4.9152 20.48 20.48 0 0 1-7.3728-14.7456 21.572267 21.572267 0 0 1 4.573866-15.5648 20.48 20.48 0 0 1 14.7456-7.3728 21.572267 21.572267 0 0 1 15.5648 4.9152 20.48 20.48 0 0 1 7.3728 14.7456 21.572267 21.572267 0 0 1-4.9152 15.5648 20.48 20.48 0 0 1-14.7456 7.3728z m0-35.2256h-1.2288a13.653333 13.653333 0 0 0-7.7824 24.1664 15.018667 15.018667 0 0 0 9.8304 3.2768 13.653333 13.653333 0 0 0 7.7824-24.1664 12.424533 12.424533 0 0 0-8.6016-3.2768z"
fill="#82A0F6"
p-id="32617"
/><path
d="M740.7616 442.9824H612.5568A12.970667 12.970667 0 0 1 599.4496 430.08V301.2608a12.970667 12.970667 0 0 0-13.1072-13.1072H437.6576a12.970667 12.970667 0 0 0-13.1072 13.1072v128.2048a12.970667 12.970667 0 0 1-13.1072 13.1072H282.8288a12.970667 12.970667 0 0 0-13.1072 13.1072v148.2752a12.970667 12.970667 0 0 0 13.1072 13.1072h128.2048a12.970667 12.970667 0 0 1 13.1072 13.1072v128.2048a12.970667 12.970667 0 0 0 13.1072 13.038933h148.6848a12.970667 12.970667 0 0 0 13.1072-13.1072V630.5792a12.970667 12.970667 0 0 1 13.1072-13.1072h128.2048a12.970667 12.970667 0 0 0 13.1072-13.1072V456.0896a12.356267 12.356267 0 0 0-12.6976-13.1072z"
fill="#C7DDFF"
p-id="32618"
/><path
d="M399.9744 452.8128h18.432c15.9744 0 29.0816-11.0592 29.0816-24.9856v-137.216h-22.9376v147.456z m2.048 158.1056h18.432c15.9744 0 29.0816 11.0592 29.0816 24.9856v136.533333h-22.9376v-146.773333z"
fill="#FFFFFF"
p-id="32619"
/><path
d="M740.7616 442.9824H612.5568A12.970667 12.970667 0 0 1 599.4496 430.08V301.2608a12.970667 12.970667 0 0 0-13.1072-13.1072H437.6576a12.970667 12.970667 0 0 0-13.1072 13.1072v2.4576h134.7584a12.970667 12.970667 0 0 1 13.1072 13.1072v128.2048a12.970667 12.970667 0 0 0 13.1072 13.1072h128.2048a12.970667 12.970667 0 0 1 13.1072 12.9024v146.0224h13.1072a12.970667 12.970667 0 0 0 13.1072-13.1072V456.0896a11.810133 11.810133 0 0 0-12.288-13.1072z"
fill="#76A6EF"
p-id="32620"
/><path
d="M295.1168 447.0784v166.2976h-12.6976L269.7216 600.746667V459.776l12.6976-12.6976z"
fill="#FFFFFF"
p-id="32621"
/><path
d="M269.7216 536.3712a6.280533 6.280533 0 0 1-6.144-6.144v-19.2512a6.144 6.144 0 1 1 12.288 0v19.2512a6.280533 6.280533 0 0 1-6.144 6.144z m0-47.104a6.280533 6.280533 0 0 1-6.144-6.144v-27.306667A19.2512 19.2512 0 0 1 282.8288 436.906667h128.2048a7.168 7.168 0 0 0 6.826667-6.826667V352.0512a6.144 6.144 0 1 1 12.288 0V430.08a19.2512 19.2512 0 0 1-19.2512 19.2512H282.8288a7.168 7.168 0 0 0-6.826667 6.826667v27.306666a6.280533 6.280533 0 0 1-6.280533 5.802667z"
fill="#2B77EF"
p-id="32622"
/><path
d="M585.9328 778.24H437.6576a19.2512 19.2512 0 0 1-19.2512-19.2512V630.5792a7.168 7.168 0 0 0-6.826667-6.826667H282.8288a19.2512 19.2512 0 0 1-19.2512-19.2512v-45.056a6.144 6.144 0 0 1 12.288 0v45.056a7.168 7.168 0 0 0 6.826667 6.826667h128.341333A19.2512 19.2512 0 0 1 430.08 630.5792v128.2048a7.168 7.168 0 0 0 6.826667 6.826667h149.026133a7.168 7.168 0 0 0 6.826667-6.826667V630.5792a19.2512 19.2512 0 0 1 19.2512-19.2512h128.2048a7.168 7.168 0 0 0 6.826666-6.826667V456.0896a7.168 7.168 0 0 0-6.826666-6.826667H612.1472A19.2512 19.2512 0 0 1 592.896 430.08V301.2608a7.168 7.168 0 0 0-6.826667-6.826667H437.6576a7.168 7.168 0 0 0-6.826667 6.826667v23.3472a6.144 6.144 0 1 1-12.288 0v-23.3472a19.2512 19.2512 0 0 1 19.2512-19.2512h148.138667a19.2512 19.2512 0 0 1 19.2512 19.2512v128.2048a7.168 7.168 0 0 0 6.826667 6.826667h128.2048a19.2512 19.2512 0 0 1 19.2512 19.2512v148.411733a19.2512 19.2512 0 0 1-19.2512 19.2512H612.1472a7.168 7.168 0 0 0-6.826667 6.826667v128.2048a19.456 19.456 0 0 1-19.387733 20.002133z"
fill="#2B77EF"
p-id="32623"
/><path
d="M556.4416 540.4672H474.9312a6.826667 6.826667 0 0 1 0-13.653333h81.5104a6.826667 6.826667 0 0 1 0 13.653333z"
fill="#F68282"
p-id="32624"
/><path
d="M508.928 574.0544V492.9536a6.826667 6.826667 0 0 1 13.653333 0v81.5104a7.168 7.168 0 0 1-6.826666 6.826667 7.509333 7.509333 0 0 1-6.826667-7.236267z"
fill="#F68282"
p-id="32625"
/></svg
>

After

Width:  |  Height:  |  Size: 7.7 KiB

View File

@@ -0,0 +1,229 @@
<!--
Copyright (C) 2025 Intel Corporation
SPDX-License-Identifier: Apache-2.0
-->
<svg
t="1710303147323"
class="icon"
viewBox="0 0 1024 1024"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="33782"
width="5rem"
height="5rem"
><path
d="M617.813333 701.44C597.333333 659.911111 554.666667 631.466667 505.173333 631.466667c-66.56 0-120.604444 51.2-125.155555 116.622222-48.924444 13.653333-84.195556 56.32-84.195556 106.951111 0 59.733333 49.493333 108.088889 111.502222 111.502222h209.351112c69.404444 0 125.724444-59.164444 125.724444-132.551111 0-70.542222-55.182222-128-124.586667-132.551111z"
fill="#4598F0"
p-id="33783"
/><path
d="M529.066667 797.013333h59.164444c2.275556 0 3.413333-2.275556 3.413333-4.551111v-14.222222c0-2.275556-1.137778-4.551111-3.413333-4.551111H518.257778c-3.413333 0-4.551111 4.551111-2.275556 7.395555l10.808889 15.36c0 0.568889 1.137778 0.568889 2.275556 0.568889z m61.44 9.671111H529.066667c-2.275556 0-6.257778-1.137778-7.395556-4.551111l-23.893333-30.72c-2.275556-2.275556-4.551111-3.413333-8.533334-3.413333h-44.373333c-6.257778 0-10.808889 5.688889-10.808889 11.946667v116.622222c0 7.395556 4.551111 11.946667 10.808889 11.946667h145.635556c6.257778 0 10.808889-5.688889 10.808889-11.946667V819.2c0-7.964444-5.12-12.515556-10.808889-12.515556z m-50.631111 65.422223c0 3.413333-2.275556 5.688889-6.257778 5.688889h-73.955556c-3.413333 0-6.257778-2.275556-6.257778-5.688889s2.275556-5.688889 6.257778-5.688889h75.662222c2.275556 0 4.551111 2.275556 4.551112 5.688889z m31.288888 0c0 3.413333-2.275556 5.688889-6.257777 5.688889h-4.551111c-3.413333 0-6.257778-2.275556-6.257778-5.688889s2.275556-5.688889 6.257778-5.688889h4.551111c3.982222 0 6.257778 2.275556 6.257777 5.688889z"
fill="#FFFFFF"
p-id="33784"
/><path
d="M694.044444 466.488889h73.955556c12.515556 0 22.755556 10.24 22.755556 22.755555v73.955556c0 12.515556-10.24 22.755556-22.755556 22.755556h-73.955556c-12.515556 0-22.755556-10.24-22.755555-22.755556V489.244444c0-12.515556 10.24-22.755556 22.755555-22.755555z"
fill="#4598F0"
p-id="33785"
/><path
d="M704.853333 553.528889c1.137778 0 2.275556-1.137778 2.275556-2.275556v-48.355555c0-1.137778-1.137778-2.275556-2.275556-2.275556s-2.275556 1.137778-2.275555 2.275556v48.355555c0 1.137778 1.137778 2.275556 2.275555 2.275556"
fill="#FFFFFF"
p-id="33786"
/><path
d="M754.915556 553.528889c1.137778 0 2.275556-1.137778 2.275555-2.275556v-48.355555c0-1.137778-1.137778-2.275556-2.275555-2.275556s-2.275556 1.137778-2.275556 2.275556v48.355555c0 1.137778 1.137778 2.275556 2.275556 2.275556"
fill="#FFFFFF"
p-id="33787"
/><path
d="M757.191111 502.897778c0-1.137778-1.137778-2.275556-2.275555-2.275556h-50.062223c-1.137778 0-2.275556 1.137778-2.275555 2.275556s1.137778 2.275556 2.275555 2.275555h50.062223c1.137778 0 2.275556-1.137778 2.275555-2.275555"
fill="#FFFFFF"
p-id="33788"
/><path
d="M746.382222 551.253333c0-1.137778-1.137778-2.275556-2.275555-2.275555H705.422222c-1.137778 0-2.275556 1.137778-2.275555 2.275555s1.137778 2.275556 2.275555 2.275556h38.684445c1.137778 0 2.275556-1.137778 2.275555-2.275556"
fill="#FFFFFF"
p-id="33789"
/><path
d="M725.902222 522.24c-1.137778-0.568889-2.275556-0.568889-3.413333 0.568889l-19.342222 27.306667c-0.568889 1.137778-0.568889 2.275556 0.568889 3.413333 1.137778 0.568889 2.275556 0.568889 3.413333-0.568889l19.342222-27.306667c0.568889-1.137778 0.568889-2.844444-0.568889-3.413333"
fill="#FFFFFF"
p-id="33790"
/><path
d="M723.057778 522.24c1.137778-0.568889 2.275556-0.568889 3.413333 0.568889l19.342222 27.306667c0.568889 1.137778 0.568889 2.275556-0.568889 3.413333-1.137778 0.568889-2.275556 0.568889-3.413333-0.568889l-19.342222-27.306667c-0.568889-1.137778-0.568889-2.844444 0.568889-3.413333"
fill="#FFFFFF"
p-id="33791"
/><path
d="M738.986667 529.635556c1.137778-0.568889 2.275556-0.568889 3.413333 0.568888l14.222222 19.911112c0.568889 1.137778 0.568889 2.275556-0.568889 3.413333-1.137778 0.568889-2.275556 0.568889-3.413333-0.568889l-14.222222-19.911111c-0.568889-1.706667-0.568889-2.844444 0.568889-3.413333"
fill="#FFFFFF"
p-id="33792"
/><path
d="M861.866667 676.977778h74.524444c12.515556 0 22.755556 10.24 22.755556 22.755555v73.955556c0 12.515556-10.24 22.755556-22.755556 22.755555h-74.524444c-12.515556 0-22.755556-10.24-22.755556-22.755555v-73.955556c0-12.515556 10.24-22.755556 22.755556-22.755555z"
fill="#4598F0"
p-id="33793"
/><path
d="M888.604444 718.506667v38.115555c0 5.688889-4.551111 10.24-10.24 10.24s-10.24-4.551111-10.24-10.24 4.551111-10.24 10.24-10.24c1.137778 0 2.275556 1.137778 2.275556 2.275556s-1.137778 2.275556-2.275556 2.275555c-2.844444 0-5.688889 2.275556-5.688888 5.688889s2.275556 5.688889 5.688888 5.688889c2.844444 0 5.688889-2.275556 5.688889-5.688889v-38.115555c0-0.568889 0-1.137778 0.568889-1.706667 0.568889-0.568889 1.137778-0.568889 1.706667-0.568889 1.137778 0 2.275556 1.137778 2.275555 2.275556"
fill="#FFFFFF"
p-id="33794"
/><path
d="M926.72 714.524444v38.115556c0 5.688889-4.551111 10.24-10.24 10.24s-10.24-4.551111-10.24-10.24 4.551111-10.24 10.24-10.24c1.137778 0 2.275556 1.137778 2.275556 2.275556s-1.137778 2.275556-2.275556 2.275555c-2.844444 0-5.688889 2.275556-5.688889 5.688889s2.275556 5.688889 5.688889 5.688889c2.844444 0 5.688889-2.275556 5.688889-5.688889v-38.115556c0-0.568889 0-1.137778 0.568889-1.706666 0.568889-0.568889 1.137778-0.568889 1.706666-0.568889h0.568889c1.137778 0 1.706667 1.137778 1.706667 2.275555"
fill="#FFFFFF"
p-id="33795"
/><path
d="M926.72 713.955556c0-1.137778-1.137778-2.275556-2.844444-2.275556l-38.115556 4.551111c-1.137778 0-2.275556 1.137778-2.275556 2.844445 0 1.137778 1.137778 2.275556 2.844445 2.275555l38.115555-4.551111c1.706667-0.568889 2.844444-1.706667 2.275556-2.844444"
fill="#FFFFFF"
p-id="33796"
/><path
d="M880.64 748.657778c0 1.137778-1.137778 2.275556-2.275556 2.275555s-2.275556-1.137778-2.275555-2.275555 1.137778-2.275556 2.275555-2.275556 2.275556 1.137778 2.275556 2.275556M918.755556 744.106667c0 1.137778-1.137778 2.275556-2.275556 2.275555s-2.275556-1.137778-2.275556-2.275555 1.137778-2.275556 2.275556-2.275556 2.275556 1.137778 2.275556 2.275556"
fill="#FFFFFF"
p-id="33797"
/><path
d="M22.755556 483.555556h73.955555c12.515556 0 22.755556 10.24 22.755556 22.755555v73.955556c0 12.515556-10.24 22.755556-22.755556 22.755555H22.755556c-12.515556 0-22.755556-10.24-22.755556-22.755555V506.311111c0-12.515556 10.24-22.755556 22.755556-22.755555z"
fill="#4598F0"
p-id="33798"
/><path
d="M50.062222 557.511111c-0.568889 1.137778-1.706667 1.706667-2.844444 1.137778-1.137778-0.568889-1.706667-1.706667-1.137778-2.844445 4.551111-11.377778 5.12-23.893333 2.275556-36.408888-0.568889-1.137778 0.568889-2.844444 1.706666-2.844445 1.137778-0.568889 2.275556 0.568889 2.844445 1.706667 2.844444 13.084444 2.275556 26.737778-2.844445 39.253333z"
fill="#FFFFFF"
p-id="33799"
/><path
d="M69.404444 548.408889c1.137778 0 2.275556 1.137778 2.275556 2.275555s-1.137778 2.275556-2.275556 2.275556c-3.413333 0-6.826667 0.568889-10.808888 1.706667l-10.24 3.413333c-1.137778 0.568889-2.275556 0-2.844445-1.137778-0.568889-1.137778 0-2.844444 1.137778-3.413333 3.413333-1.706667 7.395556-2.844444 10.808889-3.982222 4.551111 0 8.533333-0.568889 11.946666-1.137778z"
fill="#FFFFFF"
p-id="33800"
/><path
d="M57.457778 539.875556c-0.568889-1.137778-0.568889-2.844444 0.568889-3.413334 1.137778-0.568889 2.275556-0.568889 3.413333 0.568889 2.844444 4.551111 6.257778 8.533333 10.24 11.946667 1.137778 1.137778 1.137778 2.275556 0 3.413333-0.568889 1.137778-2.275556 1.137778-3.413333 0-3.982222-3.413333-7.964444-7.395556-10.808889-12.515555zM36.977778 566.044444z m0 0c-0.568889 0.568889-0.568889 1.706667 0 2.275556 1.137778 1.137778 1.137778 2.275556 0 3.413333s-2.275556 1.137778-3.413334 0c-2.275556-2.275556-2.844444-6.257778-0.568888-9.102222l0.568888-0.568889c1.706667-1.706667 3.982222-2.844444 6.257778-3.982222l6.826667-3.413333c1.137778-0.568889 2.275556 0 2.844444 1.137777s0 2.844444-1.137777 3.413334c-2.275556 1.137778-3.982222 2.275556-6.257778 3.413333-1.137778 0.568889-2.844444 1.706667-5.12 3.413333 0.568889 0 0.568889 0 0 0 0.568889 0 0.568889 0 0 0z m0 0c0.568889 0 0.568889 0 0 0z m-2.275556-3.982222z"
fill="#FFFFFF"
p-id="33801"
/><path
d="M39.253333 568.32c2.844444-3.982222 5.12-7.964444 6.257778-12.515556 0.568889-1.137778 1.706667-1.706667 2.844445-1.137777 1.137778 0.568889 1.706667 1.706667 1.137777 2.844444-1.706667 4.551111-3.982222 9.102222-6.826666 13.084445v-0.568889 0.568889s0 0.568889-0.568889 0.568888c-2.275556 2.844444-6.257778 2.844444-8.533334 0.568889-1.137778-1.137778-1.137778-2.275556 0-3.413333 1.137778-1.137778 2.275556-1.137778 3.413334 0 0.568889 0.568889 1.706667 0.568889 2.275555 0z m0.568889 0z m3.413334 2.275556v-0.568889c0.568889 0.568889 0 0.568889 0 0.568889z m0 0.568888z m0 0l-1.706667-1.706666 1.706667 1.706666z m0-0.568888zM84.764444 556.942222c1.137778-1.137778 2.275556-1.137778 3.413334 0 1.137778 1.137778 1.137778 2.275556 0 3.413334-1.706667 2.275556-5.12 2.844444-7.395556 1.137777-4.551111-2.275556-8.533333-5.12-12.515555-8.533333-1.137778-1.137778-1.137778-2.275556 0-3.413333 0.568889-1.137778 2.275556-1.137778 3.413333 0 3.413333 2.844444 7.395556 5.688889 11.377778 7.964444 0 0 1.137778 0 1.706666-0.568889z"
fill="#FFFFFF"
p-id="33802"
/><path
d="M69.973333 553.528889c-1.137778 0-2.275556-1.137778-2.275555-2.275556s1.137778-2.275556 2.275555-2.275555c5.12-0.568889 10.24 0 14.791111 1.137778 1.137778 0 2.275556 0.568889 2.844445 1.706666 2.275556 2.275556 2.844444 6.257778 0.568889 9.102222-1.137778 1.137778-2.275556 1.137778-3.413334 0-1.137778-1.137778-1.137778-2.275556 0-3.413333 0.568889-0.568889 0.568889-1.706667 0-2.275555l-0.568888-0.568889c-5.12-1.137778-9.671111-1.706667-14.222223-1.137778z"
fill="#FFFFFF"
p-id="33803"
/><path
d="M460.8 409.6h73.955556c12.515556 0 22.755556 10.24 22.755555 22.755556v73.955555c0 12.515556-10.24 22.755556-22.755555 22.755556H460.8c-12.515556 0-22.755556-10.24-22.755556-22.755556V432.355556c0-12.515556 10.24-22.755556 22.755556-22.755556z"
fill="#4598F0"
p-id="33804"
/><path
d="M498.346667 454.542222c1.137778 0 2.275556-1.137778 2.275555-2.275555v-3.413334c0-1.137778-1.137778-2.275556-2.275555-2.275555s-2.275556 1.137778-2.275556 2.275555v3.413334c0 1.137778 1.137778 2.275556 2.275556 2.275555M498.346667 465.351111c1.137778 0 2.275556-1.137778 2.275555-2.275555v-3.413334c0-1.137778-1.137778-2.275556-2.275555-2.275555s-2.275556 1.137778-2.275556 2.275555v3.413334c0 1.137778 1.137778 2.275556 2.275556 2.275555M498.346667 476.728889c1.137778 0 2.275556-1.137778 2.275555-2.275556v-3.413333c0-1.137778-1.137778-2.275556-2.275555-2.275556s-2.275556 1.137778-2.275556 2.275556v3.413333c0 1.137778 1.137778 2.275556 2.275556 2.275556M508.017778 485.831111H489.244444c-1.137778 0-2.275556-1.137778-2.275555-2.275555s1.137778-2.275556 2.275555-2.275556h18.773334c1.137778 0 2.275556 1.137778 2.275555 2.275556s-1.137778 2.275556-2.275555 2.275555"
fill="#FFFFFF"
p-id="33805"
/><path
d="M510.293333 483.555556v2.844444c0 3.413333-1.137778 6.257778-3.413333 7.964444-2.275556 2.275556-5.12 3.413333-8.533333 3.413334-6.826667 0-11.946667-5.12-11.946667-11.377778V483.555556v-0.568889c0.568889-0.568889 1.137778-1.137778 2.275556-1.137778s2.275556 1.137778 2.275555 2.275555v2.844445c0 3.982222 3.413333 6.826667 7.395556 6.826667 3.982222 0 7.395556-2.844444 7.395555-6.826667V483.555556c0-1.137778 1.137778-2.275556 2.275556-2.275556s1.706667 0.568889 2.275555 1.137778v1.137778c0-0.568889 0-0.568889 0 0"
fill="#FFFFFF"
p-id="33806"
/><path
d="M490.951111 483.555556c0 1.137778-1.137778 2.275556-2.275555 2.275555s-2.275556-1.137778-2.275556-2.275555v-0.568889c0.568889-0.568889 1.137778-1.137778 2.275556-1.137778 1.706667-1.137778 2.275556 0 2.275555 1.706667"
fill="#FFFFFF"
p-id="33807"
/><path
d="M510.293333 483.555556c0 1.137778-1.137778 2.275556-2.275555 2.275555s-2.275556-1.137778-2.275556-2.275555 1.137778-2.275556 2.275556-2.275556 1.706667 0.568889 2.275555 1.137778v1.137778c0-0.568889 0-0.568889 0 0"
fill="#FFFFFF"
p-id="33808"
/><path
d="M341.333333 136.533333h73.955556c12.515556 0 22.755556 10.24 22.755555 22.755556v73.955555c0 12.515556-10.24 22.755556-22.755555 22.755556H341.333333c-12.515556 0-22.755556-10.24-22.755555-22.755556V159.288889c0-12.515556 10.24-22.755556 22.755555-22.755556z"
fill="#4598F0"
p-id="33809"
/><path
d="M349.866667 197.404444c0-1.137778 1.137778-2.275556 2.275555-2.275555h49.493334c1.137778 0 2.275556 1.137778 2.275555 2.275555s-1.137778 2.275556-2.275555 2.275556h-49.493334c-1.137778 0-2.275556-1.137778-2.275555-2.275556"
fill="#FFFFFF"
p-id="33810"
/><path
d="M349.866667 219.022222c0-1.137778 1.137778-2.275556 2.275555-2.275555h49.493334c1.137778 0 2.275556 1.137778 2.275555 2.275555s-1.137778 2.275556-2.275555 2.275556h-49.493334c-1.137778 0-2.275556-1.137778-2.275555-2.275556"
fill="#FFFFFF"
p-id="33811"
/><path
d="M387.413333 175.786667c0-1.137778-1.137778-2.275556-2.275555-2.275556h-22.755556c-1.137778 0-2.275556 1.137778-2.275555 2.275556s1.137778 2.275556 2.275555 2.275555h22.755556c1.137778 0.568889 2.275556-0.568889 2.275555-2.275555M354.986667 175.786667c0-1.137778-1.137778-2.275556-2.275556-2.275556s-2.275556 1.137778-2.275555 2.275556 1.137778 2.275556 2.275555 2.275555c1.137778 0.568889 2.275556-0.568889 2.275556-2.275555"
fill="#FFFFFF"
p-id="33812"
/><path
d="M153.6 676.977778h73.955556c12.515556 0 22.755556 10.24 22.755555 22.755555v73.955556c0 12.515556-10.24 22.755556-22.755555 22.755555H153.6c-12.515556 0-22.755556-10.24-22.755556-22.755555v-73.955556c0-12.515556 10.24-22.755556 22.755556-22.755555z"
fill="#4598F0"
p-id="33813"
/><path
d="M178.062222 714.524444v50.062223c0 1.137778-1.137778 2.275556-2.275555 2.275555s-2.275556-1.137778-2.275556-2.275555v-50.062223c0-1.137778 1.137778-2.275556 2.275556-2.275555 0.568889 0 1.137778 0 1.706666 0.568889 0.568889 0 0.568889 0.568889 0.568889 1.706666"
fill="#FFFFFF"
p-id="33814"
/><path
d="M209.351111 729.884444c0 9.671111-7.964444 18.204444-18.204444 18.204445-3.413333 0-6.257778-1.137778-9.102223-2.275556-0.568889-0.568889-1.137778-1.137778-1.137777-1.706666 0-1.137778 1.137778-2.275556 2.275555-2.275556h1.137778c1.706667 1.137778 4.551111 1.706667 6.826667 1.706667 7.395556 0 13.084444-5.688889 13.084444-13.084445 0-7.395556-5.688889-13.084444-13.084444-13.084444s-13.084444 5.688889-13.084445 13.084444v11.946667c-2.844444-3.413333-4.551111-7.395556-4.551111-11.946667s1.706667-9.102222 4.551111-11.946666c3.413333-3.413333 7.964444-5.688889 13.084445-5.688889 10.24-1.137778 18.204444 7.395556 18.204444 17.066666"
fill="#FFFFFF"
p-id="33815"
/><path
d="M185.457778 743.537778c0 1.137778-1.137778 2.275556-2.275556 2.275555H182.044444c-0.568889-0.568889-1.137778-1.137778-1.137777-1.706666 0-1.137778 1.137778-2.275556 2.275555-2.275556h1.137778c1.137778 0 1.137778 0.568889 1.137778 1.706667"
fill="#FFFFFF"
p-id="33816"
/><path
d="M238.933333 375.466667h73.955556c12.515556 0 22.755556 10.24 22.755555 22.755555v73.955556c0 12.515556-10.24 22.755556-22.755555 22.755555H238.933333c-12.515556 0-22.755556-10.24-22.755555-22.755555V398.222222c0-12.515556 10.24-22.755556 22.755555-22.755555z"
fill="#4598F0"
p-id="33817"
/><path
d="M250.311111 417.564444c-1.137778 0.568889-2.844444-0.568889-2.844444-1.706666-0.568889-1.137778 0.568889-2.275556 1.706666-2.844445 1.137778-0.568889 2.844444 0.568889 2.844445 1.706667 0.568889 1.706667-0.568889 2.844444-1.706667 2.844444"
fill="#FFFFFF"
p-id="33818"
/><path
d="M286.72 463.644444c1.137778 0.568889 2.844444-0.568889 2.844444-1.706666l12.515556-45.511111c0.568889-1.137778-0.568889-2.275556-1.706667-2.844445-1.137778-0.568889-2.844444 0.568889-2.844444 1.706667l-12.515556 45.511111c-0.568889 1.137778 0.568889 2.275556 1.706667 2.844444"
fill="#FFFFFF"
p-id="33819"
/><path
d="M261.688889 463.644444c1.137778 0.568889 2.844444-0.568889 2.844444-1.706666l12.515556-45.511111c0.568889-1.137778-0.568889-2.275556-1.706667-2.844445-1.137778-0.568889-2.844444 0.568889-2.844444 1.706667l-12.515556 45.511111c-0.568889 1.137778 0.568889 2.275556 1.706667 2.844444"
fill="#FFFFFF"
p-id="33820"
/><path
d="M287.857778 463.644444c-1.137778 0.568889-2.844444-0.568889-2.844445-1.706666l-12.515555-45.511111c-0.568889-1.137778 0.568889-2.275556 1.706666-2.844445 1.137778-0.568889 2.844444 0.568889 2.844445 1.706667l12.515555 45.511111c0.568889 1.137778-0.568889 2.275556-1.706666 2.844444"
fill="#FFFFFF"
p-id="33821"
/><path
d="M262.826667 463.644444c-1.137778 0.568889-2.844444-0.568889-2.844445-1.706666l-10.24-36.977778c-0.568889-1.137778 0.568889-2.275556 1.706667-2.844444 1.137778-0.568889 2.844444 0.568889 2.844444 1.706666l10.24 36.977778c0.568889 1.137778-0.568889 2.275556-1.706666 2.844444"
fill="#FFFFFF"
p-id="33822"
/><path
d="M739.555556 45.511111h73.955555c12.515556 0 22.755556 10.24 22.755556 22.755556v73.955555c0 12.515556-10.24 22.755556-22.755556 22.755556h-73.955555c-12.515556 0-22.755556-10.24-22.755556-22.755556V68.266667c0-12.515556 10.24-22.755556 22.755556-22.755556z"
fill="#4598F0"
p-id="33823"
/><path
d="M754.346667 131.413333c-1.137778-1.137778-1.137778-2.275556 0-3.413333l44.373333-43.804444c1.137778-1.137778 2.275556-1.137778 3.413333 0 1.137778 1.137778 1.137778 2.275556 0 3.413333l-44.373333 43.804444c-0.568889 0.568889-2.275556 0.568889-3.413333 0"
fill="#FFFFFF"
p-id="33824"
/><path
d="M802.133333 131.413333c1.137778-1.137778 1.137778-2.275556 0-3.413333l-22.186666-22.186667c-1.137778-1.137778-2.275556-1.137778-3.413334 0-1.137778 1.137778-1.137778 2.275556 0 3.413334l22.186667 22.186666c1.137778 0.568889 2.844444 0.568889 3.413333 0"
fill="#FFFFFF"
p-id="33825"
/><path
d="M774.257778 102.968889c1.137778-1.137778 1.137778-2.275556 0-3.413333l-15.928889-15.928889c-1.137778-1.137778-2.275556-1.137778-3.413333 0-1.137778 1.137778-1.137778 2.275556 0 3.413333l15.928888 15.928889c0.568889 1.137778 2.275556 1.137778 3.413334 0"
fill="#FFFFFF"
p-id="33826"
/><path
d="M927.288889 375.466667h73.955555c12.515556 0 22.755556 10.24 22.755556 22.755555v73.955556c0 12.515556-10.24 22.755556-22.755556 22.755555h-73.955555c-12.515556 0-22.755556-10.24-22.755556-22.755555V398.222222c0-12.515556 10.24-22.755556 22.755556-22.755555z"
fill="#4598F0"
p-id="33827"
/><path
d="M943.786667 409.6h41.528889c1.137778 0 2.275556 1.137778 2.275555 2.275556s-1.137778 2.275556-2.275555 2.275555h-41.528889c-1.137778 0-2.275556-1.137778-2.275556-2.275555s1.137778-2.275556 2.275556-2.275556z"
fill="#FFFFFF"
fill-opacity=".8"
p-id="33828"
/><path
d="M946.631111 411.875556v49.493333c0 1.137778-1.137778 2.275556-2.275555 2.275555s-2.275556-1.137778-2.275556-2.275555v-49.493333c0-1.137778 1.137778-2.275556 2.275556-2.275556s2.275556 1.137778 2.275555 2.275556zM987.591111 411.875556v34.133333c0 1.137778-1.137778 2.275556-2.275555 2.275555s-2.275556-1.137778-2.275556-2.275555v-34.133333c0-1.137778 1.137778-2.275556 2.275556-2.275556s2.275556 1.137778 2.275555 2.275556z"
fill="#FFFFFF"
fill-opacity=".8"
p-id="33829"
/><path
d="M943.786667 459.662222h15.36c1.137778 0 2.275556 1.137778 2.275555 2.275556s-1.137778 2.275556-2.275555 2.275555h-15.36c-1.137778 0-2.275556-1.137778-2.275556-2.275555s1.137778-2.275556 2.275556-2.275556zM955.733333 421.546667h15.36c1.137778 0 2.275556 1.137778 2.275556 2.275555s-1.137778 2.275556-2.275556 2.275556H955.733333c-1.137778 0-2.275556-1.137778-2.275555-2.275556s1.137778-2.275556 2.275555-2.275555zM955.733333 431.786667h15.36c1.137778 0 2.275556 1.137778 2.275556 2.275555s-1.137778 2.275556-2.275556 2.275556H955.733333c-1.137778 0-2.275556-1.137778-2.275555-2.275556s1.137778-2.275556 2.275555-2.275555zM968.248889 460.231111l15.36-15.36c1.137778-1.137778 2.275556-1.137778 3.413333 0 1.137778 1.137778 1.137778 2.275556 0 3.413333l-15.36 15.36c-1.137778 1.137778-2.275556 1.137778-3.413333 0-1.137778-1.137778-1.137778-2.844444 0-3.413333z"
fill="#FFFFFF"
fill-opacity=".8"
p-id="33830"
/><path
d="M969.386667 443.733333h15.36c1.137778 0 2.275556 1.137778 2.275555 2.275556s-1.137778 2.275556-2.275555 2.275555h-15.36c-1.137778 0-2.275556-1.137778-2.275556-2.275555s1.137778-2.275556 2.275556-2.275556z"
fill="#FFFFFF"
fill-opacity=".8"
p-id="33831"
/><path
d="M972.231111 446.008889v15.36c0 1.137778-1.137778 2.275556-2.275555 2.275555s-2.275556-1.137778-2.275556-2.275555v-15.36c0-1.137778 1.137778-2.275556 2.275556-2.275556s2.275556 1.137778 2.275555 2.275556z"
fill="#FFFFFF"
fill-opacity=".8"
p-id="33832"
/><path
d="M585.955556 216.177778h73.955555c12.515556 0 22.755556 10.24 22.755556 22.755555v73.955556c0 12.515556-10.24 22.755556-22.755556 22.755555h-73.955555c-12.515556 0-22.755556-10.24-22.755556-22.755555V238.933333c0-12.515556 10.24-22.755556 22.755556-22.755555z"
fill="#4598F0"
p-id="33833"
/><path
d="M593.351111 267.946667V284.444444c0 4.551111 3.982222 8.533333 8.533333 8.533334h26.737778c4.551111 0 8.533333-3.982222 8.533334-8.533334v-16.497777c0-4.551111-3.982222-8.533333-8.533334-8.533334h-26.737778c-4.551111 0-8.533333 3.982222-8.533333 8.533334zM652.515556 267.946667c2.275556-1.706667 4.551111-1.137778 4.551111 2.275555v11.946667c0 3.413333-2.275556 3.982222-4.551111 2.275555l-6.257778-4.551111c-2.275556-1.706667-2.275556-5.12 0-6.826666l6.257778-5.12z"
fill="#4598F0"
p-id="33834"
/></svg
>

After

Width:  |  Height:  |  Size: 21 KiB

View File

@@ -0,0 +1,25 @@
<!--
Copyright (C) 2025 Intel Corporation
SPDX-License-Identifier: Apache-2.0
-->
<script lang="ts">
export let overrideClasses = '';
const classes = overrideClasses ? overrideClasses : 'w-4 h-4 text-gray-500';
</script>
<svg
class={classes}
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
stroke-width="1.5"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
d="M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0l3.181 3.183a8.25 8.25 0 0013.803-3.7M4.031 9.865a8.25 8.25 0 0113.803-3.7l3.181 3.182m0-4.991v4.99"
/>
</svg>

Some files were not shown because too many files have changed in this diff Show More