diff --git a/docs-ua/README.md b/docs-ua/README.md new file mode 100644 index 00000000..7ec55569 --- /dev/null +++ b/docs-ua/README.md @@ -0,0 +1,52 @@ +# Проєкт OPEA + +**Місія**: Створити проект з відкритою платформою, яка дозволить створювати відкриті, багатопрофільні, надійні та комбіновані рішення GenAI, що використовують найкращі інновації в екосистемі. + +Ось корисні сайти OPEA в рамках Linux Foundation AI & Data Organization: + +* Сайт: [https://opea.dev](https://opea.dev) +* X/Twitter: [https://twitter.com/opeadev](https://twitter.com/opeadev) +* Linkedin: [https://www.linkedin.com/company/opeadev](https://www.linkedin.com/company/opeadev) +* Github: [https://github.com/opea-project](https://github.com/opea-project) +* Зв'яжиться з нами: [info@opea.dev](mailto:info@opea.dev) + +Платформа OPEA включає в себе: + +- Комбіновані будівельні блоки для найсучасніших генеративних систем ШІ, включаючи LLM, сховища даних і механізми підказок +- Архітектурні схеми наскрізних робочих процесів генеративного ШІ, доповненого пошуком +- Чотириступенева оцінка для класифікації генеративних систем ШІ за продуктивністю, + функцій, надійності та готовності до роботи на рівні підприємства + +Зайдіть на +[LF AI & Data Press Release](https://lfaidata.foundation/blog/2024/04/16/lf-ai-data-foundation-launches-open-platform-for-enterprise-ai-opea-for-groundbreaking-enterprise-ai-collaboration/) і +[Intel's blog post](https://www.intel.com/content/www/us/en/developer/articles/news/introducing-the-open-platform-for-enterprise-ai.html). + +## Технічний наглядовий комітет + +- [Ke Ding](https://www.linkedin.com/in/dingke/), Senior Prinicipal AI Engineer, Intel +- [Malini Bhandaru](https://www.linkedin.com/in/malinibhandaru/), Senior Principal Engineer, Intel (Chair) +- [Amr Abdelhalem](https://www.linkedin.com/in/amrhalem/), SVP, Head of Cloud Platforms, Fidelity +- [Robert Hafner](https://www.linkedin.com/in/roberthafner/), Senior Principal Architect, Comcast +- Steve Grubb, Senior Principal Engineer, Red Hat +- [Nathan Cartwright](https://www.linkedin.com/in/nathan-cartwright-2008228/), Chief Architect - AI, CDW +- [Logan Markewich](https://www.linkedin.com/in/logan-markewich/), Founding Software Developer, LlamaIndex +- [Justin Cormack](https://www.linkedin.com/in/justincormack/), CTO, Docker +- [Melissa Mckay](https://www.linkedin.com/in/melissajmckay/), Head of Developer Relations, JFrog + +## Компанії-члени на старті: + +* Anyscale +* Cloudera +* Datastax +* Domino Data Lab +* Hugging Face +* Intel +* KX +* MariaDB Foundation +* MinIO +* Qdrant +* Red Hat +* SAS +* VMware by Broadcom +* Yellowbrick Data +* Zilliz diff --git a/docs-ua/community/CODE_OF_CONDUCT.md b/docs-ua/community/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..94eaf5c7 --- /dev/null +++ b/docs-ua/community/CODE_OF_CONDUCT.md @@ -0,0 +1,88 @@ +# Contributor Covenant Code of Conduct + +## Наша обіцянка + +Ми, як члени, учасники та лідери, зобов'язуємося зробити участь у нашій спільноті вільною від утисків для всіх, незалежно від віку, розміру тіла, видимої чи невидимої інвалідності, етнічної приналежності, статевих ознак, гендерної ідентичності та самовираження, рівня досвіду, освіти, соціально-економічного статусу, національності, зовнішності, раси, касти, кольору шкіри, віросповідання, сексуальної ідентичності та орієнтації. + + Ми зобов'язуємося діяти та взаємодіяти таким чином, щоб сприяти створенню відкритої, доброзичливої, різноманітної, інклюзивної та здорової спільноти. + +## Наші стандарти + +Приклади поведінки, яка сприяє створенню позитивного середовища для нашої спільноти, включають: + +- Демонструвати емпатію та доброту до інших людей +- Поважати різні думки, точки зору та досвід +- Надавати та ввічливо приймати конструктивний зворотній зв'язок +- Приймати відповідальність та вибачатися перед тими, хто постраждав від наших помилок, а також вчитися на власному досвіді +- Зосереджуватися на тому, що є найкращим не лише для нас як особистостей, але й для всієї спільноти в цілому + +Приклади неприйнятної поведінки включають: + +- Використання сексуалізованої мови або образів, а також сексуальної уваги або залицянь будь-якого роду +- Тролінг, образливі або принизливі коментарі, особисті або політичні нападки +- Публічні або приватні домагання +- Публікація приватної інформації інших осіб, наприклад, фізичної або електронної адреси, без їхнього явного дозволу +- Інша поведінка, яка може обґрунтовано вважатися неприйнятною в професійному середовищі. + +## Відповідальність за дотримання законодавства + +Лідери спільнот несуть відповідальність за роз'яснення та дотримання наших стандартів прийнятної поведінки, а також вживають належних і справедливих коригувальних заходів у відповідь на будь-яку поведінку, яку вони вважають недоречною, загрозливою, образливою або шкідливою. + +Лідери спільноти мають право і несуть відповідальність за видалення, редагування або відхилення коментарів, коммітів, коду, редагувань вікі, питань та інших внесків, які не відповідають цьому Кодексу поведінки, а також повідомлятимуть причини своїх рішень щодо модерації, коли це доречно. + +## Сфера застосування + +Цей Кодекс поведінки діє у всіх суспільних просторах, а також у випадках, коли +особа офіційно представляє спільноту в публічних місцях. +Прикладами представлення нашої спільноти є використання офіційної електронної адреси, публікація повідомлень через офіційний акаунт у соціальних мережах, або дія в якості призначеного представника на онлайн чи офлайн заході. + +## Правозастосування + +Про випадки образливої, агресивної чи іншої неприйнятної поведінки можна повідомляти лідерам спільноти. Усі скарги будуть розглянуті та розслідувані швидко та справедливо. + +Усі лідери спільноти зобов'язані поважати приватність і безпеку особи, яка повідомила про будь-який інцидент. + +## Керівні принципи правозастосування + +Лідери спільнот дотримуватимуться цих Керівних принципів впливу на спільноту, визначаючи наслідки будь-яких дій, які вони вважають такими, що порушують цей Кодекс поведінки: + +### 1. Виправлення + +**Вплив на спільноту**: Використання неприйнятної мови або іншої поведінки, яка вважається непрофесійною або небажаною в спільноті. + +**Наслідок**: Приватне письмове попередження від лідерів спільноти, що містить +ясність щодо характеру порушення та пояснення, чому поведінка була неприйнятною. Можна вимагати публічних вибачень. + +### 2. Попередження + +**Вплив на спільноту**: Порушення через один інцидент або серію дій. + +**Наслідок**: Попередження з наслідками для подальшої поведінки. Не взаємодіяти з причетними особами, в тому числі небажана взаємодія з особами, які забезпечують дотримання Кодексу поведінки, протягом певного періоду часу. Це включає уникнення взаємодії в суспільних місцях, а також через зовнішні канали таких як соціальні мережі. Порушення цих умов може призвести до тимчасової або постійної +заборони. + +### 3. Тимчасовий бан + +**Вплив на спільноту**: Серйозне порушення стандартів спільноти, включаючи тривалу неналежну поведінку. + +**Наслідок**: Тимчасова заборона на будь-яку взаємодію чи публічну комунікацію зі спільнотою на певний період часу. Протягом цього періоду забороняється будь-яка публічна або приватна взаємодія з залученими особами, включно з небажаною взаємодією з тими, хто забезпечує дотримання Кодексу поведінки. Порушення цих умов може призвести до постійної заборони. + +### 4. Перманентний бан + +**Вплив на спільноту**: Демонстрація систематичного порушення стандартів спільноти, включаючи постійну неналежну поведінку, переслідування особи, агресію або зневагу до певних категорій осіб. + +**Наслідок**: Постійна заборона на будь-яку публічну взаємодію всередині спільноти. + +## Авторство + +Цей Кодекс поведінки адаптовано з [Contributor Covenant][homepage], +version 2.1, доступна за адресою +[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. + +Настанови щодо впливу на спільноту були натхненні +[Mozilla's code of conduct enforcement ladder][Mozilla CoC]. + +Відповіді на поширені запитання про цей кодекс поведінки дивіться у розділі поширених запитань за посиланням +[https://www.contributor-covenant.org/faq][FAQ]. Переклади доступні за посиланням +[https://www.contributor-covenant.org/translations][translations]. + + diff --git a/docs-ua/community/CONTRIBUTING.md b/docs-ua/community/CONTRIBUTING.md new file mode 100644 index 00000000..3a857c77 --- /dev/null +++ b/docs-ua/community/CONTRIBUTING.md @@ -0,0 +1,386 @@ +# Посібник із здійснення внесків + +Дякуємо, що розглядаєте можливість долучитися до проєкту OPEA. Процес участі подібний до інших проєктів з відкритим вихідним кодом на Github, що передбачає відкрите обговорення проблем і запитів на доопрацювання між супровідниками, дописувачами і користувачами. + + +## Всі способи зробити внесок + +### Запропонувати компонент GenAI + +1. Перейдіть до [OPEA GenAIComps] (https://github.com/opea-project/GenAIComps) і знайдіть папку компонентів, до якої належить ваша інтеграція. Якщо тип мікросервісу вже існує, перегляньте [OPEA microservice API](https://opea-project.github.io/latest/developer-guides/OPEA_API.html#opea-micro-service-api) і дотримуйтесь його у своїй реалізації. В іншому випадку, якщо ви створюєте абсолютно новий тип мікросервісу, вам потрібно спочатку визначити і внести його специфікацію API. Будь ласка, почніть з подання RFC, щоб отримати зворотній зв'язок від спільноти. + + + ``` + GenAIComps + ├── comps + │   ├── agent + │   ├── asr + │   ├── chathistory + │   ├── cores + │ │ ├── mega #orchestrator, gateway, micro_service class code + │ │ ├── proto #api protocol + │ │ └── telemetry + │   ├── dataprep + │   ├── embeddings + │   ├── feedback_management + │   ├── finetuning + │   ├── guardrails + │   ├── intent_detection + │   ├── knowledgegraphs + │   ├── llms + │   ├── lvms + │   ├── nginx + │   ├── prompt_registry + │   ├── ragas + │   ├── reranks + │   ├── retrievers + │   ├── tts + │   ├── vectorstores + │   └── web_retrievers + └── tests +    ├── agent +    ├── asr +    ├── chathistory +    ├── cores +    ├── dataprep +    ├── embeddings +    ├── feedback_management +    ├── finetuning +    ├── guardrails +    ├── intent_detection +    ├── llms +    ├── lvms +    ├── nginx +    ├── prompt_registry +    ├── reranks +    ├── retrievers +    ├── tts +    ├── vectorstores +    └── web_retrievers + ``` + +2. Дотримуйтесь структури папок у компоненті вбудовування TEI: + + ``` + GenAIComps + ├── comps + │ └── embeddings + │ ├── __init__.py + │ └── tei #vendor name or serving framework name + │ ├── langchain + │ │ ├── Dockerfile + │ │ ├── Dockerfile.amd_gpu + │ │ ├── Dockerfile.nvidia_gpu + │ │ ├── embedding_tei.py # definition and registration of microservice + │ │ ├── README.md + │ │ └── requirements.txt + │ └── llama_index + │ └── . . . + ├── tests + │ └── embeddings + │ ├── test_embeddings_tei_langchain.sh + │ ├── test_embeddings_tei_langchain_on_amd_gpu.sh + │ └── test_embeddings_tei_llama_index.sh + └── README.md + + ``` + + - **Описи файлів**: + - `embedding_tei.py`: Цей файл визначає та реєструє мікросервіс. Він слугує точкою входу до контейнера Docker. Зверніться до [whisper ASR](https://github.com/opea-project/GenAIComps/tree/main/comps/asr/whisper/README.md) для простого прикладу або [TGI](https://github.com/opea-project/GenAIComps/blob/main/comps/llms/text-generation/tgi/llm.py) для більш складного прикладу, який вимагав адаптації до OpenAI API. + - `requirements.txt`: Цей файл використовується Docker для встановлення необхідних залежностей. + - `Dockerfile`: Використовується для створення зображення службового контейнера. Будь ласка, дотримуйтесь правил іменування: + - Dockerfile: `Dockerfile.[vendor]_[hardware]`, vendor and hardware in lower case (i,e Dockerfile.amd_gpu) + - Docker Image: `opea/[microservice type]-[microservice sub type]-[library name]-[vendor]-[hardware]:latest` all lower case (i,e opea/llm-vllm-intel-hpu, opea/llm-faqgen-tgi-intel-hpu-svc) + + - `tests/[microservices type]/` : містить наскрізний тест для мікросервісів Зверніться до прикладу [test_asr_whisper.sh](https://github.com/opea-project/GenAIComps/blob/main/tests/asr/test_asr_whisper.sh). Будь ласка, дотримуйтесь правил іменування: `test_[microservice type]_[microservice sub type]_[library name]_on_[vendor]_[hardware].sh` + - `tests/cores/` : cзберігає модульні тести (UT) для основних компонентів python (оркестратор, шлюз...). Будь ласка, дотримуйтесь правил іменування:`test_[core component].sh` + + - `README.md`: Як мінімум, він повинен містити: опис мікросервісу, команди збірки та запуску, а також команду curl з очікуваним результатом. + +4. Тепер ви створили всі необхідні файли і перевірили ваш сервіс. Останнім кроком буде зміна файлу `README.md` на рівні компонента `GenAIComps/comps/[тип мікросервісу]`, щоб перерахувати ваш новий компонент. Тепер ви готові подати свій PR! Після того, як ваш PR буде об'єднано, у наступному випуску супровідники проекту опублікують Docker-образ для нього на Docker Hub. + +5. Після того, як ваш компонент буде об'єднано, ви, ймовірно, зацікавитесь створенням програми на його основі, і, можливо, також внесете його до OPEA! Будь ласка, перейдіть до посібника [Contribute a GenAI Example] (#contribute-a-genai-example). + +### Вклад в GenAI Example + +Кожен із прикладів в OPEA GenAIExamples є поширеним рішенням, що часто використовується. Кожен з них має скрипти для полегшення розгортання і був протестований на продуктивність і масштабованість за допомогою Docker compose і Kubernetes. Мінімальною вимогою при наданні прикладу є розгортання Docker Compose. Однак, оскільки OPEA призначено для корпоративних додатків, підтримка розгортання Kubernetes настійно рекомендується. Ви можете знайти [приклади розгортання Kubernetes](https://github.com/opea-project/GenAIExamples/tree/main/README.md#deploy-examples) за допомогою маніфестів, діаграм Helms та [GenAI Microservices Connector (GMC)](https://github.com/opea-project/GenAIInfra/tree/main/microservices-connector/README.md). GMC пропонує додаткові корпоративні функції, такі як можливість динамічного налаштування конвеєрів на Kubernetes (наприклад, перемикання на інший LLM на льоту, додавання захисних екранів), складання конвеєрів, які включають зовнішні сервіси, розміщені в публічній хмарі або локально через URL, а також підтримку послідовних, паралельних і умовних потоків в конвеєрах. + +- Перейдіть до [OPEA GenAIExamples] (https://github.com/opea-project/GenAIExamples/tree/main/README.md) і перегляньте каталог прикладів. Якщо ви знайдете приклад, який дуже схожий на той, що ви шукаєте, ви можете додати свій варіант до цієї папки з прикладами. Якщо ви приносите абсолютно нову програму, вам потрібно буде створити окрему папку з прикладами. + +- Перш ніж з'єднати всі мікросервіси для створення вашого додатку, давайте переконаємося, що всі необхідні будівельні блоки доступні! Погляньте на цю блок-схему **ChatQnA Flow Chart**: + +```mermaid +--- +config: + flowchart: + nodeSpacing: 100 + rankSpacing: 100 + curve: linear + theme: base + themeVariables: + fontSize: 42px +--- +flowchart LR + %% Colors %% + classDef blue fill:#ADD8E6,stroke:#ADD8E6,stroke-width:2px,fill-opacity:0.5 + classDef orange fill:#FBAA60,stroke:#ADD8E6,stroke-width:2px,fill-opacity:0.5 + classDef orchid fill:#C26DBC,stroke:#ADD8E6,stroke-width:2px,fill-opacity:0.5 + classDef invisible fill:transparent,stroke:transparent; + style ChatQnA-MegaService stroke:#000000 + %% Subgraphs %% + subgraph ChatQnA-MegaService["ChatQnA-MegaService"] + direction LR + EM([Embedding
]):::blue + RET([Retrieval
]):::blue + RER([Rerank
]):::blue + LLM([LLM
]):::blue + end + subgraph User Interface + direction TB + a([User Input Query]):::orchid + Ingest([Ingest data]):::orchid + UI([UI server
]):::orchid + end + subgraph ChatQnA GateWay + direction LR + invisible1[ ]:::invisible + GW([ChatQnA GateWay
]):::orange + end + subgraph . + X([OPEA Micsrservice]):::blue + Y{{Open Source Service}} + Z([OPEA Gateway]):::orange + Z1([UI]):::orchid + end + + TEI_RER{{Reranking service
}} + TEI_EM{{Embedding service
}} + VDB{{Vector DB

}} + R_RET{{Retriever service
}} + DP([Data Preparation
]):::blue + LLM_gen{{LLM Service
}} + + %% Data Preparation flow + %% Ingest data flow + direction LR + Ingest[Ingest data] -->|a| UI + UI -->|b| DP + DP <-.->|c| TEI_EM + + %% Questions interaction + direction LR + a[User Input Query] -->|1| UI + UI -->|2| GW + GW <==>|3| ChatQnA-MegaService + EM ==>|4| RET + RET ==>|5| RER + RER ==>|6| LLM + + + %% Embedding service flow + direction TB + EM <-.->|3'| TEI_EM + RET <-.->|4'| R_RET + RER <-.->|5'| TEI_RER + LLM <-.->|6'| LLM_gen + + direction TB + %% Vector DB interaction + R_RET <-.->|d|VDB + DP <-.->|d|VDB + +``` + +- OPEA використовує шлюзи для обробки запитів і перенаправлення їх до відповідних мегасервісів (якщо у вас немає агента, який виконує функцію шлюзу). Якщо ви вносите невеликі зміни до програми, наприклад, замінюєте одну БД на іншу, ви можете повторно використовувати існуючий шлюз, але якщо ви створюєте абсолютно нову програму, вам потрібно буде додати клас шлюзу. Перейдіть до [OPEA GenAIComps Gateway] (https://github.com/opea-project/GenAIComps/blob/main/comps/cores/mega/gateway.py) і визначте, як шлюз повинен обробляти запити для вашої програми. Зауважте, що реалізація шлюзу буде перенесена до GenAIExamples у майбутньому випуску. + +- Дотримуйтесь структури папок у прикладі ChatQA нижче: + + ``` + ├── assets + ├── benchmark # optional + ├── chatqna.py # Main application definition (microservices, megaservice, gateway). + ├── chatqna.yaml # starting v1.0 used to generate manifests for k8s w orchestrator_with_yaml + ├── docker_compose + │ ├── intel + │ │ ├── cpu + │ │ │ └── xeon + │ │ │ ├── compose.yaml + │ │ │ ├── README.md + │ │ │ └── set_env.sh #export env variables + │ │ └── hpu + │ │ └── gaudi + │ │ ├── compose.yaml + │ │ ├── how_to_validate_service.md #optional + │ │ ├── README.md + │ │ └── set_env.sh + │ └── nvidia + │ └── gpu + │ ├── compose.yaml + │ ├── README.md + │ └── set_env.sh + ├── Dockerfile + ├── docker_image_build + │ └── build.yaml + ├── kubernetes + │ ├── intel + │ │ ├── cpu + │ │ │ └── xeon + │ │ │ ├── gmc + │ │ │ │ └── chatQnA_xeon.yaml + │ │ │ └── manifest + │ │ │ └── chatqna.yaml + │ │ └── hpu + │ │ └── gaudi + │ │ ├── gmc + │ │ │ └── chatQnA_gaudi.yaml + │ │ └── manifest + │ │ └── chatqna.yaml + │ ├── amd + │ │ ├── cpu + │ │ │ ├── gmc + │ │ │ └── manifest + │ │ └── gpu + │ │ ├── gmc + │ │ └── manifest + │ ├── README_gmc.md # K8s quickstar + │ └── README.md # quickstart + ├── README.md + ├── tests + │ ├── test_compose_on_gaudi.sh #could be more tests for different flavors of the app + │ ├── test_gmc_on_gaudi.sh + │ ├── test_manifest_on_gaudi.sh + └── ui + + ``` + + - **Описи файлів**: + - `chatqna.py`: визначення додатків з використанням мікросервісу, мегасервісу та шлюзу. У теці може бути декілька .py-файлів на основі невеликої модифікації прикладу програми. + - `docker_build_image/build.yaml`: збирає необхідні образи, вказуючи на Docker-файли у репозиторії GenAIComp. + - `docker_compose/vendor/device/compose.yaml`: визначає конвеєр для розгортання Docker compose. Для вибору імені образу докера, будь ласка, дотримуйтесь правил іменування: + - Docker Image: `opea/[example name]-[feature name]:latest` всі нижчі кейси (i.e: opea/chatqna, opea/codegen-react-ui) + - `kubernetes/vendor/device/manifests/chatqna.yaml`: використовується для розгортання K8 + - `kubernetes/vendor/device/gmc/chatqna.yaml`: (опціонально) використовується для розгортання з GMC + - `tests/`: Як мінімум, вам потрібно забезпечити E2E-тест з Docker compose. Якщо ви вносите зміни до маніфестів K8s та GMC yaml, ви також повинні надати тест для них. Будь ласка, дотримуйтесь правил іменування: + - Docker compose test: `tests/test_compose_on_[hardware].sh` + - K8s test: `tests/test_manifest_on_[hardware].sh` + - K8s with GMC test: `tests/test_gmc_on_[hardware].sh` + - `ui`: (опціонально) + - `assets`: приємно мати схему роботи програми + +#### Додаткові кроки, якщо ваш внесок стосується конкретного обладнання + +Вам знадобляться додаткові кроки для налаштування CI/CD, щоб спочатку протестувати, а потім розгорнути об'єднаний GenAIComp або GenAIExample. + +- Підключіть обладнання до OPEA GitHub Actions ([GHA](https://docs.github.com/en/actions)) як саморозміщений пускач +- Створення тестових скриптів для нового обладнання +- Докер-файл для компонента (i,e `GenAIComp/comps/llm/text-generation/tgi/Dockerfile.[vendor]_[hardware]` ) +- Оновлення yaml збірки зображень для нових зображень +- Оновлення робочого процесу CI/CD для визначення та розгортання нового тесту + +Супровідник OPEA [@chensuyue] (mailto://suyue.chen@intel.com) може допомогти в цьому процесі. + +### Обговорення в спільноті + +Розробники можуть взяти участь в обговоренні, відкривши тему в одному з репозиторіїв GitHub за адресою https://github.com/opea-project. Крім того, вони можуть надіслати електронного листа на адресу [info@opea.dev](mailto://info@opea.dev) або підписатися на [X/Twitter](https://twitter.com/opeadev) та [LinkedIn Page](https://www.linkedin.com/company/opeadev/posts/?feedView=all), щоб отримувати останні новини про проект OPEA. + +### Документація + +Якість документації проекту OPEA може мати величезний вплив на його успіх. Ми закликаємо супровідників і дописувачів OPEA створювати чітку, детальну й актуальну документацію для користувачів.. + +### Звітування про проблеми + +Якщо користувач OPEA зіткнувся з якоюсь несподіваною поведінкою, найкраще повідомити про проблему на сторінці `Issues` у відповідному проекті на github. Будь ласка, переконайтеся, що у списку проблем немає подібної проблеми. Будь ласка, дотримуйтесь шаблону повідомлення про помилку і надайте якомога більше інформації, а також будь-які додаткові відомості, які ви можете мати. Буде корисно, якщо автор проблеми зможе звузити проблемну поведінку до мінімального відтворюваного тестового кейсу. + +### Пропонування нових функцій + +Спільноти OPEA використовують процес RFC (запит на коментарі) для спільної роботи над суттєвими змінами до проектів OPEA. Процес RFC дозволяє учасникам співпрацювати під час процесу розробки, забезпечуючи ясність і перевірку перед тим, як переходити до реалізації. + +*Коли потрібен процес RFC?* + +Процес RFC необхідний для внесення змін, які мають значний вплив на кінцевих користувачів, робочий процес або API, орієнтований на користувача. Зазвичай він включає в себе: + +- Зміни в основному робочому процесі. +- Зміни зі значними архітектурними наслідками. +- зміни, які модифікують або впроваджують інтерфейси, орієнтовані на користувача. + +Це не обов'язково для таких змін, як: + +- Виправлення помилок і оптимізація без семантичних змін. +- Невеликі функції, які не передбачають зміни робочого процесу або інтерфейсу, і впливають лише на вузьке коло користувачів. + +#### Покрокові інструкції + +- Щоб запропонувати свою ідею, використовуйте цей шаблон RFC (знаходиться в docs repo community/rfcs/rfc_template.txt): + + ``` + {literalinclude} rfcs/rfc_template.txt + ``` + +- Подати пропозицію на сторінку `Issues` відповідного репозиторію OPEA на github. +- Якщо вам потрібна допомога з процесом створення RFC, зверніться до його правонаступника. +- Внести зміни у вашу заявку у відповідь на відгуки рецензента. + +### Подання pull-запитів + +#### Створення Pull-запитів + +Якщо у вас є ідеї щодо покращення проектів OPEA, надсилайте свої запити до кожного проекту на розгляд. +Якщо ви новачок на GitHub, перегляньте запит [Як це зробити](https://help.github.com/articles/using-pull-requests/). + +##### Покрокові інструкції + +- Поставте "зірку" цьому репозиторію використовуючи кнопку `Star` в верхньому правому кутку. +- Зробіть форк відповідного репозиторію OPEA за допомогою кнопки `Fork` у верхньому правому кутку. +- Клонуйте ваш форкований репозиторій на ваш ПК, виконавши `git clone "url to your repo"`. +- Створіть нову гілку для ваших змін, виконавши `git checkout -b new-branch`. +- Додайте файли командою `git add -A`, зафіксуйте `git commit -s -m "Це моє повідомлення про фіксацію"` і проштовхніть `git push origin new-branch`. +- Створіть "pull request" для проекту, до якого ви хочете долучитися. + +#### Шаблон Pull-запиту + +Коли ви подаєте PR, вам буде представлений шаблон PR, який виглядає +приблизно так: + +``` +{literalinclude} pull_request_template.txt +``` + +#### Критерії прийняття Pull-Запиту + +- Щонайменше два схвалення від рецензентів + +- Проходження всіх виявлених перевірок стану + +- Всі розмови вирішені + +- Сумісність із ліцензіями сторонніх розробників + +#### Огляд перевірок стану Pull-Запиту + +Проєкти OPEA використовують GitHub Action для тестування CI. + +| Назва тесту | Сфера тестування | Критерії проходження тесту | +|--------------------|-------------------------------------------|--------------------| +| DCO | Use `git commit -s` to sign off | PASS | +| Code Format Scan | pre-commit.ci [Bot] | PASS | +| Code Security Scan | Bandit/Hadolint/Dependabot/CodeQL/Trellix | PASS | +| Unit Test | Unit test under test folder | PASS | +| End to End Test | End to end test workflow | PASS | + +- [Developer Certificate of Origin (DCO)](https://en.wikipedia.org/wiki/Developer_Certificate_of_Origin), PR повинен погодитися з умовами Developer Certificate of Origin, підписавши кожну з коммітів за допомогою `-s`, наприклад, + + `git commit -s -m 'This is my commit message'`. +- Юніт-тест, PR повинен пройти всі юніт-тести і без регресії покриття. +- Наскрізний тест, PR повинен пройти всі наскрізні тести. + +#### Огляд pull-запиту +Ви можете додати рецензентів зі [списку власників коду](../codeowner.md) до свого PR. + +## Підтримка + +- Не соромтеся звертатися за підтримкою до [супровідників OPEA](mailto://info@opea.dev). +- Надсилайте свої запитання, запити на розробку та повідомлення про помилки на сторінку проблем GitHub. + +## Кодекс поведінки учасника Угоди про вклад + +Цей проєкт має на меті стати безпечним, гостинним простором для співпраці, і очікується, що його учасники дотримуватимуться наступних правил [Contributor Covenant Code of Conduct](./CODE_OF_CONDUCT.md). diff --git a/docs-ua/community/ContributionGuidelines.txt b/docs-ua/community/ContributionGuidelines.txt new file mode 100755 index 00000000..22940ff1 --- /dev/null +++ b/docs-ua/community/ContributionGuidelines.txt @@ -0,0 +1,868 @@ +# Посібник із здійснення внесків + +Дякуємо, що розглядаєте можливість долучитися до проекту OPEA. +Процес внесення пропозицій подібний до інших проектів з відкритим вихідним кодом на Github, +що передбачає відкрите обговорення проблем і запитів щодо функцій між супровідниками, дописувачами та користувачами. + +Як проект з відкритим вихідним кодом, ми вітаємо і заохочуємо спільноту надсилати патчі безпосередньо до проекту. +У нашому спільному середовищі з відкритим вихідним кодом стандарти і методи подання змін допомагають зменшити хаос, +який може виникнути в результаті активної спільноти розробників. + +Цей документ пояснює, як брати участь в обговореннях проекту, реєструвати помилки і запити на поліпшення, +а також надсилати виправлення до проекту, щоб ваші виправлення були швидко прийняті в кодову базу. + +## Підтримка + +- Не соромтеся звертатися за підтримкою на [opea@opea.dev] (mailto: info@opea.dev). +- Надсилайте свої запитання, запити на розробку та повідомлення про помилки на сторінку проблем GitHub. + +## Contributor Covenant Code of Conduct + +Цей проєкт має на меті стати безпечним, гостинним простором для співпраці, +і очікується, що його учасники дотримуватимуться наступних правил +[Contributor Covenant Code of Conduct](./CODE_OF_CONDUCT.md). + +## Обговорення у спільноті + +Розробникам пропонується взяти участь в обговоренні, відкривши тему в +одному з репозиторіїв GitHub за адресою +[github.com/opea-project](https://github.com/opea-project). Крім того, ви можете надіслати +електронного листа на адресу [info@opea.dev](mailto:info@opea.dev) або підпишіться на +[X/Twitter](https://twitter.com/opeadev) або +[LinkedIn](https://www.linkedin.com/company/opeadev/posts/?feedView=all), щоб отримувати +останні новини про проєкт OPEA. + +## Документація + +Якість документації проекту OPEA може мати величезний вплив на його успіх. +Ми закликаємо супровідників та дописувачів OPEA створювати чітку, детальну та актуальну документацію для користувачів. + +## Ліцензування + +Ліцензування дуже важливе для проектів з відкритим кодом. +Воно допомагає гарантувати, що програмне забезпечення продовжує бути доступним на умовах, які бажав автор. + +.. _Apache 2.0 license: + https://github.com/opea-project/License/blob/main/LICENSE.txt + +.. _GitHub repo: https://github.com/opea-project + +OPEA використовує [Apache 2.0 license](https://github.com/opea-project/License/blob/main/LICENSE.txt) +(як можна знайти у файлі LICENSE у +[GitHub Repos](https://github.com/opea-project), щоб досягти балансу між відкритим +внеском і можливістю використовувати програмне забезпечення так, як ви бажаєте. +використовувати програмне забезпечення так, як ви бажаєте. +Ліцензія Apache 2.0 - це дозвільна ліцензія з відкритим вихідним кодом, яка +дозволяє вам вільно використовувати, змінювати, розповсюджувати і продавати ваші власні продукти +до складу яких входить програмне забезпечення під ліцензією Apache 2.0. + +Ліцензія вказує вам, які права ви маєте як розробник, як це передбачено +власником авторських прав. Важливо, щоб дописувач повністю розумів +ліцензійні права та погодився з ними. Іноді власник авторських прав не є автором, наприклад, +коли автор виконує роботу від імені компанії. + +### Компоненти, що використовують інші ліцензії + +Імпорт коду до проекту OPEA з інших проектів, які використовують ліцензію, +відмінну від ліцензії Apache 2.0, має бути повністю зрозумілим у контексті та схваленим правлінням OPEA. + +Ретельно перевіряючи потенційні внески, а також забезпечуючи дотримання DCO для наданого коду, +ми можемо гарантувати, що спільнота OPEA може розробляти продукти в рамках проекту OPEA, +не турбуючись про патентні та авторські права. + +## Повідомлення про авторські права + +Будь ласка, дотримуйтесь цих [Community Best Practice](https://www.linuxfoundation.org/blog/copyright-notices-in-open-source-software-projects/) +для отримання повідомлень про авторські права від Linux Foundation. + +## Сертифікація походження розробника (DCO) + +Для того, щоб добросовісно забезпечити дотримання критеріїв ліцензування, +проект OPEA вимагає дотримання процедури отримання сертифікату походження розробника (DCO). + +DCO - це сертифікат, який додається до кожного внеску, зробленого кожним +розробником. У повідомленні про фіксацію внеску (більш детально описано +далі у цьому документі), розробник просто додає ``Підписано`` +і тим самим погоджується з DCO. + +Коли розробник подає патч, він зобов'язується, що учасник має право подати патч згідно з ліцензією. +Угоду DCO показано нижче та на [developercertificate.org](http://developercertificate.org/). + +``` +Developer's Certificate of Origin 1.1 + +By making a contribution to this project, I certify that: + +(a) Внесок був створений повністю або частково мною, і я маю право подати його на умовах ліцензії з відкритим вихідним кодом, зазначеної у файлі; або + +(b) Внесок базується на попередній роботі, яка, наскільки мені відомо, поширюється під відповідною ліцензією з відкритим вихідним кодом, + і я маю право за цією ліцензією подавати цю роботу зі змінами, створеними повністю або частково мною, + під тією ж ліцензією з відкритим вихідним кодом (якщо мені не дозволено подавати роботу під іншою ліцензією), як зазначено у файлі; або + +(c) Внесок був наданий мені безпосередньо іншою особою, яка засвідчила (a), (b) або (c), і я не змінював його. + +(d) Я розумію і погоджуюся, що цей проект і мій внесок є публічними, і що запис про мій внесок (включаючи всю особисту інформацію, + яку я надаю разом з ним, включаючи мій підпис) зберігається протягом невизначеного терміну і може бути розповсюджений + відповідно до цього проекту або ліцензії з відкритим вихідним кодом, що використовується. +``` + +### Підписання DCO + +Підписанням у DCO є рядок `Signed-off-by:` у повідомленні журналу кожного комміту. +Рядок Signed-off-by: повинен мати наступний формат: + +``` +Signed-off-by: Your Name +``` + +Для ваших коммітів замініть: + +- `Your Name` з вашим юридичним ім'ям (псевдоніми, хакерські псевдоніми та назви груп не допускаються) + +- `your.email@example.com` з тією ж адресою електронної пошти, яку ви використовуєте для авторизації комміту (CI зазнає невдачі, якщо вона не збігається). + +Ви можете автоматично додати рядок Signed-off-by: до тіла коміту за допомогою `git commit -s`. Використовуйте інші комміти в історії opea git як приклади. + +Додаткові вимоги: + +- Якщо ви змінюєте існуючий коміт, створений кимось іншим, ви повинні додати свій рядок Signed-off-by:, не видаляючи існуючий. + +- Якщо ви забули додати рядок Signed-off-by:, ви можете додати його до попереднього коміту, виконавши `git commit --amend -s`. + +- Якщо ви вже виклали свої зміни на GitHub, вам потрібно буде примусово проштовхнути гілку після цього за допомогою `git push -f`. + +### Примітки + +Будь-які внески, зроблені в рамках поданих запитів, вважаються вільними для використання Проєктом. +Розробникам дозволяється вибирати патчі, включені до запитів, поданих іншими учасниками. Очікується, що + +* вміст патчів не буде суттєво змінено, +* відібрані комміти або частини коммітів повинні зберігати оригінальні повідомлення про підписання й особистість автора. + +## Передумови + +Як учасник, ви повинні бути знайомі з проєктом OPEA, знати, як його налаштувати, встановити і використовувати, а також як налаштувати своє середовище розробки. + +Ви повинні бути знайомі з поширеними інструментами для розробників, такими як Git, і платформами, такими як GitHub. + +## Пропонування нові функції + +Спільноти OPEA використовують процес RFC (запит на коментарі) для спільної роботи над суттєвими змінами в проектах OPEA. +Процес RFC дозволяє учасникам співпрацювати під час процесу розробки, забезпечуючи ясність і перевірку перед тим, як перейти до реалізації. + +Процес RFC необхідний для змін, які мають значний вплив на кінцевих користувачів, робочий процес або API, орієнтований на користувача. + +Він в основному включає: + +- Зміни в основному робочому процесі. +- Зміни зі значними архітектурними наслідками. +- Зміни, які модифікують або впроваджують інтерфейси, орієнтовані на користувача. + +Це не обов'язково для таких змін, як: + +- Виправлення помилок і оптимізація без семантичних змін. +- Невеликі функції, які не передбачають зміни робочого процесу або інтерфейсу і впливають лише на вузьку область використання. + +Покрокові інструкції +#################### + +- Дотримуйтесь [RFC Template](./rfc_template.md), щоб запропонувати свою ідею. +- Подати пропозицію на сторінку `Issues` відповідного репозиторію OPEA на github. +- Якщо вам потрібна допомога з процесом створення RFC, зверніться до його правонаступника.. +- Внести зміни у вашу заявку у відповідь на відгуки рецензента. + + +Pull-Запити і проблеми +********************** + +Подання Pull-Запитів +#################### + +Створення Pull-Запитів +###################### + +Якщо у вас є ідеї щодо покращення проектів OPEA, надсилайте свої запити до кожного проекту на розгляд. +Якщо ви новачок на GitHub, перегляньте про pull-запити [How To](https://help.github.com/articles/using-pull-requests/). + +Покрокові інструкції +#################### + +- Поставте "зірку" цьому репозиторію використовуючи кнопку `Star` в верхньому правому кутку. +- Зробіть форк відповідного репозиторію OPEA за допомогою кнопки `Fork` у верхньому правому кутку. +- Клонуйте ваш форкований репозиторій на ваш ПК, виконавши `git clone "url to your repo"`. +- Створіть нову гілку для ваших змін, виконавши `git checkout -b new-branch`. +- Додайте файли командою `git add -A`, зафіксуйте `git commit -s -m "Це моє повідомлення про фіксацію"` і проштовхніть `git push origin new-branch`. +- Створіть "pull request" для проекту, до якого ви хочете долучитися. + +Шаблон Pull-Запиту +################## + +Дивиться [PR template](./pull_request_template.md) + +Критерії прийняття Pull-Запиту +############################## + +- Щонайменше два схвалення від рецензентів + +- Проходження всіх виявлених перевірок стану + +- Всі розмови вирішені + +- Сумісність із ліцензіями сторонніх розробників + +Огляд перевірок стану Pull-Запиту +################################# + +Проєкти OPEA використовують GitHub Action для тестування CI. + +| Ім'я Тесту | Сфера тестування | Критерії проходження тесту | +|-------------------------|-----------------------------------------------|----------------------------| +| DCO | Використовуйте `git commit -s` для підписання | PASS | +| Сканування формату коду | pre-commit.ci [Bot] | PASS | +| Сканування безпеки коду | Bandit/Hadolint/Dependabot/CodeQL/Trellix | PASS | +| Юніт-тест | Юніт-тест у папці з тестом | PASS | +| Наскрізний тест | Наскрізний робочий процес тестування | PASS | + +- [Developer Certificate of Origin (DCO)](https://en.wikipedia.org/wiki/Developer_Certificate_of_Origin), PR повинен погодитися з умовами Developer Certificate of Origin, підписавши кожну з коммітів за допомогою `-s`, наприклад, `git commit -s -m 'Це моє повідомлення про комміти'.. +- Юніт-тест, PR повинен пройти всі юніт-тести і без регресії покриття. +- Наскрізний тест, PR повинен пройти всі наскрізні тести. + - Якщо основний реліз запроваджує новий мікросервіс для `GenAIComps`, то основний реліз повинен включати нові наскрізні тести. Назва тестового скрипту має збігатися з назвою теки, щоб тест автоматично запускався структурою тесту, наприклад, якщо новий сервіс `GenAIComps/comps/dataprep/redis/langchain`, то назва тестового скрипту має бути `GenAIComps/tests/test_dataprep_redis_langchain.sh`.. + - Якщо PR вводить новий приклад для `GenAIExamples`, то PR повинен включати нові приклади наскрізних тестів. Назва тестового скрипту має збігатися з назвою прикладу, щоб тест автоматично запускався структурою тесту, наприклад, якщо приклад `GenAIExamples/ChatQnA`, то назва тестового скрипту має бути `ChatQnA/tests/test_chatqna_on_gaudi.sh` і `ChatQnA/tests/test_chatqna_on_xeon.sh`.. + +Огляд Pull-Запиту +################# +Ви можете додати рецензентів зі [the code owners list](../codeowner.md) до свого PR. + + +.. _OPEA Project Issues: https://github.com/search?q=org%3Aopea-project+%2Fissues&type=issues + +.. _open pull requests: https://github.com/opea-project/GenAIComps/pulls + +.. _OPEA Technical Discuss: mailing list: https://lists.lfaidata.foundation/g/OPEA-technical-discuss + + +Перш ніж розпочати роботу над патчем, спершу перевірте наші проблеми у `OPEA Project Issues`_system, +щоб побачити, що було повідомлено про проблему, яку ви хочете вирішити. Зробить спілкування про те, що інші думають про вашу проблему +(і запропоноване рішення) на `OPEA Technical Discuss`. Ви можете знайти інших людей, які зіткнулися з проблемою, яку ви шукаєте, або які мають +схожі ідеї щодо змін або доповнень. Надішліть повідомлення в `OPEA Technical Discuss`, щоб представити і обговорити вашу ідею з спільнотою розробників. + +Завжди корисно шукати вже існуючі або пов'язані питання перед тим, як надсилати свій власний. +Коли ви надсилаєте проблему (запит на виправлення помилки або функціонал), команда сортування розгляне і прокоментує заявку, як правило, протягом декількох робочих днів. + +Ви можете знайти всі `open pull requests`_ на GitHub і відкрити `OPEA Project Issues_ в GitHub issues. + + +### Повідомлення о проблемах + +Якщо користувач OPEA зіткнувся з якоюсь несподіваною поведінкою, найкраще повідомити про проблему на сторінці `Issues` у відповідному github-проєкті. Будь ласка, переконайтеся, що у списку проблем немає подібної проблеми.) Будь ласка, дотримуйтесь шаблону повідомлення про помилку і надайте якомога більше інформації, а також будь-які додаткові відомості, які ви можете мати. Буде корисно, якщо автор повідомлення зможе звузити проблемну поведінку до мінімального відтворюваного тестового кейсу. + +.. _git_setup: + +Git Налаштування +**************** + +Нам потрібно знати, хто ви і як з вами зв'язатися. Щоб додати цю інформацію до вашої інсталяції Git'у, +встановіть у конфігураційних змінних Git'у ``user.name`` ваше повне ім'я, +а в ``user.email`` - адресу вашої електронної пошти. + +Наприклад, якщо ваше ім'я ``OPEA Developer`` і ваша електронна адреса ``opea.developer@example.com``: + +.. code-block:: console + + git config --global user.name "OPEA Developer" + git config --global user.email "opea.developer@example.com" + + +Посібник з Pull-Запиту +********************** +Відкриваючи новий запит на відкликання, дотримуйтесь наступних рекомендацій, щоб забезпечити +дотримання стандартів OPEA та полегшення процесу розгляду. + +Якщо у вас є сумніви, рекомендуємо ознайомитися з існуючими pull-запитами на вилучення в репозиторії OPEA. +Використовуйте пошукові фільтри та мітки, щоб знайти PR, пов'язані зі змінами подібні до тих, які ви пропонуєте. + +.. _commit-guidelines: + +Посібник з Повідомлень Коммітів +=============================== + +Зміни подаються у вигляді Git-коммітів. Кожен комміт має *повідомлення про комміт*, що описує зміну. Прийнятні повідомлення про комміти виглядають наступним чином: + +.. code-block:: none + + [area]: [summary of change] + + [Commit message body (must be non-empty)] + + Signed-off-by: [Your Full Name] <[your.email@address]> + +Вам потрібно змінити текст у квадратних дужках (``[ось так]``) вище, щоб він відповідав вашому комміту. + +Приклади та більш детальна інформація наведені нижче. + +Приклад +------- + +Ось приклад хорошого повідомлення комміта. + +.. code-block:: none + + drivers: sensor: abcd1234: fix bus I/O error handling + + The abcd1234 sensor driver is failing to check the flags field in + the response packet from the device which signals that an error + occurred. This can lead to reading invalid data from the response + buffer. Fix it by checking the flag and adding an error path. + + Signed-off-by: OPEA Developer + +[area]: [summary of change] +--------------------------- + +Цей рядок називається *назвою* коміту. Назва має бути обов'язковою: + +* один рядок +* довжиною менше 72 символів +* за яким слідує абсолютно порожній рядок + +[area] + Префікс ``[area]`` зазвичай визначає область коду, що змінюється. + Він також може визначати ширший контекст зміни, якщо вона зачіпає кілька областей. + + Ось кілька прикладів: + + * ``doc: ...`` для внесення змін до документації + * ``drivers: foo:`` для ``foo`` зміни драйверів + * ``Bluetooth: Shell:`` для внесення змін до оболонки Bluetooth + * ``net: ethernet:`` для змін у мережі, пов'язаних з Ethernet + * ``dts:`` для змін у всьому дереві пристроїв + * ``style:`` для зміни стилю коду + + Якщо ви не впевнені, що використовувати, спробуйте виконати ``git log FILE``, де + ``FILE`` - це файл, який ви змінюєте, і використовуючи попередні комміти, які + змінювали той самий файл як приклад. + +[summary of change] + Частина ``[summary of change]`` має бути коротким описом того, що ви зробили. Ось кілька прикладів: + + * ``doc: оновлено вікі-посилання на новий сайт`` + * ``drivers: sensor: sensor_shell: виправлено колізію назв каналів`` + +Тіло повідомлення комміту +------------------------- + +.. попередження:: + + Порожнє тіло повідомлення комміту не допускається. Навіть для тривіальних + змін, будь ласка, додайте описовий текст повідомлення комміту. Ваш + pull-запит не пройде перевірку CI, якщо ви не вкажете його. + +Ця частина комміту повинна пояснювати, що робить ваша зміна, і чому +вона потрібна. Будьте конкретними. Тіло, у якому сказано «Виправляє щось», буде +відхилено. Не забудьте включити наступне, якщо це доречно: + +* **що** зміна робить, +* **чому** ви обрали такий підхід, +* **що** були зроблені припущення, і +* **як** ви знаєте, що це працює - наприклад, які тести ви провели. + +Кожен рядок у вашому повідомленні комміту зазвичай повинен містити не більше 75 символів. +Використовуйте нові рядки для завершення довгих рядків. +Винятки становлять рядки з довгими URL-адресами, адресами електронної пошти тощо. + +Приклади прийнятих повідомлень про комміти можна знайти +в OPEA GitHub `changelog `__. + + +Підписано: ... +-------------- + +.. tip:: + + Ви вже мали б встановити свій :ref:`git_setup`. + Створіть ваш комміт за допомогою ``git commit -s``, + щоб автоматично додати рядок Signed-off-by:, використовуючи цю інформацію. + +З міркувань ліцензування відкритого вихідного коду, +ваш комміт повинен містити рядок Signed-off-by:, який виглядає наступним чином: + +.. code-block:: none + + Signed-off-by: [Your Full Name] <[your.email@address]> + +Наприклад, якщо ваше повне ім'я ``OPEA Developer`` і ваша електронна адреса ``opea.developer@example.com``.: + +.. code-block:: none + + Signed-off-by: OPEA Developer + +Це означає, що ви особисто переконалися, що ваша зміна відповідає :ref:`DCO`. +З цієї причини ви повинні використовувати своє юридичне ім'я. +Псевдоніми або "хакерські псевдоніми" не допускаються. + +Ваше ім'я та адреса електронної пошти, які ви використовуєте, +повинні збігатися з ім'ям та адресою у полі ``Author:`` коміту Git'а. + +Дивіться :ref:`contributor-expectations` +для більш повного обговорення очікувань дописувачів та рецензентів. + +Додавання посилань +------------------ + +.. _GitHub references: + https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/autolinked-references-and-urls + +Не включайте `GitHub references`_ безпосередньо у повідомлення про коммітування, оскільки це може +це може втратити сенс, наприклад, у випадку розгалуження репозиторію. Замість цього, якщо зміна +стосується конкретної проблеми GitHub, включіть в повідомлення Pull Request +рядок виду: + +.. code-block:: none + + Fixes #[issue number] + +Де ``[issue number]`` номер відповідної проблеми GitHub. +Наприклад: + +.. code-block:: none + + Fixes: #1234 + +Ви можете вказати на іншу відповідну інформацію, яку можна знайти в Інтернеті, +використовуючи теги :code:`Link:`. Це включає, наприклад: проблеми GitHub, даташити, +довідкові посібники тощо. + +.. code-block:: none + + Link: https://github.com/opea-project/genAIComps/issues + +.. _coding_style: + +Стиль кодування +=============== + +.. _Linux kernel coding style: + https://kernel.org/doc/html/latest/process/coding-style.html + +Загалом, дотримуйтесь `стилю кодування ядра Linux`_, за наступними винятками: + +* Довжина рядка - 100 стовпців або менше. + У документації довші рядки для посилань на URL-адреси є дозволеним винятком. +* Додайте дужки до кожного оператора ``if``, ``else``, ``do``, ``while``, ``for`` і ``witch``, + навіть для однорядкових блоків коду. + Використовуйте прапорець ``--ігнорувати BRACES``, щоб змусити *checkpatch* припинити скаржитися. +* Використовуйте пробіли замість табуляції для вирівнювання коментарів після декларацій, якщо потрібно. +* Використовуйте однорядкові коментарі у стилі C89, ``/* */``. + Однорядковий коментар у стилі C99, ``//``, не допускається. +* Використовуйте ``/** */`` для коментарів щодо доксигену, які мають з'явитися у документації. +* Уникайте використання бінарних літералів (констант, що починаються з ``0b``). +* Уникайте використання не-ASCII символів у коді, якщо тільки це суттєво не покращує зрозумілість, + і в будь-якому випадку уникайте смайликів. + +Використовуйте ці рекомендації щодо кодування, щоб переконатися, +що ваша розробка відповідає стилю проекту та угодам щодо іменування. + +Для перевірки відповідності стилю коду ядра Linux використовується інструмент ``checkpatch`` з ліцензією GPL. + +.. note:: + checkpatch наразі не запускається на Windows. + +Чекпатч доступний у каталозі скриптів. Щоб викликати його при фіксації коду, +зробіть файл *$OPEA_BASE/.git/hooks/pre-commit* виконуваним і відредагуйте його так, щоб він містив: + +.. code-block:: bash + + #!/bin/sh + set -e exec + exec git diff --cached | ${OPEA_BASE}/scripts/checkpatch.pl - + +Замість того, щоб запускати чекпатч при кожному комміті, ви можете запускати його тільки перед тим, +як виставляти репо OPEA. Для цього зробіть файл *$OPEA_BASE/.git/hooks/pre-push* виконуваним +і відредагуйте його так, щоб він містив: + +.. code-block:: bash + + #!/bin/sh + remote="$1" + url="$2" + + z40=0000000000000000000000000000000000000000 + + echo "Run push hook" + + while read local_ref local_sha remote_ref remote_sha + do + args="$remote $url $local_ref $local_sha $remote_ref $remote_sha" + exec ${OPEA_BASE}/scripts/series-push-hook.sh $args + done + + exit 0 + +Якщо ви хочете відмінити вердикт checkpatch і проштовхнути гілку, незважаючи на повідомлені проблеми, +ви можете додати опцію --no-verify до команди git push. + +Повнішою альтернативою цьому є використання :ref:`check_compliance_py` скрипта. + +clang-format +------------ + +Інструмент `clang-format `_ може бути корисним +для швидкого переформатування великих обсягів нового вихідного коду +відповідно до наших стандартів `Coding Style`_ разом з файлом конфігурації ``.clang-format``, +що надається у сховищі. ``clang-format`` добре інтегровано у більшість редакторів, +але ви також можете запустити його вручну таким чином: + +.. code-block:: bash + + clang-format -i my_source_file.c + +``clang-format`` є частиною LLVM, яку можна завантажити з проєкту +``releases page `_. Зауважте, що якщо +ви користувач Linux, ``clang-format``, ймовірно, буде доступно у вигляді пакунка у +репозиторіях вашого дистрибутива. + +Якщо існують відмінності між настановами `Стилю кодування`_ та +форматуванням, створеним інструментами форматування коду, настанови `Стилю кодування`_ мають перевагу. +Якщо існує неоднозначність між інструментами форматування і настановами, супроводжувачі можуть вирішити, +який стиль слід застосовувати. + +.. _Continuous Integration: + +Безперервна інтеграція (CI) +=========================== + +Проєкт OPEA використовує систему безперервної інтеграції (CI), яка працює на +кожного Pull-запиту (PR) з метою перевірки декількох аспектів PR: + +* Форматування коммітів Git'а +* Стиль кодування +* Збірки Twister для різних архітектур і плат +* Збірка документації для перевірки будь-яких змін у документації + +CI виконується на Github Actions і використовує ті ж інструменти, що описані в розділі `Тести CI`_. +Результати CI повинні бути зеленими, що означає "Всі перевірки пройдено", перш ніж Pull-запит буде об'єднано. +CI виконується при створенні PR, а також кожного разу, коли PR змінюється за допомогою комміту. + +Поточний статус прогону КІ завжди можна знайти внизу сторінки GitHub PR, під статусом рецензії. +Залежно від успіху чи невдачі, ви побачите, чи був запуск успішним: + +* "All checks have passed" +* "All checks have failed" + +У разі невдачі ви можете натиснути на посилання «Details», представлене під +повідомлення про помилку, щоб перейти до «Github Actions» і переглянути +результати. +Після натискання на посилання ви потрапите на підсумкову сторінку ``Github actions`` +де буде показано таблицю з усіма різними збірками. Щоб побачити +яка збірка або тест не пройшли, натисніть на рядок, що містить невдалу (тобто +незелену) збірку. + +.. _CI Tests: + +Запуск тестів CI локально +========================= + +.. _check_compliance_py: + +check_compliance.py +------------------- + +Скрипт ``check_compliance.py`` слугує цінним інструментом для оцінки відповідності коду +встановленим керівним принципам та найкращим практикам OPEA. Цей скрипт є обгорткою для набору інструментів, +які виконують різні перевірки, зокрема, лінтерів і форматорів. + +Розробникам рекомендується запустити скрипт локально, щоб перевірити свої зміни, +перш ніж відкривати новий Pull-запит: + +.. code-block:: bash + + ./scripts/ci/check_compliance.py -c upstream/main.. + +twister +------- + +.. note:: + twister повністю підтримується тільки на Linux; + на Windows і MacOS виконання тестів не підтримується, тільки збірка. + +Якщо ви вважаєте, що ваша зміна може порушити якийсь тест, ви можете подати свій PR як чернетку +і дозволити CI проекту автоматично запустити :ref:`twister_script` для вас. + +Якщо тест не пройшов, ви можете перевірити в журналах запуску CI, як повторити його локально, наприклад: + +.. code-block:: bash + + west twister -p native_sim -s tests/drivers/build_all/sensor/sensors.generic_test + +.. _static_analysis: + +Статичний аналіз коду +********************* + +Coverity Scan - це безкоштовний сервіс для статичного аналізу коду проектів з відкритим вихідним кодом. +Він базується на комерційному продукті Coverity і може аналізувати код на C, C++ та Java. + +Статичний аналіз коду в Coverity не виконує код. Замість цього він використовує +абстрактну інтерпретацію, щоб отримати інформацію про потік управління коду і +потоку даних. Він здатний простежити всі можливі шляхи коду, якими може піти програма. +Наприклад, аналізатор розуміє, що malloc() повертає пам'ять, яка повинна бути +звільнити за допомогою функції free(). Він простежує всі розгалуження і виклики функцій, щоб побачити +чи всі можливі комбінації звільняють пам'ять. Аналізатор здатний виявити +різноманітні проблеми, такі як витік ресурсів (пам'яті, файлових дескрипторів), NULL +розіменування, використання після вільного, неперевірені значення, що повертаються, мертвий код, переповнення буфера, цілочисельні переповнення, неініціалізовані змінні та багато інших. + +Результати доступні на сайті `Coverity Scan `_. +Для того, щоб отримати доступ до результатів, вам необхідно створити власний обліковий запис. +На сторінці проекту OPEA ви можете вибрати "Додати мене до проекту", щоб бути доданим до проекту. +Нові учасники повинні бути схвалені адміністратором. + +Статичний аналіз кодової бази OPEA проводиться раз на два тижні. GitHub +проблеми автоматично створюються для всіх проблем, виявлених інструментами статичного аналізу. +Ці проблеми матимуть однаковий (або еквівалентний) пріоритет, визначений інструментом. + +Для забезпечення підзвітності та ефективного вирішення проблем, +вони призначаються відповідному супровіднику, який відповідає за відповідний код. + +Спеціальна команда, що складається з експертів у галузі статичного аналізу, +якості коду та безпеки програмного забезпечення, забезпечує ефективність процесу статичного +аналізу та перевіряє, що виявлені проблеми належним чином сортуються та вирішуються вчасно. + +Робочий процес +============== + +Якщо після аналізу звіту про покриття зроблено висновок, що він є хибно +позитивним, будь ласка, встановіть класифікацію на «False positive» або +«Intentional», дію “Ignore”, власника у власному обліковому записі та додайте +коментарій, чому проблема вважається хибнопозитивною або навмисною. + +Оновіть відповідну тему на Github у проєкті OPEA з деталями і закрийте її лише після виконання +наведених вище кроків на сайті сервісу сканування. Будь-які проблеми, закриті без виправлення або +без ігнорування запису в сервісі сканування, будуть автоматично відкриті знову, +якщо проблема продовжує бути присутньою в коді. + +.. _Contribution workflow: + +Процес роботи з внесками +************************ + +Однією з загальних практик, яку ми заохочуємо, є внесення невеликих, контрольованих змін. +Така практика спрощує перевірку, полегшує злиття і перезавантаження, +а також зберігає історію змін чіткою і чистою. + +При внесенні змін до проекту OPEA також важливо, щоб ви надали якомога більше інформації про ваші зміни, +оновили відповідну документацію та ретельно протестували ваші зміни перед поданням. + +Загальний робочий процес на GitHub, який використовують розробники OPEA, +використовує комбінацію команд командного рядка Git і взаємодії браузера з GitHub. +Як і у випадку з Git'ом, існує декілька способів виконання завдання. +Ми опишемо типовий робочий процес тут: + +.. _Створити вилку OPEA: + https://github.com/opea-project#fork-destination-box + +#. `Створить вилку OPEA`_ + на Вашому персональному акаунті на GitHub. (Натисніть на кнопку форка у верхньому правому куті сторінки репозиторію проекту OPEA на GitHub.) + +#. На вашому комп'ютері для розробки перейдіть до теки :file:`OPEA`, + яка була створена, коли ви :ref:`отримали код `:: + + cd opea-project + + Перейменуйте стандартний віддалений вказівник на `upstream репозиторій + `_ з ``origin`` на + ``upstream``:: + + git remote rename origin upstream + + Повідомте Git'у про щойно створений форк, назвавши його ``origin``:: + + git remote add origin https://github.com//opea-project + + і перевірте віддалені репозиторії:: + + git remote -v + + Вивід повинен виглядати приблизно так:: + + origin https://github.com//opea-project (fetch) + origin https://github.com//opea-project (push) + upstream https://github.com/opea-project (fetch) + upstream https://github.com/opea-project(push) + +#. Створіть тематичну гілку (поза ``main``) для своєї роботи (якщо ви вирішуєте + проблему, радимо вказати номер проблеми в назві гілки):: + + git checkout main + git checkout -b fix_comment_typo + + Деякі підсистеми OPEA розробляються на окремій гілці від + ``main``, тому вам може знадобитися вказати це у вашому замовленні:: + + git checkout -b fix_out_of_date_patch origin/net + +#. Вносимо зміни, тестуємо локально, + змінюємо, тестуємо, знову тестуємо, ... (див. також попередню главу про "твістер"). + +#. Коли все буде добре, запустіть процес pull-запиту, додавши змінені файли:: + + git add [file(s) that changed, add -p if you want to be more specific] + + Ви можете переглянути файли, які ще не поставлені на сцену, за допомогою:: + + git status + +#. Переконайтеся, що зміни, які потрібно зафіксувати, виглядають так, як ви очікували:: + + git diff --cached + +#. Зафіксуйте зміни в локальному репозиторії:: + + git commit -s + + Опція ``-s`` автоматично додає ваш рядок ``Signed-off-by:`` до вашого повідомлення про коммітування. + Ваш комміт буде відхилено без цього рядка, який вказує на вашу згоду з :ref:`DCO`. + Дивіться розділ :ref:`commit-guidelines` для отримання настанов щодо написання повідомлень про коммітування. + +#. Перенесіть гілку теми зі змінами на форк в особистому акаунті GitHub:: + + git push origin fix_comment_typo + +#. У веб-браузері перейдіть до вашого форкованого репо і натисніть на кнопку + ``Compare & pull request`` для гілки, над якою ви щойно працювали, і + ви хочете відкрити pull-запит з ним. + +#. Перегляньте зміни в запиті і переконайтеся, що ви відкриваєте запит для гілки ``main``. + Також має з'явитися заголовок і повідомлення з вашого повідомлення про фіксацію. + +#. Бот призначить одного або декількох запропонованих рецензентів (на основі файлу MAINTAINERS у репозиторії). + Якщо ви є учасником проекту, ви також можете вибрати додаткових рецензентів зараз. + +#. Натисніть кнопку "Надіслати", і ваш запит буде надіслано, він чекає на розгляд. + По мірі надходження коментарів від рецензентів буде надіслано електронний лист, + або ви можете перевірити свій запит на https://github.com/opea-project/pulls. + + .. note::По мірі об'єднання більшої кількості коммітів на сторінці PR GitHub + з'явиться повідомлення "Ця гілка застаріла відносно базової гілки" і кнопка "Оновити гілку" на сторінці PR. + Це повідомлення слід ігнорувати, оскільки коміти все одно будуть перезасновані в рамках злиття, + а запуск оновлення гілки з інтерфейсу GitHub призведе до втрати схвалення PR-менеджера. + +#. Поки ви чекаєте, поки ваш pull-запит буде прийнято і об'єднано, ви можете створити іншу гілку для роботи над іншим питанням. + (Переконайтеся, що ваша нова гілка не пов'язана з ``головною``, а не з попередньою гілкою).:: + + git checkout main + git checkout -b fix_another_issue + + і використовуйте той самий процес, описаний вище, для роботи над новою гілкою теми. + +#. Якщо рецензенти попросять внести зміни до вашого патчу, ви можете інтерактивно перезавантажити комміти, + щоб виправити проблеми, пов'язані з рецензіями. У вашому репозиторії розробки:: + + git rebase -i ^ + + В інтерактивному редакторі ребази замініть ``pick`` на ``edit``, щоб вибрати + конкретний комміт (якщо у вашому запиті на витягування їх декілька), або + видаліть рядок, щоб повністю видалити комміт. Потім відредагуйте файли, щоб виправити + проблеми в огляді. + + Як і раніше, перевіряйте та тестуйте свої зміни. Коли все буде готово, продовжуйте надсилати патч:: + + git add [file(s)] + git rebase --continue + + Оновіть коментар коміту, якщо потрібно, і продовжуйте:: + + git push --force origin fix_comment_typo + + Примусово відправивши оновлення, ваш початковий pull-запит буде оновлено вашими змінами, + тому вам не потрібно буде повторно надсилати pull-запит. + +#. Після того, як ви натиснете потрібну зміну, перевірте на сторінці PR, чи немає конфлікту злиття. + Якщо так, перезавантажте локальну гілку:: + + git fetch --all + git rebase --ignore-whitespace upstream/main + + Параметр ``--ignore-whitespace`` забороняє ``git apply`` (викликаний командою rebase) змінювати пробіли. + Вирішення конфліктів і повторна спроба:: + + git push --force origin fix_comment_typo + + .. note:: Хоча внесення поправок до коммітів і форсування є поширеною моделлю рецензування + за межами GitHub і рекомендована OPEA, вона не є основною + моделлю, яку підтримує GitHub. Примусове виштовхування може спричинити неочікувану поведінку, + наприклад, неможливість використання кнопок «Переглянути зміни», окрім останньої + GitHub скаржиться, що не може знайти старіші комміти. Ви також не завжди + завжди зможете порівняти останню переглянуту версію з останньою + надісланою версією. При переписуванні історії GitHub гарантує доступ лише + до останньої версії. + + +#. Якщо запуск CI не вдасться, вам потрібно буде внести зміни до вашого коду, + щоб виправити проблеми і внести зміни до ваших комітів шляхом перебазування, як описано вище. + Додаткову інформацію про систему CI можна знайти у розділі `Continuous Integration`_. + +.. _contribution_tips: + +Поради щодо внесків +=================== + +Нижче наведено список порад, які допоможуть покращити і пришвидшити процес розгляду Pull-запитів. +Якщо ви будете дотримуватися їх, швидше за все, ваш pull-запит отримає необхідну увагу +і буде готовий до злиття раніше, ніж пізніше: + +.. _git-rebase: + https://git-scm.com/docs/git-rebase#Documentation/git-rebase.txt---keep-base + +#. Під час проштовхування подальших змін використовуйте опцію ``--keep-base`` у `git-rebase`_. + +#. На сторінці PR перевірте, чи можна об'єднати зміни без конфліктів злиття + +#. Переконайтеся, що назва PR пояснює, що саме виправляється або додається + +#. Переконайтеся, що ваше PR-повідомлення має тіло з більш детальною інформацією про зміст вашої заявки + +#. Переконайтеся, що ви посилаєтеся на проблему, яку ви виправляєте, в тілі PR + +#. Переглядайте ранні результати аналізу відразу після подачі заявки та виправляйте помилки в міру їх виявлення + +#. Поверніться до PR через 1-2 години, щоб побачити статус усіх перевірок КІ, переконайтеся, що всі вони зелені + +#. Якщо ви отримали запит на внесення змін і надіслали зміни, щоб відповісти на нього, + переконайтеся, що обов'язково натиснули кнопку «Re-request review» в інтерфейсі GitHub, + щоб повідомити тих, хто просив про зміни + + +Визначення походження внеску +============================ + +Додаючи новий файл до дерева, важливо детально вказати джерело походження файлу, +надати атрибуцію та детальну інформацію про передбачуване використання. +У випадках, коли файл є оригіналом для OPEA, +повідомлення про фіксацію має містити наступне ("Оригінал" є припущенням, якщо тег Origin відсутній):: + + Origin: Original + +У випадках, коли файл :ref:`імпортовано із зовнішнього проєкту `, +повідомлення про коммітування має містити інформацію про оригінальний проєкт, місцезнаходження проєкту, +SHA-ідентифікатор оригінального комміту для файлу та його призначення. + +Наприклад, копія локально збереженого імпорту:: + + Origin: Contiki OS + License: BSD 3-Clause + URL: http://www.contiki-os.org/ + commit: 853207acfdc6549b10eb3e44504b1a75ae1ad63a + Purpose: of networking stack. + +Наприклад, копія імпорту, що підтримується ззовні, у репозиторії модулів:: + + Origin: Tiny Crypt + License: BSD 3-Clause + URL: https://github.com/01org/tinycrypt + commit: 08ded7f21529c39e5133688ffb93a9d0c94e5c6e + Purpose: of TinyCrypt + + + + + diff --git a/docs-ua/community/SECURITY.md b/docs-ua/community/SECURITY.md new file mode 100644 index 00000000..dcf947f6 --- /dev/null +++ b/docs-ua/community/SECURITY.md @@ -0,0 +1,9 @@ +# Повідомлення про вразливість + +Повідомляйте про будь-які уразливості безпеки в цьому проекті за наступною адресою [Linux Foundation security guidelines](https://www.linuxfoundation.org/security). + +## Повідомлення про використання скриптів + +ЗАСТЕРЕЖЕННЯ ЩОДО ВИКОРИСТАННЯ СКРИПТІВ: Завантажуючи та використовуючи будь-який файл сценарію, що входить до складу відповідного програмного забезпечення (наприклад, файли з розширенням .bat, .cmd або .JS, Docker-файли або будь-який інший тип файлів, які при виконанні автоматично завантажують та/або встановлюють файли у вашу систему) +(«Script File»), ви зобов'язані ознайомитися з ним, щоб зрозуміти, які файли (наприклад, інше програмне забезпечення, моделі ШІ, набори даних ШІ) файл сценарію завантажить у вашу систему («Downloaded Files»). +Крім того, завантажуючи та використовуючи Завантажені файли, навіть якщо вони встановлюються за допомогою «тихої установки», ви погоджуєтеся з усіма умовами та положеннями, пов'язаними з такими файлами, включаючи, але не обмежуючись ними, ліцензійні умови, повідомлення або відмову від відповідальності. diff --git a/docs-ua/community/TSC.rst b/docs-ua/community/TSC.rst new file mode 100644 index 00000000..f6f6ae86 --- /dev/null +++ b/docs-ua/community/TSC.rst @@ -0,0 +1,45 @@ +Технічний наглядовий комітет (TSC) +################################## + +Як визначено в :doc:`OPEA Charter `, Технічний наглядовий комітет відповідає за технічний нагляд за проєктом OPEA. +Комітет відповідає за весь технічний нагляд за проєктом OPEA включаючи: + +* координація технічного напрямку проєкту OPEA; +* затвердження проектних або системних пропозицій; +* створення комітетів або робочих груп (наприклад, виконавчого чи архітектурного комітету або консультативного комітету кінцевого споживача) для підтримки проєкту OPEA; +* призначення представників для роботи з іншими спільнотами з відкритим кодом або відкритими стандартами; +* встановлення норм спільноти, робочих процесів, випуску релізів та політик звітування про проблеми з безпекою; +* затвердження та впровадження політик і процесів для здійснення внесків +* обговорення, пошук консенсусу і, за необхідності, голосування з технічних питань, пов'язаних з кодовою базою, які впливають на кілька підпроєктів; +* координація будь-якого маркетингу, заходів або комунікацій, що стосуються проєкту OPEA. + +Зверніться до :doc:`OPEA Charter ` для більш детальної інформації. + +Члени Технічного наглядового комітету +************************************* + +.. list-table:: TSC Members (as of September 6, 2024) + :header-rows: 1 + + * - TSC Member Name + - Member's Title and Company + * - `Malini Bhandaru `_ (Chair) + - Senior Principal Engineer, Intel + * - `Amr Abdelhalem `_ + - SVP, Head of Cloud Platforms, Fidelity + * - `Nathan Cartwright `_ + - Chief Architect - AI, CDW + * - `Justin Cormack `_ + - CTO, Docker + * - `Ke Ding `_ + - Senior Prinicipal AI Engineer, Intel + * - Steve Grubb + - Senior Principal Engineer, Red Hat + * - `Robert Hafner `_ + - Senior Principal Architect, Comcast + * - `Melissa Mckay `_ + - Head of Developer Relations, JFrog + * - `Logan Markewich `_ + - Founding Software Developer, LlamaIndex + * - `Nick Ni `_ (Interim) + - Senior Director Ai Product Management, AMD diff --git a/docs-ua/community/charter.md b/docs-ua/community/charter.md new file mode 100644 index 00000000..aa395580 --- /dev/null +++ b/docs-ua/community/charter.md @@ -0,0 +1,77 @@ +# Технічна угода («Угода») для OPEA як частина проєктів LF Projects, LLC + + +Прийнята 12 квітня 2024 року + +Ця Угода визначає обов'язки та процедури технічного сприяння і нагляду за Проєктом OPEA з відкритим вихідним кодом, який було створено як частина проєктів LF Projects, LLC («Проєкт»). LF Projects, LLC («LF Projects») є товариством з обмеженою відповідальністю, зареєстрованим у штаті Делавер. Всі учасники (в тому числі розробники, супровідники та інші технічні працівники) та інші учасники Проєкту (разом - «Співробітники») повинні дотримуватися умов цієї Угоди. + + +## 1. Місія й обсяг проєкту + + 1. Місія проєкту полягає в розробці системи оркестрування екосистеми для ефективної інтеграції ефективних технологій GenAI та робочих процесів, що сприятиме швидшому впровадженню GenAI та підвищенню цінності бізнесу. + 2. Обсяг Проєкту включає спільну розробку за Ліцензією Проєкту (як визначено в цьому документі), що підтримує місію, включаючи документацію, тестування, інтеграцію та створення інших артефактів, які допомагають розробці, розгортанню, експлуатації або прийняттю Проєкту з відкритим вихідним кодом. + +## 2. Технічний наглядовий комітет + + 1. Технічний наглядовий комітет («TSC») відповідатиме за весь технічний нагляд за Проєктом з відкритим вихідним кодом. + 2. Членами з правом голосу в TSC спочатку є особи, перелічені як члени з правом голосу в TSC у файлі GOVERNANCE.MD у репозиторії управління Проєктом (переміщений до community/TSC.rst у репозиторії docs). На початку проєкту склад супровідників проєкту буде визначено у файлі «CONTRIBUTING» у репозиторії коду Проєкту. КРК може обрати альтернативний підхід до визначення членів КРК з правом голосу, і будь-який такий альтернативний підхід буде задокументований у файлі «GOVERNANCE» (зараз це файл TSC.rst). Проєкт має намір визначити додаткові деталі щодо складу TSC з метою забезпечення більшої різноманітності організацій, представлених у КРК, протягом 12 місяців після початку реалізації Проєкту або в інший термін, визначений TSC («Перехід до сталого стану»). Координаційний комітет очікує, що на момент переходу до сталого стану жодна компанія не матиме більше 50% працівників, які мають право голосу в Координаційному комітеті. Очікується, що терміни повноважень членів TSC з правом голосу спочатку будуть різними (приблизно половина - 1 рік, а решта - 2 роки), тому вибори відбуватимуться поетапно. Засідання Технічного наглядового комітету мають бути відкритими для громадськості і можуть проводитися в електронному вигляді, за допомогою телеконференцій або особисто. + 3. У проєктах TSC, як правило, беруть участь Дописувачі та Мейнтейнери. TSC може приймати або змінювати ролі, якщо вони задокументовані у файлі CONTRIBUTING. Якщо не задокументовано інше: + 1. Дописувачі - це будь-хто з технічної спільноти, хто надає код, документацію або інші технічні артефакти до проєкту; + 2. Мейнтейнери - це Учасники, які отримали можливість змінювати ("фіксувати" або об'єднувати pull-запити) вихідний код, документацію або інші технічні артефакти в репозиторії проєкту; і + 3. Дописувач може стати Мейнтейнером за умови схвалення більшістю існуючих мейнтейнерів. Виключення з числа учасників можливе за умови схвалення більшістю голосів інших учасників. + 4. Участь у Проєкті, ставши Дописувачем або Мейнтейнером, є відкритою для всіх, хто дотримується умов цієї Угоди. + 5. TSC може (1) встановлювати робочі процедури для подання, затвердження та закриття/архівування підпроектів, (2) встановлювати вимоги для підвищення статусу Дописувачів до статусу Мейтейнера, у відповідних випадках, та (3) змінювати, коригувати, уточнювати та/або скасовувати ролі Дописувачів та Мейтейнерів, а також створювати нові ролі та публічно документувати будь-які ролі TSC, якщо вважатиме за потрібне. + 6. TSC може обрати Голову TSC, який головуватиме на засіданнях TSC і виконуватиме свої обов'язки до його відставки або заміни TSC. Голова TSC або будь-який інший член TSC, призначений TSC, слугуватиме основним комунікаційним контактом між Проєктом і LF AI & Data Foundation, цільовим фондом The Linux Foundation. + 7. Обов'язки: TSC відповідатиме за всі аспекти технічного нагляду, пов'язані з Проєктом, які можуть включати: + 1. координує технічний напрямок Проєкту; + 2. затвердження проєктних або системних пропозицій (включаючи, але не обмежуючись, інкубацію, списання та зміну обсягу субпроєкту); + 3. організація субпроєктів і видалення субпроєктів; + 4. створення комітетів або робочих груп (наприклад, виконавчого чи архітектурного комітету або консультативного комітету кінцевого споживача) для підтримки проекту; + 5. призначення представників для роботи з іншими спільнотами з відкритим кодом або відкритими стандартами; + 6. встановлення норм спільноти, робочих процесів, випуску релізів та політик звітування про проблеми з безпекою; + 7. затвердження і впровадження політики та процедур щодо внесків (які будуть опубліковані у файлі CONTRIBUTING) і координації з менеджером серії Проєкту (як передбачено в Series Agreement, «Series Manager») для вирішення питань або проблем, які можуть виникнути, як зазначено в Розділі 7 цієї Угоди; + 8. обговорення, пошук консенсусу і, за необхідності, голосування з технічних питань, пов'язаних з кодовою базою, які впливають на кілька субпроєктів; і + 9. координація будь-якого маркетингу, заходів або комунікацій, пов'язаних з Проєктом. + +## 3. Голосування в TSC + + 1. Хоча Проєкт прагне працювати як спільнота, заснована на консенсусі, якщо будь-яке рішення TSC потребує голосування, члени TSC, які мають право голосу, голосуватимуть за принципом один голос на одного члена TSC, який має право голосу. + 2. Кворум для проведення засідань TSC вимагає присутності щонайменше п'ятдесяти відсотків усіх членів TSC які мають право голосу. За відсутності кворуму TSC може продовжувати засідання, але не може приймати жодних рішень на засіданні. + 3. За винятком випадків, передбачених у розділах 7.c. та 8.a, для прийняття рішень шляхом голосування на зборах необхідна більшість голосів присутніх членів, які мають право голосу, за умови наявності кворуму. Рішення, прийняті шляхом електронного голосування без проведення засідання, потребують більшості голосів усіх членів TSC, які мають право голосу.. + 4. У випадку, якщо TSC не може прийняти рішення щодо голосування, будь-який член TSC з правом голосу може передати питання на розгляд Series Manager для отримання допомоги у прийнятті рішення. + +## 4. Дотримання Політик + + 1. Ця Угода регулюється Серійною угодою Проєкту та Операційною угодою LF Projects. Донори зобов'язуються дотримуватися політик LF Projects, які можуть бути прийняті та змінені LF Projects, включаючи, без обмежень, політики, перелічені на сайті https://lfprojects.org/policies/. + 2. TSC може прийняти кодекс поведінки («CoC») для конкретного Проєкту, який підлягає затвердженню Series Manager. У випадку, якщо Кодекс поведінки для конкретного Проєкту не був затверджений, для всіх Співробітників Проєкту застосовується Кодекс поведінки для LF Projects Code of Conduct, розміщений на веб-сайті https://lfprojects.org/policies. + 3. При внесенні змін або прийнятті будь-якої політики, що застосовується до Проєкту, LF Projects опублікує таку політику в редакції, що підлягає зміні або прийняттю, на своєму веб-сайті щонайменше за 30 днів до набрання чинності такою політикою; за умови, однак, що в разі внесення будь-яких змін до Політики щодо торговельних марок або Умов використання LF Projects, будь-яка така зміна набуває чинності з моменту публікації на веб-сайті LF Projects. + 4. Усі Співучасники повинні дозволяти відкриту участь будь-якій особі чи організації, що відповідає вимогам до внеску згідно з цією Угодою та будь-якими політиками, прийнятими TSC для всіх Співучасників, незалежно від конкурентних інтересів, незалежно від того, чи є вони учасниками Проєкту. Іншими словами, спільнота Проєкту не повинна намагатися виключити будь-якого учасника на підставі будь-яких критеріїв, вимог або причин, окрім тих, що є обґрунтованими та застосовуються на недискримінаційній основі до всіх Співучасників у спільноті Проекту. + 5. Проєкт завжди працюватиме у прозорий, відкритий, спільний та етичний спосіб. Результати всіх обговорень, пропозицій, графіків, рішень і статусу проекту повинні бути відкритими і легко видимими для всіх. Про будь-які потенційні порушення цієї вимоги слід негайно повідомляти Series Manager.. + +## 5. Активи спільноти + + 1. LF Projects матиме право власності на всі торгові марки або знаки обслуговування, що використовуються Проєктом («Торгові марки Проекту»), незалежно від того, чи засновані вони на загальному праві, чи на зареєстрованих правах. Торгові марки Проєкту будуть передані та закріплені за LF Projects для використання від імені Проєкту. Будь-яке використання будь-яких Торгових марок Проєкту Співробітниками в рамках Проекту буде здійснюватися відповідно до ліцензії від LF Projects і діятиме на користь LF Projects. + 2. Проєкт, з дозволу та відповідно до такої ліцензії від LF Projects, розроблятиме та володітиме всіма акаунтами Проєкту на GitHub та в соціальних мережах, а також реєстраціями доменних імен, створених спільнотою Проєкту.. + 3. За жодних обставин від LF Projects не очікується і не вимагається вчинення будь-яких дій від імені Проєкту, які є несумісними з неоподатковуваним статусом або метою, залежно від обставин, Фонду спільного розвитку або ТОВ «ЛФ Проджектс».. + +## 6. Загальні правила та операції. + + 1. В рамках проєкту буде: + 1. брати участь у роботі Проєкту на професійному рівні, що відповідає підтримці згуртованої спільноти, зберігаючи при цьому доброзичливість та повагу до LF Projects, Фонду Спільного Розвитку та інших партнерських організацій у спільноті відкритого коду; а також + 2. поважати права всіх власників торгових марок, включаючи будь-які рекомендації щодо брендингу та використання торгових марок. + +## 7. Політика інтелектуальної власності + + 1. Учасники визнають, що авторські права на всі нові внески зберігатимуться за власником авторських прав як незалежні авторські твори, і що жоден учасник або власник авторських прав не повинен передавати авторські права на Проєкт. + 2. За винятком випадків, описаних у Розділі 7.c., всі внески до Проєкту підлягають наступним умовам: + 1. Всі нові вхідні внески коду до Проєкту повинні бути зроблені з використанням Ліцензії Apache, версія 2.0, доступної за адресою http://www.apache.org/licenses/LICENSE-2.0 ("Ліцензія Проєкту"); + 2. Всі нові вхідні внески коду повинні також супроводжуватися сертифікатом походження розробника (http://developercertificate.org), який підписується в системі вихідного коду, що подається в рамках затвердженого TSC процесу внесення внесків, який зв'язує уповноваженого учасника і, якщо він не є самозайнятою особою, його роботодавця, з відповідною ліцензією.; + 3. Весь вихідний код буде доступний за ліцензією Проєкту; + 4. Документація буде отримана та надана Проектом на умовах ліцензії Creative Commons Attribution 4.0 International License (доступна за посиланням http://creativecommons.org/licenses/by/4.0/); + 5. Проєкт може прагнути інтегруватися в інші проєкти з відкритим вихідним кодом ("Попередні проєкти") та робити свій внесок у них. У таких випадках Проєкт відповідатиме всім ліцензійним вимогам вищих проєктів, включно із залежністю від них, які використовуються Проєктом. Внески коду до висхідних проєктів, які не зберігаються в основному сховищі коду Проекту, мають відповідати процесу внесення та умовам ліцензії для відповідного висхідного проєкту. + 3. TSC може схвалити використання альтернативної ліцензії або ліцензій для вхідних або вихідних внесків на основі винятків. Щоб подати запит на виняток, будь ласка, опишіть внесок, альтернативну(і) ліцензію(ї) відкритого коду та обґрунтування використання альтернативної ліцензії відкритого коду для Проєкту. Винятки з ліцензії мають бути схвалені двома третинами голосів усіх членів TSC. + 4. Надані файли повинні містити інформацію про ліцензію, наприклад, короткі ідентифікатори SPDX, що вказують на ліцензію відкритого коду або ліцензії, що стосуються файлу.. + +## 8. Зміни та доповнення + + 1. Зміни до цієї Угоди можуть бути внесені двома третинами голосів кожного з членів TSC та підлягають затвердженню LF Projects. diff --git a/docs-ua/community/codeowner.md b/docs-ua/community/codeowner.md new file mode 100644 index 00000000..dc6fc65a --- /dev/null +++ b/docs-ua/community/codeowner.md @@ -0,0 +1,22 @@ +# OPEA Project Code Owners + +У цих таблицях перераховані власники коду GitHub, які можна знайти у файлі CODEOWNERS у відповідному репозиторії OPEA. +Власники коду несуть відповідальність за код і +документацію у репозиторії. Вони автоматично запитуються на перевірку, коли хтось відкриває pull-запит (PR), який змінює код або документацію, що їм належить. + +Виберіть або зв'яжіться з власником відповідної області для PR-огляду або запитань щодо контенту в репозиторії. + + + +```{include} codeowners.txt +``` + +----- + +## Continuous Integration (CI/CD) owners + +CI/CD обробка визначається й управляється цими власниками: + +* chensuyue, daisy-ycguo, ashahba, preethivenkatesh + + diff --git a/docs-ua/community/index.rst b/docs-ua/community/index.rst new file mode 100644 index 00000000..f5522b03 --- /dev/null +++ b/docs-ua/community/index.rst @@ -0,0 +1,75 @@ +.. _OPEA_community: + +Спільнота OPEA +############## + +Підтримка спільноти +******************* + +Ласкаво просимо до спільноти проекту OPEA! + +Спільнота OPEA включає розробників з організацій-членів і широкої громадськості, які долучаються до розвитку проекту. Учасники роблять свій внесок і +обговорюють ідеї, повідомляють про помилки та їх виправлення, а також покращують документацію. Вони також +допомагають тим, хто цього потребує, через форуми та списки розсилки спільноти. Будь-хто може +приєднатися до спільноти розробників, і спільнота завжди готова допомогти своїм +і спільнота завжди готова допомогти своїм членам і спільноті користувачів отримати максимальну користь від OPEA. + +Ресурси +******* + +Ось короткий огляд ресурсів, які допоможуть вам зорієнтуватися в системах підтримки проекту OPEA: + +* **OPEA Project Website**: Веб-сайт https://opea.dev є основним джерелом інформації про те, що відбувається в рамках проекту OPEA. На ньому ви знайдете довідкову та поточну інформацію про проект, а також відповідні посилання на матеріали проекту. + +* **Source Code in GitHub**: Вихідний код проекту OPEA підтримується на публічному репозиторії GitHub за адресою https://github.com/opea-project. + Ви знайдете інформацію про те, як отримати доступ до репозиторію та як зробити свій внесок у проект у цьому документі :doc:`Contribution Guide `. + +* **Documentation**: Технічна документація проекту розробляється разом з кодом проекту, і її можна знайти на сайті https://opea-project.github.io. + +* **Issue Reporting and Tracking**: Вимоги та відстеження проблем здійснюється в системі проблем Github в кожному з основних репозиторіїв, таких як: https://github.com/opea-project/GenAIComps/issues. Ви можете переглядати повідомлені проблеми та надсилати свої власні проблеми. + +* **Mailing List**: TBD + + +Інструкції щодо вкладу +********************** + +.. toctree:: + :maxdepth: 1 + + ../README + CONTRIBUTING + codeowner + SECURITY + ../developer-guides/doc_guidelines + ../developer-guides/docbuild + ../developer-guides/graphviz + +Дорожня мапа +************ + +.. toctree:: + :maxdepth: 1 + :glob: + + ../roadmap/* + + +Управління проєктом +******************* + +.. toctree:: + :maxdepth: 1 + + charter + TSC + CODE_OF_CONDUCT + SECURITY + +Пропозиції RFC +************** + +.. toctree:: + :maxdepth: 1 + + rfcs diff --git a/docs-ua/community/pull_request_template.txt b/docs-ua/community/pull_request_template.txt new file mode 100644 index 00000000..1601754c --- /dev/null +++ b/docs-ua/community/pull_request_template.txt @@ -0,0 +1,24 @@ +## Опис + +Короткий виклад запропонованих змін з відповідною мотивацією і контекстом. + +## Проблеми + +Вкажіть проблему або посилання RFC, над якою працює цей PR. Якщо такого посилання немає, позначте його як `n/a`. + +## Тип зміни + +Перелічіть тип змін, як показано нижче. Будь ласка, видаліть варіанти, які не є релевантними. + +- [ ] Виправлення помилки (зміна, що не порушує роботу системи, але виправляє проблему) +- [ ] Нова функція (зміна, що не порушує роботу, але додає нову функціональність) +- [ ] Руйнівна зміна (виправлення або функція, яка порушує існуючий дизайн та інтерфейс) +- [ ] Інші (вдосконалення, документування, валідація тощо) + +## Залежності + +Перелічіть нещодавно введену залежність від третьої сторони, якщо вона існує. + +## Тести + +Опишіть тести, які ви провели для перевірки ваших змін. diff --git a/docs-ua/community/rfcs.rst b/docs-ua/community/rfcs.rst new file mode 100644 index 00000000..78a49052 --- /dev/null +++ b/docs-ua/community/rfcs.rst @@ -0,0 +1,28 @@ +.. _rfcs: + +Запит на коментарі (RFCs) +######################### + +.. include:: rfcs/README.md + :parser: myst_parser.sphinx_ + :start-after: # RFC Archive + +_____ + +.. toctree:: + :maxdepth: 1 + :glob: + + rfcs/2* + +----- + +Шаблон RFC +********** + +При створенні нового RFC дотримуйтесь існуючих RFC як приклад, або використовуйте цей шаблон: + +.. include:: rfcs/rfc_template.txt + :code: + + diff --git a/docs-ua/community/rfcs/24-05-16-GenAIExamples-001-Using_MicroService_to_implement_ChatQnA.md b/docs-ua/community/rfcs/24-05-16-GenAIExamples-001-Using_MicroService_to_implement_ChatQnA.md new file mode 100644 index 00000000..97d0224b --- /dev/null +++ b/docs-ua/community/rfcs/24-05-16-GenAIExamples-001-Using_MicroService_to_implement_ChatQnA.md @@ -0,0 +1,223 @@ +# 24-05-16 GenAIExamples-001 Using MicroService to Implement ChatQnA + +## Автори +[lvliang-intel](https://github.com/lvliang-intel), [ftian1](https://github.com/ftian1), [hshen14](https://github.com/hshen14), [Spycsh](https://github.com/Spycsh), [letonghan](https://github.com/letonghan) + +## Статус +На розгляді + +## Мета +Цей RFC має на меті представити мікросервісний дизайн OPEA та продемонструвати його застосування до розширеного покоління пошуку (RAG). Мета полягає у вирішенні проблеми розробки гнучкої архітектури для корпоративних додатків штучного інтелекту за допомогою мікросервісного підходу. Цей підхід полегшує розгортання, дозволяючи одному або декільком мікросервісам формувати мегасервіс. Кожен мегасервіс взаємодіє зі шлюзом, дозволяючи користувачам отримувати доступ до сервісів через кінцеві точки, відкриті шлюзом. Архітектура є загальною, і RAG є першим прикладом, який ми хочемо застосувати. + +## Мотивація +Використання архітектури мікросервісів при розробці корпоративних додатків штучного інтелекту дає значні переваги, особливо при обробці великих обсягів запитів користувачів. Розбиваючи систему на модульні мікросервіси, кожен з яких відповідає за певну функцію, ми можемо досягти значного підвищення продуктивності завдяки можливості масштабування окремих компонентів. Така масштабованість гарантує, що система може ефективно управляти високим попитом, розподіляючи навантаження між кількома екземплярами кожного мікросервісу за потреби. + +Архітектура мікросервісів різко контрастує з монолітними підходами, такими як тісно пов'язана структура модулів у LangChain. У таких монолітних конструкціях всі модулі взаємозалежні, що створює значні проблеми з розгортанням і обмежує масштабованість. Будь-яка зміна або вимога масштабування в одному модулі вимагає перерозгортання всієї системи, що призводить до потенційних простоїв і збільшення складності. + +## Проєктна пропозиція + +### Мікросервіс + +Мікросервіси подібні до будівельних блоків, пропонуючи фундаментальні послуги для побудови додатків RAG (Retrieval-Augmented Generation). Кожен мікросервіс призначений для виконання певної функції або завдання в архітектурі програми. Розбиваючи систему на менші, автономні сервіси, мікросервіси сприяють модульності, гнучкості та масштабованості. Такий модульний підхід дозволяє розробникам самостійно розробляти, розгортати та масштабувати окремі компоненти програми, що полегшує її підтримку та розвиток з часом. Крім того, мікросервіси полегшують ізоляцію несправностей, оскільки проблеми в одному сервісі з меншою ймовірністю вплинуть на всю систему. + +### Мегасервіс + +Мегасервіс - це архітектурна конструкція вищого рівня, що складається з одного або декількох мікросервісів і надає можливість збирати наскрізні додатки. На відміну від окремих мікросервісів, які зосереджені на конкретних завданнях або функціях, мегасервіс організовує кілька мікросервісів для надання комплексного рішення. Мегасервіси інкапсулюють складну бізнес-логіку та організацію робочих процесів, координуючи взаємодію між різними мікросервісами для виконання конкретних вимог додатків. Такий підхід дозволяє створювати модульні, але інтегровані додатки, де кожен мікросервіс робить свій внесок у загальну функціональність мегасервісу. + +### Шлюз + +Шлюз слугує інтерфейсом для доступу користувачів до мегасервісу, забезпечуючи персоналізований доступ на основі вимог користувача. Він діє як точка входу для вхідних запитів, спрямовуючи їх до відповідних мікросервісів в рамках архітектури мегасервісу. Шлюзи підтримують визначення API, версіювання API, обмеження швидкості та трансформацію запитів, що дозволяє тонко контролювати взаємодію користувачів з базовими мікросервісами. Абстрагуючись від складності базової інфраструктури, шлюзи забезпечують безперебійну та зручну взаємодію з мегасервісом. + +### Пропозиція +Запропонована архітектура програми ChatQnA передбачає створення двох мегасервісів. Перший мегасервіс функціонує як основний конвеєр, що складається з чотирьох мікросервісів: embedding, retriever, reranking та LLM. Цей мегасервіс розкриває ChatQnAGateway, що дозволяє користувачам запитувати систему через кінцеву точку `/v1/chatqna`. Другий мегасервіс керує зберіганням даних користувача у VectorStore і складається з одного мікросервісу dataprep. Цей мегасервіс надає шлюз DataprepGateway, що дозволяє користувачеві отримати доступ через кінцеву точку `/v1/dataprep`. + +Клас Gateway полегшує реєстрацію додаткових кінцевих точок, підвищуючи гнучкість і розширюваність системи. Кінцева точка /v1/dataprep відповідає за обробку користувацьких документів, які зберігатимуться у VectorStore під попередньо визначеним ім'ям бази даних. Потім перший мегасервіс буде запитувати дані з цієї попередньо визначеної бази даних. + +![architecture](https://i.imgur.com/YdsXy46.png) + + +#### Приклад коду Python для побудови сервісів + +Користувачі можуть використовувати клас `ServiceOrchestrator` для побудови трубопроводу мікросервісів і додавання шлюзу для кожного мегасервісу. + +```python +class ChatQnAService: + def __init__(self, rag_port=8888, data_port=9999): + self.rag_port = rag_port + self.data_port = data_port + self.rag_service = ServiceOrchestrator() + self.data_service = ServiceOrchestrator() + + def construct_rag_service(self): + embedding = MicroService( + name="embedding", + host=SERVICE_HOST_IP, + port=6000, + endpoint="/v1/embeddings", + use_remote_service=True, + service_type=ServiceType.EMBEDDING, + ) + retriever = MicroService( + name="retriever", + host=SERVICE_HOST_IP, + port=7000, + endpoint="/v1/retrieval", + use_remote_service=True, + service_type=ServiceType.RETRIEVER, + ) + rerank = MicroService( + name="rerank", + host=SERVICE_HOST_IP, + port=8000, + endpoint="/v1/reranking", + use_remote_service=True, + service_type=ServiceType.RERANK, + ) + llm = MicroService( + name="llm", + host=SERVICE_HOST_IP, + port=9000, + endpoint="/v1/chat/completions", + use_remote_service=True, + service_type=ServiceType.LLM, + ) + self.rag_service.add(embedding).add(retriever).add(rerank).add(llm) + self.rag_service.flow_to(embedding, retriever) + self.rag_service.flow_to(retriever, rerank) + self.rag_service.flow_to(rerank, llm) + self.rag_gateway = ChatQnAGateway(megaservice=self.rag_service, host="0.0.0.0", port=self.rag_port) + + def construct_data_service(self): + dataprep = MicroService( + name="dataprep", + host=SERVICE_HOST_IP, + port=5000, + endpoint="/v1/dataprep", + use_remote_service=True, + service_type=ServiceType.DATAPREP, + ) + self.data_service.add(dataprep) + self.data_gateway = DataPrepGateway(megaservice=self.data_service, host="0.0.0.0", port=self.data_port) + + def start_service(self): + self.construct_rag_service() + self.construct_data_service() + self.rag_gateway.start() + self.data_gateway.start() + +if __name__ == "__main__": + chatqna = ChatQnAService() + chatqna.start_service() +``` + +#### Побудова сервісів за допомогою yaml + +Нижче наведено приклад визначення мікросервісів і мегасервісів за допомогою YAML для програми ChatQnA. Ця конфігурація окреслює кінцеві точки для кожного мікросервісу і визначає робочий процес для мегасервісів. + +```yaml +opea_micro_services: + dataprep: + endpoint: http://localhost:5000/v1/chat/completions + embedding: + endpoint: http://localhost:6000/v1/embeddings + retrieval: + endpoint: http://localhost:7000/v1/retrieval + reranking: + endpoint: http://localhost:8000/v1/reranking + llm: + endpoint: http://localhost:9000/v1/chat/completions + +opea_mega_service: + mega_flow: + - embedding >> retrieval >> reranking >> llm + dataprep: + mega_flow: + - dataprep +``` + +```yaml +opea_micro_services: + dataprep: + endpoint: http://localhost:5000/v1/chat/completions + +opea_mega_service: + mega_flow: + - dataprep +``` + +Наступний код на Python демонструє, як використовувати конфігурації YAML для ініціалізації мікросервісів і мегасервісів, а також налаштування шлюзів для взаємодії з користувачами. + +```python +from comps import ServiceOrchestratorWithYaml +from comps import ChatQnAGateway, DataPrepGateway +data_service = ServiceOrchestratorWithYaml(yaml_file_path="dataprep.yaml") +rag_service = ServiceOrchestratorWithYaml(yaml_file_path="rag.yaml") +rag_gateway = ChatQnAGateway(data_service, port=8888) +data_gateway = DataPrepGateway(data_service, port=9999) +# Start gateways +rag_gateway.start() +data_gateway.start() +``` + +#### Приклад коду для налаштування шлюзу + +Клас Gateway надає інтерфейс для доступу до мегасервісу, що налаштовується. Він обробляє запити та відповіді, дозволяючи користувачам взаємодіяти з мегасервісом. Клас визначає методи для додавання користувацьких маршрутів, зупинки сервісу та переліку доступних сервісів і параметрів. Користувачі можуть розширити цей клас, щоб реалізувати специфічну обробку запитів і відповідей відповідно до своїх вимог. + +```python +class Gateway: + def __init__( + self, + megaservice, + host="0.0.0.0", + port=8888, + endpoint=str(MegaServiceEndpoint.CHAT_QNA), + input_datatype=ChatCompletionRequest, + output_datatype=ChatCompletionResponse, + ): + ... + self.gateway = MicroService( + service_role=ServiceRoleType.MEGASERVICE, + service_type=ServiceType.GATEWAY, + ... + ) + self.define_default_routes() + + def define_default_routes(self): + self.service.app.router.add_api_route(self.endpoint, self.handle_request, methods=["POST"]) + self.service.app.router.add_api_route(str(MegaServiceEndpoint.LIST_SERVICE), self.list_service, methods=["GET"]) + self.service.app.router.add_api_route( + str(MegaServiceEndpoint.LIST_PARAMETERS), self.list_parameter, methods=["GET"] + ) + + def add_route(self, endpoint, handler, methods=["POST"]): + self.service.app.router.add_api_route(endpoint, handler, methods=methods) + + def start(self): + self.gateway.start() + + def stop(self): + self.gateway.stop() + + async def handle_request(self, request: Request): + raise NotImplementedError("Subclasses must implement this method") + + def list_service(self): + raise NotImplementedError("Subclasses must implement this method") + + def list_parameter(self): + raise NotImplementedError("Subclasses must implement this method") + + ... +``` + +## Розглянуті альтернативи +Альтернативним підходом може бути розробка монолітного додатку для RAG замість мікросервісної архітектури. Однак такому підходу може бракувати гнучкості та масштабованості, які пропонують мікросервіси. Переваги запропонованої мікросервісної архітектури включають легше розгортання, незалежне масштабування компонентів та покращену ізоляцію несправностей. До мінусів можна віднести підвищену складність в управлінні декількома сервісами. + +## Сумісність +Потенційні несумісні зміни в інтерфейсі або робочому процесі можуть включати коригування, необхідні для взаємодії існуючих клієнтів з новою архітектурою мікросервісів. Однак ретельне планування та комунікація можуть пом'якшити будь-які збої. + +## Miscs +Вплив на продуктивність: Архітектура мікросервісів може впливати на показники продуктивності, залежно від таких факторів, як затримка в мережі. Але для широкомасштабного доступу користувачів масштабування мікросервісів може підвищити швидкість реагування, тим самим значно покращуючи продуктивність порівняно з монолітними конструкціями. + +Застосовуючи цю мікросервісну архітектуру для RAG, ми прагнемо підвищити гнучкість, масштабованість і ремонтопридатність розгортання корпоративних додатків штучного інтелекту, що в кінцевому підсумку покращить взаємодію з користувачем і полегшить майбутній розвиток і вдосконалення. + diff --git a/docs-ua/community/rfcs/24-05-16-OPEA-001-Overall-Design.md b/docs-ua/community/rfcs/24-05-16-OPEA-001-Overall-Design.md new file mode 100644 index 00000000..fc1399ec --- /dev/null +++ b/docs-ua/community/rfcs/24-05-16-OPEA-001-Overall-Design.md @@ -0,0 +1,93 @@ +# 24-05-16 OPEA-001 Overall Design + +## Автори + +[ftian1](https://github.com/ftian1), [lvliang-intel](https://github.com/lvliang-intel), [hshen14](https://github.com/hshen14) + +## Статус + +На розляді + +## Мета + +Стабільний, розширюваний, безпечний і простий у використанні фреймворк оркестрування, що дозволяє користувачам OPEA швидко створювати власні додатки GenAI. + +Вимоги включають, але не обмежуються: + +1. планувальник оркестрування + + має можливість запропонувати визначення на основі конфігурації або низькорівневий код для побудови складних LLM-додатків. + +2. реєстр компонентів + + дозволяє користувачеві зареєструвати новий сервіс для створення складних GenAI-додатків + +3. моніторинг + + дозволяє користувачеві відстежувати робочий процес, включаючи ведення журналу, статус виконання, час виконання тощо. + +4. масштабованість + + легко масштабувати за допомогою K8S або інших технологій розгортання в локальному та хмарному середовищі. + +## Мотивація + +Цей RFC використовується для представлення загальної філософії проектування OPEA, включаючи загальну архітектуру, робочий процес, дизайн компонентів, для обговорення спільнотою. + +## Design Proposal + +Запропонована загальна архітектура виглядає наступним чином + +![OPEA Architecture](opea_architecture.png "OPEA Architecture") + +1. GenAIComps + + Набір мікросервісів, що використовує композитор сервісів для створення мегасервісу, пристосованого до реальних застосунків корпоративного штучного інтелекту. + +2. GenAIExamples + + Колективний список прикладів генеративного ШІ (GenAI) і генерації з розширенням пошуку (RAG), призначений для демонстрації всього трубопроводу оркестрування. + +3. GenAIInfra + + Набір для контейнеризації та хмарного розгортання для OPEA, включаючи артефакти для розгортання GenAIExamples у хмарному середовищі, які можуть бути використані корпоративними користувачами для розгортання у власній хмарі. + +4. GenAIEval + + Набір оцінок, критеріїв і показників для OPEA, орієнтований на продуктивність, пропускну здатність і затримку, точність на популярних засобах оцінки, безпеку і галюцинації. + +Пропонований робочий процес OPEA виглядає наступним чином + +![OPEA Workflow](opea_workflow.png "OPEA Workflow") + +1. Мікросервіс + + Мікросервіси подібні до будівельних блоків, пропонуючи фундаментальні послуги для побудови додатків RAG (Retrieval-Augmented Generation). Кожен мікросервіс призначений для виконання певної функції або завдання в архітектурі програми. Розбиваючи систему на менші, автономні сервіси, мікросервіси сприяють модульності, гнучкості та масштабованості. Такий модульний підхід дозволяє розробникам самостійно розробляти, розгортати та масштабувати окремі компоненти програми, що полегшує її підтримку та розвиток з часом. Крім того, мікросервіси полегшують ізоляцію несправностей, оскільки проблеми в одному сервісі з меншою ймовірністю вплинуть на всю систему. + +2. Мегасервіс + + Мегасервіс - це архітектурна конструкція вищого рівня, що складається з одного або декількох мікросервісів і надає можливість збирати наскрізні додатки. На відміну від окремих мікросервісів, які зосереджені на конкретних завданнях або функціях, мегасервіс організовує кілька мікросервісів для надання комплексного рішення. Мегасервіси інкапсулюють складну бізнес-логіку та організацію робочих процесів, координуючи взаємодію між різними мікросервісами для виконання конкретних вимог додатків. Такий підхід дозволяє створювати модульні, але інтегровані додатки, де кожен мікросервіс робить свій внесок у загальну функціональність мегасервісу. + +3. Шлюз + + Шлюз слугує інтерфейсом для доступу користувачів до мегасервісу, забезпечуючи персоналізований доступ на основі вимог користувача. Він діє як точка входу для вхідних запитів, спрямовуючи їх до відповідних мікросервісів в рамках архітектури мегасервісу. Шлюзи підтримують визначення API, версіювання API, обмеження швидкості та трансформацію запитів, що дозволяє тонко контролювати взаємодію користувачів з базовими мікросервісами. Абстрагуючись від складності базової інфраструктури, шлюзи забезпечують безперебійну та зручну взаємодію з мегасервісом. + +## Розглянуті альтернативи + +n/a + +## Сумісність + +n/a + +## Miscs + +- Список справ: + + - [ ] Специфікація мікросервісу + - [ ] Специфікація мегасервісу + - [ ] статичний розподільник хмарних ресурсів проти динамічного розподільника хмарних ресурсів + - [ ] підтримка відкритої телеметрії + - [ ] автентифікація та довірене середовище + + diff --git a/docs-ua/community/rfcs/24-05-24-OPEA-001-Code-Structure.md b/docs-ua/community/rfcs/24-05-24-OPEA-001-Code-Structure.md new file mode 100644 index 00000000..4b3f7a8d --- /dev/null +++ b/docs-ua/community/rfcs/24-05-24-OPEA-001-Code-Structure.md @@ -0,0 +1,67 @@ +# 24-05-24 OPEA-001 Code Structure + +## Автори + +[ftian1](https://github.com/ftian1), [lvliang-intel](https://github.com/lvliang-intel), [hshen14](https://github.com/hshen14) + +## Статус + +На розгляді + +## Мета + +Визначити чіткі критерії та правила додавання нових кодів до проектів OPEA. + +## Мотивація + +Проект OPEA складається з серверних репозиторіїв, включаючи GenAIExamples, GenAIInfra, GenAICompos тощо. Нам потрібне чітке визначення того, куди слід поміщати новий код для певної функції, щоб мати послідовну і добре організовану структуру коду. + +## Проєктна пропозиція + +Запропонована структура коду GenAIInfra має такий вигляд: + +``` +GenAIInfra/ +├── kubernetes-addon/ # the folder implementing additional operational capabilities to Kubernetes applications +├── microservices-connector/ # the folder containing the implementation of microservice connector on Kubernetes +└── scripts/ +``` + +Запропонована структура коду GenAIExamples має такий вигляд: + +``` +GenAIExamples/ +└── ChatQnA/ + ├── kubernetes/ + │ ├── manifests + │ └── microservices-connector + ├── docker/ + │ ├── docker_compose.yaml + │ ├── dockerfile + │ └── chatqna.py + ├── chatqna.yaml # The MegaService Yaml + └── README.md +``` + +Запропонована структура коду GenAIComps має такий вигляд: + +``` +GenAIComps/ +└── comps/ + └── llms/ + ├── text-generation/ + │ ├── tgi-gaudi/ + │ │ ├── dockerfile + │ │ └── llm.py + │ ├── tgi-xeon/ + │ │ ├── dockerfile + │ │ └── llm.py + │ ├── vllm-gaudi + │ ├── ray + │ └── langchain + └── text-summarization/ +``` + +## Miscs + +n/a diff --git a/docs-ua/community/rfcs/24-06-21-OPEA-001-DocSum_Video_Audio.md b/docs-ua/community/rfcs/24-06-21-OPEA-001-DocSum_Video_Audio.md new file mode 100644 index 00000000..e6215dd9 --- /dev/null +++ b/docs-ua/community/rfcs/24-06-21-OPEA-001-DocSum_Video_Audio.md @@ -0,0 +1,107 @@ +# 24-06-21-OPEA-001-DocSum_Video_Audio +RFC - Expanding Document Summary through Video and Audio + +## RFC Content + +### Author +[Mustafa Cetin](https://github.com/MSCetin37) + +### Status +Under Review + +### Objective +This RFC aims to extend the current Document Summarization Application by incorporating video and audio summary features. This enhancement will enable the application to summarize video and audio content in addition to text documents, thereby broadening its utility and applicability. + +### Motivation +The motivation for adding video and audio summary features stems from the increasing prevalence of multimedia content in various domains, including education, corporate training, marketing, and entertainment. Videos and audio recordings often contain valuable information that can be time-consuming to digest in their entirety. By summarizing video and audio content, users can quickly grasp the key points, saving time and improving productivity. + +Key motivations include: +1. **Enhanced User Experience**: Users can quickly understand the essence of video and audio content without consuming the entire media. +2. **Increased Efficiency**: Summarizing videos and audio can save time for professionals who need to review large amounts of multimedia content. +3. **Broader Applicability**: Extending the application to handle video and audio content makes it more versatile and useful across different industries. +4. **Competitive Advantage**: Offering video and audio summarization can differentiate the application from other text-only summarization tools. + +### Design Proposal + +#### Workflow of the Deployed Document Summarization Service +The workflow of the Document Summarization Service, from the user's input query to the application's output response, is as follows: + +```mermaid +flowchart LR + subgraph DocSum + direction LR + A[User] <--> |Input query| B[DocSum Gateway] + B <--> |Post| Megaservice + subgraph Megaservice["Megaservice"] + direction TB + C([Microservice - Video-to-AudioDoc : Will be implemented]) -. Post .-> D([Microservice - Audio-to-Text Transcription : opea/asr
9099]) -. Post .-> E([Microservice : llm-docsum-tgi
9000]) -. Post .-> F{{TGI Service
8008}} + end + Megaservice --> |Output| G[Response] + end + subgraph Legend + X([Microservice]) + Y{{Service from industry peers}} + Z[Gateway] + end +``` + +The proposed design for the video and audio summary features involves the following components: + +#### 1. DocSum Gateway: +- **User Interface**: Update the user interface to upload video and audio files in various formats to summarize alongside text. + +#### 2. Text Transcription, Video, and Audio Ingestion and Preprocessing: +- **Audio Extraction Microservice**: Extract audio from video files for transcription. + + Signature of audio extraction microservice: + ```python + @traceable(run_type="tool") + @register_statistics(names=["opea_service@audio_extraction"]) + def audio_extraction(input: VideoDoc) -> AudioDoc: + ``` +- **Audio-to-Text Transcription**: Use the Audio-Speech-Recognition microservice from OPEA, which aims to generate a transcript for an input audio using an audio-to-text model (Whisper). + + Transcript generation microservice: + - opea/whisper:latest + - opea/asr:latest + +- **Text Transcription**: Apply existing text summarization techniques that do not require any data preprocessing. + +#### 3. Summarization: +- **Text Summarization**: Apply existing text summarization techniques to the generated transcripts. +- **Audio Summarization**: Use audio summarization techniques that extract the Transcription, then use text summarization steps. +- **Visual Summarization**: Use visual summarization techniques that extract the AudioDoc and then use Audio Summarization to create Transcription, then use text summarization steps. + +#### 4. Integration and Output: +- **Summary Generation**: Combine text, audio, and visual summaries to create comprehensive document summaries from different document formats. + +### Use-case Stories + +#### 1. Corporate Training: +**Scenario**: A company conducts regular training sessions and records them as videos. Employees need to review these training videos to stay updated. + +**Solution**: The video summary feature can generate concise summaries of training videos, highlighting key points and important segments. Employees can quickly review the summaries to understand the training content without watching the entire video. + +#### 2. Educational Content: +**Scenario**: An online education platform offers video lectures on various subjects. Students often need to review these lectures for exams. + +**Solution**: The video summary feature can create summaries of video lectures, providing students with a quick overview of the main topicscovered. This helps students to revise efficiently and focus on important concepts. + +#### 3. Marketing and Advertising: +**Scenario**: A marketing team produces promotional videos for their products. They need to analyze the effectiveness of these videos. + +**Solution**: The video summary feature can generate summaries of promotional videos, highlighting key messages and visual elements. The marketing team can use these summaries to evaluate the impact of their videos and make data-driven decisions. + +#### 4. Research and Development: +**Scenario**: Researchers record their experiments and presentations as videos. They need to document and share their findings with colleagues. + +**Solution**: The video summary feature can create summaries of research videos, capturing essential information and visual data. Researchers can share these summaries with their peers, facilitating knowledge sharing and collaboration. + +#### 5. Podcast and Audio Content: +**Scenario**: A company produces a series of educational podcasts. Employees need to review these podcasts to stay informed about industry trends and best practices. + +**Solution**: The audio summary feature can generate concise summaries of podcast episodes, highlighting key points and important segments. Employees can quickly review the summaries to understand the podcast content without listening to the entire episode. + +By implementing the video and audio summary features, the Document Summarization Application will become a more powerful and versatile tool, capable of handling both text and multimedia content. This enhancement will significantly improve user experience, efficiency, and applicability across various domains. + + diff --git a/docs-ua/community/rfcs/24-06-21-OPEA-001-Guardrails-Gateway.md b/docs-ua/community/rfcs/24-06-21-OPEA-001-Guardrails-Gateway.md new file mode 100644 index 00000000..2c7bd3ae --- /dev/null +++ b/docs-ua/community/rfcs/24-06-21-OPEA-001-Guardrails-Gateway.md @@ -0,0 +1,174 @@ +# 24-06-21-OPEA-001-Guardrails-Gateway + +Guardrails Gateway + +## Автори + +[zhxie](https://github.com/zhxie), [Forrest-zhao](https://github.com/Forrest-zhao), [ruijin-intel](https://github.com/ruijin-intel) + +## Статус + +Під розглядом + +## Мета + +Розгортання опціональних захисних екранів на шлюзі в середовищі розгортання. + +## Мотивація + +- Зменшити затримки при передачі даних мережею та кодуванні/декодуванні протоколів. +- Підтримати бар'єри з підтримкою стану (stateful guardrails). +- Покращення спостережливості. +- Використовуйте OpenVINO для інструкцій з прискорення ШІ, включаючи AVX, AVX512 і AMX. + +## Проектна пропозиція + +### Висновок на місці + +Робочий процес, подібний до LangChain, представлений нижче. + +```mermaid +graph LR + Entry(Entry)-->Gateway + Gateway-->Embedding + Embedding-->Gateway + Gateway-->Retrieve + Retrieve-->Gateway + Gateway-->Rerank + Rerank-->Gateway + Gateway-->LLM + LLM-->Guardrails + Guardrails-->LLM + LLM-->Gateway +``` + +Всі сервіси використовують RESTful API виклики для зв'язку. Існують накладні витрати на мережеву передачу та кодування/декодування протоколів. Попередні дослідження показали, що кожне перемикання додає 3 мс затримки, яка може бути ще більшою, якщо mTLS увімкнено з міркувань безпеки при розгортанні між вузлами. + +Бар'єри, що вмикаються, в шлюзах працюють в архітектурі, наведеній нижче. + +```mermaid +graph LR + Entry(Entry)-->Gateway["Gateway\nGuardrails"] + Gateway-->Embedding + Embedding-->Gateway + Gateway-->Retrieve + Retrieve-->Gateway + Gateway-->Rerank + Rerank-->Gateway + Gateway-->LLM + LLM-->Gateway +``` + +Шлюз може розміщувати кілька захисних бар'єрів без додаткової передачі даних по мережі або кодування/декодування протоколів. У реальних умовах розгортання може бути багато меж безпеки з усіх точок зору, і шлюз є найкращим місцем для забезпечення меж безпеки системи. + +Шлюз складається з 2 основних компонентів, часу виконання виводу та захисних бар'єрів. + +```mermaid +graph TD + Gateway---Runtime[Inference Runtime API] + Runtime---OpenVINO + Runtime---PyTorch + Runtime---Others[...] + Gateway---Guardrails + Guardrails---Load[Load Model] + Guardrails---Inference + Guardrails---Access[Access Control] +``` + +Уніфікований API середовища виконання виводу надає загальний інтерфейс для середовищ виконання виводу. Будь-яке середовище виконання виводу може бути інтегроване у систему, включаючи OpenVINO. Бар'єри використовують середовище виконання виводу і вирішують, чи є запит/відповідь дійсними. + +### Бар'єри з підтримкою стану + +Традиційний робочий процес від входу до виходу представлений нижче. + +```mermaid +flowchart LR + Entry(Entry)-->GuardrailsA + GuardrailsA["Guardrails\nAnti-Jailbreaking"]-->Embedding + Embedding-->Retrieve + Retrieve-->Rerank + Rerank-->LLM + LLM-->GuardrailsB["Guardrails\nAnti-Profanity"] +``` + +Бар'єрний сервіс забезпечує певний захист для LLM, наприклад, захист від злому, отруєння для вхідної сторони, антитоксичність, перевірку фактів для вихідної сторони та виявлення PII як для вхідної, так і для вихідної сторони. + +Охоронні бар'єри також можна розділити на 2 типи: без та з підтримкою стану. Бар'єри, що включають в себе захист від втечі з в'язниці, антитоксичність і виявлення PII, вважаються без підтриски стану, оскільки вони не покладаються на швидкий вхід і вихід відповіді, в той час як захист від галюцинацій вважається з підтримкою стану, він потребує як входу, так і виходу для забезпечення відносності між ними. + +[Guardrails Microservice](https://github.com/xuechendi/GenAIComps/tree/pii_detection/comps/guardrails) надає певні засоби захисту як мікросервіс, але через обмеження мікросервісу він не може відстежувати запити на відповіді, що призводить до труднощів у впровадженні охорони без підтримки стану. + +Бар'єри, що вмикаються, в шлюзах працюють в архітектурі, наведеній нижче. + +```mermaid +flowchart LR + Entry(Entry)-->GuardrailsA + subgraph Gateway + GuardrailsA["Guardrails\nAnti-Jailbreaking"]-->GuardrailsC + GuardrailsB-->GuardrailsC + end + GuardrailsC["Guardrails\nAnti-Hallucination"]-->Embedding + Embedding-->Retrieve + Retrieve-->Rerank + Rerank-->LLM + LLM-->GuardrailsB["Guardrails\nAnti-Profanity"] +``` + +В якості альтернативного варіанту, шлюз також впроваджує охоронну зданність, незалежно від того, чи є він з або без підтримки стану. + +### Спостережливість + +Envoy - найпопулярніший хмарний проксі-сервер, який містить вбудований журнал доступу, статистику та метрики, а також може бути інтегрований у платформу спостереження, включаючи OpenTelemetry і Prometheus, місцево. + +Бар'єри в шлюзі будуть використовувати ці можливості спостереження для задоволення потенційних нормативних вимог і вимог до відповідності. + +### Розгортання мультисервісів + +Припустимо, сервіси вбудовування та LLM працюють на основі ШІ і потребують бар'єрного захисту. + +Опціональний шлюз може бути розгорнутий як шлюз або як додаткова послуга. + +```mermaid +graph LR + Entry(Entry)-->Embedding + subgraph SidecarA[Sidecar] + Embedding + end + Embedding-->Retrieve + Retrieve-->Rerank + Rerank-->LLM + subgraph SidecarB[Sidecar] + LLM + end +``` + +Шлюз також може працювати з мікросервісами бар'єрів. + +```mermaid +graph LR + Entry(Entry)-->GuardrailsC["Guardrails\nAnti-Hallucination"] + GuardrailsC["Guardrails\nAnti-Hallucination"]-->GuardrailsA["Guardrails\nAnti-Jailbreaking"] + GuardrailsA-->Embedding + Embedding-->Retrieve + Retrieve-->Rerank + Rerank-->GuardrailsB["Guardrails\nAnti-Jailbreaking"] + GuardrailsB-->LLM + LLM-->GuardrailsD["Guardrails\nAnti-Profanity"] + subgraph Gateway + GuardrailsD-->GuardrailsC + end +``` + +## Розглянуті альтернативи + +[Guardrails Microservice](https://github.com/xuechendi/GenAIComps/tree/pii_detection/comps/guardrails): передбачив певні засоби захисту, однак він підтримує лише засоби захисту без підтримки стану. + +## Сумісність + +N/A + +## Miscs + +- Зробити + + - [ ] Визначення API для розгортання мета-сервісів і розгортання Kubernetes + - [ ] Фреймворк виводу Envoy і захисні екрани HTTP-фільтр diff --git a/docs-ua/community/rfcs/24-07-11-OPEA-Agent.md b/docs-ua/community/rfcs/24-07-11-OPEA-Agent.md new file mode 100644 index 00000000..9c8a4571 --- /dev/null +++ b/docs-ua/community/rfcs/24-07-11-OPEA-Agent.md @@ -0,0 +1,278 @@ +## Status + +v0.1 team sharing completed(07/10/24) + +## Objective + +This RFC introduces a new concept of an "Hierarchical Agent," which includes two parts. + +* 'Agent’: Agent refers to a framework that integrates the reasoning capabilities of large language models (LLMs) with the ability to take actionable steps, creating a more sophisticated system that can understand and process information, evaluate situations, take appropriate actions, communicate responses, and track ongoing situations, finally output with result meeting defined goals. + +Single Agent Example: + + ![image](https://github.com/xuechendi/docs/assets/4355494/41a40edc-df73-4e3d-8b0a-c206724cc881) + + behind the scene + + ![image](https://github.com/xuechendi/docs/assets/4355494/02232f5b-8034-44f9-a10c-545a13ec5e40) + + +* ‘Multi Agent' system: Multi Agents refer to a design that leveraging a Hierarchical Agent Teams to complete sub-tasks through individual agent working groups. Benefits of multi-agents’ design: (1) Grouping tools/responsibilities can give better results. An agent is more likely to succeed on a focused task than if it must select from dozens of tools. (2) Each agent will have their own assets including prompt, llm model, planning strategy and toolsets. (3) User can easily use yaml files or few lines of python to build a 'Hierarchical Multi Agent' megaservice by cherry-picking ready-to-use individual agents. (4) For small tasks which can be perfectly performed by single Agent, user can directly use 'Agent' microservice with simple/easy resource management. + +Multi Agent example: + +``` +curl ${ip_addr}:${SUPERVISOR_AGENT_PORT}/v1/chat/completions -X POST \ +-d "{'input': 'Generate a Analyst Stock Recommendations by taking an average of all analyst recommendations and classifying them as Strong Buy, Buy, Hold, Underperform or Sell.'}" +``` +![image](https://github.com/xuechendi/docs/assets/4355494/d96b5e26-95a5-4611-9a32-a546eaa324a4) + +## Motivation + +This RFC aims to provide low-code / no-code agents as new microservice / megaservice for Enterprise users who are looking for using their own tools with LLM. Tools includes domain_specific_search, knowledgebase_retrieval, enterprise_servic_api_authorization_required, proprietary_tools, etc. + +## Persona + +We use the listed terms to define different persona mentioned in this document. + +* OPEA developer: OPEA developers describe who will follow current OPEA API SPEC or expand OPEA API SPEC to add new solutions. OPEA developers are expected to use this RFC to understand how this microservice communicates with other microservices and chained in megaflow. OPEA developer develops OPEA agent codes and add new Agent Implementation by extending current Agent library with advanced agent strategies. + +* Enterprise User (Devops): Devops describe who will follow OPEA yaml configuration format to update settings according to their real need, or tune some of the configuration to get better performance, who will also use their updated configuration to launch all microservices and get functional endpoint and API calling. Devops are expected to use this RFC to understand the keywords, how these keywords works and rules of using this microservice. Devops are expected to follow customer tool template to provide their own tools and register to Agent microservice. + +* End user: End user describe who writes application which will use OPEA exposed endpoints and API to fulfill task goals. End users are expected to use this RFC to understand API keywords and rules. + + +## Design Proposal + ### Execution Plan + v0.8 (PR ready or merge to opea - agent branch) + * Agent component v0.1 + * Support chat-completion API + * Agent example - Insight Assistant v0.1 (IT demo) + * hierarchical multi agents + * includes: research(rag, data_crawler); writer(format); reviewer(rule) + * Agent debug system + +V0.9 +* Agent component v0.1 + * Support assistants API + * K8s helm chart +* Agent Example - Insight Assistant v0.1 + * Shared demo with IT + * Establish IT collaboration effort + +V1.0 +* Performance benchmark +* Scaling +* Concurrency + + ### Part 1. API SPEC + Provide two types of API for different client application. + 1. openAI chat completion API. + > Reference: https://platform.openai.com/docs/api-reference/chat/create + + Advantage and limitation: + * Most common API, should be working with any existing client uses openAI. + * will not be able to memorize user historical session, human_in_loop agent will not work using this API. + + ``` + "/v1/chat/completions": { + "model": str, + "messages": list, + "tools": list, + } + ``` + + 2. openAI assistant API + > Reference: https://platform.openai.com/docs/api-reference/assistants + + Advantage and limitation: + * User can create a session thread memorizing previous conversation as long-term memory. And Human-In-Loop agent will only works use this API. + * User client application may need codes change to work with this new API. + * openAI assistant API is tagged with ‘beta’, not stable + + ``` + # assistants API is used to create agent runtime instance with a set of tool / append addition instructions + - "/v1/assistants": { + "instructions": str, + "name": str, + "tools": list + } + + # threads API is to used maintain conversation session with one user. It can be resumed from previous, can tracking long term memories. + - "/v1/threads/ ": { # empty is allowed } + + + # threads messages API is to add a task content to thread_1 (the thread created by threads API) + - "/v1/threads/thread_1/messages": { + "role": str, + "content": str + } + + # threads run API is to start to execute agent thread using run api + + - "/v1/threads/thread_1/runs": { + 'assistant_id': str, + 'instructions': str, + } + ``` + + ### Part 2. 'Agent' genAI Component definition + + 'Agent' genAI Component is regarded as the resource management unit in “Agent” design. It will be launched as one microservice and can be instantiated as ‘Agent’, ‘Planner’ or ‘Executor’ according to configuration. Tools will be registered to 'Agent' microservice during launch or runetime. + + ![image](https://github.com/user-attachments/assets/38e83fa4-57d8-4146-9061-e5153472b5f4) + + #### SPEC for any agent Role - agent, planner, executor + ``` + "/v1/chat/completions": { + "model": str, + "messages": list, + "tools": list, + } + "/v1/assistants": { + "instructions": str, + "name": str, + "tools": list + } + "/v1/threads/: {} + "/v1/threads/thread_1/runs": { + 'assistant_id': str, + 'instructions': str, + } + "/v1/threads/thread_1/messages": { + "role": str, + "content": str + } + ``` + + #### Agent Role microservice definition - 'Agent': + A complete implementation of Agent, which contains LLM endpoint as planner, strategy algorithm for plan execution, Tools, and database handler to keep track of historical state and conversation. + + configuration: + ``` + strategy: choices([react, planexec, humanInLoopPlanExec]) + require_human_feedback: bool + llm_endpoint_url: str + llm_engine: choices([tgi, vllm, openai]) + llm_model_id: str + recursion_limit: int + tools: file_path or dict + + # Tools definition + [tool_name]: + description: str + callable_api: choices([http://xxxx, xxx.py:func_name]) + env: str + pip_dependencies: str # sep by , + args_schema: + query: + type: choices([int, str, bool]) + description: str + return_output: str + ``` + + #### Agent Role microservice definition - 'Planner': + Agent without tools. Planner only contains LLM endpoints as planner, certain strategies to complete an optimized plan. + + configuration: + ``` + strategy: choices([react, planexec, humanInLoopPlanExec]) + require_human_feedback: bool + llm_endpoint_url: str + llm_engine: choices([tgi, vllm, openai]) + llm_model_id: str + recursion_limit: int + require_human_feedback: bool + ``` + + #### Agent Role microservice definition - 'Executor': + Tools executors. Executor is used to process input with registered tools. + + Configuration: + ``` + [tool_name]: + description: str + callable_api: choices([http://xxxx, xxx.py:func_name]) + env: str + pip_dependencies: str # sep by , + args_schema: + query: + type: choices([int, str, bool]) + description: str + return_output: str + ``` + + > Any microservcice follow this spec can be registered as role in Part3-graph-based + +### Part3. 'Multi Agent' system overview + +We planned to provide multi-agent system in two phases. + +* Phase I: Hierarchical Multi Agents + 1. In this design, only top-layer Agent will be exposed to OPEA mega flow. And only ‘Agent’ microservice will be used to compose Hierarchical Multi Agents system. + 2. Users are only allowed to use yaml files to provide tools configuration, high-level instructions text and hierarchical relationship between agents. + 3. This design simplifies the agent configuration, using simple yaml definition can still be used to compose a multi agent system to handle complex tasks. + > Detailed configuration please refer to Part3.1 + ![image](https://github.com/user-attachments/assets/be3bef3a-a1c9-4059-a8a1-e8e52e0d6c16) + + +* Phase II: Graph-Based Multi Agent + 1. In this design, we provide user a new SDK to compose a graph-based multi agents system with conditional edge to define all strategic rules. + 2. Enterprise user will be able to use python code to wrap either ‘agent’, ‘planner’ or tools as ‘Role’ and add conditional edges between them for complex task agent design. + 3. This design provides user enough flexibility to handle very complex tasks and also provide flexibility to handle resource management when certain tools are running way slower than others. + > Detailed configuration please refer to Part3.2 + ![image](https://github.com/user-attachments/assets/35b36f64-eaa1-4f05-b25e-b8bea013680d) + +#### Part3.1 Hierarchical Multi Agents +__Example 1__: ‘Single Agent megaservice’ +Only 1 agent is presented in this configuration. +![image](https://github.com/user-attachments/assets/2e716dd4-2923-4ebd-97bf-fe7a44161280) + +3 tools are registered to this agent through custom_tools.yaml +![image](https://github.com/user-attachments/assets/5b523ff2-9193-4b0c-b606-4149fd3e8612) + +![image](https://github.com/user-attachments/assets/5ad3c2a9-dc50-472b-8352-041ae4b6a9c6) +![image](https://github.com/user-attachments/assets/ec89e35b-8ccc-474b-9fb7-3ed7210acc10) + +__Example 2__: ‘Hierarchical Multi Agents’ +3 agents are presented in this configuration, 1st layer supervisor agent is the gateway to interact with user, and 1st layer agent will manage 2nd layer worker agents. + +![image](https://github.com/user-attachments/assets/a83b51e6-ee08-473f-b389-51df48f1054f) + +Users are expected to register 2nd layer workerAgents to 1st layer supervisor agent through supervisor_agent_custom_tools.yaml file. +![image](https://github.com/user-attachments/assets/d07223e9-4290-4ea7-8416-0caa2540bce1) + +![image](https://github.com/user-attachments/assets/9cc3825f-c77f-4482-bf10-292c08235f3b) +![image](https://github.com/user-attachments/assets/62bc9644-5308-4d4b-9784-a022dc26c37a) + +> User can follow this way to add more layers: +![image](https://github.com/user-attachments/assets/cc42fe97-4adf-44c9-a95a-c4bef8e26000) + +__Example 3__: ‘Multi Steps Agent megaservice’: + +User can also chain agent into a multi-step mega service. audioAgent_megaservice.yaml +![image](https://github.com/user-attachments/assets/5fb18d75-9c08-4d7b-97f7-25d7227147dd) + +#### Part3.2 Graph-Based Multi Agent +In Phase II, we propose to provide a graph-based multi agents system, which enterprise user will be able to define edges and conditional edges between agent nodes, planner nodes and tools for complex task agent design. + +![image](https://github.com/user-attachments/assets/7c07e651-43ed-4056-b20a-cd39f3f883ee) + +The user can build and launch the graph-based message group by the combination of docker image and yaml file: +![image](https://github.com/user-attachments/assets/5c84f728-ff87-45c9-8f09-ecd5428da454) + +The yaml file contains the basic config information for each single “Role” in the agent architecture. The user can build a MessageGroup to define the link connection information and the data flow via “edges” and “conditional_edges”. The “edges” mean the output of the head_node is the input of the tail_node. The “conditional_edges” means there is a decision-making among the candidate tail_nodes based on the output of the head_node. The logic of this selection part is defined by the state component “Should_Continue”. +![image](https://github.com/user-attachments/assets/55ecb718-b134-4546-9496-40ac3a427a7b) + +Appending agents/roles in MessageGroup. +Define the role class define the action of the role  add edges  recompile the messagegroup +![image](https://github.com/user-attachments/assets/65a3fc1d-89f3-4bb3-a078-75db91400c58) + +#### Part 4. Agent Debug System + +TBD + +#### Part 5. Benchmark + +TBD + diff --git a/docs-ua/community/rfcs/24-08-02-OPEA-AIAvatarChatbot.md b/docs-ua/community/rfcs/24-08-02-OPEA-AIAvatarChatbot.md new file mode 100644 index 00000000..f2e52371 --- /dev/null +++ b/docs-ua/community/rfcs/24-08-02-OPEA-AIAvatarChatbot.md @@ -0,0 +1,233 @@ +# 24-08-02-OPEA-AIAvatarChatbot + +Людиноподібний чат-бот зі штучним інтегрованим інтелектом RAG, інтегрований з OPEA AudioQnA + + +## Автори + +[ctao456](https://github.com/ctao456), [alexsin368](https://github.com/alexsin368), [YuningQiu](https://github.com/YuningQiu), [louie-tsai](https://github.com/louie-tsai) + +## Статус + +v0.1 - Команда ASMO поділилася 28 червня 2024 р. +[GenAIComps pr #400](https://github.com/opea-project/GenAIComps/pull/400) (на розгляді) +[GenAIExamples pr #523](https://github.com/opea-project/GenAIExamples/pull/523) (на розгляді) + +## Мета + +* "Цифрові люди стануть вирішальною силою в індустрії". З огляду на прориви в галузі ШІ та нейронної графіки, різко зріс попит на людино-комп'ютерну взаємодію та розмовні додатки ШІ. Щоб задовольнити цей попит, нам потрібні обчислення, керовані намірами, де взаємодія з комп'ютером буде такою ж природною, як і взаємодія з людиною. Проте всі існуючі програми OPEA (ChatQnA, AudioQnA, SearchQnA тощо) є текстовими і не містять інтерактивних візуальних елементів. + +* Варто також зазначити, що більшості існуючих програм OPEA бракує мультимодальних функцій, тобто вони не обробляють аудіо- та візуальні дані. У той час як підприємства все частіше шукають мультимодальні рішення зі штучним інтелектом, які можуть обробляти як аудіо, так і візуальні дані, щоб створювати чат-ботів із синхронізацією губ та обличчям, які будуть більш привабливими та схожими на людей. + +* У зв'язку з вищезазначеними причинами, ми представляємо новий мікросервіс, анімацію, який генерує анімовані аватари з аудіо та зображень/відео; і новий мегасервіс, AvatarChatbot, який інтегрує мікросервіс анімації з існуючим сервісом AudioQnA для створення людиноподібного аудіо чат-бота зі штучним інтелектом. + + + + + +![avatars chatbot](assets/avatars-chatbot.png) + +Чат-бот буде: +* Вміти розуміти та відповідати на текстові та аудіо запити користувачів, використовуючи бекенд модель LLM +* Синхронізувати фрагменти аудіо-відповіді з кадрами зображення/відео, щоб створити високоякісне відео, на якому аватар розмовляє в режимі реального часу +* Представляти відповіді користувача у вигляді анімованого аватара у зручному для користувача інтерфейсі +*Використовувати мультимодальне генерування з доповненим пошуком (RAG) для генерування більш точних відповідей у доменній області у версії 0.2 + +Нові мікросервіси включають: +* анімацію + +Нові мегасервіси включають: +* AvatarChatbot + +## Мотивація + +* Підприємства в медичній, фінансовій, освітній, розважальній та інших галузях все частіше використовують чат-боти зі штучним інтелектом для покращення обслуговування клієнтів та якості обслуговування. Проте існуючі програми OPEA (ChatQnA, AudioQnA, SearchQnA тощо) є текстовими і не містять інтерактивних візуальних елементів. +* Підприємства шукають мультимодальні рішення ШІ, які можуть обробляти як аудіо, так і візуальні дані, щоб створювати чат-ботів із синхронізованою мімікою та обличчям, які будуть більш привабливими та схожими на людей. +* Цей RFC має на меті заповнити ці прогалини шляхом введення нового мікросервісу, анімації, який може бути легко інтегрований з існуючими мікро- і мегасервісами в OPEA, щоб розширити можливості платформи в області мультимодального ШІ, взаємодії людини з комп'ютером і цифрової людської графіки. + +Загалом, цей проект додає до платформи OPEA новий блок мікросервісів, який анімацію зовнішнього вигляду чат-бота, та інтегрує його з існуючими трубопроводами чат-ботів, такими як [ChatQnA](https://github.com/opea-project/GenAIExamples/tree/2e312f44edbcbf89bf00bc21d9e9c847405ecae8/ChatQnA), [AudioQnA](https://github.com/opea-project/GenAIExamples/tree/2e312f44edbcbf89bf00bc21d9e9c847405ecae8/AudioQnA), [SearchQnA](https://github.com/opea-project/GenAIExamples/tree/2e312f44edbcbf89bf00bc21d9e9c847405ecae8/SearchQnA), тощо, створювати нові мегасервіси з чат-ботами, які можуть взаємодіяти з користувачами у більш людський спосіб. + +Схожі роботи включають [Nvidia Audio2Face](https://docs.nvidia.com/ace/latest/modules/a2f-docs/index.html), [Lenovo Deepbrain AI Avatar](https://www.deepbrain.io/ai-avatars), [BitHuman](https://www.bithuman.io/) тощо. + +## Проектна пропозиція + + +### Дизайн Avatar Chatbot + + +![avatar chatbot design](assets/design.png) + +Наразі у вищезгаданому дизайні відсутня функція RAG з використанням мікросервісів `embedding` та `dataprep`, включаючи завантаження відповідних документів/посилань, зберігання їх у базі даних та їх вилучення для моделі LLM. Ці функції будуть додані у версії 0.2. + +Блок-схема: AvatarChatbot Мегасервіс + +```mermaid +%%{ init : { "theme" : "base", "flowchart" : { "curve" : "stepBefore" }}}%% +flowchart TB + style Megaservice stroke:#000000 + subgraph AvatarChatbot + direction LR + A[User] --> |Input query| B[AvatarChatbot Gateway] + B --> |Invoke| Megaservice + subgraph Megaservice["AvatarChatbot Megaservice"] + direction LR + subgraph AudioQnA["AudioQnA"] + direction LR + C([ASR
3001]) + E([LLM
3007]) + G([TTS
3002]) + C ==> E ==> G + end + subgraph AvatarAnimation["Avatar Animation"] + direction LR + I([Animation
3008]) + end + G ==> I + end + end + subgraph Legend + direction LR + L([Microservice]) + N[Gateway] + end +``` + +Мегасервіс AvatarChatbot - це новий сервіс, який інтегрує існуючий сервіс AudioQnA з новим мікросервісом анімації. Сервіс AudioQnA - це конвеєр, який приймає аудіовхід користувача, перетворює його на текст, генерує відповідь LLM і перетворює відповідь на аудіовихід. Мікросервіс анімації - це новий сервіс, який приймає аудіо-відповідь від служби AudioQnA, генерує відповідь у вигляді анімованого аватара і надсилає її назад користувачеві. Шлюз AvatarChatbot викликає внутрішній мегасервіс AvatarChatbot для створення відповіді. + +#### анімаційний мікросервіс +Мікросервіс анімації - це новий сервіс, який генерує анімовані відеоролики аватарів з аудіо та зображення/відео вхідних даних. Мікросервіс анімації отримує звуковий відгук від сервісу AudioQnA, синхронізує фрагменти мелоспектрограми звукового відгуку з кадрами зображення/відео і генерує високоякісне відео, на якому аватар розмовляє в реальному часі. Мікросервіс анімації наразі використовує модель [Wav2Lip](https://github.com/Rudrabha/Wav2Lip) для синхронізації губ та модель [GFPGAN](https://github.com/TencentARC/GFPGAN) для відновлення обличчя. + +Користувач може створити власний Docker-образ за допомогою `Dockerfile_hpu` і створити Docker-контейнер на екземплярі Gaudi2 для запуску анімаційного мікросервісу. Потім вони можуть перевірити роботу сервісу, надіславши POST-запит до API сервера, надаючи при цьому аудіо та зображення/відео вхідні дані. Мікросервіс анімації згенерує анімовану відео-відповідь аватара і збереже її у вказаному вихідному шляху. + +В розробці підтримка альтернативних моделей SoTA, таких як [SadTalker] (https://github.com/OpenTalker/SadTalker) та [LivePortrait] (https://github.com/KwaiVGI/LivePortrait). + +#### Мегасервіс AvatarChatbot +Мегасервіс AvatarChatbot - це новий сервіс, який об'єднує існуючі мікросервіси, що входять до складу сервісу AudioQnA, з новим мікросервісом анімації. Сервіс AudioQnA - це конвеєр, який приймає вхідний аудіосигнал користувача, перетворює його на текст, генерує відповідь LLM і перетворює відповідь на вихідний аудіосигнал. Мікросервіс анімації - це новий сервіс, який приймає аудіо-відповідь від служби AudioQnA, генерує відповідь у вигляді анімованого аватара і надсилає її назад користувачеві. Мегапотік виглядає наступним чином: +asr -> llm -> tts -> animation + +```mermaid +--- +config: + flowchart: + nodeSpacing: 100 + rankSpacing: 100 + curve: linear + themeVariables: + fontSize: 42px +--- +flowchart LR + %% Colors %% + classDef blue fill:#ADD8E6,stroke:#ADD8E6,stroke-width:2px,fill-opacity:0.5 + classDef thistle fill:#D8BFD8,stroke:#ADD8E6,stroke-width:2px,fill-opacity:0.5 + classDef orange fill:#FBAA60,stroke:#ADD8E6,stroke-width:2px,fill-opacity:0.5 + classDef orchid fill:#C26DBC,stroke:#ADD8E6,stroke-width:2px,fill-opacity:0.5 + classDef invisible fill:transparent,stroke:transparent; + style AvatarChatbot-Megaservice stroke:#000000 + + %% Subgraphs %% + subgraph AvatarChatbot-Megaservice["AvatarChatbot Megaservice"] + direction LR + ASR([ASR
3001]):::blue + LLM([LLM 'text-generation'
3007]):::blue + TTS([TTS
3002]):::blue + animation([Animation
3008]):::blue + end + subgraph UserInterface["User Interface"] + direction LR + invis1[ ]:::invisible + USER1([User Audio Query]):::orchid + USER2([User Image/Video Query]):::orchid + UI([UI server
]):::orchid + end + subgraph ChatQnA GateWay + direction LR + invis2[ ]:::invisible + GW([AvatarChatbot GateWay
]):::orange + end + subgraph + direction LR + X([OPEA Microservice]):::blue + Y{{Open Source Service}}:::thistle + Z([OPEA Gateway]):::orange + Z1([UI]):::orchid + end + + %% Services %% + WHISPER{{Whisper service
7066}}:::thistle + TGI{{LLM service
3006}}:::thistle + T5{{Speecht5 service
7055}}:::thistle + WAV2LIP{{Wav2Lip service
3003}}:::thistle + + %% Connections %% + direction LR + USER1 -->|1| UI + UI -->|2| GW + GW <==>|3| AvatarChatbot-Megaservice + ASR ==>|4| LLM ==>|5| TTS ==>|6| animation + + direction TB + ASR <-.->|3'| WHISPER + LLM <-.->|4'| TGI + TTS <-.->|5'| T5 + animation <-.->|6'| WAV2LIP + + USER2 -->|1| UI + UI <-.->|6'| WAV2LIP +``` + + +#### Кінцевий Інтерфейс користувача +Інтерфейс користувача - Gradio. Користувачеві пропонується завантажити зображення або відео як джерело аватара. Користувач також задає своє питання усно через мікрофон, натиснувши на кнопку "запис". Бекенд AvatarChatbot обробляє вхідний аудіосигнал і генерує відповідь у вигляді анімованого аватара, який відповідає своїм унікальним голосом. Відповідь відображається в інтерфейсі Gradio. Користувач може бачити анімований аватар, який промовляє відповідь в режимі реального часу, і може взаємодіяти з аватаром, ставлячи додаткові запитання. + + + +![avatars ui](assets/avatars-ui.png) + +### Демонстрація в реальному часі +Демонстрація чат-бота AI Avatar на Intel® Gaudi® 2, введення зображення (вгорі) та відеовведення (внизу) + + +![AI Avatar Chatbot Demo on Intel® Gaudi® 2, image input](assets/image_wav2lipgfpgan_cut.gif) + + +![AI Avatar Chatbot Demo on Intel® Gaudi® 2, video input](assets/video_wav2lipgfpgan_cut.gif) + +## Сумісність + +Новий мегасервіс AvatarChatbot і мікросервіс анімації сумісні з існуючими репозиторіями OPEA GenAIExamples і GenAIComps. Їх можна розгорнути на апаратному забезпеченні Intel® Xeon® і Intel® Gaudi®. + +## Miscs + +Час наскрізного виведення для AvatarChatbot Megaservice (asr -> llm -> tts -> animation): + +На SPR: + + ~30 секунд для AudioQnA на SPR, + + ~40-200 секунд для AvatarAnimation на SPR + +На Gaudi 2: +~5 секунд для AudioQnA на Gaudi, +~10-50 секунд для AvatarAnimation на Gaudi, залежно від: +1) Незалежно від того, чи є вхідними даними зображення або багатокадрове відео з фіксованою частотою кадрів +2) Використано модель LipSync Animation DL: Wav2Lip_only або Wav2Lip+GFPGAN або SadTalker +3) Роздільна здатність і частота кадрів в секунду отриманого відео в форматі mp4 + +Всі звіти про затримки станом на 2 серпня 2024 р. diff --git a/docs-ua/community/rfcs/24-08-07-OPEA-GenAIStudio.md b/docs-ua/community/rfcs/24-08-07-OPEA-GenAIStudio.md new file mode 100644 index 00000000..b882d827 --- /dev/null +++ b/docs-ua/community/rfcs/24-08-07-OPEA-GenAIStudio.md @@ -0,0 +1,173 @@ +# 24-08-07 OPEA-001 OPEA GenAIStudio + +## Автори + +[ongsoonee](https://github.com/OngSoonEe) +[chinyixiang](https://github.com/chinyixiang) + +## Статус + +На розгляді + +## Зміст RFC + +### Мета + +Мета цього RFC - запропонувати створення GenAI Studio, платформи, призначеної для полегшення розробки користувацьких додатків на основі великих мовних моделей (LLM), використовуючи ідеї, отримані на етапі експериментів на ігровому майданчику. GenAI Studio дозволить користувачам створювати, оцінювати та порівнювати свої LLM-додатки за допомогою зручного інтерфейсу без коду/з низьким вмістом коду. Платформа також надає можливість експортувати розроблений додаток як готовий до розгортання пакет для негайної інтеграції на підприємстві. Ця ініціатива спрямована на спрощення переходу від концепції до виробництва, забезпечуючи безперебійний процес розгортання корпоративних додатків "з нуля". + +### Мотивація + +Цей RFC описує створення Enterprise GenAI Assembly Framework, спрощеної платформи для користувачів OPEA. Ключові цілі фреймворку включають: +- Збірка та конфігурація: Спростіть процес складання та конфігурації компонентів GenAI, таких як GenAIComps, за допомогою інтерактивного інтерфейсу для створення функціональних додатків. +- Бенчмаркінг та оцінка: Проведення порівняльне тестування та оцінку програми для налаштування та оптимізації, включаючи використання засобів [GenAIEval](https://github.com/opea-project/GenAIEval). +- Створення пакету розгортання підприємства: Надання інструментів для створення готових до розгортання корпоративних пакетів, включно з інтеграцією [GenAIInfra](https://github.com/opea-project/GenAIInfra). + +Фреймворк призначений для демократизації розробки, оцінки і розгортання додатків GenAI для користувачів OPEA, сприяючи інноваціям і підвищенню операційної ефективності в корпоративному ландшафті ШІ з OPEA. + +### Ціннісна пропозиція +#### Поточний підхід +![Current Approach of GenAI Solution for enterprise](https://github.com/user-attachments/assets/adb10f29-b506-46d6-abd3-ed5f70049bee) + +Днів/тижнів до 1-го робочого рішення + +#### Підхід GenAI Studio +![Proposed GenAIStudio Approach](https://github.com/user-attachments/assets/e0c59dd2-0ff5-4deb-9561-8cba4ab5defe) + +Рішення Day-0, яке пропонує користувачам фундаментальний скелет, що дозволяє їм зосередитися на бізнес-кейсах, а не на створенні базового фреймворку. + +### Особа +OPEA - це фреймворк, призначений для оптимізації автоматизації процесів на підприємстві за допомогою низки мікросервісів. GenAI Studio розширює можливості OPEA, дозволяючи користувачам розробляти, розгортати та оптимізувати рішення на основі штучного інтелекту. Цей сценарій демонструє, як різні особи - розробники OPEA, корпоративні користувачі (DevOps) та кінцеві користувачі - можуть використовувати GenAI Studio для ефективного створення та розгортання готових рішень для підприємств. + +Сценарії: + +1. Особа Розробник + - Мета:Розробка та інтеграція додатку GenAI для конкретного бізнес-кейсу в рамках мікросервісної архітектури OPEA. + - Використання Studio: + - Розробник OPEA використовує GenAI Studio для створення моделі GenAI, яка допомагає покращити бізнес-кейс використання. + - Просунуті інструменти розробки Studio дозволяють розробнику точно налаштовувати модель на основі специфічних даних підприємства, забезпечуючи оптимальну продуктивність. + - Після розробки Studio автоматично генерує готовий до використання корпоративний пакет розгортання, який включає всі необхідні компоненти, такі як конфігурації та інструменти управління ресурсами, що забезпечує безперешкодну інтеграцію з існуючою інфраструктурою OPEA. + - Цей пакет розроблений таким чином, щоб його можна було легко розгорнути на сайті замовника, мінімізуючи потребу в додатковій конфігурації та налаштуванні. + +2. Особа Користувач на підприємстві + - Мета: Оптимізація та розгортання додатку GenAI з мікросервісами OPEA для задоволення конкретних потреб підприємства. + - Використання Studio: + - Користувач на підприємстві використовує GenAI Studio для тестування та оптимізації згенерованого пакета розгортання. + - За допомогою інструментів бенчмаркінгу Studio вони оцінюють продуктивність ШІ-моделі як з точки зору висновків, так і з точки зору обчислень, щоб переконатися, що вона відповідає операційним вимогам підприємства. + - Studio надає інформацію про розподіл ресурсів, допомагаючи DevOps точно налаштувати розгортання для досягнення найкращої продуктивності. Після оптимізації пакет розгортання легко запускається, дозволяючи підприємству негайно отримати вигоду від удосконалень ШІ. + +3. Особа Кінцевий користувач + - Мета: Впровадження і використання рішень OPEA зі штучним інтелектом для конкретних бізнес-завдань. + - Використання Studio: + - Кінцевий користувач отримує доступ до GenAI Studio, щоб вивчити готовий до використання пакет розгортання, наданий командою DevOps. + - Студія пропонує інструменти для оцінки продуктивності рішення в реальних сценаріях, щоб переконатися, що воно відповідає цілям бізнесу. + - Після мінімального налаштування кінцевий користувач може розгорнути рішення зі штучним інтелектом у своєму середовищі, автоматизуючи складні робочі процеси та оптимізуючи використання ресурсів для більш ефективного досягнення бізнес-цілей. + +Generative AI Studio дозволяє розробникам, корпоративним користувачам і кінцевим користувачам створювати, оптимізувати і розгортати корпоративні рішення на основі штучного інтелекту без особливих зусиль. Надаючи інструменти для створення готових до використання пакетів розгортання та тестування продуктивності, студія гарантує, що рішення на основі штучного інтелекту не лише потужні, але й прості у розгортанні та обслуговуванні, що робить їх високоефективними для бізнес-застосунків. + +### Стратегія та обсяг робіт + +Не вигадуйте колесо - використовуйте вже існуючі напрацювання OPEA, відкриті джерела та фундаментальні напрацювання EasyData. +- GMC на конфігурацію/розгортання +- Langflow/flowise.ai для налаштування додатку +- Пакети для оцінки продуктивності (VictoriaMetric, OpenTelemetry (Otel), Tempo, Loki, Grafana) +- Istio для управління навантаженням + +Обсяг розробки/оптимізації моделі + +| Обсяг роботи | Статус | +| --- | --- | +| Prompt engineering, RAG | За обсягом | +| Model Finetune | Пряма ціль | +| Model Pre-train | Поза сферою дії | + +### Архітектура високого рівня GenAI Studio +![OPEA GenAI Studio Architecture](https://github.com/user-attachments/assets/fa55aeae-158b-4035-8325-25821c24a27f) + +### Проєктна пропозиція + +### Проєктний простір +Надання інтерактивного користувацького інтерфейсу для створення, налаштування, тестування і генерації остаточного пакета розгортання. Користувач може використовувати файл даних yaml для створення та модифікації студійного проекту, як альтернативу графічному інтерфейсу. + +#### Частина 1: Побудова та конфігурація додатку +Користувач може створити додаток GenAI з такою конфігурацією, як +- вибір моделі +- встановлення параметрів моделі (temp, top-p, top-k, max response) +- системна інструкція + +Забезпечує 2 режими конфігурації +- Режим Wizard: Користувач отримує покрокову інструкцію щодо створення додатку + ![screenshot sample of wizard mode](https://github.com/user-attachments/assets/1c780be1-d6dc-47fb-8a23-5229392ab45b) +- Режим робочого процесу Drag-n-Drop: Дозволяє користувачеві створити власний потік з доступних компонентів (використовуючи Flowise AI) + - Utilize Flowise AI - https://docs.flowiseai.com/ + - Примітка: Потребує подальшої доцільності навчання в області + - Простота налаштування або додавання нових компонентів інтерфейсу + - Підключення та інтеграція з Мегасервісом (HelmChart, DockerCompose, GMC) + + + +#### Частина 2: Порівняльний аналіз та оцінка +A. Продуктивність виведення +- Загальний бенчмаркінг + - GLUE/SuperGLUE + - GPQA + - SQuAD + - ImageNet + - MLPerf +- Галюцинація +- Вертикальний/доменний бенчмаркінг (з базовою інформацією) +- Доопрацювання - наступний етап + +B. Модель обчислювальної продуктивності +- токенів на секунду (TPS) +- затримка 1-го токена +- пропускна здатність +- продуктивність RAG + +C. Моніторинг ресурсів - завантаження процесора, пам'яті +![Diagram on resource monitoring architecture](https://github.com/user-attachments/assets/0fe9fed7-0979-4325-b242-fcd753b19f09) + +Включення компонентів для оцінки продуктивності обчислень +- VictoriaMetric: як сховище метрик для використання ресурсів +- OpenTelemetry (Otel): механізм трасування датчиків +- Tempo: сховище трас для OpenTelemetry +- Loki: зберігання логів для pod/Kubernetes +- Grafana: візуалізація метрик, трасування та логів +- Prometheus + +#### Частина 3: Розгортання на підприємстві +Створіть базу корпоративного пакета розгортання на основі програми з функціями корпоративних об'єктів, включно з функціями: +- Інтерфейс додатку +- Керування користувачами (вхід, створення, покращення, видалення) +- Керування сеансами (наприклад, сеансами чату) +- налаштування параметрів виведення (top-p, top-k, температура) +- Vector Store +- Генерація токенів +- Доступ до API + +Додатки: +- QnA +- AudioChat +- VisualChat +- Translation +- CodeGen +- CodeTrans +- Summarizer + +Конфігурація розгортання - Зразок інтерфейсу +- ОС +- Хмара/ OnPrem +- Кластер /одна машина +- Вибір функцій (API доступ, Керування користувачами тощо) +- Моніторингова панель для управління ресурсами + +![GenAI Deployment Package Configuration](https://github.com/user-attachments/assets/8dd43bff-26a6-4c3e-a80c-127bccdff7f3) + +Згенерований пакунок розгортання зазвичай складається з таких частин: +- Плейбуки Ansible - Плейбуки Ansible будуть використовуватися для налаштування та ініціалізації важливих служб, таких як K8s, база даних SQL, локальний реєстр образів тощо. +- Коди інтерфейсу додатку +- Внутрішні коди серверів додатків +- Інші образи компонентів мікросервісу OPEA можна отримати з реєстру OPEA безпосередньо під час налаштування. + + +### Сумісність +Цей RFC вимагатиме проведення техніко-економічного обґрунтування щодо інструментів, які слід використовувати для проектування режиму Drag-n-Drop Workflow у Частині 1. Flowise AI є хорошим кандидатом, але його потрібно запускати як окремий сервіс, що додасть складності до UI/UX дизайну. diff --git a/docs-ua/community/rfcs/24-08-20-OPEA-001-AI_Gateway_API.md b/docs-ua/community/rfcs/24-08-20-OPEA-001-AI_Gateway_API.md new file mode 100644 index 00000000..afc36425 --- /dev/null +++ b/docs-ua/community/rfcs/24-08-20-OPEA-001-AI_Gateway_API.md @@ -0,0 +1,107 @@ +## RFC Title + +AI Gateway API + +## RFC Content + +### Author + +[daixiang0](https://github.com/daixiang0), [zhixie](https://github.com/zhxie), [gyohuangxin](https://github.com/gyohuangxin), [Forrest-zhao](https://github.com/Forrest-zhao), [ruijin-intel](https://github.com/ruijin-intel) + +### Status + +Under Review + +### Objective + +Design the API for AI Gateway. + +### Motivation + +- Introduce gateway to do mTLS, traffic control, observability and so on +- Introduce AI Gateway API to use existing gateway sloutions rather than implement our own one. + +### Design Proposal + +The AI gateway is at the front of all microservices: + +```mermaid +graph TD; + A(AI Gateway)-->Retrival; + A-->Rerank; + A-->LLM; + A-->Guardrails; + A-->B(Any microservice); +``` + +#### API overall + +To make the most of current resources, we choose to follow [Kubernetes Gateway API](https://gateway-api.sigs.k8s.io/) since it is the gateway API standard that all gateways support. + +Since AI specific features of Kubernetes Gateway API are still [under discussion](https://docs.google.com/document/d/1FQN_hGhTNeoTgV5Jj16ialzaSiAxC0ozxH1D9ngCVew/edit), We design AI Gateway API including following two parts: + +- **Kubernetes Gateway API** for features it already supports +- **Extension API for** all other features + +#### API workflow + +```mermaid +graph LR; + A(Config using AI Gateway API)-->B(Convert to specific gateway API) +``` + +AI Gateway is not a brand-new gateway implementation, only does one thing: Convert. + +#### Extension API + +```yaml +apiVersion: extension.gateway.opea.dev/v1 +kind: Gateway +metadata: + name: extension-exmaple +spec: + gatewayClassName: envoy + extensions: + - name: extension-1 + config: + extension-1-config: aaa + - name: extension-2 + config: + extension-2-config: bbb +``` + +- gatewayClassName: specific gateway implement +- name: the name of extension feature, support multiple extensions +- config: the content of extension config, following specified gateway API + +#### Extension API example + +```yaml + +apiVersion: extension.gateway.opea.dev/v1 +kind: Gateway +metadata: + name: envoy-extension-exmaple +spec: + gatewayClassName: envoy + extensions: + - name: token-ratelimit + config: + name: envoy.filters.http.guardrails + typed_config: + "@type": type.googleapis.com/envoy.extensions.filters.http.guardrails.v3.Guardrails + inference: + runtime: envoy.inference_runtime.openvino + typed_config: + "@type": type.googleapis.com/envoy.extensions.inference_runtime.openvino.v3.OpenvinoConfig + backend: CPU + plugins: + - /usr/lib/libopenvino_tokenizers.so + model_path: /home/zhihao/envoy/.project/openvino/models/OTIS-Official-Spam-Model.xml + source: RESPONSE + action: ALLOW +``` + +**Guardrail** is AI specific feature, here we use Extension API to config Envoy to use CPU to inference with specified model to do response check. + +The config field follows the Envoy API. diff --git a/docs-ua/community/rfcs/24-08-21-GenAIExample-002-Edge_Craft_RAG.md b/docs-ua/community/rfcs/24-08-21-GenAIExample-002-Edge_Craft_RAG.md new file mode 100644 index 00000000..76e097f3 --- /dev/null +++ b/docs-ua/community/rfcs/24-08-21-GenAIExample-002-Edge_Craft_RAG.md @@ -0,0 +1,189 @@ +# Edge Craft RAG + +This RFC describes a solution of a tunable RAG for edge scenarios. + +## RFC Content + +### Author + +[myqi](https://github.com/myqi) + +### Status + +Under Review + +### Objective + +Edge industry users are facing obstacles to build an "out-of-the-box" RAG +application to meet both quality and performance requirements. Total Cost of +Ownership(TCO) and pipeline optimization techniques are the two main reasons +to block this process. + +#### Total Cost of Ownership + +The HW requirement of a typical edge use case is a single host with one of the +following combinations: +- Intel(R) Core(TM) Ultra Processor +- Intel(R) Core(TM) Processor + Intel(R) Iris(R) Xe Graphics +- Intel(R) Core(TM) Processor + Intel(R) Arc(TM) A-Series Graphics +- Intel(R) Xeon(R) Processor + Intel(R) Arc(TM) A-Series Graphics + +The scenarios with these hardware options block the edge users from using large +parameter size LLMs on-prem as well as sophisticated RAG pipeline for their data. +Thus, the RAG pipeline at edge needs to be highly curated for underlying hardwares +and suitable models accordingly. + +#### RAG Pipeline Optimization Techniques + +Tuning RAG pipeline is a systematic problem. First, the quality depends on the +result of each stage in the pipeline as well as the end-to-end outcome. Second, +optimization could be a trade-off among the metrics. It is difficult to decide one +answer is better than another if it is slightly not accurate in number but more +relevant to the query. Third, the optimization techniques may not intuitively +reflect to metrics improvements. E.g., recrusive retrieval may contribute to +improving the recall and context relevancy, or may not. + +### Motivation + +Edge Craft RAG (EC-RAG) is a customizable, tunable and production-ready +Retrieval-Augmented Generation system for edge solutions. It is designed to +curate the RAG pipeline to meet hardware requirements at edge with garanteed +quality and performance. + +From quality perspective, EC-RAG is tunable in the indexing, retrieving, +reranking and generation stages for particular edge use cases. From performance +perspective, the pipeline is consolidated in a single service to eliminate the +overhead of inter-service communication on a single host. Meanwhile, the inferencing +stages like embedding, reranking and generation are optimized for Intel(R) Iris(R) +Xe Graphics and Intel(R) Arc(TM) A-Series Graphics. + +### Design Proposal + +EC-RAG is composed of the following components: +- UI for doc loading and interactive chatbot. +- Gateway +- Mega-service with a single micro-services for the tunable* EC-RAG pipeline. +- LLM serving microservice optimized for Intel(R) Iris(R) Xe Graphics and Intel(R) Arc(TM) A-Series +Graphics +- VectorDB microservice optimized for Intel(R) Iris(R) Xe Graphics and/or Intel(R) Arc(TM) A-Series +- Docker compose file to launch the UI, Mega/Micro-services + +> [!NOTE] +> *Advanced tuning EC-RAG will need a tool co-piloting with the pipeline which will be described in +> a separate doc + +Below diagram illustrates the overall components of EC-RAG: +![EC-RAG Diagram](Edge_Craft_RAG.png) + +The EC-RAG pipeline will expose 3 types of REST API endpoint: +- **/v1/data** for indexing +- **/v1/settings** for configuration +- **/v1/chatqna** for inferencing + +#### /v1/data + +| Description | Action | Endpoint | Data Schema | +| ------------- | ------ | ------------- | ------------------ | +| Upload a file | POST | /v1/data | FastAPI.UploadFile | +| List files | GET | /v1/data | | +| Remove | DELETE | /v1/data/{id} | | + +#### /v1/settings/pipelines + +| Description | Action | Endpoint | Data Schema | +| ------------------ | ------ | ----------------------------- | ------------------ | +| Setup a pipeline | POST | /v1/settings/pipelines | Pipeline object | +| Get/list pipelines | GET | /v1/settings/pipelines(/{id}) | Pipeline object(s) | | +| Update pipelines | PATCH | /v1/settings/pipelines/{id} | Pipeline object | +| Remove a pipeline | DELETE | /v1/settings/pipelines/{id} | | + +### /v1/settings/models + +| Description | Action | Endpoint | Data Schema | +| --------------- | ------ | -------------------------- | --------------- | +| Load models | POST | /v1/settings/models | Model object | +| Get/list models | GET | /v1/settings/models(/{id}) | Model object(s) | +| Update models | PATCH | /v1/settings/models/{id} | Model object | +| Remove a model | DELETE | /v1/settings/models/{id} | | + +### Pipeline configuration example + +```json +{ + "name": "rag_demo", + "node_parser" : { + "chunk_size": 250, + "chunk_overlap": 48, + "type": "simple" + }, + "indexer": { + "type": "faiss_vector", + "model": { + "model_id": "BAAI/bge-small-en-v1.5", + "model_path": "./bge_ov_embedding", + "device": "auto" + } + }, + "retriever": { + "type": "vectorsimilarity", + "top_k": 30 + }, + "postprocessors": [ + { + "type": "reranker", + "rerank_top_n": 5, + "model": { + "model_id": "BAAI/bge-reranker-large", + "model_path": "./bge_ov_reranker", + "device": "auto" + } + } + ], + "generator": { + "model": { + "model_id": "qwen2-7b-instruct", + "model_path": "./qwen2-7b-instruct/INT4_compressed_weights", + "device": "auto" + }, + "prompt_path" : "./data/default_prompt.txt" + }, + "active": "True" +} +``` + +#### UI + +The EC-RAG UI is gradio. The user is able to select the models as well as input +parameters in different stages for the pipeline. The chatbox is also integrated +in the UI. + +EC-RAG UI - Model Condiguration +![EC-RAG UI Model Configuration](Edge_Craft_RAG_screenshot_1.png) + +EC-RAG UI - Chatbot with settings +![EC-RAG UI Chatbot](Edge_Craft_RAG_screenshot_2.png) + +### Compatibility + +EC-RAG megaservice and microservice are compatible with the existing OPEA +GenAIExamples and GenAIComps repos. The EC-RAG leverages the LLM microservice +and the VectorDB microservice from GenAIComps. + +### Miscellaneous + +The EC-RAG will be developed in 2 phases. + +#### Phase 1 + +The UI, gateway, and EC-RAG pipeline will be finished without Vector DB as +persistent DB. Instead, FAISS will be used for vector search and keep vector +store in memory. + +In this phase, the LLM inferencing will happen in the pipeline until the LLM +serving microservice supports Intel(R) Iris(R) Xe Graphics and Intel(R) Arc(TM) +A-Series Graphics. + +#### Phase 2 + +The vector DB will be enabled in this phase as well as LLM inferencing on +Intel(R) Iris(R) Xe Graphics and Intel(R) Arc(TM) A-Series Graphics. diff --git a/docs-ua/community/rfcs/Edge_Craft_RAG.png b/docs-ua/community/rfcs/Edge_Craft_RAG.png new file mode 100644 index 00000000..5d047311 Binary files /dev/null and b/docs-ua/community/rfcs/Edge_Craft_RAG.png differ diff --git a/docs-ua/community/rfcs/Edge_Craft_RAG_screenshot_1.png b/docs-ua/community/rfcs/Edge_Craft_RAG_screenshot_1.png new file mode 100644 index 00000000..6242f117 Binary files /dev/null and b/docs-ua/community/rfcs/Edge_Craft_RAG_screenshot_1.png differ diff --git a/docs-ua/community/rfcs/Edge_Craft_RAG_screenshot_2.png b/docs-ua/community/rfcs/Edge_Craft_RAG_screenshot_2.png new file mode 100644 index 00000000..dfb1c32d Binary files /dev/null and b/docs-ua/community/rfcs/Edge_Craft_RAG_screenshot_2.png differ diff --git a/docs-ua/community/rfcs/README.md b/docs-ua/community/rfcs/README.md new file mode 100644 index 00000000..ea79bd02 --- /dev/null +++ b/docs-ua/community/rfcs/README.md @@ -0,0 +1,11 @@ +# RFC Archive + +Ця папка використовується для архівування всіх RFC, створених спільнотою OPEA. Користувачі можуть або безпосередньо додавати RFC до цієї папки, або надсилати їх на сторінку `Issues` кожного репозиторію OPEA з шаблоном рядка `[RFC]: xxx` у заголовку. Останній буде автоматично збережено до цієї папки за допомогою інструменту архівації. + +Угода про імена файлів дотримується такого правила: + + yy-mm-dd-[OPEA Project Name]-[index]-title.md + +Наприклад, + +24-04-29-GenAIExamples-001-Using_MicroService_to_implement_ChatQnA.md diff --git a/docs-ua/community/rfcs/assets/avatar1.jpg b/docs-ua/community/rfcs/assets/avatar1.jpg new file mode 100644 index 00000000..4486c866 Binary files /dev/null and b/docs-ua/community/rfcs/assets/avatar1.jpg differ diff --git a/docs-ua/community/rfcs/assets/avatar2.jpg b/docs-ua/community/rfcs/assets/avatar2.jpg new file mode 100644 index 00000000..8fc98638 Binary files /dev/null and b/docs-ua/community/rfcs/assets/avatar2.jpg differ diff --git a/docs-ua/community/rfcs/assets/avatar3.png b/docs-ua/community/rfcs/assets/avatar3.png new file mode 100644 index 00000000..b85822a9 Binary files /dev/null and b/docs-ua/community/rfcs/assets/avatar3.png differ diff --git a/docs-ua/community/rfcs/assets/avatar4.png b/docs-ua/community/rfcs/assets/avatar4.png new file mode 100644 index 00000000..337c5345 Binary files /dev/null and b/docs-ua/community/rfcs/assets/avatar4.png differ diff --git a/docs-ua/community/rfcs/assets/avatar6.png b/docs-ua/community/rfcs/assets/avatar6.png new file mode 100644 index 00000000..329367ec Binary files /dev/null and b/docs-ua/community/rfcs/assets/avatar6.png differ diff --git a/docs-ua/community/rfcs/assets/avatars-chatbot.png b/docs-ua/community/rfcs/assets/avatars-chatbot.png new file mode 100755 index 00000000..c03f2bd7 Binary files /dev/null and b/docs-ua/community/rfcs/assets/avatars-chatbot.png differ diff --git a/docs-ua/community/rfcs/assets/avatars-ui.png b/docs-ua/community/rfcs/assets/avatars-ui.png new file mode 100755 index 00000000..fa882765 Binary files /dev/null and b/docs-ua/community/rfcs/assets/avatars-ui.png differ diff --git a/docs-ua/community/rfcs/assets/design.png b/docs-ua/community/rfcs/assets/design.png new file mode 100644 index 00000000..1368137d Binary files /dev/null and b/docs-ua/community/rfcs/assets/design.png differ diff --git a/docs-ua/community/rfcs/assets/image_wav2lipgfpgan_cut.gif b/docs-ua/community/rfcs/assets/image_wav2lipgfpgan_cut.gif new file mode 100644 index 00000000..aea95f3f Binary files /dev/null and b/docs-ua/community/rfcs/assets/image_wav2lipgfpgan_cut.gif differ diff --git a/docs-ua/community/rfcs/assets/ui_latest_1.png b/docs-ua/community/rfcs/assets/ui_latest_1.png new file mode 100644 index 00000000..0e933425 Binary files /dev/null and b/docs-ua/community/rfcs/assets/ui_latest_1.png differ diff --git a/docs-ua/community/rfcs/assets/ui_latest_2.png b/docs-ua/community/rfcs/assets/ui_latest_2.png new file mode 100644 index 00000000..047f958b Binary files /dev/null and b/docs-ua/community/rfcs/assets/ui_latest_2.png differ diff --git a/docs-ua/community/rfcs/assets/ui_latest_3.png b/docs-ua/community/rfcs/assets/ui_latest_3.png new file mode 100644 index 00000000..c4a428ac Binary files /dev/null and b/docs-ua/community/rfcs/assets/ui_latest_3.png differ diff --git a/docs-ua/community/rfcs/assets/video_wav2lipgfpgan_cut.gif b/docs-ua/community/rfcs/assets/video_wav2lipgfpgan_cut.gif new file mode 100644 index 00000000..1ddc34f4 Binary files /dev/null and b/docs-ua/community/rfcs/assets/video_wav2lipgfpgan_cut.gif differ diff --git a/docs-ua/community/rfcs/opea_architecture.png b/docs-ua/community/rfcs/opea_architecture.png new file mode 100644 index 00000000..2b13a374 Binary files /dev/null and b/docs-ua/community/rfcs/opea_architecture.png differ diff --git a/docs-ua/community/rfcs/opea_workflow.png b/docs-ua/community/rfcs/opea_workflow.png new file mode 100644 index 00000000..8cd1106d Binary files /dev/null and b/docs-ua/community/rfcs/opea_workflow.png differ diff --git a/docs-ua/community/rfcs/rfc_template.txt b/docs-ua/community/rfcs/rfc_template.txt new file mode 100644 index 00000000..93dbd438 --- /dev/null +++ b/docs-ua/community/rfcs/rfc_template.txt @@ -0,0 +1,42 @@ +# RFC Template + +Помістіть заголовок «RFC Template» з назвою вашого RFC, за яким слідує +короткий опис функції, до якої ви хочете долучитися + +## Author(s) + +Перелічіть усіх учасників цього RFC. + +## Status + +Змініть статус PR на "На розгляді" | "Відхилено" | "Прийнято". + +## Objective + +Перелічить, яку проблему це вирішить? Які цілі та нецілі цього RFC? + +## Motivation + +Перелічіть, чому ця проблема є цінною для вирішення? Чи існує якась пов'язана робота? + +## Design Proposal + +Це серце документа, що використовується для розробки філософії дизайну і детальної пропозиції. + +## Alternatives Considered + +Перелічіть інші альтернативи, якщо вони є, та відповідні плюси/мінуси кожної пропозиції. + +## Compatibility + +Перелічіть можливі несумісні зміни в інтерфейсі або робочому процесі, якщо такі існують. + +## Miscellaneous + +Перелічіть іншу інформацію, яка може бути важливою для користувача та розробника, наприклад + +- Вплив на продуктивність, таку як швидкість, пам'ять, точність. +- Інженерний вплив, наприклад, розмір двійкового коду, час запуску, час збірки, час тестування. +- Вплив на безпеку, наприклад, вразливість коду. +- Список справ або поетапний план. + diff --git a/docs-ua/deploy/index.rst b/docs-ua/deploy/index.rst new file mode 100644 index 00000000..55fdda5c --- /dev/null +++ b/docs-ua/deploy/index.rst @@ -0,0 +1,94 @@ +.. _GenAIInfra: + +Розгортання GenAI +################# + +GenAIInfra - це контейнеризація та хмарний набір для OPEA, +включаючи артефакти для розгортання :ref:`GenAIExamples` у хмарному середовищі, +щоб корпоративні користувачі могли розгортати їх у власній хмарі. + +Ми створюємо цю документацію на основі вмісту в +:GenAIInfra_blob:`GenAIInfra` репозиторії GitHub. + + +.. toctree:: + :maxdepth: 1 + :glob: + + /GenAIInfra/README + /GenAIInfra/* + +Посібники з інсталяції +********************** + +.. toctree:: + :maxdepth: 1 + :glob: + + ../guide/installation/* + ../guide/installation/**/* + +Аутентифікація та авторизація +***************************** + +.. toctree:: + :maxdepth: 1 + :glob: + + /GenAIInfra/authN-authZ/* + /GenAIInfra/authN-authZ/**/* + +Карти-схеми +*********** + +.. toctree:: + :maxdepth: 1 + :glob: + + /GenAIInfra/helm-charts/README + /GenAIInfra/helm-charts/* + /GenAIInfra/helm-charts/**/* + +Доповнення для Kubernetes +************************* + +.. toctree:: + :maxdepth: 1 + :glob: + + /GenAIInfra/kubernetes-addons/README + /GenAIInfra/kubernetes-addons/* + /GenAIInfra/kubernetes-addons/**/* + +З'єднувач мікросервісів +*********************** + +.. toctree:: + :maxdepth: 1 + :glob: + + /GenAIInfra/microservices-connector/README + /GenAIInfra/microservices-connector/* + /GenAIInfra/microservices-connector/**/* + +Проксі трубопроводу +******************* + +.. toctree:: + :maxdepth: 1 + :glob: + + /GenAIInfra/proxy/README + /GenAIInfra/proxy/* + /GenAIInfra/proxy/**/* + +Скріпти +******* + +.. toctree:: + :maxdepth: 1 + :glob: + + /GenAIInfra/scripts/README + /GenAIInfra/scripts/* + /GenAIInfra/scripts/**/* diff --git a/docs-ua/developer-guides/OPEA_API.rst b/docs-ua/developer-guides/OPEA_API.rst new file mode 100644 index 00000000..dc2376b0 --- /dev/null +++ b/docs-ua/developer-guides/OPEA_API.rst @@ -0,0 +1,907 @@ +.. _OPEA_API: + +OPEA API Service Spec (v0.9) +############################ + +Автори: + +.. rst-class:: rst-columns + +* feng.tian@intel.com +* liang1.lv@intel.com +* haihao.shen@intel.com +* kaokao.lv@intel.com + +Ця специфікація використовується для визначення спокійного API сервісу OPEA Mega для доступу користувачів, +а також для визначення вхідних і вихідних даних усіх мікросервісів OPEA, щоб розробник міг побудувати сервіс OPEA Mega. + +.. Примітка:: Ця специфікація сервісу API знаходиться в процесі розробки і може бути неповною та містити помилки. + +.. contents:: API Services Table of Contents + :depth: 2 + :local: + +----- + +OPEA Mega Service API +********************* + +OPEA Mega Service - це основний вхід, до якого користувач може отримати доступ для готового додатку GenAI. +Такий додаток GenAI складається з одного або декількох мікросервісів OPEA, з'єднаних у вигляді DAG (спрямованого ациклічного графа) +і побудованих як робочий процес виконання для розробника для створення складних додатків. + +----- + +.. _list_services: + +Список сервісів +=============== + +Список усіх сервісів, які підтримує OPEA Mega Service. + +Запит +----- + +.. list-table:: + :header-rows: 1 + + * - Метод + - URL + * - **GET** + - ``/v1/list_service`` + +Відповідь +--------- + +.. list-table:: + :header-rows: 1 + + * - Статус + - Відповідь + * - **200** + - .. code-block:: + + { + : + } + + ``service_name (string)`` + Кінцеві точки або URL-адреси, які обслуговує мега-сервіс OPEA. Наприклад, + ``/v1/RAG``. + + Зверніть увагу, що деякі ключові слова, такі як + ``/v1/audio/speech``, ``/v1/audio/transcriptions``, ``/v1/embeddings``, ``/v1/chat/completions`` + зарезервовано для сумісного з openAI Mega Service. + + ``service_description (string)`` + Детальний опис використання, який користувач використовував для доступу до вказаних кінцевих точок + або адрес, які обслуговує мега-сервіс OPEA, включаючи формат і деталі запитів і повідомлень. + * - **405** + - ``{"error": "Retrieve service name wrongly."}`` + +----- + +Список параметрів, що налаштовуються +==================================== + +Список всіх параметрів, що налаштовуються, щоб користувачі могли контролювати поведінку OPEA Mega Service. + +Запит +----- + +.. list-table:: + :header-rows: 1 + + * - Метод + - URL + * - **GET** + - ``/v1/list_parameters`` + +Відповідь +--------- + +.. list-table:: + :header-rows: 1 + + * - Статус + - Відповідь + * - **200** + - .. code-block:: + + { + : + { + : data_type, + . . . + } + } + + ``micro_service_name (string)`` + Ім'я мікросервісу в OPEA мегасервісу, в якому можна налаштувати деякі параметри. + + ``parameter_name (string)`` + Ім'я параметра, що налаштовується в мегасервісі OPEA. + + ``data_type (string)`` + Підтримувані типи даних: ``"string"`` або ``"integer"``. + + Наприклад: ``{"/v1/llm_generate": {"max_tokens": "integer"}}`` + * - **405** + - ``{"error": "Retrieve configurable parameter wrongly."}`` + +----- + +Вбудовування +============ + +**Необов'язково**. Якщо існує лише один мікросервіс OPEA, який розкриває ``/micro_service/embedding``, інтерфейс побудовано як мегасервіс OPEA. + +Запит +----- + +.. list-table:: + :header-rows: 1 + + * - Метод + - URL + * - **POST** + - ``/v1/list_parameters`` + +.. list-table:: + :header-rows: 1 + + * - Тип + - Параметри + - Значення + - Потрібно + - Опис + * - **POST** + - ``input`` + - ``string`` + - необхідний + - Введіть текст для вбудовування, закодований у вигляді рядка або масиву токенів. + Щоб вбудувати кілька вхідних даних в один запит, передайте масив рядків або масив масивів токенів. + Вхідні дані не повинні перевищувати максимальну кількість вхідних токенів для моделі (8192 токени для text-embedding-ada-002), + не можуть бути порожнім рядком, а будь-який масив повинен мати розмірність 2048 або менше. + * - **POST** + - ``model`` + - ``string`` + - застарілий + - Ідентифікатор моделі для використання. + * - **POST** + - ``encoding_format`` + - ``string`` + - необхідний + - Формат, у якому потрібно повернути вбудовування. Може бути як ``"float"``, так і ``"base64"``. + * - **POST** + - ``dimensions`` + - ``integer`` + - необов'язковий + - Кількість вимірів, які повинні мати результуючі вихідні вкладення. + Підтримується лише у моделях з вбудовуванням тексту-3 та пізніших версіях. + +Відповідь +--------- + +.. list-table:: + :header-rows: 1 + + * - Статус + - Відповідь + * - **200** + - .. code-block:: + + { + "object": "list", + "data": [{ + "object": "embedding", + "embedding": [ + 0.0023064255, + ... + ], + "index": 0 + }], + "model": "text-embedding-ada-002", + "usage": { + "prompt_tokens": 8, + "total_tokens": 8 + }, + } + + + ``embedding (float)`` + Векторне представлення для заданих вхідних даних. + + ``index (integer)`` + Індекс вбудовування у списку вбудовувань. + + ``parameter_name (string)`` + Ім'я параметра, що налаштовується в мегасервісі OPEA. + + ``data_type (string)`` + Підтримуваний тип даних, ``"string"`` або ``"integer"``. + + Наприклад: ``{"llm": {"max_tokens": "integer"}}`` + * - **405** + - ``{"error": "Retrieve configurable parameter wrongly."}`` + +----- + +Чат +=== + +**Необов'язково**. Якщо сервіс OPEA Mega створено з таким URL запиту, він відповідає наведеному нижче формату. + +Запит +----- + +.. list-table:: + :header-rows: 1 + + * - Метод + - URL + * - **POST** + - ``/v1/chat/completions`` + +.. list-table:: + :header-rows: 1 + + * - Тип + - Параметри + - Значення + - Потрібно + - Опис + * - **POST** + - ``message`` + - ``array`` + - необхідний + - A list of messages comprising the conversation. Refer to the + `detail format `_. + * - **POST** + - ``model`` + - ``string`` + - застарілий + - Ідентифікатор моделі для використання. + * - **POST** + - ``frequency_penalty`` + - ``integer`` + - необов'язковий + - Число від -2.0 до 2.0. Позитивні значення штрафують нові лексеми на основі їхньої вже наявної частоти в тексті, + зменшуючи ймовірність того, що модель буде дослівно повторювати один і той самий рядок. + * - **POST** + - ``logit_bias`` + - ``map`` + - необов'язковий + - Змінити ймовірність появи вказаних токенів у завершенні. Приймається JSON-об'єкт, який зіставляє токени + (вказані за їх ідентифікатором в токенізаторі) з відповідним значенням зсуву від -100 до 100. Математично, + зсув додається до логів, згенерованих моделлю перед вибіркою. Точний ефект залежить від моделі, але значення + від -1 до 1 повинні зменшувати або збільшувати ймовірність відбору; значення -100 або 100 + повинні призводити до заборони або виключного відбору відповідного токена. + * - **POST** + - ``logprobs`` + - ``bool`` + - необов'язковий + - + * - **POST** + - ``top_logprobs`` + - ``integer`` + - необов'язковий + - + * - **POST** + - ``max_tokens`` + - ``integer`` + - необов'язковий + - + * - **POST** + - ``n`` + - ``integer`` + - необов'язковий + - + * - **POST** + - ``presence_penalty`` + - ``float`` + - необов'язковий + - + * - **POST** + - ``response_format`` + - ``object`` + - необов'язковий + - + * - **POST** + - ``seed`` + - ``integer`` + - необов'язковий + - + * - **POST** + - ``stop`` + - ``string`` + - необов'язковий + - + * - **POST** + - ``stream`` + - ``bool`` + - необов'язковий + - + * - **POST** + - ``stream_options`` + - ``object`` + - необов'язковий + - + * - **POST** + - ``temperature`` + - ``float`` + - необов'язковий + - + * - **POST** + - ``top_p`` + - ``float`` + - необов'язковий + - + * - **POST** + - ``tools`` + - ``array`` + - необов'язковий + - + * - **POST** + - ``tool_choice`` + - ``string`` + - необов'язковий + - + * - **POST** + - ``user`` + - ``string`` + - необов'язковий + - + +Відповідь +--------- + +.. list-table:: + :header-rows: 1 + + * - Статус + - Відповідь + * - **200** + - .. code-block:: + + { + "id": "chatcmpl-123", + "object": "chat.completion", + "created": 1677652288, + "model": "gpt-3.5-turbo-0125", + "system_fingerprint": "fp_44709d6fcb", + + "choices": [{ + "index": 0, + "object": "embedding", + "message": { + "role": "assistant", + "content": "\n\nHello there, how may I assist you today?", + }, + "logprobs": null, + "finish_reason": "stop", + }], + + "usage": { + "prompt_tokens": 9, + "completion_tokens": 12, + "total_tokens": 21 + }, + } + + + ``id (string)`` + Унікальний ідентифікатор для завершення чату. + + ``choices (array)`` + Список варіантів завершення чату. Може бути більше одного, якщо ``n`` більше 1. + + ``created (integer)`` + Мітка часу Unix (у секундах), коли було створено завершення чату. + + ``model (string)`` + Модель, що використовується для завершення чату. + + ``system_fingerprint (string)`` + Цей відбиток представляє конфігурацію бекенда, з якою працює модель. + Може використовуватися разом з параметром seed request, щоб зрозуміти, + коли були внесені зміни в бекенд, які можуть вплинути на детермінізм. + + ``object (string)`` + Тип об'єкта, який завжди є ``"chat.completion"``. + + ``usage (object)`` + Статистика використання для запиту на завершення. + +----- + +Інші операції +============= + +Перевірте опис використання, повернутий у :ref:`list_services`, щоб дізнатися, які ще операції підтримуються цим мегасервісом OPEA. + +OPEA Micro Service API +********************** + +OPEA Micro Service є будівельним блоком для побудови будь-яких додатків GenAI. +API мікросервісу OPEA використовується розробниками для побудови мегасервісу OPEA, +як ланцюжок DAG, і є невидимим для кінцевого користувача. + +Embedding Micro Service +======================= + +Мікросервіс використовується для генерації векторного представлення вхідних даних. + +Запит +----- + +.. list-table:: + :header-rows: 1 + + * - Метод + - URL + * - **POST** + - ``/v1/embeddings`` + +.. list-table:: + :header-rows: 1 + + * - Тип + - Параметри + - Значення + - Потрібно + - Опис + * - **POST** + - ``input`` + - ``string`` + - необхідний + - Введіть текст для вбудовування, закодований у вигляді рядка або масиву токенів. + Щоб вбудувати кілька вхідних даних в один запит, передайте масив рядків або масив масивів токенів. + Вхідні дані не повинні перевищувати максимальну кількість вхідних токенів для моделі (8192 токени для text-embedding-ada-002), + не можуть бути порожнім рядком, а будь-який масив повинен мати розмірність 2048 або менше + * - **POST** + - ``model`` + - ``string`` + - необхідний + - Ідентифікатор моделі для використання. + * - **POST** + - ``encoding_format`` + - ``string`` + - необов'язковий + - Формат, у якому потрібно повернути вбудовування. Може бути як ``"float"``, так і ``"base64"``. За замовчуванням - ``"float"``. + * - **POST** + - ``dimensions`` + - ``integer`` + - необов'язковий + - Кількість вимірів, які повинні мати результуючі вихідні вкладення. + * - **POST** + - ``user`` + - ``string`` + - необов'язковий + - Унікальний ідентифікатор, що представляє вашого кінцевого користувача, який може допомогти OpenAI відстежувати та виявляти зловживання. + +Выдповідь +--------- + +.. list-table:: + :header-rows: 1 + + * - Статус + - Відповідь + * - **200** + - .. code-block:: + + { + "object": "list", + "data": [{ + "object": "embedding", + "embedding": [ + 0.0023064255, + -0.009327292, + . . . (1536 floats total for ada-002) + -0.0028842222, + ], + "index": 0 + }], + "model": "text-embedding-ada-002", + "usage": { + "prompt_tokens": 8, + "total_tokens": 8 + }, + } + + + ``embedding (list of float)`` + Векторне представлення для заданих вхідних даних. + * - **405** + - ``{"error": "The request of getting embedding vector fails."}`` + +----- + +Мікросервіс LLM Generation +========================== + +Мікросервіс використовується для надання послуги генерації LLM. + +Запит +----- + +.. list-table:: + :header-rows: 1 + + * - Метод + - URL + * - **POST** + - ``/v1/chat/completions`` + +.. list-table:: + :header-rows: 1 + + * - Тип + - Параметри + - Значення + - Потрібно + - Опис + * - **POST** + - ``message`` + - ``array`` + - необхідний + - Список повідомлень, що складають розмову на даний момент. Приклад коду на Python. + * - **POST** + - ``model`` + - ``string`` + - необхідний + - Ідентифікатор моделі для використання. Детальніше про те, які моделі працюють з API чату, дивіться у таблиці сумісності кінцевих точок моделей. + * - **POST** + - ``frequency_penalty`` + - ``float`` + - необов'язковий + - Число від -2.0 до 2.0. Позитивні значення штрафують нові лексеми на основі їхньої вже наявної частоти в тексті, + зменшуючи ймовірність того, що модель буде дослівно повторювати один і той самий рядок. + * - **POST** + - ``logit_bias`` + - ``map`` + - необов'язковий + - Змінює ймовірність появи вказаних токенів в + завершенні. Приймає JSON-об'єкт, який зіставляє токени (визначені за + ідентифікатором токена в токенізаторі) з відповідним значенням зсуву від -100 до 100. + Математично, зсув додається до логів, згенерованих моделлю + перед вибіркою. Точний ефект залежить від моделі, але значення + від -1 до 1 повинні зменшувати або збільшувати ймовірність відбору; + значення на кшталт -100 або 100 повинні призвести до заборони або виключного відбору + відповідного токена. + * - **POST** + - ``logprobs`` + - ``bool`` + - необов'язковий + - Повертає лог ймовірностей виведених токенів чи ні. Якщо true, + повертає лог ймовірності кожної вихідної лексеми, що повертається у + вмісті повідомлення. + * - **POST** + - ``top_logprobs`` + - ``integer`` + - необов'язковий + - Ціле число від 0 до 20, що вказує кількість найбільш ймовірних токенів + повернеться у кожній позиції токенів, кожна з яких має відповідну лог + ймовірністю. Якщо використовується цей параметр, значення ``logprobs`` має бути рівним true. + * - **POST** + - ``max_tokens`` + - ``integer`` + - необов'язковий + - Максимальна кількість токенів, яку можна згенерувати в чаті + Загальна довжина вхідних токенів та згенерованих токенів + обмежена довжиною контексту моделі. Приклад коду на Python для підрахунку + токенів. + * - **POST** + - ``n`` + - ``integer`` + - необов'язковий + - Скільки варіантів завершення чату генерувати для кожного вхідного повідомлення. Зверніть увагу + що з вас буде стягуватися плата на основі кількості згенерованих токенів за всіма + всіх варіантів. Щоб мінімізувати витрати, залиште n рівним 1. + * - **POST** + - ``presence_penalty`` + - ``float`` + - необов'язковий + - + * - **POST** + - ``response_format`` + - ``object`` + - необов'язковий + - + * - **POST** + - ``seed`` + - ``integer`` + - необов'язковий + - Ця функція знаходиться в бета-версії. Якщо її вказати, наша система докладе максимум зусиль + зробити вибірку детерміновано, так що повторні запити з однаковими + параметрами повинні повертати однаковий результат. Детермінованість не гарантується + гарантується, і вам слід звернутися до параметра ``system_fingerprint`` відповіді + для відстеження змін у бекенді. + * - **POST** + - ``service_tier`` + - ``string`` + - необов'язковий + - Вказує рівень затримки для обробки запиту. Цей + параметр актуальний для клієнтів, які підписані на послугу + послугу. Якщо встановлено значення ``auto``, система використовуватиме кредити на рівні шкали + поки вони не будуть вичерпані. Якщо встановлено значення ``default``, запит буде + буде оброблено з використанням рівня обслуговування за замовчуванням з нижчим рівнем SLA і без + без гарантії затримки. Коли цей параметр задано, тіло відповіді буде + міститиме використаний ``service_tier``. + * - **POST** + - ``stop`` + - ``string`` + - необов'язковий + - До 4 послідовностей, після яких API припиняє генерувати подальші токени. + * - **POST** + - ``stream`` + - ``bool`` + - необов'язковий + - Якщо встановлено, буде надіслано часткові дельти повідомлень, як у ChatGPT. Токени будуть + надсилатимуться як серверні події, що містять лише дані, коли вони стануть доступними, з + потік завершуватиметься повідомленням data: ``[DONE]`` повідомленням. Приклад коду на Python. + * - **POST** + - ``stream_options`` + - ``object`` + - необов'язковий + - Параметри для потокової відповіді. Встановлюйте цей параметр лише тоді, коли ви встановили ``«stream»: «true"``. + * - **POST** + - ``temperature`` + - ``float`` + - необов'язковий + - Яку температуру відбору проб використовувати, від 0 до 2. Вищі значення, наприклад, 0.8 + зроблять результат більш випадковим, тоді як менші значення, наприклад, 0.2, зроблять + його більш цілеспрямованим і детермінованим. Зазвичай ми рекомендуємо змінювати цей параметр або ``top_p``, але не обидва. + * - **POST** + - ``top_p`` + - ``float`` + - необов'язковий + - Альтернатива вибірці за температурою, яка називається вибіркою за ядром, + де модель розглядає результати токенів з ``top_p`` + масою ймовірності. Таким чином, 0.1 означає, що розглядаються тільки токени, що складають верхні 10% імовірнісної + ймовірнісної маси розглядаються тільки токени, що складають верхні 10%. Зазвичай ми рекомендуємо змінювати цей параметр або + ``temperature``, але не обидва. + * - **POST** + - ``tools`` + - ``array`` + - необов'язковий + - Список інструментів, які може викликати модель. Наразі підтримуються лише функції + як інструменти. Використовуйте це, щоб надати список функцій, для яких модель + може генерувати вхідні дані у форматі JSON. Підтримується максимум 128 функцій. + * - **POST** + - ``tool_choice`` + - ``string`` + - необов'язковий + - Контролює, який інструмент (якщо такий є) викликається моделлю. ``«none»`` означає, що модель + не буде викликати жодного інструменту, а натомість згенерує повідомлення. ``«auto»`` означає, що + модель може вибирати між створенням повідомлення та викликом одного або декількох інструментів. + required означає, що модель повинна викликати один або декілька інструментів. Вказівка конкретного + конкретного інструменту через + ``{«type»: «function», “function”: {«name»: «my_function"}}`` змушує + модель викликати цей інструмент. ``«none»`` - значення за замовчуванням, якщо інструменти відсутні. + ``«auto»`` - за замовчуванням, якщо інструменти присутні. + + +Відповідь +--------- + +.. list-table:: + :header-rows: 1 + + * - Статус + - Відповідь + * - **200** + - .. code-block:: + + { + "id": "chatcmpl-123", + "object": "chat.completion", + "created": 1677652288, + "model": "gpt-4o-mini", + "system_fingerprint": "fp_44709d6fcb", + "choices": [{ + "index": 0, + "object": "embedding", + "message": { + "role": "assistant", + "content": "\n\nHello there, how may I assist you today?", + }, + "logprobs": null, + "finish_reason": "stop", + }], + + "usage": { + "prompt_tokens": 9, + "completion_tokens": 12, + "total_tokens": 21 + }, + } + * - **405** + - ``{"error": "The request of LLM generation fails."}`` + +----- + +ASR Micro Service +================= + +Мікросервіс використовується для надання послуги «аудіо в текст». + +Запит +----- + +.. list-table:: + :header-rows: 1 + + * - Метод + - URL + * - **POST** + - ``/v1/asr`` + +.. list-table:: + :header-rows: 1 + + * - Тип + - Параметри + - Значення + - Потрібно + - Опис + * - **POST** + - ``url`` + - ``docarray.AudioUrl`` + - необов'язковий + - Посилання на аудіо. + * - **POST** + - ``model_name_or_path`` + - ``string`` + - необов'язковий + - Модель, що використовується для перекладу з аудіо на текст. + * - **POST** + - ``Language`` + - ``string`` + - необов'язковий + - Мова, яку модель вважає за краще визначати. За замовчуванням ``«auto»``. + +Відповідь +--------- + +.. list-table:: + :header-rows: 1 + + * - Статус + - Сідповідь + * - **200** + - .. code-block:: + + { + "text": string + } + * - **405** + - ``{"error": "The request of ASR fails."}`` + +----- + +RAG Retrieval Micro Service +=========================== + +Мікросервіс використовується для надання послуги пошуку RAG. Зазвичай це відбувається після +вбудовування мікросервісу і перед переранжуванням RAG мікросервісу для створення RAG мега-сервісу. + +Запит +----- + +.. list-table:: + :header-rows: 1 + + * - Метод + - URL + * - **POST** + - ``/v1/rag_retrieval`` + +.. list-table:: + :header-rows: 1 + + * - Тип + - Параметри + - Значення + - Потрібно + - Опис + * - **POST** + - ``text`` + - ``string`` + - необхідний + - Вхідний рядок для запиту. + * - **POST** + - ``embedding`` + - ``list of float`` + - необхідний + - Список float для тексту у вигляді векторного представлення. + +Відповідь +--------- + +.. list-table:: + :header-rows: 1 + + * - Статус + - Відповідь + * - **200** + - .. code-block:: + + { + "retrieved_docs": list of string, + "initial_query": string, + "json_encoders": [{ + "text": "I am the agent of chatbot. What can I do for you?", + }, + ... + ] + } + * - **405** + - ``{"error": "The request of ASR fails."}`` + +----- + +RAG Reranking Micro Service +=========================== + +Мікросервіс використовується для надання послуги RAG-переранжування. Зазвичай це відбувається після +отримання RAG і перед мікросервісом генерації LLM. + +Запит +----- + +.. list-table:: + :header-rows: 1 + + * - Метод + - URL + * - **POST** + - ``/v1/rag_reranking`` + +.. list-table:: + :header-rows: 1 + + * - Тип + - Параметри + - Значення + - Потрібен + - Опис + * - **POST** + - ``retrieved_docs`` + - ``list of string`` + - необхідний + - Документи, які потрібно забрати. + * - **POST** + - ``initial_query`` + - ``string`` + - необхідний + - Рядок для запиту. + * - **POST** + - ``json_encoders`` + - ``list of float`` + - необхідний + - Використаний кодер json. + +Відповідь +--------- + +.. list-table:: + :header-rows: 1 + + * - Статус + - Відповідь + * - **200** + - .. code-block:: + + { + "query": string, + "doc": [{ + "text": "I am the agent of chatbot. What can I do for you?", + }, + ... + ] + } + * - **405** + - ``{"error": "The request of ASR fails."}`` + diff --git a/docs-ua/developer-guides/OPEA_API_Specification_v0.9.docx b/docs-ua/developer-guides/OPEA_API_Specification_v0.9.docx new file mode 100644 index 00000000..36ea849d Binary files /dev/null and b/docs-ua/developer-guides/OPEA_API_Specification_v0.9.docx differ diff --git a/docs-ua/developer-guides/doc_guidelines.rst b/docs-ua/developer-guides/doc_guidelines.rst new file mode 100644 index 00000000..d2c4cd24 --- /dev/null +++ b/docs-ua/developer-guides/doc_guidelines.rst @@ -0,0 +1,866 @@ +.. _doc_guidelines: + +Керівництво з документації +########################## + +Вміст проекту OPEA записується за допомогою мови `markdown`_ (``.md``) з розширеннями `MyST`_ та розмітки `reStructuredText`_, +а також обробляється за допомогою мови `Sphinx`_ для створення відформатованого автономного веб-сайту. Розробники можуть +переглядати цей вміст або у сирому вигляді як файли розмітки ``.md`` і ``.rst``, або зі встановленим +Sphinx вони можуть зібрати документацію за допомогою Makefile (у системах Linux) для створення HTML-контенту. Потім вміст HTML можна +переглянути за допомогою веб-браузера. Ці файли ``.md`` і ``.rst`` зберігаються у +репозиторіях проекту на GitHub і обробляються для створення на сайті +``Документація проекту OPEA``. + +.. Примітка:: Хоча GitHub підтримує перегляд вмісту `.md` і `.rst` за допомогою браузера на сайті `github.com`, + розширення markdown і reST там не розпізнаються, + тому найкращий досвід перегляду - через сайт `Документація проекту OPEA`_ github.io. + +Детальніше про розширення `reStructuredText`_ і `Sphinx`_, а також `markdown`_ і `MyST`_ ви можете прочитати на їхніх відповідних веб-сайтах. + +.. _MyST extensions: https://mystmd.org/guide/quickstart-myst-markdown +.. _Sphinx extensions: https://www.sphinx-doc.org/en/stable/contents.html +.. _reStructuredText: http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html +.. _Sphinx: https://www.sphinx-doc.org +.. _Sphinx Inline Markup: https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html +.. _OPEA Project documentation: https://opea-project.github.io +.. _markdown: https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax + +У цьому документі надається короткий довідник по загальновживаним markdown і reST з директивами і ролями, визначеними MyST і Sphinx, які використовуються для створення документації, яку ви читаєте. + +Markdown проти RestructuredText +******************************* + +І markdown, і ReStructureText (reST) дозволяють створювати окремі файли документації, які GitHub може відображати при перегляді у браузері на github.com. +Markdown популярний завдяки своїй звичності для розробників і є мовою розмітки за замовчуванням для StackOverflow, Reddit, GitHub та інших. +ReStructuredText з'явився у спільноті Python у 2001 році і став відомим за межами цієї спільноти з виходом Sphinx у 2008 році. +Сьогодні reST підтримується GitHub, і великі проекти використовують його для своєї документації, включаючи ядро Linux, OpenCV і LLVM/Clang. + +ReStructuredText є більш повнофункціональною, набагато більш стандартизованою та уніфікованою, а також має вбудовану підтримку розширень. +Мова розмітки не має стандартного способу реалізації повноцінних систем документації і не має стандартного механізму розширень, +що призводить до появи безлічі різних "смаків" розмітки. Якщо ви дотримуєтесь ядра та загального синтаксису розмітки (заголовки, абзаци, списки тощо), +використання розмітки є цілком нормальним. Однак, використання сирого HTML для форматування (наприклад, вирівнювання по центру) +або використання HTML для таблиць створює проблеми при публікації на сайті https://opea-project.github.io. +арсер MyST надає розширення для markdown, які добре інтегруються зі Sphinx, тому ми використовуємо його як місток для вмісту markdown в рамках проекту OPEA. + +У документації OPEA ми використовуємо як файли markdown, так і файли reST для документації "листів". +Ми покладаємося на reST для організації стовбура та гілок документації, використовуючи директиви reST toctree. + +Організація документації +************************ + +Documentation is maintained and updated the same as the project's code within +the opea-project GitHub repos. There are many ``README.md`` files within the various +repos along with the other files for those components. This is good because it +keeps the relevent documentation and code for that component together. + +We use the ``docs`` repo to organize the presentation of all these ``README.md`` +files, along with other project related documents that are maintained in the +``docs`` repo. The root of the generated documentation starts with the +``docs/index.rst`` file that starts off the organizational structure that's +shown as the left navigation in the generated HTML site at +https://opea-project.github.io. That ``index.rst`` file uses a ``toctree`` +directive to point to other documents that may include additional ``toctree`` +directives of their own, ultimately collecting all the content into an +organizational structure you can navigate. + + +Заголовки +********* + +.. tabs:: + + .. group-tab:: reST + + У reST розділи документа ідентифікуються через їхні заголовки, виділені підкресленням під текстом заголовка. + (Хоча reST дозволяє використовувати для позначення заголовків як підкреслення, так і відповідне підкреслення, ми використовуємо для заголовків лише підкреслення). + Для узгодженості в нашій документації ми визначаємо порядок символів, що використовуються для позначення вкладених рівнів у змісті: + + * Використовуй ``#`` для символу підкреслення назви документа (H1) + * Використовуй ``*`` для рівня заголовка першого підрозділу (H2) + * Використовуй ``=`` для рівня заголовків другого підрозділу (H3) + * Використовуй ``-`` для рівня заголовків третього підрозділу (H4) + + Додаткова глибина на рівні заголовка не рекомендується, але якщо це необхідно, + використовуй ``%`` (H5), ``+`` (H6), and ``@`` (H7). + + Підкреслення заголовка має бути щонайменше таким же довгим, як і заголовок, під яким воно знаходиться. + + Ось приклад вкладених рівнів заголовків і відповідних підкреслень для використання: + + .. code-block:: rest + + Document Title heading + ###################### + + Section 1 heading + ***************** + + Section 2 heading + ***************** + + Section 2.1 heading + =================== + + Section 2.1.1 heading + --------------------- + + Section 2.2 heading + =================== + + Section 3 heading + ***************** + + + .. group-tab:: markdown + + У markdown заголовки вказуються у вигляді рядка, що починається з символу ``#`` + з додатковими символами ``#``, що вказують на більш глибокий рівень заголовка + рівень, наприклад, ``#`` для H1 (заголовок), ``##`` для заголовків H2, ``###`` для заголовків H3 + і так далі. + + * Символ ``#`` для заголовка повинен бути першим символом у рядку, потім пробіл, а потім заголовок. Наприклад:: + + # My Document's Title + + Some content goes here. + + ## First H2 heading + + Some more content + + * На початку документа має бути лише один заголовок ``#`` H1, який вказує на назву документа. + * Ви не повинні пропускати рівні заголовків на шляху вниз в ієрархії документа, наприклад, не переходити від H1 ``#`` до H3 ``###`` без проміжного H2 ``##``. + Ви можете пропускати рівні заголовків на зворотному шляху, наприклад, від H4 ``####`` до H2 ``##``, якщо це доречно. + + +Виділення вмісту +**************** + +Кілька поширених прикладів reST і вбудованої розмітки markdown: + +* дода зірка: ``*text*`` для курсиву (*italics*), +* дві зірки: ``**text**`` для виделення (**boldface**) + +.. tabs:: + + .. group-tab:: reST + + * дві зворотні лапки: ````text```` для ``inline code`` зразків. + + Правила ReST для вбудованої розмітки намагаються бути поблажливими, щоб врахувати поширені випадки використання цих позначок. + Наприклад, використання зірочки для позначення множення, наприклад, ``2 * (x + y)`` не буде інтерпретовано як нерозділений курсив. + + .. group-tab:: markdown + + * одні зворотні лапки: ```text``` для `inline code` зразків. + +Для вбудованої розмітки символи між початковим і кінцевим символами не повинні починатися або закінчуватися пробілом, +тому ``*this is italics*``, (*це курсив*) в той час як ``* this isn't*`` (* це не курсив*). + +Якщо зірочка або зворотні лапки з'являються у тексті, що виконується, і їх можна сплутати з розділювачами вбудованої розмітки, +ви можете усунути плутанину, додавши перед ними зворотну косу риску (``\``). + + +Списки +****** + +Для маркованих списків ставте зірочку (``*``) або дефіс (``-``) на початку абзацу і відступайте рядки продовження двома пробілами. + +Перший елемент списку (або підсписку) повинен мати перед собою порожній рядок і відступ на тому ж рівні, що й попередній абзац (але не сам відступ). + +Для нумерованих списків +почніть з ``1.`` or ``a)`` наприклад, і продовжуйте з автонумерацією +користуючись знаком ``#`` и ``.`` або ``)`` як користувалися в першому елементі списку. +Відступайте рядки продовження пробілами для вирівнювання з текстом першого елемента списку: + +.. code-block:: rest + + * Це маркований список. + * Він має два елементи, другий елемент + и має більше ніж одну строку reST тексту. Додаткові строки + з відступом до першого символу тексту маркованого списку. + + 1. Це новий нумерований список. Якби перед ним не було порожнього рядка, він був би продовженням попереднього списку (або абзацу). + #. Він також має два пункти. + + a) Це нумерований список з використанням алфавітних заголовків + #) Він має три елементи (і використовує автонумерацію для решти списку) + #) Ось третій елемент. Використовуйте узгоджену пунктуацію в номері списку. + + #. Це список з автоматичною нумерацією (за замовчуванням використовуються номери, що починаються з 1). + + #. Це список другого рівня під першим елементом (також з автонумерацією). Зверніть увагу на відступи. + #. І другий елемент у вкладеному списку. + #. І другий пункт назад у вміст списку. Порожній рядок не потрібен, але для читабельності він не зашкодить. + +Списки визначень (з одним або кількома термінами та їхніми визначеннями) - це зручний спосіб задокументувати слово або фразу з поясненням. Наприклад, цей вміст reST: + +.. code-block:: rest + + Makefile має цілі, які включають: + + ``html`` + Створити HTML-вивід для проекту + + ``clean`` + Видалити усі згенеровані дані, відновивши папки до чистого стану. + +Буде відображено як: + + Makefile має цілі, які включають: + + html + Створити HTML-вивід для проекту + + clean + Видалити усі згенеровані дані, відновивши папки до чистого стану. + +Багатостовпчикові списки +************************ + +У reST, якщо ви маєте довгий маркований список елементів, де кожен елемент є коротким, +ви можете вказати, що елементи списку слід виводити у декілька стовпчиків за допомогою спеціальної директиви ``... rst-class:: rst-columns``. +Директива буде застосована до наступного елемента, що не містить коментарів (наприклад, абзацу), або до вмісту, відступ якого визначено директивою. +Наприклад, цей невпорядкований список:: + + .. rst-class:: rst-columns + + * A list of + * short items + * that should be + * displayed + * horizontally + * so it doesn't + * use up so much + * space on + * the page + +буде виведено як: + +.. rst-class:: rst-columns + + * A list of + * short items + * that should be + * displayed + * horizontally + * so it doesn't + * use up so much + * space on + * the page + +Якщо ви використовуєте ``rst-columns`` (або ``rst-columns3``), буде показано максимум три стовпчики, а якщо ``rst-columns2`` - два стовпчики. +Кількість відображуваних стовпчиків можна зменшити залежно від доступної ширини вікна відображення, +зменшивши до одного стовпчика на вузьких (телефонних) екранах, якщо це необхідно. + +.. note:: Ми відмовилися від використання директиви ``hlist``, оскільки вона погано працює на невеликих екранах. + +Таблиці +******* + +Існує кілька способів створення таблиць, кожен з яких має свої обмеження або особливості. +`Grid tables +`_ +пропонують найбільше можливостей для визначення об'єднаних рядків і стовпців +(коли вміст охоплює кілька рядків або стовпців, але їх важко підтримувати, оскільки символи сітки мають бути вирівняні по всій таблиці):: + + +------------------------+------------+----------+----------+ + | Header row, column 1 | Header 2 | Header 3 | Header 4 | + | (header rows optional) | | | | + +========================+============+==========+==========+ + | body row 1, column 1 | column 2 | column 3 | column 4 | + +------------------------+------------+----------+----------+ + | body row 2 | ... | ... | you can | + +------------------------+------------+----------+ easily + + | body row 3 with a two column span | ... | span | + +------------------------+------------+----------+ rows + + | body row 4 | ... | ... | too | + +------------------------+------------+----------+----------+ + +Цей приклад буде показано як: + ++------------------------+------------+----------+----------+ +| Header row, column 1 | Header 2 | Header 3 | Header 4 | +| (header rows optional) | | | | ++========================+============+==========+==========+ +| body row 1, column 1 | column 2 | column 3 | column 4 | ++------------------------+------------+----------+----------+ +| body row 2 | ... | ... | you can | ++------------------------+------------+----------+ easily + +| body row 3 with a two column span | ... | span | ++------------------------+------------+----------+ rows + +| body row 4 | ... | ... | too | ++------------------------+------------+----------+----------+ + +Для reST, `List tables +`_ +набагато простіші в обслуговуванні, але не підтримують прольоти між рядами або колонами:: + + .. list-table:: Table title + :widths: 15 20 40 + :header-rows: 1 + + * - Heading 1 + - Heading 2 + - Heading 3 + * - body row 1, column 1 + - body row 1, column 2 + - body row 1, column 3 + * - body row 2, column 1 + - body row 2, column 2 + - body row 2, column 3 + +Цей приклад буде показано як: + +.. list-table:: Table title + :widths: 15 20 40 + :header-rows: 1 + + * - Heading 1 + - Heading 2 + - Heading 3 + * - body row 1, column 1 + - body row 1, column 2 + - body row 1, column 3 + * - body row 2, column 1 + - body row 2, column 2 + - body row 2, column 3 + +Параметр ``:widths:`` дозволяє визначити відносну ширину стовпців. За замовчуванням ширини стовпців однакові. +Якщо ви маєте таблицю з трьома стовпчиками і хочете, щоб перший стовпчик був удвічі меншим за інші два стовпчики однакової ширини, +ви можете вказати ``:widths: 1 2 2``. Якщо ви хочете, щоб браузер встановив ширину стовпців автоматично на основі вмісту стовпців, +ви можете використати ``:widths: auto``. + + +Імена файлів і команди +********************** + +.. tabs:: + + .. group-tab:: reST + + Sphinx розширює reST за рахунок підтримки додаткових елементів вбудованої розмітки (так званих "ролей"), + які використовуються для позначення тексту спеціальними значеннями та увімкнення форматування виводу. + (Повний список можна знайти у документації `Sphinx Inline Markup`_). + + Наприклад, існують ролі для позначення :file:`filenames` (``:file:`name``) і назв команд, таких як :command:`make` (``:command:`make``). + Ви також можете використовувати розмітку \'\'вбудований код\'\' (подвійні зворотні лапки) для позначення ``імені файлу''. + + Не використовуйте елементи в межах однієї зворотної мітки, наприклад, ```word```. Замість цього використовуйте подвійні бектики: ````word````. + + .. group-tab:: markdown + + MyST розширює можливості розмітки, підтримуючи додаткові вбудовані елементи розмітки (так звані "ролі"), + які використовуються для позначення тексту спеціальними значеннями та уможливлюють форматування виводу. + +Посилання на файли в гілці +************************** + +YВи можете додати в документацію посилання на певний файл у дереві GitHub. +Переконайтеся, що посилання вказує на гілку для цієї версії документації. +Наприклад, посилання у версії документації v0.8 має вказувати на файли у гілці v0.8. +Не посилайтеся на файли в головній гілці, оскільки файли в цій гілці можуть змінитися або навіть бути видалені після випуску релізу. + +У reST, щоб зробити такий тип зв'язування файлів можливим, використовуйте спеціальну роль, яка створює гіперпосилання на цей файл у гілці, що перевіряється в даний момент. + +.. Примітка:: Передбачається, що перевірена версія репозиторію **docs**, коли ми генеруємо HTML-документацію, є однаковою тегованою версією для всіх репозиторіїв, на які ми хочемо посилатися. + +Наприклад, посилання GitHub на reST-файл, використаний для створення цього документа, можна створити за допомогою ``:docs_blob:`developer-guides/doc_guidelines``, +яке буде виглядати як :docs_blob:`developer-guides/doc_guidelines.rst``, посилання на файл "blob" у репозиторії GitHub, як це відображається GitHub. +Існує також роль ``:docs_raw:``developer-guides/doc_guidelines.rst``, яка посилатиметься на "сирий" неінтерпретований файл, :docs_raw:``developer-guides/doc_guidelines.rst``. +Перейдіть за цими посиланнями, щоб побачити різницю + +Якщо ви не хочете, щоб у тексті відображався весь шлях до імені файлу, використовуйте звичайну нотацію для визначення тексту посилання, +наприклад, ``:docs_blob:`Guidelines ``` буде показано як просто :docs_blob:`Guidelines `. + +.. _internal-linking: + +Внутрішнє перехресне посилання +****************************** + +.. tabs:: + + .. group-tab:: reST + + Традиційні reST-посилання підтримуються лише в межах поточного файлу за допомогою нотації: + + .. code-block:: rest + + refer to the `internal-linking`_ documentation + + що виводиться як, + + refer to the `internal-linking`_ documentation + + Зверніть увагу, що використання останнього підкреслення вказує на **вихідне посилання**. У цьому + прикладі мітку було додано безпосередньо перед заголовком, тому текст, який + відображається, є текстом самого заголовка. + + За допомогою Sphinx ми можемо створювати посилання на будь-який тегований текст у проєктній документації. + + Розташування елементів у документах визначається за допомогою директиви label: + + .. code-block:: rst + + .. _my label name: + + Зверніть увагу на перше підкреслення, що вказує на **вхідне посилання**. + Вміст безпосередньо після цієї мітки є ціллю для посилання ``:ref:``ім'я моєї мітки`` з будь-якого місця у наборі документації. + Мітку **необхідно** додавати безпосередньо перед заголовком, щоб при посиланні на цю мітку можна було побачити природну фразу (наприклад, текст заголовка). + + Ця директива також використовується для визначення мітки, яка є посиланням на URL-адресу: + + .. code-block:: rest + + .. _Hypervisor Wikipedia Page: + https://en.wikipedia.org/wiki/Hypervisor + + Щоб забезпечити легке перелинковування сторінок на сайті, кожен файл повинен мати мітку посилання перед назвою, щоб на нього можна було посилатися з іншого файлу. + + .. Примітка:: Ці посилання повинні бути унікальними для всього сайту, тому слід уникати загальних назв, таких як "зразки" або "вступ". + + Наприклад, верхня частина файлу ``.rst`` цього документа: + + .. code-block:: rst + + .. _doc_guidelines: + + Documentation Guidelines + ######################## + + Інші ``.rst`` документи можуть посилатися на цей документ за допомогою тегу ``:ref:`doc_guidelines``, і він буде відображатися як :ref:`doc_guidelines`. + Цей тип внутрішніх перехресних посилань працює в декількох файлах. Текст посилання отримується з джерела документа, + тому при зміні заголовка автоматично оновлюється і текст посилання. + + Бувають випадки, коли ви хочете змінити текст посилання, який відображається у створеному документі. + У цьому випадку ви можете вказати альтернативний текст за допомогою ``:ref:`альтернативний текст `` + (відображається як :ref:`альтернативний текст `). + + .. group-tab:: markdown + + Зробити + + + +Не-ASCII символи +**************** + +Ви можете вставляти символи не в кодуванні ASCII, наприклад, символ торговельної марки (|trade|), використовуючи позначення ``|trade|``. +(Також дозволено використовувати символи UTF-8 безпосередньо.) Доступні назви замін визначено у включаємому файлі, який використовується під час обробки reST-файлів у Sphinx. +Назви цих символів-замінників збігаються з тими, що використовуються у HTML-об'єктах для вставки спеціальних символів, таких як \™, і визначені у файлі ``phinx_build/substitutions.txt'', як зазначено тут: + +.. literalinclude:: ../sphinx/substitutions.txt + :language: rst + +Ми залишили невеликий список замін, але ви можете додавати інші за потреби, вносячи зміни до файлу ``substitutions.txt``. + +Включення вмісту з інших файлів + +Ви можете безпосередньо включити фрагмент документа з іншого файлу до вмісту reST або розмітки за допомогою директиви ``include``. + +.. important:: Пам'ятайте, що посилання на вміст у включеному вмісті є відносними відносно файлу, який його включає. + Наприклад, відносне посилання на зображення має бути коректним з точки зору файлу, що включає його, а не з точки зору включеного файлу. + Крім того, файл, що включається, має бути доречним у контексті поточного документа на момент застосування директиви. + Якщо фрагмент документа, що включається, містить структуру розділів, структура заголовків повинна відповідати і бути узгодженою з контекстом. + +.. tabs:: + + .. group-tab:: reST + + У reST ви включаєте вміст з іншого файлу за допомогою директиви include. Якщо не вказано жодних параметрів, включений файл аналізується у контексті поточного документа:: + + Ось деякий текст в документі reST. + + .. include:: path/to/file + + А тепер ми повернемося до вихідного документа після вмісту у включеному файлі, так, ніби цей вміст міститься безпосередньо в поточному файлі. + + Ви можете змінити спосіб обробки включеного файлу за допомогою опцій: + + \:code\: language + Включений вміст розглядається як ``код-блок`` з підсвічуванням ``мови``. + + \:parser\: text + За замовчуванням включений вміст аналізується так само, як і поточний документ (наприклад, rst). Цей параметр вказує інший синтаксичний аналізатор, наприклад ``:parser: myst_parser.sphinx_``, якщо включений файл є розміткою. + + \:start-after\: text + Буде включено лише вміст після першого входження вказаного ``тексту`` у зовнішньому файлі. + + \:end-before\: + Буде включено лише вміст до першого входження вказаного ``тексту`` у зовнішньому файлі. + + Ці та інші опції описано у документації `docutils, що включає директиву `_. + + .. group-tab:: markdown + + Директиви MyST можна використовувати для включення вмісту з іншого файлу в поточний документ так, ніби він є частиною поточного документа:: + + ```{include} relativepath/to/file + ``` + + Параметр ``relativepath/to/file`` починається з ``/``, щоб вказати шлях, який починається з кореня дерева каталогів документів (а не з кореня базової файлової системи). + Ви можете посилатися на файли поза коренем дерева документів, використовуючи синтаксис ``.../.../``, щоб дістатися до файлу. + + Ви можете включити зовнішній файл і показати його як кодовий блок за допомогою директиви ``literalinclude``:: + + ```{literalinclude} relativepath/to/file + ``` + + Ви можете включити вміст reST, інтерпретований як reST, за допомогою директиви ``eval-rst``, використовуючи синтаксис reST та опції директиви ``include``, такі як:: + + ```{eval-rst} + .. include:: path/to-file + :start-after: + :end-before: + ``` + + +Приклади кодів і команд +*********************** + +.. tabs:: + + .. group-tab:: reST + + Використовуйте директиву reST ``code-block`` для створення виділеного блоку тексту фіксованої ширини, + який зазвичай використовується для показу відформатованого коду або консольних команд і виводу. + Підтримується також розумне підсвічування синтаксису (за допомогою пакета Pygments). + Ви також можете безпосередньо вказати мову підсвічування. Наприклад: + + .. code-block:: rest + + .. code-block:: c + + struct _k_object { + char *name; + u8_t perms[CONFIG_MAX_THREAD_BYTES]; + u8_t type; + u8_t flags; + u32_t data; + } __packed; + + Зверніть увагу, що між директивою ``code-block`` і першим рядком тіла кодового блоку є порожній рядок, + а вміст тіла відступається на три пробіли (до першого непустого пробілу імені директиви). + + У цьому прикладі буде показано наступне: + + .. code-block:: c + + struct _k_object { + char *name; + u8_t perms[CONFIG_MAX_THREAD_BYTES]; + u8_t type; + u8_t flags; + u32_t data; + } __packed; + + + Для директиви ``code-block`` можна вказати інші мови, зокрема ``c``, ``python`` і ``rst``, + а також ``console``, ``bash`` або ``hell``. Якщо ви не хочете підсвічування синтаксису, вкажіть ``none``. + Наприклад: + + .. code-block:: rest + + .. code-block:: none + + Цей блок тексту буде стилізовано за допомогою фону та рамки, але без підсвічування синтаксису. + + Буде відображатися як: + + .. code-block:: none + + Цей блок тексту буде стилізовано за допомогою фону та рамки, але без підсвічування синтаксису. + + Існує також скорочення для написання блоків коду: закінчуйте вступний абзац подвійною двокрапкою (``::``) і відступайте вміст блоку коду трьома пробілами. + На виході з'явиться лише одна двокрапка. + + .. Примітка:: Пакет виділення робить найкраще припущення щодо типу контенту в блоці, що може призвести до дивного виділення у згенерованому виводі. + + .. group-tab:: markdown + + У markdown для визначення кодових блоків використовуються огороджені кодові блоки. Використовуйте три + зворотні мітки ``````` в рядках до і після блоку коду, наприклад: + + .. code-block:: none + + ``` + { + "firstName": "John", + "lastName": "Smith", + "age": 25 + } + ``` + + Вивід буде виглядати наступним чином: + + .. code-block:: none + + { + "firstName": "John", + "lastName": "Smith", + "age": 25 + } + + Підсвічування синтаксису також підтримується для огороджених блоків коду, якщо вказати мову поруч із символом лапки перед огородженим блоком коду: + + .. code-block:: none + + ```json + { + "firstName": "John", + "lastName": "Smith", + "age": 25 + } + ``` + + Вивід буде виглядати наступним чином: + + .. code-block:: json + + { + "firstName": "John", + "lastName": "Smith", + "age": 25 + } + + Зробити: додати список підтримуваних мов. + +Зображення +********** + +Ім'я файлу зображення вказується відносно файлу-джерела документа. Ми рекомендуємо розміщувати зображення в папці ``images``, де знаходиться джерело документа. +Підтримуються звичайні формати зображень, які обробляються веб-браузером: JPEG, PNG, GIF і SVG. +Розмір зображення повинен бути настільки великим, наскільки це необхідно, як правило, не менше 500 пікселів у ширину, але не більше 1000 пікселів, + і не більше 250 КБ, якщо тільки для наочності не потрібне особливо велике зображення. + +Ви також можете вказати URL-адресу файлу зображення, якщо це необхідно. + +.. tabs:: + + .. group-tab:: reST + + In reST, images are placed the document using an image directive:: + + .. image:: ../images/opea-horizontal-color-w200.png + :align: center + :alt: alt text for the image + + or if you'd like to add an image caption, use the figure directive:: + + .. figure:: ../images/opea-horizontal-color-w200.png + :alt: image description + + Caption for the figure + + .. group-tab:: markdown + +У markdown, зображення розміщуються в документації з використанням такого синтаксису:: + + ![OPEA Logo](../images/opea-horizontal-color-w200.png) + + + +Табуляція, пробіли та відступи +****************************** + +Відступи є важливими для вмісту reST-файлів, тому бажано використовувати пробіли. +Додатковий відступ може (ненавмисно) змінити спосіб відображення вмісту. +Для списків і директив відступайте текст вмісту до першого непустого пробілу у попередньому рядку. +Наприклад: + +.. code-block:: rest + + * Елемент списку, який охоплює кілька рядків тексту, із зазначенням місця відступу від рядка продовження. + + 1. А для нумерованих елементів списку рядок продовження повинен бути вирівняний з текстом рядка вище. + + .. code-block:: + + Текст у блоці директив має бути вирівняний за першим символом назви директиви. + +Не перевищуйте довжину рядка документації до 80 символів, щоб полегшити її перегляд на GitHub. +Довгі рядки через посилання на URL-адреси є дозволеним винятком. + +Кольори фону +************ + +Ми визначили деякі стилі CSS для використання у якості кольорів фону для абзаців. +Ці стилі можна застосувати за допомогою директиви ``...rst-class`` з використанням однієї з цих назв стилів. +Ви також можете використовувати визначений стиль ``centered`` для розміщення тексту по центру елемента, +корисний для центрування тексту у комірці таблиці або діапазоні стовпців: + +.. rst-class:: bg-opea-lightorange centered + + \.\. rst-class:: bg-opea-lightorange centered + +.. rst-class:: bg-opea-darkorange centered + + \.\. rst-class:: bg-opea-darkorange centered + +Креслення +********* + +.. tabs:: + + .. group-tab:: reST + + У reST ми включили розширення ``graphviz`` Sphinx, щоб дозволити цій мові опису тексту відтворювати малюнки. + Докладнішу інформацію наведено на сторінці :ref:`graphviz-examples`.. + + Ми також включили розширення з підтримкою ``mermaid``, яке також дозволяє цій мові опису тексту відтворювати малюнки за допомогою:: + + .. mermaid:: + + graph LR; + A--> B & C; + B--> A & C; + C--> A & B; + + Це буде відображено на цьому графічному малюнку: + + .. mermaid:: + + graph LR; + A--> B & C; + B--> A & C; + C--> A & B; + + Для отримання додаткової інформації див. `Посібник користувача Mermaid `_. + + .. group-tab:: markdown + + У markdown ми включили розширення MyST ``mermaid``, щоб увімкнути цю текстову + мову опису тексту для відображення креслень за допомогою:: + + ```{mermaid} + graph LR; + A--> B & C & D; + B--> A & E; + C--> A & E; + D--> A & E; + E--> B & C & D; + ``` + + Це буде відображено на цьому графічному малюнку: + + .. mermaid:: + + graph LR; + A--> B & C & D; + B--> A & E; + C--> A & E; + D--> A & E; + E--> B & C & D; + + Для отримання додаткової інформації див. `Посібник користувача Mermaid `_. + +Альтернативний вміст вкладок +**************************** + +У ResST замість того, щоб створювати кілька документів зі спільним матеріалом, за винятком деяких специфічних розділів, +ви можете написати один документ і надати читачеві альтернативний контент за допомогою інтерфейсу з вкладками. +Коли читач натискає на вкладку, відображається вміст цієї вкладки. Наприклад:: + + .. tabs:: + + .. tab:: Apples + + Apples are green, or sometimes red. + + .. tab:: Pears + + Pears are green. + + .. tab:: Oranges + + Oranges are orange. + +відобразиться як: + +.. tabs:: + + .. tab:: Apples + + Apples are green, or sometimes red. + + .. tab:: Pears + + Pears are green. + + .. tab:: Oranges + + Oranges are orange. + +Вкладки можна також згрупувати так, щоб зміна поточної вкладки в одній області змінювала всі однойменні вкладки на всій сторінці. Наприклад: + +.. tabs:: + + .. group-tab:: Linux + + Linux Line 1 + + .. group-tab:: macOS + + macOS Line 1 + + .. group-tab:: Windows + + Windows Line 1 + +.. tabs:: + + .. group-tab:: Linux + + Linux Line 2 + + .. group-tab:: macOS + + macOS Line 2 + + .. group-tab:: Windows + + Windows Line 2 + +В останньому випадку ми використовуємо директиву ``... group-tab::`` замість +директиву ``.. tab::``. Під капотом ми використовуємо розширення `phinx-tabs +`_ розширення, яке включено +у файлі OPEA docs (requirements.txt). У межах вкладки ви можете мати майже будь-який вміст +будь-який вміст *крім заголовка* (кодові блоки, впорядковані та невпорядковані +списки, зображення, абзаци тощо). + +Кроки інструкції +**************** + +У reST стиль нумерованих кроків інструкцій дозволяє легко створювати посібники з чітко визначеними кроками. +Додайте директиву ``...rst-class:: numbered-step`` безпосередньо перед заголовком другого рівня +(за правилами проекту, заголовком, підкресленим зірочками ``******``), і він буде показаний як нумерований крок, послідовно пронумерований у документі. +(Заголовки другого рівня без цієї директиви ``rst-class`` не нумеруватимуться). +Наприклад:: + + .. rst-class:: numbered-step + + Put your right hand in + ********************** + +.. rst-class:: numbered-step + +Перший крок інструкції +********************** + +Це перший крок інструкції. Ви можете використовувати звичайні абзаци та малюнки, як ви використовуєте при написанні звичайних документів. +Напишіть заголовок, який має бути коротким викладом суті кроку (нумерація кроків автоматизована, тому ви можете легко переміщатися по кроках, якщо це необхідно). + +.. rst-class:: numbered-step + +Другий крок інструкції +********************** + +Це другий крок інструкції. + +.. Примітка:: Як реалізовано, для кожного документа передбачено лише один набір пронумерованих кроків, і ці кроки мають бути заголовками 2-го рівня. + + +Створення документації +********************** + +Для отримання інструкцій щодо створення документації дивиться :ref:`opea_doc_generation`. diff --git a/docs-ua/developer-guides/docbuild.rst b/docs-ua/developer-guides/docbuild.rst new file mode 100644 index 00000000..4a345bbb --- /dev/null +++ b/docs-ua/developer-guides/docbuild.rst @@ -0,0 +1,332 @@ +.. _opea_doc_generation: + +Створення документації OPEA +########################### + +Ці інструкції допоможуть вам створити проектну документацію OPEA та опублікувати її на сайті https://opea-project.github.io. +Ви також можете використовувати ці інструкції для створення документації OPEA у вашій локальній системі. + +.. contents:: + :local: + :depth: 1 + +Огляд документації +****************** + +Вміст проекту OPEA написаний з використанням комбінації мов розмітки markdown (``.md``) і reStructuredText (``.rst``) (з розширеннями Sphinx), +і оброблений за допомогою Sphinx для створення відформатованого автономного веб-сайту. +Розробники можуть переглядати цей вміст або в необробленому вигляді у вигляді файлів розмітки .rst, +або ви можете згенерувати HTML-вміст і переглянути його за допомогою веб-браузера безпосередньо на своїй робочій станції. +Найкращий досвід читання - це перегляд згенерованого HTML на сайті https://opea-project.github.io. + +Детальніше про `markdown`_, `reStructuredText`_ та `Sphinx`_ ви можете прочитати на їхніх відповідних сайтах. + +Документація проекту містить наступні пункти: + +* Вихідні файли ReStructuredText і markdown, що використовуються для створення документації, можна знайти на + https://opea-project.github.io. Всі джерела документації + знаходяться у репозиторіях ``github.com/opea-project``, вкорінених у репозиторії ``docs``. + Також документація міститься у репозиторіях, де підтримується код проекту: ``GenAIComps``, ``GenAIEval``, ``GenAIExamples`` і ``GenAIInfra``. + +.. graphviz:: images/doc-gen-flow.dot + :align: center + :caption: Documentation Generation Flow + + +Налаштування робочих папок документації +*************************************** + +Вам потрібно встановити ``git``, щоб налаштувати робочі папки: + +* Для системи розробки Ubuntu використовуйте: + + .. code-block:: bash + + sudo apt install git + +Ось рекомендоване налаштування папок для внесків та генерації документації: +батьківська папка з назвою ``opea-project`` містить шість локально клонованих репозиторіїв з opea-project. +Ви можете використати іншу назву для батьківської теки, але процес збірки документації передбачає, +що назви сховищ будуть такими, як показано тут: + +.. code-block:: none + + opea-project + ├── docs + ├── GenAIComps + ├── GenAIEval + ├── GenAIExamples + ├── GenAIInfra + ├── opea-project.github.io + +Батьківська папка ``opea-project`` призначена для організації клонованих репозиторіїв з проекту. +Якщо у вас є права на публікацію репозиторію, ми також клонуємо репозиторій публікації opea-project.github.io пізніше в цих кроках. + +На наступних кроках ви створите вилку всіх репозиторіїв проекту OPEA, необхідних для створення документації, у вашому особистому акаунті GitHub, +клонуєте вашу особисту вилку на ваш локальний комп'ютер для розробки, а потім прив'яжете її до висхідного репозиторію. +Вам потрібно буде зробити це лише один раз, щоб налаштувати структуру папок: + +#. За допомогою браузера перейдіть на https://github.com/opea-project і зробіть форк репозиторію **docs** до вашого особистого акаунта на GitHub. + + .. image:: images/opea-docs-fork.png + :align: center + :class: drop-shadow + +#. У командному рядку створіть робочу папку на вашому комп'ютері для розробки та + клонуйте ваше персональний репозиторій ``docs``: + + .. code-block:: bash + + cd ~ + mkdir opea-project && cd opea-project + git clone https://github.com//docs.git + +#. Для клонованого локального репозиторію повідомте git про попередній репозиторій: + + .. code-block:: bash + + cd docs + git remote add upstream https://github.com/opea-project/docs.git + + Після цього у вас з'явиться ``origin``, що вказує на ваш клонований особистий репозиторій, і ``upstream``, що вказує на репозиторій проєкту. + +#. Виконайте ті ж самі дії (розгалуження на ваш особистий акаунт, клонування на локальний комп'ютер і налаштування віддаленого доступу до git'а) для інших репозиторіїв, + що містять документацію проекту, замінивши назву репозиторію docs.git у попередньому кроці на відповідну назву репозиторію у цьому переліку: + + * GenAIComps + * GenAIEval + * GenAIExamples + * GenAIInfra + + +#. Якщо ви ще не зробили цього, обов'язково налаштуйте git з вашим ім'ям та адресою електронної пошти для рядка ``Підписано: by`` у ваших повідомленнях про комміти.: + + .. code-block:: bash + + git config --global user.name "David Developer" + git config --global user.email "david.developer@company.com" + +Встановлення інструментів для документування +******************************************** + +Наша обробка документації була протестована для роботи з Python 3.8.10 і новіших версій, а також з цими іншими інструментами: + +* sphinx version: 7.3.0 +* docutils version: 0.20 +* sphinx-rtd-theme version: 2.0.0 +* sphinx-tabs version: 3.4.5 +* myst-parser version: 3.0.1 +* sphinxcontrib-mermaid version: 0.9.2 +* pymarkdownlnt version: 0.9.21 + +Залежно від версії Linux, встановіть необхідні інструменти. +Вам слід розглянути можливість використання інструментів `Python virtual environment`_, +щоб захистити ваше середовище Python від змін, спричинених іншими роботами на вашому комп'ютері. + +.. _Python virtual environment: https://https://docs.python.org/3/library/venv.html + +Для Ubuntu використовуйте: + +.. code-block:: bash + + sudo apt install python3-pip python3-wheel make graphviz + +Потім за допомогою ``pip3`` встановіть решту інструментів на основі Python, зазначених у файлі ``cripts/requirements.txt``. + +.. code-block:: bash + + cd ~/opea-project/docs + pip3 install --user -r scripts/requirements.txt + +Використовуйте цю команду, щоб додати ``$HOME/.local/bin`` до початку вашого ``PATH``, +щоб система знайшла очікувані версії таких утиліт Python, +як ``phinx-build`` (попередньо перевірте, чи ця тека вже є у вашому шляху): + +.. code-block:: bash + + printf "\nexport PATH=\$HOME/.local/bin:\$PATH" >> ~/.bashrc + +.. important:: + + Щоб ця зміна набула чинності, вам потрібно буде відкрити новий термінал. Додавання цього параметра до файлу ``~/.bashrc`` гарантує, що його буде встановлено за замовчуванням. + +Після цього ви готові до створення документації. + +.. Примітка:: + + Ми надали скрипт у репозиторії docs, який ви можете запустити, щоб побачити, + які версії інструментів для створення документації встановлено, + і порівняти їх з версіями інструментів, показаними вище. Цей інструмент також перевірить, + чи ви використовуєте версії інструментів, які, як відомо, працюють разом:: + + docs/scripts/show-versions.py + + наприклад: + + .. code-block:: console + + ~/opea-project/docs$ scripts/show-versions.py + + doc build tool versions found on your system per /home/david/opea-project/docs/scripts/requirements.txt... + + sphinx version: 7.3.0 + docutils version: 0.20 + sphinx-rtd-theme version: 2.0.0 + sphinx-tabs version: 3.4.5 + myst-parser version: 3.0.1 + sphinx-md version: 0.0.3 + sphinxcontrib-mermaid version: 0.9.2 + pymarkdownlnt version: 0.9.21 + +Тема презентації документації +***************************** + +Sphinx підтримує просту настройку зовнішнього вигляду створеної HTML-документації за допомогою тем. +Тема ``phinx-rtd-theme`` (Read The Docs) встановлюється як частина списку ``requirements.txt`` вище. +Налаштування стандартного вигляду ``read-the-docs`` додаються за допомогою CSS і JavaScript, які можна знайти у ``doc/_static``, +а також перевизначення шаблонів теми, які можна знайти у ``doc/_templates``. +Якщо ви перейдете на іншу тему, вам доведеться змінити ці налаштування, а це не для людей зі слабкими нервами. + +Система збирання Sphinx створює інформацію кешу документів, яка намагається прискорити відновлення документації, +але іноді може спричинити появу несподіваної помилки або попередження. +Виконання ``make clean`` для створення чистого середовища збирання і повторне виконання ``make html`` зазвичай виправляє ці проблеми. + + +Запущення процесорів документації +********************************* + +Папка ``docs`` (з усіма клонованими репозиторіями) містить усі вихідні файли doc, зображення, додаткові інструменти та +``Makefile`` для створення локальної копії технічної документації OPEA. Найкраще починати з чистого середовища збірки документації, +тому скористайтеся ``make clean``, щоб вилучити робочу теку ``_build``, якщо вона існує. +За допомогою ``makefile`` створюється папка ``_build`` (якщо вона не існує) і копіюються всі необхідні файли з цих клонованих сховищ до робочої папки ``_build/rst``. + +.. code-block:: bash + + cd ~/opea-project/docs + make clean + make html + +Залежно від вашої системи розробки, збір і генерація HTML-контенту займе менше хвилини. +Після завершення ви можете переглянути вихідні дані HTML у файлі ``~/opea-project/docs/_build/html/index.html``. + +Для зручності існує ціль make, яка буде ``cd`` до папки ``_build/html`` і запустить локальний веб-сервер Python: + +.. code-block:: bash + + make server + +і відкрийте URL-адресу за допомогою веб-браузера: ``http://localhost:8000``. +Після цього натисніть :kbd:`ctrl-C` у вікні командного рядка, щоб зупинити веб-сервер. + +Опублікування вмісту +******************** + +Якщо у вас є права на об'єднання в репозиторій opea-project під назвою ``opea-project.github.io``, +ви можете оновити загальнодоступну документацію проекту, яку можна знайти за адресою https://opea-project.github.io. + +Вам потрібно буде зробити одноразовий клон висхідного репозиторію (ми публікуємо безпосередньо в висхідний репозиторій, а не в особисту форковану копію): + +.. code-block:: bash + + cd ~/opea-project + git clone https://github.com/opea-project/opea-project.github.io.git + +Після того, як ви переконалися, що згенерований HTML, створений за допомогою ``make html``, виглядає добре, ви можете відправляти його на сайт для публікації: + +.. code-block:: bash + + make publish + +Він використовує команди git для синхронізації нового контенту з уже опублікованим і видаляє файли з папки **latest** репозиторію публікації, які більше не потрібні. +Нові або змінені файли з новоствореного HTML-контенту переміщуються до репозиторію публікацій сторінок GitHub. +Загальнодоступний сайт за адресою https://opea-project.github.io буде автоматично оновлений системою `GitHub pages `_, +зазвичай протягом декількох хвилин. + + +Керування версіями документів +***************************** + +На сайті https://opea-project.github.io у верхній частині лівої навігаційної панелі є селектор версій документів. +Вміст цього перемикача версій визначається у конфігураційному файлі ``conf.py`` сфінкса, а саме приблизно так: + +.. code-block:: python + :emphasize-lines: 5-6 + + html_context = { + 'current_version': current_version, + 'docs_title': docs_title, + 'is_release': is_release, + 'versions': ( ("latest", "/latest/"), + ("0.8", "/0.8/"), + ("0.7", "/0.7/"), + ) + } + + +У міру додавання нових версій документації OPEA, як правило, при випуску нового релізу, оновлюйте цей список вибору "версій", +щоб включити номер версії та папку публікації. Зауважте, що не існує прямого вибору для переходу до новішої версії зі старішої, без попереднього переходу до "найновішої". + +За замовчуванням, збірка і публікація документації передбачають, що ми створюємо документацію для головної гілки +і публікуємо її у розділі ``/latest/`` на https://opea-project.github.io. +Якщо ми створюємо документацію для тегованої версії (наприклад, 0.8), перевірте цю версію у **всіх** сховищах компонентів і додайте кілька додаткових прапорів до команд ``make``: + +.. code-block:: bash + + version=0.8 + for d in docs GenAIComps GenAIExamples GenAIEval GenAIInfra ; do + cd ~/opea-project/$d + git checkout $version + done + + cd ~/opea-project/docs + make clean + make DOC_TAG=release RELEASE=$version html + make DOC_TAG=release RELEASE=$version publish + +.. _filter_expected: + +Фільтрувати очікувані попередження +********************************** + +На жаль, є деякі відомі проблеми з обробкою Sphinx, які генерують попередження. Ми додали фільтр постобробки на виході процесу збирання документації, +щоб перевірити наявність "очікуваних" попереджень у згенерованому виводі журналу. Таким чином, буде повідомлено лише про "неочікувані" повідомлення, +які призведуть до збою у процесі збирання з повідомленням: + +.. code-block:: console + + New errors/warnings found, please fix them: + +за якими слідують повідомлення, яких не очікувалося. Зверніть увагу, що імена файлів, показані у повідомленнях про помилки/попередження, +стосуються файлів з теки ``_build/rst`` (скопійованих з репозиторіїв). Наприклад, + +.. code-block:: console + + New errors/warnings found, please fix them: + ============================================== + + /home/david/opea-project/docs/_build/rst/GenAIInfra/kubernetes-addons/Observability/README.md:5: WARNING: Non-consecutive header level increase; H1 to H4 [myst.header] + /home/david/opea-project/docs/_build/rst/GenAIInfra/kubernetes-addons/Observability/README.md:111: WARNING: Non-consecutive header level increase; H3 to H6 [myst.header] + +Для файлів, скопійованих з репозиторіїв, відмінних від репозиторію docs, ви побачите назву репозиторію +у шляху до файлу, наприклад, ``_build/rst/GenAIInfra`` зі шляхом до +конкретного файлу з проблемою. Наприклад, попередження, показані тут, вказують на +проблему на рівні заголовків у рядках 5 і 111 у файлі +``GenAIInfra/kubernetes-addons/Observability/README.md``. + +Якщо ви зробите ``make html`` без попереднього виконання ``make clean``, можуть залишитися файли з попередньої збірки, +які можуть спричинити появу деяких несподіваних повідомлень. + +Якщо всі повідомлення було відфільтровано, процес збирання завершиться успішно, повідомивши: + +.. code-block:: console + + No new errors/warnings. + +Вихідні дані збірки Sphinx обробляються скриптом Python ``scripts/filter-known-issues.py`` разом з набором файлів конфігурації фільтрів у теці ``.known-issues``. +(Ця фільтрація виконується як частина ``Makefile``). + +Ви можете змінити фільтрацію, додавши або відредагувавши conf-файл у папці ``.known-issues``, слідуючи прикладам, наведеним у ньому. + +.. _reStructuredText: https://sphinx-doc.org/rest.html +.. _markdown: https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax +.. _Sphinx: https://sphinx-doc.org/ diff --git a/docs-ua/developer-guides/graphviz.rst b/docs-ua/developer-guides/graphviz.rst new file mode 100644 index 00000000..f2e18853 --- /dev/null +++ b/docs-ua/developer-guides/graphviz.rst @@ -0,0 +1,115 @@ +.. _graphviz-examples: + +Креслення за допомогою Graphviz +############################### + +Ми підтримуємо використання розширення Sphinx `Graphviz`_ для створення простих графіків і лінійних малюнків за допомогою крапкової мови. +Перевага використання Graphviz для креслень полягає в тому, що джерелом для креслення є текстовий файл, +який можна редагувати і зберігати в репозиторії разом з документацією. + +.. _graphviz extension: http://graphviz.gitlab.io + +Ці вихідні ``.dot`` файли зазвичай зберігаються окремо від самого документа і включаються за допомогою директиви Graphviz: + +.. code-block:: none + + .. graphviz:: images/boot-flow.dot + :name: boot-flow-example + :align: center + :caption: Hypervisor Boot Flow + +де файл boot-flow.dot містить команди малювання: + +.. literalinclude:: images/boot-flow.dot + +і згенерований вивід матиме вигляд: + +.. graphviz:: images/boot-flow.dot + :name: boot-flow-example + :align: center + :caption: Hypervisor Boot Flow + + +Давайте розглянемо ще кілька прикладів, а потім більш детально поговоримо про мову крапок і параметри малювання. + +Простий орієнтовний граф +************************ + +Для простих малюнків з фігурами та лініями ви можете помістити команди Graphviz у блок вмісту директиви. +Наприклад, для простого орієнтованого графа (диграфа) з двома вершинами, з'єднаними стрілкою, можна написати: + + +.. code-block:: none + + .. graphviz:: + + digraph { + "a" -> "b" + } + +і отримаєте цей малюнок: + +.. graphviz:: + + digraph { + "a" -> "b" + } + + +Ви можете змінити наступні атрибути: + +* Розташування графіків (зверху вниз і зліва направо) +* Форми вузлів (прямокутники, кола, будинки, зірки тощо) +* Стиль (заповнений, закруглений) +* Кольори +* Текст, що відображається у вузлі +* Розміщення отриманого зображення на сторінці (по центру) + +Приклад: + +.. literalinclude:: images/circle-square.dot + +.. graphviz:: images/circle-square.dot + :align: center + +Ви можете використовувати `стандартні назви кольорів HTML`_ або використовувати значення RGB для кольорів, як показано нижче. + +.. _standard HTML color names: + https://www.w3schools.com/colors/colors_hex.asp + +Додавання крайових міток +************************ + +Ось приклад креслення з підписами на ребрах (стрілками) між вузлами. Ми також покажемо, як змінити атрибути за замовчуванням для всіх вершин і ребер у цьому графі: + +.. literalinclude:: images/node-shape-edges.dot + +.. graphviz:: images/node-shape-edges.dot + :align: center + +Таблиці +******* + +Для вузлів з атрибутом форми ``record`` текст мітки +представлено у форматі таблиці: вертикальна риска ``|`` починає новий рядок або +стовпець, а фігурні дужки ``{ ... }`` задають новий рядок (якщо ви знаходитесь у +стовпця) або новий стовпець (якщо ви знаходитесь у рядку). Наприклад: + +.. literalinclude:: images/record.dot + +.. graphviz:: images/record.dot + :align: center + +Зверніть увагу, що ви також можете вказати горизонтальне вирівнювання тексту +за допомогою екранованих послідовностей ``\n``, ``\l`` і ``\r``, +які розділяють мітку на рядки, вирівняні по центру, по лівому краю і по правому краю відповідно. + +Закінчений стан машини +********************** + +Ось приклад використання Graphviz для визначення закінченого стану машини для перекачування газу: + +.. literalinclude:: images/gaspump.dot + +.. graphviz:: images/gaspump.dot + :align: center diff --git a/docs-ua/developer-guides/images/boot-flow.dot b/docs-ua/developer-guides/images/boot-flow.dot new file mode 100644 index 00000000..d65c82a5 --- /dev/null +++ b/docs-ua/developer-guides/images/boot-flow.dot @@ -0,0 +1,6 @@ +digraph G { + rankdir=LR; + bgcolor="transparent"; + UEFI -> "acrn.efi" -> "OS\nBootloader" -> + "SOS\nKernel" -> "ACRN\nDevice Model" -> "Virtual\nBootloader"; +} diff --git a/docs-ua/developer-guides/images/circle-square.dot b/docs-ua/developer-guides/images/circle-square.dot new file mode 100644 index 00000000..c81a2a3e --- /dev/null +++ b/docs-ua/developer-guides/images/circle-square.dot @@ -0,0 +1,9 @@ +digraph { + bgcolor="transparent"; rankdir=LR; + { a [shape=circle height="1" style=filled color=AntiqueWhite + label="Circle\nLabel"] + b [shape=box height="1" width="1" style="rounded,filled" + color="#F080F0" label="Square\nLabel"] + } + a -> b +} diff --git a/docs-ua/developer-guides/images/doc-gen-flow.dot b/docs-ua/developer-guides/images/doc-gen-flow.dot new file mode 100644 index 00000000..4e7fb3aa --- /dev/null +++ b/docs-ua/developer-guides/images/doc-gen-flow.dot @@ -0,0 +1,20 @@ +# Doc Generation flow +# dot -Tpng -odoc-gen-flow.png doc-gen-flow.dot + +digraph docgen { + node [ fontname="verdana"] + bgcolor=transparent; rankdir=LR; + rst [shape="rectangle" label="restructuredText\nfiles"] + md [shape="rectangle" label="markdown\nfiles"] + images [shape="rectangle" label=".png, .jpg\nimages"] + conf [shape="rectangle" label="conf.py\nconfiguration"] + rtd [shape="rectangle" label="read-the-docs\ntheme"] + html [shape="rectangle" label="HTML\nweb site"] + sphinx[shape="ellipse" label="sphinx +\ndocutils"] + images -> sphinx + rst -> sphinx + md -> sphinx + conf -> sphinx + rtd -> sphinx + sphinx -> html + } diff --git a/docs-ua/developer-guides/images/gaspump.dot b/docs-ua/developer-guides/images/gaspump.dot new file mode 100644 index 00000000..389823b0 --- /dev/null +++ b/docs-ua/developer-guides/images/gaspump.dot @@ -0,0 +1,11 @@ +digraph gaspump { + rankdir=LR; + node [shape = circle;]; + edge [color = grey; fontsize=10]; + S0 -> S1 [ label = "Lift Nozzle" ] + S1 -> S0 [ label = "Replace Nozzle" ] + S1 -> S2 [ label = "Authorize Pump" ] + S2 -> S0 [ label = "Replace Nozzle" ] + S2 -> S3 [ label = "Pull Trigger" ] + S3 -> S2 [ label = "Release Trigger" ] +} diff --git a/docs-ua/developer-guides/images/node-shape-edges.dot b/docs-ua/developer-guides/images/node-shape-edges.dot new file mode 100644 index 00000000..ee59858a --- /dev/null +++ b/docs-ua/developer-guides/images/node-shape-edges.dot @@ -0,0 +1,8 @@ +digraph { + bgcolor=transparent; rankdir=LR; + node [shape="rectangle" style="filled" color="lightblue"] + edge [fontsize="12" fontcolor="grey"] + + "acrnprobe" -> "telemetrics-client" [label="crashlog\npath"] + "telemetrics-client" -> "backend" [label="log\ncontent"] +} diff --git a/docs-ua/developer-guides/images/opea-docs-fork.png b/docs-ua/developer-guides/images/opea-docs-fork.png new file mode 100755 index 00000000..44b552ab Binary files /dev/null and b/docs-ua/developer-guides/images/opea-docs-fork.png differ diff --git a/docs-ua/developer-guides/images/record.dot b/docs-ua/developer-guides/images/record.dot new file mode 100644 index 00000000..35796d4b --- /dev/null +++ b/docs-ua/developer-guides/images/record.dot @@ -0,0 +1,4 @@ +digraph { + a [shape=record label="left | {above|middle|below} | right"] + b [shape=record label="{row1\l|row2\r|{row3\nleft|row3\nright}|row4}"] +} diff --git a/docs-ua/developer-guides/images/trusty-boot-flow.dot b/docs-ua/developer-guides/images/trusty-boot-flow.dot new file mode 100644 index 00000000..7f9b7a91 --- /dev/null +++ b/docs-ua/developer-guides/images/trusty-boot-flow.dot @@ -0,0 +1,11 @@ +digraph G { + rankdir=LR; + rank=same; + bgcolor="transparent"; + uservml1 [label="User VM OS\nBootloader"] + acrn_init [shape=box style="rounded,filled" label="ACRN"] + acrn_switch [shape=box style="rounded,filled" label="ACRN"] + uservml2 [label="User VM OS\nBootloader"] + uservml1 -> acrn_init -> "Trusty" -> acrn_switch -> uservml2; +} + diff --git a/docs-ua/developer-guides/index.rst b/docs-ua/developer-guides/index.rst new file mode 100644 index 00000000..ca9ff9a3 --- /dev/null +++ b/docs-ua/developer-guides/index.rst @@ -0,0 +1,25 @@ +.. _developer_guides: + +Посібники для розробників +######################### + +Посібники з кодування +********************* + +.. toctree:: + :maxdepth: 1 + + OPEA_API + + + +Посібники з документації +************************ + +.. toctree:: + :maxdepth: 1 + + doc_guidelines + graphviz + docbuild + diff --git a/docs-ua/eval/index.rst b/docs-ua/eval/index.rst new file mode 100644 index 00000000..d06a6e1a --- /dev/null +++ b/docs-ua/eval/index.rst @@ -0,0 +1,17 @@ +.. _GenAIEval: + +Оцінювання GenAI +################ + +GenAIEval забезпечує оцінку, бенчмарк, оціночну картку та таргетування продуктивності за показниками пропускної здатності та затримки, точності за популярними оціночними харнерами, безпечності та галюцинаційності. + +Ми створюємо цю документацію на основі вмісту в +:GenAIEval_blob:`GenAIEval` репозиторію GitHub. + +.. toctree:: + :maxdepth: 1 + :glob: + + /GenAIEval/README + /GenAIEval/* + /GenAIEval/**/* diff --git a/docs-ua/examples/ChatQnA/ChatQnA_Guide.rst b/docs-ua/examples/ChatQnA/ChatQnA_Guide.rst new file mode 100644 index 00000000..233961ad --- /dev/null +++ b/docs-ua/examples/ChatQnA/ChatQnA_Guide.rst @@ -0,0 +1,386 @@ +.. _ChatQnA_Guide: + +Зразковий посібник з ChatQnA +############################ + +.. Примітка:: Цей посібник знаходиться на ранній стадії розробки і є робочим документом з вмістом заповнювачів. + +Огляд +***** + +Чат-боти - це широко розповсюджений варіант використання потужних можливостей чату і +міркувань великих мовних моделей (LLM). Приклад ChatQnA є відправною точкою для початку роботи розробників у просторі GenAI. +Вважайте, що це «hello world» додатків GenAI, який можна використовувати для +рішень для широких корпоративних вертикалей, як внутрішніх, так і зовнішніх. + +Ціль +**** + +У прикладі ChatQnA використовується архітектура розширеного пошуку (RAG), +яка швидко стає галузевим стандартом для розробки чат-ботів. Вона +поєднує переваги бази знань (через векторне сховище) і генеративних +моделей, щоб зменшити кількість галюцинацій, підтримувати актуальність інформації та використовувати специфічні знання про предметну область. + +RAG заповнює прогалину в знаннях, динамічно отримуючи відповідну інформацію із +зовнішніх джерел, гарантуючи, що відповіді, які генеруються, залишаються фактичними та актуальними. +Ядром цієї архітектури є векторні бази даних, які допомагають +ефективного та семантичного пошуку інформації. Ці бази даних зберігають +дані у вигляді векторів, що дозволяє RAG швидко отримувати доступ до найбільш релевантних документів або +даних на основі семантичної подібності. + +Центральним елементом архітектури RAG є використання генеративної моделі, яка +відповідає за генерацію відповідей на запити користувачів. Генеративна модель +навчається на великому масиві персоналізованих і релевантних текстових даних і здатна +генерувати відповіді, схожі на людські. Розробники можуть легко замінити генеративну +модель або векторну базу даних на власні кастомні моделі або бази даних. Це дозволяє +розробникам створювати чат-ботів, пристосованих до їхніх конкретних сценаріїв використання та +вимог. Поєднуючи генеративну модель з векторною базою даних, RAG +може надавати точні та контекстно-релевантні відповіді на запити ваших користувачів. + +Приклад ChatQnA розроблено як просту, але потужну демонстрацію +архітектури RAG. Це чудова відправна точка для розробників, які прагнуть +створити чат-ботів, які можуть надавати користувачам точну та актуальну інформацію. + +Щоб полегшити спільний доступ до окремих сервісів між декількома додатками GenAI, використовуйте GenAI Microservices Connector (GMC) для розгортання вашого додатку. Окрім спільного використання сервісів, він також підтримує визначення послідовних, паралельних та альтернативних кроків у трубопроводі GenAI. При цьому він підтримує динамічне перемикання між моделями, що використовуються на будь-якому етапі конвеєра GenAI. Наприклад, у трубопроводі ChatQnA за допомогою GMC можна перемикати модель, що використовується у вбудовувачі, переранжувачі та/або LLM. +Висхідний Vanilla Kubernetes або Red Hat OpenShift Container (RHOCP) можна використовувати як з GMC, так і без нього, хоча використання з GMC надає додаткові можливості. + +ChatQnA надає кілька варіантів розгортання, включаючи одновузлове +розгортання локально або в хмарному середовищі з використанням такого обладнання, як Xeon +Scalable Processors, сервери Gaudi, графічні процесори NVIDIA і навіть на комп'ютерах зі штучним інтелектом. Він також +підтримує розгортання Kubernetes з консоллю управління GenAI Management Console (GMC) і без неї +(GMC), а також хмарні розгортання з використанням RHOCP. + +Ключові деталі впровадження +*************************** + +Вбудовування: + Процес перетворення запитів користувача в числові представлення називається + вбудовуваннями (embeddings). +Векторна база даних: + Зберігання та пошук відповідних точок даних за допомогою векторних баз даних. +Архітектура RAG: + Використання архітектури RAG для об'єднання баз знань та генеративних + моделей для розробки чат-ботів з релевантними та актуальними відповідями на запити. +Великі мовні моделі (LLM): + Навчання та використання LLM для створення відповідей. +Варіанти розгортання: + варіанти розгортання готового до використання ChatQnA + наприклад, розгортання на одному вузлі та розгортання на Kubernetes. + +Як це працює +************ + +Приклади ChatQnA демонструють основний потік інформації в системі чат-ботів, +починаючи з введення користувачем і проходячи через компоненти отримання, переранжування і +генерування компонентів, що в кінцевому підсумку призводить до виводу бота. + +.. figure:: images/chatqna_architecture.png + :alt: ChatQnA Architecture Diagram + + Ця діаграма ілюструє потік інформації в системі чат-ботів, + починаючи від введення користувачем і проходячи через пошук, аналіз і + генерування компонентів, що в кінцевому підсумку призводить до виводу бота. + +Архітектура виконує низку кроків для обробки запитів користувачів і генерування відповідей: + +1. **Embedding (Вбудовування)**: Запит користувача спочатку перетворюється в числове представлення, яке називається вбудовуванням. + Це вбудовування фіксує семантичне значення запиту і дозволяє ефективно порівнювати його з іншими вбудовуваннями. +#. **Vector Database (Векторна база даних)**: Далі вбудовування використовується для пошуку у векторній базі даних, + яка зберігає відповідні точки даних у вигляді векторів. Векторна база даних дозволяє ефективний і + семантичний пошук інформації на основі подібності між вбудовуванням запиту та збереженими векторами. +#. **Re-ranker (Переранжування)**: Використовує модель для ранжування знайдених даних за їхньою корисністю. + Векторна база даних отримує найбільш релевантні дані на основі вкладеного запиту. + Ці дані можуть включати документи, статті або будь-яку іншу релевантну інформацію, яка може допомогти генерувати точні відповіді. +#. **LLM**: Отримані точки даних потім передаються до великих мовних моделей (LLM) для подальшої обробки. + LLM - це потужні генеративні моделі, які були були навчені на великому масиві текстових даних. + Вони можуть генерувати людські відповіді на основі вхідних даних. +#. **Generate Response (Сформована відповідь)**: LLM генерують відповідь на основі вхідних даних і запиту користувача. + Потім ця відповідь повертається користувачеві як відповідь чат-бота. + +Очікуваний вивід +================ + +TBD + +Матриця валідації та передумови +=============================== + +Дивиться :doc:`/GenAIExamples/supported_examples` + +Архітектура +*********** + +Архітектура ChatQnA показана нижче: + +.. figure:: images/chatqna_flow_chart.png + :alt: ChatQnA Architecture Diagram + +План і схема мікросервісу +========================= + +Додаток або трубопровід GenAI в OPEA зазвичай складається з набору мікросервісів для створення мегасервісу, доступ до якого здійснюється через шлюз. Мікросервіс - це компонент, призначений для виконання певної функції або завдання. Мікросервіси є будівельними блоками, що пропонують основні послуги. Мікросервіси сприяють модульності, гнучкості та масштабованості системи. Мегасервіс - це архітектурна конструкція більш високого рівня, що складається з одного або декількох мікросервісів, що забезпечує можливість збирати наскрізні додатки. +Шлюз слугує інтерфейсом для доступу користувачів. Шлюз спрямовує вхідні запити до відповідних мікросервісів у межах архітектури мегасервісу. Для отримання додаткової інформації див. `GenAI Components `_. + +.. mermaid:: + + graph LR + subgraph ChatQnA-MegaService["ChatQnA-MegaService"] + direction LR + EM([Embedding 'LangChain TEI'
6000]) + RET([Retrieval 'LangChain Redis'
7000]) + RER([Rerank 'TEI'
8000]) + LLM([LLM 'text-generation TGI'
9000]) + end + + direction TB + TEI_EM{{TEI embedding service
8090}} + VDB{{Vector DB
8001}} + %% Vector DB interaction + TEI_EM -.->|d|VDB + + DP([OPEA Data Preparation
6007]) + LLM_gen{{TGI/vLLM/ollama Service}} + + direction TB + RER([OPEA Reranking
8000]) + TEI_RER{{TEI Reranking service
8808}} + + subgraph User Interface + direction TB + a[User Input Query] + Ingest[Ingest data] + UI[UI server
Port: 5173] + end + + subgraph ChatQnA GateWay + direction LR + GW[ChatQnA GateWay
Port: 8888] + end + + %% Data Preparation flow + %% Ingest data flow + direction LR + Ingest[Ingest data] -->|a| UI + UI -->|b| DP + DP -.->|c| TEI_EM + + %% Questions interaction + direction LR + a[User Input Query] -->|1| UI + UI -->|2| GW + GW ==>|3| ChatQnA-MegaService + EM ==>|4| RET + RET ==>|5| RER + RER ==>|6| LLM + + + %% Embedding service flow + direction TB + EM -.->|3'| TEI_EM + RET -.->|4'| TEI_EM + RER -.->|5'| TEI_RER + LLM -.->|6'| LLM_gen + + subgraph Legend + X([Microservice]) + Y{{Service from industry peers}} + Z[Gateway] + end + +Додаток або трубопровід GenAI в OPEA зазвичай складається з набору мікросервісів для створення мегасервісу, доступ до якого здійснюється через шлюз. Мікросервіс - це компонент, призначений для виконання певної функції або завдання. Мікросервіси є будівельними блоками, що пропонують основні послуги. Мікросервіси сприяють модульності, гнучкості та масштабованості системи. Мегасервіс - це архітектурна конструкція більш високого рівня, що складається з одного або декількох мікросервісів, що забезпечує можливість збирати наскрізні додатки. +Шлюз слугує інтерфейсом для доступу користувачів. Шлюз спрямовує вхідні запити до відповідних мікросервісів у межах архітектури мегасервісу. Для отримання додаткової інформації див. `GenAI Components `_. + +Розгортання +*********** + +З наведених нижче варіантів розгортання виберіть той, який найкраще відповідає вашим вимогам: + +Одиночний вузол +=============== + +.. toctree:: + :maxdepth: 1 + + Xeon Scalable Processor + Gaudi AI Accelerator + Nvidia GPU + AI PC + +Kubernetes +========== + +* Xeon & Gaudi with GMC +* Xeon & Gaudi without GMC +* Using Helm Charts + +Місцева хмара +============= + +* Red Hat OpenShift Container Platform (RHOCP) + +Вирішення проблем +***************** + +TDB. + +Моніторинг +********** + +Тепер, коли ви розгорнули приклад ChatQnA, давайте поговоримо про моніторинг продуктивності мікросервісів у трубопроводі ChatQnA. + +Моніторинг продуктивності мікросервісів має вирішальне значення для забезпечення безперебійної роботи генеративних систем ШІ. Відстежуючи такі показники, як затримка та пропускна здатність, ви можете визначити вузькі місця, виявити аномалії та оптимізувати роботу окремих мікросервісів. Це дозволяє нам проактивно вирішувати будь-які проблеми і гарантувати, що трубопровід ChatQnA працює ефективно. + +Цей документ допоможе вам зрозуміти, як відстежувати в реальному часі затримку, пропускну здатність та інші показники різних мікросервісів. Ви будете використовувати **Prometheus** і **Grafana**, інструменти з відкритим вихідним кодом, для збору метрик та їх візуалізації на інформаційній панелі. + +Налаштування сервера Prometheus +=============================== + +Prometheus - це інструмент для запису метрик в режимі реального часу, спеціально розроблений для моніторингу мікросервісів і оповіщення на основі їхніх метрик. + +Кінцева точка `/metrics` на порту, на якому запущено кожен мікросервіс, виводить метрики у форматі Prometheus. Сервер Prometheus зчитує ці метрики і зберігає їх у своїй базі даних часових рядів. Наприклад, метрики для сервісу Text Generation Interface (TGI) доступні за адресою: + +.. code-block:: bash + + http://${host_ip}:9009/metrics + +Налаштування сервера Prometheus: + +1. Завантажити Prometheus: + Завантажте Prometheus v2.52.0 з офіційного сайту та розпакуйте файли: + +.. code-block:: bash + + wget https://github.com/prometheus/prometheus/releases/download/v2.52.0/prometheus-2.52.0.linux-amd64.tar.gz + tar -xvzf prometheus-2.52.0.linux-amd64.tar.gz + +2. Налаштуйте Prometheus: + Змініть каталог на папку Prometheus: + +.. code-block:: bash + + cd prometheus-2.52.0.linux-amd64 + +Відредагуйте файл `prometheus.yml: + +.. code-block:: bash + + vim prometheus.yml + +Змініть ``job_name`` на ім'я мікросервісу, який ви хочете відстежувати. Також змініть ``targets`` на кінцеву точку завдання цього мікросервісу. Переконайтеся, що сервіс запущено, порт відкрито, і що він показує метрики, які відповідають домовленості Prometheus, у кінцевій точці ``/metrics``. + +Ось приклад експорту даних метрик з мікросервісу TGI до Prometheus: + +.. code-block:: yaml + + # Конфігурація сканування, що містить рівно одну кінцеву точку для сканування: + # Ось сам Прометей. + scrape_configs: + # Назва завдання додається у вигляді мітки `job=` до будь-якого часового ряду, витягнутого з цієї конфігурації. + - job_name: "tgi" + + # metrics_path defaults to '/metrics' + # scheme defaults to 'http'. + + static_configs: + - targets: ["localhost:9009"] + +Ось ще один приклад експорту даних метрик з мікросервісу TGI (всередині кластера Kubernetes) до Prometheus: + +.. code-block:: yaml + + scrape_configs: + - job_name: "tgi" + + static_configs: + - targets: ["llm-dependency-svc.default.svc.cluster.local:9009"] + +3. Запустіть сервер Prometheus: +Запустіть сервер Prometheus, не зупиняючи процес: + +.. code-block:: bash + nohup ./prometheus --config.file=./prometheus.yml & + +4. Увійдіть до інтерфейсу користувача Prometheus + Отримати доступ до інтерфейсу користувача Prometheus можна за наступною адресою: + +.. code-block:: bash + + http://localhost:9090/targets?search= + +>Примітка: Перед запуском Prometheus переконайтеся, що на вказаному порту (за замовчуванням 9090) не запущено жодних інших процесів. Інакше Prometheus не зможе зібрати метрики. + +В інтерфейсі Prometheus ви можете бачити стан цілей і метрик, які вилучаються. Ви можете шукати змінну метрики, ввівши її в рядок пошуку. + +З показниками TGI можна ознайомитися за посиланням: + +.. code-block:: bash + + http://${host_ip}:9009/metrics + +Налаштування Панелі Grafana +=========================== + +Grafana - це інструмент для візуалізації метрик і створення панелей моніторингу. З його допомогою можна створювати кастомні панелі, які відображають метрики, зібрані Prometheus. + +Щоб налаштувати панель Grafana, виконайте такі дії: + +1. Завантажте Grafana: + Завантажте Grafana v8.0.6 з офіційного сайту та розпакуйте файли: + +.. code-block:: bash + + wget https://dl.grafana.com/oss/release/grafana-11.0.0.linux-amd64.tar.gz + tar -zxvf grafana-11.0.0.linux-amd64.tar.gz + +Для отримання додаткових інструкцій дивіться повну версію `Grafana installation instructions `_. + +2. Запустіть сервер Grafana: + Змініть каталог на папку Grafana: + +.. code-block:: bash + + cd grafana-11.0.0 + +Запустіть сервер Grafana, не зупиняючи процес: + +.. code-block:: bash + + nohup ./bin/grafana-server & + +3. Увійдіть до інтерфейсу панелі Grafana: + У вашому браузері відкрийте інтерфейс панелі Grafana за наступною адресою: + +.. code-block:: bash + + http://localhost:3000 + +>Примітка: Перед запуском Grafana переконайтеся, що на порту 3000 не запущено жодних інших процесів. + +Увійдіть до Grafana, використовуючи облікові дані за замовчуванням: + +.. code-block:: + + username: admin + password: admin + +4. Додайте Prometheus як джерело даних: + Вам потрібно налаштувати джерело даних, з якого Grafana буде отримувати дані. Натисніть кнопку «Джерело даних», виберіть Prometheus і вкажіть URL-адресу Prometheus ``http://localhost:9090``. + + Потім вам потрібно завантажити JSON-файл для конфігурації дашборду. Ви можете завантажити його в інтерфейсі Grafana в розділі «Home > Dashboards > Import dashboard». Зразок JSON-файлу підтримується тут: `tgi_grafana.json `_ + +5. Перегляньте інформаційну панель: + Нарешті, відкрийте інформаційну панель в інтерфейсі Grafana, і ви побачите різні панелі, що відображають дані метрик. + + На прикладі мікросервісу TGI можна побачити наступні метрики: + * Час до першого токена + * Затримка декодування на токен + * Пропускна здатність (згенеровані токени/сек) + * Кількість токенів на запит + * Кількість згенерованих токенів на запит + + Ви також можете відстежувати вхідні запити до мікросервісу, час відповіді на токен, тощо, в режимі реального часу. + +Підсумок і наступні кроки +========================= + +TBD \ No newline at end of file diff --git a/docs-ua/examples/ChatQnA/deploy/aipc.md b/docs-ua/examples/ChatQnA/deploy/aipc.md new file mode 100644 index 00000000..d053f6f3 --- /dev/null +++ b/docs-ua/examples/ChatQnA/deploy/aipc.md @@ -0,0 +1,697 @@ +# Розгортання на одному вузлі з Ollama на AIPC + +У цьому розділі розгортання описано одновузлове попереднє розгортання ChatQnA +на прикладі комп'ютерів OPEA для розгортання за допомогою Ollama. Існує декілька +slice-n-dice способів увімкнути RAG з моделями vectordb та LLM, але тут ми +розглянемо один варіант для зручності: ми покажемо, як +побудувати e2e chatQnA з Redis VectorDB та моделлю llama-3, +розгорнуту на клієнтському процесорі. Для отримання додаткової інформації про те, як налаштувати екземпляр IDC для продовження роботи, +будь ласка, дотримуйтесь інструкцій тут ***getting started section***. Якщо у вас +не маєте екземпляра IDC, ви можете пропустити цей крок і переконатися, що всі +***system level validation*** метрики, такі як версії докерів. + +## Огляд + +Існує декілька способів створити варіант використання ChatQnA. У цьому підручнику ми розглянемо, як увімкнути наведений нижче список мікросервісів від OPEA +GenAIComps для розгортання одновузлового мегасервісного рішення Ollama. + +1. Підготовка даних +2. Вбудовування +3. Ретривер +4. Переранжування +5. LLM з Ollama + +Tня має на меті показати, як використовувати Redis vectordb для моделі RAG і +моделі llama-3 на клієнтських комп'ютерах Intel. Ми розглянемо +як налаштувати докер-контейнер для запуску мікросервісів та мегасервісів. +Потім рішення буде використовувати зразок набору даних Nike у форматі PDF. Користувачі +можуть задати питання про Nike і отримати відповідь у вигляді чату за замовчуванням для +до 1024 токенів. Рішення розгортається за допомогою інтерфейсу користувача. Ви можете використовувати 2 режими: +1. Базовий інтерфейс +2. Діалоговий інтерфейс + +Діалоговий інтерфейс не є обов'язковим, але підтримується в цьому прикладі, якщо ви зацікавлені в його використанні. + +## Передумови + +Першим кроком є клонування GenAIExamples та GenAIComps. GenAIComps - це +основні необхідні компоненти, що використовуються для створення прикладів, які ви знайдете в GenAIExamples і розгортання їх як мікросервісів. + +``` +mkdir ~/OPEA -p +cd ~/OPEA +git clone https://github.com/opea-project/GenAIComps.git +git clone https://github.com/opea-project/GenAIExamples.git +``` + +Перевірте тег релізу +``` +cd ~/OPEA/GenAIComps +git checkout tags/v1.0 +``` + +У прикладах використовуються модельні ваги від Ollama і langchain. + +Встановіть Ваш [HuggingFace](https://huggingface.co/) обліковий запис і генеруйте +[user access token](https://huggingface.co/docs/transformers.js/en/guides/private#step-1-generating-a-user-access-token). + +Налаштування токена HuggingFace +``` +export HUGGINGFACEHUB_API_TOKEN="Your_Huggingface_API_Token" +``` + +У прикладі потрібно встановити `host_ip` для розгортання мікросервісів на +кінцевому пристрої з увімкненими портами. Встановлення змінної host_ip env +``` +export host_ip=$(hostname -I | awk '{print $1}') +``` + +Переконайтеся, що ви налаштували проксі-сервери, якщо ви перебуваєте за брандмауером +``` +export no_proxy=${your_no_proxy},$host_ip +export http_proxy=${your_http_proxy} +export https_proxy=${your_http_proxy} +``` +У прикладах використовуються модельні ваги від Ollama та langchain. + +### Встановлення сервісу LLM Ollama +Ми використовуємо [Ollama](https://ollama.com/) як наш сервіс LLM для AIPC. +Будь ласка, дотримуйтесь інструкцій, щоб налаштувати Ollama на вашому комп'ютері. Це дозволить встановити точку входу, необхідну для того, щоб Ollama відповідала прикладам ChatQnA. + +#### Ынсталяцыя сервысу Ollama +Встановіть сервіс Ollama однією командою: +``` +curl -fsSL https://ollama.com/install.sh | sh +``` + +#### Встановленя конфыгурації сервісу Ollama +Файл конфігурації служби Ollama знаходиться в /etc/systemd/system/ollama.service. Відредагуйте файл, щоб встановити середовище OLLAMA_HOST. +Замініть **** на IPV4 вашого хосту (будь ласка, використовуйте зовнішній публічний IP). Наприклад, host_ip 10.132.x.y, тоді `Environment=«OLLAMA_HOST=10.132.x.y:11434»'. +``` +Environment="OLLAMA_HOST=host_ip:11434" +``` + +#### Set https_proxy environment for Ollama +If your system access network through proxy, add https_proxy in Ollama Service Configuration file +``` +Environment="https_proxy=Your_HTTPS_Proxy" +``` + +#### Перезагрузка сервісу Ollama +``` +$ sudo systemctl daemon-reload +$ sudo systemctl restart ollama.service +``` + +#### Перевірка старта сервіса +``` +netstat -tuln | grep 11434 +``` +The output are: +``` +tcp 0 0 10.132.x.y:11434 0.0.0.0:* LISTEN +``` + +#### Pull Ollama LLM model +Запустіть команду для завантаження моделей LLM. В якості буде використано той, що вказано у файлі [Ollama Service Configuration](#Set-Ollama-Service-Configuration) +``` +export host_ip= +export OLLAMA_HOST=http://${host_ip}:11434 +ollama pull llama3.2 +``` +Після завантаження моделей ви можете перерахувати їх за допомогою `ollama list`. +Виведення має бути подібним до наведеного нижче: +``` +NAME ID SIZE MODIFIED +llama3.2:latest a80c4f17acd5 2.0 GB 2 minutes ago +``` + +### Consume Ollama LLM Service +Увійдіть до служби ollama, щоб перевірити, чи правильно працює ollama. +```bash +curl http://${host_ip}:11434/api/generate -d '{"model": "llama3.2", "prompt":"What is Deep Learning?"}' +``` +Результати подібні до цих: +``` +{"model":"llama3.2","created_at":"2024-10-12T12:55:28.098813868Z","response":"Deep","done":false} +{"model":"llama3.2","created_at":"2024-10-12T12:55:28.124514468Z","response":" learning","done":false} +{"model":"llama3.2","created_at":"2024-10-12T12:55:28.149754216Z","response":" is","done":false} +{"model":"llama3.2","created_at":"2024-10-12T12:55:28.180420784Z","response":" a","done":false} +{"model":"llama3.2","created_at":"2024-10-12T12:55:28.229185873Z","response":" subset","done":false} +{"model":"llama3.2","created_at":"2024-10-12T12:55:28.263956118Z","response":" of","done":false} +{"model":"llama3.2","created_at":"2024-10-12T12:55:28.289097354Z","response":" machine","done":false} +{"model":"llama3.2","created_at":"2024-10-12T12:55:28.316838918Z","response":" learning","done":false} +{"model":"llama3.2","created_at":"2024-10-12T12:55:28.342309506Z","response":" that","done":false} +{"model":"llama3.2","created_at":"2024-10-12T12:55:28.367221264Z","response":" involves","done":false} +{"model":"llama3.2","created_at":"2024-10-12T12:55:28.39205893Z","response":" the","done":false} +{"model":"llama3.2","created_at":"2024-10-12T12:55:28.417933974Z","response":" use","done":false} +{"model":"llama3.2","created_at":"2024-10-12T12:55:28.443110388Z","response":" of","done":false} +... +``` + +## Підготовка (створення / витягування) докер-образів + +Цей крок передбачає створення/витягування (можливо, у майбутньому) відповідних докер-образів з покроковим описом процесу і перевіркою працездатності в кінці. Для +ChatQnA знадобляться такі образи докерів: embedding, retriever, +rerank, LLM і dataprep. Крім того, вам потрібно буде зібрати докер-образи для +мегасервісу ChatQnA та інтерфейсу користувача ( діалоговий React UI не є обов'язковим). Загалом є 8 обов'язкових і один необов'язковий докер-образ. + +Докер-образи, необхідні для встановлення прикладу, потрібно збирати локально, проте незабаром Intel викладе ці образи на докер-хаб. + +### Створення/витягування образів мікросервісів + +З папки `GenAIComps`. + +#### Побудова образу підготовки даних + +``` +cd ~/OPEA/GenAIComps +docker build --no-cache -t opea/dataprep-redis:latest --build-arg https_proxy=$https_proxy \ + --build-arg http_proxy=$http_proxy -f comps/dataprep/redis/langchain/Dockerfile . +``` + +#### Побудова образу для вбудовування + +``` +docker build --no-cache -t opea/embedding-tei:latest --build-arg https_proxy=$https_proxy \ + --build-arg http_proxy=$http_proxy -f comps/embeddings/tei/langchain/Dockerfile . +``` + +#### Побудова образу ретривера + +``` + docker build --no-cache -t opea/retriever-redis:latest --build-arg https_proxy=$https_proxy \ + --build-arg http_proxy=$http_proxy -f comps/retrievers/redis/langchain/Dockerfile . +``` + +#### Побудова образу переранжування + +``` +docker build --no-cache -t opea/reranking-tei:latest --build-arg https_proxy=$https_proxy \ + --build-arg http_proxy=$http_proxy -f comps/reranks/tei/Dockerfile . +``` + +#### Побудова образу LLM + +Далі ми створимо докер мікросервісу Ollama. Це встановить точку входу +необхідну для того, щоб Ollama відповідала прикладам ChatQnA +``` +docker build --no-cache -t opea/llm-ollama:latest --build-arg https_proxy=$https_proxy \ + --build-arg http_proxy=$http_proxy -f comps/llms/text-generation/ollama/langchain/Dockerfile . +``` + +### Побудова образів Мегасервісу + +Мегасервіс - це трубопровід, який передає дані через різні мікросервіси, кожен з яких виконує різні завдання. Ми визначаємо різні +мікросервіси і потік даних між ними у файлі `chatqna.py`, скажімо, у +цьому прикладі вихід мікросервісу вбудовування буде входом мікросервісу пошуку +який, у свою чергу, передасть дані мікросервісу ранжування і так далі. +Ви також можете додавати нові або видаляти деякі мікросервіси і налаштовувати +мегасервіс відповідно до ваших потреб. + +Створіть образ мегасервісу для цього варіанту використання + +``` +cd ~/OPEA/GenAIExamples/ChatQnA +git checkout tags/v1.0 +``` + +``` +docker build --no-cache -t opea/chatqna:latest --build-arg https_proxy=$https_proxy \ + --build-arg http_proxy=$http_proxy -f Dockerfile . +``` + +### Створення образів інших сервісів + +#### Створення образу інтерфейсу користувача + +Як вже було сказано, ви можете створити 2 режими інтерфейсу + +*Базовий інтерфейс* + +``` +cd ~/OPEA/GenAIExamples/ChatQnA/ui/ +docker build --no-cache -t opea/chatqna-ui:latest --build-arg https_proxy=$https_proxy \ + --build-arg http_proxy=$http_proxy -f ./docker/Dockerfile . +``` + +*Діалоговий інтерфейс* +Якщо вам потрібен розмовний досвід, скористайтеся мегасервісом chatqna. + +``` +cd ~/OPEA/GenAIExamples/ChatQnA/ui/ +docker build --no-cache -t opea/chatqna-conversation-ui:latest --build-arg https_proxy=$https_proxy \ + --build-arg http_proxy=$http_proxy -f ./docker/Dockerfile.react . +``` + +### Перевірка здорового глузду. +Перед тим, як перейти до наступного кроку, перевірте, чи у вас є наведений нижче набір докер-образів: + +* opea/dataprep-redis:latest +* opea/embedding-tei:latest +* opea/retriever-redis:latest +* opea/reranking-tei:latest +* opea/llm-ollama:latest +* opea/chatqna:latest +* opea/chatqna-ui:latest + +## Встановлення кейсу використання + +Як вже згадувалося, у цьому прикладі використання буде використано наступну комбінацію GenAIComps з інструментами + +| Компоненти кейсу використання | Інструменти | Модель | Тип Сервісу | +|---------------- |--------------|-----------------------------|-------| +|Data Prep | LangChain | NA |OPEA Microservice | +|VectorDB | Redis | NA |Open source service| +|Embedding | TEI | BAAI/bge-base-en-v1.5 |OPEA Microservice | +|Reranking | TEI | BAAI/bge-reranker-base | OPEA Microservice | +|LLM | Ollama | llama3 |OPEA Microservice | +|UI | | NA | Gateway Service | + +Інструменти та моделі, згадані у таблиці, налаштовуються або через змінну оточення чи файл `compose.yaml`. + +Встановіть необхідні змінні оточення для встановлення варіанту використання + +> Примітка: Замініть `host_ip` на вашу зовнішню IP-адресу. Не використовуйте localhost +> для наведеного нижче набору змінних оточення + +### Dataprep + + 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" + +### VectorDB + + export REDIS_URL="redis://${host_ip}:6379" + export INDEX_NAME="rag-redis" + +### Embedding Service + + export EMBEDDING_MODEL_ID="BAAI/bge-base-en-v1.5" + export EMBEDDING_SERVICE_HOST_IP=${host_ip} + export RETRIEVER_SERVICE_HOST_IP=${host_ip} + export TEI_EMBEDDING_ENDPOINT="http://${host_ip}:6006" + +### Reranking Service + + export RERANK_MODEL_ID="BAAI/bge-reranker-base" + export TEI_RERANKING_ENDPOINT="http://${host_ip}:8808" + export RERANK_SERVICE_HOST_IP=${host_ip} + +### LLM Service + + export LLM_SERVICE_HOST_IP=${host_ip} + export OLLAMA_ENDPOINT=http://${host_ip}:11434 + export OLLAMA_MODEL="llama3" + +### Megaservice + + export MEGA_SERVICE_HOST_IP=${host_ip} + export BACKEND_SERVICE_ENDPOINT="http://${host_ip}:8888/v1/chatqna" + +## Розгортання кейсу використання +У цьому посібнику ми будемо розгортати за допомогою docker compose з наданого +YAML-файлу. Інструкції docker compose повинні запустити всі вищезгадані сервіси як контейнери. + +``` +cd GenAIExamples/ChatQnA/docker_compose/intel/cpu/aipc +docker compose -f compose.yaml up -d +``` + +### Валідація мікросервісу + +#### Перевірка змінних оточення +Перевірте журнал запуску за допомогою `docker compose -f ./compose.yaml logs`. +Попереджувальні повідомлення виводять змінні, якщо їх **НЕ** встановлено. + + ubuntu@aipc:~/GenAIExamples/ChatQnA/docker_compose/intel/cpu/aipc$ docker compose -f ./compose.yaml up -d + WARN[0000] The "LANGCHAIN_API_KEY" variable is not set. Defaulting to a blank string. + WARN[0000] The "LANGCHAIN_TRACING_V2" variable is not set. Defaulting to a blank string. + WARN[0000] The "LANGCHAIN_API_KEY" variable is not set. Defaulting to a blank string. + WARN[0000] The "LANGCHAIN_TRACING_V2" variable is not set. Defaulting to a blank string. + WARN[0000] The "LANGCHAIN_API_KEY" variable is not set. Defaulting to a blank string. + WARN[0000] The "LANGCHAIN_TRACING_V2" variable is not set. Defaulting to a blank string. + WARN[0000] The "LANGCHAIN_API_KEY" variable is not set. Defaulting to a blank string. + WARN[0000] The "LANGCHAIN_TRACING_V2" variable is not set. Defaulting to a blank string. + WARN[0000] /home/ubuntu/GenAIExamples/ChatQnA/docker_compose/intel/cpu/aipc/compose.yaml: `version` is obsolete + +#### Перевірте стан контейнера + +Перевірте, чи всі контейнери, запущені за допомогою docker compose, запущено + +Наприклад, у прикладі ChatQnA запускається 11 докерів (сервісів), перевірте ці докери контейнери запущено, тобто всі контейнери `STATUS` мають значення `Up`. +Для швидкої перевірки працездатності спробуйте `docker ps -a`, щоб побачити, чи всі контейнери запущено + +``` +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +5db065a9fdf9 opea/chatqna-ui:latest "docker-entrypoint.s…" 29 seconds ago Up 25 seconds 0.0.0.0:5173->5173/tcp, :::5173->5173/tcp chatqna-aipc-ui-server +6fa87927d00c opea/chatqna:latest "python chatqna.py" 29 seconds ago Up 25 seconds 0.0.0.0:8888->8888/tcp, :::8888->8888/tcp chatqna-aipc-backend-server +bdc93be9ce0c opea/retriever-redis:latest "python retriever_re…" 29 seconds ago Up 3 seconds 0.0.0.0:7000->7000/tcp, :::7000->7000/tcp retriever-redis-server +add761b504bc opea/reranking-tei:latest "python reranking_te…" 29 seconds ago Up 26 seconds 0.0.0.0:8000->8000/tcp, :::8000->8000/tcp reranking-tei-aipc-server +d6b540a423ac opea/dataprep-redis:latest "python prepare_doc_…" 29 seconds ago Up 26 seconds 0.0.0.0:6007->6007/tcp, :::6007->6007/tcp dataprep-redis-server +6662d857a154 opea/embedding-tei:latest "python embedding_te…" 29 seconds ago Up 26 seconds 0.0.0.0:6000->6000/tcp, :::6000->6000/tcp embedding-tei-server +8b226edcd9db ghcr.io/huggingface/text-embeddings-inference:cpu-1.5 "text-embeddings-rou…" 29 seconds ago Up 27 seconds 0.0.0.0:8808->80/tcp, :::8808->80/tcp tei-reranking-server +e1fc81b1d542 redis/redis-stack:7.2.0-v9 "/entrypoint.sh" 29 seconds ago Up 27 seconds 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp, 0.0.0.0:8001->8001/tcp, :::8001->8001/tcp redis-vector-db +051e0d68e263 ghcr.io/huggingface/text-embeddings-inference:cpu-1.5 "text-embeddings-rou…" 29 seconds ago Up 27 seconds 0.0.0.0:6006->80/tcp, :::6006->80/tcp tei-embedding-server +632a6634b06b opea/llm-ollama "bash entrypoint.sh" 29 seconds ago Up 27 seconds 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp llm-ollama +``` + +## Взаємодія з розгортанням ChatQnA + +У цьому розділі ви дізнаєтеся про різні способи взаємодії з +розгорнутими мікросервісами + +### Dataprep Microservice (необов'язково) + +Якщо ви хочете додати або оновити базу знань за замовчуванням, ви можете скористатися такими командами. Мікросервіс dataprep витягує тексти з різних джерел даних, розбиває дані на частини, вбудовує кожну частину за допомогою мікросервісу embedding і зберігає вбудовані вектори у базі даних векторів redis. + +Завантажте pdf файл: +``` +wget https://raw.githubusercontent.com/opea-project/GenAIComps/main/comps/retrievers/redis/data/nke-10k-2023.pdf +``` +Local File `nke-10k-2023.pdf` Upload with dataprep: +This command updates a knowledge base by uploading a local file for processing. + +``` +curl -X POST "http://${host_ip}:6007/v1/dataprep" \ + -H "Content-Type: multipart/form-data" \ + -F "files=@./nke-10k-2023.pdf" +``` + +Крім того, ви можете додати базу знань за допомогою HTTP-посилань: + +``` +curl -X POST "http://${host_ip}:6007/v1/dataprep" \ + -H "Content-Type: multipart/form-data" \ + -F 'link_list=["https://opea.dev"]' +``` + +Ця команда оновлює базу знань, надсилаючи список HTTP-посилань для обробки. + +Крім того, ви можете отримати список файлів, які ви завантажили: + +``` +curl -X POST "http://${host_ip}:6007/v1/dataprep/get_file" \ + -H "Content-Type: application/json" + +``` + +Щоб видалити завантажений вами файл/посилання, ви можете скористатися наступними командами: + +#### Видалити посилання +``` +# Служба dataprep додасть постфікс .txt до файлу посилання + +curl -X POST "http://${host_ip}:6007/v1/dataprep/delete_file" \ + -d '{"file_path": "https://opea.dev.txt"}' \ + -H "Content-Type: application/json" +``` + +#### Видалити файл + +``` +curl -X POST "http://${host_ip}:6007/v1/dataprep/delete_file" \ + -d '{"file_path": "nke-10k-2023.pdf"}' \ + -H "Content-Type: application/json" +``` + +#### Видалення всіх завантажених файлів і посилань + +``` +curl -X POST "http://${host_ip}:6007/v1/dataprep/delete_file" \ + -d '{"file_path": "all"}' \ + -H "Content-Type: application/json" +``` +### TEI Embedding Service + +Сервіс вбудовування TEI приймає на вхід рядок, вбудовує його у вектор певної довжини, визначеної моделлю вбудовування, і повертає цей вкладений вектор. + +``` +curl ${host_ip}:6006/embed \ + -X POST \ + -d '{"inputs":"What is Deep Learning?"}' \ + -H 'Content-Type: application/json' +``` + +У цьому прикладі використовується модель вбудовування «BAAI/bge-base-en-v1.5», яка має розмір вектора 768. Отже, результатом виконання команди curl буде вбудований вектор довжиною 768. + +### Embedding Microservice +Мікросервіс вбудовування залежить від сервісу вбудовування TEI. З точки зору +вхідних параметрів, він приймає рядок, вбудовує його у вектор за допомогою сервісу вбудовування TEI, додає інші параметри за замовчуванням, необхідні для мікросервісу пошуку і повертає його. + +``` +curl http://${host_ip}:6000/v1/embeddings\ + -X POST \ + -d '{"text":"hello"}' \ + -H 'Content-Type: application/json' +``` +### Retriever Microservice + +Щоб споживати мікросервіс retriever, потрібно згенерувати mock embedding +вектор за допомогою скрипту на Python. Довжина вектора вбудовування визначається +моделлю вбудовування. Тут ми використовуємо модель EMBEDDING_MODEL_ID=«BAAI/bge-base-en-v1.5», розмір вектора якої становить 768. + +Перевірте векторну розмірність вашої моделі вбудовування і встановіть +розмірність `your_embedding`, що відповідає їй. + +``` +export your_embedding=$(python3 -c "import random; embedding = [random.uniform(-1, 1) for _ in range(768)]; print(embedding)") + +curl http://${host_ip}:7000/v1/retrieval \ + -X POST \ + -d "{\"text\":\"test\",\"embedding\":${your_embedding}}" \ + -H 'Content-Type: application/json' + +``` +Вихід мікросервісу ретрівера складається з унікального ідентифікатора для +запиту, початкового запиту або вхідного запиту до мікросервісу пошуку, списку top +`n` знайдених документів, що відповідають вхідному запиту, та top_n, де n позначає +кількість документів, які потрібно повернути. +На виході виводиться текст, що відповідає вхідним даним: +``` +{"id":"27210945c7c6c054fa7355bdd4cde818","retrieved_docs":[{"id":"0c1dd04b31ab87a5468d65f98e33a9f6","text":"Company: Nike. financial instruments are subject to master netting arrangements that allow for the offset of assets and liabilities in the event of default or early termination of the contract.\nAny amounts of cash collateral received related to these instruments associated with the Company's credit-related contingent features are recorded in Cash and\nequivalents and Accrued liabilities, the latter of which would further offset against the Company's derivative asset balance. Any amounts of cash collateral posted related\nto these instruments associated with the Company's credit-related contingent features are recorded in Prepaid expenses and other current assets, which would further\noffset against the Company's derivative liability balance. Cash collateral received or posted related to the Company's credit-related contingent features is presented in the\nCash provided by operations component of the Consolidated Statements of Cash Flows. The Company does not recognize amounts of non-cash collateral received, such\nas securities, on the Consolidated Balance Sheets. For further information related to credit risk, refer to Note 12 — Risk Management and Derivatives.\n2023 FORM 10-K 68Table of Contents\nThe following tables present information about the Company's derivative assets and liabilities measured at fair value on a recurring basis and indicate the level in the fair\nvalue hierarchy in which the Company classifies the fair value measurement:\nMAY 31, 2023\nDERIVATIVE ASSETS\nDERIVATIVE LIABILITIES"},{"id":"1d742199fb1a86aa8c3f7bcd580d94af","text": ... } + +``` + +### TEI Reranking Service + +TСервіс переранжування TEI переранжує документи, повернуті пошуковою службою +сервісом. Він споживає запит і список документів і повертає індекс документа в порядку зменшення показника схожості. Документ, що відповідає повернутому індексу з найбільшою оцінкою, є найбільш релевантним для вхідного запиту. +``` +curl http://${host_ip}:8808/rerank \ + -X POST \ + -d '{"query":"What is Deep Learning?", "texts": ["Deep Learning is not...", "Deep learning is..."]}' \ + -H 'Content-Type: application/json' +``` + +Вивід: `[{"index":1,"score":0.9988041},{"index":0,"score":0.022948774}]` + + +### Reranking Microservice + +Мікросервіс переранжування використовує сервіс переранжування TEI і підставляє +відповідь параметрами за замовчуванням, необхідними для мікросервісу LLM. + +``` +curl http://${host_ip}:8000/v1/reranking\ + -X POST \ + -d '{"initial_query":"What is Deep Learning?", "retrieved_docs": \ + [{"text":"Deep Learning is not..."}, {"text":"Deep learning is..."}]}' \ + -H 'Content-Type: application/json' +``` + +Вхідними даними для мікросервісу є `initial_query` і список знайдених +документів, і він виводить найбільш релевантний документ до початкового запиту разом з іншими параметрами за замовчуванням, такими як температура, `repetition_penalty`, `chat_template` і так далі. Ми також можемо отримати перші n документів, задавши `top_n` як один із вхідних параметрів. Наприклад: + +``` +curl http://${host_ip}:8000/v1/reranking\ + -X POST \ + -d '{"initial_query":"What is Deep Learning?" ,"top_n":2, "retrieved_docs": \ + [{"text":"Deep Learning is not..."}, {"text":"Deep learning is..."}]}' \ + -H 'Content-Type: application/json' +``` + +Це вивід: + +``` +{"id":"e1eb0e44f56059fc01aa0334b1dac313","query":"Human: Answer the question based only on the following context:\n Deep learning is...\n Question: What is Deep Learning?","max_new_tokens":1024,"top_k":10,"top_p":0.95,"typical_p":0.95,"temperature":0.01,"repetition_penalty":1.03,"streaming":true} + +``` +Ви можете помітити, що мікросервіси ранжування мають стан ('ID' та інші метадані), +в той час як сервіс переранжування не має. + +### Ollama Service + +``` +curl http://${host_ip}:11434/api/generate -d '{"model": "llama3", "prompt":"What is Deep Learning?"}' +``` + +Сервіс Ollama генерує текст для підказки введення. Ось очікуваний результат +від Ollama: + +``` +{"model":"llama3","created_at":"2024-09-05T08:47:17.160752424Z","response":"Deep","done":false} +{"model":"llama3","created_at":"2024-09-05T08:47:18.229472564Z","response":" learning","done":false} +{"model":"llama3","created_at":"2024-09-05T08:47:19.594268648Z","response":" is","done":false} +{"model":"llama3","created_at":"2024-09-05T08:47:21.129254135Z","response":" a","done":false} +{"model":"llama3","created_at":"2024-09-05T08:47:22.066555829Z","response":" sub","done":false} +{"model":"llama3","created_at":"2024-09-05T08:47:22.993695854Z","response":"field","done":false} +{"model":"llama3","created_at":"2024-09-05T08:47:24.315183296Z","response":" of","done":false} +{"model":"llama3","created_at":"2024-09-05T08:47:25.337741889Z","response":" machine","done":false} +{"model":"llama3","created_at":"2024-09-05T08:47:26.232468605Z","response":" learning","done":false} +{"model":"llama3","created_at":"2024-09-05T08:47:27.584534136Z","response":" that","done":false} +{"model":"llama3","created_at":"2024-09-05T08:47:28.50201424Z","response":" involves","done":false} +{"model":"llama3","created_at":"2024-09-05T08:47:29.895471763Z","response":" the","done":false} +{"model":"llama3","created_at":"2024-09-05T08:47:31.204128984Z","response":" use","done":false} +{"model":"llama3","created_at":"2024-09-05T08:47:32.231884525Z","response":" of","done":false} +{"model":"llama3","created_at":"2024-09-05T08:47:33.510913894Z","response":" artificial","done":false} +{"model":"llama3","created_at":"2024-09-05T08:47:34.516291108Z","response":" neural","done":false} +... +``` + +### LLM Microservice +``` +curl http://${host_ip}:9000/v1/chat/completions\ + -X POST \ + -d '{"query":"What is Deep Learning?","max_new_tokens":17,"top_k":10,"top_p":0.95,\ + "typical_p":0.95,"temperature":0.01,"repetition_penalty":1.03,"streaming":true}' \ + -H 'Content-Type: application/json' + +``` + +Ви отримаєте згенерований нижче текст від LLM: + +``` +data: b'\n' +data: b'\n' +data: b'Deep' +data: b' learning' +data: b' is' +data: b' a' +data: b' subset' +data: b' of' +data: b' machine' +data: b' learning' +data: b' that' +data: b' uses' +data: b' algorithms' +data: b' to' +data: b' learn' +data: b' from' +data: b' data' +data: [DONE] +``` + +### MegaService + +``` +curl http://${host_ip}:8888/v1/chatqna -H "Content-Type: application/json" -d '{ + "model": "'"${OLLAMA_MODEL}"'", + "messages": "What is the revenue of Nike in 2023?" + }' + +``` + +Ось результат для вашого посилання: + +``` +data: b'\n' +data: b'An' +data: b'swer' +data: b':' +data: b' In' +data: b' fiscal' +data: b' ' +data: b'2' +data: b'0' +data: b'2' +data: b'3' +data: b',' +data: b' N' +data: b'I' +data: b'KE' +data: b',' +data: b' Inc' +data: b'.' +data: b' achieved' +data: b' record' +data: b' Rev' +data: b'en' +data: b'ues' +data: b' of' +data: b' $' +data: b'5' +data: b'1' +data: b'.' +data: b'2' +data: b' billion' +data: b'.' +data: b'' +data: [DONE] +``` + +## Перевірка журналу контейнерів докера + +Перевірте журнал контейнера: + +`docker logs -t` + + +Перевірте журнал за `docker logs f7a08f9867f9 -t`. + +Також ви можете перевірити загальний журнал за допомогою наступної команди, де +compose.yaml - це файл конфігурації мегасервісу docker-compose. + +``` +docker compose -f ./docker_compose/intel/cpu/apic/compose.yaml logs +``` + +## Запуск інтерфейсу користувача + +### Базовий інтерфейс користувача + +Щоб отримати доступ до інтерфейсу, відкрийте в браузері наступну URL-адресу: http://{host_ip}:5173. За замовчуванням інтерфейс працює на внутрішньому порту 5173. Якщо ви бажаєте використовувати інший порт хоста для доступу до інтерфейсу, ви можете змінити мапінг портів у файлі compose.yaml, як показано нижче: +``` + chaqna-aipc-ui-server: + image: opea/chatqna-ui:latest + ... + ports: + - "80:5173" +``` + +### Діалоговий інтерфейс + +Щоб отримати доступ до інтерфейсу діалогового інтерфейсу (заснованого на реакції), змініть сервіс інтерфейсу у файлі compose.yaml. Замініть сервіс chaqna-aipc-ui-server на сервіс chatqna-aipc-conversation-ui-server, як показано у конфігурації нижче: +``` +chaqna-aipc-conversation-ui-server: + image: opea/chatqna-conversation-ui:latest + container_name: chatqna-aipc-conversation-ui-server + environment: + - APP_BACKEND_SERVICE_ENDPOINT=${BACKEND_SERVICE_ENDPOINT} + - APP_DATA_PREP_SERVICE_URL=${DATAPREP_SERVICE_ENDPOINT} + ports: + - "5174:80" + depends_on: + - chaqna-aipc-backend-server + ipc: host + restart: always +``` + +Після запуску сервісів відкрийте у браузері наступну URL-адресу: http://{host_ip}:5174. За замовчуванням інтерфейс працює на внутрішньому порту 80. Якщо ви бажаєте використовувати інший порт хоста для доступу до інтерфейсу, ви можете змінити мапінг портів у файлі compose.yaml, як показано нижче: + +``` + chaqna-aipc-conversation-ui-server: + image: opea/chatqna-conversation-ui:latest + ... + ports: + - "80:80" +``` + +### Зупинка роботи сервісів + +Після того, як ви закінчите роботу з усім трубопроводом і захочете зупинитися і видалити всі контейнери, скористайтеся командою, наведеною нижче: + +``` +docker compose -f compose.yaml down +``` diff --git a/docs-ua/examples/ChatQnA/deploy/gaudi.md b/docs-ua/examples/ChatQnA/deploy/gaudi.md new file mode 100644 index 00000000..f684693f --- /dev/null +++ b/docs-ua/examples/ChatQnA/deploy/gaudi.md @@ -0,0 +1,889 @@ +# Одновузлове попереднє розгортання з vLLM або TGI на Gaudi AI Accelerator + +У цьому розділі розгортання описано одновузлове попереднє розгортання ChatQnA +на прикладі комп'ютерів OPEA для розгортання за допомогою сервісу vLLM або TGI. Існує декілька +slice-n-dice способів увімкнути RAG з моделями vectordb та LLM, але тут ми +розглянемо один варіант для зручності: ми покажемо, як +побудувати e2e chatQnA з Redis VectorDB та моделлю neural-chat-7b-v3-3, +розгорнутої на Intel® Tiber™ Developer Cloud (ITDC). Для отримання додаткової інформації про те, як налаштувати екземпляр ITDC для подальшої роботи, +будь ласка, дотримуйтесь інструкцій тут (*** getting started section***). Якщо у вас +не маєте екземпляра ITDC або обладнання ще не підтримується в ITDC, ви все одно можете запустити його попередньо. Щоб запустити цю попередню версію, переконайтеся, що всі +(***system level requriements***), такі як версії докерів, версії драйверів тощо. + +## Огляд + +Існує декілька способів створити варіант використання ChatQnA. У цьому підручнику ми +розглянемо, як увімкнути наведений нижче список мікросервісів з OPEA +GenAIComps для розгортання одновузлового рішення vLLM або мегасервісу TGI. + +1. Data Prep +2. Embedding +3. Retriever +4. Reranking +5. LLM with vLLM or TGI + +Рішення має на меті показати, як використовувати Redis vectordb для RAG та +neural-chat-7b-v3-3 на Intel Gaudi AI Accelerator. Ми розглянемо +як налаштувати докер-контейнер для запуску мікросервісів і мегасервісів. Рішення буде використовувати зразок набору даних Nike у форматі PDF. Користувачі +можуть задати питання про Nike і отримати відповідь у вигляді чату за замовчуванням для до 1024 токенів. Рішення розгортається за допомогою інтерфейсу користувача. Існує 2 режими, які ви можете +використовувати: + +1. Базовий інтерфейс +2. Діалоговий інтерфейс + +Діалоговий інтерфейс не є обов'язковим, але підтримується у цьому прикладі, якщо ви зацікавлені у його використанні. + +Підсумовуючи, нижче наведено зміст, який ми розглянемо в цьому посібнику: + +1. Передумови +2. Підготовка (створення / витягування) образів Docker +3. Налаштування кейсів використання +4. Розгортання кейсу використання +5. Взаємодія з розгортанням ChatQnA + +## Передумови + +Перший крок - клонування GenAIExamples та GenAIComps. GenAIComps - це +фундаментальні необхідні компоненти, що використовуються для створення прикладів, які ви знайдете в GenAIExamples, і розгортання їх як мікросервісів. + +``` +git clone https://github.com/opea-project/GenAIComps.git +git clone https://github.com/opea-project/GenAIExamples.git +``` + +Перевірте тег релізу +``` +cd GenAIComps +git checkout tags/v1.0 +``` + +У прикладах використовуються ваги моделей з HuggingFace і langchain. + +Налаштуйте свій обліковий запис [HuggingFace](https://huggingface.co/) і згенеруйте [токен доступу користувача](https://huggingface.co/docs/transformers.js/en/guides/private#step-1-generating-a-user-access-token). + +Налаштування токена HuggingFace +``` +export HUGGINGFACEHUB_API_TOKEN="Your_Huggingface_API_Token" +``` + +У прикладі потрібно встановити `host_ip` для розгортання мікросервісів на +кінцевому пристрої з увімкненими портами. Встановлення змінної host_ip env +``` +export host_ip=$(hostname -I | awk '{print $1}') +``` + +Переконайтеся, що ви налаштували проксі-сервери, якщо ви перебуваєте за брандмауером +``` +export no_proxy=${your_no_proxy},$host_ip +export http_proxy=${your_http_proxy} +export https_proxy=${your_http_proxy} +``` + +## Підготовка (створення / витягування) образів Docker + +Цей крок передбачає створення/витягування (можливо, у майбутньому) відповідних докер-образів з покроковим описом процесу та перевіркою працездатності в кінці. Для +ChatQnA знадобляться такі докер-образи: embedding, retriever, rerank, LLM і dataprep. Крім того, вам потрібно буде зібрати докер-образи для мегасервісу ChatQnA та інтерфейсу користувача (розмовний React UI не є обов'язковим). Загалом +є 8 обов'язкових і один необов'язковий докер-образів. + +Докер-образи, необхідні для встановлення прикладу, потрібно збирати локально, проте незабаром Intel викладе ці образи на докер-хаб. + +### Створення/витягування образів мікросервісів + +З папки `GenAIComps`. + +#### Створення образу Dataprep + +```bash +docker build --no-cache -t opea/dataprep-redis:latest --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy -f comps/dataprep/redis/langchain/Dockerfile . +``` + +#### Створення образу для вбудовування + +```bash +docker build --no-cache -t opea/embedding-tei:latest --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy -f comps/embeddings/tei/langchain/Dockerfile . +``` + +#### Створення образу ретривера + +```bash +docker build --no-cache -t opea/retriever-redis:latest --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy -f comps/retrievers/redis/langchain/Dockerfile . +``` + +#### Створення образу переранжування + +```bash +docker build --no-cache -t opea/reranking-tei:latest --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy -f comps/reranks/tei/Dockerfile . +``` + +#### Збірка докера + +Зберіть докер-образ vLLM з підтримкою hpu +``` +docker build --no-cache -t opea/llm-vllm-hpu:latest --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy -f comps/llms/text-generation/vllm/langchain/dependency/Dockerfile.intel_hpu . +``` + +Створення образу vLLM Microservice +``` +docker build --no-cache -t opea/llm-vllm:latest --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy -f comps/llms/text-generation/vllm/langchain/Dockerfile . +cd .. +``` + +```bash +docker build --no-cache -t opea/llm-tgi:latest --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy -f comps/llms/text-generation/tgi/Dockerfile . +``` + +### Побудувати образ TEI Гауді + +Since a TEI Gaudi Docker image hasn't been published, we'll need to build it from the [tei-gaudi](https://github.com/huggingface/tei-gaudi) repository. + +```bash +git clone https://github.com/huggingface/tei-gaudi +cd tei-gaudi/ +docker build --no-cache -f Dockerfile-hpu -t opea/tei-gaudi:latest . +cd .. +``` + +### Створення образів Mega Service + +Мегасервіс - це конвеєр, який передає дані через різні мікросервіси, кожен з яких виконує різні завдання. Ми визначаємо різні +мікросервіси і потік даних між ними у файлі `chatqna.py`, скажімо, у +цьому прикладі вихід мікросервісу вбудовування буде входом мікросервісу пошуку +який, у свою чергу, передасть дані мікросервісу ранжування і так далі. +Ви також можете додавати нові або видаляти деякі мікросервіси і налаштовувати +мегасервіс відповідно до потреб. + +Створення образу мегасервісу для цього варіанту використання + +``` +cd .. +cd GenAIExamples +git checkout tags/v1.0 +cd ChatQnA +``` + +```bash +docker build --no-cache -t opea/chatqna:latest --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy -f Dockerfile . +cd ../.. +``` + +### Створення образів інших сервісів + +Якщо ви хочете увімкнути мікросервіс захисних бар'єрів у трубопроводі, будь ласка, використовуйте наведену нижче команду: + +```bash +cd GenAIExamples/ChatQnA/ +docker build --no-cache -t opea/chatqna-guardrails:latest --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy -f Dockerfile.guardrails . +cd ../.. +``` + +### Створення образу інтерфейсу користувача + +Як вже було сказано, ви можете створити 2 режими інтерфейсу + +*Базовий інтерфейс* + +```bash +cd GenAIExamples/ChatQnA/ui/ +docker build --no-cache -t opea/chatqna-ui:latest --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy -f ./docker/Dockerfile . +cd ../../.. +``` + +*Діалоговий інтерфейс* +Якщо ви хочете отримати розмовний досвід з мегасервісом chatqna. + +```bash +cd GenAIExamples/ChatQnA/ui/ +docker build --no-cache -t opea/chatqna-conversation-ui:latest --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy -f ./docker/Dockerfile.react . +cd ../../.. +``` + +### Перевірка здорового глузду. +Перед тим, як перейти до наступного кроку, перевірте, чи у вас є наведений нижче набір докер-образів: + +* opea/dataprep-redis:latest +* opea/embedding-tei:latest +* opea/retriever-redis:latest +* opea/reranking-tei:latest +* opea/tei-gaudi:latest +* opea/chatqna:latest or opea/chatqna-guardrails:latest +* opea/chatqna:latest +* opea/chatqna-ui:latest +* opea/vllm:latest +* opea/llm-vllm:latest + +* opea/dataprep-redis:latest +* opea/embedding-tei:latest +* opea/retriever-redis:latest +* opea/reranking-tei:latest +* opea/tei-gaudi:latest +* opea/chatqna:latest or opea/chatqna-guardrails:latest +* opea/chatqna-ui:latest +* opea/llm-tgi:latest + +## Налаштування кейсу використання + +Як вже згадувалося, у цьому прикладі використання буде використано наступну комбінацію GenAICompsз інструментами + +|Компоненти кейсу використання | Інструменти | Модель | Тип сервісу | +|---------------- |--------------|-----------------------------|-------| +|Data Prep | LangChain | NA |OPEA Microservice | +|VectorDB | Redis | NA |Open source service| +|Embedding | TEI | BAAI/bge-base-en-v1.5 |OPEA Microservice | +|Reranking | TEI | BAAI/bge-reranker-base | OPEA Microservice | +|LLM | vLLM |Intel/neural-chat-7b-v3-3 |OPEA Microservice | +|UI | | NA | Gateway Service | + +Інструменти і моделі, згадані у таблиці, налаштовуються або через змінну +або через змінну оточення чи файл `compose_vllm.yaml`. + +|Компоненти кейсу використання | Інструменти | Модель | Тип сервісу | +|---------------- |--------------|-----------------------------|-------| +|Data Prep | LangChain | NA |OPEA Microservice | +|VectorDB | Redis | NA |Open source service| +|Embedding | TEI | BAAI/bge-base-en-v1.5 |OPEA Microservice | +|Reranking | TEI | BAAI/bge-reranker-base | OPEA Microservice | +|LLM | TGI | Intel/neural-chat-7b-v3-3|OPEA Microservice | +|UI | | NA | Gateway Service | + +Інструменти і моделі, згадані у таблиці, налаштовуються або через змінну +або через змінну оточення чи файл `compose.yaml`. + +Встановіть необхідні змінні оточення для налаштування варіанту використання + +> Примітка: Замініть `host_ip` на вашу зовнішню IP-адресу. **Не** використовуйте localhost +> для наведеного нижче набору змінних оточення + +### Dataprep + + 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" + +### VectorDB + + export REDIS_URL="redis://${host_ip}:6379" + export INDEX_NAME="rag-redis" + +### Embedding Service + + export EMBEDDING_MODEL_ID="BAAI/bge-base-en-v1.5" + export EMBEDDING_SERVICE_HOST_IP=${host_ip} + export RETRIEVER_SERVICE_HOST_IP=${host_ip} + export TEI_EMBEDDING_ENDPOINT="http://${host_ip}:8090" + export tei_embedding_devices=all + +### Reranking Service + + export RERANK_MODEL_ID="BAAI/bge-reranker-base" + export TEI_RERANKING_ENDPOINT="http://${host_ip}:8808" + export RERANK_SERVICE_HOST_IP=${host_ip} + +### LLM Service + + export LLM_MODEL_ID="Intel/neural-chat-7b-v3-3" + export LLM_SERVICE_HOST_IP=${host_ip} + export LLM_SERVICE_PORT=9000 + export vLLM_LLM_ENDPOINT="http://${host_ip}:8007" + + + export LLM_MODEL_ID="Intel/neural-chat-7b-v3-3" + export LLM_SERVICE_HOST_IP=${host_ip} + export LLM_SERVICE_PORT=9000 + export TGI_LLM_ENDPOINT="http://${host_ip}:8005" + + + export llm_service_devices=all + +### Megaservice + + export MEGA_SERVICE_HOST_IP=${host_ip} + export BACKEND_SERVICE_ENDPOINT="http://${host_ip}:8888/v1/chatqna" + +### Guardrails (optional) +Якщо у трубопроводі увімкнено мікросервіс Guardrails, необхідно встановити наведені нижче змінні оточення. +``` +export GURADRAILS_MODEL_ID="meta-llama/Meta-Llama-Guard-2-8B" +export SAFETY_GUARD_MODEL_ID="meta-llama/Meta-Llama-Guard-2-8B" +export SAFETY_GUARD_ENDPOINT="http://${host_ip}:8088" +export GUARDRAIL_SERVICE_HOST_IP=${host_ip} +``` +## Розгортання кейсу використання + +У цьому посібнику ми будемо розгортати за допомогою docker compose з наданого +YAML-файлу. Інструкції docker compose повинні запустити всі вищезгадані сервіси як контейнери. + +``` +cd GenAIExamples/ChatQnA/docker_compose/intel/hpu/gaudi +docker compose -f compose_vllm.yaml up -d +``` + +``` +cd GenAIExamples/ChatQnA/docker_compose/intel/hpu/gaudi +``` + +Скористайтеся ОДНИМ із наведених нижче способів. +1. Використовуйте TGI для бекенду LLM. + +```bash +docker compose -f compose.yaml up -d +``` + +2. Увімкніть мікросервіс Guardrails у трубопроводі. Він буде використовувати сервіс TGI Guardrails. + +```bash +docker compose -f compose_guardrails.yaml up -d +``` + +### Валідація мікросервісу +#### Перевірка змінних Env +Перевірте журнал запуску за допомогою `docker compose -f ./docker/docker_compose/intel/hpu/gaudi/compose_vllm.yaml logs`. + +Попереджувальні повідомлення виводять змінні, якщо вони **НЕ** задані. + +```bash + ubuntu@xeon-vm:~/GenAIExamples/ChatQnA/docker_compose/intel/hpu/gaudi$ docker compose -f ./compose_vllm.yaml up -d + [+] Running 12/12 + ✔ Network gaudi_default Created 0.1s + ✔ Container tei-embedding-gaudi-server Started 1.3s + ✔ Container vllm-gaudi-server Started 1.3s + ✔ Container tei-reranking-gaudi-server Started 0.8s + ✔ Container redis-vector-db Started 0.7s + ✔ Container reranking-tei-gaudi-server Started 1.7s + ✔ Container retriever-redis-server Started 1.3s + ✔ Container llm-vllm-gaudi-server Started 2.1s + ✔ Container dataprep-redis-server Started 2.1s + ✔ Container embedding-tei-server Started 2.0s + ✔ Container chatqna-gaudi-backend-server Started 2.3s + ✔ Container chatqna-gaudi-ui-server Started 2.6s +``` + +```bash + ubuntu@xeon-vm:~/GenAIExamples/ChatQnA/docker_compose/intel/hpu/gaudi$ docker compose -f ./compose.yaml up -d + [+] Running 12/12 + ✔ Network gaudi_default Created 0.1s + ✔ Container tei-reranking-gaudi-server Started 1.1s + ✔ Container tgi-gaudi-server Started 0.8s + ✔ Container redis-vector-db Started 1.5s + ✔ Container tei-embedding-gaudi-server Started 1.1s + ✔ Container retriever-redis-server Started 2.7s + ✔ Container reranking-tei-gaudi-server Started 2.0s + ✔ Container dataprep-redis-server Started 2.5s + ✔ Container embedding-tei-server Started 2.1s + ✔ Container llm-tgi-gaudi-server Started 1.8s + ✔ Container chatqna-gaudi-backend-server Started 2.9s + ✔ Container chatqna-gaudi-ui-server Started 3.3s +``` + +#### Перевірте статус контейнера + +Перевірте, чи всі контейнери, запущені за допомогою docker compose, запущено + +Наприклад, у прикладі ChatQnA запускається 11 докерів (сервісів), перевірте ці докер-контейнери запущено, тобто всі контейнери `STATUS` мають значення `Up`. +Для швидкої перевірки працездатності спробуйте `docker ps -a`, щоб побачити, чи всі контейнери запущено + +```bash +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +42c8d5ec67e9 opea/chatqna-ui:latest "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:5173->5173/tcp, :::5173->5173/tcp chatqna-gaudi-ui-server +7f7037a75f8b opea/chatqna:latest "python chatqna.py" About a minute ago Up About a minute 0.0.0.0:8888->8888/tcp, :::8888->8888/tcp chatqna-gaudi-backend-server +4049c181da93 opea/embedding-tei:latest "python embedding_te…" About a minute ago Up About a minute 0.0.0.0:6000->6000/tcp, :::6000->6000/tcp embedding-tei-server +171816f0a789 opea/dataprep-redis:latest "python prepare_doc_…" About a minute ago Up About a minute 0.0.0.0:6007->6007/tcp, :::6007->6007/tcp dataprep-redis-server +10ee6dec7d37 opea/llm-vllm:latest "bash entrypoint.sh" About a minute ago Up About a minute 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp llm-vllm-gaudi-server +ce4e7802a371 opea/retriever-redis:latest "python retriever_re…" About a minute ago Up About a minute 0.0.0.0:7000->7000/tcp, :::7000->7000/tcp retriever-redis-server +be6cd2d0ea38 opea/reranking-tei:latest "python reranking_te…" About a minute ago Up About a minute 0.0.0.0:8000->8000/tcp, :::8000->8000/tcp reranking-tei-gaudi-server +cc45ff032e8c opea/tei-gaudi:latest "text-embeddings-rou…" About a minute ago Up About a minute 0.0.0.0:8090->80/tcp, :::8090->80/tcp tei-embedding-gaudi-server +4969ec3aea02 opea/llm-vllm-hpu:latest "/bin/bash -c 'expor…" About a minute ago Up About a minute 0.0.0.0:8007->80/tcp, :::8007->80/tcp vllm-gaudi-server +0657cb66df78 redis/redis-stack:7.2.0-v9 "/entrypoint.sh" About a minute ago Up About a minute 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp, 0.0.0.0:8001->8001/tcp, :::8001->8001/tcp redis-vector-db +684d3e9d204a ghcr.io/huggingface/text-embeddings-inference:cpu-1.2 "text-embeddings-rou…" About a minute ago Up About a minute 0.0.0.0:8808->80/tcp, :::8808->80/tcp tei-reranking-gaudi-server +``` + +```bash +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +0355d705484a opea/chatqna-ui:latest "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 0.0.0.0:5173->5173/tcp, :::5173->5173/tcp chatqna-gaudi-ui-server +29a7a43abcef opea/chatqna:latest "python chatqna.py" 2 minutes ago Up 2 minutes 0.0.0.0:8888->8888/tcp, :::8888->8888/tcp chatqna-gaudi-backend-server +1eb6f5ad6f85 opea/llm-tgi:latest "bash entrypoint.sh" 2 minutes ago Up 2 minutes 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp llm-tgi-gaudi-server +ad27729caf68 opea/reranking-tei:latest "python reranking_te…" 2 minutes ago Up 2 minutes 0.0.0.0:8000->8000/tcp, :::8000->8000/tcp reranking-tei-gaudi-server +84f02cf2a904 opea/dataprep-redis:latest "python prepare_doc_…" 2 minutes ago Up 2 minutes 0.0.0.0:6007->6007/tcp, :::6007->6007/tcp dataprep-redis-server +367459f6e65b opea/embedding-tei:latest "python embedding_te…" 2 minutes ago Up 2 minutes 0.0.0.0:6000->6000/tcp, :::6000->6000/tcp embedding-tei-server +8c78cde9f588 opea/retriever-redis:latest "python retriever_re…" 2 minutes ago Up 2 minutes 0.0.0.0:7000->7000/tcp, :::7000->7000/tcp retriever-redis-server +fa80772de92c ghcr.io/huggingface/tgi-gaudi:2.0.1 "text-generation-lau…" 2 minutes ago Up 2 minutes 0.0.0.0:8005->80/tcp, :::8005->80/tcp tgi-gaudi-server +581687a2cc1a opea/tei-gaudi:latest "text-embeddings-rou…" 2 minutes ago Up 2 minutes 0.0.0.0:8090->80/tcp, :::8090->80/tcp tei-embedding-gaudi-server +c59178629901 redis/redis-stack:7.2.0-v9 "/entrypoint.sh" 2 minutes ago Up 2 minutes 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp, 0.0.0.0:8001->8001/tcp, :::8001->8001/tcp redis-vector-db +5c3a78144498 ghcr.io/huggingface/text-embeddings-inference:cpu-1.5 "text-embeddings-rou…" 2 minutes ago Up 2 minutes 0.0.0.0:8808->80/tcp, :::8808->80/tcp tei-reranking-gaudi-server +``` + +## Взаємодія з розгортанням ChatQnA + +У цьому розділі ви дізнаєтеся про різні способи взаємодії з +розгорнутими мікросервісами + +### Dataprep Microservice(Optional) + +Якщо ви хочете додати або оновити базу знань за замовчуванням, ви можете скористатися командами нижче. Мікросервіс dataprep витягує тексти з різних джерел даних, розбиває дані на частини, вбудовує кожну частину за допомогою мікросервісу embedding і зберігає вбудовані вектори у базі даних векторів redis. + +Завантаження локального файлу `nke-10k-2023.pdf`: + +``` +curl -X POST "http://${host_ip}:6007/v1/dataprep" \ + -H "Content-Type: multipart/form-data" \ + -F "files=@./nke-10k-2023.pdf" +``` + +Ця команда оновлює базу знань, завантажуючи локальний файл для обробки. +Змініть шлях до файлу відповідно до вашого середовища. + +Додайте базу знань через HTTP-посилання: + +``` +curl -X POST "http://${host_ip}:6007/v1/dataprep" \ + -H "Content-Type: multipart/form-data" \ + -F 'link_list=["https://opea.dev"]' +``` + +Ця команда оновлює базу знань, надсилаючи список HTTP-посилань для обробки. + +Крім того, ви можете отримати список файлів, які ви завантажили: + +``` +curl -X POST "http://${host_ip}:6007/v1/dataprep/get_file" \ + -H "Content-Type: application/json" + +``` + +Щоб видалити завантажений вами файл/посилання, ви можете скористатися наступними командами: + +#### Видалення посилання +``` +# Сервіс dataprep додасть постфікс .txt до файлу посилання + +curl -X POST "http://${host_ip}:6007/v1/dataprep/delete_file" \ + -d '{"file_path": "https://opea.dev.txt"}' \ + -H "Content-Type: application/json" +``` + +#### Видалення файлу + +``` +curl -X POST "http://${host_ip}:6007/v1/dataprep/delete_file" \ + -d '{"file_path": "nke-10k-2023.pdf"}' \ + -H "Content-Type: application/json" +``` + +#### Видалення всіх завантажених файлів і посилань + +``` +curl -X POST "http://${host_ip}:6007/v1/dataprep/delete_file" \ + -d '{"file_path": "all"}' \ + -H "Content-Type: application/json" +``` + +### TEI Embedding Service + +Сервіс вбудовування TEI приймає на вхід рядок, вбудовує його у вектор певної довжини, визначеної моделлю вбудовування, і повертає цей вкладений вектор. + +``` +curl ${host_ip}:8090/embed \ + -X POST \ + -d '{"inputs":"What is Deep Learning?"}' \ + -H 'Content-Type: application/json' +``` + +У цьому прикладі використовується модель вбудовування «BAAI/bge-base-en-v1.5», яка має розмір вектора 768. Отже, результатом виконання команди curl буде вбудований вектор довжиною 768. + +### Embedding Microservice +Мікросервіс вбудовування залежить від сервісу вбудовування TEI. З точки зору +вхідних параметрів, він приймає рядок, вбудовує його у вектор за допомогою вбудовування TEI, додає інші параметри за замовчуванням, необхідні для мікросервісу пошуку і повертає його. + +``` +curl http://${host_ip}:6000/v1/embeddings\ + -X POST \ + -d '{"text":"hello"}' \ + -H 'Content-Type: application/json' +``` +### Retriever Microservice + +Щоб споживати мікросервіс retriever, потрібно згенерувати mock embedding +вектор за допомогою Python-скрипту. Довжина вектора вбудовування визначається +моделлю вбудовування. Тут ми використовуємо модель EMBEDDING_MODEL_ID=«BAAI/bge-base-en-v1.5», розмір вектора якої становить 768. + +Перевірте векторну розмірність вашої моделі вбудовування і встановіть +розмірність `your_embedding` дорівнює їй. + +``` +export your_embedding=$(python3 -c "import random; embedding = [random.uniform(-1, 1) for _ in range(768)]; print(embedding)") + +curl http://${host_ip}:7000/v1/retrieval \ + -X POST \ + -d "{\"text\":\"test\",\"embedding\":${your_embedding}}" \ + -H 'Content-Type: application/json' +``` + +Вихід мікросервісу ретрівера складається з унікального ідентифікатора для +запиту, початкового запиту або вхідного запиту до мікросервісу пошуку, списку top +`n` знайдених документів, що відповідають вхідному запиту, та top_n, де n позначає +кількість документів, що мають бути повернуті. + +На виході отримується текст, який відповідає вхідним даним: +``` +{"id":"27210945c7c6c054fa7355bdd4cde818","retrieved_docs":[{"id":"0c1dd04b31ab87a5468d65f98e33a9f6","text":"Company: Nike. financial instruments are subject to master netting arrangements that allow for the offset of assets and liabilities in the event of default or early termination of the contract.\nAny amounts of cash collateral received related to these instruments associated with the Company's credit-related contingent features are recorded in Cash and\nequivalents and Accrued liabilities, the latter of which would further offset against the Company's derivative asset balance. Any amounts of cash collateral posted related\nto these instruments associated with the Company's credit-related contingent features are recorded in Prepaid expenses and other current assets, which would further\noffset against the Company's derivative liability balance. Cash collateral received or posted related to the Company's credit-related contingent features is presented in the\nCash provided by operations component of the Consolidated Statements of Cash Flows. The Company does not recognize amounts of non-cash collateral received, such\nas securities, on the Consolidated Balance Sheets. For further information related to credit risk, refer to Note 12 — Risk Management and Derivatives.\n2023 FORM 10-K 68Table of Contents\nThe following tables present information about the Company's derivative assets and liabilities measured at fair value on a recurring basis and indicate the level in the fair\nvalue hierarchy in which the Company classifies the fair value measurement:\nMAY 31, 2023\nDERIVATIVE ASSETS\nDERIVATIVE LIABILITIES"},{"id":"1d742199fb1a86aa8c3f7bcd580d94af","text": ... } + +``` + +### TEI Reranking Service + +Сервіс переранжування TEI переранжує документи, повернуті пошуковою службою +сервісом. Вона споживає запит і список документів і повертає індекс документа на основі убування показника схожості. Документ +що відповідає повернутому індексу з найбільшою оцінкою, є найбільш релевантним для вхідного запиту. +``` +curl http://${host_ip}:8808/rerank \ + -X POST \ + -d '{"query":"What is Deep Learning?", "texts": ["Deep Learning is not...", "Deep learning is..."]}' \ + -H 'Content-Type: application/json' +``` + +Вивід: `[{"index":1,"score":0.9988041},{"index":0,"score":0.022948774}]` + + +### Reranking Microservice + +Мікросервіс переранжування використовує сервіс переранжування TEI і підставляє у відповідь параметрами за замовчуванням, необхідними для мікросервісу LLM. + +``` +curl http://${host_ip}:8000/v1/reranking \ + -X POST \ + -d '{"initial_query":"What is Deep Learning?", "retrieved_docs": [{"text":"Deep Learning is not..."}, {"text":"Deep learning is..."}]}' \ + -H 'Content-Type: application/json' +``` + +Вхідними даними для мікросервісу є `initial_query` і список знайдених +документів, і він виводить найбільш релевантний документ до початкового запиту разом з іншими параметрами за замовчуванням, такими як температура, `repetition_penalty`, `chat_template` і так далі. Ми також можемо отримати перші n документів, задавши `top_n` як один із вхідних параметрів. +Наприклад: + +``` +curl http://${host_ip}:8000/v1/reranking \ + -X POST \ + -d '{"initial_query":"What is Deep Learning?" ,"top_n":2, "retrieved_docs": [{"text":"Deep Learning is not..."}, {"text":"Deep learning is..."}]}' \ + -H 'Content-Type: application/json' +``` + +Ось результат: + +``` +{"id":"e1eb0e44f56059fc01aa0334b1dac313","query":"Human: Answer the question based only on the following context:\n Deep learning is...\n Question: What is Deep Learning?","max_new_tokens":1024,"top_k":10,"top_p":0.95,"typical_p":0.95,"temperature":0.01,"repetition_penalty":1.03,"streaming":true} + +``` +Ви можете помітити, що мікросервіси ранжування мають стан ('ID' та інші метадані), в той час як сервіс переранжування не має. + +### LLM Service + +``` +curl http://${host_ip}:8007/v1/completions \ + -H "Content-Type: application/json" \ + -d '{ + "model": "Intel/neural-chat-7b-v3-3", + "prompt": "What is Deep Learning?", + "max_tokens": 32, + "temperature": 0 + }' +``` + +Сервіс vLLM згенерує текст для підказки введення. Ось очікуваний результат +від vllm: + +``` +{"id":"cmpl-be8e1d681eb045f082a7b26d5dba42ff","object":"text_completion","created":1726269914,"model":"Intel/neural-chat-7b-v3-3","choices":[{"index":0,"text":"\n\nDeep Learning is a subset of Machine Learning that is concerned with algorithms inspired by the structure and function of the brain. It is a part of Artificial","logprobs":null,"finish_reason":"length","stop_reason":null}],"usage":{"prompt_tokens":6,"total_tokens":38,"completion_tokens":32}}d +``` + +**Примітка**: Після запуску vLLM серверу vLLM потрібно кілька хвилин для завантаження LLM моделі та прогрів. + +``` +curl http://${host_ip}:8005/generate \ + -X POST \ + -d '{"inputs":"What is Deep Learning?","parameters":{"max_new_tokens":64, "do_sample": true}}' \ + -H 'Content-Type: application/json' +``` + +Сервіс TGI генерує текст для підказки введення. Ось очікуваний результат від TGI: + +``` +{"generated_text":"Artificial Intelligence (AI) has become a very popular buzzword in the tech industry. While the phrase conjures images of sentient robots and self-driving cars, our current AI landscape is much more subtle. In fact, it most often manifests in the forms of algorithms that help recognize the faces of"} +``` + +**Примітка**: Після запуску TGI серверу TGI потрібно кілька хвилин, щоб завантажити модель LLM і прогрітися. + +Якщо ви отримали +``` +curl: (7) Failed to connect to 100.81.104.168 port 8008 after 0 ms: Connection refused +``` + +і журнал показує, що модель прогрівається, будь ласка, зачекайте деякий час і спробуйте пізніше. + +``` +2024-06-05T05:45:27.707509646Z 2024-06-05T05:45:27.707361Z WARN text_generation_router: router/src/main.rs:357: `--revision` is not set +2024-06-05T05:45:27.707539740Z 2024-06-05T05:45:27.707379Z WARN text_generation_router: router/src/main.rs:358: We strongly advise to set it to a known supported commit. +2024-06-05T05:45:27.852525522Z 2024-06-05T05:45:27.852437Z INFO text_generation_router: router/src/main.rs:379: Serving revision bdd31cf498d13782cc7497cba5896996ce429f91 of model Intel/neural-chat-7b-v3-3 +2024-06-05T05:45:27.867833811Z 2024-06-05T05:45:27.867759Z INFO text_generation_router: router/src/main.rs:221: Warming up model + +``` + +### LLM Microservice + +``` +curl http://${host_ip}:9000/v1/chat/completions \ + -X POST \ + -d '{"query":"What is Deep Learning?","max_new_tokens":17,"top_k":10,"top_p":0.95,"typical_p":0.95,"temperature":0.01,"repetition_penalty":1.03,"streaming":true}' \ + -H 'Content-Type: application/json' +``` + +Ви отримаєте згенерований текст від LLM: + +``` +data: b'\n' +data: b'\n' +data: b'Deep' +data: b' Learning' +data: b' is' +data: b' a' +data: b' subset' +data: b' of' +data: b' Machine' +data: b' Learning' +data: b' that' +data: b' is' +data: b' concerned' +data: b' with' +data: b' algorithms' +data: b' inspired' +data: b' by' +data: [DONE] +``` + +### MegaService + +``` +curl http://${host_ip}:8888/v1/chatqna -H "Content-Type: application/json" -d '{ + "model": "Intel/neural-chat-7b-v3-3", + "messages": "What is the revenue of Nike in 2023?" + }' +``` + +Ось результат для вашого посилання: + +``` +data: b'\n' +data: b'An' +data: b'swer' +data: b':' +data: b' In' +data: b' fiscal' +data: b' ' +data: b'2' +data: b'0' +data: b'2' +data: b'3' +data: b',' +data: b' N' +data: b'I' +data: b'KE' +data: b',' +data: b' Inc' +data: b'.' +data: b' achieved' +data: b' record' +data: b' Rev' +data: b'en' +data: b'ues' +data: b' of' +data: b' $' +data: b'5' +data: b'1' +data: b'.' +data: b'2' +data: b' billion' +data: b'.' +data: b'' +data: [DONE] +``` + +#### Guardrail Microservice +Якщо ви увімкнули мікросервіс Guardrail, зверніться до нього за допомогою наведеної нижче команди curl + +``` +curl http://${host_ip}:9090/v1/guardrails\ + -X POST \ + -d '{"text":"How do you buy a tiger in the US?","parameters":{"max_new_tokens":32}}' \ + -H 'Content-Type: application/json' +``` + +## Запуск інтерфейсу користувача +### Базовий інтерфейс +To access the frontend, open the following URL in your browser: http://{host_ip}:5173. By default, the UI runs on port 5173 internally. If you prefer to use a different host port to access the frontend, you can modify the port mapping in the compose.yaml file as shown below: +```bash + chaqna-gaudi-ui-server: + image: opea/chatqna-ui:latest + ... + ports: + - "80:5173" +``` + +### Діалоговий інтерфейс +Щоб отримати доступ до діалогового інтерфейсу (заснованого на реакції), змініть службу інтерфейсу у файлі compose.yaml. Замініть службу chaqna-gaudi-ui-server на службу chatqna-gaudi-conversation-ui-server, як показано у конфігурації нижче: +```bash +chaqna-gaudi-conversation-ui-server: + image: opea/chatqna-conversation-ui:latest + container_name: chatqna-gaudi-conversation-ui-server + environment: + - APP_BACKEND_SERVICE_ENDPOINT=${BACKEND_SERVICE_ENDPOINT} + - APP_DATA_PREP_SERVICE_URL=${DATAPREP_SERVICE_ENDPOINT} + ports: + - "5174:80" + depends_on: + - chaqna-gaudi-backend-server + ipc: host + restart: always +``` +Після запуску служб відкрийте у браузері наступну URL-адресу: http://{host_ip}:5174. За замовчуванням інтерфейс працює на внутрішньому порту 80. Якщо ви бажаєте використовувати інший порт хоста для доступу до інтерфейсу, ви можете змінити мапінг портів у файлі compose.yaml, як показано нижче: +``` + chaqna-gaudi-conversation-ui-server: + image: opea/chatqna-conversation-ui:latest + ... + ports: + - "80:80" +``` + +## Перевірка журналу докер-контейнера + +Перевірте журнал контейнера: + +`docker logs -t` + + +Перевірте журнал `docker logs f7a08f9867f9 -t`. + +``` +2024-06-05T01:30:30.695934928Z error: a value is required for '--model-id ' but none was supplied +2024-06-05T01:30:30.697123534Z +2024-06-05T01:30:30.697148330Z For more information, try '--help'. + +``` + +Журнал показує, що `MODEL_ID` не встановлено. + +Переглянути вхідні параметри докера можна у файлі `./ChatQnA/docker_compose/intel/hpu/gaudi/compose_vllm.yaml`. + +```yaml + vllm-service: + image: ${REGISTRY:-opea}/llm-vllm-hpu:${TAG:-latest} + container_name: vllm-gaudi-server + ports: + - "8007:80" + volumes: + - "./data:/data" + environment: + no_proxy: ${no_proxy} + http_proxy: ${http_proxy} + https_proxy: ${https_proxy} + HF_TOKEN: ${HUGGINGFACEHUB_API_TOKEN} + HABANA_VISIBLE_DEVICES: all + OMPI_MCA_btl_vader_single_copy_mechanism: none + LLM_MODEL_ID: ${LLM_MODEL_ID} + runtime: habana + cap_add: + - SYS_NICE + ipc: host + command: /bin/bash -c "export VLLM_CPU_KVCACHE_SPACE=40 && python3 -m vllm.entrypoints.openai.api_server --enforce-eager --model $LLM_MODEL_ID --tensor-parallel-size 1 --host 0.0.0.0 --port 80 --block-size 128 --max-num-seqs 256 --max-seq_len-to-capture 2048" +``` + +Переглянути вхідні параметри докера можна у файлі `./ChatQnA/docker_compose/intel/hpu/gaudi/compose.yaml` + +```yaml + tgi-service: + image: ghcr.io/huggingface/tgi-gaudi:2.0.1 + container_name: tgi-gaudi-server + ports: + - "8005:80" + volumes: + - "./data:/data" + environment: + no_proxy: ${no_proxy} + http_proxy: ${http_proxy} + https_proxy: ${https_proxy} + HF_TOKEN: ${HUGGINGFACEHUB_API_TOKEN} + HF_HUB_DISABLE_PROGRESS_BARS: 1 + HF_HUB_ENABLE_HF_TRANSFER: 0 + HABANA_VISIBLE_DEVICES: ${llm_service_devices} + OMPI_MCA_btl_vader_single_copy_mechanism: none + runtime: habana + cap_add: + - SYS_NICE + ipc: host + command: --model-id ${LLM_MODEL_ID} --max-input-length 1024 --max-total-tokens 2048 +``` + +Вхідним значенням `MODEL_ID` є `${LLM_MODEL_ID}`. + +Перевірте, щоб змінна оточення `LLM_MODEL_ID` була встановлена коректно, з правильним написанням. +Встановіть `LLM_MODEL_ID` і перезапустіть контейнери. + +Також ви можете перевірити загальний журнал за допомогою наступної команди, де +compose.yaml - це файл конфігурації мегасервісу docker-compose. + +``` +docker compose -f ./docker_compose/intel/hpu/gaudi/compose_vllm.yaml logs +``` + +``` +docker compose -f ./docker_compose/intel/hpu/gaudi/compose.yaml logs +``` + +## Запуск інтерфейсу користувача + +### Базовий інтерфейс + +Щоб отримати доступ до інтерфейсу, відкрийте в браузері наступну URL-адресу: http://{host_ip}:5173. За замовчуванням інтерфейс працює на внутрішньому порту 5173. Якщо ви бажаєте використовувати інший порт хоста для доступу до інтерфейсу, ви можете змінити мапінг портів у файлі compose.yaml, як показано нижче: +``` + chaqna-gaudi-ui-server: + image: opea/chatqna-ui:latest + ... + ports: + - "80:5173" +``` + +### Діалоговий інтерфейс + +Щоб отримати доступ до розмовного інтерфейсу (заснованого на реакції), змініть службу інтерфейсу у файлі compose.yaml. Замініть службу chaqna-gaudi-ui-server на службу chatqna-gaudi-conversation-ui-server, як показано у конфігурації нижче: +``` +chaqna-gaudi-conversation-ui-server: + image: opea/chatqna-conversation-ui:latest + container_name: chatqna-gaudi-conversation-ui-server + environment: + - APP_BACKEND_SERVICE_ENDPOINT=${BACKEND_SERVICE_ENDPOINT} + - APP_DATA_PREP_SERVICE_URL=${DATAPREP_SERVICE_ENDPOINT} + ports: + - "5174:80" + depends_on: + - chaqna-gaudi-backend-server + ipc: host + restart: always +``` + +Після запуску служб відкрийте у браузері наступну URL-адресу: http://{host_ip}:5174. За замовчуванням інтерфейс працює на внутрішньому порту 80. Якщо ви бажаєте використовувати інший порт хоста для доступу до інтерфейсу, ви можете змінити мапінг портів у файлі compose.yaml, як показано нижче: + +``` + chaqna-gaudi-conversation-ui-server: + image: opea/chatqna-conversation-ui:latest + ... + ports: + - "80:80" +``` + +### Зупинити роботу сервісів + +Після того, як ви закінчите роботу з усім трубопроводом і захочете зупинитися і видалити всі контейнери, скористайтеся командою, наведеною нижче: + +``` +docker compose -f compose_vllm.yaml down +``` + +``` +docker compose -f compose.yaml down +``` diff --git a/docs-ua/examples/ChatQnA/deploy/nvidia.md b/docs-ua/examples/ChatQnA/deploy/nvidia.md new file mode 100644 index 00000000..2ad65517 --- /dev/null +++ b/docs-ua/examples/ChatQnA/deploy/nvidia.md @@ -0,0 +1,649 @@ +# Розгортання на одному вузлі з TGI на графічному процесорі Nvidia + +У цьому розділі розгортання описано одновузлове попереднє розгортання ChatQnA +на прикладі комп'ютерів OPEA для розгортання за допомогою служби TGI. Існує декілька +slice-n-dice способів увімкнути RAG з моделями vectordb і LLM, але тут ми +розглянемо один варіант для зручності: ми покажемо, як +побудувати e2e chatQnA з Redis VectorDB та моделлю neural-chat-7b-v3-3, +розгорнуту на on-prem. Якщо у вас немає екземпляра IDC, ви можете пропустити цей крок +крок і переконайтеся, що всі метрики (***system level validation***), такі як версії докерів, враховано. + +## Огляд + +Існує декілька способів створити варіант використання ChatQnA. У цьому підручнику ми розглянемо, як увімкнути наведений нижче список мікросервісів з OPEA +GenAIComps для розгортання одновузлового рішення vLLM або мегасервісу TGI. + +1. Підготовка даних +2. Вбудовування +3. Ретривер +4. Переранжування +5. LLM з TGI + +Рішення має на меті показати, як використовувати Redis vectordb для RAG і +neural-chat-7b-v3-3 на графічному процесорі Nvidia. Ми розглянемо +як налаштувати докер-контейнер для запуску мікросервісів і мегасервісів. Рішення +рішення буде використовувати зразок набору даних Nike у форматі PDF. Користувачі +можуть задати питання про Nike і отримати відповідь у вигляді чату за замовчуванням для до 1024 токенів. Рішення розгортається за допомогою інтерфейсу користувача. Існує 2 режими, які ви можете +використовувати: + +1. Базовий користувацький інтерфейс +2. Діалоговий користувацький інтерфейс + +Діалоговий інтерфейс не є обов'язковим, але підтримується в цьому прикладі, якщо ви зацікавлені у використанні. + +## Передумови + +Першим кроком є клонування GenAIExamples і GenAIComps. GenAIComps - це +основні необхідні компоненти, що використовуються для створення прикладів, які ви знайдете в GenAIExamples і розгортання їх як мікросервісів. + +``` +git clone https://github.com/opea-project/GenAIComps.git +git clone https://github.com/opea-project/GenAIExamples.git +``` + +Перевірте тег релізу +``` +cd GenAIComps +git checkout tags/v1.0 +``` + +У прикладах використовуються ваги моделей з HuggingFace і langchain. + +Налаштуйте свій обліковий запис [HuggingFace](https://huggingface.co/) і згенеруйте +[user access token](https://huggingface.co/docs/transformers.js/en/guides/private#step-1-generating-a-user-access-token). + +Налаштування токена HuggingFace +``` +export HUGGINGFACEHUB_API_TOKEN="Your_Huggingface_API_Token" +``` + +У прикладі потрібно встановити `host_ip` для розгортання мікросервісів на +кінцевому пристрої з увімкненими портами. Встановіть змінну host_ip env +``` +export host_ip=$(hostname -I | awk '{print $1}') +``` + +Переконайтеся, що ви налаштували проксі-сервери, якщо ви перебуваєте за брандмауером +``` +export no_proxy=${your_no_proxy},$host_ip +export http_proxy=${your_http_proxy} +export https_proxy=${your_http_proxy} +``` + +## Підготовка (створення / витягування) образів Docker + +Цей крок передбачає створення/витягування (можливо, у майбутньому) відповідних докер-образів з покроковим описом процесу та перевіркою працездатності в кінці. +Для ChatQnA знадобляться такі докер-образи: embedding, retriever, +rerank, LLM і dataprep. Крім того, вам потрібно буде зібрати докер-образи і для +мегасервісу ChatQnA та інтерфейсу користувача ( діалоговий React UI не є обов'язковим). Загалом є 8 обов'язкових і один необов'язковий докер-образів. + +Докер-образи, необхідні для встановлення прикладу, потрібно збирати локально, проте +образи будуть незабаром викладені на docker hub від Intel. + +### Створення/витягування образів мікросервісів + +З папки `GenAIComps`. + +#### Build Dataprep Image + +``` +docker build --no-cache -t opea/dataprep-redis:latest --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy -f comps/dataprep/redis/langchain/Dockerfile . +``` + +#### Build Embedding Image + +``` +docker build --no-cache -t opea/embedding-tei:latest --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy -f comps/embeddings/tei/langchain/Dockerfile . +``` + +#### Build Retriever Image + +``` + docker build --no-cache -t opea/retriever-redis:latest --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy -f comps/retrievers/redis/langchain/Dockerfile . +``` + +#### Build Rerank Image + +``` +docker build --no-cache -t opea/reranking-tei:latest --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy -f comps/reranks/tei/Dockerfile . +``` + +#### Build LLM Image + +``` +docker build --no-cache -t opea/llm-tgi:latest --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy -f comps/llms/text-generation/tgi/Dockerfile . +``` + +### Створення образів Mega Service + +Мегасервіс - це трубопровід, який передає дані через різні мікросервіси, кожен з яких виконує різні завдання. Ми визначаємо різні +мікросервіси і потік даних між ними у файлі `chatqna.py`, скажімо, у +цьому прикладі вихід мікросервісу вбудовування буде входом мікросервісу пошуку +який, у свою чергу, передасть дані мікросервісу ранжування і так далі. +Ви також можете додавати нові або видаляти деякі мікросервіси і налаштовувати +мегасервіс відповідно до ваших потреб. + +Створіть образ мегасервісу для цього варіанту використання + +``` +cd .. +cd GenAIExamples/ChatQnA +git checkout tags/v1.0 +``` + +``` +docker build --no-cache -t opea/chatqna:latest --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy -f Dockerfile . +``` + +### Створення образів інших сервісів + +#### Створення образу інтерфейсу користувача + +Як вже було сказано, ви можете створити 2 режими користувацького інтерфейсу + +*Базовий інтерфейс* + +``` +cd GenAIExamples/ChatQnA/ui/ +docker build --no-cache -t opea/chatqna-ui:latest --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy -f ./docker/Dockerfile . +``` + +*Діалоговий інтерфейс* +If you want a conversational experience with chatqna megaservice. + +``` +cd GenAIExamples/ChatQnA/ui/ +docker build --no-cache -t opea/chatqna-conversation-ui:latest --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy -f ./docker/Dockerfile.react . +``` + +### Перевірка здорового глузду. +Перед тим, як перейти до наступного кроку, перевірте, чи у вас є наведений нижче набір докер-образів: + +* opea/dataprep-redis:latest +* opea/embedding-tei:latest +* opea/retriever-redis:latest +* opea/reranking-tei:latest +* opea/chatqna:latest +* opea/chatqna-ui:latest +* opea/llm-tgi:latest + +## Налаштування кейсу використання + +Як вже згадувалося, у цьому прикладі використання буде використано наступну комбінацію GenAIComps +з інструментами + +|компоненти кейсу використання | Інструменти | Модель | Тип сервісу | +|---------------- |--------------|-----------------------------|-------| +|Data Prep | LangChain | NA |OPEA Microservice | +|VectorDB | Redis | NA |Open source service| +|Embedding | TEI | BAAI/bge-base-en-v1.5 |OPEA Microservice | +|Reranking | TEI | BAAI/bge-reranker-base | OPEA Microservice | +|LLM | TGI |Intel/neural-chat-7b-v3-3 |OPEA Microservice | +|UI | | NA | Gateway Service | + +Інструменти та моделі, згадані у таблиці, налаштовуються або через змінну +змінну оточення або через файл `compose.yaml`. + +Встановіть необхідні змінні оточення для налаштування варіанту використання + +> Примітка: Замініть `host_ip` на вашу зовнішню IP-адресу. Не використовуйте +> localhost для наведеного нижче набору змінних оточення + +### Dataprep + + 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" + +### VectorDB + + export REDIS_URL="redis://${host_ip}:6379" + export INDEX_NAME="rag-redis" + +### Embedding Service + + export EMBEDDING_MODEL_ID="BAAI/bge-base-en-v1.5" + export EMBEDDING_SERVICE_HOST_IP=${host_ip} + export RETRIEVER_SERVICE_HOST_IP=${host_ip} + export TEI_EMBEDDING_ENDPOINT="http://${host_ip}:8090" + +### Reranking Service + + export RERANK_MODEL_ID="BAAI/bge-reranker-base" + export TEI_RERANKING_ENDPOINT="http://${host_ip}:8808" + export RERANK_SERVICE_HOST_IP=${host_ip} + +### LLM Service + + export LLM_MODEL_ID="Intel/neural-chat-7b-v3-3" + export LLM_SERVICE_HOST_IP=${host_ip} + export LLM_SERVICE_PORT=9000 + export TGI_LLM_ENDPOINT="http://${host_ip}:8008" + +### Megaservice + + export MEGA_SERVICE_HOST_IP=${host_ip} + export BACKEND_SERVICE_ENDPOINT="http://${host_ip}:8888/v1/chatqna" + +## Розгортання кейсу використання + +У цьому підручнику ми будемо розгортати за допомогою docker compose з наданого +YAML-файлу. Інструкції docker compose повинні запустити всі вищезгадані сервіси як контейнери. + +``` +cd GenAIExamples/ChatQnA/docker_compose/nvidia/gpu/ +docker compose -f compose.yaml up -d +``` + +### Валідація мікросервісу +#### Перевірка змінних Env +Перевірте журнал запуску за допомогою `docker compose -f ./compose.yaml logs`. +Попереджувальні повідомлення виводять змінні, якщо їх **НЕ** встановлено. + + ubuntu@nvidia-vm:~/GenAIExamples/ChatQnA/docker_compose/nvidia/gpu$ docker compose -f ./compose.yaml up -d + WARN[0000] The "LANGCHAIN_API_KEY" variable is not set. Defaulting to a blank string. + WARN[0000] The "LANGCHAIN_TRACING_V2" variable is not set. Defaulting to a blank string. + WARN[0000] The "LANGCHAIN_API_KEY" variable is not set. Defaulting to a blank string. + WARN[0000] The "LANGCHAIN_TRACING_V2" variable is not set. Defaulting to a blank string. + WARN[0000] The "LANGCHAIN_API_KEY" variable is not set. Defaulting to a blank string. + WARN[0000] The "LANGCHAIN_TRACING_V2" variable is not set. Defaulting to a blank string. + WARN[0000] The "LANGCHAIN_API_KEY" variable is not set. Defaulting to a blank string. + WARN[0000] The "LANGCHAIN_TRACING_V2" variable is not set. Defaulting to a blank string. + WARN[0000] /home/ubuntu/GenAIExamples/ChatQnA/docker_compose/nvidia/gpu/compose.yaml: `version` is obsolete + +#### Перевірте статус контейнера + +Перевірте, чи всі контейнери, запущені за допомогою docker compose, запущено + +Наприклад, у прикладі ChatQnA запускається 11 докерів (сервісів), перевірте ці докер-контейнери запущено, тобто всі контейнери `STATUS` мають значення `Up`. +Для швидкої перевірки працездатності спробуйте `docker ps -a`, щоб побачити, чи всі контейнери запущено + +| CONTAINER ID | IMAGE | COMMAND | CREATED | STATUS | PORTS | NAMES| +|--------------|-------|---------|---------|--------|-------|------| +| 3b5fa9a722da | opea/chatqna-ui:latest | "docker-entrypoint.s…" | 32 hours ago |Up 2 hours | 0.0.0.0:5173->5173/tcp, :::5173->5173/tcp | chatqna-xeon-ui-server +d3b37f3d1faa | opea/chatqna:latest | "python chatqna.py" | 32 hours ago | Up 2 hours | 0.0.0.0:8888->8888/tcp, :::8888->8888/tcp | chatqna-xeon-backend-server +| b3e1388fa2ca | opea/reranking-tei:latest | "python reranking_te…" | 32 hours ago | Up 2 hours | 0.0.0.0:8000->8000/tcp, :::8000->8000/tcp | reranking-tei-xeon-server +| 24a240f8ad1c |opea/retriever-redis:latest | "python retriever_re…" | 32 hours ago | Up 2 hours | 0.0.0.0:7000->7000/tcp, :::7000->7000/tcp | retriever-redis-server +| 9c0d2a2553e8| opea/embedding-tei:latest | "python embedding_te…" | 32 hours ago | Up 2 hours |0.0.0.0:6000->6000/tcp, :::6000->6000/tcp |embedding-tei-server +|24cae0db1a70 | opea/llm-tgi:latest | "bash entrypoint.sh" | 32 hours ago | Up 2 hours | 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp | llm-tgi-server +| ea3986c3cf82 | opea/dataprep-redis:latest | "python prepare_doc_…" | 32 hours ago | Up 2 hours | 0.0.0.0:6007->6007/tcp, :::6007->6007/tcp | dataprep-redis-server +| e10dd14497a8 | redis/redis-stack:7.2.0-v9 | "/entrypoint.sh" | 32 hours ago | Up 2 hours | 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp, 0.0.0.0:8001->8001/tcp, :::8001->8001/tcp| redis-vector-db +| 79276cf45a47 | ghcr.io/huggingface/text-embeddings-inference:cpu-1.2| "text-embeddings-rou…" | 32 hours ago | Up 2 hours | 0.0.0.0:8090->80/tcp, :::8090->80/tcp | tei-embedding-server +| 4943e5f6cd80 | ghcr.io/huggingface/text-embeddings-inference:cpu-1.2 | "text-embeddings-rou…" | 32 hours ago |Up 2 hours | 0.0.0.0:8808->80/tcp, :::8808->80/tcp | tei-reranking-server + +## Взаємодія з розгортанням ChatQnA + +У цьому розділі ви дізнаєтеся про різні способи взаємодії з +розгорнутими мікросервісами + +### Dataprep Microservice (необов'язковий) + +Якщо ви хочете додати або оновити базу знань за замовчуванням, ви можете скористатися такими командами. Мікросервіс dataprep витягує тексти з різних джерел даних, розбиває дані на частини, вбудовує кожну частину за допомогою мікросервісу embedding і зберігає вбудовані вектори у базі даних векторів redis. + +Завантажити локальний файл `nke-10k-2023.pdf` : + +``` +curl -X POST "http://${host_ip}:6007/v1/dataprep" \ + -H "Content-Type: multipart/form-data" \ + -F "files=@./nke-10k-2023.pdf" +``` + +Ця команда оновлює базу знань, завантажуючи локальний файл для обробки. +Змініть шлях до файлу відповідно до вашого середовища. + +Додайте базу знань за допомогою HTTP-посилань: + +``` +curl -X POST "http://${host_ip}:6007/v1/dataprep" \ + -H "Content-Type: multipart/form-data" \ + -F 'link_list=["https://opea.dev"]' +``` + +Ця команда оновлює базу знань, надсилаючи список HTTP-посилань для обробки. + +Крім того, ви можете отримати список файлів, які ви завантажили: + +``` +curl -X POST "http://${host_ip}:6007/v1/dataprep/get_file" \ + -H "Content-Type: application/json" + +``` + +Щоб видалити завантажений вами файл/посилання, ви можете скористатися наступними командами: + +#### Видалення посилання +``` +# Сервіс dataprep додасть постфікс .txt до файлу посилання + +curl -X POST "http://${host_ip}:6007/v1/dataprep/delete_file" \ + -d '{"file_path": "https://opea.dev.txt"}' \ + -H "Content-Type: application/json" +``` + +#### Видалення файлу + +``` +curl -X POST "http://${host_ip}:6007/v1/dataprep/delete_file" \ + -d '{"file_path": "nke-10k-2023.pdf"}' \ + -H "Content-Type: application/json" +``` + +#### Видалення всіх завантажених файлів і посилань + +``` +curl -X POST "http://${host_ip}:6007/v1/dataprep/delete_file" \ + -d '{"file_path": "all"}' \ + -H "Content-Type: application/json" +``` +### Сервіс вбудовування TEI + +Сервіс вбудовування TEI приймає на вхід рядок, вбудовує його у вектор певної довжини, визначеної моделлю вбудовування, і повертає цей вкладений вектор. + +``` +curl ${host_ip}:8090/embed \ + -X POST \ + -d '{"inputs":"What is Deep Learning?"}' \ + -H 'Content-Type: application/json' +``` + +У цьому прикладі використовується модель вбудовування «BAAI/bge-base-en-v1.5», яка має розмір вектора 768. Отже, на виході команди curl ми отримаємо вбудований вектор +довжиною 768. + +### Мікросервіс Вбудовування +Мікросервіс вбудовування залежить від сервісу вбудовування TEI. З точки зору +вхідних параметрів, він приймає рядок, вбудовує його у вектор за допомогою вбудовування TEI, додає інші параметри за замовчуванням, необхідні для мікросервісу пошуку і повертає його. + +``` +curl http://${host_ip}:6000/v1/embeddings\ + -X POST \ + -d '{"text":"hello"}' \ + -H 'Content-Type: application/json' +``` +### Мікросервіс ретриверів + +Щоб споживати мікросервіс retriever, потрібно згенерувати mock embedding +вектор за допомогою Python-скрипту. Довжина вектора вбудовування визначається +моделлю вбудовування. Тут ми використовуємо модель EMBEDDING_MODEL_ID=«BAAI/bge-base-en-v1.5», розмір вектора якої дорівнює 768. + +Перевірте векторну розмірність вашої моделі вбудовування і встановіть +розмірність `your_embedding` рівній їй. + +``` +export your_embedding=$(python3 -c "import random; embedding = [random.uniform(-1, 1) for _ in range(768)]; print(embedding)") + +curl http://${host_ip}:7000/v1/retrieval \ + -X POST \ + -d "{\"text\":\"test\",\"embedding\":${your_embedding}}" \ + -H 'Content-Type: application/json' + +``` +Вихід мікросервісу ретрівера складається з унікального ідентифікатора для +запиту, початкового запиту або вхідного запиту до мікросервісу пошуку, списку top +`n` знайдених документів, релевантних вхідному запиту, та top_n, де n позначає +кількість документів, що повертаються. + +На виході отримується текст, який відповідає вхідним даним: +``` +{"id":"27210945c7c6c054fa7355bdd4cde818","retrieved_docs":[{"id":"0c1dd04b31ab87a5468d65f98e33a9f6","text":"Company: Nike. financial instruments are subject to master netting arrangements that allow for the offset of assets and liabilities in the event of default or early termination of the contract.\nAny amounts of cash collateral received related to these instruments associated with the Company's credit-related contingent features are recorded in Cash and\nequivalents and Accrued liabilities, the latter of which would further offset against the Company's derivative asset balance. Any amounts of cash collateral posted related\nto these instruments associated with the Company's credit-related contingent features are recorded in Prepaid expenses and other current assets, which would further\noffset against the Company's derivative liability balance. Cash collateral received or posted related to the Company's credit-related contingent features is presented in the\nCash provided by operations component of the Consolidated Statements of Cash Flows. The Company does not recognize amounts of non-cash collateral received, such\nas securities, on the Consolidated Balance Sheets. For further information related to credit risk, refer to Note 12 — Risk Management and Derivatives.\n2023 FORM 10-K 68Table of Contents\nThe following tables present information about the Company's derivative assets and liabilities measured at fair value on a recurring basis and indicate the level in the fair\nvalue hierarchy in which the Company classifies the fair value measurement:\nMAY 31, 2023\nDERIVATIVE ASSETS\nDERIVATIVE LIABILITIES"},{"id":"1d742199fb1a86aa8c3f7bcd580d94af","text": ... } + +``` + +### Сервіс переранжування TEI + +Сервіс переранжування TEI переранжує документи, повернуті пошуковим сервісом. +Він споживає запит і список документів і повертає індекс документа на основі убування показника схожості. Документ, що відповідає повернутому індексу з найбільшою оцінкою, є найбільш релевантним для вхідного запиту. +``` +curl http://${host_ip}:8808/rerank \ + -X POST \ + -d '{"query":"What is Deep Learning?", "texts": ["Deep Learning is not...", "Deep learning is..."]}' \ + -H 'Content-Type: application/json' +``` + +Вивід: `[{"index":1,"score":0.9988041},{"index":0,"score":0.022948774}]` + +### Мікросервіс переранжування + +Мікросервіс переранжування використовує сервіс переранжування TEI і підставляє у відповідь параметрами за замовчуванням, необхідними для мікросервісу llm. + +``` +curl http://${host_ip}:8000/v1/reranking\ + -X POST \ + -d '{"initial_query":"What is Deep Learning?", "retrieved_docs": \ + [{"text":"Deep Learning is not..."}, {"text":"Deep learning is..."}]}' \ + -H 'Content-Type: application/json' +``` + +Вхідними даними для мікросервісу є `initial_query` і список знайдених +документів, і він виводить найбільш релевантний документ до початкового запиту разом з іншими параметрами за замовчуванням, такими як температура, `repetition_penalty`, `chat_template` і так далі. Ми також можемо отримати перші n документів, задавши `top_n` як один з вхідних параметрів. Наприклад: + +``` +curl http://${host_ip}:8000/v1/reranking\ + -X POST \ + -d '{"initial_query":"What is Deep Learning?" ,"top_n":2, "retrieved_docs": \ + [{"text":"Deep Learning is not..."}, {"text":"Deep learning is..."}]}' \ + -H 'Content-Type: application/json' +``` + +Ось результат: + +``` +{"id":"e1eb0e44f56059fc01aa0334b1dac313","query":"Human: Answer the question based only on the following context:\n Deep learning is...\n Question: What is Deep Learning?","max_new_tokens":1024,"top_k":10,"top_p":0.95,"typical_p":0.95,"temperature":0.01,"repetition_penalty":1.03,"streaming":true} + +``` +Ви можете помітити, що мікросервіси ранжування мають стан ('ID' та інші метадані), в той час як сервіс переранжування не має. + +### Сервіс TGI + +``` +curl http://${host_ip}:8008/generate \ + -X POST \ + -d '{"inputs":"What is Deep Learning?", \ + "parameters":{"max_new_tokens":17, "do_sample": true}}' \ + -H 'Content-Type: application/json' + +``` + +Сервіс TGI генерує текст для підказки введення. Ось очікуваний результат від TGI: + +``` +{"generated_text":"We have all heard the buzzword, but our understanding of it is still growing. It’s a sub-field of Machine Learning, and it’s the cornerstone of today’s Machine Learning breakthroughs.\n\nDeep Learning makes machines act more like humans through their ability to generalize from very large"} +``` + +**Примітка**: Після запуску TGI серверу TGI потрібно кілька хвилин, щоб завантажити модель LLM і прогрітися. + +Якщо ви отримали +``` +curl: (7) Failed to connect to 100.81.104.168 port 8008 after 0 ms: Connection refused + +``` + +і журнал показує, що модель прогрівається, будь ласка, зачекайте деякий час і спробуйте пізніше. + +``` +2024-06-05T05:45:27.707509646Z 2024-06-05T05:45:27.707361Z WARN text_generation_router: router/src/main.rs:357: `--revision` is not set +2024-06-05T05:45:27.707539740Z 2024-06-05T05:45:27.707379Z WARN text_generation_router: router/src/main.rs:358: We strongly advise to set it to a known supported commit. +2024-06-05T05:45:27.852525522Z 2024-06-05T05:45:27.852437Z INFO text_generation_router: router/src/main.rs:379: Serving revision bdd31cf498d13782cc7497cba5896996ce429f91 of model Intel/neural-chat-7b-v3-3 +2024-06-05T05:45:27.867833811Z 2024-06-05T05:45:27.867759Z INFO text_generation_router: router/src/main.rs:221: Warming up model + +``` + +### Мікросервіс LLM + +``` +curl http://${host_ip}:9000/v1/chat/completions\ + -X POST \ + -d '{"query":"What is Deep Learning?","max_new_tokens":17,"top_k":10,"top_p":0.95,\ + "typical_p":0.95,"temperature":0.01,"repetition_penalty":1.03,"streaming":true}' \ + -H 'Content-Type: application/json' + +``` + +Ви отримаєте згенерований текст від LLM: + +``` +data: b'\n' +data: b'\n' +data: b'Deep' +data: b' learning' +data: b' is' +data: b' a' +data: b' subset' +data: b' of' +data: b' machine' +data: b' learning' +data: b' that' +data: b' uses' +data: b' algorithms' +data: b' to' +data: b' learn' +data: b' from' +data: b' data' +data: [DONE] +``` + +### Мегасервіс + +``` +curl http://${host_ip}:8888/v1/chatqna -H "Content-Type: application/json" -d '{ + "model": "Intel/neural-chat-7b-v3-3", + "messages": "What is the revenue of Nike in 2023?" + }' + +``` + +Ось результат для вашого запросу: + +``` +data: b'\n' +data: b'An' +data: b'swer' +data: b':' +data: b' In' +data: b' fiscal' +data: b' ' +data: b'2' +data: b'0' +data: b'2' +data: b'3' +data: b',' +data: b' N' +data: b'I' +data: b'KE' +data: b',' +data: b' Inc' +data: b'.' +data: b' achieved' +data: b' record' +data: b' Rev' +data: b'en' +data: b'ues' +data: b' of' +data: b' $' +data: b'5' +data: b'1' +data: b'.' +data: b'2' +data: b' billion' +data: b'.' +data: b'' +data: [DONE] +``` + +## Перевірте журнал докер-контейнера + +Перевірте журнал контейнера по: + +`docker logs -t` + + +Перевірте журнал за посиланням `docker logs f7a08f9867f9 -t`. + +``` +2024-06-05T01:30:30.695934928Z error: a value is required for '--model-id ' but none was supplied +2024-06-05T01:30:30.697123534Z +2024-06-05T01:30:30.697148330Z For more information, try '--help'. + +``` + +Журнал показує, що `MODEL_ID` не встановлено. + +Перегляньте вхідні параметри докера у файлі `./ChatQnA/docker_compose/nvidia/gpu/compose.yaml`. + +``` + tgi-service: + image: ghcr.io/huggingface/text-generation-inference:sha-e4201f4-intel-cpu + container_name: tgi-service + ports: + - "9009:80" + volumes: + - "./data:/data" + shm_size: 1g + environment: + no_proxy: ${no_proxy} + http_proxy: ${http_proxy} + https_proxy: ${https_proxy} + HF_TOKEN: ${HUGGINGFACEHUB_API_TOKEN} + HF_HUB_DISABLE_PROGRESS_BARS: 1 + HF_HUB_ENABLE_HF_TRANSFER: 0 + command: --model-id ${LLM_MODEL_ID} --cuda-graphs 0 + +``` +Вхідним значенням `MODEL_ID` є `${LLM_MODEL_ID}`. + +Перевірте, щоб змінна оточення `LLM_MODEL_ID` була встановлена правильно, з правильним написанням. +Встановіть `LLM_MODEL_ID` і перезапустіть контейнери. + +Також ви можете перевірити загальний журнал за допомогою наступної команди, де +compose.yaml - файл конфігурації мегасервісу docker-compose. + +``` +docker compose -f ./docker_compose/nvidia/gpu/compose.yaml logs +``` +## Запуск інтерфейсу користувача + +### Базовий інтерфейс + +Щоб отримати доступ до інтерфейсу, відкрийте в браузері наступну URL-адресу: http://{host_ip}:5173. За замовчуванням інтерфейс працює на внутрішньому порту 5173. Якщо ви бажаєте використовувати інший порт хоста для доступу до інтерфейсу, ви можете змінити мапінг портів у файлі compose.yaml, як показано нижче: +``` + chaqna-xeon-ui-server: + image: opea/chatqna-ui:latest + ... + ports: + - "80:5173" +``` + +### Діалоговий інтерфейс + +Щоб отримати доступ до інтерфейсу діалогового інтерфейсу (заснованого на реакції), змініть службу інтерфейсу у файлі compose.yaml. Замініть службу chaqna-xeon-ui-server на службу chatqna-xeon-conversation-ui-server відповідно до конфігурації нижче: +``` +chaqna-xeon-conversation-ui-server: + image: opea/chatqna-conversation-ui:latest + container_name: chatqna-xeon-conversation-ui-server + environment: + - APP_BACKEND_SERVICE_ENDPOINT=${BACKEND_SERVICE_ENDPOINT} + - APP_DATA_PREP_SERVICE_URL=${DATAPREP_SERVICE_ENDPOINT} + ports: + - "5174:80" + depends_on: + - chaqna-xeon-backend-server + ipc: host + restart: always +``` + +Після запуску служб відкрийте у браузері наступну URL-адресу: http://{host_ip}:5174. За замовчуванням інтерфейс працює на внутрішньому порту 80. Якщо ви бажаєте використовувати інший порт хоста для доступу до інтерфейсу, ви можете змінити мапінг портів у файлі compose.yaml, як показано нижче: + +``` + chaqna-xeon-conversation-ui-server: + image: opea/chatqna-conversation-ui:latest + ... + ports: + - "80:80" +``` + +### Зупинити роботу сервісів + +Після того, як ви закінчите роботу з усім трубопроводом і захочете зупинитися і видалити всі контейнери, скористайтеся командою, наведеною нижче: + +``` +docker compose -f compose.yaml down +``` diff --git a/docs-ua/examples/ChatQnA/deploy/xeon.md b/docs-ua/examples/ChatQnA/deploy/xeon.md new file mode 100644 index 00000000..0ccdd5b8 --- /dev/null +++ b/docs-ua/examples/ChatQnA/deploy/xeon.md @@ -0,0 +1,778 @@ +# Розгортання на одному вузлі за допомогою vLLM або TGI на процесорах Xeon Scalable + +У цьому розділі розгортання описано одновузлове попереднє розгортання ChatQnA +на прикладі комп'ютерів OPEA для розгортання за допомогою служби vLLM або TGI. Існує декілька +slice-n-dice способів увімкнути RAG з моделями vectordb та LLM, але тут ми +розглянемо один варіант для зручності: ми покажемо, як +побудувати e2e chatQnA з Redis VectorDB та моделлю neural-chat-7b-v3-3, +розгорнутої на IDC. Для отримання додаткової інформації про те, як налаштувати екземпляр IDC для продовження, +будь ласка, дотримуйтесь інструкцій тут (***getting started section***). Якщо у вас +не маєте екземпляра IDC, ви можете пропустити цей крок і переконатися, що всі +(***system level validation***) метрики, такі як версії докерів. + +## Огляд + +Існує декілька способів створити варіант використання ChatQnA. У цьому підручнику ми розглянемо, як увімкнути наведений нижче список мікросервісів з OPEA +GenAIComps для розгортання одновузлового рішення vLLM або мегасервісу TGI. + +1. Підготовка даних +2. Вбудовування +3. Ретривер +4. Переранжування +5. LLM з vLLM або TGI + +Рішення має на меті показати, як використовувати Redis vectordb для RAG та +neural-chat-7b-v3-3 моделі на процесорах Intel Xeon Scalable. Ми розглянемо +як налаштувати докер-контейнер для запуску мікросервісів та мегасервісів. Рішення +буде використовувати зразок набору даних Nike у форматі PDF. Користувачі +можуть задати питання про Nike і отримати відповідь у вигляді чату за замовчуванням для до 1024 токенів. Рішення розгортається за допомогою інтерфейсу користувача. Існує 2 режими, які ви можете використовувати: + +1. Базовий інтерфейс +2. Діалоговий інтерфейс + +Діалоговий інтерфейс не є обов'язковим, але підтримується у цьому прикладі, якщо ви зацікавлені у його використанні. + +## Передумови + +Першим кроком є клонування GenAIExamples та GenAIComps. GenAIComps - це +основні необхідні компоненти, що використовуються для створення прикладів, які ви знайдете в GenAIExamples, і розгортання їх як мікросервісів. + +``` +git clone https://github.com/opea-project/GenAIComps.git +git clone https://github.com/opea-project/GenAIExamples.git +``` + +Checkout the release tag +``` +cd GenAIComps +git checkout tags/v1.0 +``` + +У прикладах використовуються ваги моделей з HuggingFace та langchain. + +Налаштуйте свій обліковий запис [HuggingFace](https://huggingface.co/) і згенеруйте +[user access token](https://huggingface.co/docs/transformers.js/en/guides/private#step-1-generating-a-user-access-token). + +Налаштування токена HuggingFace +``` +export HUGGINGFACEHUB_API_TOKEN="Your_Huggingface_API_Token" +``` + +У прикладі потрібно встановити `host_ip` для розгортання мікросервісів на +кінцевому пристрої з увімкненими портами. Встановлення змінної host_ip env +``` +export host_ip=$(hostname -I | awk '{print $1}') +``` + +Переконайтеся, що ви налаштували проксі-сервери, якщо ви перебуваєте за брандмауером +``` +export no_proxy=${your_no_proxy},$host_ip +export http_proxy=${your_http_proxy} +export https_proxy=${your_http_proxy} +``` + +## Підготовка (створення / витягування) докер-образів + +Цей крок передбачає створення/витягування (можливо, у майбутньому) відповідних докер-образів з покроковим описом процесу і перевіркою працездатності в кінці. +Для ChatQnA знадобляться такі докер-образи: embedding, retriever, rerank, LLM і dataprep. Крім того, вам потрібно буде зібрати докер-образи для +мегасервісу ChatQnA та інтерфейсу користувача (діалоговий React UI не є обов'язковим). Загалом є 8 обов'язкових і один необов'язковий докер-образ. + +Докер-образи, необхідні для встановлення прикладу, потрібно збирати локально, проте +незабаром Intel викладе ці образи на докер-хаб. + +### Створення/витягування образів мікросервісу + +З папки `GenAIComps`. + +#### Створення образу Dataprep + +``` +docker build --no-cache -t opea/dataprep-redis:latest --build-arg https_proxy=$https_proxy \ + --build-arg http_proxy=$http_proxy -f comps/dataprep/redis/langchain/Dockerfile . +``` + +#### Створення образу вбудовування + +``` +docker build --no-cache -t opea/embedding-tei:latest --build-arg https_proxy=$https_proxy \ + --build-arg http_proxy=$http_proxy -f comps/embeddings/tei/langchain/Dockerfile . +``` + +#### Створення образу ретривера + +``` + docker build --no-cache -t opea/retriever-redis:latest --build-arg https_proxy=$https_proxy \ + --build-arg http_proxy=$http_proxy -f comps/retrievers/redis/langchain/Dockerfile . +``` + +#### Створення образу переранжування + +``` +docker build --no-cache -t opea/reranking-tei:latest --build-arg https_proxy=$https_proxy \ + --build-arg http_proxy=$http_proxy -f comps/reranks/tei/Dockerfile . +``` + +#### Створення образу LLM + +We build the vllm docker image from source +``` +git clone https://github.com/vllm-project/vllm.git +cd ./vllm/ +docker build --no-cache -t opea/vllm:latest --build-arg https_proxy=$https_proxy \ + --build-arg http_proxy=$http_proxy -f Dockerfile.cpu . +cd .. +``` + +Далі ми створимо докер мікросервісу vllm. Це встановить точку входу необхідну для того, щоб vllm відповідав прикладам ChatQnA +``` +docker build --no-cache -t opea/llm-vllm:latest --build-arg https_proxy=$https_proxy \ + --build-arg http_proxy=$http_proxy \ + -f comps/llms/text-generation/vllm/langchain/Dockerfile.microservice . + +``` + +``` +docker build --no-cache -t opea/llm-tgi:latest --build-arg https_proxy=$https_proxy \ + --build-arg http_proxy=$http_proxy -f comps/llms/text-generation/tgi/Dockerfile . +``` + +### Створення образів Mega Service + +Мегасервіс - це трубопровід, який передає дані через різні мікросервіси, кожен з яких виконує різні завдання. Ми визначаємо різні +мікросервіси і потік даних між ними у файлі `chatqna.py`, скажімо, у цьому прикладі вихід мікросервісу вбудовування буде входом мікросервісу пошуку, який, у свою чергу, передасть дані мікросервісу ранжування і так далі. Ви також можете додавати нові або видаляти деякі мікросервіси і налаштовувати +мегасервіс відповідно до ваших потреб. + +Створення образу мегасервісу для цього кейсу використання + +``` +cd .. +cd GenAIExamples/ChatQnA +git checkout tags/v1.0 +``` + +``` +docker build --no-cache -t opea/chatqna:latest --build-arg https_proxy=$https_proxy \ + --build-arg http_proxy=$http_proxy -f Dockerfile . +``` + +### Створення образів інших сервісів + +#### Створення образу інтерфейсу користувача + +Як вже було сказано, ви можете створити 2 режими інтерфейсу + +*Базовий інтерфейс* + +``` +cd GenAIExamples/ChatQnA/ui/ +docker build --no-cache -t opea/chatqna-ui:latest --build-arg https_proxy=$https_proxy \ + --build-arg http_proxy=$http_proxy -f ./docker/Dockerfile . +``` + +*Діалоговий інтерфейс* +Якщо ви хочете отримати розмовний досвід з мегасервісом chatqna. + +``` +cd GenAIExamples/ChatQnA/ui/ +docker build --no-cache -t opea/chatqna-conversation-ui:latest --build-arg https_proxy=$https_proxy \ + --build-arg http_proxy=$http_proxy -f ./docker/Dockerfile.react . +``` + +### Перевірка здорового глузду. +Перед тим, як перейти до наступного кроку, перевірте наявність наведеного нижче набору образів докерів: + +* opea/dataprep-redis:latest +* opea/embedding-tei:latest +* opea/retriever-redis:latest +* opea/reranking-tei:latest +* opea/vllm:latest +* opea/chatqna:latest +* opea/chatqna-ui:latest +* opea/llm-vllm:latest + +* opea/dataprep-redis:latest +* opea/embedding-tei:latest +* opea/retriever-redis:latest +* opea/reranking-tei:latest +* opea/chatqna:latest +* opea/chatqna-ui:latest +* opea/llm-tgi:latest + +## Налаштування кейсу використання + +Як вже згадувалося, у цьому прикладі використання буде використано наступну комбінацію GenAIComps з інструментами + +|компоненти кейсів використання | Інструменти | Модель | Тип сервісу | +|---------------- |--------------|-----------------------------|-------| +|Data Prep | LangChain | NA |OPEA Microservice | +|VectorDB | Redis | NA |Open source service| +|Embedding | TEI | BAAI/bge-base-en-v1.5 |OPEA Microservice | +|Reranking | TEI | BAAI/bge-reranker-base | OPEA Microservice | +|LLM | vLLM |Intel/neural-chat-7b-v3-3 |OPEA Microservice | +|UI | | NA | Gateway Service | + +Інструменти та моделі, згадані у таблиці, налаштовуються або за допомогою змінної оточення або через файл `compose_vllm.yaml`. + +|компоненти кейсів використання | Інструменти | Модель | Тип сервісу | +|---------------- |--------------|-----------------------------|-------| +|Data Prep | LangChain | NA |OPEA Microservice | +|VectorDB | Redis | NA |Open source service| +|Embedding | TEI | BAAI/bge-base-en-v1.5 |OPEA Microservice | +|Reranking | TEI | BAAI/bge-reranker-base | OPEA Microservice | +|LLM | TGI |Intel/neural-chat-7b-v3-3 |OPEA Microservice | +|UI | | NA | Gateway Service | + +Інструменти та моделі, згадані у таблиці, налаштовуються або через змінну оточення або файл `compose.yaml`. + +Встановіть необхідні змінні оточення для налаштування варіанту використання + +> Примітка: Rзамініть `host_ip` на вашу зовнішню IP-адресу. Не використовуйте localhost +> для наведеного нижче набору змінних оточення + +### Dataprep + + 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" + +### VectorDB + + export REDIS_URL="redis://${host_ip}:6379" + export INDEX_NAME="rag-redis" + +### Embedding Service + + export EMBEDDING_MODEL_ID="BAAI/bge-base-en-v1.5" + export EMBEDDING_SERVICE_HOST_IP=${host_ip} + export RETRIEVER_SERVICE_HOST_IP=${host_ip} + export TEI_EMBEDDING_ENDPOINT="http://${host_ip}:6006" + +### Reranking Service + + export RERANK_MODEL_ID="BAAI/bge-reranker-base" + export TEI_RERANKING_ENDPOINT="http://${host_ip}:8808" + export RERANK_SERVICE_HOST_IP=${host_ip} + +### LLM Service + + export LLM_MODEL_ID="Intel/neural-chat-7b-v3-3" + export LLM_SERVICE_HOST_IP=${host_ip} + export LLM_SERVICE_PORT=9000 + export vLLM_LLM_ENDPOINT="http://${host_ip}:9009" + + export LLM_MODEL_ID="Intel/neural-chat-7b-v3-3" + export LLM_SERVICE_HOST_IP=${host_ip} + export LLM_SERVICE_PORT=9000 + export TGI_LLM_ENDPOINT="http://${host_ip}:9009" + +### Megaservice + + export MEGA_SERVICE_HOST_IP=${host_ip} + export BACKEND_SERVICE_ENDPOINT="http://${host_ip}:8888/v1/chatqna" + +## Розгортання кейсу використання + +У цьому посібнику ми будемо розгортати за допомогою docker compose з наданого +YAML-файлу. Інструкції docker compose повинні запустити всі вищезгадані сервіси як контейнери. + +``` +cd GenAIExamples/ChatQnA/docker_compose/intel/cpu/xeon +docker compose -f compose_vllm.yaml up -d +``` + +``` +cd GenAIExamples/ChatQnA/docker_compose/intel/cpu/xeon +docker compose -f compose.yaml up -d +``` + +### Валідація мікросервісу +#### Перевірка змінних Env + +Перевірте журнал запуску за допомогою `docker compose -f ./compose_vllm.yaml logs`. +Попереджувальні повідомлення виводять змінні, якщо їх **НЕ** встановлено. + + ubuntu@xeon-vm:~/GenAIExamples/ChatQnA/docker_compose/intel/cpu/xeon$ docker compose -f ./compose_vllm.yaml up -d + WARN[0000] The "LANGCHAIN_API_KEY" variable is not set. Defaulting to a blank string. + WARN[0000] The "LANGCHAIN_TRACING_V2" variable is not set. Defaulting to a blank string. + WARN[0000] The "LANGCHAIN_API_KEY" variable is not set. Defaulting to a blank string. + WARN[0000] The "LANGCHAIN_TRACING_V2" variable is not set. Defaulting to a blank string. + WARN[0000] The "LANGCHAIN_API_KEY" variable is not set. Defaulting to a blank string. + WARN[0000] The "LANGCHAIN_TRACING_V2" variable is not set. Defaulting to a blank string. + WARN[0000] The "LANGCHAIN_API_KEY" variable is not set. Defaulting to a blank string. + WARN[0000] The "LANGCHAIN_TRACING_V2" variable is not set. Defaulting to a blank string. + WARN[0000] /home/ubuntu/GenAIExamples/ChatQnA/docker_compose/intel/cpu/xeon/compose_vllm.yaml: `version` is obsolete + +Перевірте журнал запуску за допомогою `docker compose -f ./compose.yaml logs`. +Попереджувальні повідомлення виводять змінні, якщо їх **НЕ** встановлено. + + ubuntu@xeon-vm:~/GenAIExamples/ChatQnA/docker_compose/intel/cpu/xeon$ docker compose -f ./compose.yaml up -d + WARN[0000] The "LANGCHAIN_API_KEY" variable is not set. Defaulting to a blank string. + WARN[0000] The "LANGCHAIN_TRACING_V2" variable is not set. Defaulting to a blank string. + WARN[0000] The "LANGCHAIN_API_KEY" variable is not set. Defaulting to a blank string. + WARN[0000] The "LANGCHAIN_TRACING_V2" variable is not set. Defaulting to a blank string. + WARN[0000] The "LANGCHAIN_API_KEY" variable is not set. Defaulting to a blank string. + WARN[0000] The "LANGCHAIN_TRACING_V2" variable is not set. Defaulting to a blank string. + WARN[0000] The "LANGCHAIN_API_KEY" variable is not set. Defaulting to a blank string. + WARN[0000] The "LANGCHAIN_TRACING_V2" variable is not set. Defaulting to a blank string. + WARN[0000] /home/ubuntu/GenAIExamples/ChatQnA/docker_compose/intel/cpu/xeon/compose.yaml: `version` is obsolete + +#### Перевірка статусу контейнера + +Перевірте, чи всі контейнери, запущені за допомогою docker compose, запущено + +Наприклад, у прикладі ChatQnA запускається 11 докерів (сервісів), перевірте ці докер-контейнери запущено, тобто всі контейнери `STATUS` мають значення `Up`. +Для швидкої перевірки працездатності спробуйте `docker ps -a`, щоб побачити, чи всі контейнери запущено + +| CONTAINER ID | IMAGE | COMMAND | CREATED | STATUS | PORTS | Names | +| ------------ | ----- | ------- | ------- | ------ | ----- | ----- | +| 3b5fa9a722da | opea/chatqna-ui:latest | "docker-entrypoint.s…" | 32 hours ago | Up 2 hours | 0.0.0.0:5173->5173/tcp, :::5173->5173/tcp | chatqna-xeon-ui-server | +| d3b37f3d1faa | opea/chatqna:latest | "python chatqna.py" | 32 hours ago | Up 2 hours | 0.0.0.0:8888->8888/tcp, :::8888->8888/tcp | chatqna-xeon-backend-server +| b3e1388fa2ca | opea/reranking-tei:latest | "python reranking_te…" | 32 hours ago | Up 2 hours | 0.0.0.0:8000->8000/tcp, :::8000->8000/tcp | reranking-tei-xeon-server| +| 24a240f8ad1c | opea/retriever-redis:latest | "python retriever_re…" | 32 hours ago | Up 2 hours | 0.0.0.0:7000->7000/tcp, :::7000->7000/tcp | retriever-redis-server | +| 9c0d2a2553e8 | opea/embedding-tei:latest | "python embedding_te…" | 32 hours ago | Up 2 hours | 0.0.0.0:6000->6000/tcp, :::6000->6000/tcp | embedding-tei-server | +| 24cae0db1a70 | opea/llm-vllm:latest | "bash entrypoint.sh" | 32 hours ago | Up 2 hours | 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp | llm-vllm-server | +| ea3986c3cf82 | opea/dataprep-redis:latest | "python prepare_doc_…" | 32 hours ago | Up 2 hours | 0.0.0.0:6007->6007/tcp, :::6007->6007/tcp | dataprep-redis-server | +| e10dd14497a8 | redis/redis-stack:7.2.0-v9 | "/entrypoint.sh" | 32 hours ago | Up 2 hours | 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp, 0.0.0.0:8001->8001/tcp, :::8001->8001/tcp | redis-vector-db | +| b98fa07a4f5c | opea/vllm:latest | "python3 -m vllm.ent…" | 32 hours ago | Up 2 hours | 0.0.0.0:9009->80/tcp, :::9009->80/tcp | vllm-service | +| 79276cf45a47 | ghcr.io/huggingface/text-embeddings-inference:cpu-1.2 | "text-embeddings-rou…" | 32 hours ago | Up 2 hours | 0.0.0.0:6006->80/tcp, :::6006->80/tcp | tei-embedding-server | +| 4943e5f6cd80 | ghcr.io/huggingface/text-embeddings-inference:cpu-1.2 | "text-embeddings-rou…" | 32 hours ago | Up 2 hours | 0.0.0.0:8808->80/tcp, :::8808->80/tcp | tei-reranking-server | + + +| CONTAINER ID | IMAGE | COMMAND | CREATED | STATUS | PORTS | NAMES | +| ------------ | ----- | ------- | ------- | ------ | ----- | ----- | +| 3b5fa9a722da | opea/chatqna-ui:latest | "docker-entrypoint.s…" | 32 hours ago | Up 2 hours | 0.0.0.0:5173->5173/tcp, :::5173->5173/tcp | chatqna-xeon-ui-server | +| d3b37f3d1faa | opea/chatqna:latest | "python chatqna.py" | 32 hours ago | Up 2 hours | 0.0.0.0:8888->8888/tcp, :::8888->8888/tcp | chatqna-xeon-backend-server | +| b3e1388fa2ca | opea/reranking-tei:latest | "python reranking_te…" | 32 hours ago | Up 2 hours | 0.0.0.0:8000->8000/tcp, :::8000->8000/tcp | reranking-tei-xeon-server | +| 24a240f8ad1c | opea/retriever-redis:latest | "python retriever_re…" | 32 hours ago | Up 2 hours | 0.0.0.0:7000->7000/tcp, :::7000->7000/tcp | retriever-redis-server | +| 9c0d2a2553e8 | opea/embedding-tei:latest | "python embedding_te…" | 32 hours ago | Up 2 hours | 0.0.0.0:6000->6000/tcp, :::6000->6000/tcp | embedding-tei-server | +| 24cae0db1a70 | opea/llm-tgi:latest | "bash entrypoint.sh" | 32 hours ago | Up 2 hours | 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp | llm-tgi-server | +| ea3986c3cf82 | opea/dataprep-redis:latest | "python prepare_doc_…" | 32 hours ago | Up 2 hours | 0.0.0.0:6007->6007/tcp, :::6007->6007/tcp | dataprep-redis-server | +| e10dd14497a8 | redis/redis-stack:7.2.0-v9 | "/entrypoint.sh" | 32 hours ago | Up 2 hours | 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp, 0.0.0.0:8001->8001/tcp, :::8001->8001/tcp | redis-vector-db | +| 79276cf45a47 | ghcr.io/huggingface/text-embeddings-inference:cpu-1.2 | "text-embeddings-rou…" | 32 hours ago | Up 2 hours | 0.0.0.0:6006->80/tcp, :::6006->80/tcp | tei-embedding-server | +| 4943e5f6cd80 | ghcr.io/huggingface/text-embeddings-inference:cpu-1.2 | "text-embeddings-rou…" | 32 hours ago | Up 2 hours | 0.0.0.0:8808->80/tcp, :::8808->80/tcp | tei-reranking-server | + +## Взаємодія з розгортанням ChatQnA + +У цьому розділі ви дізнаєтеся про різні способи взаємодії з +розгорнутими мікросервісами + +### Мікросервіс Dataprep (необов'язково) + +Якщо ви хочете додати або оновити базу знань за замовчуванням, ви можете скористатися такими командами. Мікросервіс dataprep витягує тексти з різних джерел даних, розбиває дані на частини, вбудовує кожну частину за допомогою мікросервісу embedding і зберігає вбудовані вектори у базі даних векторів redis. + +Завантаження локального файлу `nke-10k-2023.pdf`: + +``` +curl -X POST "http://${host_ip}:6007/v1/dataprep" \ + -H "Content-Type: multipart/form-data" \ + -F "files=@./nke-10k-2023.pdf" +``` + +Ця команда оновлює базу знань, завантажуючи локальний файл для обробки. +Змініть шлях до файлу відповідно до вашого середовища. + +Додайте базу знань за допомогою HTTP-посилань: + +``` +curl -X POST "http://${host_ip}:6007/v1/dataprep" \ + -H "Content-Type: multipart/form-data" \ + -F 'link_list=["https://opea.dev"]' +``` + +Ця команда оновлює базу знань, надсилаючи список HTTP-посилань для обробки. + +Крім того, ви можете отримати список файлів, які ви завантажили: + +``` +curl -X POST "http://${host_ip}:6007/v1/dataprep/get_file" \ + -H "Content-Type: application/json" + +``` + +Щоб видалити завантажений вами файл/посилання, ви можете скористатися наступними командами: + +#### Видалення посилання +``` +# Служба dataprep додасть постфікс .txt до файлу посилання + +curl -X POST "http://${host_ip}:6007/v1/dataprep/delete_file" \ + -d '{"file_path": "https://opea.dev.txt"}' \ + -H "Content-Type: application/json" +``` + +#### Видалення файлу +``` +curl -X POST "http://${host_ip}:6007/v1/dataprep/delete_file" \ + -d '{"file_path": "nke-10k-2023.pdf"}' \ + -H "Content-Type: application/json" +``` + +#### Видалення всіх завантажених файлів і посилань + +``` +curl -X POST "http://${host_ip}:6007/v1/dataprep/delete_file" \ + -d '{"file_path": "all"}' \ + -H "Content-Type: application/json" +``` +### Сервіс вбудовування TEI + +Сервіс вбудовування TEI приймає на вхід рядок, вбудовує його у вектор певної довжини, визначеної моделлю вбудовування, і повертає цей вкладений вектор. + +``` +curl ${host_ip}:6006/embed \ + -X POST \ + -d '{"inputs":"What is Deep Learning?"}' \ + -H 'Content-Type: application/json' +``` + +У цьому прикладі використовується модель вбудовування «BAAI/bge-base-en-v1.5», яка має розмір вектора 768. Отже, результатом виконання команди curl буде вбудований вектор довжиною 768. + +### Мікросервіс Вбудовування +Мікросервіс вбудовування залежить від сервісу вбудовування TEI. З точки зору +вхідних параметрів, він приймає рядок, вбудовує його у вектор за допомогою TEI +вбудовування, додає інші параметри за замовчуванням, необхідні для мікросервісу +мікросервісу пошуку і повертає його. + +``` +curl http://${host_ip}:6000/v1/embeddings\ + -X POST \ + -d '{"text":"hello"}' \ + -H 'Content-Type: application/json' +``` +### Мікросервіс ретриверів + +Щоб споживати мікросервіс retriever, потрібно згенерувати mock embedding +вектор за допомогою Python-скрипту. Довжина вектора вбудовування визначається +моделлю вбудовування. Тут ми використовуємо модель EMBEDDING_MODEL_ID=«BAAI/bge-base-en-v1.5», розмір вектора якої дорівнює 768. + +Перевірте векторну розмірність вашої моделі вбудовування і встановіть +розмірність `your_embedding` рівною їй. + +``` +export your_embedding=$(python3 -c "import random; embedding = [random.uniform(-1, 1) for _ in range(768)]; print(embedding)") + +curl http://${host_ip}:7000/v1/retrieval \ + -X POST \ + -d "{\"text\":\"test\",\"embedding\":${your_embedding}}" \ + -H 'Content-Type: application/json' + +``` +Вихід мікросервісу ретрівера складається з унікального ідентифікатора для +запиту, початкового запиту або вхідного запиту до мікросервісу пошуку, списку top +`n` знайдених документів, що відповідають вхідному запиту, та top_n, де n позначає +кількість документів, що мають бути повернуті. + +На виході отримується текст, який відповідає вхідним даним: +``` +{"id":"27210945c7c6c054fa7355bdd4cde818","retrieved_docs":[{"id":"0c1dd04b31ab87a5468d65f98e33a9f6","text":"Company: Nike. financial instruments are subject to master netting arrangements that allow for the offset of assets and liabilities in the event of default or early termination of the contract.\nAny amounts of cash collateral received related to these instruments associated with the Company's credit-related contingent features are recorded in Cash and\nequivalents and Accrued liabilities, the latter of which would further offset against the Company's derivative asset balance. Any amounts of cash collateral posted related\nto these instruments associated with the Company's credit-related contingent features are recorded in Prepaid expenses and other current assets, which would further\noffset against the Company's derivative liability balance. Cash collateral received or posted related to the Company's credit-related contingent features is presented in the\nCash provided by operations component of the Consolidated Statements of Cash Flows. The Company does not recognize amounts of non-cash collateral received, such\nas securities, on the Consolidated Balance Sheets. For further information related to credit risk, refer to Note 12 — Risk Management and Derivatives.\n2023 FORM 10-K 68Table of Contents\nThe following tables present information about the Company's derivative assets and liabilities measured at fair value on a recurring basis and indicate the level in the fair\nvalue hierarchy in which the Company classifies the fair value measurement:\nMAY 31, 2023\nDERIVATIVE ASSETS\nDERIVATIVE LIABILITIES"},{"id":"1d742199fb1a86aa8c3f7bcd580d94af","text": ... } + +``` + +### Сервіс переранжування TEI + +Сервіс переранжування TEI переранжує документи, повернуті пошуковим сервісом. Вона споживає запит і список документів і повертає індекс документа на основі убування показника схожості. Документ, що відповідає повернутому індексу з найбільшою оцінкою, є найбільш релевантним для вхідного запиту. +``` +curl http://${host_ip}:8808/rerank \ + -X POST \ + -d '{"query":"What is Deep Learning?", "texts": ["Deep Learning is not...", "Deep learning is..."]}' \ + -H 'Content-Type: application/json' +``` + +Вивід це: `[{"index":1,"score":0.9988041},{"index":0,"score":0.022948774}]` + + +### Мікросервіс Переранжування + +Мікросервіс переранжування використовує сервіс переранжування TEI і підставляє відповідь з параметрами за замовчуванням, необхідними для мікросервісу llm. + +``` +curl http://${host_ip}:8000/v1/reranking\ + -X POST \ + -d '{"initial_query":"What is Deep Learning?", "retrieved_docs": \ + [{"text":"Deep Learning is not..."}, {"text":"Deep learning is..."}]}' \ + -H 'Content-Type: application/json' +``` + +Вхідними даними для мікросервісу є `initial_query` і список знайдених +документів, і він виводить найбільш релевантний документ до початкового запиту разом з іншими параметрами за замовчуванням, такими як температура, `repetition_penalty`, `chat_template` і так далі. Ми також можемо отримати перші n документів, задавши `top_n` як один із вхідних параметрів. Наприклад: + +``` +curl http://${host_ip}:8000/v1/reranking\ + -X POST \ + -d '{"initial_query":"What is Deep Learning?" ,"top_n":2, "retrieved_docs": \ + [{"text":"Deep Learning is not..."}, {"text":"Deep learning is..."}]}' \ + -H 'Content-Type: application/json' +``` + +Ось результат: + +``` +{"id":"e1eb0e44f56059fc01aa0334b1dac313","query":"Human: Answer the question based only on the following context:\n Deep learning is...\n Question: What is Deep Learning?","max_new_tokens":1024,"top_k":10,"top_p":0.95,"typical_p":0.95,"temperature":0.01,"repetition_penalty":1.03,"streaming":true} + +``` +Ви можете помітити, що мікросервіси ранжування мають стан ('ID' та інші метадані), в той час як сервіс переранжування не має. + +### vLLM і TGI Service + +``` +curl http://${host_ip}:9009/v1/completions \ + -H "Content-Type: application/json" \ + -d '{"model": "Intel/neural-chat-7b-v3-3", \ + "prompt": "What is Deep Learning?", \ + "max_tokens": 32, "temperature": 0}' +``` + +Сервіс vLLM генерує текст для підказки введення. Ось очікуваний результат +від vllm: + +``` +{"generated_text":"We have all heard the buzzword, but our understanding of it is still growing. It’s a sub-field of Machine Learning, and it’s the cornerstone of today’s Machine Learning breakthroughs.\n\nDeep Learning makes machines act more like humans through their ability to generalize from very large"} +``` + +**Примітка**: Після запуску vLLM серверу vLLM потрібно кілька хвилин для завантаження моделювання та прогрів LLM. + +``` +curl http://${host_ip}:9009/generate \ + -X POST \ + -d '{"inputs":"What is Deep Learning?", \ + "parameters":{"max_new_tokens":17, "do_sample": true}}' \ + -H 'Content-Type: application/json' + +``` + +Сервіс TGI генерує текст для підказки введення. Ось очікуваний результат від TGI: + +``` +{"generated_text":"We have all heard the buzzword, but our understanding of it is still growing. It’s a sub-field of Machine Learning, and it’s the cornerstone of today’s Machine Learning breakthroughs.\n\nDeep Learning makes machines act more like humans through their ability to generalize from very large"} +``` + +**Примітка**: Після запуску TGI серверу TGI потрібно кілька хвилин, щоб завантажити модель LLM і прогрітися. + +Якщо ви отримали + +``` +curl: (7) Failed to connect to 100.81.104.168 port 8008 after 0 ms: Connection refused + +``` + +і журнал показує, що модель прогрівається, будь ласка, зачекайте трохи і спробуйте пізніше. + +``` +2024-06-05T05:45:27.707509646Z 2024-06-05T05:45:27.707361Z WARN text_generation_router: router/src/main.rs:357: `--revision` is not set +2024-06-05T05:45:27.707539740Z 2024-06-05T05:45:27.707379Z WARN text_generation_router: router/src/main.rs:358: We strongly advise to set it to a known supported commit. +2024-06-05T05:45:27.852525522Z 2024-06-05T05:45:27.852437Z INFO text_generation_router: router/src/main.rs:379: Serving revision bdd31cf498d13782cc7497cba5896996ce429f91 of model Intel/neural-chat-7b-v3-3 +2024-06-05T05:45:27.867833811Z 2024-06-05T05:45:27.867759Z INFO text_generation_router: router/src/main.rs:221: Warming up model + +``` + +### Мікросервіс LLM + +``` +curl http://${host_ip}:9000/v1/chat/completions\ + -X POST \ + -d '{"query":"What is Deep Learning?","max_new_tokens":17,"top_k":10,"top_p":0.95,\ + "typical_p":0.95,"temperature":0.01,"repetition_penalty":1.03,"streaming":true}' \ + -H 'Content-Type: application/json' + +``` + +Ви отримаєте згенерований текст від LLM: + +``` +data: b'\n' +data: b'\n' +data: b'Deep' +data: b' learning' +data: b' is' +data: b' a' +data: b' subset' +data: b' of' +data: b' machine' +data: b' learning' +data: b' that' +data: b' uses' +data: b' algorithms' +data: b' to' +data: b' learn' +data: b' from' +data: b' data' +data: [DONE] +``` + +### Мегасервис + +``` +curl http://${host_ip}:8888/v1/chatqna -H "Content-Type: application/json" -d '{ + "model": "Intel/neural-chat-7b-v3-3", + "messages": "What is the revenue of Nike in 2023?" + }' + +``` + +Ось результат для вашого запросу: + +``` +data: b'\n' +data: b'An' +data: b'swer' +data: b':' +data: b' In' +data: b' fiscal' +data: b' ' +data: b'2' +data: b'0' +data: b'2' +data: b'3' +data: b',' +data: b' N' +data: b'I' +data: b'KE' +data: b',' +data: b' Inc' +data: b'.' +data: b' achieved' +data: b' record' +data: b' Rev' +data: b'en' +data: b'ues' +data: b' of' +data: b' $' +data: b'5' +data: b'1' +data: b'.' +data: b'2' +data: b' billion' +data: b'.' +data: b'' +data: [DONE] +``` + +## Перевірка журналу докер-контейнера + +Перевірте журнал контейнера: + +`docker logs -t` + + +Перевірте журнал за посиланням `docker logs f7a08f9867f9 -t`. + +``` +2024-06-05T01:30:30.695934928Z error: a value is required for '--model-id ' but none was supplied +2024-06-05T01:30:30.697123534Z +2024-06-05T01:30:30.697148330Z For more information, try '--help'. + +``` + +Журнал показує, що `MODEL_ID` не встановлено. + +Перегляньте вхідні параметри докера у файлі `./ChatQnA/docker_compose/intel/cpu/xeon/compose_vllm.yaml`. + +``` +vllm_service: + image: ${REGISTRY:-opea}/vllm:${TAG:-latest} + container_name: vllm-service + ports: + - "9009:80" + volumes: + - "./data:/data" + shm_size: 128g + environment: + no_proxy: ${no_proxy} + http_proxy: ${http_proxy} + https_proxy: ${https_proxy} + HF_TOKEN: ${HUGGINGFACEHUB_API_TOKEN} + LLM_MODEL_ID: ${LLM_MODEL_ID} + command: --model $LLM_MODEL_ID --host 0.0.0.0 --port 80 + +``` + +Перегляньте вхідні параметри докера у файлі `./ChatQnA/docker_compose/intel/cpu/xeon/compose.yaml`. + +``` + tgi-service: + image: ghcr.io/huggingface/text-generation-inference:sha-e4201f4-intel-cpu + container_name: tgi-service + ports: + - "9009:80" + volumes: + - "./data:/data" + shm_size: 1g + environment: + no_proxy: ${no_proxy} + http_proxy: ${http_proxy} + https_proxy: ${https_proxy} + HF_TOKEN: ${HUGGINGFACEHUB_API_TOKEN} + HF_HUB_DISABLE_PROGRESS_BARS: 1 + HF_HUB_ENABLE_HF_TRANSFER: 0 + command: --model-id ${LLM_MODEL_ID} --cuda-graphs 0 + +``` + +Вхідним значенням `MODEL_ID` є `${LLM_MODEL_ID}`. + +Перевірте, щоб змінна оточення `LLM_MODEL_ID` була встановлена правильно, з правильним написанням. +Встановіть `LLM_MODEL_ID` і перезапустіть контейнери. + +Також ви можете перевірити загальний журнал за допомогою наступної команди, де +compose.yaml - це файл конфігурації мегасервісу docker-compose. + +``` +docker compose -f ./docker_compose/intel/cpu/xeon/compose_vllm.yaml logs +``` + +``` +docker compose -f ./docker_compose/intel/cpu/xeon/compose.yaml logs +``` + +## Запуск інтерфейсу користувача + +### Базовий інтерфейс + +Щоб отримати доступ до інтерфейсу, відкрийте в браузері наступну URL-адресу: http://{host_ip}:5173. За замовчуванням інтерфейс працює на внутрішньому порту 5173. Якщо ви бажаєте використовувати інший порт хоста для доступу до інтерфейсу, ви можете змінити мапінг портів у файлі compose.yaml, як показано нижче: +``` + chaqna-xeon-ui-server: + image: opea/chatqna-ui:latest + ... + ports: + - "80:5173" +``` + +### Діалоговий інтерфейс + +Щоб отримати доступ до інтерфейсу діалогового інтерфейсу (заснованого на реакції), змініть сервіс інтерфейсу у файлі compose.yaml. Замініть сервіс chaqna-xeon-ui-server на сервіс chatqna-xeon-conversation-ui-server, як показано у конфігурації нижче: +``` +chaqna-xeon-conversation-ui-server: + image: opea/chatqna-conversation-ui:latest + container_name: chatqna-xeon-conversation-ui-server + environment: + - APP_BACKEND_SERVICE_ENDPOINT=${BACKEND_SERVICE_ENDPOINT} + - APP_DATA_PREP_SERVICE_URL=${DATAPREP_SERVICE_ENDPOINT} + ports: + - "5174:80" + depends_on: + - chaqna-xeon-backend-server + ipc: host + restart: always +``` + +Після запуску сервісів відкрийте у браузері наступну URL-адресу: http://{host_ip}:5174. За замовчуванням інтерфейс працює на внутрішньому порту 80. Якщо ви бажаєте використовувати інший порт хоста для доступу до інтерфейсу, ви можете змінити мапінг портів у файлі compose.yaml, як показано нижче: + +``` + chaqna-xeon-conversation-ui-server: + image: opea/chatqna-conversation-ui:latest + ... + ports: + - "80:80" +``` + +### Зупинка сервісів + +Після того, як ви закінчите роботу з усім трубопроводом і захочете зупинитися і видалити всі контейнери, скористайтеся командою, наведеною нижче: + +``` +docker compose -f compose_vllm.yaml down +``` + +``` +docker compose -f compose.yaml down +``` diff --git a/docs-ua/examples/ChatQnA/deploy/xeon.txt b/docs-ua/examples/ChatQnA/deploy/xeon.txt new file mode 100644 index 00000000..968694ba --- /dev/null +++ b/docs-ua/examples/ChatQnA/deploy/xeon.txt @@ -0,0 +1,67 @@ +.. _ChatQnA_deploy_xeon: + + +Розгортання на одному вузлі: Масштабовані процесори XEON +######################################################## + +наприклад, варіант використання: +Повинен надавати контекст для вибору між vLLM та TGI. + +.. tabs:: + + .. tab:: Розгортання за допомогою Docker compose з vLLM + + Зробити: У розділі має бути описано, як можна реалізувати вищезгадані архіви + за допомогою режиму vllm або обраної моделі обслуговування. Покажіть базовий кінцевий випадок E2E + налаштувати 1 тип БД для, наприклад, Redis на основі того, що вже описано у + chatqna (інші приклади можуть бути названі або на них можна посилатися відповідно), + Показати, як використовувати одну модель SOTA, для llama3 та інших, з прикладом + конфігурації. Результат використання повинен бути продемонстрований на реальному прикладі використання, що показує + як продуктивність, так і ефективність. Для узгодженості, давайте використовувати OPEA + документацію для сценаріїв використання RAG + + Приклади назв: + + 1. Огляд + Розкажіть кількома рядками про те, що очікується в цьому підручнику. + Наприклад, використання Redis db та запуск моделі llama3 для демонстрації сценарію + використання e2e з використанням OPEA та vllm. + #. Передумови + Включає клонування репозиторіїв, витягування необхідних контейнерів, якщо вони (UI, трубопровід і т.д.), + встановлення змінних env, таких як проксі, отримання доступу до ваг моделі, отримання токенів на hf, lg і т.д. перевірки, якщо потрібно. І т.д. + #. Підготовка (створення / витягування) докер-образів + a) Цей крок передбачає створення/витягування (можливо, в майбутньому) відповідних образів докерів з покроковим описом процесу, а також перевірку на здоровий глузд в кінці + #) Якщо потрібна кастомізація, ми покажемо 1 випадок, як це зробити + + #. Налаштування кейсів використання + + У цьому розділі буде описано, як отримати дані та інші необхідні залежності, після чого буде показано готовність оточення мікросервісу. + Використовуйте цей розділ, щоб також поговорити про те, як встановити інші моделі, якщо це необхідно, як використовувати інші бази даних тощо + + #. Розгортання сценарію використання chatqna на основі docker_compose + + Це має охоплювати кроки, пов'язані із запуском мікро- і мегасервісів, а також пояснити деякі ключові моменти з того, що описано + в докер-компіляторі. За необхідності включіть перевірку на здоровий глузд. Кожна + команду запуску мікросервісу/мегасервісу разом з тим, що вона робить і + очікуваним результатом буде добре додати + + #. Взаємодія з розгортанням ChatQnA. (або навігація робочим процесом chatqna) + + У цьому розділі ви дізнаєтеся, як використовувати іншу машину для взаємодії та + валідації мікросервісу, а також про те, як переміщатися по кожному сервісу. Наприклад, як завантажити локальний документ для підготовки даних і як отримати + відповіді? Клієнт буде зацікавлений в отриманні результатів на запит, + а також виміряти якість моделі та метрики досконалості ( + життя та статистика також повинні бути охоплені). Будь ласка, перевірте, чи ці дані також можуть бути згорнуті в кінцевих точках. Чи доступне завантаження шаблонів + вже доступне? Кастомний шаблон доступний сьогодні + + Показати всі доступні кастомізації та функції + + #. Додаткові можливості (за бажанням) + Викликати специфічні функції для конкретного випадку + + #. Запуск інтерфейсу користувача + Покажемо кроки запуску інтерфейсу користувача та приклад скріншоту запиту і результату + + .. tab:: Розгортання за допомогою docker compose з TGI + + Цей розділ буде схожий на vLLM. Варто спробувати використовувати єдине джерело. diff --git a/docs-ua/examples/index.rst b/docs-ua/examples/index.rst new file mode 100644 index 00000000..d6f0c78e --- /dev/null +++ b/docs-ua/examples/index.rst @@ -0,0 +1,40 @@ +.. _GenAIExamples: + +GenAI Examples +############## + +GenAIExamples призначені для того, щоб полегшити розробникам початок роботи з генеративним ШІ, і містять приклади на основі мікросервісів, які спрощують процеси розгортання, тестування та масштабування додатків GenAI. Усі приклади повністю сумісні з Docker і Kubernetes, підтримують широкий спектр апаратних платформ, таких як Gaudi, Xeon і NVIDIA GPU, а також інше обладнання, забезпечуючи гнучкість і ефективність вашого впровадження GenAI. + + +.. toctree:: + :maxdepth: 1 + + ChatQnA/ChatQnA_Guide + +---- + +Ми створюємо цю документацію на основі вмісту в +:GenAIExamples_blob:`GenAIExamples` репозиторію GitHub. + +.. rst-class:: rst-columns + +.. toctree:: + :maxdepth: 1 + :glob: + + /GenAIExamples/README + /GenAIExamples/* + +**Example Applications Table of Contents** + +.. rst-class:: rst-columns + +.. contents:: + :local: + :depth: 1 + +---- + +.. comment Цей include-файл генерується у Makefile під час збирання документа з усіх каталогів, знайдених у каталозі верхнього рівня GenAIExamples + +.. include:: examples.txt diff --git a/docs-ua/faq.md b/docs-ua/faq.md new file mode 100644 index 00000000..faea5ad5 --- /dev/null +++ b/docs-ua/faq.md @@ -0,0 +1,65 @@ +# Поширені запитання з OPEA + +## У чому полягає місія OPEA? +Місія OPEA полягає в тому, щоб запропонувати перевірену еталонну реалізацію RAG GenAI (генеративного штучного інтелекту) корпоративного рівня. Це спростить розробку та розгортання GenAI, тим самим прискорюючи час виходу на ринок. + +## Що таке OPEA? +Наразі проект складається з технічної концептуальної основи, яка дозволяє реалізаціям GenAI відповідати вимогам корпоративного рівня. Проект пропонує набір еталонних реалізацій для широкого спектру корпоративних сценаріїв використання, які можна використовувати «з коробки». Крім того, проект надає набір інструментів перевірки та відповідності, щоб забезпечити відповідність еталонних реалізацій потребам, викладеним у концептуальній структурі. Це дає змогу створювати нові еталонні реалізації та перевіряти їх у відкритий спосіб. Партнерство з LF AI & Data робить його ідеальним місцем для багатостороннього розвитку, еволюції та розширення. + +## З якими проблемами стикаються при розгортанні GenAI на підприємстві? +Підприємства стикаються з безліччю проблем при розробці та розгортанні GenAI. Розробка нових моделей, алгоритмів, методів точного налаштування, виявлення та усунення упередженості, а також способів масштабного розгортання великих рішень продовжує розвиватися швидкими темпами. Однією з найбільших проблем, з якою стикаються підприємства, є відсутність стандартизованих програмних інструментів і технологій, з яких можна було б вибирати. Крім того, підприємствам потрібна гнучкість для швидкого впровадження інновацій, розширення функціональності відповідно до бізнес-потреб, а також безпека та надійність рішення. Відсутність середовища, яке охоплює як пропрієтарні, так і відкриті рішення, заважає підприємствам планувати свою долю. Це призводить до величезних витрат часу та грошей, що впливає на час виходу на ринок. OPEA відповідає на потребу в багатосторонній екосистемній платформі, яка дозволяє оцінювати, обирати, налаштовувати та надійно розгортати рішення, на які може покластися бізнес. + +## Чому зараз? +Основний цикл впровадження та розгортання надійних, безпечних рішень GenAI корпоративного рівня в усіх галузях знаходиться на початковій стадії. Рішення корпоративного рівня вимагатимуть співпраці у відкритій екосистемі. Настав час для екосистеми об'єднатися і прискорити розгортання GenAI на підприємствах, пропонуючи стандартизований набір інструментів і технологій, підтримуючи при цьому три ключові принципи - відкритість, безпеку і масштабованість. Це вимагатиме від екосистеми спільної роботи над створенням еталонних реалізацій, які будуть ефективними, надійними та готовими до використання на рівні підприємств. + +## Як це порівняно з іншими варіантами розгортання рішень Gen AI на підприємстві? +Не існує альтернативи, яка б об'єднувала всю екосистему в нейтральний до постачальників спосіб і забезпечувала відкритість, безпеку і масштабованість. Це наша основна мотивація для створення проекту OPEA. + +## Чи працюватимуть еталонні реалізації OPEA з пропрієтарними компонентами? +Як і будь-який інший проект з відкритим вихідним кодом, спільнота визначатиме, які компоненти потрібні ширшій екосистемі. Підприємства завжди можуть розширити проект OPEA за рахунок інших пропрієтарних рішень від різних постачальників для досягнення своїх бізнес-цілей. + +## Що означає абревіатура OPEA? +Open Platform for Enterprise AI. + +## Як вимовляється слово OPEA?? +Це вимовляється як ‘OH-PEA-AY.’ + +## What initial companies and open-source projects joined OPEA? +AnyScale, Cloudera, DataStax, Domino Data Lab, HuggingFace, Intel, KX, MariaDB Foundation, MinIO, Qdrant, Red Hat, SAS, VMware by Broadcom, Yellowbrick Data, Zilliz. + +## Який внесок робить Intel? +OPEA буде визначено спільно кількома партнерами спільноти, із закликом до широкої участі в екосистемі, в рамках добре створеного Фонду LF AI & Data Foundation. Для початку Intel надала Технічну концептуальну основу, яка показує, як будувати та оптимізувати кураторські трубопроводи GenAI, створені для безпечного розгортання «під ключ» на підприємствах. На початку Intel надала кілька еталонних реалізацій на апаратному забезпеченні Intel на базі Intel® Xeon® 5, Intel® Xeon® 6 та Intel® Gaudi® 2, які можна переглянути в репозиторії GitHub за цим посиланням. Згодом ми плануємо доповнити цей внесок, включно зі стеком програмної інфраструктури, щоб уможливити розгортання повністю контейнерних робочих навантажень ШІ, а також потенційні реалізації цих контейнерних робочих навантажень. + +## Коли ви говорите про Технічну концептуальну основу, які компоненти входять до неї?? +Моделі та модулі можуть бути частиною репозиторію OPEA або публікуватися в стабільному, безперешкодному репозиторії (наприклад, Hugging Face) і бути допущеними до використання за результатами оцінки OPEA. До них відносяться: + +* Ingest/Data Processing +* Embedding Models/Services +* Indexing/Vector/Graph data stores +* Retrieval/Ranking +* Prompt Engines +* Guardrails +* Memory systems + +## Яким чином партнери можуть зробити свій внесок в ОPЕА? +Партнери можуть зробити свій внесок у цей проект різними способами: + +* Приєднатися до проекту та надати ресурси у вигляді кейсів використання, коду, тестових харнесів тощо. +* Забезпечити технічне керівництво +* Сприяти залученню спільноти та поширенню +* Запропонувати управління програмами для різних проектів +* Стати розробником, компілятором і користувачем +* Визначити і запропонувати варіанти використання для різних галузевих вертикалей, які формують проект OPEA +* Розбудовувати інфраструктуру для підтримки проектів OPEA + +## Де партнери можуть ознайомитися з останнім проектом специфікації Концептуальних засад? +Версія специфікації доступна у репозиторії документації (["docs"](https://github.com/opea-project/docs)) цього проекту. + +## Чи потрібно платити за приєднання?? +Приєднання до проекту OPEA є безкоштовним для всіх, хто бажає зробити свій внесок. + +## Чи потрібно бути членом Linux Foundation, щоб приєднатися?? +Будь-хто може приєднатися і зробити свій внесок. Вам не потрібно бути членом Linux Foundation. + +## Куди я можу повідомити про баг або вразливість? +Звіти про уразливості та повідомлення про помилки можна надсилати на адресу [info@opea.dev](mailto:info@opea.dev). \ No newline at end of file diff --git a/docs-ua/framework/OPEA - Rev05 PS - 4_15_2024.docx b/docs-ua/framework/OPEA - Rev05 PS - 4_15_2024.docx new file mode 100644 index 00000000..47b87c12 Binary files /dev/null and b/docs-ua/framework/OPEA - Rev05 PS - 4_15_2024.docx differ diff --git a/docs-ua/framework/framework.md b/docs-ua/framework/framework.md new file mode 100644 index 00000000..624ef8f3 --- /dev/null +++ b/docs-ua/framework/framework.md @@ -0,0 +1,624 @@ +# Проєкт Рамкової пропозиції щодо відкритої платформи для корпоративного штучного інтелекту (OPEA) + +Rev 0.5 April 15, 2024 + +Початковий проект розроблений корпорацією Intel. Контакти для зв'язку - Ке Дінг (ke.ding@intel.com ), Гаді Зінгер (gadi.singer@intel.com) + +Будь ласка, надішліть відгук на info@opea.dev + +## 1.Резюме + +OPEA (Open Platform for Enterprise AI) - це фреймворк, який дозволяє створювати та оцінювати відкриті, багатопрофільні, надійні та комбіновані рішення GenAI, які використовують найкращі інновації в екосистемі. + +OPEA - це екосистемна програма в рамках Linux Foundation Data & AI, яка має на меті +прискорити впровадження комплексних рішень GenAI на підприємствах і підвищити їхню цінність для бізнесу. OPEA допоможе +спростити впровадження комплексних рішень GenAI корпоративного рівня, включаючи Пошуковий Розширений Генеративний ШІ (RAG). Платформа покликана сприяти ефективній інтеграції безпечних, +продуктивних і економічно ефективних робочих процесів GenAI у бізнес-системи та керувати їх розгортанням. + +Визначення цієї платформи включатиме архітектурний план, повний набір компонентів для систем GenAI, а також набір специфікацій, як для окремих компонентів, так і для цілих систем. Вона також включатиме інструменти для побудови, налаштування та оцінки наскрізних робочих процесів GenAI. Ці визначення будуть +розглядати такі ключові аспекти, як продуктивність, набір функцій, надійність (безпека і прозорість) і готовність до використання в додатках корпоративного рівня. Специфікації також включатимуть набір еталонних потоків +та демонстраційні приклади, які можна буде легко відтворити та адаптувати. + +![OPEAs Core Values](images/framework-image1.png) + +Рисунок 1-1: Основні цінності OPEA + +\*Зверніть увагу - Термін «специфікація» використовується в цьому проекті технічного документу і додатку як широкий робочий термін, що загалом стосується детального опису систем та їхніх компонентів. Однак, важливо зазначити, що цей термін може бути замінений або оновлений на основі більш точного опису і застосування міркувань ліцензування Фонду Linux. + +![proposed Construction and Evaluation Framework for AI Solutions](images/framework-image2.png) + +Рисунок 1-2 OPEA - пропонована структура побудови і оцінки рішень для штучного інтелекту + +Ми живемо в епоху, коли алгоритми та моделі штучного інтелекту, які спочатку розроблялися в дослідницьких, а згодом впроваджені в середовище, орієнтоване на споживача, тепер переходять до широкого впровадження на підприємствах. Цей перехід дає можливість партнерам використовувати десятиліттями напрацьовані знання про обчислення, безпеку, надійність та інтеграцію центрів обробки даних, серед іншого, щоб прискорити впровадження штучного інтелекту та розкрити його потенційну цінність. + +## 2. Введення + +Останнім часом практика розробки АІ-рішень зазнала значної трансформації. Замість того, щоб розглядати модель штучного інтелекту (наприклад, GenAI LLM) як повноцінне рішення, ці моделі тепер інтегруються в більш комплексні наскрізні АІ-рішення. Ці рішення складаються з багатьох компонентів, включаючи підсистеми пошуку з вбудованими агентами, векторну базу даних для ефективного зберігання та пошуку, а також швидкісні механізми, серед іншого. Цей зсув призвів до появи фреймворків композиції (таких як LangChain або Haystack), які використовуються для об'єднання цих компонентів у наскрізні потоки GenAI, такі як RAG-рішення, для розробки та розгортання рішень для ШІ. + +Екосистема пропонує ряд фреймворків для композиції, деякі з яких мають відкритий вихідний код (наприклад, LangChain і LlamaIndex), а інші - закритий і поставляються в комплекті з професійними сервісами (наприклад, +ScaleAI). Крім того, деякі з них пропонуються постачальниками хмарних послуг (наприклад, AWS) або постачальниками апаратного/програмного забезпечення +(наприклад, NVIDIA). Однак станом на 2 квартал 2024 року вони представляють індивідуальні перспективи і пропозиції для вирішення складного завдання побудови комплексного рішення зі штучного інтелекту. + +### 2.1 Основні можливості + +OPEA запропонує ключові можливості як для побудови, так і для оцінки комплексних композитних рішень GenAI, створених за допомогою пошукової аугментації. Як платформа для створення, OPEA дозволить створювати ШІ-рішення на основі RAG безпосередньо або за допомогою таких композиційних інструментів, як LangChain і Haystack. Як система оцінки, OPEA надасть засоби для оцінки та класифікації наскрізних композитних рішень GenAI за аспектами, що випливають з чотирьох областей - продуктивність, функції, надійність і готовність до впровадження на рівні підприємства. + +#### 2.1.1 Побудова рішень GenAI, включаючи доповнення пошуку + +Створити комплексне рішення зі штучного інтелекту (включно з доповненням пошуку) можна, об'єднавши моделі та модулі від різних постачальників. + +OPEA пропонуватиме або посилатиметься на набір будівельних блоків - моделей і модулів, які можна викликати в потоці для досягнення завдання або послуги ШІ. Моделі та модулі можуть бути частиною репозиторію OPEA або опубліковані у стабільному відкритому репозиторії (наприклад, Hugging Face), або бути власним / закритим кодом і дозволені до використання за результатами оцінки OPEA. + +* Моделі GenAI - великі мовні моделі (LLM), великі моделі бачення (LVM), мультимодальні моделі тощо. +* Інші модулі - компоненти системи ШІ (крім LLM/LVM моделей), включаючи + Модуль поглинання/обробки даних, вбудовані моделі/сервіси, векторні бази даних + (також відомі як індексація або сховища графічних даних), механізми підказок, системи пам'яті тощо. + +Кожен модуль системи буде охарактеризований очікуваною функціональністю та атрибутами. Ці характеристики +будуть оцінюватися для кожного конкретного варіанту реалізації (див. наступний розділ про оцінку). Для кожного модуля та моделі буде запропоновано кілька варіантів від різних постачальників, щоб забезпечити вибір та різноманітність. + +Ця платформа складається з набору композиційних можливостей, які дозволяють створювати кастомні агенти, налаштовувати асистентів ШІ та створювати повний наскрізний потік GenAI, що включає розширення пошуку та інші функціональні можливості, коли це необхідно. Платформа також включатиме інструменти для тонкого налаштування та оптимізації, а також посилання на них, оптимізації (наприклад, квантування) для підтримки створення ефективних, надійних рішень, які можна буде запускати локально в цільових обчислювальних середовищах підприємств. Подібно до будівельних блоків, можливості композиції можуть бути частиною репозиторію OPEA, або опубліковані у стабільному відкритому репозиторії (наприклад, Hugging Face) або пропонуватися екосистемою (наприклад, LangChain, LlamaIndex та Haystack). + +Важливою частиною композиційної пропозиції буде набір перевірених довідкових потоків, готових до завантаження та відтворення в середовищі користувачів. Серед безлічі готових довідкових потоків будуть і незалежні від домену потоки (наприклад, потік RAG для мовних запитань і відповідей, або мультимодальний потік для взаємодії з зображеннями і відео), які були налаштовані для різних провайдерів HW і налаштувань. Будуть також специфічні для домену потоки, такі як наскрізний потік фінансових послуг або консультант з питань харчування, які іноді називають мікросервісами. + +Існує загальна мова візуалізації, яка використовується для зображення компонента кожного потоку посилань, що надається. + +#### 2.1.2 Оцінка рішень GenAI, включаючи доповнення пошуку + +OPEA надаватиме засоби та послуги для повного оцінювання та класифікації компонентів і комплексних рішень GenAI у чотирьох сферах - продуктивність, функціональність, надійність та готовність до роботи на підприємстві. +Оцінка може бути проведена для потоку, створеного в рамках OPEA, або створеного в іншому місці, але з проханням оцінити його за допомогою платформи. + +Деякі з інструментів оцінювання будуть частиною репозиторію OPEA, тоді як інші будуть посиланнями на окремі бенчмарки, запропоновані екосистемою. + +OPEA пропонуватиме тести для самооцінки, які можуть виконувати користувачі. Крім того, він матиме технічне оснащення і персонал для проведення оцінювання за запитом. + +Оцінки OPEA можна переглянути на наступних рівнях: + +* Оцінювання - детальні тести або бенчмарки, проведені для певних модулів або + атрибутів наскрізного потоку. Оцінювання буде детальним і конкретним, + з перевіркою функціональності та характеристик, визначених для цього модуля + або потоку. +* Градація - об'єднання індивідуальних оцінок в оцінку за кожною з чотирьох сфер + чотирьох доменів - Продуктивність, Функціональність, Надійність і + Готовність до роботи на підприємстві. Сукупна оцінка за кожну область може бути L1 Початковий рівень; L2 Ринковий рівень; або L3 Просунутий рівень. +* Сертифікація - ще не вирішено, чи буде запропонована сертифікація + в рамках OPEA. Однак, проект пропозиції для розгляду полягає в тому, щоб дозволити сертифікацію в рамках OPEA, яка буде визначатися шляхом забезпечення мінімального рівня 2 в усіх чотирьох сферах. + +![Key capabilities provided by OPEA](images/framework-image3.png) + +Рисунок 2-1 Основні можливості, які надає OPEA + +Додаток А до цього документу є попереднім проєктом запропонованої специфікації та зразків еталонних потоків. + +## 3. Компоненти фреймворку, архітектура і потік + +Визначення OPEA (див. Додаток А) включає характеристику компонентів сучасного стану (SotA) композитних систем, включаючи пошук-доповнення, та їх архітектуру у вигляді потоку та стеку SW. + +У Додатку А є шість розділів, які стануть відправною точкою для більш детального та +спільної роботи над визначенням OPEA: + +* A1: Компоненти системи - перелік компонентів, з яких складається система, разом з їх ключовими характеристиками. Деякі системи, які будуть оцінюватися, можуть включати лише підмножину цих компонентів. +* A2: Архітектура SW - Діаграма, що показує рівень компонентів у стеку SW +* A3: Потоки системи - Діаграма(и), що ілюструє(ють) потік наскрізної операції через відповідні компоненти. +* A4: Вибір специфікацій на рівні системи і компонентів +* A5: Градація - класифікація систем, що оцінюються на основі продуктивності, функцій, надійності та готовності до роботи на рівні підприємства. +* A6: Еталонні потоки - список еталонних потоків, які демонструють ключові випадки використання і дозволяють завантажувати і реплікувати їх для швидшого створення екземплярів потоку. + +Припущення для розробки розділів OPEA включають: + +* OPEA є зразком композиційних фреймворків і не має на меті конкурувати з популярними фреймворками. Він покликаний допомогти оцінити плюси і мінуси різних рішень і покращити інтероперабельність компонентів. +* У виробництві, ймовірно, багато клієнтів будуть використовувати власні власні трубопроводи. +* Ця концептуальна схема є додатковою і призначена для заохочення сумісності компонентів системи, а також додавання спеціалізованих можливостей, таких як оптимізація з урахуванням вимог до гігієни, доступ до інноваційних функцій і різноманітних мікроасистентів. різноманітних помічників і мікросервісів. +* Гнучкість і можливість легко підключати і замінювати моделі та інші компоненти. Можливість заміни компонентів є важливим фактором швидкого розвитку галузі. +* Забезпечення середовища для експериментів з різними варіантами рішень - наприклад, який вплив (продуктивність системи E2E) при заміні загального компонента переранжування на компонент ранжування конкретного постачальника. + +Слід зазначити, що остаточне формування компонентів структури, архітектури і потоків буде спільно визначено технічним комітетом після того, як буде створено повне визначення OPEA і структуру управління буде створено. Очікується також, що специфікація буде регулярно оновлюватися, щоб відображати +швидко мінливого стану справ у просторі. + +## 4. Оцінка компонентів і потоків GenAI + +Однією з важливих переваг для екосистеми від розвитку та широкого використання OPEA є структурований набір оцінок, який може забезпечити надійний зворотний зв'язок щодо потоків GenAI - незалежно від того, чи вони створені в рамках OPEA, чи деінде, але мають видимість і доступ, що дозволяє проводити оцінювання. +Оцінювання може здійснюватися шляхом аналізу окремих компонентів або повних комплексних рішень GenAI. +Оцінювання в контексті OPEA стосується оцінки окремих аспектів рішення - наприклад, його затримки або точності відповідно до визначеного набору тестів. Оцінки розглядаються в цьому розділі. Градація - це сукупність оцінок, і вона розглядається в наступному розділі. + +Компоненти і цілі наскрізні потоки будуть оцінюватися в чотирьох сферах - продуктивність, функціональність, надійність і корпоративна готовність. + +Продуктивність можна оцінити на рівні компонентів - наприклад, затримку векторної бази даних на заданому великому індексованому наборі даних або затримку і пропускну здатність моделі LLM. Крім того, продуктивність потрібно +оцінювати для наскрізних рішень, які виконують визначені завдання. Термін «продуктивність» стосується аспектів швидкості (наприклад, затримки), пропускної здатності (наприклад, пам'яті або розміру контексту), а також точності або результатів. + +OPEA може використовувати існуючі специфікації оцінювання, такі як ті, що використовуються системами SotA RAG, та інші стандартні бенчмарки, де це можливо (наприклад, MMLU). Що стосується функціональності, існують еталони та набори даних доступні для оцінки конкретної цільової функціональності, наприклад, багатомовності (як FLORES) або коду поколінь (наприклад, Human-Eval). + +Для оцінки достовірності/безпеки галюцинацій специфікація буде використовувати існуючі бенчмарки, такі як RGB-бенчмарк / Truthful QA, де це можливо. + +Деякі оцінки готовності підприємства включають аспекти масштабованості (наскільки великий набір даних може обробляти система, розмір векторного сховища, розмір і тип моделей), готовність інфраструктури (хмарна чи «голий метал») і простота розгортання програмного забезпечення (будь-які кроки після OPEA, необхідні для широкого розгортання). Одним із показників, які можна оцінити в цій категорії, є загальна вартість/сукупна вартість володіння повним наскрізним потоком GenAI. + +Якщо для деяких аспектів композитних рішень GenAI немає у вільному доступі надійних еталонів або тестів, будуть докладені зусилля для забезпечення їх створення. Оскільки багато з поточних (на початок 2024 року) тестів зосереджені на продуктивності та функціях, будуть докладені зусилля, щоб доповнити їх за необхідності для оцінювання надійності та готовності підприємства. + +При розробці оцінок слід використовувати досвід аналогічних оцінок, якщо такий є. Наприклад, посилаючись на оцінку RAG, проведену Нільсом Реймерсом з Coere. Детальніше див. тут: + +* Людські уподобання +* Середня точність E2E +* Багатомовність +* Довготривалий контекст «Голки в стозі сіна» +* Специфіка домену + +Розробка оцінок розпочнеться з зосередження уваги на основних сценаріях використання потоку РАВ, таких як Open Q&A. Це дозволить порівняти їх із загальноприйнятими промисловими оцінками (див. Cohere, GPT-4) + +## 5. Структура оцінювання + +Структура оцінювання OPEA відноситься до конкретних тестів і контрольних показників як до «оцінок» - див. попередній розділ для деталей. «Градація» - це частина оцінювання OPEA, яка об'єднує декілька індивідуальних оцінок в один з трьох рівнів оцінок на одному з трьох рівнів у кожній з чотирьох сфер оцінювання - ефективність, характеристики, надійність і готовність підприємства. + +Наступний проект системи оцінювання наведено лише для ілюстрації та обговорення. Система оцінювання повинна бути визначена і впроваджена на основі обговорень в органі технічної експертизи і будь-якого іншого механізму управління, який буде визначений для OPEA. + +Для забезпечення того, щоб композиційні системи вирішували широкий спектр проблем, пов'язаних з розгортанням підприємства, система класифікації має чотири категорії: + +* Продуктивність - Орієнтована на загальну продуктивність системи та ефективність/TCO +* Функції - обов'язкові та додаткові можливості компонентів системи +* Надійність - здатність гарантувати якість, безпеку і надійність. При цьому враховується відповідна державна або інша політика. +* Готовність підприємства - можливість використання у виробництві в умовах підприємства. + +Сьогодні спільноти та промисловість добре розуміють можливості Продуктивності та Функцій, в той час як надійність і готовність підприємства все ще перебувають на ранній стадії аналізу й оцінки, коли мова йде про рішення GenAI. Тим не менш, всі сфери є важливими для забезпечення ефективних, безпечних, надійних рішень, що враховують конфіденційність і готові до широкого розгортання. + +Система оцінювання не призначена для додавання будь-яких конкретних тестів або критеріїв. Всі індивідуальні тести повинні бути частиною оцінювання. Скоріше, мета системи оцінювання полягає в тому, щоб надати загальний рейтинг щодо продуктивності, функціональності, надійності та корпоративної готовності потоку GenAI на основі безлічі індивідуальних оцінок. Очікується, що вона надасть абстраговане і спрощене уявлення про потік GenAI, що оцінюється. Буде зроблена спроба відповісти на два основні питання - яким є рівень можливостей потоку GenAI порівняно з іншими потоками, що оцінюються на той час, а також оцінити деякі необхідні вимоги (наприклад, щодо безпеки і готовності підприємства) для надійного розгортання рішень GenAI в масштабі. A система оцінювання встановлює механізм для оцінки різних побудованих рішень ШІ (наприклад, конкретних потоків RAG) в контексті структури OPEA. + +Для кожної категорії буде встановлено 3 рівні оцінювання: + +* L1 - Початковий рівень - обмежені можливості. Рішення може розглядатися як менш просунутим або продуктивним порівняно з іншими рішеннями, оціненими для подібних завдань. Воно може зіткнутися з проблемами при розгортанні (якщо є недоліки в надійності або готовності підприємства). +* L2 – Ринковий - Відповідає потребам ринку. Рішення представляє середній діапазон систем, що розглядаються та оцінюються. Його можна безпечно розгортати у виробничих корпоративних середовищах і, як очікується, відповідатиме поширеним стандартам безпеки та прозорості. +* L3 - Просунутий - Перевищує середні ринкові потреби. Рішення представляє найвищий рівень компонентів або наскрізних потоків GenAI, що розглядаються та оцінюються на даний момент. Воно відповідає або перевищує всі вимоги щодо безпеки, конфіденційності, прозорості та розгортання в масштабі. + +Система оцінювання може бути використана користувачами GenAI, щоб переконатися, що рішення, яке оцінюється, відповідає очікуванням екосистеми в галузі, яка розвивається надзвичайно швидко. Вона може виділити виняткові рішення або вказати на проблемні області. Структурований підхід у чотирьох сферах гарантує, що сукупний досвід екосистеми в будь-який момент часу відображається у зворотному зв'язку з потенційними користувачами конкретного рішення GenAI. Природно, що цільові пости того, що визначається як L1/L2/L3 повинні регулярно оновлюватися, оскільки галузь штовхає GenAI до найсучасніших досягнень. + +![Overall view of the grading system across four domains](images/framework-image4.png) + +Рисунок 5-1 Загальний вигляд системи оцінювання в чотирьох сферах + +Система оцінювання може відігравати різну роль для постачальників моделей, будівельних блоків (модулів) і повних комплексних рішень GenAI. Постачальники можуть отримати структурований і неупереджений відгук про сильні та слабкі сторони їхньої пропозиції порівняно з рештою ринку. Очікується, що формулювання всіх ключових сфер для розгортання на підприємствах допоможе провайдерам забезпечити більш надійну і повну доставку та постійне вдосконалення для широкого розгортання на підприємствах. Це також допоможе виділити видатні рішення, забезпечивши їм попутні вітри в сьогоденні та диференціюючи їхні пропозиції. + +Якщо і коли сертифікація стане частиною структури (обговорення та рішення будуть прийняті на більш пізньому етапі), передбачається, що система повинна бути принаймні на рівні L2 для кожного аспекту, щоб бути «сертифікованою OPEA». +Така сертифікація може підвищити впевненість як постачальників, так і користувачів у тому, що рішення GenAI, яке оцінюється, є конкурентоспроможним і готовим до широкого розгортання, не надаючи при цьому жодних гарантій. + +Набори оціночних тестів і пов'язане з ними оцінювання дозволять постачальникам ІТ-послуг і галузевим компаніям, які впроваджують рішення, мати можливість самотестуватися, оцінювати та класифікувати себе за різними показниками. Набір тестів складатиметься з відповідних тестів/бенчмарків, які наразі доступні у спільноті, а за відсутності стандартних бенчмарків, будуть розроблені нові тести. Для кожної з цих метрик ми матимемо механізм оцінювання, щоб зіставити певні діапазони балів до L1, L2 або L3 на цей час. Ці діапазони будуть періодично оновлюватися, щоб відображати прогрес у цій галузі. + +Рисунок 5-2 ілюструє деякі з аспектів, що підлягають оцінці в чотирьох сферах. Приклади, виділені жовтим кольором, показують мінімальні оцінки, необхідні для кожної з областей. Приклади, виділені синім кольором, показують наступний рівень оцінок, які вказують на більш високі можливості конвеєра RAG. Наступний і найвищий рівні оцінок позначені текстом без кольору. + +![Capabilities and Testing Phases](images/framework-image5.png) + +Рисунок 5-2 Можливості та етапи тестування + +## 6. Референтні потоки + +Референтні потоки - це наскрізні екземпляри кейсів використання в рамках OPEA. Вони являють собою конкретний вибір сумісних компонентів для створення ефективної реалізації рішення GenAI. Документація та посилання на еталонні потоки повинні містити вичерпну інформацію необхідну користувачам фреймворку для відтворення та виконання потоку, відтворюючи результати, про які повідомляється для потоку. Документація еталонного потоку повинна містити посилання на необхідні компоненти (які можуть надходити від різних постачальників), а також на необхідні скрипти та інше програмне забезпечення, необхідне для їх запуску. + +Кілька потоків будуть зосереджені виключно на відкритих моделях та інших компонентах, забезпечуючи повну прозорість коли це необхідно. Інші потоки можуть включати пропрієтарні компоненти, які можна викликати/активувати в рамках цих потоків. Однак компоненти, на які посилаються в довідковому потоці, повинні бути доступними для користувачів OPEA - незалежно від того, чи є вони відкритими або пропрієтарними, безкоштовними для використання або платними. + +Референтні потоки мають кілька основних цілей: + +* Продемонструвати репрезентативні приклади: В рамках OPEA, еталонні потоки демонструють потоки демонструють конкретне використання та завдання. Враховуючи притаманну системі гнучкість, можливі різні комбінації компонентів, що забезпечує максимальну гнучкість. Еталонні потоки демонструють, як конкретні шляхи та комбінації можуть бути ефективно реалізовані в рамках комбінації можуть бути ефективно реалізовані в рамках фреймворку. +* Підкреслити потенціал фреймворку: Пропонуючи оптимізовані потоки посилань які вирізняються високою продуктивністю, функціональністю, надійністю та корпоративною готовністю, користувачі можуть отримати уявлення про те, чого можна досягти. Досвід слугує цінним навчальним інструментом для досягнення цілей розгортання ШІ та планування. +* Сприяти легкому розгортанню: Еталонні потоки розроблені таким чином, щоб бути доступними і легко інстанціювати з відносно невеликими зусиллями. Це дозволяє реплікувати функціональний потік у своєму середовищі з мінімальними зусиллями, що дозволяє подальші модифікації за потреби. +* Заохочувати інновації та експерименти: Дозвольте користувачам в екосистемі експериментувати та впроваджувати інновації з широким набором потоків і максимізувати цінність для їх наскрізних сценаріїв використання. + +OPEA розгорне і розвиватиме мову візуалізації для відображення потоків проекту (наприклад, базовий потік для чату RAG/питання-відповіді), а також для документування вибору, зробленого для кожного еталонного потоку. Візуалізація має легенду (див. Рисунок 6-1), яка ілюструє ключові рішення в еталонному потоці (наприклад, послідовність функцій або контейнеризація) (див. Рисунок 6-2), а також рішення щодо реалізації для конкретної моделі та модулів (див. Додаток А, розділ А6). + +![Legend for Blueprint and Reference Flows](images/framework-image6.png) + +Рисунок 6-1 Умовні позначення для схеми та еталонних потоків + +![Example of blueprint RAG flow](images/framework-image7.png) + +Рисунок 6-2 Приклад схеми потоку RAG + +Розділ «Еталонні потоки» специфікації (Розділ A6 у Додатку A) містить початковий каталог еталонних потоків, що демонструє загальні завдання та різноманітні комбінації апаратних засобів і компонентів ШІ. Оскільки ця колекція еталонних потоків розширюється, з'являється різноманітний набір постачальників рішень +постачальників і варіацій апаратного забезпечення (Intel, NVIDIA та інші), а також моделей, модулів і конструкцій. + +## Додаток А - Проект Специфікацій OPEA + +**Rev 0.1 April 15, 2024** + +Проект специфікацій призначений для ілюстрації та обговорення. Додаток складається з шести розділів: + +* A1: Компоненти системи - список компонентів, що входять до складу системи, + разом з їх ключовими характеристиками. +* A2: Архітектура SW - Діаграма, що показує рівень компонентів у стеку SW +* A3: Потоки системи - Діаграма(и), що ілюструє(ють) потік наскрізної операції + через відповідні компоненти. +* A4: Вибір специфікацій на рівні системи та компонентів +* A5: Градація - Класифікація систем, що оцінюються, на основі продуктивності, функцій, надійності та готовності до роботи на рівні підприємства. +* A6: Референтні потоки - Список референтних потоків, які демонструють ключові випадки використання і дозволяють завантажувати та реплікувати їх для швидшого створення власної інстанції потоку. + +Це попередній проект рамкової специфікації ОЕА. Він дає початкове уявлення про зміст і, як очікується, буде суттєво розширений у майбутніх редакціях. + +Зауваження - Термін «специфікація» використовується в цьому проекті технічної записки та додатку як широкий робочий термін, що загалом відноситься до детального опису систем та їх компонентів. Однак, важливо зазначити, що цей термін може бути замінений або оновлений на основі більш точного опису та застосування ліцензійних міркувань Linux Foundation. + +### A1: Компоненти системи + +| Компоненти | Опис | OSS Приклади | Пропрієтарні приклади | +| ---------- | ----------- | ------------ | -------------------- | +| Agent framework | Оркестрове програмне забезпечення для побудови та розгортання робочих процесів, що поєднує компоненти пошуку інформації з LLM для створення агентів ШІ з контекстною інформацією | Langchain, LlamaIndex, Haystack, Semantic Kernel +| Ingest/Data Processing | Програмні компоненти, які можна використовувати для покращення даних, що індексуються для пошуку. Наприклад: обробка, очищення, нормалізація, вилучення інформації, розбиття на частини, токенізація, покращення метаданих. | NLTK, spaCY, HF Tokenizers, tiktoken, SparkNLP +| Embedding models/service | Моделі або сервіси, які перетворюють фрагменти тексту на вектори вбудовування для зберігання у векторній базі даних | HF Transformers, S-BERT | HF TEI, OpenAI, Cohere, GCP, Azure embedding APIs, JinaAI +| Indexing/Vector store | Програмне забезпечення для індексування інформації (розрідженої/векторної) та пошуку за запитом | Elasticsearch, Qdrant, Milvus, ChromaDB, Weaviate, FAISS, Vespa, HNSWLib, SVS, PLAID | Pinecone, Redis +| Retrieval/Ranking | Компонент SW, який може переоцінювати порядок релевантності існуючих контекстів | S-BERT, HF Transformers, Bi/Cross-encoders, ColBERT | Cohere +| Prompt engine | Компонент, який створює підказки для конкретних завдань відповідно до запитів і контексту, відстежує сеанси користувачів (зберігає історію/пам'ять) | Langchain hub +| Memory | Історія розмов у пам'яті та/або постійній базі даних | Langchain Memory module, vLLM (automatic prefix caching) +| LLM engine/service | Механізм логічного висновку LLM, який генерує текстові відповіді на основі заданих підказок і знайдених контекстів | vLLM, Ray, TensorRT-LLM | HF TGI, Deci Infery +| LLM Models | Моделі з відкритим і закритим кодом. | LLama2-7B,13B, Falcon 40B, Mixtral-7b, Gemma etc. | LLama2-70B, OpenAI, Cohere, Gemini, etc. +| Guardrails | Програмний компонент для забезпечення відповідності, фільтрації, безпечного реагування | LLM Guard | Purple llama, OpenAI safety control, NEMO-Guardrails +| Evaluation | Методи оцінки відповідності, продуктивності, точності, частоти помилок відповіді LLM | Recall, MAP, MTEB, MTBench, MMLU, TriviaQA, TruthfulQA… + + +Таблиця A1.1 Перелік ключових компонентів. + +### A2: Архітектура SW + +Підтримує вибір моделі та інтеграцію даних у популярних фреймворках, орієнтованих на користувача. Використовує популярні агентські фреймворки (також відомі як оркестрові фреймворки або платформи для побудови штучного інтелекту) для підвищення продуктивності розробників і доступності оптимізації платформи. + +Тюнінг рішень використовує оптимізацію платформи за допомогою популярних доменних фреймворків, таких як екосистема Hugging Face, щоб зменшити складність для розробників і забезпечити гнучкість на різних платформах. + +![OPEA solution stack](images/framework-image8.png) + +Рисунок A2.1 - Стек рішень для OPEA. + + +### A3: Системні потоки + +![Main OPEA system RAG flow](images/framework-image9.png) + +Рисунок A3.1 - Основні потоки RAG в системі OPEA. + +### A4: Вибір специфікацій + +Оцінювання складеної генеративної системи штучного інтелекту вимагає як комплексного бачення можливостей, так і оцінки окремих компонентів. + +#### A4.1 Наскрізне оцінювання + +Нижче наведено кілька прикладів оцінок, що стосуються чотирьох сфер - продуктивності, функцій, надійності та готовності підприємства. + +##### Продуктивність +* Загальна продуктивність системи + * Затримка (затримка першого токена, середня затримка токена, потоковий і не потоковий вивід) + * Пропускна здатність + * За умови фіксованої комбінації різних компонентів RAG (конкретний екземпляр постачальника для кожного компонента), загальна продуктивність системи. + * Для конкретного завдання/домену перерахуйте комбінацію, яка забезпечить найкращу продуктивність системи. +* Оцінка Q&A (точність) + * Завдання: Відкрите Q&A + * Бази даних: NQ, TriviaQA і HotpotQA + * Метрика: Середня точність + * Індексація: KILT Wikipedia + +##### Функції / Функціональність + +* Функціональність + * Функції - мультимодальні, Multi-LLM, кілька варіантів моделей вбудовування, кілька вбудованих БД, довжина контексту + * Контекстна релевантність (точність/відповідність контексту) + * Заземленість/вірність + * Релевантність відповіді +* Багатокрокова аргументація + * Завдання: 3-кратні багатозахідні агенти REACT + * Бази даних: Вікіпедія (HotPotQA), Інтернет (Bamboogle) + * Метрика: Точність + * Тестові набори: Reflexion, Ofir Press +* Багатомовність + * Завдання: Семантичний пошук + * Якість пошуку + * Метрика: nDCG @10 + * 18 мов + * Бенчмарк: MIRCAL +* Багатомовність + * Завдання: Багатомовний MMLU, машинний переклад + * Метрика: Точність, BLEU + * Французька, іспанська, італійська, німецька, португальська, японська, корейська, арабська і китайська + * Бенчмарк: FLORES, MMLU +* Діалоговий агент і виклик функцій + * Завдання: діалогове використання інструментів і можливість виклику функцій одним поворотом + * Бенчмарк-1: Microsoft’s ToolTalk + * Бенчмарк-2: Berkeley's Function Calling Leaderboard (BFCL) + * Метрика використання інструментів: коефіцієнт успіху софта + * Виклики функцій: Швидкість проходження функції +* Довідка про випадки використання RAG на підприємстві + * Домени: Підтримка клієнтів, Підтримка на робочому місці (Тех), Асистент на робочому місці (Медіа), FAQ по техніці + * Метрика: Коефіцієнт виграшу проти Mixtral + +##### Готовність підприємства + +Оцінка готовності підприємства включає в себе оцінку наступних аспектів: + +1. Масштабованість +2. Можливість розгортання на виробництві +3. Оновлюваність +4. Спостережуваність/налагоджуваність + +Масштабованість пов'язана зі здатністю системи RAG масштабувати розмір/розміри різних компонентів, таких як наведені нижче приклади метрик: +* Розмір векторної DB +* Розмірність ретрівера (значення K у top-K документах) +* Максимальна довжина контексту, яку підтримує генератор +* Розмір параметрів генератора моделей +* Розмір для вбудовування + +Готовність до виробничого розгортання включає в себе різні можливості, такі як +* Ефективна подача висновків +* Інтеграція з різними корпоративними системами, такими як Slack/workday/SAP/Databases +* Можливості RAS на рівні підприємства +* Угоди про рівень обслуговування (SLA) щодо фактичності, можливості перевірки та забезпечення виконання + +Оновлюваність включає в себе можливість +* Постійне оновлення +* Оновлення онлайн +* Оновлення на рівні компонентів + +Спостережуваність/налагоджуваність включає в себе можливість для +* Виявлення помилок і віднесення їх до компонента +* Раннє виявлення деградації компонентів +* Відстеження генерації для налагодження збоїв (функціональних і продуктивності) +* Простежуваність кожного проміжного кроку (підказки для ланцюгових LLM) + +Прикладами спостережуваності є таблиці виводу Databricks Inference Tables/Phoenix Open Inference Traces або функції спостережуваності/моніторингу Langsmith. + +#### A4.2 Оцінка окремих компонентів + +Оцінка окремих компонентів (модулів) буде включати в себе: +* Трубопровід попередньої обробки даних +* Вбудовування - якість/зберігання/час обробки +* Чанкер, ретривер і ре-ранкер +* Генератор LLM - якість/затримка/довжина контексту/здатність до міркувань/виклик функцій/використання інструментів +* Автоматична оцінка проти ручної оцінки +* Спостережуваність +* Охоронні бар'єри +* Спонукання +* Генерація виводу - структурований/граматика/типи виводу(json/текст) + +Ранній приклад наступного рівня формулювання метрик, очікуваних за кожним основним компонентом. + +Назва компонента: Ретривер +* Метрика: Normalized Discounted Cumulative Gain@10 з BEIR benchmark datasets або иншими QA наборами даних +* Метрика: Context Recall@k +* Метрика: Context Precision@k +* Метрика: Hit Rate + +Назва компонента: LLM/Генерація +* Метрика: Вірність - Наскільки фактично правильною є згенерована відповідь (обчислюється як метрика ragas від 0 до 1) +* Метрика: Релевантність відповіді - наскільки згенерована відповідь відповідає запиту (обчислюється як метрика ragas від 0 до 1) + +### A5: Градація + +Для забезпечення того, щоб композиційні системи вирішували широкий спектр проблем, пов'язаних з розгортанням підприємства, система класифікації має чотири категорії: + +* Продуктивність - Орієнтована на загальну продуктивність системи та ефективність/витрати на одиницю продукції +* Функції - обов'язкові та додаткові можливості компонентів системи +* Надійність - здатність гарантувати якість, безпеку і надійність. +* Готовність підприємства - можливість використання у виробництві в умовах підприємства. + +Для кожної категорії буде встановлено 3 рівні оцінювання +* L1 - Початковий рівень - обмежені можливості. Рішення прийнятне для PoC, але не для виробництва. +* L2 - Ринковий - Відповідає потребам ринку. Може бути впроваджений у виробництво. +* L3 – Просунутий - Перевищує потреби ринку. + +Частково рекомендація стосується процесу сертифікації (якщо і коли він стане частиною системи). Передбачається, що система повинна бути щонайменше на рівні 2 для кожного аспекту, щоб бути «сертифікованою за стандартом OPEA». + +#### A5.1 Оцінювання продуктивності + +Оцінка продуктивності ґрунтується на виконанні наскрізних вертикальних сценаріїв використання для всієї системи і фіксації відповідних метрик під час виконання. + +* E2E / Системний вигляд + * Постачальники мають гнучкість для інновацій/диференціації своїх реалізацій в рамках "чорної скриньки" +* Запуск фіксованого набору кейсів використання + * Покриття різних вертикальних сценаріїв + * Мінімальний рівень точності та надійності +* Вхідні набори даних для бенчмарку + * Відкриті/загальнодоступні + * Автоматичне генерування +* Масштабні фактори + * Підтримує різні розміри вхідної величини +* Метрики + * Затримка першого звернення, загальна затримка, пропускна здатність, вартість, узгодженість + * Формула для агрегування метрик для остаточного результату + * Вертикально-специфічні метрики + +##### Рівень продуктивності +Оцінка ефективності базується на наборі наскрізних тестів RAG «чорної скриньки», що базуються на реальних прикладах використання кейсів. Кожне рішення, подане до альянсу OpenRag, буде оцінюватися за цим критерієм. Продуктивність включатиме затримку, пропускну здатність, масштабованість, точність і узгодженість. + +* Рівень 1 - Базовий бенчмарк завершено +* Рівень 2 - Відповідає рівням продуктивності, які очікуються для більшості рішень GenAI, що виконують подібні бенчмарки/завдання. +* Level 3 – Перевершує продуктивність більшості рішень, що оцінюються на той час. Першокласні рішення для оцінюваних завдань. + +#### A5.2 Градація функцій + +Оцінка функцій складається з запуску функціональних тестів для перевірки можливостей системи в ряді різних доменів. Кожна область буде мати свій власний бал. + +* Функціональна сумісність/API + * Функціональні тести для кожного інтерфейсу + * Різні рівні деталізації для компонентів + * Відкриті інтерфейси для сторонніх джерел даних + * Повинні підтримувати різні типи джерел даних +* Можливості платформи і методи ШІ + * Поглинання, висновки, тонке налаштування + * Gen AI і навчання з підкріпленням +* Досвід користувача + * Простота використання + * Інструменти управління - єдина панель, між постачальниками + * Вимоги до графічного інтерфейсу + * Інструменти для розробників +* Моделі впровадження + * Оркестрування + * K8, hypervisor +* Відповідність + * Потенційна сертифікація (якщо і коли вона стане частиною фреймворку) на основі функціонального тестування + +##### Градація Функцій + +Функції оцінюються на предмет сумісності, можливостей платформи, користувацького досвіду (простота використання), методів штучного інтелекту, що застосовуються, і спеціалізованої функціональності. + +* Рівень 1 - Одинична модель і доступ до кількох джерел даних; обмежений доступ до даних; + Базові інструменти розробки або їх відсутність; базовий інтерфейс; «голий метал», ручне встановлення. +* Рівень 2 - Кілька моделей і доступ до різних джерел даних підприємства; повне + повне введення даних; базове тонке налаштування; гнучка конвеєризація модулів у потоці; базове управління агентами. +* Рівень 3 - Природна підтримка мультимодальних моделей і джерел даних; розширені + інструменти розробки з можливостями тонкого налаштування й оптимізації SotA; + провідні спеціалізовані функції + +#### A5.3 Оцінювання надійності + +Надійність і відповідальність ШІ розвиваються в оперативному сенсі. Дивіться надійний і відповідальний ШІ від NIST та Закон ЄС про ШІ. Поки ці зусилля розвиваються, ми пропонуємо класифікувати надійність рішень за осями безпеки, надійності, прозорості та впевненості: + +* Прозорість + * Відкриті вихідні моделі та код. Це забезпечує видимість фактично працюючого коду, можливість перевірки версій і підписаних двійкових файлів. + * Відкриті стандарти, повторне використання існуючих стандартів. + * Набори даних, які використовуються для навчання моделі, що дозволяє проаналізувати розподіл даних і будь-які упередження в них. Наприклад, якщо модель виявлення раку навчалася на популяціях, які є дуже різноманітними - етнічно (геном) або за умовами навколишнього середовища (вплив канцерогенів), вона несе в собі ризик застосовності при використанні для осіб, які не є репрезентативними для навчальної множини. + * Посилання на джерела/документи, використані при формуванні відповідей, захист від галюцинацій. Одна з головних переваг RAG. + * Відповідність нормативним вимогам, таким як ISO27001, HIPAA і FedRAMP. +* Безпека: + * Контроль доступу на основі ролей, сегментований доступ за ролями користувачів незалежно від використання однієї моделі. Це може бути етап попередньої або наступної обробки, який відфільтровує дані на основі доступу користувачів до різної інформації. Наприклад, виконавче керівництво може мати доступ до доходів компанії, фінансової звітності та списків клієнтів на відміну від інженера. + * Рішення, які працюють з мінімально необхідними привілеями процесу, щоб запобігти використанню експлойтів та підвищенню привілеїв, якщо додаток буде зламано. + * Запуск у довірених середовищах виконання, тобто апаратно-підтримуваних конфіденційних обчислювальних середовищах, які захищають використовувані дані, забезпечуючи конфіденційність і цілісність від привілейованих та інших процесів, що виконуються в тій самій інфраструктурі. Цінно особливо в хмарі. + * Атестація двійкових файлів, що використовуються, будь то моделі або програмне забезпечення. + * Перевірка логів, які вказують, коли і які оновлення були застосовані до моделей або іншого програмного забезпечення, включаючи патчі безпеки. + * Забезпечення того, що результати, проміжні та кінцеві, зберігаються лише на зашифрованих носіях і передаються кінцевим користувачам через безпечний транспорт. +* Надійність + * Надає однакову відповідь за інших однакових умов, коли підказки схожі, але відрізняються використанням синонімів. + * Повертає правильні відповіді для кожного тесту. + * Впевненість + * У сценаріях надання відповідей на запитання усвідомлення якості та актуальності даних, використаних у RAG, а також надання цієї інформації разом із відповіддю допомагає кінцевому користувачеві визначити, наскільки він може бути впевненим у відповіді. + * Посилання на джерела відповідей. Метадані можуть також використовуватися, щоб показати, наскільки актуальною є вхідна інформація. + * Що стосується завдань діагностики/класифікації, таких як виявлення раку, відхилення тестового об'єкта від навчального набору даних є показником ризику застосовності, впевненості у відповіді (про що згадувалося вище в розділі «Прозорість даних»). + +##### Градація надійності + +Оцінка аспектів прозорості, захисту приватності та безпеки +* Рівень 1 - Документування аспектів, що вимагаються у сфері довіри +* Рівень 2 - Підтримує контроль доступу на основі ролей - інформація, до якої здійснюється доступ/вилучення, є доступна на основі дозволу користувача (навіть якщо всі користувачі мають доступ до тієї самої моделі); +* Рівень 3 - підтримує функції безпеки (наприклад, запуск конфіденційних обчислень / довіреного середовища виконання). Підтримує атестацію моделей, що запускаються; прозорість вихідного коду для набору даних для попереднього навчання, вагових коефіцієнтів, даних/рецептів точного налаштування. + +#### A5.4 Градація готовності до роботи на підприємствах + +Оцінка готовності підприємства складається з оцінки здатності загального рішення до розгортання у виробничому середовищі підприємства. До уваги беруться наступні критерії: + +* Можливість локального і хмарного розгортання + * Щонайменше два типи екземплярів рішення (локальна інсталяція, хмарна, гібридний варіант) + * Готовність до хмарних / периферійних технологій (зверніться до процесу/рекомендацій CNCF) +* Готовність до безпеки для підприємств + * Багаторівневий контроль доступу і реагування (включаючи можливість інтеграції з внутрішніми інструментами) + * Захист даних і моделей (наприклад, включаючи GDPR) + * Управління життєвим циклом, включаючи оновлення безпеки, виправлення помилок тощо + * Рішення, упаковані у вигляді контейнерних додатків, які не запускаються від імені користувача root або мають більше можливостей, ніж потрібно. Найкращі практики використання контейнерів OWASP. + * Переконайтеся, що побічні продукти/проміжні результати, якщо вони зберігаються на диску, зберігаються після шифрування. +* Впевненість в якості + * Метрики точності та невизначеності для специфічних завдань підприємства + * Документація +* Високий рівень доступності + * Реплікація і захист даних/екземплярів + * Стійкість - час перезапуску екземпляра, якщо він згорів до нуля. + * Надає підтримку та інструменти для підтримки підприємств у режимі 24/7 +* Модель ліцензування та розповсюдження SW + * Масштабування від малих до великих клієнтів + * Можливість налаштування під конкретні потреби підприємства + +##### Ступінь готовності підприємства + +Має відповідати мінімальним вимогам щодо продуктивності, функцій та надійності +* Рівень 1 - Еталонний проєкт та посібник з розгортання +* Рівень 2 - Вихідні дані готові до розгортання на підприємстві (не потребують етапів після OPEA); контейнерний, підтримка K8; загалом надійний (але не гарантований) для виробництва розгортання в масштабі +* LРівень 3 - Створення складного моніторингу та інструментарію для підприємства середовища розгортання. Висока відмовостійкість - швидкий час перезапуску екземпляр. Забезпечує режим підтримки L2 + 24/7 "з коробки". + +### A6: Референтні потоки + +Цей розділ містить опис референтних потоків, які будуть доступні для завантаження та відтворення + +Потоки посилань слугують чотирьом основним цілям: + +* Продемонструвати репрезентативні приклади: В рамках OPEA, референтні потоки демонструють конкретне використання і завдання. Враховуючи притаманну системі гнучкість, можливі різні комбінації компонентів, що забезпечує максимальну гнучкість. Референтні потоки демонструють, як конкретні шляхи і комбінації можуть бути ефективно реалізовані в рамках фреймворку. +* Підкресліть потенціал фреймворку: Пропонуючи оптимізовані потоки посилань які вирізняються високою продуктивністю, функціональністю, надійністю і готовностю підприємства, користувачі можуть отримати уявлення про те, чого можна досягти. Досвід слугує цінним навчальним інструментом для досягнення цілей розгортання ШІ та планування. +* Сприяють легкому розгортанню: Референтні потоки розроблені таким чином, щоб бути доступними і легко інстанціювати з відносно меншими зусиллями. Це дозволяє реплікувати функціональний потік у своєму середовищі з мінімальними зусиллями, що дозволяє подальші модифікації за потреби. +* Заохочуйте інновації та експерименти: Дозвольте користувачам в екосистемі експериментувати та впроваджувати інновації з широким набором потоків і максимізувати цінність для їх наскрізних сценаріїв використання. + +Поточні приклади референтних потоків наведено для ілюстрації. Очікується, що набір референтних потоків буде розширюватися і охоплюватиме різні комбінації компонентів HW і SW/AI від різних постачальників. + +Описи референтних потоків повинні забезпечувати високу чіткість щодо того, що і як можна відтворити, а також відтворити результати в середовищі користувача OPEA. Всі референтні потоки повинні мати візуалізацію, яка пояснює, які компоненти конкретизуються і як вони пов'язані в потоці. Для всіх зображень референтних потоків буде використовуватися графічна легенда, описана на Рисунку 6.1. + + +![Reference Design Flows Visualization - legend](images/framework-image10.png) + +Рисунок A6.1 - Візуалізація потоків еталонного проекту - легенда + + +#### A6.1 – Xeon + Gaudi2 LLM RAG потік для чату QnA + +Референсний потік, який ілюструє потік RAG LLM підприємства, що працює на Xeon (GNR) з векторною базою даних і моделлю вбудовування, а також з бекендом Gaudi2, що обслуговує виведення моделі LLM. + +Референсний потік демонструє додаток RAG, який надає асистенту ШІ такі можливості +можливість отримання інформації із зовнішнього джерела для покращення контексту, який надається LLM. Асистент ШІ має доступ до зовнішньої бази знань, що складається з текстових і PDF-документів і веб-сторінок, доступних через пряме завантаження за URL-адресою. +Потік дозволяє користувачам взаємодіяти з LLM і запитувати інформацію, яка невідома LLM, або, наприклад, складається з власних джерел даних. + +Референсний потік складається з наступного детального процесу: сховище даних, яке використовується модулем +модуль пошуку для отримання релевантної інформації за запитом користувача. Запит і зовнішні дані зберігаються в кодованому векторному форматі, що дозволяє покращити семантичний пошук. Модуль retriever +кодує запит і надає процесору підказок знайдений контекст і запит для створення розширеної підказки для LLM. LLM отримує розширену підказку і генерує обґрунтовану +і дає користувачеві обґрунтовану та коректну відповідь. + +Потік складається з наступних компонентів: +* Потік надходження даних, який використовує платформу, що обслуговує модель вбудовування (TEI) та модель вбудовування (BGE-base) для кодування тексту та запитів у семантичні представлення (вектори), які зберігаються в індексі (векторна база даних Redis), обидві працюють на Intel Gen6 Xeon GNR для зберігання s пошуку даних. +* Потік обслуговування висновків LLM, що використовує TGI-Gaudi для моделі LLM, що обслуговується на Gaudi2, який икористовується для генерації відповідей шляхом введення підказок, які комбінують отримані релевантні документи з векторної бази даних Redis та запит користувача. +* Фреймворк оркестрування на основі LangChain, який ініціалізує трубопровід з вищезгаданими компонентами та організовує обробку даних від користувача (запит), кодування тексту, пошук, генерація підказок і виведення LLM. + +Повна еталонна реалізація цього потоку доступна у прикладі ChatQnA у репозиторії прикладів Intel's GenAI. + +![Xeon + Gaudi2 LLM RAG flow for Chat QnA](images/framework-image11.png) + +Рисунок A6-1.2 Потік Xeon + Gaudi2 LLM RAG для чату QnA + +Демонстраційний користувацький інтерфейс виглядає так, як показано нижче, що також показує різницю з RAG і без нього. + +![Xeon + Gaudi2 LLM RAG flow for Chat QnA – demo screen](images/framework-image12.png) + +Рисунок A6-1.3 Потік Xeon + Gaudi2 LLM RAG для чату QnA - демонстраційний екран + +#### A6.2 - Мультимодальний чат через зображення і відео + +Цей потік посилань демонструє мультимодальний конвеєр RAG, який використовує модель мови зору BridgeTower від Intel Labs для індексування і LLaVA для виведення, обидві працюють на прискорювачах Intel Gaudi AI. +Цей довідковий потік дозволяє чат-асистенту зі штучним інтелектом отримувати і розуміти мультимодальні контекстні документи, такі як зображення і відео. Наприклад, користувач може поставити ШІ-помічнику запитання, які вимагають міркувань над зображеннями та відео, що зберігаються на його комп'ютері. Це рішення +надає такі можливості, отримуючи зображення та відеокадри, що відповідають запиту користувача, і надаючи їх як додатковий контекст для великої моделі мови зору (LVLM), яка потім відповідає на запитання користувача. + +Зокрема, це еталонне рішення приймає зображення та відеофайли як вхідні дані. Вхідні дані кодуються в спільному мультимодальному просторі вбудовування BridgeTower, який є трансформатором мови технічного зору з відкритим вихідним кодом. +Детальні інструкції та документація для цієї моделі доступні на сайті Hugging Face. Потім мультимодальні вбудовування індексуються та зберігаються у векторній базі даних Redis. + +Під час виведення BridgeTower вбудовує запит користувача і використовує його для отримання найбільш релевантних зображень і відео з векторної бази даних. +Отримані контексти потім додаються до запиту користувача і передаються LLaVA для генерації відповіді. Детальні інструкції та документація для +LLaVA доступні на сайті Hugging Face. + +Для цього референтного потоку потрібні прискорювачі Intel Gaudi AI для моделі вбудовування та для генерації відповідей за допомогою LVLM. Всі інші компоненти референсного потоку можуть виконуватися на центральному процесорі. Повна наскрізна реалізація цього еталонного потоку з відкритим вихідним кодом доступна через Multimodal Cognitive AI. + +![Multimodal Chat Over Images and Videos Reference Flow](images/framework-image13.png) + +Малюнок A6-2.1 Мультимодальний чат за допомогою зображень і відео референсного потоку. + +Нижче наведено ілюстрацію користувацького інтерфейсу, створеного для цього довідкового потоку, який було продемонстровано на виставці Intel Vision: + +![Multimodal Chat Over Images and Videos – demo screen](images/framework-image14.png) + +Малюнок A6.2.2 Мультимодальний чат через зображення та відео - демонстраційний екран + +#### A6.3 – Оптимізований текстовий та мультимодальний трубопровід RAG + +Наведений нижче референсний потік демонструє оптимізований конвеєр текстових і мультимодальних RAG, який може бути використаний корпоративними клієнтами на процесорах Intel Xeon. + +Цей потік демонструє потік виведення RAG на неструктурованих даних і зображень на процесорах Intel 4-го та 5-го поколінь Xeon з використанням Haystack. Він базується на fastRAG для оптимізації пошуку. + +Першим кроком є створення індексу для векторної бази даних (у цьому випадку Qdrant). Для неструктурованих текстових даних використовуються речення-трансформери. Для зображень використовується BridgeTower для кодування вхідних даних. + +Після налаштування векторної бази даних наступним кроком буде розгортання чату виведення. Моделі LLM та LMM, що використовуються для виведення - це моделі Llama-2-7b-chat-hf, Llama-2-13b-chat-hf та LLaVa відповідно. + +На діаграмі нижче показано наскрізний потік для цього оптимізованого текстового і мультимодального чату з RAG. + +![Optimized Text and Multimodal RAG pipeline Reference Flow](images/framework-image15.png) + +Рисунок A6-3.1 Референсний потік оптимізованого текстового та мультимодального трубопроводу RAG + +Нижче наведено візуальний знімок чату, реалізованого за допомогою цього потоку. Він показує, як чат-бот з підтримкою RAG на рисунку A6-3.2 покращує відповідь на запит про Суперкубок порівняно з реалізацією без RAG на рисунку A6-3.3. + +![Non-RAG chatbot: Super Bowl Query](images/framework-image16.png) + +Малюнок A6-3.2: Чат-бот без RAG: Запит про Суперкубок + +![RAG enabled chatbot - Super Bowl query](images/framework-image17.png) + +Малюнок A6-3.3: Чат-бот з підтримкою RAG - запит про Суперкубок + diff --git a/docs-ua/framework/images/framework-image1.png b/docs-ua/framework/images/framework-image1.png new file mode 100755 index 00000000..ada53f94 Binary files /dev/null and b/docs-ua/framework/images/framework-image1.png differ diff --git a/docs-ua/framework/images/framework-image10.png b/docs-ua/framework/images/framework-image10.png new file mode 100644 index 00000000..b6085024 Binary files /dev/null and b/docs-ua/framework/images/framework-image10.png differ diff --git a/docs-ua/framework/images/framework-image11.png b/docs-ua/framework/images/framework-image11.png new file mode 100644 index 00000000..ad21205d Binary files /dev/null and b/docs-ua/framework/images/framework-image11.png differ diff --git a/docs-ua/framework/images/framework-image12.png b/docs-ua/framework/images/framework-image12.png new file mode 100644 index 00000000..d4e237cd Binary files /dev/null and b/docs-ua/framework/images/framework-image12.png differ diff --git a/docs-ua/framework/images/framework-image13.png b/docs-ua/framework/images/framework-image13.png new file mode 100644 index 00000000..6179884b Binary files /dev/null and b/docs-ua/framework/images/framework-image13.png differ diff --git a/docs-ua/framework/images/framework-image14.png b/docs-ua/framework/images/framework-image14.png new file mode 100644 index 00000000..dc1b3a13 Binary files /dev/null and b/docs-ua/framework/images/framework-image14.png differ diff --git a/docs-ua/framework/images/framework-image15.png b/docs-ua/framework/images/framework-image15.png new file mode 100644 index 00000000..23de8981 Binary files /dev/null and b/docs-ua/framework/images/framework-image15.png differ diff --git a/docs-ua/framework/images/framework-image16.png b/docs-ua/framework/images/framework-image16.png new file mode 100644 index 00000000..6be430c0 Binary files /dev/null and b/docs-ua/framework/images/framework-image16.png differ diff --git a/docs-ua/framework/images/framework-image17.png b/docs-ua/framework/images/framework-image17.png new file mode 100644 index 00000000..a0e01dd8 Binary files /dev/null and b/docs-ua/framework/images/framework-image17.png differ diff --git a/docs-ua/framework/images/framework-image2.png b/docs-ua/framework/images/framework-image2.png new file mode 100755 index 00000000..e3100d1a Binary files /dev/null and b/docs-ua/framework/images/framework-image2.png differ diff --git a/docs-ua/framework/images/framework-image3.png b/docs-ua/framework/images/framework-image3.png new file mode 100755 index 00000000..957e096c Binary files /dev/null and b/docs-ua/framework/images/framework-image3.png differ diff --git a/docs-ua/framework/images/framework-image4.png b/docs-ua/framework/images/framework-image4.png new file mode 100755 index 00000000..c54d7f72 Binary files /dev/null and b/docs-ua/framework/images/framework-image4.png differ diff --git a/docs-ua/framework/images/framework-image5.png b/docs-ua/framework/images/framework-image5.png new file mode 100755 index 00000000..eaa5c620 Binary files /dev/null and b/docs-ua/framework/images/framework-image5.png differ diff --git a/docs-ua/framework/images/framework-image6.png b/docs-ua/framework/images/framework-image6.png new file mode 100755 index 00000000..8f5656b4 Binary files /dev/null and b/docs-ua/framework/images/framework-image6.png differ diff --git a/docs-ua/framework/images/framework-image7.png b/docs-ua/framework/images/framework-image7.png new file mode 100755 index 00000000..e6b71299 Binary files /dev/null and b/docs-ua/framework/images/framework-image7.png differ diff --git a/docs-ua/framework/images/framework-image8.png b/docs-ua/framework/images/framework-image8.png new file mode 100755 index 00000000..84290f2d Binary files /dev/null and b/docs-ua/framework/images/framework-image8.png differ diff --git a/docs-ua/framework/images/framework-image9.png b/docs-ua/framework/images/framework-image9.png new file mode 100755 index 00000000..80894e08 Binary files /dev/null and b/docs-ua/framework/images/framework-image9.png differ diff --git a/docs-ua/getting-started/README.md b/docs-ua/getting-started/README.md new file mode 100644 index 00000000..7969d5d3 --- /dev/null +++ b/docs-ua/getting-started/README.md @@ -0,0 +1,109 @@ +# Початок роботи з OPEA + +## Передумови + +Щоб розпочати роботу з OPEA, вам потрібне відповідне обладнання і базове налаштування програмного забезпечення. + +Вимоги до обладнання: Якщо вам потрібен доступ до апаратного забезпечення, відвідайте хмару для розробників Intel Tiber, щоб вибрати серед варіантів, таких як процесори Xeon або Gaudi, які відповідають необхідним специфікаціям. + +Вимоги до програмного забезпечення: Будь ласка, зверніться до матриці підтримки [*Потрібне гіперпосилання*], щоб переконатися, що у вас є необхідні програмні компоненти. + +## Розуміння основних компонентів OPEA + +Перш ніж рухатися далі, важливо ознайомитися з двома ключовими елементами OPEA: GenAIComps і GenAIExamples. +1. GenAIComps: GenAIComps - це набір мікросервісних компонентів, які формують сервісний інструментарій. Сюди входять різноманітні сервіси, такі як llm (моделі вивчення мови), вбудовування і переранжування, серед інших. +2. GenAIExamples: У той час як GenAIComps пропонує ряд мікросервісів, GenAIExamples надає практичні, розгортаємі рішення, які допомагають користувачам ефективно впроваджувати ці сервіси. Приклади включають ChatQnA і DocSum, які використовують мікросервіси для конкретних додатків. + +## Візуальний посібник з розгортання +Для ілюстрації, ось спрощений візуальний посібник з розгортання ChatQnA GenAIExample, який демонструє, як ви можете налаштувати це рішення всього за кілька кроків. + +![Getting started with OPEA](assets/getting_started.gif) + +## Налаштування параметрів ChatQnA +Щоб розгорнути служби ChatQnA, виконайте ці кроки: + +``` +git clone https://github.com/opea-project/GenAIExamples.git +cd GenAIExamples/ChatQnA +``` + +### Встановіть потрібні змінні середовища: +``` +# Example: host_ip="192.168.1.1" +export host_ip="External_Public_IP" +# Example: no_proxy="localhost, 127.0.0.1, 192.168.1.1" +export no_proxy="Your_No_Proxy" +export HUGGINGFACEHUB_API_TOKEN="Your_Huggingface_API_Token" +``` + +Якщо ви використовуєте проксі-сервер, також встановіть змінні середовища, пов'язані з проксі-сервером: +``` +export http_proxy="Your_HTTP_Proxy" +export https_proxy="Your_HTTPs_Proxy" +``` + +Налаштуйте інші змінні середовища для конкретного випадку використання, вибравши одну з цих опцій відповідно до вашого обладнання: + +``` +# on Xeon +source ./docker_compose/intel/cpu/xeon/set_env.sh +# on Gaudi +source ./docker_compose/intel/hpu/gaudi/set_env.sh +# on Nvidia GPU +source ./docker_compose/nvidia/gpu/set_env.sh +``` + +### Розгортання мегасервісу та мікросервісів ChatQnA +Виберіть файл compose.yaml, який відповідає вашому обладнанню. +``` +#xeon +cd docker_compose/intel/cpu/xeon/ +#gaudi +cd docker_compose/intel/hpu/gaudi/ +#nvidia +cd docker_compose/nvidia/gpu/ +``` +Тепер ми можемо запустити сервіси +``` +docker compose up -d +``` +Він автоматично завантажить докер-образ на docker hub: +- docker pull opea/chatqna:latest +- docker pull opea/chatqna-ui:latest + +У наступних випадках вам потрібно буде зібрати докер-образ з вихідного коду самостійно. + +1. Failed to download the docker image. +2. Use the latest or special version. + +Будь ласка, зверніться до розділу ['Збірка образів докерів'](/examples/ChatQnA/deploy) з файлу, який відповідає вашому апаратному забезпеченню. + +### Взаємодія з мегасервісом і мікросервісом ChatQnA +Перш ніж взаємодіяти зі службою ChatQnA, переконайтеся, що служба TGI готова (її запуск займає до 2 хвилин). +``` +docker ps +# expected: all images's status are up +# TGI example on on Xeon and Nvidia GPU +docker logs tgi-service | grep Connected +# TGI example on on Gaudi +docker logs tgi-gaudi-service | grep Connected +# execpted output: ... INFO text_generation_router::server: router/src/server.rs:2311: Connected +``` +``` +curl http://${host_ip}:8888/v1/chatqna \ + -H "Content-Type: application/json" \ + -d '{ + "messages": "What is the revenue of Nike in 2023?" + }' +``` +Ця команда надасть відповідь у вигляді текстового потоку. Ви можете змінити параметр повідомлення у команді curl і взаємодіяти зі службою ChatQnA. + +### Що далі: + +1. Спробуйте [GenAIExamples](/examples/index.rst) детально, починаючи з [ChatQnA](/examples/ChatQnA/ChatQnA_Guide.rst) прикладу. + +2. Спробуйте [GenAIComps](/microservices/index.rst) для побудови мікросервісів. + +3. Зацікавлені у внеску в OPEA? Зверніться до [OPEA Community](/community/index.rst) і [Contribution Guides](/community/index.rst#contributing-guides). + + diff --git a/docs-ua/getting-started/assets/getting_started.gif b/docs-ua/getting-started/assets/getting_started.gif new file mode 100644 index 00000000..557d7894 Binary files /dev/null and b/docs-ua/getting-started/assets/getting_started.gif differ diff --git a/docs-ua/glossary.rst b/docs-ua/glossary.rst new file mode 100644 index 00000000..55615fe6 --- /dev/null +++ b/docs-ua/glossary.rst @@ -0,0 +1,10 @@ +:orphan: + +.. _glossary: + +Glossary of Terms +################# + +.. glossary:: + :sorted: + diff --git a/docs-ua/guide/installation/gmc_install/gmc_install.md b/docs-ua/guide/installation/gmc_install/gmc_install.md new file mode 100644 index 00000000..3f24bb47 --- /dev/null +++ b/docs-ua/guide/installation/gmc_install/gmc_install.md @@ -0,0 +1,119 @@ +# Встановлення з'єднувача мікросервісів GenAI (GMC) + +У цьому документі буде представлено коннектор мікросервісів GenAI (GMC) та його встановлення. Потім буде використано трубопровід ChatQnA як приклад використання для демонстрації функціональних можливостей GMC. + +## GenAI-мікросервіси-з'єднувач (GMC) + +GMC можна використовувати для динамічної компоновки та налаштування трубопроводів GenAI на Kubernetes. Він може використовувати мікросервіси, що надаються GenAIComps, та зовнішні сервіси для складання трубопроводів GenAI. Зовнішні сервіси можуть працювати в публічній хмарі або локально. Просто надайте URL-адресу та деталі доступу, такі як ключ API, і переконайтеся, що є мережеве підключення. Це також дозволяє користувачам налаштовувати трубопровід на льоту, наприклад, перемикатися на іншу велику мовну модель (LLM), додавати нові функції в ланцюжок (наприклад, додавати захисні бар'єри) тощо. GMC підтримує різні типи кроків у трубопроводі, такі як послідовні, паралельні та умовні. Для отримання додаткової інформації: + https://github.com/opea-project/GenAIInfra/tree/main/microservices-connector + +## Встановлення GMC + +**Передумови** + +- Для прикладу ChatQnA переконайтеся, що у вашому кластері працює кластер Kubernetes з принаймні 16 процесорами, 32 ГБ пам'яті та 100 ГБ дискового простору. Для встановлення кластера Kubernetes див: +[«Встановлення Kubernetes»](../k8s_install/README.md) + +**Завантажте репозиторій GMC на github** + +```sh +git clone https://github.com/opea-project/GenAIInfra.git && cd GenAIInfra/microservices-connector +``` + +**Створіть і перемістіть ваш образ у місце, вказане параметром `CTR_IMG`:** + +```sh +make docker.build docker.push CTR_IMG=/gmcmanager: +``` + +**Примітка:** Цей образ буде опублікований у вказаному вами особистому реєстрі. +І для того, щоб витягнути образ з робочого середовища, потрібно мати до нього доступ. Переконайтеся, що у вас є відповідні права доступу до реєстру, якщо наведені вище команди не працюють. + +**Встановлення GMC CRD** + +```sh +kubectl apply -f config/crd/bases/gmc.opea.io_gmconnectors.yaml +``` + +**Отримайте пов'язані маніфести для компонентів GenAI** + +```sh +mkdir -p $(pwd)/config/manifests +cp $(dirname $(pwd))/manifests/ChatQnA/*.yaml -p $(pwd)/config/manifests/ +``` + +**Скопіюйте маніфест роутера GMC** + +```sh +cp $(pwd)/config/gmcrouter/gmc-router.yaml -p $(pwd)/config/manifests/ +``` + +**Створіть простір імен для розгортання gmcmanager** + +```sh +export SYSTEM_NAMESPACE=system +kubectl create namespace $SYSTEM_NAMESPACE +``` + +**Примітка:** Будь ласка, використовуйте те саме значення параметра `SYSTEM_NAMESPACE`, яке ви використовували під час розгортання gmc-manager.yaml і gmc-manager-rbac.yaml. + +**Створіть ConfigMap для GMC, щоб зберігати маніфести компонентів GenAI та GMC Router** + +```sh +kubectl create configmap gmcyaml -n $SYSTEM_NAMESPACE --from-file $(pwd)/config/manifests +``` + +**Примітка:** Назву конфігураційної карти `gmcyaml` визначено у специфікації розгортання gmcmanager. Будь ласка, внесіть відповідні зміни, якщо ви хочете використовувати іншу назву конфігураційної карти. + +**Встановлення GMC manager** + +```sh +kubectl apply -f $(pwd)/config/rbac/gmc-manager-rbac.yaml +kubectl apply -f $(pwd)/config/manager/gmc-manager.yaml +``` + +**Перевірка результату інсталяції** + +```sh +kubectl get pods -n system +NAME READY STATUS RESTARTS AGE +gmc-controller-78f9c748cb-ltcdv 1/1 Running 0 3m +``` + +## Використовуйте GMC для створення трубопроводу chatQnA +Зразок для chatQnA можна знайти у файлі config/samples/chatQnA_xeon.yaml + +**Розгортання користувацького ресурсу GMC chatQnA** + +```sh +kubectl create ns chatqa +kubectl apply -f $(pwd)/config/samples/chatQnA_xeon.yaml +``` + +**GMC узгодить користувацький ресурс chatQnA і підготує всі пов'язані з ним компоненти/сервіси** + +```sh +kubectl get service -n chatqa +``` + +**Перевірте користувацький ресурс GMC chatQnA, щоб отримати URL-адресу доступу до трубопроводу** + +```bash +$kubectl get gmconnectors.gmc.opea.io -n chatqa +NAME URL READY AGE +chatqa http://router-service.chatqa.svc.cluster.local:8080 8/0/8 3m +``` + +**Розгорніть один клієнтський модуль для тестування програми chatQnA** + +```bash +kubectl create deployment client-test -n chatqa --image=python:3.8.13 -- sleep infinity +``` + +**Отримайте доступ до трубопроводу за наведеною вище URL-адресою з клієнтського модуля** + +```bash +export CLIENT_POD=$(kubectl get pod -n chatqa -l app=client-test -o jsonpath={.items..metadata.name}) +export accessUrl=$(kubectl get gmc -n chatqa -o jsonpath="{.items[?(@.metadata.name=='chatqa')].status.accessUrl}") +kubectl exec "$CLIENT_POD" -n chatqa -- curl $accessUrl -X POST -d '{"text":"What is the revenue of Nike in 2023?","parameters":{"max_new_tokens":17, "do_sample": true}}' -H 'Content-Type: application/json' +``` diff --git a/docs-ua/guide/installation/k8s_install/README.md b/docs-ua/guide/installation/k8s_install/README.md new file mode 100644 index 00000000..ff28b064 --- /dev/null +++ b/docs-ua/guide/installation/k8s_install/README.md @@ -0,0 +1,8 @@ +# Kubernetes Installation Options + +Існує декілька способів встановлення Kubernetes: + +* [Використовуючи AWS EKS Cluster](k8s_instal_aws_eks.md) +* [Використовуючи kubeadm](k8s_install_kubeadm.md) +* [Використовуючи Kubespray](k8s_install_kubespray.md) + diff --git a/docs-ua/guide/installation/k8s_install/k8s_instal_aws_eks.md b/docs-ua/guide/installation/k8s_install/k8s_instal_aws_eks.md new file mode 100644 index 00000000..3e6f729b --- /dev/null +++ b/docs-ua/guide/installation/k8s_install/k8s_instal_aws_eks.md @@ -0,0 +1,72 @@ +# Встановлення Kubernetes за допомогою кластера AWS EKS + +У цьому документі ми встановимо Kubernetes v1.30 за допомогою [AWS EKS Cluster](https://docs.aws.amazon.com/eks/latest/userguide/clusters.html). + +Створити новий кластер Kubernetes з вузлами в AWS EKS можна двома способами: +- ["eksctl"](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html) +- ["AWS Management Console and AWS CLI"](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-console.html). + +У цьому документі ми представимо метод «Консоль управління AWS і AWS CLI». + +## Передумови + +Перш ніж розпочати цей посібник, ви повинні встановити і налаштувати наступні інструменти іресурси, необхідні для створення й управління кластером Amazon EKS. + +- AWS CLI – Інструмент командного рядка для роботи з сервісами AWS, включаючи Amazon EKS. Для отримання додаткової інформації див. ["Installing, updating, and uninstalling the AWS CLI"](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) в Посібнику користувача інтерфейсу командного рядка AWS. Після встановлення AWS CLI рекомендуємо також налаштувати його. Для отримання додаткової інформації див. ["Quick configuration with aws configure"](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html#cli-configure-quickstart-config) у Посібнику користувача інтерфейсу командного рядка AWS. + +- kubectl – Інструмент командного рядка для роботи з кластерами Kubernetes. Для отримання додаткової інформації див. ["Installing or updating kubectl"](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html). +- Необхідні дозволи IAM - Принцип безпеки IAM, який ви використовуєте, повинен мати дозволи для роботи з ролями Amazon EKS IAM, ролями, пов'язаними зі службами, AWS CloudFormation, VPC і пов'язаними з ними ресурсами. Для отримання додаткової інформації див. ["Actions, resources, and condition keys for Amazon Elastic Kubernetes Service"](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelastickubernetesservice.html) і ["Using service-linked roles"](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html) у Посібнику користувача IAM. Ви повинні виконати всі кроки в цьому посібнику як той самий користувач. Щоб перевірити поточного користувача, виконайте таку команду: + + ``` + aws sts get-caller-identity + ``` + +## Створення кластера AWS EKS в AWS Console + +Ви можете звернутися до відео на YouTube, яке демонструє кроки створення кластера EKS в консолі AWS: +https://www.youtube.com/watch?v=KxxgF-DAGWc + +Крім того, ви можете звернутися безпосередньо до документації AWS: ["AWS Management Console and AWS CLI"](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-console.html) + +## Завантаження образів до приватного реєстру AWS + +Є кілька причин, чому ваші образи не можуть бути завантажені до загальнодоступного сховища образів, такого як Docker Hub. +Ви можете завантажити ваш образ до приватного реєстру AWS, виконавши наступні кроки: + +1. Створіть новий репозиторій ECR (якщо його ще не створено): + +Приватне сховище Amazon ECR містить ваші образи Docker, образи Open Container Initiative (OCI) і сумісні з OCI артефакти. Більше інформації про приватний репозиторій Amazon ECR: https://docs.aws.amazon.com/AmazonECR/latest/userguide/Repositories.html + +``` +aws ecr create-repository --repository-name my-app-repo --region +``` + +Замініть my-app-repo на бажану назву репозиторію, а - на ваш регіон AWS (наприклад, us-west-1). + +2. Автентифікація Docker у вашому реєстрі ECR: + +``` +aws ecr get-login-password --region | docker login --username AWS --password-stdin .dkr.ecr..amazonaws.com +``` + +Замініть на ваш регіон AWS, а на ідентифікатор вашого облікового запису AWS. + +3. Створіть свій образ Docker: + +``` +docker build -t my-app: . +``` + +4. Позначте свій Docker-образ, щоб його можна було перенести до вашого репозиторію ECR: + +``` +docker tag my-app: .dkr.ecr..amazonaws.com/my-app-repo: +``` + +Замініть на ідентифікатор вашого облікового запису AWS, на ваш регіон AWS, а my-app-repo на назву вашого репозиторію. + +5. Перенесіть ваш Docker-образ до сховища ECR за допомогою цієї команди: + +``` +docker push .dkr.ecr..amazonaws.com/my-app-repo:latest +``` diff --git a/docs-ua/guide/installation/k8s_install/k8s_install_kubeadm.md b/docs-ua/guide/installation/k8s_install/k8s_install_kubeadm.md new file mode 100644 index 00000000..49ab25a3 --- /dev/null +++ b/docs-ua/guide/installation/k8s_install/k8s_install_kubeadm.md @@ -0,0 +1,409 @@ +# Демонстрація встановлення Kubernetes за допомогою kubeadm + +У цій демонстрації ми встановимо Kubernetes v1.29 за допомогою офіційного [kubeadm](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/) на 2-вузловий кластер. + +## Конфігурація вузла + +| hostname | ip address | Operating System | +| ---------- | ------------------ | ---------------- | +| k8s-master | 192.168.121.35/24 | Ubuntu 22.04 | +| k8s-worker | 192.168.121.133/24 | Ubuntu 22.04 | + +Ці 2 вузли потребують наступного проксі для доступу до інтернету: + +- http_proxy="http://proxy.fake-proxy.com:911" +- https_proxy="http://proxy.fake-proxy.com:912" + +Ми припускаємо, що ці 2 вузли правильно налаштовані з відповідними проксі, тому ми можемо отримати доступ до інтернету як в терміналі bash, так і в репозиторії apt. + +## Крок 0. Очистіть навколишнє середовище + +Якщо на будь-якому з вищевказаних 2 вузлів раніше було встановлено Kubernetes або будь-яке інше контейнерне середовище виконання (наприклад, docker, containerd і т.д.), будь ласка, переконайтеся, що ви їх спочатку видалили. + +Якщо на одному з цих вузлів за допомогою `kubeadm` було встановлено попередній Kubernetes, зверніться до перелічених кроків, щоб спочатку [знести Kubernetes](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/#tear-down). +Якщо на одному з цих вузлів за допомогою `kubespray` було встановлено попередню версію Kubernetes, спершу зверніться до kubespray doc, щоб [очистити Kubernetes](https://kubespray.io/#/?id=quick-start). + +Після того, як Kubernetes буде зруйновано або очищено, будь ласка, виконайте наступну команду на всіх вузлах, щоб видалити відповідні пакунки: + +```bash +sudo apt-get purge docker docker-engine docker.io containerd runc containerd.io kubeadm kubectl kubelet +sudo rm -r /etc/cni /etc/kubernetes /var/lib/kubelet /var/run/kubernetes /etc/containerd /etc/systemd/system/containerd.service.d /etc/default/kubelet +``` + +## Крок 1. Встановіть відповідні компоненти + +Виконайте наступні дії на всіх вузлах: + +1. Експортуйте налаштування проксі в bash + +```bash +export http_proxy="http://proxy.fake-proxy.com:911" +export https_proxy="http://proxy.fake-proxy.com:912" +# Please make sure you've added all the node's ip addresses into the no_proxy environment variable +export no_proxy="localhost,127.0.0.1,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,192.168.121.35,192.168.121.133" +``` + +2. Налаштуйте системні параметри + +```bash +# Disable swap +sudo swapoff -a +sudo sed -i "s/^\(.* swap \)/#\1/g" /etc/fstab +# load kernel module for containerd +cat < 7m31s v1.29.6 +``` + +## Крок 3 (необов'язково) Перезавантажте кластер Kubernetes + +У деяких випадках вам може знадобитися скинути кластер Kubernetes, якщо деякі команди після `kubeadm init` не вдасться виконати, і ви захочете перевстановити Kubernetes. Будь ласка, зверніться до статті [tear down the Kubernetes](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/#tear-down) для отримання детальної інформації. + +Нижче наведено приклад того, як скинути щойно створений кластер Kubernetes: + +На вузлі k8s-master виконайте наступну команду: + +```bash +# drain node k8s-worker1 +kubectl drain k8s-worker1 --delete-emptydir-data --force --ignore-daemonsets +``` + +На вузлі k8s-worker1 виконайте наступну команду: + +```bash +sudo kubeadm reset +# manually reset iptables/ipvs if necessary +``` + +На вузлі k8s-master видаліть вузол k8s-worker1: + +```bash +kubectl delete node k8s-worker1 +``` + +На вузлі k8s-master очистіть головний вузол: + +```bash +sudo kubeadm reset +# manually reset iptables/ipvs if necessary +``` + +## Примітки + +1. За замовчуванням, нормальне навантаження не планується для вузлів у ролі K8S `control-plane` (тобто для головного вузла K8S). Якщо ви хочете, щоб K8S планував нормальне навантаження на ці вузли, будь ласка, виконайте наступні команди на головному вузлі K8S: + +```bash +kubectl taint nodes --all node-role.kubernetes.io/control-plane- +kubectl label nodes --all node.kubernetes.io/exclude-from-external-load-balancers- +``` + +2. Верифікація K8S CNI + + Якщо у вас виникли проблеми з міжвузловим зв'язком, будь ласка, виконайте наступні кроки, щоб переконатися, що k8s CNI працює належним чином: + +```bash +# Create the K8S manifest file for our debug pods +cat < +debug-ddfd698ff-z5qpv 1/1 Running 0 91s 10.244.235.199 k8s-master +``` + +Переконайтеся, що pod `debug-ddfd698ff-z5qpv` на вузлі k8s-master може пінгувати ip-адресу іншого pod `debug-ddfd698ff-7gsdc` на вузлі k8s-worker1, щоб перевірити роботу трафіку зі сходу на захід у K8S. + +``` +vagrant@k8s-master:~$ kubectl exec debug-ddfd698ff-z5qpv -- ping -c 1 10.244.194.66 +PING 10.244.194.66 (10.244.194.66) 56(84) bytes of data. +64 bytes from 10.244.194.66: icmp_seq=1 ttl=62 time=1.76 ms + +--- 10.244.194.66 ping statistics --- +1 packets transmitted, 1 received, 0% packet loss, time 0ms +rtt min/avg/max/mdev = 1.755/1.755/1.755/0.000 ms +``` + +Переконайтеся, що pod `debug-ddfd698ff-z5qpv` на вузлі k8s-master може пінгувати ip-адресу іншого вузла `k8s-worker1`, щоб перевірити, чи працює трафік північ-південь у K8S. + +``` +vagrant@k8s-master:~$ kubectl exec debug-ddfd698ff-z5qpv -- ping -c 1 192.168.121.133 +PING 192.168.121.133 (192.168.121.133) 56(84) bytes of data. +64 bytes from 192.168.121.133: icmp_seq=1 ttl=63 time=1.34 ms + +--- 192.168.121.133 ping statistics --- +1 packets transmitted, 1 received, 0% packet loss, time 0ms +rtt min/avg/max/mdev = 1.339/1.339/1.339/0.000 ms +``` + +Видаліть налагоджувальні pod'и після використання: + +```bash +kubectl delete -f debug.yaml +``` diff --git a/docs-ua/guide/installation/k8s_install/k8s_install_kubespray.md b/docs-ua/guide/installation/k8s_install/k8s_install_kubespray.md new file mode 100644 index 00000000..4e357104 --- /dev/null +++ b/docs-ua/guide/installation/k8s_install/k8s_install_kubespray.md @@ -0,0 +1,277 @@ +# Встановлення Kubernetes за допомогою Kubespray + +У цьому документі ми встановимо Kubernetes v1.29 за допомогою [Kubespray](https://github.com/kubernetes-sigs/kubespray) на 2-вузловий кластер. + +Існує декілька способів використання Kubespray для розгортання кластера Kubernetes. У цьому документі ми обираємо спосіб Ansible. Інші способи використання Kubespary наведено у [документі Kubespray](https://github.com/kubernetes-sigs/kubespray). + +## Підготовка вузла + +| hostname | ip address | Operating System | +| ---------- | ------------------ | ---------------- | +| k8s-master | 192.168.121.35/24 | Ubuntu 22.04 | +| k8s-worker | 192.168.121.133/24 | Ubuntu 22.04 | + + Ми припускаємо, що ці дві машини використовуються для 2-вузлового кластера Kubernetes. Вони мають прямий доступ до інтернету як у терміналі bash, так і в репозиторії apt. + + Якщо на будь-якому з вищевказаних 2 вузлів раніше було встановлено або Kubernetes, або будь-яке інше середовище виконання контейнерів (наприклад, docker, containerd тощо), будь ласка, переконайтеся, що ви очистили їх спочатку. Зверніться до [Демонстрація встановлення Kubernetes за допомогою kubeadm](./k8s_install_kubeadm.md), щоб очистити середовище. + +## Передумови + + Ми припускаємо, що існує третя машина, яка є вашою робочою машиною. Ви можете увійти на цю машину і виконати команду Ansible. Будь-який з двох вищезгаданих вузлів K8s може бути використаний як робоча машина. Якщо не вказано інше, всі наступні операції виконуються на робочій машині. + +Будь ласка, переконайтеся, що робоча машина може увійти до обох вузлів K8s через SSH без запиту пароля. Існують різні способи налаштувати вхід по ssh без запиту пароля. Простий спосіб - скопіювати відкритий ключ робочої машини на вузли K8s. Наприклад: + +``` +# generate key pair in the operation machine +ssh-keygen -t rsa -b 4096 +# manually copy the public key to the K8s master and worker nodes +cat ~/.ssh/id_rsa.pub | ssh username@k8s-master "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys" +cat ~/.ssh/id_rsa.pub | ssh username@k8s-worker "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys" +``` + +## Крок 1. Налаштуйте Kubespray та Ansible + +На цьому кроці потрібен Python3 (версія >= 3.10). Якщо у вас його немає, перейдіть на [веб-сайт Python](https://docs.python.org/3/using/index.html) для отримання інструкції з встановлення. + +Вам потрібно створити віртуальне середовище Python і встановити Ansible та інші залежності Kubespray. Для цього ви можете просто виконати наступні команди. Ви також можете звернутися до [Посібника з встановлення Kubespray Ansible](https://github.com/kubernetes-sigs/kubespray/blob/master/docs/ansible/ansible.md#installing-ansible) для отримання детальної інформації. Щоб отримати код kubespray, зверніться до [останньої версії](https://github.com/kubernetes-sigs/kubespray/releases) тегу kubespray. Тут ми використовуємо kubespary v2.25.0 як приклад. + +``` +git clone https://github.com/kubernetes-sigs/kubespray.git +VENVDIR=kubespray-venv +KUBESPRAYDIR=kubespray +python3 -m venv $VENVDIR +source $VENVDIR/bin/activate +cd $KUBESPRAYDIR +# Check out the latest release version tag of kubespray. +git checkout v2.25.0 +pip install -U -r requirements.txt +``` + +## Крок 2. Створіть власний інвенторій + +Інвентаризація Ansible визначає хости і групи хостів, на яких будуть виконуватися завдання Ansible. Ви можете скопіювати зразок інвентаризації за допомогою наступної команди: + +``` +cp -r inventory/sample inventory/mycluster +``` + +Відредагуйте файл інвентаризації `inventory/mycluster/inventory.ini`, щоб налаштувати ім'я та IP-адресу вузла. Файл інвентаризації, який використовується у цій демонстрації, наведено нижче: +``` +[all] +k8s-master ansible_host=192.168.121.35 +k8s-worker ansible_host=192.168.121.133 + +[kube_control_plane] +k8s-master + +[etcd] +k8s-master + +[kube_node] +k8s-master +k8s-worker + +[calico_rr] + +[k8s_cluster:children] +kube_control_plane +kube_node +calico_rr +``` +## Крок 3. Визначте конфігурацію Kubernetes + +Kubespray дає вам можливість налаштувати інсталяцію Kubernetes, наприклад, визначити: +- мережевий плагін +- менеджер контейнерів +- kube_apiserver_port +- kube_pods_subnet +- всі конфігурації аддонів K&s, або навіть визначити розгортання кластера на гіперскейлері, такому як AWS або GCP. + +Всі ці налаштування зберігаються у групових змінних, визначених у `inventory/mycluster/group_vars`. + +Налаштування K&s дивіться у файлі `inventory/mycluster/group_vars/k8s_cluster/k8s-cluster.yml`. + +**_Примітка:_** Якщо ви помітили проблеми з `TASK [kubernetes/control-plane : Kubeadm | Initialize first master]` у розгортанні K&, змініть порт, на якому буде слухатися сервер API, з 6443 на 8080. За замовчуванням Kubespray налаштовує хости kube_control_plane з незахищеним доступом до kube-apiserver через порт 8080. Зверніться до [kubespray getting-started](https://github.com/kubernetes-sigs/kubespray/blob/master/docs/getting_started/getting-started.md) + +``` +# The port the API Server will be listening on. +kube_apiserver_ip: "{{ kube_service_addresses | ansible.utils.ipaddr('net') | ansible.utils.ipaddr(1) | ansible.utils.ipaddr('address') }}" +kube_apiserver_port: 8080 # (http) +``` + +## Крок 4. Розгортаємо Kubernetes + +Ви можете очистити старий кластер Kubernetes за допомогою плейбука Ansible виконуючи наступні команди: +``` +# Clean up old Kubernetes cluster with Ansible Playbook - run the playbook as root +# The option `--become` is required, as for example cleaning up SSL keys in /etc/, +# uninstalling old packages and interacting with various systemd daemons. +# Without --become the playbook will fail to run! +# And be mindful that it will remove the current Kubernetes cluster (if it's running)! +ansible-playbook -i inventory/mycluster/inventory.ini --become --become-user=root -e override_system_hostname=false reset.yml +``` + +Після цього ви можете розгорнути Kubernetes з плейбуком Ansible за допомогою наступної команди: + +``` +# Deploy Kubespray with Ansible Playbook - run the playbook as root +# The option `--become` is required, as for example writing SSL keys in /etc/, +# installing packages and interacting with various systemd daemons. +# Without --become the playbook will fail to run! +ansible-playbook -i inventory/mycluster/inventory.ini --become --become-user=root -e override_system_hostname=false cluster.yml +``` + +Виконання плейбуків Ansible займе кілька хвилин. Після того, як плейбук буде виконано, ви можете перевірити вивід. Якщо існує `failed=0`, це означає, що виконання плейбука успішно завершено. + +## Крок 5. Створіть конфігурацію kubectl + +Якщо ви хочете скористатися інструментом командного рядка Kubernetes `kubectl` на вузлі **k8s-master**, будь ласка, увійдіть на вузол **k8s-master** і виконайте наступні команди: + +``` +mkdir -p $HOME/.kube +sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config +sudo chown $(id -u):$(id -g) $HOME/.kube/config +``` + +Якщо ви хочете отримати доступ до цього кластера Kubernetes з інших машин, ви можете встановити kubectl командою sudo apt-get install -y kubectl` і скопіювати конфігурацію з вузла k8-master та встановити права власності, як описано вище. + +Потім виконайте наступну команду, щоб перевірити стан вашого кластера Kubernetes: +``` +$ kubectl get node +NAME STATUS ROLES AGE VERSION +k8s-master Ready control-plane 31m v1.29.5 +k8s-worker Ready 7m31s v1.29.5 +$ kubectl get pods -A +NAMESPACE NAME READY STATUS RESTARTS AGE +kube-system calico-kube-controllers-68485cbf9c-vwqqj 1/1 Running 0 23m +kube-system calico-node-fxr6v 1/1 Running 0 24m +kube-system calico-node-v95sp 1/1 Running 0 23m +kube-system coredns-69db55dd76-ctld7 1/1 Running 0 23m +kube-system coredns-69db55dd76-ztwfg 1/1 Running 0 23m +kube-system dns-autoscaler-6d5984c657-xbwtc 1/1 Running 0 23m +kube-system kube-apiserver-satg-opea-0 1/1 Running 0 24m +kube-system kube-controller-manager-satg-opea-0 1/1 Running 0 24m +kube-system kube-proxy-8zmhk 1/1 Running 0 23m +kube-system kube-proxy-hbq78 1/1 Running 0 23m +kube-system kube-scheduler-satg-opea-0 1/1 Running 0 24m +kube-system nginx-proxy-satg-opea-3 1/1 Running 0 23m +kube-system nodelocaldns-kbcnv 1/1 Running 0 23m +kube-system nodelocaldns-wvktt 1/1 Running 0 24m +``` +А тепер вітаємо. Ваш двовузловий кластер K8s готовий до роботи. + +## Коротка довідка + +### Як розгорнути один вузол Kubernetes? + +Розгортання одновузлового кластера K8s дуже схоже на розгортання багатовузлового (>=2) кластера K8s. + +Дотримуйтесь попереднього [Крок 1. Налаштування Kubespray і Ansible](#step-1-set-up-kubespray-and-ansible), щоб налаштувати середовище. + +А потім у [Крок 2. Створіть власний інвенторій] (#step-2-build-your-own-inventory) ви можете створити одновузловий інвенторій Ansible, скопіювавши зразок одновузлового інвенторію, як показано нижче: + +``` +cp -r inventory/local inventory/mycluster +``` + +Відредагуйте інвентарний файл `inventory/mycluster/hosts.ini` для одного вузла, замінивши назву вузла з `node1` на вашу справжню назву (наприклад, `k8s-master`) за допомогою наступної команди: + +``` +sed -i "s/node1/k8s-master/g" inventory/mycluster/hosts.ini +``` + +Тоді ваш одновузловий інвенторій буде виглядати так, як показано нижче: + +``` +k8s-master ansible_connection=local local_release_dir={{ansible_env.HOME}}/releases + +[kube_control_plane] +k8s-master + +[etcd] +k8s-master + +[kube_node] +k8s-master + +[k8s_cluster:children] +kube_node +kube_control_plane +``` + +А потім виконайте [Крок 3. Розгортання Kubernetes](#step-3-deploy-kubernetes), будь ласка, зверніть увагу на **inventory name** під час виконання Ansible playbook, а саме `inventory/mycluster/hosts.ini` в одновузловому розгортанні. Після успішного виконання плейбука ви отримаєте готовий 1-вузловий K8s. + +І виконайте наступний [Крок 4. Створення конфігурації kubectl](#step-4-create-kubectl-configuration), щоб налаштувати `kubectl`. Ви можете перевірити стан за допомогою `kubectl get nodes`. + +### Як масштабувати кластер Kubernetes, щоб додати більше вузлів? + +Припустимо, у вас вже є двовузловий кластер K8s і ви хочете масштабувати його до трьох вузлів. Інформація про третій вузол наступна: + +| hostname | ip address | Operating System | +| ---------- | ------------------ | ---------------- | +| third-node | 192.168.121.134/24 | Ubuntu 22.04 | + +Переконайтеся, що третій вузол має доступ до Інтернету і може увійти в систему за допомогою `SSH` без введення пароля з вашого робочого комп'ютера. + +Відредагуйте файл інвентаризації Ansible, щоб додати інформацію про третій вузол до розділів `[all]` та `[kube_node]` наступним чином: +``` +[all] +k8s-master ansible_host=192.168.121.35 +k8s-worker ansible_host=192.168.121.133 +third-node ansible_host=192.168.121.134 + +[kube_control_plane] +k8s-master + +[etcd] +k8s-master + +[kube_node] +k8s-master +k8s-worker +third-node + +[calico_rr] + +[k8s_cluster:children] +kube_control_plane +kube_node +calico_rr +``` + +Потім ви можете розгорнути Kubernetes на третьому вузлі за допомогою плейбука Ansible за допомогою наступної команди: + +``` +# Deploy Kubespray with Ansible Playbook - run the playbook as root +# The option `--become` is required, as for example writing SSL keys in /etc/, +# installing packages and interacting with various systemd daemons. +# Without --become the playbook will fail to run! +ansible-playbook -i inventory/mycluster/inventory.ini --limit third-node --become --become-user=root scale.yml -b -v +``` +Після успішного виконання плейбуку ви можете перевірити готовність третього вузла за допомогою наступної команди: +``` +kubectl get nodes +``` + +Для отримання додаткової інформації про додавання/видалення вузла Kubernetes ви можете відвідати [Документ Kubespray](https://github.com/kubernetes-sigs/kubespray/blob/master/docs/operations/nodes.md#addingreplacing-a-worker-node). + +### Як налаштувати проксі-сервер? + +Якщо вашим вузлам потрібен проксі для доступу до інтернету, вам знадобляться додаткові конфігурації під час розгортання K8. + +Ми припускаємо, що ваш проксі виглядає наступним чином: +``` +- http_proxy="http://proxy.fake-proxy.com:911" +- https_proxy="http://proxy.fake-proxy.com:912" +``` + +Ви можете змінити параметри у файлі `inventory/mycluster/group_vars/all/all.yml`, щоб встановити `http_proxy`, `https_proxy` та `additional_no_proxy` наступним чином. Будь ласка, переконайтеся, що ви додали ip-адреси всіх вузлів у параметр `additional_no_proxy`. У цьому прикладі ми використовуємо `192.168.121.0/24` для представлення всіх IP-адрес вузлів. + +``` +## Set these proxy values in order to update package manager and docker daemon to use proxies and custom CA for https_proxy if needed +http_proxy: "http://proxy.fake-proxy.com:911" +https_proxy: "http://proxy.fake-proxy.com:912" + +## If you need exclude all cluster nodes from proxy and other resources, add other resources here. +additional_no_proxy: "localhost,127.0.0.1,192.168.121.0/24" +``` diff --git a/docs-ua/images/BrokenBlocks.png b/docs-ua/images/BrokenBlocks.png new file mode 100755 index 00000000..1c9104fd Binary files /dev/null and b/docs-ua/images/BrokenBlocks.png differ diff --git a/docs-ua/images/OPEA-favicon-32x32.png b/docs-ua/images/OPEA-favicon-32x32.png new file mode 100755 index 00000000..de450bf4 Binary files /dev/null and b/docs-ua/images/OPEA-favicon-32x32.png differ diff --git a/docs-ua/images/chatqna_architecture.png b/docs-ua/images/chatqna_architecture.png new file mode 100644 index 00000000..1392fca5 Binary files /dev/null and b/docs-ua/images/chatqna_architecture.png differ diff --git a/docs-ua/images/chatqna_flow_chart.png b/docs-ua/images/chatqna_flow_chart.png new file mode 100644 index 00000000..7966497b Binary files /dev/null and b/docs-ua/images/chatqna_flow_chart.png differ diff --git a/docs-ua/images/opea-horizontal-color-w200.png b/docs-ua/images/opea-horizontal-color-w200.png new file mode 100755 index 00000000..159720ab Binary files /dev/null and b/docs-ua/images/opea-horizontal-color-w200.png differ diff --git a/docs-ua/images/opea-horizontal-white-w200.png b/docs-ua/images/opea-horizontal-white-w200.png new file mode 100755 index 00000000..7e9fec04 Binary files /dev/null and b/docs-ua/images/opea-horizontal-white-w200.png differ diff --git a/docs-ua/index.rst b/docs-ua/index.rst new file mode 100644 index 00000000..5d84bfaa --- /dev/null +++ b/docs-ua/index.rst @@ -0,0 +1,80 @@ +.. _opea_home: + +Документація проєкту OPEA +########################## + +Ласкаво просимо до проєкту OPEA (|version|) документацію опубліковано |today|. +OPEA спрощує впровадження генеративного ШІ корпоративного рівня, ефективно інтегруючи безпечні, продуктивні та економічно ефективні робочі процеси генеративного ШІ в бізнес-процеси.. + +Вихідний код проекту OPEA зберігається в +`OPEA Project GitHub repository`_. + +.. коментар Посилання у цій сітці не можуть використовувати :ref:, тому що ми + використовуємо raw html. Існує ризик непрацюючих посилань, якщо вміст, + на який посилаються, буде переміщено. + +.. raw:: html + + + + +.. toctree:: + :maxdepth: 1 + :hidden: + + Documentation Home + introduction/index + getting-started/README + examples/index + microservices/index + deploy/index + eval/index + developer-guides/index + community/index + release_notes/index + faq + +.. _OPEA Project GitHub repository: https://github.com/opea-project diff --git a/docs-ua/introduction/index.rst b/docs-ua/introduction/index.rst new file mode 100644 index 00000000..de807d8d --- /dev/null +++ b/docs-ua/introduction/index.rst @@ -0,0 +1,69 @@ +.. _OPEA_intro: + +Огляд OPEA +########## + +OPEA (Open Platform for Enterprise AI) - це платформа, яка дозволяє створювати +і оцінювати відкриті, мультипровайдерні, надійні і комбіновані рішення для генеративного ШІ +(GenAI). Вона використовує найкращі інновації з усієї екосистеми, водночас +зберігаючи при цьому потреби на рівні підприємства в центрі уваги. + +OPEA спрощує впровадження композитних рішень GenAI корпоративного рівня, починаючи з фокусу на пошуковому доповненому генеративному ШІ (Retrieval Augmented Generative AI або RAG). +Платформа призначена для полегшення ефективної інтеграції безпечних, продуктивних і економічно ефективних робочих процесів GenAI в бізнес-системи та управління їх розгортанням, що сприяє швидшому впровадженню GenAI і підвищенню його цінності для бізнесу. + +Платформа OPEA включає в себе: + +* Детальний фреймворк комбінованих будівельних блоків мікросервісів для найсучасніших систем GenAI, включаючи LLM, сховища даних та механізми підказок + +* Архітектурні схеми доповнених пошуком GenAI стеку компонентів структури і наскрізних робочих процесів + +* Численні мікро- і мегасервіси для запуску вашого GenAI у виробництво і розгортання + +* Чотирьохетапне оцінювання систем GenAI за продуктивністю, функціями, надійністю і готовністю до роботи на рівні підприємства + +Архітектура проєкту OPEA +************************ + +OPEA використовує мікросервіси для створення високоякісних додатків GenAI для підприємств, спрощуючи процес масштабування та розгортання на виробництві. +Ці мікросервіси використовують композитор сервісів, який об'єднує їх у мегасервіс, створюючи таким чином реальні корпоративні програми штучного інтелекту. + +Мікросервіси: Гнучка і масштабована архітектура +=============================================== + +Документація :ref:`GenAIComps` описує набір мікросервісів. Кожен мікросервіс призначений для виконання певної функції або завдання в архітектурі програми. +Розбиваючи систему на ці менші, автономні сервіси, мікросервіси сприяють модульності, гнучкості та масштабованості. +Такий модульний підхід дозволяє розробникам самостійно розробляти, розгортати і масштабувати окремі компоненти +додатку, що полегшує його підтримку і розвиток з часом. Всі мікросервіси є контейнерними, що дозволяє розгортати їх у хмарі. + +Мегасервіси: Комплексне рішення +=============================== + +Мегасервіси - це архітектурні конструкції вищого рівня, що складаються з одного або декількох мікросервісів. +На відміну від окремих мікросервісів, які зосереджені на конкретних завданнях або функціях, мегасервіс організовує кілька мікросервісів для надання комплексного рішення. +Мегасервіси інкапсулюють складну бізнес-логіку та організацію робочих процесів, координуючи взаємодію між різними мікросервісами для виконання конкретних вимог додатків. +Такий підхід дозволяє створювати модульні, але інтегровані додатки. Ви можете знайти колекцію додатків на основі варіантів використання у :ref:`GenAIExamples` документації. + +Шлюзи: Індивідуальний доступ до мега- та мікросервісів +====================================================== + +Шлюз слугує інтерфейсом для доступу користувачів до мегасервісу, забезпечуючи +індивідуальний доступ на основі вимог користувача. Він діє як точка входу для +вхідних запитів, перенаправляючи їх до відповідних мікросервісів в рамках +архітектури мегасервісу. + +Шлюзи підтримують визначення API, версіювання API, обмеження швидкості та трансформацію запитів, що дозволяє тонко контролювати взаємодію користувачів з +базовими мікросервісами. Абстрагуючись від складності базової інфраструктури, шлюзи забезпечують безперебійну та зручну взаємодію з мегасервісом. + +Наступний крок +************** + +Посилання на: + +* Посібник з початку роботи +* Долучайтеся до спільноти OPEA з відкритим вихідним кодом +* Перегляньте вікі-сторінку OPEA, списки розсилки і робочі групи: https://wiki.lfaidata.foundation/display/DL/OPEA+Home + +.. toctree:: + :maxdepth: 1 + + ../framework/framework diff --git a/docs-ua/microservices/index.rst b/docs-ua/microservices/index.rst new file mode 100644 index 00000000..cddeca37 --- /dev/null +++ b/docs-ua/microservices/index.rst @@ -0,0 +1,33 @@ +.. _GenAIComps: +.. _GenAIMicroservices: + +Мікросервіси GenAI +################## + +Мікросервіси GenAI використовують композитор послуг, щоб зібрати мегасервіс, +адаптований для реальних застосунків корпоративного ШІ. Всі мікросервіси контейнеризовані, +що дозволяє розгортати їх у хмарі. Дізнайтеся, як використовуються мікросервіси в :ref:`GenAIExamples`. + +Ми створюємо цю документацію мікросервісів з вмісту в :GenAIComps_blob:`GenAIComps` репозиторію GitHub. + + +.. toctree:: + :maxdepth: 1 + :glob: + + /GenAIComps/README + /GenAIComps/* + +**Мікросервіси. Зміст** + +.. rst-class:: rst-columns + +.. contents:: + :local: + :depth: 1 + +---- + +.. comment Цей include-файл генерується у Makefile під час збірки doc з усіх каталогів, знайдених у каталозі GenAIComps/comps + +.. include:: microservices.txt diff --git a/docs-ua/release_notes/index.rst b/docs-ua/release_notes/index.rst new file mode 100644 index 00000000..e776a1e6 --- /dev/null +++ b/docs-ua/release_notes/index.rst @@ -0,0 +1,16 @@ +.. _release_notes: + +Примітки до випуску +################### + +Примітки до випуску поточного і попередніх випусків заархівовано тут. + +.. rst-class:: rst-columns3 + +.. toctree:: + :maxdepth: 1 + :glob: + :reversed: + + v* + diff --git a/docs-ua/release_notes/v0.6.md b/docs-ua/release_notes/v0.6.md new file mode 100644 index 00000000..0411375a --- /dev/null +++ b/docs-ua/release_notes/v0.6.md @@ -0,0 +1,28 @@ +# OPEA Release Notes v0.6 + +## Основні моменти OPEA + +* Додано 4 приклади MegaService: CodeGen, ChatQnA, CodeTrans і Docsum, ви можете розгорнути їх на Kubernetes +* Доступно 10 мікросервісів для LLM, RAG, безпеки... тощо +* Підтримка генерації тексту, коду та наскрізного оцінювання + +## GenAIExamples + +* Побудовано 4 еталонних рішення для деяких класичних додатків GenAI, таких як генерація коду, чат запитань і відповідей, переклад коду й узагальнення документів, за допомогою інтерфейсу оркестрування в GenAIComps. +* Підтримка безперешкодного розгортання на платформах Intel Xeon і Gaudi через Kubernetes і Docker Compose. + +## GenAIComps + +* Активовано набір мікросервісів, включаючи ASR, LLMS, Rerank, Embedding, Guardrails, TTS, Telemetry, DataPrep, Retrieval та VectorDB. Функціонал ASR повністю функціонує на архітектурі Xeon, очікується готовність на Gaudi. Функції пошуку працюють на LangChain, очікується готовність на LlamaIndex. Функціонал VectorDB підтримується на Redis, Chroma і Qdrant, а на SVS очікується його готовність. +* Додано підтримку 14 форматів файлів у мікросервісах підготовки даних та увімкнено захист розмови у захисних бар'єрах. +* Додано послугу Ray Gaudi Supported для сервісу LLM. + +## GenAIEvals + +* Додано оцінювання моделей на задачах генерації тексту (lm-evaluation-harness) і задачах кодування (bigcode-evaluation-harness) +* Додано наскрізну оцінку за допомогою мікросервісу + +## GenAIInfra + +* Додано Helm Charts redis-vector-db, TEI, TGI та CodeGen для розгортання GenAIExamples на Kubernetes +* Додано маніфести для розгортання GenAIExamples CodeGen, ChatQnA і Docsum на Kubernetes і Docker Compose diff --git a/docs-ua/release_notes/v0.7.md b/docs-ua/release_notes/v0.7.md new file mode 100644 index 00000000..43efdc2d --- /dev/null +++ b/docs-ua/release_notes/v0.7.md @@ -0,0 +1,125 @@ +# OPEA Release Notes v0.7 + +## Основні моменти OPEA + +- Додано 3 приклади MegaService: Переклад, SearchQnA і AudioQnA +- Додано 4 MicroService і LLM з підтримкою llamaIndex, vllm, RayServe +- Можлива підготовка даних (Dataprep): витягнути інформацію з таблиці, зображення... тощо +- Додано тест HelmChart і GenAI Microservice Connector (GMC) + +## GenAIExamples + +- ChatQnA + - ChatQnA підтримує Qwen2([422b4b](https://github.com/opea-project/GenAIExamples/commit/422b4bc56b4e5500538b3d75209320d0a415483b)) + - Додано no_proxy у docker compose yaml для мікросервісів([99eb6a](https://github.com/opea-project/GenAIExamples/commit/99eb6a6a7eab4a6d24cbb47d4a541ff4aef41b57), [240587](https://github.com/opea-project/GenAIExamples/commit/240587932b04adeaf740d70229dd27ebd42d5dcd)) + - Виправлено збірку образів DataPrep у ChatQnA([2fb070](https://github.com/opea-project/GenAIExamples/commit/2fb070dbfd9352d56a7be13606318aa583852a0f)) + - Додано підтримку графічного процесора Nvidia у ChatQnA([e80e56](https://github.com/opea-project/GenAIExamples/commit/e80e567817439af1b70b56ff4a60fa58c24e2439)) + - Оновлення файлу ChatQnA docker_compose.yaml для виправлення помилок завантаження([e948a7](https://github.com/opea-project/GenAIExamples/commit/e948a7f81b2b68e62b09ad66be35414bf04babd5), [f2a943](https://github.com/opea-project/GenAIExamples/commit/f2a94377aa5e9850a7590c31fd8613f65fdef83c)) + - Чат QNA React UI з історією розмов([b994bc](https://github.com/opea-project/GenAIExamples/commit/b994bc87318f245a07e099b395fa49ca3f36baba)) + - Адаптовано китайські ієрогліфи([2f4723](https://github.com/opea-project/GenAIExamples/commit/2f472315fdd4934b4f50b6120a0d583000d7751c)) + +- Інші приклади + - Refactor Translation Example([409c723](https://github.com/opea-project/GenAIExamples/commit/409c72350e84867ca1ea555c327fe13d00afd926)) + - Додано AudioQnA з GenAIComps([b4d8e1](https://github.com/opea-project/GenAIExamples/commit/b4d8e1a19b7cb141dd509c40711d74be26c282ce)) + - Додано SearchQnA з GenAIComps([6b76a9](https://github.com/opea-project/GenAIExamples/commit/6b76a93eb70738459d3fd553c44d6e7c120a51b3)) + - Додано env для searchqna([d9b62a](https://github.com/opea-project/GenAIExamples/commit/d9b62a5a62d5c192ed34f598f3769378b7f594a1)) + - Підтримка ASR на HPU([2a4860](https://github.com/opea-project/GenAIExamples/commit/2a48601227557833cae721ad12418060b50dd62e)) + - Виправлено інструкцію зі збірки DocSum Gaudi([29de55](https://github.com/opea-project/GenAIExamples/commit/29de55da3ca0978123644ccfccdc53da20fc0791)) + - Додано збірка образу в docker compose тесту e2e за гауді в CI([4fecd4](https://github.com/opea-project/GenAIExamples/commit/4fecd6a850d9b4cc0c4cd88d9987b5ef890c1aa2)) + +- CI + - Додано завдання збірки докера в маніфесті робочого процесу e2e([c5f309](https://github.com/opea-project/GenAIExamples/commit/c5f3095ea5c0016e4e9a2568ff063a5da4f6ef48)) + - Створено робочий процес повторного використання для get-test-matrix в CI([961abb](https://github.com/opea-project/GenAIExamples/commit/961abb3c05c2bfb02e1cbae12ec7a67c3c0dfc8f)) + - Увімкнення нового CI runner і покращення скриптів маніфесту e2e-тестів([26d6ea](https://github.com/opea-project/GenAIExamples/commit/26d6ea4724aeaef9fc258d79226ed15e3c325d76)) + - Увімкнено створення останнього образу мегасервісу за push-подією в CI([a0b94b](https://github.com/opea-project/GenAIExamples/commit/a0b94b540180ddba7892573b2d9ce8b0eb16b403)) + - Виправлено посилання на збірку образів([01eed8](https://github.com/opea-project/GenAIExamples/commit/01eed84db13656a000edd8e47f1e24dbbe2b067a)) + - Додано опцію збірки докер-образу для тестових скриптів([e32a51](https://github.com/opea-project/GenAIExamples/commit/e32a51451c38c35ee4bf27e58cb47f824821ce8d)) + - Додано e2e тест для chatqna([afcb3a](https://github.com/opea-project/GenAIExamples/commit/afcb3a)), codetrans([295b818](https://github.com/opea-project/GenAIExamples/commit/295b818)), codegen([960cf38](https://github.com/opea-project/GenAIExamples/commit/960cf38)), docsum([2e62ecc](https://github.com/opea-project/GenAIExamples/commit/2e62ecc))) + +## GenAIComps + +- Ядра + - Додано aio-оркестратор, щоб пришвидшити одночасну подачу([db3b4f](https://github.com/opea-project/GenAIComps/commit/db3b4f13fa8fc258236d4cc504f1a083d5fd95df)) + - Додано статистику перфектності на рівні мікросервісу([597b3c](https://github.com/opea-project/GenAIComps/commit/597b3ca7d243ff74ce108ded6255e73df01d2486), [ba1d11](https://github.com/opea-project/GenAIComps/commit/ba1d11d93299f2b1d5e53f747aed73cff0384dda)) + - Додано Шлюз для перекладу([1b654d](https://github.com/opea-project/GenAIComps/commit/1b654de29d260043d8a5811a265013d5f5b4b6e1)) + +- LLM + - Підтримка Qwen2 in LLM Microservice([3f5cde](https://github.com/opea-project/GenAIComps/commit/3f5cdea67d3789be72aafc70364fd1e0cbe6cfaf)) + - Виправлено проблеми з vLLM docker compose([3d134d](https://github.com/opea-project/GenAIComps/commit/3d134d260b8968eb9ca18162b2f0d86aa15a85b3)) + - Увімкнено підтримку vLLM Gaudi для сервісу LLM на основі офіційного випуску vllm habana([0dedc2](https://github.com/opea-project/GenAIComps/commit/0dedc28af38019e92eaf595935907de82c6a1cf5)) + - Openvino підтримка в vllm([7dbad0](https://github.com/opea-project/GenAIComps/commit/7dbad0706d820f3c6ff8e8b4dd0ee40b7c389ff4)) + - Підтримка мікросервісу Ollama([a00e36](https://github.com/opea-project/GenAIComps/commit/a00e3641f25a7b515f427f1fbbcc893d85d97f85)) + - Підтримка мікросервісу vLLM XFT LLM([2a6a29](https://github.com/opea-project/GenAIComps/commit/2a6a29fda4ff13af5488912974b431390ed2ebc2), [309c2d](https://github.com/opea-project/GenAIComps/commit/309c2da5e18ce75b3ecc3ff3f2d71d51477ad4d1), [fe5f39](https://github.com/opea-project/GenAIComps/commit/fe5f39452b7fbca7e512611cef8c1a90c08feae8)) + - Додано e2e тест для llm summarization tgi([e8ebd9](https://github.com/opea-project/GenAIComps/commit/e8ebd948ee3518860838b50ca59d999d4f028d7c)) + +- DataPrep + - Підтримка Dataprep([f7443f](https://github.com/opea-project/GenAIComps/commit/f7443f)), embedding([f37ce2](https://github.com/opea-project/GenAIComps/commit/f37ce2)) мікросервісів з Llama Index + - Виправлено помилки шляху мікросервісу dataprep([e20acc](https://github.com/opea-project/GenAIComps/commit/e20acc)) + - Додано мікросервіс milvus([e85033](https://github.com/opea-project/GenAIComps/commit/e85033)) + - Додано версію Ray для багатофайлових процесів([40c1aa](https://github.com/opea-project/GenAIComps/commit/40c1aa)) + - Виправлено помилку таймауту підготовки даних([61ead4](https://github.com/opea-project/GenAIComps/commit/61ead4)) + - Додано e2e-тест для dataprep redis langchain([6b7bec](https://github.com/opea-project/GenAIComps/commit/6b7bec)) + - Підтримується підсумовування зображень за допомогою LVM у мікросервісі dataprep([86412c](https://github.com/opea-project/GenAIComps/commit/86412c)) + - Увімкнено умовне розділення для html-файлів([e1dad1](https://github.com/opea-project/GenAIComps/commit/e1dad1)) + - Додано підтримку pyspark у мікросервісі dataprep([a5eb14](https://github.com/opea-project/GenAIComps/commit/a5eb14)) + - DataPrep витягує інформацію з таблиці в документації([953e78](https://github.com/opea-project/GenAIComps/commit/953e78)) + - Додано підтримку вилучення інформації із зображень у документації([e23745](https://github.com/opea-project/GenAIComps/commit/e23745)) + +- Інші компоненти + - Додано підтримку PGvector в Vectorstores([1b7001](https://github.com/opea-project/GenAIComps/commit/1b7001)) і Retriever([75eff6](https://github.com/opea-project/GenAIComps/commit/75eff6)), Dataprep([9de3c7](https://github.com/opea-project/GenAIComps/commit/9de3c7)) + - Додано вбудовування Mosec([f76685](https://github.com/opea-project/GenAIComps/commit/f76685)) і переранжування([a58ca4](https://github.com/opea-project/GenAIComps/commit/a58ca4)) + - Додано компоненти графа знань([4c0afd](https://github.com/opea-project/GenAIComps/commit/4c0afd)) + - Додано компоненти LVMs LLaVA([bd385b](https://github.com/opea-project/GenAIComps/commit/bd385b)) + - Додано asr/tts компоненти для xeon і hpu([cef6ea](https://github.com/opea-project/GenAIComps/commit/cef6ea)) + - Додано мікросервіс WebSearch Retriever([900178](https://github.com/opea-project/GenAIComps/commit/900178)) + - Додано мікросервіс початкового виявлення pii([e38041](https://github.com/opea-project/GenAIComps/commit/e38041)) + - Підтримка Pinecone для мікросервісу підготовки та пошуку даних([8b6486](https://github.com/opea-project/GenAIComps/commit/8b6486)) + - Підтримка метрик Prometheus для мікросервісів opea([758914](https://github.com/opea-project/GenAIComps/commit/758914)), ([900178](https://github.com/opea-project/GenAIComps/commit/900178)) + - Додано no_proxy env для мікросервісів([df0c11](https://github.com/opea-project/GenAIComps/commit/df0c11)) + - Включено RAGAS([8a670e](https://github.com/opea-project/GenAIComps/commit/8a670e)) + - Виправлено проблеми з продуктивністю RAG([70c23d](https://github.com/opea-project/GenAIComps/commit/70c23d)) + - Підтримка переоформлення й отримання RAG OPT([b51675](https://github.com/opea-project/GenAIComps/commit/b51675)) + - Переранжування за допомогою оптимізованого бікодера([574847](https://github.com/opea-project/GenAIComps/commit/574847)) + - Використання параметра для ретривера([358dbd](https://github.com/opea-project/GenAIComps/commit/358dbd)), ранжування([dfdd08](https://github.com/opea-project/GenAIComps/commit/dfdd08)) + +- CI + - Оптимізація CI для підтримки декількох тестів для одного виду сервісу([38f646](https://github.com/opea-project/GenAIComps/commit/38f646)) + - Оновлення CI для підтримки зміни рівня шляху dataprep_redis([5c0773](https://github.com/opea-project/GenAIComps/commit/5c0773)) + - Увімкнено покриття python([cd91cf](https://github.com/opea-project/GenAIComps/commit/cd91cf)) + - Додано codecov([da2689](https://github.com/opea-project/GenAIComps/commit/da2689)) + - Увімкнено автоматичну збірку та виштовхування докер-образів мікросервісів([16c5fd](https://github.com/opea-project/GenAIComps/commit/16c5fd)) + +## GenAIEvals + +- Увімкнено autorag, щоб автоматично згенерувати набір даних для оцінювання й оцінити систему RAG([b24bff](https://github.com/opea-project/GenAIEval/commit/b24bff)) +- Підтримка оцінювання узагальнення документів за допомогою мікросервісу([3ec544](https://github.com/opea-project/GenAIEval/commit/3ec544)) +- Додано RAGASMetric([7406bf](https://github.com/opea-project/GenAIEval/commit/7406bf)) +- Оновлення встановлення bkc([26ddcc](https://github.com/opea-project/GenAIEval/commit/26ddcc)) + +## GenAIInfra + +- GMC + - Увімкнено gmc e2e для змін у маніфестах і декілька незначних виправлень ([758432](https://github.com/opea-project/GenAIInfra/commit/758432)) + - GMC: зроблено необов'язковим поле «namespace» для кожного ресурсу в CR ([7073ac](https://github.com/opea-project/GenAIInfra/commit/7073ac)) + - Інтеграція демонстраційних yaml-файлів ChatQnA між GMC та Oneclick ([020899](https://github.com/opea-project/GenAIInfra/commit/020899)) + - Додано gmc e2e ([595185](https://github.com/opea-project/GenAIInfra/commit/595185)) + - Додано докерна збірка і пуш-таргет для GMC ([04d7f2](https://github.com/opea-project/GenAIInfra/commit/04d7f2)) + - GMC: перезаписано шаблон конфігураційної карти перед розгортанням ресурсів GMC ([ce9190](https://github.com/opea-project/GenAIInfra/commit/ce9190)) + - GMC: заміняє сервіс і назву розгортання, якщо GMC визначив її ([eec845](https://github.com/opea-project/GenAIInfra/commit/eec845)) + - Додано посібник з gmc([6bb8a3](https://github.com/opea-project/GenAIInfra/commit/6bb8a3)) + - GMC: пристановано separate e2e для gaudi and xeon ([c5075b](https://github.com/opea-project/GenAIInfra/commit/c5075b)) + - Оновлення readme та посібника користувача для GMC ([2d17c9](https://github.com/opea-project/GenAIInfra/commit/2d17c9)) + - GMC: додано приклад Codetrans ([aed70d](https://github.com/opea-project/GenAIInfra/commit/aed70d)) + - Увімкнено GMC e2e на Gaudi ([d204a7](https://github.com/opea-project/GenAIInfra/commit/d204a7)) + +- HelmChart + - Helm chart: Додано мінімальний рівень безпеки pod за замовчуванням ([8fcf0a](https://github.com/opea-project/GenAIInfra/commit/8fcf0a)) + - Підтримка тесту e2e для chatqna helm чарту ([2f317d](https://github.com/opea-project/GenAIInfra/commit/2f317d)) + - Додано helm charts для розгортання ChatQnA ([20dce6](https://github.com/opea-project/GenAIInfra/commit/20dce6)) + - Реорганізовано helm charts ([d332c2](https://github.com/opea-project/GenAIInfra/commit/d332c2)) + +- Інші + - Додано сервісні маніфести DocSum llm ([9ab8de](https://github.com/opea-project/GenAIInfra/commit/9ab8de)) + - Ввімкнено тест golang e2e в CI ([bc9aba](https://github.com/opea-project/GenAIInfra/commit/bc9aba)) + - Додано тест e2e для прикладу docsum ([89aa5a](https://github.com/opea-project/GenAIInfra/commit/89aa5a)) + - Додано приклад docsum для вузлів xeon і gaudi ([c88817](https://github.com/opea-project/GenAIInfra/commit/c88817)) diff --git a/docs-ua/release_notes/v0.8.md b/docs-ua/release_notes/v0.8.md new file mode 100644 index 00000000..02eeee7a --- /dev/null +++ b/docs-ua/release_notes/v0.8.md @@ -0,0 +1,319 @@ +# OPEA Release Notes v0.8 +## Що нового в OPEA v0.8 + +- Розширення функціональності + - Підтримка поширених запитань (FAQ) з розвитку прикладу GenAI + - Розширено підтримку LLM, таких як Llama3.1 і Qwen2, і підтримку LVM, таких як llava + - Увімкнено наскрізний бенчмаркінг продуктивності та точності + - Підтримка експериментального мікросервісу Agent + - Підтримка LLM, що служить на Ray + +- Мультиплатформенна підтримка + - Випущено Docker-образи компонентів GenAI під OPEA dockerhub і підтримка розгортання за допомогою Docker + - Support cloud-native deployment through Kubernetes manifests and GenAI Microservices Connector (GMC) + - Увімкнено експериментальну підтримку автентифікації та авторизації з використанням токенів JWT + - Валідація ChatQnA на різних платформах, таких як Xeon, Gaudi, AIPC, Nvidia і AWS + +- OPEA Docker Hub: https://hub.docker.com/u/opea + +## Докладно + +
GenAIExamples + +- ChatQnA + - Додно інструкції ChatQnA для AIPC([26d4ff](https://github.com/opea-project/GenAIExamples/commit/26d4ff11ffd323091d80efdd3f65e4c330b68840)) + - Адаптовано формат відповіді Vllm ([034541](https://github.com/opea-project/GenAIExamples/commit/034541404e23ce3927c170237817e98f9323af26)) + - Оновлено версію tgi([5f52a1](https://github.com/opea-project/GenAIExamples/commit/5f52a10ffef342ef7ab84e9cf7107903d1e578e4)) + - Оновлено README.md([f9312b](https://github.com/opea-project/GenAIExamples/commit/f9312b37137ac087534d5536c767b465bac1b93b)) + - Оновлено ChatQnA docker compose для Dataprep Update([335362](https://github.com/opea-project/GenAIExamples/commit/335362ab1191b1bcaa2c3bef06fb559bdd3d3f3f)) + - [Doc] Додано дійсну інформацію про мікросервіс([e878dc](https://github.com/opea-project/GenAIExamples/commit/e878dc131171068d4d48686ed3909363403c6818)) + - Оновлення для запуску ChatQnA + Conversational UI на Gaudi([89ddec](https://github.com/opea-project/GenAIExamples/commit/89ddec9b2d473b6c0b427e264e0ed07e5d0045f5)) + - Виправлено помилки на ПК з Windows([ba6541](https://github.com/opea-project/GenAIExamples/commit/ba65415b78d237d180cf9f3654d72b106b7b8a2e)) + - [Doc]Додано ChatQnA Flow Chart([97da49](https://github.com/opea-project/GenAIExamples/commit/97da49f61e9ae4aff6780b1ae52c7f66550f3608)) + - Додано захісні бар'єри в трубопроводі ChatQnA([955159](https://github.com/opea-project/GenAIExamples/commit/9551594164980fea59667f6679c84ba5cadf6410)) + - Виправлено незначні помилки для chatqna в docker-compose([b46ae8](https://github.com/opea-project/GenAIExamples/commit/b46ae8bdcc1abfe04563cffc004a87d2884e111b)) + - Підтримка vLLM/vLLM-on-Ray/Ray Serve для ChatQnA([631d84](https://github.com/opea-project/GenAIExamples/commit/631d841119ee6d3247551ef713ea40041c77d6b6)) + - Додано приклад ChatQnA використовуючи Qdrant retriever([c74564](https://github.com/opea-project/GenAIExamples/commit/c745641ba103d9f88af01f871f31384f16d02360)) + - Оновлено TEI version v1.5 для кращої ефективності([f4b4ac](https://github.com/opea-project/GenAIExamples/commit/f4b4ac0d3a762805fe2e1f1a09c8311cadc2114d)) + - Оновлено ChatQnA функцію завантаження([598484](https://github.com/opea-project/GenAIExamples/commit/5984848bb065917f60324c9a35ce98a1503ef1c1)) + - Додано автоматичне скорочення для вбудовування і переранжування([8b6094](https://github.com/opea-project/GenAIExamples/commit/8b60948c7b9ab96c4d12dd361b329ff72b2e0e0b)) + +- Розгортання + - Додано маніфест файли Kubernetes для розгортання DocSum([831463](https://github.com/opea-project/GenAIExamples/commit/83146320aa14fbea5fcd795a7b5203be43e32a14)) + - Оновлено маніфест файли Kubernetes для CodeGen([2f9397](https://github.com/opea-project/GenAIExamples/commit/2f9397e012b7f3443d97f9cca786df5aa6d72437)) + - Додано маніфест файли Kubernetes для розгортання CodeTrans([c9548d](https://github.com/opea-project/GenAIExamples/commit/c9548d7921f73ac34b0867969de8ba7fe0c21453)) + - Оновлено READMEs для прикладів трубопроводів kubernetes([c37d9c](https://github.com/opea-project/GenAIExamples/commit/c37d9c82b0df8a7a84462bdede93f0425470e4e0)) + - Оновлено всі приклади файлів yaml для GMC у GenAIExample([290a74](https://github.com/opea-project/GenAIExamples/commit/290a74fae918da596dbb2d17ab87f828fef95e0d)) + - Doc: виправлено незначні помилки у документації GMC([d99461](https://github.com/opea-project/GenAIExamples/commit/d9946180a2372652136bd46a21aab308cda31d7e)) + - README для встановлення 4-х робочих місць з використанням helm chart([6e797f](https://github.com/opea-project/GenAIExamples/commit/6e797fae8923b520147419b87a193ccfb0d1de11)) + - Додано маніфест файли Kubernetes для розгортання ChatQnA([665c46](https://github.com/opea-project/GenAIExamples/commit/665c46ffae23b3dc3b4c6c7d6b7693886e913294)) + - Додано нові приклади SearchQnA для GenAIExample([21b7d1](https://github.com/opea-project/GenAIExamples/commit/21b7d11098ca22accf2cd530a051403b95c5b4ba)) + - Додано нові приклади Translation для GenAIExample([d0b028](https://github.com/opea-project/GenAIExamples/commit/d0b028d1997e1842d9cab48585a7f0b55de9b14b)) + +- Інші приклади + - Оновлено переранжування шляху до докер-файлу мікросервісу([d7a5b7](https://github.com/opea-project/GenAIExamples/commit/d7a5b751d92b7714a8c3308c64f4a8b473710383)) + - Оновлено версію tgi-gaudi([3505bd](https://github.com/opea-project/GenAIExamples/commit/3505bd25a4f3494028cde45694f304dba665310b)) + - Вдосконаленог README для Examples([f73267](https://github.com/opea-project/GenAIExamples/commit/f732674b1ef28e5c2589d3b8e0124ebedaf5d502)) + - Оновлено READMEs([8ad7f3](https://github.com/opea-project/GenAIExamples/commit/8ad7f36fe2007160ba68b0e100f4471c46669afa)) + - [CodeGen] Додано flowchart кодового генератора([377dd2](https://github.com/opea-project/GenAIExamples/commit/377dd2fa9eac012b6927abee3ef5f6339549a4eb)) + - Оновлено назву зображення audioqna([615f0d](https://github.com/opea-project/GenAIExamples/commit/615f0d25470624534c541161c6e647f78b448af1)) + - Додано автоусічення до gaudi tei([8d4209](https://github.com/opea-project/GenAIExamples/commit/8d4209a01541d078e41174ef13c5f5f9686be282)) + - Оновлено кітайську версію visualQnA([497895](https://github.com/opea-project/GenAIExamples/commit/49789595e5f6f00e96426b2dc5034d0a68c0aea1)) + - Виправлено Typo для Translation Example([95c13d](https://github.com/opea-project/GenAIExamples/commit/95c13d9558acb85343f2d39fc9ef1d68aacfbb56)) + - FAQGen Megaservice([8c4a25](https://github.com/opea-project/GenAIExamples/commit/8c4a2534c1313a4a20948190489dedcf3c302eea)) + - Code-gen-react-ui([1b48e5](https://github.com/opea-project/GenAIExamples/commit/1b48e54a3d2e5ede8c3268c30766fa5182d3486c)) + - Додано документацію sum react-ui([edf0d1](https://github.com/opea-project/GenAIExamples/commit/edf0d14c95c9869b416d07c9af80ace2bc3691cb)) + +- CI/UT + - Фронтенд зазнав невдачі з невідомою проблемою таймауту([7ebe78](https://github.com/opea-project/GenAIExamples/commit/7ebe781ccb0d0396872c3aa9c195118ca07fc0b3)) + - Додавання порівняльного тесту Chatqna([11a56e](https://github.com/opea-project/GenAIExamples/commit/11a56e09ef86e88b29662130eba1913d40cb8aba)) + - Збільшено таймаут з'єднання tgi([ee0dcb](https://github.com/opea-project/GenAIExamples/commit/ee0dcb3d37ab64c89962fb41fc8b4d4916b05002)) + - Оптимізовано gmc маніфест тестів 2e2([15fc6f](https://github.com/opea-project/GenAIExamples/commit/15fc6f971154f19822ac8d9b168141a381c93114)) + - Додано docker compose yaml печать для тесту([bb4230](https://github.com/opea-project/GenAIExamples/commit/bb42307af952a8ca8c80dec329d84e1fe94943f3)) + - Рефактор перекладу тесту ci([b7975e](https://github.com/opea-project/GenAIExamples/commit/b7975e79d8c75899961e5946d8ad0356065f20c5)) + - Рефактор searchqna тесту ci([ecf333](https://github.com/opea-project/GenAIExamples/commit/ecf33388359a9bc20ff63676f169cc4d8129b1e7)) + - Переклад UT для UI([284d85](https://github.com/opea-project/GenAIExamples/commit/284d855bf410e5194c84523450397f0eb70ad0ee)) + - Удосконалення тесту codetrans e2e([450efc](https://github.com/opea-project/GenAIExamples/commit/450efcc139f26268b31a456db3f17024a37f896f)) + - Дозволено gmc e2e робочому потоку отримувати секрети([f45f50](https://github.com/opea-project/GenAIExamples/commit/f45f508847823f3f6a1831d1a402932294b2a287)) + - Додано перевірку посилань в робочому потоку gmc e2e([62ae64](https://github.com/opea-project/GenAIExamples/commit/62ae64f13c8127cd7afd7d58d06c6cf9c51fafbf)) + - SearchQnA UT([268d58](https://github.com/opea-project/GenAIExamples/commit/268d58d4a971d7d8340e72caf90a4fc14650612d)) +
+ +
GenAIComps + +- Ядра + - Підтримка https для мікросервісу([2d6772](https://github.com/opea-project/GenAIComps/commit/2d6772456fb24cd344fc25e3eb4591d1a42eda71)) + - Збільшено таймаут запиту на мегасервіс для підтримки високої паралельності([876ca5](https://github.com/opea-project/GenAIComps/commit/876ca5080b47bfb9ea484f916561f2c68e3d37a0)) + - Додано динамічний DAG([f2995a](https://github.com/opea-project/GenAIComps/commit/f2995ab5f55c8917b865a405fb9ffe99b70ff86d)) + +- LLM + - Додаткова збірка контейнера мікросервісу vllm([963755](https://github.com/opea-project/GenAIComps/commit/9637553da6da07988df5d9007d9a736fe0ca4c47)) + - Уточнено інструкцію vllm([6e2c28](https://github.com/opea-project/GenAIComps/commit/6e2c28b17850964e5c07d5f418211722a9b09212)) + - Представлено 'entrypoint.sh' для деякіх контейнерів([9ecc5c](https://github.com/opea-project/GenAIComps/commit/9ecc5c3b02bae88e148bfecafdd24be995d6b4c3)) + - Підтримка llamaindex для отримання мікросервісу і видалення langchain([61795f](https://github.com/opea-project/GenAIComps/commit/61795fd46a5c3047a3f08517b73cad52100396c8)) + - Оновлено tgi з text-generation-inference:2.1.0([f23694](https://github.com/opea-project/GenAIComps/commit/f236949f62e26695ff0f6e7d4fbce8441fb2d8e4)) + - Виправлено вимоги([f4b029](https://github.com/opea-project/GenAIComps/commit/f4b029805a310ce5bd4b0f03a9439ede149cb3ab)) + - Додано vLLM на мікросервіс Ray([ec3b2e](https://github.com/opea-project/GenAIComps/commit/ec3b2e841f23d1ee5dc4d89a57d34e51cf5a5909)) + - Оновлено code/readme/UT для Ray Serve і VLLM([dd939c](https://github.com/opea-project/GenAIComps/commit/dd939c554add6a86577e50fc46ac93a7429ab6d9)) + - Дозволено мікросервісу Ollama бути сумісним з різними моделями([2458e2](https://github.com/opea-project/GenAIComps/commit/2458e2f1ec7f7e383429a54047814347e18c363d)) + - Оптимізація продуктивності LLM і доопрацювання коду([6e31df](https://github.com/opea-project/GenAIComps/commit/6e31df2f0503eb075472ef5cd9cfc0f81112d804)) + +- Підготовка даних + - Підтримка get/delete файла в мікросервісі Dataprep([5d0842](https://github.com/opea-project/GenAIComps/commit/5d08426c82f999d8a5b58fda042fa610473b0c9c)) + - Dataprep | PGVector : додано підтримку для нових змін в utils.py([54eb7a](https://github.com/opea-project/GenAIComps/commit/54eb7aba5b5a46f6bf9602254e1b331b58109c24)) + - Вдосконалено мікросервіс dataprep, додаванням роздільників([ef97c2](https://github.com/opea-project/GenAIComps/commit/ef97c24792bd5711b5e5a000eafcd7fabcfc914b)) + - Зупинено python-bidi==0.4.2 для dataprep/redis([b4012f](https://github.com/opea-project/GenAIComps/commit/b4012f610960514b6351dc94bdc346675e57b356)) + - Підтримка видалення даних для Redis vector db([967fdd](https://github.com/opea-project/GenAIComps/commit/967fdd2f27fe1e7c99c6e6c28161c8f0f3bf2436)) + +- Інші компоненти + - Видалено ingest у мікросервісі Ретрівер([d25d2c](https://github.com/opea-project/GenAIComps/commit/d25d2c4ec3146bcba26b8db3fc7fe4adeafff748)) + - мікросервіс Qdrant retriever([9b658f](https://github.com/opea-project/GenAIComps/commit/9b658f4f8b83575c9acc8c9f4f24db2c0a5bf52f)) + - Оновлено сервіс milvus для dataprep і ретрівера([d7cdab](https://github.com/opea-project/GenAIComps/commit/d7cdab96744a0a1c914b9acd9a2515a29c1ed997)) + - Спеціальні аргументи архітектури для деяких контейнерів([1dd7d4](https://github.com/opea-project/GenAIComps/commit/1dd7d41b4daaa8cb567b50143c5cd4b5119d6f4b)) + - Оновлено сумісного з драйверами образу([1d4664](https://github.com/opea-project/GenAIComps/commit/1d4664bc20793e41e83d4cb10869f0072e7506f3)) + - Виправлено помилку Llama-Guard-2([6b091c](https://github.com/opea-project/GenAIComps/commit/6b091c657228fcbc14824cd672ecbae4e4d487b6)) + - Вбудовування: адаптивне визначення аргументів моделі вбудовування у mosec([f164f0](https://github.com/opea-project/GenAIComps/commit/f164f0d7768c7f2463e11679785b9c7d7e93a19c)) + - Спеціальні аргументи архітектури для langchain guardrails([5e232a](https://github.com/opea-project/GenAIComps/commit/5e232a9ac2adc8296e6503f6f7b26cc3a5ea5602)) + - Виправлено видачу вимог на встановлення для переранжування/fastrag([94e807](https://github.com/opea-project/GenAIComps/commit/94e807bbf15a9677209f8d28d0cc3251adfc75cc)) + - Оновлення для усунення попереджень при створенні Docker-файлів([3e5dd0](https://github.com/opea-project/GenAIComps/commit/3e5dd0151699880f579ffddaa76293ede06cad2a)) + - Запущено Agent component([c3f6b2](https://github.com/opea-project/GenAIComps/commit/c3f6b2ebb75f6e6995e8b39adebe73051810856f)) + - Додано шлюз FAQGen в ядро для підтримки FAQGen Example([9c90eb](https://github.com/opea-project/GenAIComps/commit/9c90ebf573621e894fa368848a79550701a338a6)) + - Prompt registry([f5a548](https://github.com/opea-project/GenAIComps/commit/f5a5489b0a42d01259f39b9016ea68429d2271e9)) + - Мікросервіс історії чату для збереження даних чату([30d95b](https://github.com/opea-project/GenAIComps/commit/30d95b73dd20e1800e684bf7417a97b4e4cdc4df)) + - Вирівняти вихід asr і вхід llm без використання оркестратора([64e042](https://github.com/opea-project/GenAIComps/commit/64e042146f4a7ea40e70a7fc5431d7f32e8ee02c)) + - Doc: додано відсутній у README.md кодовий блок([2792e2](https://github.com/opea-project/GenAIComps/commit/2792e28334760d94908aa521be1bedcec8848ad3)) + +- CI/UT + - Виправлено копію тесту ci([33f37c](https://github.com/opea-project/GenAIComps/commit/33f37cebd4bba515b21203f94af2616faade2baa)) + - Створено і внесено нові докер-образи до реєстру([80da5a](https://github.com/opea-project/GenAIComps/commit/80da5a86abafeceaf196bacc17e3922dd3173be8)) + - Оновлена збірка образу для gaudi([fe3d22](https://github.com/opea-project/GenAIComps/commit/fe3d22acabdee2fbf72ced0fae3832e7ca1fa3e4)) + - Додано guardrails ut([556030](https://github.com/opea-project/GenAIComps/commit/55603000eba4823678b3e79623186fa591a2f06f)) +
+ +
GenAIEvals + +- Оновлено lm-eval до 0.4.3([89c825](https://github.com/opea-project/GenAIEval/commit/89c8255f3f41a545ace25c61db3160cbece3047f)) +- Додано показники токсичності / упередженості / галюцинацій([48015a](https://github.com/opea-project/GenAIEval/commit/48015a1cb0c200aa1e7929367acd68d971ae544c)) +- Підтримка стрес-тестування([59cb27](https://github.com/opea-project/GenAIEval/commit/59cb275ca870bc1ff4514a1e3b8c67ca9e48c71e)) +- Додано метрики, що пов'язані з rag([83ad9c](https://github.com/opea-project/GenAIEval/commit/83ad9c1eddde42b11be82b745f4d217af3acccfa)) +- Додано приклад китайського бенчмарку CRUD([9cc6ca](https://github.com/opea-project/GenAIEval/commit/9cc6ca611e4d00e2e6f4d441cb171896c8ab0f23)) +- Додано точність англійського бенчмарку MultiHop([8aa1e6](https://github.com/opea-project/GenAIEval/commit/8aa1e6ed81f8209db03f653f0579215d36d24af3)) +
+ +
GenAIInfra + +- GMC + - Увімкнено збірку образів на push для gmc([f8a295](https://github.com/opea-project/GenAIInfra/commit/f8a2954a3b1557190bdf1e90271f4a110ff91fb3)) + - Переглянуто робочий процес для підтримки запуску gmc в натуральній формі([a2dc96](https://github.com/opea-project/GenAIInfra/commit/a2dc9610664025ab8447da2d9baa83226c483296)) + - Увімкнено встановлення системи GMC за допомогою push([af2d0f](https://github.com/opea-project/GenAIInfra/commit/af2d0f522c726b8c892e6c8c7b1f984737ec5c10)) + - Покращено режим перемикання для необхідного обслуговування маршрутизатора GMC([f96b0e](https://github.com/opea-project/GenAIInfra/commit/f96b0e537ff2afcfcab184aa167c07df5955045f)) + - Оптимізовано скріпти GMC e2e([27a062](https://github.com/opea-project/GenAIInfra/commit/27a0627b41402b718ec15e29d13475a1505eb726)) + - Оптимізовано простори імен додатків і виправлено помилки у тесті gmc e2e([9c97fa](https://github.com/opea-project/GenAIInfra/commit/9c97fad977450ceeae0b2c4c1bf52593ea298707)) + - Додано GMC в README([b25c0b](https://github.com/opea-project/GenAIInfra/commit/b25c0bb01e29b1cc02cd1c6c0604fc03d793e786)) + - Gmc: додана підтримка authN & authZ на фейковий токен JWT([3756cf](https://github.com/opea-project/GenAIInfra/commit/3756cf8bc0d7494562db61f8913ea51a663ce7db)) + - GMC: адаптовані нові common/маніфести([b18531](https://github.com/opea-project/GenAIInfra/commit/b185311a4ea6a799968b752d0955368a0ec9653a)) + - Додано новий приклад searchQnA як на xeon, так і на gaudi([883c8d](https://github.com/opea-project/GenAIInfra/commit/883c8da01508239354c0ba1320a57d0e64a1dec2)) + - Підтримка режиму перемикання в GMC для команди MI6([d11aeb](https://github.com/opea-project/GenAIInfra/commit/d11aebb028313c12fe4f25d9f617b061c0dda57f)) + - Додано приклад перекладу до GMC([6235a9](https://github.com/opea-project/GenAIInfra/commit/6235a9ff561f1378b10dc19a80d9fde1cc77fbc5)) + - Gmc: додана підтримка authN & authZ на keycloak([3d139b](https://github.com/opea-project/GenAIInfra/commit/3d139b53f83d44eab985e902fc8699f87a21413b)) + - GMC: підтримка нового компонента([4c5a51](https://github.com/opea-project/GenAIInfra/commit/4c5a51a0e536b7ff58ff0112cdc8310395e5d391)) + - GMC: покращено README([d57b94](https://github.com/opea-project/GenAIInfra/commit/d57b94b19c5c432bc3154bb11d2b7edcde3603a1)) + +- HelmChart + - Helm chart: змінена значення за замовчанням global.modelUseHostPath([8ffc3b](https://github.com/opea-project/GenAIInfra/commit/8ffc3bc258c816aa01a83059ef908d7a0d0d6ee4)) + - Helm chart: Додано readOnlyRootFilesystem до securityContext([9367a9](https://github.com/opea-project/GenAIInfra/commit/9367a9ce96c9e89098408e0c9078368571c38ef2)) + - Оновлено chatqna з додатковими залежностями([009c96](https://github.com/opea-project/GenAIInfra/commit/009c960a9cdb28a9a8fb22f15b470a97e53a1bdf)) + - Оновлено codegen з додатковими залежностями([d41dd2](https://github.com/opea-project/GenAIInfra/commit/d41dd27b49b733e76b2e41cc6a25bc2b2ab942eb)) + - Make endpoints configurable by user([486023](https://github.com/opea-project/GenAIInfra/commit/4860235e1774982ed5b827cbb36b4b3b8639f9fb)) + - Додано компонент підготовки даних([384931](https://github.com/opea-project/GenAIInfra/commit/384931799641c5e0faa89b080426b95ea55d1263)) + - Номер порту мікросервісу не налаштовується([fbaa6a](https://github.com/opea-project/GenAIInfra/commit/fbaa6aba1cf7d6167ffdcb465a57da05bce26b3e)) + - Додано MAX_INPUT_TOKENS до tgi([2fcbb0](https://github.com/opea-project/GenAIInfra/commit/2fcbb0d563d04ac8e21df14ecd2c9c05db72c1af)) + - Додано скрипт для генерації yaml-файлів з helm-charts([6bfe31](https://github.com/opea-project/GenAIInfra/commit/6bfe31528f6be24e5922dfcc6aea0ad18fd61869)) + - Helm: підтримка додавання додаткового env із зовнішньої конфігураційної карти([7dabdf](https://github.com/opea-project/GenAIInfra/commit/7dabdf0b378f710e41fadf1fd4ef47b69bee2326)) + - Helm: виводити конфігуровані елементи dataprep у файл значень([83fc1a](https://github.com/opea-project/GenAIInfra/commit/83fc1a0b6af09ea64466e61d742d09b03eea82c5)) + - Helm: оновлено версію до 0.8.0([b3cbde](https://github.com/opea-project/GenAIInfra/commit/b3cbde027932f530eed13393df3beae2d8e2febb)) + - Додано компоненти whisper і asr([9def61](https://github.com/opea-project/GenAIInfra/commit/9def61adc506ec61faeed1769ebaed0e3ef9ee95)) + - Додано компоненти tts і speecht5 до helm chart([9d1465](https://github.com/opea-project/GenAIInfra/commit/9d146529a2f000f169308358a3d724861078d320)) + - Оновлення скрипта для створення маніфесту комп'ютера([ab53e9](https://github.com/opea-project/GenAIInfra/commit/ab53e952965fc670694ee2ae91b76d0e34cc8bae)) + - Helm: видалено Probes, що не використовувалися([c1cff5](https://github.com/opea-project/GenAIInfra/commit/c1cff5fe3c93262b600641694929349f59b86405)) + - Helm: додано підтримку tei-gaudi([a456bf](https://github.com/opea-project/GenAIInfra/commit/a456bfb393f9428c17441ba3da1b1ad99a65d213)) + - Helm redis-vector-db: додано відсутності в файлі значень([9e15ef](https://github.com/opea-project/GenAIInfra/commit/9e15ef1c523592e58f4e1f8e2a5d0029997c13a6)) + - Helm: порожній рядок замість нуля у файлах значень([6151ac](https://github.com/opea-project/GenAIInfra/commit/6151ac7ccc53cd41e2e3ca43a5c6a7369eceaa1b)) + - Додано компонент маніфест файлів k8s([68483c](https://github.com/opea-project/GenAIInfra/commit/68483c5dbb0365fbad3b34792313d511e7ef898d)) + - Додано helm тест для chart redis-vector-db([236381](https://github.com/opea-project/GenAIInfra/commit/23638193f2819b513dbc8fb1c055cfa45b809e5a)) + - Додано helm тест для chart tgi([9b5def](https://github.com/opea-project/GenAIInfra/commit/9b5def0c26ae97a4c8a6e52a42c44917e9d79352)) + - Додано helm тест для chart tei([f5c7fa](https://github.com/opea-project/GenAIInfra/commit/f5c7fafd1bbea8f64663283e5131d8334fe4aec5)) + - Додано helm тест для chart teirerank([00532a](https://github.com/opea-project/GenAIInfra/commit/00532a51b8e1dff47e89a144814ac92627d8b01f)) + - Helm test: Зробити curl невдалим, якщо повернуто http_status > 400([92c4b5](https://github.com/opea-project/GenAIInfra/commit/92c4b5e21209caaeb288adad076e59acefaf411a)) + - Додано helm тест для chart embedding-usvc([a98561](https://github.com/opea-project/GenAIInfra/commit/a98561f9c817fa52a99742ee1ab1ac267a650d2f)) + - Додано helm тест для chart llm-uservice([f4f3ea](https://github.com/opea-project/GenAIInfra/commit/f4f3ea0e58bd09cbd45cb7267c989fa665171d21)) + - Додано helm тест для chart reranking-usvc([397208](https://github.com/opea-project/GenAIInfra/commit/397208985ba90ff71ec4eeaa0d3ca8f4187c6218)) + - Додано helm тест для chart retriever-usvc([6db408](https://github.com/opea-project/GenAIInfra/commit/6db408ab719846fe370c557ca1cc88d4cbe0fc18)) + - Helm: Підтримка автоматичного встановлення діаграм залежностей([dc90a5](https://github.com/opea-project/GenAIInfra/commit/dc90a59803fb1e7730af96b0df09ef8d0a3950ce)) + - Helm: підтримка усунення залежності helm([fbdb1d](https://github.com/opea-project/GenAIInfra/commit/fbdb1da9bb40b810eb6615685883445c1c952f29)) + - Helm: оновлення tgi chart([c3a1c1](https://github.com/opea-project/GenAIInfra/commit/c3a1c1a093f0f523ab92a8d714cb03730a8c3d3f)) + - Helm/manifest: оновлення tei config для tei-gaudi([88b3c1](https://github.com/opea-project/GenAIInfra/commit/88b3c108e5b5e3bfb6d9346ce2863b69f70cc2f1)) + - Додано CodeTrans helm chart([5b05f9](https://github.com/opea-project/GenAIInfra/commit/5b05f9572879b0d9b939f0fbd2cd1eddc07fdb05)) + - Helm: оновлення chatqna до останньго([7ff03b](https://github.com/opea-project/GenAIInfra/commit/7ff03b5593434b5571e683d52c8a22ab6764a461)) + - Додано DocSum helm chart([b56116](https://github.com/opea-project/GenAIInfra/commit/b5611662df4109fd17dcf769c1684a5e01317f56)) + - Додано підтримку docsum для helm тесту([f6354b](https://github.com/opea-project/GenAIInfra/commit/f6354b96f6ec3ac4968b4f9f1eb029762fe5e1c0)) + - Helm: оновлення codegen до останньго([419e5b](https://github.com/opea-project/GenAIInfra/commit/419e5bfc857095bbcea56747e3f4feefc6d81311)) + - Виправлення codegen helm chart readme([b4b28e](https://github.com/opea-project/GenAIInfra/commit/b4b28e98929c37dc44baaa3fd969e598b3c13836)) + - Вимкнення runAsRoot для speecht5 і whisper([aeef78](https://github.com/opea-project/GenAIInfra/commit/aeef78254ce2a85779b6ff13fb14fcdd5bb0af52)) + - Використано попередній образ тtei-gaudi([e4d3ff](https://github.com/opea-project/GenAIInfra/commit/e4d3ff6c13f210872dfc4ddc788fa735eac2b44b)) + +- Інші + - Вдосконалення тесту e2e для GenAIInfra для виправлення деяких помилок([602af5](https://github.com/opea-project/GenAIInfra/commit/602af53742900630a34a4eed9f37980483aa21b3)) + - Fix помилок для маршрутизатора при обробці відповіді від мікросервісів трубопроводу([ef47f9](https://github.com/opea-project/GenAIInfra/commit/ef47f9db525c16b54d493549b8372946988fce2a)) + - Покращено приклади e2e тесту codegen і codetrans([07494c](https://github.com/opea-project/GenAIInfra/commit/07494c0e6ba09030cc8ea464ef783c983b9d5cf7)) + - Видалено залежності загальних мікросервісів([f6dd87](https://github.com/opea-project/GenAIInfra/commit/f6dd87baf8d569db519e69661ae0d2cdd466fa69)) + - Додано скріпти для KubeRay and Ray Cluster([7d3d13](https://github.com/opea-project/GenAIInfra/commit/7d3d13f51f2cfed7be1e92f13f12ef2ff478e1f7)) + - Ввімкнуто CI для загальних компонентів([9e27a0](https://github.com/opea-project/GenAIInfra/commit/9e27a0d424cb3eacbf2cde636426e644ae739212)) + - Вимкнено загальний тест компонентів([e1cd50](https://github.com/opea-project/GenAIInfra/commit/e1cd50269eebc010bd5f5043a1b4bc8c62a53231)) + - CI для common: уникнути помилкової помилки в результатах тестування helm([876b7a](https://github.com/opea-project/GenAIInfra/commit/876b7a4142e2e1e7a25f25ac279f043c844f1687)) + - Додано вхід init для трубопроводу, щоб зберегти інформацію про параметри([e25a1f](https://github.com/opea-project/GenAIInfra/commit/e25a1f86e85c452243aacf90a67e47777caf4703)) + - Налаштовано версію CI gaudi([d75d8f](https://github.com/opea-project/GenAIInfra/commit/d75d8f2e1c356ca26fa09a2e9911de3aff87aa27)) + - Виправлено CHART_MOUNT і HFTOKEN для CI([10b908](https://github.com/opea-project/GenAIInfra/commit/10b908abf3b728c9652302efcb071bdc7f8e6426)) + - Змінено тег tgi, оскільки драйвер gaudi оновлено до версії 1.16.1 ([6796ef](https://github.com/opea-project/GenAIInfra/commit/6796ef2560645c59cdf7b09af9a2d8aa0cb0d5a5)) + - Оновлено README для нових маніфестів([ec32bf](https://github.com/opea-project/GenAIInfra/commit/ec32bf04459fdbb4c8f99ebd1bac3216ad2e5283)) + - Підтримка декількох служб маршрутизаторів в одному просторі імен([0ac732](https://github.com/opea-project/GenAIInfra/commit/0ac73213b501fb5949a5ac8bf7f52d5a4acef580)) + - Покращено умови запуску робочого процесу, щоб бути більш точними([ab5c8d](https://github.com/opea-project/GenAIInfra/commit/ab5c8d8c07d8f8353315b7ebaf1eb745bf7b28e5)) + - Видалено непотрібний компонент DocSumGaudi, який спричиняв би помилку([9b973a](https://github.com/opea-project/GenAIInfra/commit/9b973aceb25c307f2c7692c9364ebac9040b9a5d)) + - Видалено скрипти chart_test і додано скрипт до статусу дампів([88caf0](https://github.com/opea-project/GenAIInfra/commit/88caf0df947866ffe609cf60805282970f887429)) +
+ +## Дякуємо цим вкладникам +Ми хотіли б подякувати всім, хто долучився до проекту OPEA. Ось хто зробив свій внесок: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs-ua/release_notes/v0.9.md b/docs-ua/release_notes/v0.9.md new file mode 100644 index 00000000..2b94fbc3 --- /dev/null +++ b/docs-ua/release_notes/v0.9.md @@ -0,0 +1,371 @@ +# OPEA Release Notes v0.9 +## Що нового в OPEA v0.9 + +- Розширення функціональності + - Надано телеметричні функції для метрики і відстеження за допомогою Prometheus, Grafana та Jaeger + - Ініціалізовано два приклади агентів: AgentQnA і DocIndexRetriever + - Підтримка автентифікації та авторизації + - Додано компонент Nginx для посилення безпеки бекенда + - Введено мікросервіс з виявлення токсичності + - Підтримка експериментального мікросервісу з точного налаштування + +- Вдосконалення + - Приведено формат мікросервісу у відповідність до стандартів OpenAI (доповнення чату, доопрацювання... і т.д.) + - Посилено порівняльний аналіз і оцінку ефективності для прикладів GenAI, наприклад: TGI, розподіл ресурсів, ...тощо. + - Увімкнено підтримку запуску образів контейнерів від імені користувача, який не є root-користувачем + - Використано Llama-Guard-2-8B як модель Guardrails за замовчуванням, bge-large-zh-v1.5 як модель вбудовування за замовчуванням, mistral-7b-grok як модель CodeTrans за замовчуванням + - Додано ProductivitySuite для управління доступом і підтримки контексту користувача + +- Розгортання + - Підтримка контейнерної платформи Red Hat OpenShift (RHOCP) + - GenAI Microservices Connector (GMC) успішно протестовано на графічних процесорах Nvidia + - Додано підтримку Kubernetes для прикладів AudioQnA і VisualQnA + +- OPEA Docker Hub: https://hub.docker.com/u/opea +- GitHub IO: https://opea-project.github.io/latest/index.html + +- Дякуємо за зовнішній внесок від [Sharan Shirodkar](https://github.com/sharanshirodkar7), [Aishwarya Ramasethu +](https://github.com/aramasethu), [Michal Nicpon](https://github.com/michalnicp) і [Jacob Mansdorfer](https://github.com/jmansdorfer) + +## Докладніше + +
GenAIExamples + +- ChatQnA + - Оновлено порт у set_env.sh([040d2b7](https://github.com/opea-project/GenAIExamples/commit/040d2b7)) + - Виправлено незначну проблему у README файла докеру ChatQnA Gaudi ([a5ed223](https://github.com/opea-project/GenAIExamples/commit/a5ed223)) + - Оновлено порт chatqna dataprep-redis([02a1536](https://github.com/opea-project/GenAIExamples/commit/02a1536)) + - Додано підтримку .md-файлу при завантаженні файлів у chatqna-ui([7a67298](https://github.com/opea-project/GenAIExamples/commit/7a67298)) + - Додано функцію видалення ChatQnA та оновлено відповідний README([09a3196](https://github.com/opea-project/GenAIExamples/commit/09a3196)) + - Виправлено проблему-528([45cf553](https://github.com/opea-project/GenAIExamples/commit/45cf553)) + - Виправлено помилку vLLM і vLLM-on-Ray UT([cfcac3f](https://github.com/opea-project/GenAIExamples/commit/cfcac3f)) + - Встановлено OLLAMA_MODEL env для docker container([c297155](https://github.com/opea-project/GenAIExamples/commit/c297155)) + - Оновлено захісні бар'єри шляху до файлу докера([06c4484](https://github.com/opea-project/GenAIExamples/commit/06c4484)) + - Видалено ray serve([c71bc68](https://github.com/opea-project/GenAIExamples/commit/c71bc68)) + - Вдосконалено docker_compose для параметрів dataprep([3913c7b](https://github.com/opea-project/GenAIExamples/commit/3913c7b)) + - Виправлено захісні бар'єри chatqna([db2d2bd](https://github.com/opea-project/GenAIExamples/commit/db2d2bd)) + - Підтримка трубопроводу ChatQnA без мікросервісу переранжування([a54ffd2](https://github.com/opea-project/GenAIExamples/commit/a54ffd2)) + - Оновлено кількість реплік мікросервісів для OPEA v0.9([e6b4fff](https://github.com/opea-project/GenAIExamples/commit/e6b4fff)) + - Оновлено set_env.sh([9657f7b](https://github.com/opea-project/GenAIExamples/commit/9657f7b)) + - Додано env для chatqna vllm([f78aa9e](https://github.com/opea-project/GenAIExamples/commit/f78aa9e)) + +- Розгортання + - Оновлено маніфести для v0.9([ba78b4c](https://github.com/opea-project/GenAIExamples/commit/ba78b4c)) + - Оновлено маніфест K8S для ChatQnA/CodeGen/CodeTrans/DocSum([01c1b75](https://github.com/opea-project/GenAIExamples/commit/01c1b75)) + - Оновлено маніфест бечмарку для виправлення помилок ([4fd3517](https://github.com/opea-project/GenAIExamples/commit/4fd3517)) + - Оновлено env для маніфесту([4fa37e7](https://github.com/opea-project/GenAIExamples/commit/4fa37e7)) + - Оновлено маніфести для v0.9([08f57fa](https://github.com/opea-project/GenAIExamples/commit/08f57fa)) + - Додано приклад AudioQnA через GMC([c86cf85](https://github.com/opea-project/GenAIExamples/commit/c86cf85)) + - Додано підтримку k8s для audioqna([0a6bad0](https://github.com/opea-project/GenAIExamples/commit/0a6bad0)) + - Оновлено маніфест для FaqGen([80e3e2a](https://github.com/opea-project/GenAIExamples/commit/80e3e2a)) + - Додано підтримку kubernetes для VisualQnA([4f7fc39](https://github.com/opea-project/GenAIExamples/commit/4f7fc39)) + - Додано мікросервіс dataprep до прикладу chatQnA і тест e2e([1c23d87](https://github.com/opea-project/GenAIExamples/commit/1c23d87)) + +- Документація + - [doc] Оновлено файл README.md([c73e4e0](https://github.com/opea-project/GenAIExamples/commit/c73e4e0)) + - doc fix: Оновлено README.md, щоб видалити специфічний опис параграфа-1([5a9c109](https://github.com/opea-project/GenAIExamples/commit/5a9c109)) + - doc: виправлено розмітку в файлі docker_image_list.md([9277fe6](https://github.com/opea-project/GenAIExamples/commit/9277fe6)) + - doc: виправлено розмітку в файлі Translation/README.md([d645305](https://github.com/opea-project/GenAIExamples/commit/d645305)) + - doc: виправлено розмітку в файлі SearchQnA/README.md([c461b60](https://github.com/opea-project/GenAIExamples/commit/c461b60)) + - doc: fix FaqGen/README.md markdown([704ec92](https://github.com/opea-project/GenAIExamples/commit/704ec92)) + - doc: виправлено розмітку в файлі DocSum/README.md([83712b9](https://github.com/opea-project/GenAIExamples/commit/83712b9)) + - doc: виправлено розмітку в файлі CodeTrans/README.md([076bca3](https://github.com/opea-project/GenAIExamples/commit/076bca3)) + - doc: fix CodeGen/README.md markdown([33f8329](https://github.com/opea-project/GenAIExamples/commit/33f8329)) + - doc: виправлено розмітку в файлі ChatQnA/README.md([015a2b1](https://github.com/opea-project/GenAIExamples/commit/015a2b1)) + - doc: виправлено заголовки в файлах markdown([21fab71](https://github.com/opea-project/GenAIExamples/commit/21fab71)) + - doc: пропустили H1 посеред документу([4259240](https://github.com/opea-project/GenAIExamples/commit/4259240)) + - doc: вилучено використання HTML для таблиць у README([e81e0e5](https://github.com/opea-project/GenAIExamples/commit/e81e0e5)) + - Оновлено readme ChatQnA з інструкціями OpenShift([ed48371](https://github.com/opea-project/GenAIExamples/commit/ed48371)) + - Перетворено HTML до формату markdown([14621f8](https://github.com/opea-project/GenAIExamples/commit/14621f8)) + - Виправлено опечатку {your_ip} на {host_ip}([ad8ca88](https://github.com/opea-project/GenAIExamples/commit/ad8ca88)) + - Виправлено опечатку у README-файлі ([abc02e1](https://github.com/opea-project/GenAIExamples/commit/abc02e1)) + - Виправлено помилки скрипту в MD-файлі([acdd712](https://github.com/opea-project/GenAIExamples/commit/acdd712)) + - Незначні покращення документації в CodeGen README([17b9676](https://github.com/opea-project/GenAIExamples/commit/17b9676)) + - Уточнено головний README-файл([08eb269](https://github.com/opea-project/GenAIExamples/commit/08eb269)) + - [Doc]Додано мікро/мега сервіс WorkFlow для DocSum([343d614](https://github.com/opea-project/GenAIExamples/commit/343d614)) + - Оновлено README для розгортання k8s([fbb81b6](https://github.com/opea-project/GenAIExamples/commit/fbb81b6)) + +- Інші приклади + - Очищено застарілий код VisualQnA([87617e7](https://github.com/opea-project/GenAIExamples/commit/87617e7)) + - Використання докер-образу офіційного релізу TGI для процесорів Intel([b2771ad](https://github.com/opea-project/GenAIExamples/commit/b2771ad)) + - Ддано VisualQnA UI([923cf69](https://github.com/opea-project/GenAIExamples/commit/923cf69)) + - Виправлено ім'я контейнеру([5ac77f7](https://github.com/opea-project/GenAIExamples/commit/5ac77f7)) + - Додано докер VisualQnA для обох Gaudi і Xeon використовуючи сервіс TGI ([2390920](https://github.com/opea-project/GenAIExamples/commit/2390920)) + - Видалено LangSmith для Прикладів([88eeb0d](https://github.com/opea-project/GenAIExamples/commit/88eeb0d)) + - Змінено мовну змінну, щоб вона відповідала виділенню мови([f08d411](https://github.com/opea-project/GenAIExamples/commit/f08d411)) + - Видалено застарілу папку([7dd9952](https://github.com/opea-project/GenAIExamples/commit/7dd9952)) + - Оновлено env для маніфесту([4fa37e7](https://github.com/opea-project/GenAIExamples/commit/4fa37e7)) + - Приклад AgentQnA([67df280](https://github.com/opea-project/GenAIExamples/commit/67df280)) + - Виправлено тег tgi xeon([6674832](https://github.com/opea-project/GenAIExamples/commit/6674832)) + - Додано новий приклад DocIndexRetriever([566cf93](https://github.com/opea-project/GenAIExamples/commit/566cf93)) + - Доано параметри env для тесту chatqna xeon([5d3950](https://github.com/opea-project/GenAIExamples/commit/5d3950)) + - Комбінований додаток ProductivitySuite з REACT UI і Keycloak Authen([947cbe3](https://github.com/opea-project/GenAIExamples/commit/947cbe3)) + - змінено модель tgi генератора коду([06cb308](https://github.com/opea-project/GenAIExamples/commit/06cb308)) + - змінено підказку searchqna([acbaaf8](https://github.com/opea-project/GenAIExamples/commit/acbaaf8)) + - незначне виправлення невідповідності токену hf([ac324a9](https://github.com/opea-project/GenAIExamples/commit/ac324a9)) + - виправлено переклад gaudi env([4f3be23](https://github.com/opea-project/GenAIExamples/commit/4f3be23)) + - Незначні виправлення для CodeGen Xeon і Gaudi Kubernetes codegen.yaml ([c25063f](https://github.com/opea-project/GenAIExamples/commit/c25063f)) + +- CI/CD/UT + - оновлено логічний deploy_gmc в робочому процесі cd([c016d82](https://github.com/opea-project/GenAIExamples/commit/c016d82)) + - виправлено ghcr.io/huggingface/text-generation-inference tag([503a1a9](https://github.com/opea-project/GenAIExamples/commit/503a1a9)) + - Додано GMC e2e в робочий процес CD([f45e4c6](https://github.com/opea-project/GenAIExamples/commit/f45e4c6)) + - Виправлено тест CI у проблемі з виявленням зміненого файлу([5dcadf3](https://github.com/opea-project/GenAIExamples/commit/5dcadf3)) + - оновлено ім'я робочого процесу cd([3363a37](https://github.com/opea-project/GenAIExamples/commit/3363a37)) + - Змінено теги мікросервісу в робочому процесі CD([71363a6](https://github.com/opea-project/GenAIExamples/commit/71363a6)) + - Виправлено процес ручного заморожування образів([c327972](https://github.com/opea-project/GenAIExamples/commit/c327972)) + - відкритий тест бар'єрів chatqna([db2d2bd](https://github.com/opea-project/GenAIExamples/commit/db2d2bd)) + - Додано робочий процес збирання, сканування і розгортання gmc([a39f23a](https://github.com/opea-project/GenAIExamples/commit/a39f23a)) + - Вдосконалено інфраструктури CI/CD([c26d0f6](https://github.com/opea-project/GenAIExamples/commit/c26d0f6)) + - Виправлено опечатку в робочому процесі ІГ([e12baca](https://github.com/opea-project/GenAIExamples/commit/e12baca)) + - Виправлено проблеми CI у ChatQnA Qdrant ([e71aba0](https://github.com/opea-project/GenAIExamples/commit/e71aba0)) + - видалено помилку, що продовжувалася: true, щоб зупинити тест, якщо збірка образу завершилася невдало([6296e9f](https://github.com/opea-project/GenAIExamples/commit/6296e9f)) + - Виправлено опечатки в робочому процесі CD([039014f](https://github.com/opea-project/GenAIExamples/commit/039014f)) + - Зафіксовано базові образи([c9f9aca](https://github.com/opea-project/GenAIExamples/commit/c9f9aca)) + - підтримка декількох тестових випадків для ChatQnA([939502d](https://github.com/opea-project/GenAIExamples/commit/939502d)) + - повернено дію до pull_request_target([1c07a38](https://github.com/opea-project/GenAIExamples/commit/1c07a38)) + - Додано робочий процес збору BoM і робочий процес публікації зображень([e93146b](https://github.com/opea-project/GenAIExamples/commit/e93146b)) + - Виправлено залишені помилки у рефакторі структури CI/CD([a6385bc](https://github.com/opea-project/GenAIExamples/commit/a6385bc)) + - Додавання маніфесту тесту e2e , який можна скласти, для робочого процесу cd([d68be05](https://github.com/opea-project/GenAIExamples/commit/d68be05)) + - Додано секрети для тесту CI([3c9e2aa](https://github.com/opea-project/GenAIExamples/commit/3c9e2aa)) + - Зібрано докер-образи Пробочого процесу CD([8c384e0](https://github.com/opea-project/GenAIExamples/commit/8c384e0)) + - виправлено кутову проблему в тесті CI([64bfea9](https://github.com/opea-project/GenAIExamples/commit/64bfea9)) + - Перейменувано файли робочих процесів github([ebc165a](https://github.com/opea-project/GenAIExamples/commit/ebc165a)) + - Покращено маніфест тесту chaqna([a072441](https://github.com/opea-project/GenAIExamples/commit/a072441)) + - Refactor збирає робочі процеси образів за допомогою спільного action.yml([e22d413](https://github.com/opea-project/GenAIExamples/commit/e22d413)) + - Автоматичне створення проблеми в GenAIInfra при зміні файлів docker compose([8bdb598](https://github.com/opea-project/GenAIExamples/commit/8bdb598)) + - Додано власника компонентів([ab98795](https://github.com/opea-project/GenAIExamples/commit/ab98795)) + - Виправлено попередження сканування коду([ac89855](https://github.com/opea-project/GenAIExamples/commit/ac89855)) + - Перевірка url списку докер-образів([cf021ee](https://github.com/opea-project/GenAIExamples/commit/cf021ee)) + - змінено суфікс простору імен на випадковий рядок([46af6f3](https://github.com/opea-project/GenAIExamples/commit/46af6f3)) + - маніфест chatqna k8s: Виправлено проблему із образом retriever-redis v0.9([7719755](https://github.com/opea-project/GenAIExamples/commit/7719755)) + - Додавання Trivy і SBOM дій([f3ffcd5](https://github.com/opea-project/GenAIExamples/commit/f3ffcd5)) + - оптимізувано формат журналу логів CI([dfaf479](https://github.com/opea-project/GenAIExamples/commit/dfaf479)) + +
+ +
GenAIComps + +- Ядра + - Уточнено параметр в api_protocol.py([0584b45](https://github.com/opea-project/GenAIComps/commit/0584b45)) + - Повернено значення за замовчуванням max_new_tokens до 1024([f2497c5](https://github.com/opea-project/GenAIComps/commit/f2497c5)) + - Виправлено метод розкладу Orchestrator([76877c1](https://github.com/opea-project/GenAIComps/commit/76877c1)) + - виправлено неправильний ідентефікатор([9b0edf2](https://github.com/opea-project/GenAIComps/commit/9b0edf2)) + - Дозволено потокові вузли нижче за потоком([90e367e](https://github.com/opea-project/GenAIComps/commit/90e367e)) + - Додано шлюз пошуку в ядро для підтримки мегасервісу IndexRetrivel([56daf95](https://github.com/opea-project/GenAIComps/commit/56daf95)) + - додно документацію про телеметрію([2a2a93](https://github.com/opea-project/GenAIComps/commit/2a2a93)) + +- LLM/вбудовування/переранжування/відновлення + - Використання habana docker 1.16.1 усюди([5deb383](https://github.com/opea-project/GenAIComps/commit/5deb383)) + - додавання entrypoint.sh до faq-generation comp([4a7b8f4](https://github.com/opea-project/GenAIComps/commit/4a7b8f4)) + - Виправлено образ у docker compose yaml для використання вбудованого тегу докер-образу з README-файлу([72a2553](https://github.com/opea-project/GenAIComps/commit/72a2553)) + - Удосконалено власний мікросервіс LLM([b16b14a](https://github.com/opea-project/GenAIComps/commit/b16b14a)) + - Виправлено проблему з qdrant у Retriever([7aee7e4](https://github.com/opea-project/GenAIComps/commit/7aee7e4)) + - Змінено /root/ на /home/user/([4a67d42](https://github.com/opea-project/GenAIComps/commit/4a67d42)) + - Виправлено проблему embeddings_langchain-mosec([87905ad](https://github.com/opea-project/GenAIComps/commit/87905ad)) + - виправлено застарілість HuggingFaceEmbedding на користь HuggingFaceInferenceAPIEmbedding([2891cc6](https://github.com/opea-project/GenAIComps/commit/2891cc6)) + - вирівняно формат відповіді vllm-ray до формату відповіді tgi([ac4a777](https://github.com/opea-project/GenAIComps/commit/ac4a777)) + - створено нові образи для llms([ed99d47](https://github.com/opea-project/GenAIComps/commit/ed99d47)) + - Вхідні дані мікросервісу LLM не мають назви вхідної моделі([761f7e0](https://github.com/opea-project/GenAIComps/commit/761f7e0)) + - Виправлено скрипти збірки OpenVINO vLLM і оновлено модульний тестовий приклад([91d825c](https://github.com/opea-project/GenAIComps/commit/91d825c)) + - Уточнено інструкції для запуску прикладу retriever за допомогою qdrant([eb51018](https://github.com/opea-project/GenAIComps/commit/eb51018)) + - Додано команди для перезапуску служби ollama і додано налаштування проксі під час запуску docker([8eb8b6a](https://github.com/opea-project/GenAIComps/commit/8eb8b6a)) + - Vllm і vllm-ray виправлення помилок (додано opea для vllm, оновлено версію setuptools)([0614fc2](https://github.com/opea-project/GenAIComps/commit/0614fc2)) + - видалено застарілий імпорт langchain і перейдено на langchain-huggingface([055404a](https://github.com/opea-project/GenAIComps/commit/055404a)) + - [Enhence] Збільшено таймаут прямого включення mosec_embedding для підтримки випадків високого рівня паралелізму([b61f61b](https://github.com/opea-project/GenAIComps/commit/b61f61b)) + - Виправлено проблеми з оновленням моделі вбудовування і переранжування до bge-large-zh-v1.5([da19c5d](https://github.com/opea-project/GenAIComps/commit/da19c5d)) + - перефактовано запит/відповідь на вбудовування/ранжування/llm, посилаючись на формат openai([7287caa](https://github.com/opea-project/GenAIComps/commit/7287caa)) + - узгоджено формат виводу мікросервісу VLLM з інтерфейсом користувача([c1887ed](https://github.com/opea-project/GenAIComps/commit/c1887ed)) + - виправлено докер-команд vllm([c1a5883](https://github.com/opea-project/GenAIComps/commit/c1a5883)) + - Оновлено докер-файл Embedding Mosec для використання BAAI/bge-large-zh-v1.5([bbdc1f0](https://github.com/opea-project/GenAIComps/commit/bbdc1f0)) + - знято обмеження на довжину вбудовування([edcd1e8](https://github.com/opea-project/GenAIComps/commit/edcd1e8)) + - Support SearchedDoc input type in LLM for No Rerank Pipeline ([3c29fb4](https://github.com/opea-project/GenAIComps/commit/3c29fb4)) + - Додано local_embedding, що повертає довжину 768, для узгодження з прикладом chatqna([a234db](https://github.com/opea-project/GenAIComps/commit/a234db)) + - Покращено LLM для No Rerank([fe8ef3](https://github.com/opea-project/GenAIComps/commit/fe8ef3f)) + - Видалено надлишкові залежності з компиляторів 'vllm-ray'([068527d](https://github.com/opea-project/GenAIComps/commit/068527d)) + +- LVM/TTS/ASR + - Перероблено TTS, SpeechT5Model, щоб останній аудіофрагмент закінчувався правильним розділовим знаком([20fc8ca](https://github.com/opea-project/GenAIComps/commit/20fc8ca)) + - Підтримка llava-next за допомогою TGI([e156101](https://github.com/opea-project/GenAIComps/commit/e156101)) + - whisper: Виправно помилку збірки контейнера([d5b8cdf](https://github.com/opea-project/GenAIComps/commit/d5b8cdf)) + - підтримка довгоформової генерації whisper ([daec680](https://github.com/opea-project/GenAIComps/commit/daec680)) + - Підтримка декількох джерел зображень для мікросервісу LVM([ed776ac](https://github.com/opea-project/GenAIComps/commit/ed776ac)) + - виправлено збірку ffmpeg на hpu([ac3909d](https://github.com/opea-project/GenAIComps/commit/ac3909d)) + - Підтримка потокового виводу для мікросервісу LVM([c5a0344](https://github.com/opea-project/GenAIComps/commit/c5a0344)) + - Додано мікросервіс LVM video-llama під lvms([db8c893](https://github.com/opea-project/GenAIComps/commit/db8c893)) + - додано torchvision до вимог([1566047](https://github.com/opea-project/GenAIComps/commit/1566047)) + - Використнано базові образи Gaudi з Dockerhub([33db504](https://github.com/opea-project/GenAIComps/commit/33db504)) + - оновлено файл requirements.txt для tts і asr([5ba2561](https://github.com/opea-project/GenAIComps/commit/5ba2561)) + +- DataPrep + - Виправлено проблеми з Dataprep qdrant і додано тестовий скрипт([a851abf](https://github.com/opea-project/GenAIComps/commit/a851abf)) + - Покращено надійність Dataprep Redis([04986c1](https://github.com/opea-project/GenAIComps/commit/04986c1)) + - Вирішення помилки тестового прикладу([075e84f](https://github.com/opea-project/GenAIComps/commit/075e84f)) + - Додано підтримку Unified Port, GET/DELETE кінцевих точок у pgvector Dataprep([8a62bac](https://github.com/opea-project/GenAIComps/commit/8a62bac)) + - Оновлено модель вбудовування mosec dataprep у config.py([8f0f2b0](https://github.com/opea-project/GenAIComps/commit/8f0f2b0)) + - об'єднано порт в один мікросервіс.([f8d45e5](https://github.com/opea-project/GenAIComps/commit/f8d45e5)) + - Оновлено Pinecone в OPEA([7c9f77b](https://github.com/opea-project/GenAIComps/commit/7c9f77b)) + - Покращено Refine Dataprep Code & UT([867e9d7](https://github.com/opea-project/GenAIComps/commit/867e9d7)) + - Підтримка видалення для векторної бази даних Milvus у Dataprep([767a14c](https://github.com/opea-project/GenAIComps/commit/767a14c)) + - Redis-dataprep: Зроблено підключення Redis узгодженим([cfaf5f0](https://github.com/opea-project/GenAIComps/commit/cfaf5f0)) + - Оновлено Dataprep з налаштуванням параметрів([55b457b](https://github.com/opea-project/GenAIComps/commit/55b457b)) + - Виправлено потенційну помилку Dataprep у get_file([04ff8bf](https://github.com/opea-project/GenAIComps/commit/04ff8bf)) + - Додано залежність для обробки pdf2image та OCR processing([9397522](https://github.com/opea-project/GenAIComps/commit/9397522)) + - Виправлено проблему завантаження даних для структурованих файлів([40f1463](https://github.com/opea-project/GenAIComps/commit/40f1463)) + - Виправлено deps #568([c541d1d](https://github.com/opea-project/GenAIComps/commit/c541d1d)) + +- Інші компоненти + - Видалено 'langsmith' за перегляд коду([dcf68a0](https://github.com/opea-project/GenAIComps/commit/dcf68a0)) + - Покращено компонент Nginx([69f9895](https://github.com/opea-project/GenAIComps/commit/69f9895)) + - Додано ведення журналу для уніфікованого налагодження([fab1fbd](https://github.com/opea-project/GenAIComps/commit/fab1fbd)) + - Додано компонент Nginx для переадресації сервісів([60cc0b0](https://github.com/opea-project/GenAIComps/commit/60cc0b0)) + - Виправлено закінчення рядків на LF([fecf4ac](https://github.com/opea-project/GenAIComps/commit/fecf4ac)) + - Додано помічник API для агента([f3a8935](https://github.com/opea-project/GenAIComps/commit/f3a8935)) + - doc: прибрано використання невідомої мови виділення([5bd8bda](https://github.com/opea-project/GenAIComps/commit/5bd8bda)) + - Оновлено README.md([b271739](https://github.com/opea-project/GenAIComps/commit/b271739)) + - doc: виправлено кілька заголовків H1([77e0e7b](https://github.com/opea-project/GenAIComps/commit/77e0e7b)) + - Додано RagAgentDocGrader до agent comp([368c833](https://github.com/opea-project/GenAIComps/commit/368c833)) + - Оновлено Milvus docker-compose.yaml([d3eefea](https://github.com/opea-project/GenAIComps/commit/d3eefea)) + - prompt_registry: Уніфікація порту кінцевої точки API([27a01ee](https://github.com/opea-project/GenAIComps/commit/27a01ee)) + - Незначне оновлення заголовка SPDX([4712545](https://github.com/opea-project/GenAIComps/commit/4712545)) + - Модифікація плагіна токсичності PR ([63650d0](https://github.com/opea-project/GenAIComps/commit/63650d0)) + - Додаткові інструкції зі збірки контейнера([be4833f](https://github.com/opea-project/GenAIComps/commit/be4833f)) + - Додано залежність Uvicorn([b2e2b1a](https://github.com/opea-project/GenAIComps/commit/b2e2b1a)) + - Підтримка запуску від імені користувача Non-Root у всіх опублікованих образів контейнерів([1eaf6b7](https://github.com/opea-project/GenAIComps/commit/1eaf6b7)) + - Оновлено readme і видалено порожне readme([a61e434](https://github.com/opea-project/GenAIComps/commit/a61e434)) + - Доопрацювано README захисних бар'єрів і оновлено модель([7749ce3](https://github.com/opea-project/GenAIComps/commit/7749ce3)) + - Додано власника коду([fb0ea3d](https://github.com/opea-project/GenAIComps/commit/fb0ea3d)) + - Видалено непотрібну langsmith залежність([cc8cd70](https://github.com/opea-project/GenAIComps/commit/cc8cd70)) + - doc: додано .gitignore([d39fee9](https://github.com/opea-project/GenAIComps/commit/d39fee9)) + - Додано оцінку результатів для захисних бар'єрів([62ca5bc](https://github.com/opea-project/GenAIComps/commit/62ca5bc)) + - Додано стратегію виявлення ML до виявлення захисних бар'єрів PII([de27e6b](https://github.com/opea-project/GenAIComps/commit/de27e6b)) + - Додано функції завдання зі списку доналаштування, скасування завдання, пошук завдання доналаштування([7bbbdaf](https://github.com/opea-project/GenAIComps/commit/7bbbdaf)) + - оновлено фінішні налаштування api до формату openai([1ff81da](https://github.com/opea-project/GenAIComps/commit/1ff81da)) + - Додано компонент доопрацювання ([ad0bb7c](https://github.com/opea-project/GenAIComps/commit/ad0bb7c)) + - Додано мікросервіс виявлення токсичності([97fdf54](https://github.com/opea-project/GenAIComps/commit/97fdf54)) + - Виправлено файл readme для searchqna([66cbbf3](https://github.com/opea-project/GenAIComps/commit/66cbbf3)) + - Виправлено опечатки і додано визначення для мікросервісу виявлення токсичності([9b8798a](https://github.com/opea-project/GenAIComps/commit/9b8798a)) + +- CI/CD/UT + - Виправлено помилку збірки образу tts([8b9dcdd](https://github.com/opea-project/GenAIComps/commit/8b9dcdd)) + - Додано робочий процес CD([5dedd04](https://github.com/opea-project/GenAIComps/commit/5dedd04)) + - Виправлено проблему з виявленням зміненого файлу в тесті CI([cd83854](https://github.com/opea-project/GenAIComps/commit/cd83854)) + - додано sudo в видалення wf([1043336](https://github.com/opea-project/GenAIComps/commit/1043336)) + - адаптовано GenAIExample уточнення структури тесту([7ffaf24](https://github.com/opea-project/GenAIComps/commit/7ffaf24)) + - Зафіксовано базові образи([61dba72](https://github.com/opea-project/GenAIComps/commit/61dba72)) + - Виправлено попередження перевірки збирання образів([2b14c63](https://github.com/opea-project/GenAIComps/commit/2b14c63)) + - Модифіковано валідацію перевірки результатів.([8a6079d](https://github.com/opea-project/GenAIComps/commit/8a6079d)) + - Дії щодо виправлення вимог([2207503](https://github.com/opea-project/GenAIComps/commit/2207503)) + - Додано валідацію виявлення результату([cf15b91](https://github.com/opea-project/GenAIComps/commit/cf15b91)) + - Перевірка помилки збірки і змінінено порт 8008 на 5025/5026([5159aac](https://github.com/opea-project/GenAIComps/commit/5159aac)) + - Зафіксовано вимоги([5d9a855](https://github.com/opea-project/GenAIComps/commit/5d9a855)) + - Виправлено проблеми vllm-ray([0bd8215](https://github.com/opea-project/GenAIComps/commit/0bd8215)) + - Стандартизовано збірку образів([a56a847](https://github.com/opea-project/GenAIComps/commit/a56a847)) + - очистка локальних образів перед тестуванням([f36629a](https://github.com/opea-project/GenAIComps/commit/f36629a)) + - оновленяя файлів тестування([ab8ebc4](https://github.com/opea-project/GenAIComps/commit/ab8ebc4)) + - Виправлено помилку валідації без виходу([f46f1f3](https://github.com/opea-project/GenAIComps/commit/f46f1f3)) + - Оновлено шлях запуску CI Microservice([3ffcff4](https://github.com/opea-project/GenAIComps/commit/3ffcff4)) + - Додано приклад тесту E2E([ec4143e](https://github.com/opea-project/GenAIComps/commit/ec4143e)) + - Додано уніфіковані порти для мікросервісу історії чату([2098b91](https://github.com/opea-project/GenAIComps/commit/2098b91)) + - додано секрети для тестування([cafcf1b](https://github.com/opea-project/GenAIComps/commit/cafcf1b)) + - [tests] нормалізувано вбудовування і переранжування імені докер-образу кінцевої точки([e3f29c3](https://github.com/opea-project/GenAIComps/commit/e3f29c3)) + - виправлено asr ut на hpu([9580298](https://github.com/opea-project/GenAIComps/commit/9580298)) + - оновлено список сбірки образів([7185d6b](https://github.com/opea-project/GenAIComps/commit/7185d6b)) + - Додано перевірку шляху до докер-файлів у compose.yaml і змінено назву робочого процесу.([c45f8f0](https://github.com/opea-project/GenAIComps/commit/c45f8f0)) + - покращено збірку докер-образу([75d6bc9](https://github.com/opea-project/GenAIComps/commit/75d6bc9)) + - образ збірки рефактору зі спільним action.yml([ee5b0f6](https://github.com/opea-project/GenAIComps/commit/ee5b0f6)) + - Виправлено помилка з відсутністтю '='([eb5cc8a](https://github.com/opea-project/GenAIComps/commit/eb5cc8a)) + - виправлено зафіксований робочий процес([945b9e4](https://github.com/opea-project/GenAIComps/commit/945b9e4)) + +
+ +
GenAIEvals + +- видалено непотрібний код([1004d5b](https://github.com/opea-project/GenAIEval/commit/1004d5b)) +- Уніфікувано інструмент бенчмарку на основі бібліотеки stresscli([71637c0](https://github.com/opea-project/GenAIEval/commit/71637c0)) +- Виправлено помилку з ідентифікатором списку запитів за межами діапазону([7b719de](https://github.com/opea-project/GenAIEval/commit/7b719de)) +- Додано скрипт бечмарку GMC chatqna([6a390da](https://github.com/opea-project/GenAIEval/commit/6a390da)) +- Додано підказки для тестових прикладів для генератора коду([ebee50c](https://github.com/opea-project/GenAIEval/commit/ebee50c)) +- doc: виправлено мову кодового блоку в README([85aef83](https://github.com/opea-project/GenAIEval/commit/85aef83)) +- Виправлено проблему з метрикою CRUD([82c1654](https://github.com/opea-project/GenAIEval/commit/82c1654)) +- Додано бенчмаркові скрипти stresscli([9998cd7](https://github.com/opea-project/GenAIEval/commit/9998cd7)) +- видалено непотрібний код([1004d5b](https://github.com/opea-project/GenAIEval/commit/1004d5b)) +- підвищено точність багатохопових наборів даних([dfc2c1e](https://github.com/opea-project/GenAIEval/commit/dfc2c1e)) +- doc: додано оптимізацію платформи Kubernetes README([7600db4](https://github.com/opea-project/GenAIEval/commit/7600db4)) +- doc: виправлено оптимізацію платформи README на основі відгуку PR#73([8c7eb1b](https://github.com/opea-project/GenAIEval/commit/8c7eb1b)) +- оновлення для faq по бенчмарку([d754a84](https://github.com/opea-project/GenAIEval/commit/d754a84)) +- підтримка e2e і статистика першого токену P90 ([b07cd12](https://github.com/opea-project/GenAIEval/commit/b07cd12)) + +
+ +
GenAIInfra + +- GMC + - оновлено GMC e2e і документація([8a85364](https://github.com/opea-project/GenAIInfra/commit/8a85364)) + - Виправлено декілька помилок для файлів yaml GMC([112295a](https://github.com/opea-project/GenAIInfra/commit/112295a)) + - Налаштовано робочий процес CD для GMC([3d94844](https://github.com/opea-project/GenAIInfra/commit/3d94844)) + - GMC: Додано підтримку GPU для GMC([119941e](https://github.com/opea-project/GenAIInfra/commit/119941e)) + - authN-authZ: додано підтримку oauth2-проксі для автентифікації та авторизації разом з GMC([488a1ca](https://github.com/opea-project/GenAIInfra/commit/488a1ca)) + - Підтримка вихідного потоку для всього трубопроводу в маршрутизаторі GMC([c412aa3](https://github.com/opea-project/GenAIInfra/commit/c412aa3)) + - реорганізовано k8s файли маніфестів для GMC і приклади([d39b315](https://github.com/opea-project/GenAIInfra/commit/d39b315)) + - GMC: управління ресурсами([81060ab](https://github.com/opea-project/GenAIInfra/commit/81060ab)) + - Увімкнено тест встановлення helm GMC в CI([497ff61](https://github.com/opea-project/GenAIInfra/commit/497ff61)) + - Додано helm chart для розгортання самого GMC([a76c90f](https://github.com/opea-project/GenAIInfra/commit/a76c90f)) + - Додавання декількох кінцевих точок для трубопроводу GMC за допомогою gmcrouter([da4f091](https://github.com/opea-project/GenAIInfra/commit/da4f091)) + - GMC: виправлено небезпечні цитування([aa2730a](https://github.com/opea-project/GenAIInfra/commit/aa2730a)) + - fix: оновлено документацію для authN-authZ з oauth([54cd66f](https://github.com/opea-project/GenAIInfra/commit/54cd66f)) + - Посібник з усунення несправностей для валідації webhook([b47ec0c](https://github.com/opea-project/GenAIInfra/commit/b47ec0c)) + - Виправлено помилки роутера на max_new_tokens і yaml-файлі dataprep gaudi ([5735dd3](https://github.com/opea-project/GenAIInfra/commit/5735dd3)) + - Додано мікросервіс dataprep до прикладу chatQnA([d9a0271](https://github.com/opea-project/GenAIInfra/commit/d9a0271)) + - Додано підтримку HPA до ChatQnA([cab7a88](https://github.com/opea-project/GenAIInfra/commit/cab7a88)) + +- HelmChart + - Додано ручний тестовий потік e2e helm([3b5f62e](https://github.com/opea-project/GenAIInfra/commit/3b5f62e)) + - Додано скрипт для генерації маніфестів з helm charts([273cb1d](https://github.com/opea-project/GenAIInfra/commit/273cb1d)) + - ui: оновлено readme-файл для chatqna helm chart та ім'я env([a1d6d70](https://github.com/opea-project/GenAIInfra/commit/a1d6d70)) + - Оновлено readme-файл для helm chart ([656dcc6](https://github.com/opea-project/GenAIInfra/commit/656dcc6)) + - helm: fix tei/tgi/docsum([a270726](https://github.com/opea-project/GenAIInfra/commit/a270726)) + - helm: оновлено data-prep до останьго зміненого([625899b](https://github.com/opea-project/GenAIInfra/commit/625899b)) + - helm: Оновлення маніфесту для вирішення проблем, що виникають у користувачів([4319660](https://github.com/opea-project/GenAIInfra/commit/4319660)) + - helm: підтримка локального вбудовування([73b5b65](https://github.com/opea-project/GenAIInfra/commit/73b5b65)) + - ui: додано helm chart/маніфести для діалогового інтерфейсу([9dbe550](https://github.com/opea-project/GenAIInfra/commit/9dbe550)) + - helm: Додано K8S prob до retriever-usvc([af47b3c](https://github.com/opea-project/GenAIInfra/commit/af47b3c)) + - Ввімкнено секрети Google у робочому процесі helm chart e2e([7079049](https://github.com/opea-project/GenAIInfra/commit/7079049)) + - Helm/Manifest: Додано K8S probe([d3fc939](https://github.com/opea-project/GenAIInfra/commit/d3fc939)) + - Увімкнено тести helm/common в CI([fa8ef35](https://github.com/opea-project/GenAIInfra/commit/fa8ef35)) + - Helm: Додано підтримку графічного процесора Nvidia у ChatQnA([868103b](https://github.com/opea-project/GenAIInfra/commit/868103b)) + - різні зміни([b1182c4](https://github.com/opea-project/GenAIInfra/commit/b1182c4)) + - tgi: Оновлення версії tgi на xeon до latest-intel-cpu([c06bcea](https://github.com/opea-project/GenAIInfra/commit/c06bcea)) + - Виправлення опечаток у README([faa976b](https://github.com/opea-project/GenAIInfra/commit/faa976b)) + - Підтримка HF_ENDPOINT([cf28da4](https://github.com/opea-project/GenAIInfra/commit/cf28da4)) + - Встановлено model-volume default до tmp volume([b5c14cd](https://github.com/opea-project/GenAIInfra/commit/b5c14cd)) + - Ввімкнути використання PV як каталогу кешу моделі([c0d2ba6](https://github.com/opea-project/GenAIInfra/commit/c0d2ba6)) + - Додано ручний потік тесту e2e на helm ([3b5f62e](https://github.com/opea-project/GenAIInfra/commit/3b5f62e)) + - helm/manifest: Оновлення до версії v0.9([182183e](https://github.com/opea-project/GenAIInfra/commit/182183e)) + +- Інші + - Перейменовано робочі процеси, щоб їх було легше читати([cb31d05](https://github.com/opea-project/GenAIInfra/commit/cb31d05)) + - Додно ручне завдання для заморожування тегів образів і версій після заморожування коду([c0f5e2f](https://github.com/opea-project/GenAIInfra/commit/c0f5e2f)) + - tgi: повернуто версію xeon до 2.2.0([076e81e](https://github.com/opea-project/GenAIInfra/commit/076e81e)) + - Ініціовано коміт для Intel Gaudi Base Operator([c2a13d1](https://github.com/opea-project/GenAIInfra/commit/c2a13d1)) + - Додано приклад AudioQnA і тест e2e([1b50b73](https://github.com/opea-project/GenAIInfra/commit/1b50b73)) + - Реорганізовано і перейменовано робочі процеси CI, щоб відповідати правилам([2bf648c](https://github.com/opea-project/GenAIInfra/commit/2bf648c)) + - Виправлено помилки у робочому процесі ci([779e526](https://github.com/opea-project/GenAIInfra/commit/779e526)) + - Додано тест e2e для chatqna з увімкненим режимом перемикання([7b20273](https://github.com/opea-project/GenAIInfra/commit/7b20273)) + - Валідація реалізації webhook([df5f6f3](https://github.com/opea-project/GenAIInfra/commit/df5f6f3)) + - Покращено процес створення образів вручну([e983c32](https://github.com/opea-project/GenAIInfra/commit/e983c32)) + - Додано процес побудови образу за ручною подією([833dcec](https://github.com/opea-project/GenAIInfra/commit/833dcec)) + - CI: змінено chart e2e для підтримки заміни тегів([739788a](https://github.com/opea-project/GenAIInfra/commit/739788a)) + - Додано тест e2e для chatQnA з мікросервісом dataprep([c1fd27f](https://github.com/opea-project/GenAIInfra/commit/c1fd27f)) + - Виправлено помилку chart робочого процесу e2e([86dd739](https://github.com/opea-project/GenAIInfra/commit/86dd739)) + - Вдосконалено робочий процес тестування e2e та сценарії chart([70205e5](https://github.com/opea-project/GenAIInfra/commit/70205e5)) + - Перейменовано робочі процеси, щоб їх було легше читати([cb31d05](https://github.com/opea-project/GenAIInfra/commit/cb31d05)) + - Виправлено тег образу TGI для платформи NV([629033b](https://github.com/opea-project/GenAIInfra/commit/629033b)) + - authN-authZ: змінено папку і підтримку розділення([0c39b7b](https://github.com/opea-project/GenAIInfra/commit/0c39b7b)) + - виправлено помилки ручного робочого процесу helm([bd46dfd](https://github.com/opea-project/GenAIInfra/commit/bd46dfd)) + - оновлено робочий процес ручного заморожування тегів([c565909](https://github.com/opea-project/GenAIInfra/commit/c565909)) + - Оновлено README([9480afc](https://github.com/opea-project/GenAIInfra/commit/9480afc)) + - покращено робочі процеси cd і додано релізний документ([a4398b0](https://github.com/opea-project/GenAIInfra/commit/a4398b0)) + - Додано документацію і скрипти для підтримки платформи NVIDIA([cad2fc3](https://github.com/opea-project/GenAIInfra/commit/cad2fc3)) + +
diff --git a/docs-ua/release_notes/v1.0.md b/docs-ua/release_notes/v1.0.md new file mode 100644 index 00000000..833ea502 --- /dev/null +++ b/docs-ua/release_notes/v1.0.md @@ -0,0 +1,441 @@ +# OPEA Release Notes v1.0 +## Що нового в OPEA v1.0 + +- Основні моменти + - Покращено продуктивность RAG за допомогою оптимізації мікросервісів (наприклад, Hugging Face TGI, vLLM) і налаштування мегасервісів + - Забезпечено підтримку навчання експериментальної моделі LLM, включаючи повну точну настройку і точну настройку з урахуванням параметрів (PEFT) + - Удосконалено RAG за допомогою графа знань на основі Neo4j + - Вдосконалено VisualQnA і забезпечено мультимодальну підтримку RAG + - Швидший запуск мікросервісу завдяки усуненню деяких накладних витрат на відправлення + - Увімкнено шлюз із захисним бар'єром та інтегровано nginx із захистом CORS і підготовкою даних + - Увімкнено HorizontalPodAutoscaleer (HPA) для кращого управління ресурсами + - Визначено метрики продуктивності RAG і увімкнено оцінку точності для більшої кількості прикладів GenAI + - Подальше покращення документації та досвіду розробників + +- Інші функції + - Увімкнено OpenAI-сумісний формат на відповідних мікросервісах + - Підтримка запуску мікросервісу від ModelScope для задоволення потреб екосистеми Китаю + - Підтримка Red Hat OpenShift Container Platform (RHOCP) + - Рефакторинг коду та трубопроводу CI/CD, щоб забезпечити кращу підтримку для дописувачів + - Покращено версійність Docker, щоб уникнути потенційного конфлікту + - Удосконалено мікросервісний з'єднувач GenAI (GMC), включаючи такі поліпшення, як оптимізація продуктивності маршрутизатора та інші оновлення, що сприяють розширенню масштабованості. + - Представлено експортер пропускної здатності пам'яті (Memory Bandwidth Exporter), який інтегрується з інтерфейсом ресурсів вузла Kubernetes + +- Дізнайтеся більше про OPEA за посиланнями + - Getting Started: https://opea-project.github.io/latest/index.html + - Github: https://github.com/opea-project + - Docker Hub: https://hub.docker.com/u/opea + +- Документація релізу: + - Landing Page: https://opea.dev/ + - Release Notes: https://github.com/opea-project/docs/tree/main/release_notes + +## Докладніше + +
GenAIExamples + +- Розгортання + - Додано підтримку ui/nginx у маніфесті K8S для ChatQnA/CodeGen/CodeTrans/Docsum([ba94e01](https://github.com/opea-project/GenAIExamples/commit/ba94e01)) + - K8S manifest: Оновлено ChatQnA/CodeGen/CodeTrans/DocSum([0629696](https://github.com/opea-project/GenAIExamples/commit/0629696)) + - Оновлення шляху монтування в xeon k8s([2a6af64](https://github.com/opea-project/GenAIExamples/commit/2a6af64)) + - Додано маніфест Nginx - k8s в CodeTrans([6a679ba](https://github.com/opea-project/GenAIExamples/commit/6a679ba)) + - Додано Nginx - докер в CodeTrans([cc84847](https://github.com/opea-project/GenAIExamples/commit/cc84847)) + - переглянуті інші зміни в докері, що стосуються компонування файлів([4b0bc26](https://github.com/opea-project/GenAIExamples/commit/4b0bc26)) + - Додано маніфест chatQnA UI([758d236](https://github.com/opea-project/GenAIExamples/commit/758d236)) + - Повернуто модель LLM для GMS в kubernetes([f5f1e32](https://github.com/opea-project/GenAIExamples/commit/f5f1e32)) + - [ChatQnA] Оновлено маніфести retrieval & dataprep([6730b24](https://github.com/opea-project/GenAIExamples/commit/6730b24)) + - [ChatQnA]Оновлено маніфести([3563f5d](https://github.com/opea-project/GenAIExamples/commit/3563f5d)) + - [ChatQnA] Оновлення маніфестів бенчмаркінгу([36fb9a9](https://github.com/opea-project/GenAIExamples/commit/36fb9a9)) + - [ChatQnA] udate OOB & Tuned маніфести([ac34860](https://github.com/opea-project/GenAIExamples/commit/ac34860)) + - Додано nginx і UI до маніфесту ChatQnA([05f9828](https://github.com/opea-project/GenAIExamples/commit/05f9828)) + - [ChatQnA] Оновлено OOB з маніфестами обгорток([933c3d3](https://github.com/opea-project/GenAIExamples/commit/933c3d3)) + - [Translation] Підтримка маніфестів і nginx([1e13031](https://github.com/opea-project/GenAIExamples/commit/1e13031)) + - оновлено маніфест бенчмарку V1.0([e5affb9](https://github.com/opea-project/GenAIExamples/commit/e5affb9)) + - оновлено назву образу([e2a74f7](https://github.com/opea-project/GenAIExamples/commit/e2a74f7)) + - K8S manifest: Онлвлено ChatQnA/CodeGen/CodeTrans/DocSum([0629696](https://github.com/opea-project/GenAIExamples/commit/0629696)) + - Змінено шлях до мегасервісу відповідно до нової файлової структури([5ab27b6](https://github.com/opea-project/GenAIExamples/commit/5ab27b6)) + - Додано ui/nginx підтримку в маніфесті K8S для ChatQnA/CodeGen/CodeTrans/Docsum([ba94e01](https://github.com/opea-project/GenAIExamples/commit/ba94e01)) + - Yaml: додано коментарі, щоб вказати ідентифікатори пристроїв gaudi([63406dc](https://github.com/opea-project/GenAIExamples/commit/63406dc)) + - додано встановлення tgi bf16 на CPU k8s.([ba17031](https://github.com/opea-project/GenAIExamples/commit/ba17031)) + +- Документація + - [ChatQnA] Оновлено README для ModelScope([aebc23f](https://github.com/opea-project/GenAIExamples/commit/aebc23f)) + - Оновлено README.md([4bd7841](https://github.com/opea-project/GenAIExamples/commit/4bd7841)) + - [ChatQnA] Оновлено README для трубопроводу без реранжування([6b617d6](https://github.com/opea-project/GenAIExamples/commit/6b617d6)) + - [ChatQnA] Оновлено README бенчмарку для з/без переранжування([4a51874](https://github.com/opea-project/GenAIExamples/commit/4a51874)) + - Виправлено readme для nv gpu([43b2ae5](https://github.com/opea-project/GenAIExamples/commit/43b2ae5)) + - [ChatQnA] новлено README бенчмарку щоб виправити довжину вхідних даних([55d287d](https://github.com/opea-project/GenAIExamples/commit/55d287d)) + - Вдосконалено ChatQnA README для TGI([afc3341](https://github.com/opea-project/GenAIExamples/commit/afc3341)) + - Додано модель за замовчуванням для VisualQnA README([07baa8f](https://github.com/opea-project/GenAIExamples/commit/07baa8f)) + - Оновлено readme для маніфестів деяких прикладів([adb157f](https://github.com/opea-project/GenAIExamples/commit/adb157f)) + - doc: використовувати таблицю markdown у supported_examples([9cf1d88](https://github.com/opea-project/GenAIExamples/commit/9cf1d88)) + - doc: видалено невірну мову блоку коду([c6d811a](https://github.com/opea-project/GenAIExamples/commit/c6d811a)) + - додано AudioQnA readme з моделями, що підтримуються([f4f4da2](https://github.com/opea-project/GenAIExamples/commit/f4f4da2)) + - додано більше власників коду([7f89797](https://github.com/opea-project/GenAIExamples/commit/7f89797)) + - doc: виправлено заголовки([7a0fca7](https://github.com/opea-project/GenAIExamples/commit/7a0fca7)) + - [Codegen] Доопрацювано readme, щоб підказати користувачам, як змінити модель.([814164d](https://github.com/opea-project/GenAIExamples/commit/814164d)) + - Оновлено README.md і видалено деякі дані з відкритим кодом([2ef83fc](https://github.com/opea-project/GenAIExamples/commit/2ef83fc)) + - Додано шаблон проблеми([84a781a](https://github.com/opea-project/GenAIExamples/commit/84a781a)) + - doc: виправлено заголовки та відступи([67394b8](https://github.com/opea-project/GenAIExamples/commit/67394b8)) + - Додано модель за замовчуванням у readme для FaqGen і DocSum([d487093](https://github.com/opea-project/GenAIExamples/commit/d487093)) + - Змінено документацію до kubernetes для команд curl у README([4133757](https://github.com/opea-project/GenAIExamples/commit/4133757)) + - Оновлено дані випуску v0.9 RAG([947936e](https://github.com/opea-project/GenAIExamples/commit/947936e)) + - Пояснено модель за замовчуванням у README'ах ChatQnA і CodeTrans([2a2ff45](https://github.com/opea-project/GenAIExamples/commit/2a2ff45)) + - Оновлено список докер-образів([a8244c4](https://github.com/opea-project/GenAIExamples/commit/a8244c4)) + - перероблено налаштування мережевого порту для AWS([bc81770](https://github.com/opea-project/GenAIExamples/commit/bc81770)) + - Add validate microservice details link([bd811bd](https://github.com/opea-project/GenAIExamples/commit/bd811bd)) + - [ChatQnA] Додано Nginx в Docker Compose і README([6c36448](https://github.com/opea-project/GenAIExamples/commit/6c36448)) + - [Doc] Оновлено CodeGen і Translation READMEs([a09395e](https://github.com/opea-project/GenAIExamples/commit/a09395e)) + - [Doc] Покращено READMEs([372d78c](https://github.com/opea-project/GenAIExamples/commit/372d78c)) + - Видалено маркетингові матеріали([d85ec09](https://github.com/opea-project/GenAIExamples/commit/d85ec09)) + - doc PR на головну замість v1.0r([dc94026](https://github.com/opea-project/GenAIExamples/commit/dc94026)) + - Оновлено README.md для Multiplatforms([b205dc7](https://github.com/opea-project/GenAIExamples/commit/b205dc7)) + - Вдосконалено швидкий запуск ChatQnA([3b70fb0](https://github.com/opea-project/GenAIExamples/commit/3b70fb0)) + - Оновлено supported_examples([96d5cd9](https://github.com/opea-project/GenAIExamples/commit/96d5cd9)) + - [Doc] покращення документації([e0b3b57](https://github.com/opea-project/GenAIExamples/commit/e0b3b57)) + - Виправлено помилки README([bceacdc](https://github.com/opea-project/GenAIExamples/commit/bceacdc)) + - doc: виправлео непрацююче посилання на зображення і розмітку([d422929](https://github.com/opea-project/GenAIExamples/commit/d422929)) + - doc: дадено документу змістовну назву([a3fa0d6](https://github.com/opea-project/GenAIExamples/commit/a3fa0d6)) + - doc: Виправлено невірний readme для reorg([d2bab99](https://github.com/opea-project/GenAIExamples/commit/d2bab99)) + - doc: виправлено неправильний шлях до файлів зображень png ([d97882e](https://github.com/opea-project/GenAIExamples/commit/d97882e)) + - оновлено документ відповідно до коментарів([f990f79](https://github.com/opea-project/GenAIExamples/commit/f990f79)) + - Update README with new examples([2d28beb](https://github.com/opea-project/GenAIExamples/commit/2d28beb)) + - README: виправлено непрацюючі посилання([ff6f841](https://github.com/opea-project/GenAIExamples/commit/ff6f841)) + - Оновлено README.md файлами pdf([87e51d5](https://github.com/opea-project/GenAIExamples/commit/87e51d5)) + - Додано таблицю з переліком портів, кінцевих точок, фреймворків, моделей, сервісів і апаратного забезпечення для кожного мікросервісу в ChatQnA([1a934af](https://github.com/opea-project/GenAIExamples/commit/1a934af)) + - Оновлено документ SearchQnA і файл compose.yaml([5c67204](https://github.com/opea-project/GenAIExamples/commit/5c67204)) + - Оновлено недійсні посилання([7b2194f](https://github.com/opea-project/GenAIExamples/commit/7b2194f)) + - AgentQnA: Fix erroneous link in the README([1144fae](https://github.com/opea-project/GenAIExamples/commit/1144fae)) + - Виправлено посилання на Xeon відповідно до його торгової марки([e1b8ce0](https://github.com/opea-project/GenAIExamples/commit/e1b8ce0)) + - Введено метод get у файл nke-10k-2023.pdf([a2745b2](https://github.com/opea-project/GenAIExamples/commit/a2745b2)) + - прийнято технічний стиль написання текстів([558ea3b](https://github.com/opea-project/GenAIExamples/commit/558ea3b)) + - Покращено чат ChatQnA відповідно до відгуків([375ea7a](https://github.com/opea-project/GenAIExamples/commit/375ea7a)) + - Виправлено значення змінної BACKEND_SERVICE_ENDPOINT в інструкціях VideoQnA([79e947e](https://github.com/opea-project/GenAIExamples/commit/79e947e)) + - [Doc] Покращено ChatQnA README([7eaab93](https://github.com/opea-project/GenAIExamples/commit/7eaab93)) + +- Функціональність і виправлення помилок + - Виправлено помилку рефактору([7c13f2c](https://github.com/opea-project/GenAIExamples/commit/7c13f2c)) + - Введено метод get до файлу nke-10k-2023.pdf([a2745b2](https://github.com/opea-project/GenAIExamples/commit/a2745b2)) + - Інтегрувано бекенд visualQnA([fa12083](https://github.com/opea-project/GenAIExamples/commit/fa12083)) + - Включено nginx для VisualQnA([def19b4](https://github.com/opea-project/GenAIExamples/commit/def19b4)) + - Додано Налаштування й Оновлення системи Опція підказки([1d1e1f9](https://github.com/opea-project/GenAIExamples/commit/1d1e1f9)) + - Папка рефакторингу для підтримки різних постачальників([d73129c](https://github.com/opea-project/GenAIExamples/commit/d73129c)) + - Додано приклад налаштування переранжування([71857f5](https://github.com/opea-project/GenAIExamples/commit/71857f5)) + - видалено журнали для бенчмарку([e0bc5f2](https://github.com/opea-project/GenAIExamples/commit/e0bc5f2)) + - оновлено збірку образів для 2 нових прикладів([0869029](https://github.com/opea-project/GenAIExamples/commit/0869029)) + - Виправлено вміст збірки образів comps/nginx([22d066a](https://github.com/opea-project/GenAIExamples/commit/22d066a)) + - react-ui: Додано підтримку відображення китайської мови([8c40204](https://github.com/opea-project/GenAIExamples/commit/8c40204)) + - [VisualQnA] Оновлено compose.yaml для виправлення проблеми з URL кінцевої точки в інтерфейсі користувача([fbaa024](https://github.com/opea-project/GenAIExamples/commit/fbaa024)) + - Додано визначення мегасервісу без обгорток мікросервісів([ebe6b47](https://github.com/opea-project/GenAIExamples/commit/ebe6b47)) + - Додано приклад налаштування інструкції([4c78f8c](https://github.com/opea-project/GenAIExamples/commit/4c78f8c)) + - виправлено ім'я токену([1e47444](https://github.com/opea-project/GenAIExamples/commit/1e47444)) + - Змінено обробку виявлених попереджень на лише підказки([e6f5d13](https://github.com/opea-project/GenAIExamples/commit/e6f5d13)) + - Завжди завантажуйте артефакти сканування([6f3e54a](https://github.com/opea-project/GenAIExamples/commit/6f3e54a)) + - Оновлено ChatQnA env ([32afb65](https://github.com/opea-project/GenAIExamples/commit/32afb65)) + - Yinghu5 patch 1([beda609](https://github.com/opea-project/GenAIExamples/commit/beda609)) + - Оновлено команду запуску ollama([10c81f1](https://github.com/opea-project/GenAIExamples/commit/10c81f1)) + - тег щотижневого оновлення образів([035f39f](https://github.com/opea-project/GenAIExamples/commit/035f39f)) + - Виправлено конфлікт портів у llava-tgi-service у VisualQnA([993688a](https://github.com/opea-project/GenAIExamples/commit/993688a)) + - Видалено 'vim' з усіх файлів Docker([1874dfd](https://github.com/opea-project/GenAIExamples/commit/1874dfd)) + - посилено дію публікації образу([5fde666](https://github.com/opea-project/GenAIExamples/commit/5fde666)) + - Оновлено порт в set_env.sh для кінцевої точки TGI([e5ec38c](https://github.com/opea-project/GenAIExamples/commit/e5ec38c)) + - переміщено скрипти оцінки([f04f061](https://github.com/opea-project/GenAIExamples/commit/f04f061)) + - Обробка неконтрольованого шляху даних для версії MultimodalQnA v1.0([872e93e](https://github.com/opea-project/GenAIExamples/commit/872e93e)) + - Вирівняно параметри для "max_token, repetition_penalty,presence_penalty,frequency_penalty"([2f03a3a](https://github.com/opea-project/GenAIExamples/commit/2f03a3a)) + - Видалено непотрібні папки([88829c9](https://github.com/opea-project/GenAIExamples/commit/88829c9)) + - виправлено помилку шляху для reorg([264759d](https://github.com/opea-project/GenAIExamples/commit/264759d)) + - виправлено помилку reorg([504228e](https://github.com/opea-project/GenAIExamples/commit/504228e)) + - Додано гіперпосиланя валідації шляхів зображень([0611707](https://github.com/opea-project/GenAIExamples/commit/0611707)) + - Додано приклад gaudi для налаштування моделі переранжування([edcc50f](https://github.com/opea-project/GenAIExamples/commit/edcc50f)) + - Додано VideoRAGQnA як приклад використаання MMRAG в Example([2dd69dc](https://github.com/opea-project/GenAIExamples/commit/2dd69dc)) + - Агент example для версії v1.0([262a6f6](https://github.com/opea-project/GenAIExamples/commit/262a6f6)) + - Виправлено проблеми з інструкціями VisualQnA([bc4bbfa](https://github.com/opea-project/GenAIExamples/commit/bc4bbfa)) + - Зроблено реакцію ui cogen на використання часу виконання змінних середовища([b84c989](https://github.com/opea-project/GenAIExamples/commit/b84c989)) + - додано збірку образів для нових прикладів([3f2e7b7](https://github.com/opea-project/GenAIExamples/commit/3f2e7b7)) + - виправлено проблему побудови образу при push([88fde62](https://github.com/opea-project/GenAIExamples/commit/88fde62)) + - [ChatQnA] Add no_wrapper benchmarking and update legacy manifests([06696c8](https://github.com/opea-project/GenAIExamples/commit/06696c8)) + - Додано imagePrompt для відображення підказки до зображення за замовчуванням([e48532e](https://github.com/opea-project/GenAIExamples/commit/e48532e)) + - BUGFIX: перейменовано videoragqna в videoqna для узгодження з іншими прикладами([e102291](https://github.com/opea-project/GenAIExamples/commit/e102291)) + - Виправлено проблему з обмеженням мегасервісу при високій паралельності([4112fd0](https://github.com/opea-project/GenAIExamples/commit/4112fd0)) + +- CI/CD/UT + - Додано нові тестові приклади для VisualQnA([995a62c](https://github.com/opea-project/GenAIExamples/commit/995a62c)) + - Покращення докер-образів робочого процесу cd([675ea4a](https://github.com/opea-project/GenAIExamples/commit/675ea4a)) + - оптимізовано сканування зображень у робочому процесі cd([dba908a](https://github.com/opea-project/GenAIExamples/commit/dba908a)) + - Вдосконалено вивід результатів сканування коду і видалено файл opea_release_data.md([21e215c](https://github.com/opea-project/GenAIExamples/commit/21e215c)) + - Виправлено інші проблеми репозиторію([412a0b0](https://github.com/opea-project/GenAIExamples/commit/412a0b0)) + - [DocIndexRetriever] Додано тест xeon і виправлено тест gaudi([62dbb6d](https://github.com/opea-project/GenAIExamples/commit/62dbb6d)) + - переглянуто більше змін у файлах docker compose([4b0bc26](https://github.com/opea-project/GenAIExamples/commit/4b0bc26)) + - виправлено опечатку у тестовому скрипті в AgentQnA([10fe3c6](https://github.com/opea-project/GenAIExamples/commit/10fe3c6)) + - Виправлено тести InstructionTuning і RerankFinetuning([be8e283](https://github.com/opea-project/GenAIExamples/commit/be8e283)) + - Виправлено проблеми([0bb0abb](https://github.com/opea-project/GenAIExamples/commit/0bb0abb)) + - print image build test commit([3ce3955](https://github.com/opea-project/GenAIExamples/commit/3ce3955)) + - Виправлено помилки у тесті SearchQnA([daf2a4f](https://github.com/opea-project/GenAIExamples/commit/daf2a4f)) + - [ProductivitySuite] Виправлено проблеми CD([d55a33d](https://github.com/opea-project/GenAIExamples/commit/d55a33d)) + +
+ +
GenAIComps + +- Ядра + - Оптимізовано мегапотік, видаливши обгортку мікросервісів([0bb69ac](https://github.com/opea-project/GenAIComps/commit/0bb69ac)) + - Виправлено захісні бар'єри логіки обробки для розриву рядка і цитати([e38ed6d](https://github.com/opea-project/GenAIComps/commit/e38ed6d)) + - виправлено невідповідність формату відповіді з/без потоковими захисними бар'єрами([b6c0785](https://github.com/opea-project/GenAIComps/commit/b6c0785)) + +- Доопрацювання / попередня підготовка + - Додано доопрацьований посібник з розгортання моделі у readme([2931147](https://github.com/opea-project/GenAIComps/commit/2931147)) + - Додано підтримку попередньої підготовки LLM([58e9972](https://github.com/opea-project/GenAIComps/commit/58e9972)) + - оновлення контейнерів для доопрацювання композиту([f4d123c](https://github.com/opea-project/GenAIComps/commit/f4d123c)) + - увімкнено налаштування вбудовування([7e1a2e5](https://github.com/opea-project/GenAIComps/commit/7e1a2e5)) + - оноввлено документацію з налаштування([7d2cd6b](https://github.com/opea-project/GenAIComps/commit/7d2cd6b)) + - Підтримка налаштування моделі переранжування([7d9265f](https://github.com/opea-project/GenAIComps/commit/7d9265f)) + - вилучено Оновлення формату контрольних точок([8369fbf](https://github.com/opea-project/GenAIComps/commit/8369fbf)) + - Обмеження в налаштуваннях моделей([a924579](https://github.com/opea-project/GenAIComps/commit/a924579)) + - оновлено формат завантаження_навчальних_файлів([3367b76](https://github.com/opea-project/GenAIComps/commit/3367b76)) + - доопрацювано код логування([5b3053f](https://github.com/opea-project/GenAIComps/commit/5b3053f)) + - Додано доопрацьований посібник з розгортання моделі у readme([2931147](https://github.com/opea-project/GenAIComps/commit/2931147)) + +- LVM/Video RAG + - Виправлено проблему коду lvms videl-llama([38abaab](https://github.com/opea-project/GenAIComps/commit/38abaab)) + - Виправлено проблему з потоковою передачею LVM([fb4b8d2](https://github.com/opea-project/GenAIComps/commit/fb4b8d2)) + - Додавання схеми до ініціалізації Redis і покращення LVM-TGI для мультимодального мікросервісу Retriever([23cc3ea](https://github.com/opea-project/GenAIComps/commit/23cc3ea)) + - Оновлено ретривери і lvm для мультимодальних rag на відео([1513998](https://github.com/opea-project/GenAIComps/commit/1513998)) + - BUG FIX: LVM security fix([3e548f3](https://github.com/opea-project/GenAIComps/commit/3e548f3)) + - Додано підтримку Megaservice для випадку використання MMRAG VideoRAGQnA([2c48bc8](https://github.com/opea-project/GenAIComps/commit/2c48bc8)) + - Додано локальний мікросервіс Rerank для VideoRAGQnA([5fb4a38](https://github.com/opea-project/GenAIComps/commit/5fb4a38)) + - Додано підтримку Megaservice для MMRAG - MultimodalRAGQnAWithVideos випадку використання([99be1bd](https://github.com/opea-project/GenAIComps/commit/99be1bd)) + - Виправлення у PR 496 для додавання функції format_video_name([54aa943](https://github.com/opea-project/GenAIComps/commit/54aa943)) + - Компонент Prediction Guard LVM([1249c4f](https://github.com/opea-project/GenAIComps/commit/1249c4f)) + - Виправлено побудову образів компонентів vLLM([161c338](https://github.com/opea-project/GenAIComps/commit/161c338)) + +- LLM/Rerank/Retrieval + - Виправлено помилку потоку vllm llamaindex([ca94c60](https://github.com/opea-project/GenAIComps/commit/ca94c60)) + - Підтримка індексу Llama для llms native([2e41dcf](https://github.com/opea-project/GenAIComps/commit/2e41dcf)) + - Компонент Prediction Guard LLM([391c4a5](https://github.com/opea-project/GenAIComps/commit/391c4a5)) + - оновлено vllm до останньої версії для hpu([599a58f](https://github.com/opea-project/GenAIComps/commit/599a58f)) + - Вирівнено параметри для "max_token, repetition_penalty,presence_penalty,frequency_penalty"([3a31295](https://github.com/opea-project/GenAIComps/commit/3a31295)) + - оптимізувано переранжування з бекенд рефом([d76751a](https://github.com/opea-project/GenAIComps/commit/d76751a)) + - додано мікросервіс VDMS retriever для v0.9 Milestone([445c9b1](https://github.com/opea-project/GenAIComps/commit/445c9b1)) + - Виправлено помилку Retriever README([1d761fa](https://github.com/opea-project/GenAIComps/commit/1d761fa)) + - unify default reranking model with BAAI/bge-reranker-base([48d4e53](https://github.com/opea-project/GenAIComps/commit/48d4e53)) + - Виправлено проблеми оновлення Ollama langchain([8adbcce](https://github.com/opea-project/GenAIComps/commit/8adbcce)) + - vllm langchain: Додано документ Retriever Support([0f2c2b1](https://github.com/opea-project/GenAIComps/commit/0f2c2b1)) + - Підтримка індексу Llama для vLLM([8e3f553](https://github.com/opea-project/GenAIComps/commit/8e3f553)) + - Зміни в comps/llms/text-generation/README([18092f3](https://github.com/opea-project/GenAIComps/commit/18092f3)) + - Виправлено проблеми безпеки([a672569](https://github.com/opea-project/GenAIComps/commit/a672569)) + +- DataPrep/vector stores + - Виправлено помилку завантаження json-файлу([2fbce3e](https://github.com/opea-project/GenAIComps/commit/2fbce3e)) + - Виправлено помилку завантаження json-файлу([89197e5](https://github.com/opea-project/GenAIComps/commit/89197e5)) + - Виправлено сторінку вибірки dataprep([01886fe](https://github.com/opea-project/GenAIComps/commit/01886fe)) + - Мультимодальний dataprep([6d4b668](https://github.com/opea-project/GenAIComps/commit/6d4b668)) + - Покращено Dataprep Milvus MS([7686cfa](https://github.com/opea-project/GenAIComps/commit/7686cfa)) + - dataprep: Виправлено помилку при завантаженні docx зі вставленим зображенням([b873cf8](https://github.com/opea-project/GenAIComps/commit/b873cf8)) + - додано: Сховище векторів шляхів і ретрівер як компонент LangChain([2c2322e](https://github.com/opea-project/GenAIComps/commit/2c2322e)) + - додавання lancedb до векторних магазинів langchain([2360e5a](https://github.com/opea-project/GenAIComps/commit/2360e5a)) + - додано підтримку dataprep для моделей на основі CLIP для прикладу VideoRAGQnA у версії 1.0([f84d91a](https://github.com/opea-project/GenAIComps/commit/f84d91a)) + +- Інші компоненти + - Виправлено помилку з кодом визначення наміру([4c0f527](https://github.com/opea-project/GenAIComps/commit/4c0f527)) + - Очищено деякі непотрібні скрипти та команди Docker-файлу.([824a7e2](https://github.com/opea-project/GenAIComps/commit/824a7e2)) + - Оновлено власників коду([5537b7f](https://github.com/opea-project/GenAIComps/commit/5537b7f)) + - doc: виправлено рівні заголовків у змісті markdown([a8a46bc](https://github.com/opea-project/GenAIComps/commit/a8a46bc)) + - [Reorg] Папка Reorg для підтримки різних постачальників([bea9bb0](https://github.com/opea-project/GenAIComps/commit/bea9bb0)) + - уніфікувано модель переранжування за замовчуванням з BAAI/bge-reranker-base([48d4e53](https://github.com/opea-project/GenAIComps/commit/48d4e53)) + - feedback_management: Видалено 'vim' з докер-файлу([b2e64d2](https://github.com/opea-project/GenAIComps/commit/b2e64d2)) + - переключено на використання висхідного 'tgi-gaudi' на HuggingFace([90cc44f](https://github.com/opea-project/GenAIComps/commit/90cc44f)) + - Використано Pip '--no-cache-dir' зі всіма Dockerfiles([f1f866f](https://github.com/opea-project/GenAIComps/commit/f1f866f)) + - Змінено тег зображення([2093558](https://github.com/opea-project/GenAIComps/commit/2093558)) + - додано власників коду([0379aeb](https://github.com/opea-project/GenAIComps/commit/0379aeb)) + - Вилучено ревізію для вбудовування TEI([d609071](https://github.com/opea-project/GenAIComps/commit/d609071)) + - BUGFIX: виправлено SearchedMultimodalDoc в docarray([ed44b44](https://github.com/opea-project/GenAIComps/commit/ed44b44)) + - Компонент мікросервісу управління зворотним зв'язком([72123b2](https://github.com/opea-project/GenAIComps/commit/72123b2)) + - підвищено версію до v1.0([9a1af76](https://github.com/opea-project/GenAIComps/commit/9a1af76)) + - Додано Scan Container([0d49244](https://github.com/opea-project/GenAIComps/commit/0d49244)) + - Видалено 'vim' зі всіх докер-файлів([25174c0](https://github.com/opea-project/GenAIComps/commit/25174c0)) + - Оновлено збірку образів yaml([b541fd8](https://github.com/opea-project/GenAIComps/commit/b541fd8)) + - ollama: Оновлено проксі curl([f510b69](https://github.com/opea-project/GenAIComps/commit/f510b69)) + - час виконання вбудовування на NeuralSpeed([0292355](https://github.com/opea-project/GenAIComps/commit/0292355)) + - додано мікросервіс для виявлення намірів([84a7e57](https://github.com/opea-project/GenAIComps/commit/84a7e57)) + - Update README.md for Multiplatforms([ef90fbb](https://github.com/opea-project/GenAIComps/commit/ef90fbb)) + - doc: виправлено рівні заголовків([f8f8854](https://github.com/opea-project/GenAIComps/commit/f8f8854)) + - Компонент вбудовування Prediction Guard([191061b](https://github.com/opea-project/GenAIComps/commit/191061b)) + - [ChatQnA] Підтримка K8S Python Client для експорту маніфестів ChatQnA E2E([af4e0f8](https://github.com/opea-project/GenAIComps/commit/af4e0f8)) + - Додано підтримку Megaservice для випадку використання MMRAG VideoRAGQnA([2c48bc8](https://github.com/opea-project/GenAIComps/commit/2c48bc8)) + - замінено langchain/langchain:останнім з python:3.11-slim([6ce6551](https://github.com/opea-project/GenAIComps/commit/6ce6551)) + - Підтримка для інтерфейсу користувача MultimodalRAGWithVideos в GenAIExamples([7664578](https://github.com/opea-project/GenAIComps/commit/7664578)) + - Видалено виправлену версію у файлі requirements.txt([f416f84](https://github.com/opea-project/GenAIComps/commit/f416f84)) + - Оновлено README.md для зламаного/відсутнього readme([00227b8](https://github.com/opea-project/GenAIComps/commit/00227b8)) + - додано підтримку вбудовування моделей на основі CLIP для прикладу VideoRAGQnA у версії 0.9([2a53e25](https://github.com/opea-project/GenAIComps/commit/2a53e25)) + - такий самий PR, як у #694, але на головній гілці([4b5d85b](https://github.com/opea-project/GenAIComps/commit/4b5d85b)) + - doc: виправлено заголовки([f6ae4fa](https://github.com/opea-project/GenAIComps/commit/f6ae4fa)) + - Виправлено всі мікросервіси, на які вплинуло оновлення версії langchain([04385c9](https://github.com/opea-project/GenAIComps/commit/04385c9)) + - оновлено фіксація версії для файла requirements-runtime.txt([1e4c382](https://github.com/opea-project/GenAIComps/commit/1e4c382)) + - додано розділ для дописувачів до основного readme([2ba3516](https://github.com/opea-project/GenAIComps/commit/2ba3516)) + - Оновлено номер тестового порту для вбудовування svc([574fecf](https://github.com/opea-project/GenAIComps/commit/574fecf)) + - Включено GraphRAG з Neo4J([29fe569](https://github.com/opea-project/GenAIComps/commit/29fe569)) + - Покращено READMEs після reorg([7e40475](https://github.com/opea-project/GenAIComps/commit/7e40475)) + - Підтримка експорту megaservice yaml до файлу docker compose([cff0a4d](https://github.com/opea-project/GenAIComps/commit/cff0a4d)) + - Перейменовано videoragqna на videoqna для узгодження з іншими прикладами([2b68323](https://github.com/opea-project/GenAIComps/commit/2b68323)) + - Оновлено назви прикладу в MultimodalQnA і оновлено назви образів([2ca56f3](https://github.com/opea-project/GenAIComps/commit/2ca56f3)) + - Виправлено проблеми Reorg([a3da7c1](https://github.com/opea-project/GenAIComps/commit/a3da7c1)) + - Переміщено neuralspeed переранжування вбудовування і vllm-xft до каталогу([98c62a0](https://github.com/opea-project/GenAIComps/commit/98c62a0)) + - виправлено помилку генератора тексту ragagent([42cde68](https://github.com/opea-project/GenAIComps/commit/42cde68)) + - Додано мікросервіс Bias Detection([812c85c](https://github.com/opea-project/GenAIComps/commit/812c85c)) + - оновлено README.md для таблиці в markdown([849cac9](https://github.com/opea-project/GenAIComps/commit/849cac9)) + - оновлено версію залежності([4eee716](https://github.com/opea-project/GenAIComps/commit/4eee716)) + +- CI/CD/UT + - додано PREDICTIONGUARD_API_KEY для CI([94eb60f](https://github.com/opea-project/GenAIComps/commit/94eb60f)) + - оновлено тест CI досягнення логу([960f66c](https://github.com/opea-project/GenAIComps/commit/960f66c)) + - збільшено таймаут CI([6c24078](https://github.com/opea-project/GenAIComps/commit/6c24078)) + - покращено сканування зображень і публікація cd([341f97a](https://github.com/opea-project/GenAIComps/commit/341f97a)) + - додано відновлення доналаштування контрольної точки ut([c718602](https://github.com/opea-project/GenAIComps/commit/c718602)) + - Виправлення помилок([2a91903](https://github.com/opea-project/GenAIComps/commit/2a91903)) + - Оптимізовано вміст сповіщень([8a11413](https://github.com/opea-project/GenAIComps/commit/8a11413)) + - Додано файл компіляції ([7a21d09](https://github.com/opea-project/GenAIComps/commit/7a21d09)) + - Видалено дубльований код([8325d5d](https://github.com/opea-project/GenAIComps/commit/8325d5d)) + - Виправлено помилку зі створенням образу.([3ce387a](https://github.com/opea-project/GenAIComps/commit/3ce387a)) + - Виправлення помилок([12fd97a](https://github.com/opea-project/GenAIComps/commit/12fd97a)) + - покращено роботу з публікації зображень([9007212](https://github.com/opea-project/GenAIComps/commit/9007212)) + - Перевірка Dockerflie([2705e93](https://github.com/opea-project/GenAIComps/commit/2705e93)) + - Зроблено метод сканування необов'язковим([ae71eee](https://github.com/opea-project/GenAIComps/commit/ae71eee)) + - Модифіковано вихідні повідомлення([3e87c3b](https://github.com/opea-project/GenAIComps/commit/3e87c3b)) + - невелике виправлення для виявлення CI([1785149](https://github.com/opea-project/GenAIComps/commit/1785149)) + - Додано кейси OPEA з клієнтським доступом OpenAI до мікросервісу UT([1b69897](https://github.com/opea-project/GenAIComps/commit/1b69897)) + - Оптимізовано обсяг тесту CI([4165c7d](https://github.com/opea-project/GenAIComps/commit/4165c7d)) + - Виправлено CI yaml([3ac391a](https://github.com/opea-project/GenAIComps/commit/3ac391a)) + - Переміщено шлях до тестового скрипта fintuning([267fb02](https://github.com/opea-project/GenAIComps/commit/267fb02)) + - Додано тест E2E для виявлення зміщення захисних бар'єрів([e29865e](https://github.com/opea-project/GenAIComps/commit/e29865e)) + - Додано перевірку гіперпосилань і шляхів([ccdd2d0](https://github.com/opea-project/GenAIComps/commit/ccdd2d0)) + - Оновлено ручний тест([2794abd](https://github.com/opea-project/GenAIComps/commit/2794abd)) + - Оптимізовано перевірку файлів([61b8fa9](https://github.com/opea-project/GenAIComps/commit/61b8fa9)) + - Додано PREDICTIONGUARD_API_KEY для CI([94eb60f](https://github.com/opea-project/GenAIComps/commit/94eb60f)) + - Оновлено дії ci([b4a7f26](https://github.com/opea-project/GenAIComps/commit/b4a7f26)) + - оновлено складання збірки образів([3d00a33](https://github.com/opea-project/GenAIComps/commit/3d00a33)) + - Додавання контейнера для виявлення упередженості до CI([6617e22](https://github.com/opea-project/GenAIComps/commit/6617e22)) + - оновлено робочий процес cd([3c5fc80](https://github.com/opea-project/GenAIComps/commit/3c5fc80)) + - оновлення встановлення процесора torch([0458443](https://github.com/opea-project/GenAIComps/commit/0458443)) + - Виправлено помилку([887ca75](https://github.com/opea-project/GenAIComps/commit/887ca75)) + - тимчасово видалено перевірку докер-файлів([2d5130f](https://github.com/opea-project/GenAIComps/commit/2d5130f)) + - Виправлено помилки([2a91903](https://github.com/opea-project/GenAIComps/commit/2a91903)) + - додано відновлення налаштування контрольної точки ut([c718602](https://github.com/opea-project/GenAIComps/commit/c718602)) + - Оптимізовано вміст сповіщень([8a11413](https://github.com/opea-project/GenAIComps/commit/8a11413)) + +
+ +
GenAIEvals + +- Точність + - додано скріпти audioqna asr wer eval([cf8bd83](https://github.com/opea-project/GenAIEval/commit/cf8bd83)) + - оновлено документацію llm-as-judge([102fcdd](https://github.com/opea-project/GenAIEval/commit/102fcdd)) + - [v1.0] Додано підтримку метрики докерів([cff0a36](https://github.com/opea-project/GenAIEval/commit/cff0a36)) + - виправити проблему через зміну ragas([6abbe40](https://github.com/opea-project/GenAIEval/commit/6abbe40)) + - Додано README для тесту codegen acc([77bb66c](https://github.com/opea-project/GenAIEval/commit/77bb66c)) + - Оновлено ввод chatqna для виправлення довжини вводу([4f46a12](https://github.com/opea-project/GenAIEval/commit/4f46a12)) + - Підтримка bigcode eval для codegen v0.1([02b60b5](https://github.com/opea-project/GenAIEval/commit/02b60b5)) + - Додавання скриптів FaqGen Accuracy & Refine Ragas([4df6438](https://github.com/opea-project/GenAIEval/commit/4df6438)) + - оновлено rag_eval readme([425b423](https://github.com/opea-project/GenAIEval/commit/425b423)) + - виправлено версію з великим кодом, коли python>=3.11([1d3a502](https://github.com/opea-project/GenAIEval/commit/1d3a502)) + - додано скрипт налаштування аккаунта([a6fd418](https://github.com/opea-project/GenAIEval/commit/a6fd418)) + +- Продуктивність + - [ChatQnA] Підтримка налаштування реплік для ChatQnA([484b69a](https://github.com/opea-project/GenAIEval/commit/484b69a)) + - Виправлено скрипт переранжування бенчмарку([8edda1c](https://github.com/opea-project/GenAIEval/commit/8edda1c)) + - Список сервісів підтримки для збору метрик у benchmark.py([58502c5](https://github.com/opea-project/GenAIEval/commit/58502c5)) + - Підтримка файлу тесту для трубопроводу з/без переранжування([17d35e3](https://github.com/opea-project/GenAIEval/commit/17d35e3)) + - Оновлено конфігурацію в benchmark README([514a6d6](https://github.com/opea-project/GenAIEval/commit/514a6d6)) + - Підтримка P50, P90, P99 для затримки наступного токена([6ac555c](https://github.com/opea-project/GenAIEval/commit/6ac555c)) + - Підтримка бенчмарку рівня мікросервісу([626d269](https://github.com/opea-project/GenAIEval/commit/626d269)) + - Підтримка stresscli для генератора коду([907dc19](https://github.com/opea-project/GenAIEval/commit/907dc19)) + - Узгодження параметрів мікросервісу llm з наскрізним тестом([476a327](https://github.com/opea-project/GenAIEval/commit/476a327)) + - Виправлено проблему з еталонним рівнем мікросервісу([211b560](https://github.com/opea-project/GenAIEval/commit/211b560)) + - Додано частину с бечмарком в README([ac52f79](https://github.com/opea-project/GenAIEval/commit/ac52f79)) + - Додано бечмарк CRAG([a9b087f](https://github.com/opea-project/GenAIEval/commit/a9b087f)) + - [ChatQnA] Підтримка налаштування реплік для ChatQnA([484b69a](https://github.com/opea-project/GenAIEval/commit/484b69a)) + - додано файл для з/без переранжування([17d35e3](https://github.com/opea-project/GenAIEval/commit/17d35e3)) + - додано bench-target як префікс вихідної папки([3f0ceaf](https://github.com/opea-project/GenAIEval/commit/3f0ceaf)) + +- Інше + - doc: dbghfdktyj заголовки і відступи([65a0a5b](https://github.com/opea-project/GenAIEval/commit/65a0a5b)) + - doc: додано розділ README до нового FaqGen([52a540d](https://github.com/opea-project/GenAIEval/commit/52a540d)) + - додано власників кодів([047c479](https://github.com/opea-project/GenAIEval/commit/047c479)) + - doc: виправлено рівень заголовку([d5dbbf0](https://github.com/opea-project/GenAIEval/commit/d5dbbf0)) + - doc: віправлено приклад JSON([7318fb8](https://github.com/opea-project/GenAIEval/commit/7318fb8)) + - Оновлено власників кодів([4db9fb3](https://github.com/opea-project/GenAIEval/commit/4db9fb3)) + - doc: оновлено документ з оптимізації платформи([d982681](https://github.com/opea-project/GenAIEval/commit/d982681)) + - видалено приклади([340f507](https://github.com/opea-project/GenAIEval/commit/340f507)) + - Додано перевірку гіперпосилань і шляхів([df58fe5](https://github.com/opea-project/GenAIEval/commit/df58fe5)) + - Видалено непотрібний файл([0af532a](https://github.com/opea-project/GenAIEval/commit/0af532a)) + +
+ +
GenAIInfra + +- GMC + - GMC: Додано CR для перемикання режиму на одній графічній карті NV([02412e7](https://github.com/opea-project/GenAIInfra/commit/02412e7)) + - Оновлено GMC README відповідно до поточних змін.([6f7a24e](https://github.com/opea-project/GenAIInfra/commit/6f7a24e)) + - виправлено збої GMC в e2e ([5a2b306](https://github.com/opea-project/GenAIInfra/commit/5a2b306)) + - Додано модульний тест для нової функції в маршрутизаторі GMC([0343a2f](https://github.com/opea-project/GenAIInfra/commit/0343a2f)) + - GMC: додано UT для узгодження фільтрів([6442127](https://github.com/opea-project/GenAIInfra/commit/6442127)) + - Увімкнено процес збирання gmc на push([19fe1a2](https://github.com/opea-project/GenAIInfra/commit/19fe1a2)) + - Doc: Виправлено деякі опечатки для більш плавного запуску GMC([59000c5](https://github.com/opea-project/GenAIInfra/commit/59000c5)) + - Покращено продуктивність маршрутизатора GMC([68a2011](https://github.com/opea-project/GenAIInfra/commit/68a2011)) + - GMC: покращено лог([a18404e](https://github.com/opea-project/GenAIInfra/commit/a18404e)) + +- HelmChart + - e2e helm chart: Додано інтерфейс користувача для codegen/codetrans/docsum([267d828](https://github.com/opea-project/GenAIInfra/commit/267d828)) + - helm: Додано підтримку захисних бар'єрів llama_guard([8206a8c](https://github.com/opea-project/GenAIInfra/commit/8206a8c)) + - Увімкнено випадки захисних бар'єрів в тестах helm e2е([491c2e2](https://github.com/opea-project/GenAIInfra/commit/491c2e2)) + - helm chart: додано nginx, щоб уникнути проблеми з CORS([353f3a5](https://github.com/opea-project/GenAIInfra/commit/353f3a5)) + - helm-chart/common: Додавання конфігурації журналювання для сервісних компонентів([b80ae50](https://github.com/opea-project/GenAIInfra/commit/b80ae50)) + - helm-chart/data-prep: Додано відсутню конфігурацію для dataprep-redis([b70b914](https://github.com/opea-project/GenAIInfra/commit/b70b914)) + - helm: використано тег останнього зображення на головній гілці([65b04dc](https://github.com/opea-project/GenAIInfra/commit/65b04dc)) + - helm/manifest: Оновлено до релізу v0.9([182183e](https://github.com/opea-project/GenAIInfra/commit/182183e)) + - Додано підтримку topologySpreadConstraints([af9e1b6](https://github.com/opea-project/GenAIInfra/commit/af9e1b6)) + - Додано додаткові опції TGI([bf10bdd](https://github.com/opea-project/GenAIInfra/commit/bf10bdd)) + - Додати підтримку механізму виведення vLLM([0094f52](https://github.com/opea-project/GenAIInfra/commit/0094f52)) + - Видалено невикористані значення і змінено значення за замовчуванням GenAIExamples([26f9b16](https://github.com/opea-project/GenAIInfra/commit/26f9b16)) + - 'ghcr.io/huggingface/text-generation-inference:sha-e4201f4-intel-cpu' є процесором intel ([c84ac4c](https://github.com/opea-project/GenAIInfra/commit/c84ac4c)) + +- Документація + - додано власника коду([59ce505](https://github.com/opea-project/GenAIInfra/commit/59ce505)) + - doc: виправлено заголовки і відступи([c10bca1](https://github.com/opea-project/GenAIInfra/commit/c10bca1)) + - doc: виправлено заголовки, орфографію, міждокументні посилання([22d012e](https://github.com/opea-project/GenAIInfra/commit/22d012e)) + - doc: виправлено посилання на зображення([0a3e006](https://github.com/opea-project/GenAIInfra/commit/0a3e006)) + - Додано документи для всіх 3 варіантів використання прикладів ChatQnA і змінено моделі для випадку з перемикачем([987870f](https://github.com/opea-project/GenAIInfra/commit/987870f)) + - doc: реструктуровано каталог authN-authZ([b9bc034](https://github.com/opea-project/GenAIInfra/commit/b9bc034)) + - Оновлено README([9480afc](https://github.com/opea-project/GenAIInfra/commit/9480afc)) + - doc: виправлено помилки markdown([a339a87](https://github.com/opea-project/GenAIInfra/commit/a339a87)) + - Doc: виправлено непрацюючі посилання([032ddbc](https://github.com/opea-project/GenAIInfra/commit/032ddbc)) + - Покращено репозиторій використання helm chart в README([0de5535](https://github.com/opea-project/GenAIInfra/commit/0de5535)) + - Створено troubleshooting.md([d55ded4](https://github.com/opea-project/GenAIInfra/commit/d55ded4)) + +- Інші + - Виправлено помилку CI #417([56d7d5d](https://github.com/opea-project/GenAIInfra/commit/56d7d5d)) + - вимкнено тест hpa-значень в chart e2e в CI([9b38302](https://github.com/opea-project/GenAIInfra/commit/9b38302)) + - Додано модульний тест для експортера пропускної здатності пам'яті([43adcc6](https://github.com/opea-project/GenAIInfra/commit/43adcc6)) + - Увімкнено модульний тест для експортера пропускної здатності пам'яті у CI([923c1f3](https://github.com/opea-project/GenAIInfra/commit/923c1f3)) + - додано спостережуваність для OPEA([8d304ac](https://github.com/opea-project/GenAIInfra/commit/8d304ac)) + - виправлено поганий коміт в #383([406bbc2](https://github.com/opea-project/GenAIInfra/commit/406bbc2)) + - Додано dataprep CR для платформи NV([fa9788d](https://github.com/opea-project/GenAIInfra/commit/fa9788d)) + - Додано експортер пропускної здатності пам'яті для навантаження ШІ([9107af9](https://github.com/opea-project/GenAIInfra/commit/9107af9)) + - authN-authZ: оновлено конфігурацію([0f5cef1](https://github.com/opea-project/GenAIInfra/commit/0f5cef1)) + - E2E: виключити завершення роботи подів, коли wait_util_all_pod_ready([39fb55e](https://github.com/opea-project/GenAIInfra/commit/39fb55e)) + - Додано захісні бар'єри шлюзу([b22fc52](https://github.com/opea-project/GenAIInfra/commit/b22fc52)) + - Виправлено #314([f9204f0](https://github.com/opea-project/GenAIInfra/commit/f9204f0)) + - v0.9 реліз charts([b2328b8](https://github.com/opea-project/GenAIInfra/commit/b2328b8)) + - Реструктуризрвано каталог зразка конфігурації та оновлено тест e2e([326a637](https://github.com/opea-project/GenAIInfra/commit/326a637)) + - Покращено ut([96cd929](https://github.com/opea-project/GenAIInfra/commit/96cd929)) + - поліпшено робочі процеси cd і додано релізний документ([a4398b0](https://github.com/opea-project/GenAIInfra/commit/a4398b0)) + - Додано підтримку HPA до ChatQnA([cab7a88](https://github.com/opea-project/GenAIInfra/commit/cab7a88)) + - Додано декількадокументів підтримки і скриптів платформиe NVIDIA([cad2fc3](https://github.com/opea-project/GenAIInfra/commit/cad2fc3)) + - Розкрито параметри експортера пропускної здатності пам'яті у маніфестах k8s і докері для конфігурування користувачем([2517e79](https://github.com/opea-project/GenAIInfra/commit/2517e79)) + - Оновлено версію образу для прикладів ChatQnA([593458c](https://github.com/opea-project/GenAIInfra/commit/593458c)) + - Оновлено верхній рівень README([b224b65](https://github.com/opea-project/GenAIInfra/commit/b224b65)) + - Увімкнено автентифікацію на основі OIDC в apisix([ee907d6](https://github.com/opea-project/GenAIInfra/commit/ee907d6)) + - Вдосконалення HPA([8d86fff](https://github.com/opea-project/GenAIInfra/commit/8d86fff)) + - authn-authz: виправлено проблему з CORS та доопрацьовано документ([994250c](https://github.com/opea-project/GenAIInfra/commit/994250c)) + - Додано перевірку гіперпосилань і шляхів([d8cd3a1](https://github.com/opea-project/GenAIInfra/commit/d8cd3a1)) + +
diff --git a/docs-ua/roadmap/2024-2025.md b/docs-ua/roadmap/2024-2025.md new file mode 100644 index 00000000..a64dcc01 --- /dev/null +++ b/docs-ua/roadmap/2024-2025.md @@ -0,0 +1,252 @@ +# Дорожна карта OPEA 2024 - 2025 + +## Травень 2024 + +### Внесок + +- **Компоненти** + - ASR + - Data Prep + - Embedding + - Guardrails + - LLM (Gaudi TGI) + - Rerank + - Retrieval + - TTS + - VectorDB + +- **Кейси використання/Приклади** + - ChatQnA + - CodeGen + - CodeTrans + +- **Місцева хмара** + - OneClick OPEA on ChatQnA + - OneClick OPEA on CodeGen + - GenAI microservice connector + +- **Оцінка та інше** + - CICD & Validation + - Eval: E2E (GenAIComps & GenAIExamples), lm-eval-harness, bigcode-eval-harness + - RAGAS evaluation service + +### Моделі ШІ + +- LLM: llama2 (7b, 13b, 70b), llama3 (8b, 70b), code-llama, Llama guard +- Embedding: BGE-base + +### Інтеграція інструментів ШІ + +- VectorDB: Chroma +- Framework: Langchain + +### Тип розгортання + +- На Prem,IDC (Xeon, Gaudi) + +## Червень 2024 + +### Внесок + +- **Компоненти** + - LLM (Xeon vLLM & Ray, Ollama) + - OVMS + - prompting + - user feedback management + - Mega Component (MI6 RAG service) + +- **Кейси використання/Приклади** + - DocSum + - SearchQnA + +- **Місцева хмара** + - OneClick OPEA for 2 more examples + - GMC with switch support (dynamic pipelines) + - Helm charts/templates for custom yamls (refactoring) + +- **Оцінка та інше** + - CICD & Validation + - Eval: E2E (GenAIComps & GenAIExamples) Gaudi (2) and CPUs in CICD cluster + +### Моделі ШІ + +- LLM: mistral-7B, mixtral-8x7B +- Embedding: E5-mistral-7b-instruct, all-mpnet-base-v2 + +### Інтеграція інструментів ШІ + +- VectorDB: Pinecone, Redis +- Framework: Llamaindex, Haystack + +### Тип розгортання + +- На Prem,IDC (Xeon, Gaudi) + +## Липень 2024 + +### Внесок + +- **Компоненти** + - LVM (Gaudi vLLM & Ray) + - vectordb (svs) + - Gateway guardrail, Auth Z/N + +- **Кейси використання/Приклади** + - FAQGen + +- **Місцева хмара** + - OpenShift enablement for OPEA + - OneClick OPEA for 3 more examples + - Security (Service Mesh, guardrails) + +- **Оцінка та інше** + - CICD & Validation + - Eval: E2E (GenAIComps & GenAIExamples) + +### Моделі ШІ + +- LLM: Phi, Gemma +- Embedding: all-MiniLM-L6-v2, paraphrase-albert-small-v2 + +### Інтеграція інструментів ШІ + +- VectorDB: PGVector, Qdrant + +### Тип розгортання + +## Серпень 2024 + +### Внесок + +- **Компоненти** + - Документація + - Скрипт автоматизації тестування + - Телеметрія + +- **Кейси використання/Приклади** + - Документація + - Скрипт автоматизації тестування + +- **Місцева хмара** + - Demo K8s resource management + - Documentation on autoscaler analysis + +- **Оцінка та інше** + - CICD & Validation + - Eval: E2E (GenAIComps & GenAIExamples) + +### Моделі ШІ + +- Vision: llava +- Mixtral-8x22B + +### Інтеграція інструментів ШІ + +- VectorDB: Milvus + +### Тип розгортання + +- Public Cloud AWS (Xeon CPU & NV GPU) + +## Вересень 2024 + +### Внесок + +- **Components** + - Мікросервіси для зображень і відео + +- **Кейси використання/Приклади** + - Перетворення тексту на зображення + - Перетворення зображень у відео + - Ігровий майданчик (що компонується і конфігурується) + +- **Місцева хмара** + +- **Оцінка та інше** + - CICD & Validation + - Eval: E2E (GenAIComps & GenAIExamples) + +### Моделі ШІ + +- Diffusion model: + - Stable Diffusion XL + - Stable Diffusion 3M + - Stable Video Diffusion + +### Інтеграція інструментів ШІ + +- VectorDB: Weaviate + +### Тип розгортання + +## IV квартал 2024 + +### Внесок + +- **Компоненти** + - Fine-tuning E2E pipeline + - Knowledge Graph + +- **Кейси використання/Приклади** + - Fine-tuning (Lora) + - AI Agent (single Agent with text and Audio as user interface) + - Closed source LLM + - GraphRAG + +- **Місцева хмара** + - Static tuning on Resource management for deployment + +- **Оцінка та інше** + - CICD & Validation + - Eval: E2E (GenAIComps & GenAIExamples) + +### Моделі ШІ + +- LLM open: Grok 1 +- LLM Close: GPT3.5/4/4o, Claude 3/3.5 +- AWS Bedrock endpoint + +### Інтеграція інструментів ШІ + +- Knowledge graph: Neo4j +- Agent: LangGraph + +### Тип розгортання + +- Публічна Хмара (Azure, GCP, Oracle, AWS) +- AI PC (Intel) + +## І квартал 2025 + +### Внесок + +- **Компоненти** + - більше запитів на мікросервіс від спільноти + - Конфіденційний контейнер + +- **Кейси використання/Приклади** + - AI Agent (Multi Agent) + - Fine-tuning (Adpative) + - Long context window (>1M) + - GenAI Studio + +- **Місцева хмара** + - Динамічне налаштування управління ресурсами за допомогою K8s + +- **Оцінка та інше** + - CICD & Validation + - Eval: E2E (GenAIComps & GenAIExamples) + +### Моделі ШІ + +- LLM: SetFit +- Більше буде визначено пізніше + +### Інтеграція інструментів ШІ + +- AutoGen, CrewAI + +### Тип розгортання + +- Публічна Хмара (tier2 CSP) +- AI PC (інші) diff --git a/docs-ua/roadmap/CICD.md b/docs-ua/roadmap/CICD.md new file mode 100644 index 00000000..47fcc1ff --- /dev/null +++ b/docs-ua/roadmap/CICD.md @@ -0,0 +1,29 @@ +# Дорожна карта OPEA CI/CD + +## Milestone 1 (Травень, Зроблено) +- Format scan for GenAIExamples/GenAIComps/GenAIInfra/GenAIEval +- Security scan for GenAIExamples/GenAIComps/GenAIInfra/GenAIEval +- Unit test for GenAIComps/GenAIInfra/GenAIEval +- E2E test for GenAIExamples/GenAIComps/GenAIInfra milestone1 related scope + +## Milestone 2 (Червень) +- CI infrastructure optimization +- k8s multi-node cluster on 2 Xeon node for CI +- k8s multi-node cluster on 2 Gaudi node for CI +- Set up image repository for CI +- UT coverage measurement +- Cross-projects impact monitor +- E2E test for GenAIExamples/GenAIComps/GenAIInfra milestone2 related scope +- RAG benchmark with GenAIEval + +## Milestone 3 (Липень) +- Enhance code coverage +- E2E test for GenAIExamples/GenAIComps/GenAIInfra milestone3 related scope +- GMC test for k8s +- k8s scalability test + +## Milestone 4 (Серпень) +- Enhance code coverage +- E2E test for GenAIExamples/GenAIComps/GenAIInfra milestone4 related scope +- Enhance k8s scalability test +- Auto CD workflow setup diff --git a/docs-ua/scripts/checkmd.sh b/docs-ua/scripts/checkmd.sh new file mode 100755 index 00000000..63aeb264 --- /dev/null +++ b/docs-ua/scripts/checkmd.sh @@ -0,0 +1,14 @@ +#!/bin/bash +# Copyright (C) 2024 Intel Corporation. +# SPDX-License-Identifier: Apache-2.0 + +# Use pymarkdown to recursively scan all markdown files for problems +# Disable rules we don't care to check. If you find others that you'd like to +# ignore, simply add them to this list + +drules=line-length,no-bare-urls,no-multiple-blanks,blanks-around-fences,no-hard-tabs,blanks-around-headings +drules=$drules,fenced-code-language,no-duplicate-heading,no-emphasis-as-heading,no-trailing-spaces +drules=$drules,code-block-style + +pymarkdown --disable-rules $drules scan -r . + diff --git a/docs-ua/scripts/codeowners_to_md.py b/docs-ua/scripts/codeowners_to_md.py new file mode 100755 index 00000000..8c681cff --- /dev/null +++ b/docs-ua/scripts/codeowners_to_md.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2024, Intel Corporation +# SPDX-License-Identifier: Apache-2.0 +# +# Convert CODEOWNERS files provided as command line arguments into markdown with +# H2 heading titles followed by a table with path and owners + +import sys + +def parse_codeowners(file_path): + codeowners = [] + + with open(file_path, 'r') as file: + for line in file: + line = line.strip() + # Skip comments and empty lines + if not line or line.startswith('#'): + continue + + parts = line.split() + if len(parts) >= 2: + path = parts[0] + owners = ', '.join(parts[1:]) + codeowners.append((path, owners)) + + return codeowners + + +def convert_to_markdown_table(codeowners, file_name): + # ./.github/CODEOWNERS ./GenAIComps/.github/CODEOWNERS ./GenAIExamples/.github/CODEOWNERS + parts = file_name.split('/') + # if the repo name is missing, it's the docs repo. Also handle case when + # CODEOWNERS is in the root of the docs repo instead of in a .github directory. + repo=parts[1] + if (repo == '.github'): + repo="docs" + elif (repo == "CODEOWNERS"): + repo="docs" + + table = f"\n## {repo} Repository Code Owners\n\n" + table += "| Path | Owners |\n" + table += "|------|--------|\n" + + for path, owners in codeowners: + table += f"| `{path}` | {owners} |\n" + + return table + + +def main(): + if len(sys.argv) < 2: + print("Usage: python codeowners_to_md.py ...") + sys.exit(1) + + markdown_output = "" + + for file_path in sys.argv[1:]: + try: + codeowners = parse_codeowners(file_path) + markdown_table = convert_to_markdown_table(codeowners, file_path) + markdown_output += markdown_table + "\n" + except FileNotFoundError: + print(f"Error: File '{file_path}' not found.") + sys.exit(1) + + print(markdown_output) + + +if __name__ == "__main__": + main() + diff --git a/docs-ua/scripts/filter-doc-log.sh b/docs-ua/scripts/filter-doc-log.sh new file mode 100755 index 00000000..61f2417c --- /dev/null +++ b/docs-ua/scripts/filter-doc-log.sh @@ -0,0 +1,53 @@ +#!/bin/bash +# Copyright (C) 2019-2024 Intel Corporation. +# SPDX-License-Identifier: Apache-2.0 + +# run the filter-known-issues.py script to remove "expected" warning +# messages from the output of the document build process and write +# the filtered output to stdout +# +# Only argument is the name of the log file saved by the build. + +KI_SCRIPT=scripts/filter-known-issues.py +CONFIG_DIR=.known-issues/doc + +LOG_FILE=$1 +BUILDDIR=$(dirname $LOG_FILE) + +if [ -z "${LOG_FILE}" ]; then + echo "Error in $0: missing input parameter " + exit 1 +fi + +# When running in background, detached from terminal jobs, tput will +# fail; we usually can tell because there is no TERM env variable. +if [ -z "${TERM:-}" -o "${TERM:-}" = dumb ]; then + TPUT="true" + red='' + green='' +else + TPUT="tput" + red='\E[31m' + green='\e[32m' +fi + +if [ -s "${LOG_FILE}" ]; then + $KI_SCRIPT --config-dir ${CONFIG_DIR} ${LOG_FILE} > ${BUILDDIR}/doc.warnings 2>&1 + if [ -s ${BUILDDIR}/doc.warnings ]; then + echo + echo -e "${red}New errors/warnings found, please fix them:" + echo -e "==============================================" + $TPUT sgr0 + echo + cat ${BUILDDIR}/doc.warnings + echo + exit 1 + else + echo -e "${green}No new errors/warnings." + $TPUT sgr0 + fi + +else + echo "Error in $0: logfile \"${LOG_FILE}\" not found." + exit 1 +fi diff --git a/docs-ua/scripts/filter-known-issues.py b/docs-ua/scripts/filter-known-issues.py new file mode 100755 index 00000000..79f56fd1 --- /dev/null +++ b/docs-ua/scripts/filter-known-issues.py @@ -0,0 +1,255 @@ +#! /usr/bin/env python3 +# Copyright (c) 2017-2024, Intel Corporation +# SPDX-License-Identifier: Apache-2.0 +""" +Filters a file, classifying output in errors, warnings and discarding +the rest. + +Given a set of regular expresions read from files named *.conf in the +given configuration path(s), of the format: + + # + # Comments for multiline regex 1... + # + MULTILINEPYTHONREGEX + MULTILINEPYTHONREGEX + MULTILINEPYTHONREGEX + # + # Comments for multiline regex 2... + # + #WARNING + MULTILINEPYTHONREGEX2 + MULTILINEPYTHONREGEX2 + +Anything matched by MULTILINEPYTHONREGEX will be considered something +to be filtered out and not printed. + +Anything matched by MULTILINEPYHONREGEX with a #WARNING tag in the +comment means (optional) means that it describes something that is +considered to be a warning. Print it to stderr. + +Anything leftover is considred to be errors, printed to stdout. + +""" +import argparse +import logging +import mmap +import os +import re +import sys +import traceback + +exclude_regexs = [] + +# first is a list of one or more comment lines +# followed by a list of non-comments which describe a multiline regex +config_regex = \ + b"(?P(^\s*#.*\n)+)" \ + b"(?P(^[^#].*\n)+)" + + +def config_import_file(filename): + """ + Imports regular expresions from any file *.conf in the given path, + format as given in the main doc + """ + try: + with open(filename, "rb") as f: + mm = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ) + # That regex basically selects any block of + # lines that is not a comment block. The + # finditer() finds all the blocks and selects + # the bits of mmapped-file that comprises + # each--we compile it into a regex and append. + for m in re.finditer(config_regex, mm, re.MULTILINE): + origin = "%s:%s-%s" % (filename, m.start(), m.end()) + gd = m.groupdict() + comment = gd['comment'] + regex = gd['regex'] + try: + r = re.compile(regex, re.MULTILINE) + except re.error as e: + logging.error("%s: bytes %d-%d: bad regex: %s", + filename, m.start(), m.end(), e) + raise + logging.debug("%s: found regex at bytes %d-%d: %s", + filename, m.start(), m.end(), regex) + if b'#WARNING' in comment: + exclude_regexs.append((r, origin, ('warning',))) + else: + exclude_regexs.append((r, origin, ())) + logging.debug("%s: loaded", filename) + except Exception as e: + logging.error("E: %s: can't load config file: %s" % (filename, e)) + raise + + +def config_import_path(path): + """ + Imports regular expresions from any file *.conf in the given path + """ + file_regex = re.compile(".*\.conf$") + try: + for dirpath, dirnames, filenames in os.walk(path): + for _filename in sorted(filenames): + filename = os.path.join(dirpath, _filename) + if not file_regex.search(_filename): + logging.debug("%s: ignored", filename) + continue + config_import_file(filename) + except Exception as e: + raise Exception( + "E: %s: can't load config files: %s %s" % + (path, e, traceback.format_exc())) + + +def config_import(paths): + """ + Imports regular expresions from any file *.conf in the list of paths. + + If a path is "" or None, the list of paths until then is flushed + and only the new ones are considered. + """ + _paths = [] + # Go over the list, flush it if the user gave an empty path ("") + for path in paths: + if path == "" or path is None: + logging.debug("flushing current config list: %s", _paths) + _paths = [] + else: + _paths.append(path) + logging.debug("config list: %s", _paths) + for path in _paths: + config_import_path(path) + + +arg_parser = argparse.ArgumentParser( + description=__doc__, + formatter_class=argparse.RawDescriptionHelpFormatter) +arg_parser.add_argument("-v", "--verbosity", action="count", default=0, + help="increase verbosity") +arg_parser.add_argument("-q", "--quiet", action="count", default=0, + help="decrease verbosity") +arg_parser.add_argument("-e", "--errors", action="store", default=None, + help="file where to store errors") +arg_parser.add_argument("-w", "--warnings", action="store", default=None, + help="file where to store warnings") +arg_parser.add_argument("-c", "--config-dir", action="append", nargs="?", + default=[".known-issues/"], + help="configuration directory (multiple can be " + "given; if none given, clears the current list) " + "%(default)s") +arg_parser.add_argument("FILENAMEs", nargs="+", + help="files to filter") +args = arg_parser.parse_args() + +logging.basicConfig(level=40 - 10 * (args.verbosity - args.quiet), + format="%(levelname)s: %(message)s") + +path = ".known-issues/" +logging.debug("Reading configuration from directory `%s`", path) +config_import(args.config_dir) + +exclude_ranges = [] + +if args.warnings: + warnings = open(args.warnings, "w") +else: + warnings = None +if args.errors: + errors = open(args.errors, "w") +else: + errors = None + + +def report_error(data): + sys.stdout.write(data) + if errors: + errors.write(data) + + +def report_warning(data): + sys.stderr.write(data) + if warnings: + warnings.write(data) + + +if args.warnings: + warnings = open(args.warnings, "w") +else: + warnings = None +if args.errors: + errors = open(args.errors, "w") +else: + errors = None + + +def report_error(data): + sys.stdout.write(data.decode('utf-8')) + if errors: + errors.write(data) + + +def report_warning(data): + sys.stderr.write(data) + if warnings: + warnings.write(data) + + +for filename in args.FILENAMEs: + if os.stat(filename).st_size == 0: + continue # skip empty log files + try: + with open(filename, "r+b") as f: + logging.info("%s: filtering", filename) + # Yeah, this should be more protected in case of exception + # and such, but this is a short running program... + mm = mmap.mmap(f.fileno(), 0) + for ex, origin, flags in exclude_regexs: + logging.info("%s: searching from %s: %s", + filename, origin, ex.pattern) + for m in re.finditer(ex.pattern, mm, re.MULTILINE): + logging.info("%s: %s-%s: match from from %s %s", + filename, m.start(), m.end(), origin, flags) + if 'warning' in flags: + exclude_ranges.append((m.start(), m.end(), True)) + else: + exclude_ranges.append((m.start(), m.end(), False)) + + exclude_ranges = sorted(exclude_ranges, key=lambda r: r[0]) + logging.warning( + "%s: ranges excluded: %s", + filename, + exclude_ranges) + + # Decide what to do with what has been filtered; warnings + # go to stderr and warnings file, errors to stdout, what + # is ignored is just dumped. + offset = 0 + for b, e, warning in exclude_ranges: + mm.seek(offset) + if b > offset: + # We have something not caught by a filter, an error + logging.info("%s: error range (%d, %d), from %d %dB", + filename, offset, b, offset, b - offset) + report_error(mm.read(b - offset)) + mm.seek(b) + if warning == True: # A warning, print it + mm.seek(b) + logging.info("%s: warning range (%d, %d), from %d %dB", + filename, b, e, offset, e - b) + report_warning(mm.read(e - b)) + else: # Exclude, ignore it + d = b - offset + logging.info("%s: exclude range (%d, %d), from %d %dB", + filename, b, e, offset, d) + offset = e + mm.seek(offset) + if len(mm) != offset: + logging.info("%s: error final range from %d %dB", + filename, offset, len(mm)) + report_error(mm.read(len(mm) - offset - 1)) + del mm + except Exception as e: + logging.error("%s: cannot load: %s", filename, e) + raise diff --git a/docs-ua/scripts/fix-github-md-refs.sh b/docs-ua/scripts/fix-github-md-refs.sh new file mode 100755 index 00000000..5e8cd963 --- /dev/null +++ b/docs-ua/scripts/fix-github-md-refs.sh @@ -0,0 +1,49 @@ +#!/bin/bash +# Copyright (C) 2024 Intel Corporation. +# SPDX-License-Identifier: Apache-2.0 + +# We'll post process the markdown files copied to the _build/rst folder to look +# for hard references to the github.com markdown file, for example +# (https://github.com/opea-project/.../blob/.../README.md) and make them +# relative to the _build/rst directory structure where docs are being built + +# Work on the current directory or the directory passed as the first argument +# (as done in the makefile). Normally is _build/rst + +cd ${1:-.} + +# look for markdown files containing a hard github.com/opea-project/... +# reference to a markdown file + +mdfiles=`grep -ril --include="*.md" 'github.com/opea-project.*\/[^\)]*'` + +# fix references to opea-project/tree/main/.../*.md or blob/.../*.md to be to the repo name and +# subsequent path to the md file \1 is repo \3 is file path \4 is an optional #xxx target + +#sed -i 's/(https:\/\/github.com\/opea-project\/\([^\/]*\)\/\(blob\|tree\)\/main\/\([^)]*\.md\)/(\/\1\/\3/g' $mdfiles +#sed -i 's/(https:\/\/github.com\/opea-project\/\([^\/]*\)\/\(blob\|tree\)\/main\/\([^#)]*\)\(#[^)]*\)*)/(\/\1\/\3\/README.md\4)/g' $mdfiles +sed -i 's/(https:\/\/github.com\/opea-project\/\([^\/]*\)\/\(blob\|tree\)\/main\/\([^#)]*\.md\)\(#[^)]*\)*)/(\/\1\/\3\4)/g' $mdfiles + +# After that, inks to the docs repo such as [blah](docs/...) should have the repo name removed since docs repo is the build root + +sed -i 's/](\/docs\//](\//g' $mdfiles + +# links to a folder should instead be to the folder's README.md +# Not automating this for now since there are valid folder references +# sed -i 's/\(\/[a-zA-z]*\))/\1\/README.md)/g' $files + +# fix tagging on code blocks, for myst parser (vs. GFM syntax) +# with myst_fence_as_directive = ["mermaid"] we don't need to do this any mre +# sed -i 's/^```mermaid/```{mermaid}/' `grep -ril --include="*.md" '\`\`\`mermaid'` + +# fix references to opea-project/blob/main/... to use the special role # :{repo}_raw:`{path to file}` +# alas, using sphinx roles doesn't work in markdown files, so leave them alone +# mdfiles=`grep -ril --include="*.md" '(https:\/\/github.com\/opea-project\/[^\/]*\/blob\/main\/[^\)]*)'` +# sed -i # 's/(https:\/\/github.com\/opea-project\/\([^\/]*\)\/blob\/main\/\([^)]*\)/(:\1_blob:`\2`/g' $mdfiles + +# find CODEOWNERS files and generate a rst table for each one found. This file +# will is included by the codeowners.md file during the doc build so we keep +# these lists up-to-date. + +cfiles=`find -name CODEOWNERS | sort` +scripts/codeowners_to_md.py $cfiles > community/codeowners.txt diff --git a/docs-ua/scripts/maketoc.sh b/docs-ua/scripts/maketoc.sh new file mode 100755 index 00000000..a2a80e42 --- /dev/null +++ b/docs-ua/scripts/maketoc.sh @@ -0,0 +1,62 @@ +#!/bin/bash +# Copyright (C) 2024 Intel Corporation. +# SPDX-License-Identifier: Apache-2.0 + +# For all directories, create a H2 title with the directory name and a +# .toctree directive with the repo name and +# those directory names, something like this: +# +# AudioQnA Application +# ******************** +# +# .. toctree:: +# :maxdepth: 1 +# :glob: +# +# /GenAIExamples/AudioQnA/* +# /GenAIExamples/AudioQnA/**/* +# +# ls -d1 */ returns something like this: +# +# AgentQnA/ +# AudioQnA/ +# ChatQnA/ +# CodeGen/ +# CodeTrans/ +# DocIndexRetriever/ +# +# +# Create a title based on the directory name and print it. +# Use a gsub to turn every character in the title into an * for the +# heading underline and print it. + +cd ../GenAIExamples + +ls -d1 */ | \ + awk \ + -v repo="GenAIExamples" \ + -e '{dirname=substr($0,1,length($0)-1); if (dirname==repo) {\ + print("\n.. comment maketoc: ignoring " dirname " directory\n\n"); next}\ + title=dirname " Application"; \ + print title;gsub(/./,"*",title); print title; \ + print "\n.. rst-class:: rst-columns\n\n.. toctree::\n :maxdepth: 1\n :glob:\n\n /" \ + repo "/" dirname "/*\n /" \ + repo "/" dirname "/**/*\n";}' > ../docs/_build/rst/examples/examples.txt + +# +# The components directory names in GenAIComps/comps are all lowercase, so uppercase +# just the first character for the title. +# + +cd ../GenAIComps/comps + +ls -d1 [a-zA-Z]*/ | \ + awk \ + -v repo="GenAIComps" \ + -e '{dirname=substr($0,1,length($0)-1); title=toupper(substr(dirname,1,1)) substr(dirname,2) " Microservice"; \ + print title;gsub(/./,"*",title); print title; \ + print "\n.. rst-class:: rst-columns\n\n.. toctree::\n :maxdepth: 1\n :glob:\n\n /" \ + repo "/comps/" dirname "/*\n /" \ + repo "/comps/" dirname "/**/*\n";}' > ../../docs/_build/rst/microservices/microservices.txt + + diff --git a/docs-ua/scripts/publish-README.md b/docs-ua/scripts/publish-README.md new file mode 100644 index 00000000..e41aeae7 --- /dev/null +++ b/docs-ua/scripts/publish-README.md @@ -0,0 +1,10 @@ +# opea-project.github.io + +Це сайт для публікації документації проекту OPEA на GitHub Pages. +Зміни вмісту не вносяться безпосередньо в цей репозиторій. Замість цього відредагуйте вміст у +opea-project/docs та інших репозиторіях, перегенеруйте HTML за допомогою Sphinx (make +html), і з відповідними правами доступу перемістіть оновлений вміст сюди для +публікації (make publish). + +Ознайомтеся з опублікованою документацією на +[https://opea-project.github.io](https://opea-project.github.io). diff --git a/docs-ua/scripts/publish-redirect.sh b/docs-ua/scripts/publish-redirect.sh new file mode 100755 index 00000000..cad44285 --- /dev/null +++ b/docs-ua/scripts/publish-redirect.sh @@ -0,0 +1,28 @@ +#!/bin/bash +# Copyright (C) 2021 Intel Corporation. +# SPDX-License-Identifier: BSD-3-Clause + +# Create top-level website redirect to a doc (conf.py redirect script can only +# create redirects within the published folder output, e.g. latest/ or 2.6/) +# +# publish-redirect docname.html destpath/docname.html + +if [[ $# -ne 2 ]]; then + echo "Error: $0 expects two parameters: docname.html destpath/docname.html" >&2 + exit 1 +fi + +cat>"$1"< + + OPEA Project documentation Redirect + + + + +

Please visit the latest OPEA Project documentation

+ + +EOF diff --git a/docs-ua/scripts/publish-robots.txt b/docs-ua/scripts/publish-robots.txt new file mode 100644 index 00000000..c2a49f4f --- /dev/null +++ b/docs-ua/scripts/publish-robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Allow: / diff --git a/docs-ua/scripts/requirements.txt b/docs-ua/scripts/requirements.txt new file mode 100644 index 00000000..a186dff4 --- /dev/null +++ b/docs-ua/scripts/requirements.txt @@ -0,0 +1,8 @@ +sphinx==7.3 +docutils==0.20 +sphinx_rtd_theme==2.0 +sphinx-tabs==3.4.5 +myst-parser>=3.0 +sphinx-md==0.0.3 +sphinxcontrib-mermaid +pymarkdownlnt diff --git a/docs-ua/scripts/rsync-include.txt b/docs-ua/scripts/rsync-include.txt new file mode 100644 index 00000000..cc362447 --- /dev/null +++ b/docs-ua/scripts/rsync-include.txt @@ -0,0 +1,10 @@ +*.jpg +*.png +*.gif +*.svg +*.rst +*.md +*.rst +*.txt +CODEOWNERS +LICENSE diff --git a/docs-ua/scripts/show-versions.py b/docs-ua/scripts/show-versions.py new file mode 100755 index 00000000..714f7087 --- /dev/null +++ b/docs-ua/scripts/show-versions.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2018-2024, Intel Corporation +# SPDX-License-Identifier: Apache-2.0 +# +# Show installed versions of doc building tools (per requirements.txt) + +import os.path +import sys +import pkg_resources +import subprocess + +class color: + PURPLE = '\033[95m' + CYAN = '\033[96m' + DARKCYAN = '\033[36m' + BLUE = '\033[94m' + GREEN = '\033[92m' + YELLOW = '\033[93m' + RED = '\033[91m' + BOLD = '\033[1m' + UNDERLINE = '\033[4m' + END = '\033[0m' + +# Check all requirements listed in requirements.txt and print out version # installed (if any) +reqfile = os.path.join(sys.path[0], "requirements.txt") +print ("doc build tool versions found on your system per " + reqfile + "...\n") + +rf = open(reqfile, "r") + +for reqs in pkg_resources.parse_requirements(rf): + try: + ver = pkg_resources.get_distribution(reqs.project_name).version + print (" " + reqs.project_name.ljust(25," ") + " version: " + ver) + if not reqs.__contains__(ver): + print (color.RED + color.BOLD + " >>> Warning: Expected version " + + reqs.__str__() + " Python module from scripts/requirements.text." + color.END) + except: + print (color.RED + color.BOLD + reqs.project_name + " is missing." + color.END + + " (Hint: install all dependencies with " + color.YELLOW + + "\"pip3 install --user -r scripts/requirements.txt\"" + color.END + ")") + +rf.close() + +# Print out the version of relevent packages not installed via pip +# print (" " + "doxygen".ljust(25," ") + " version: " + subprocess.check_output(["doxygen", "-v"]).decode("utf-8")) diff --git a/docs-ua/scripts/test/test.md b/docs-ua/scripts/test/test.md new file mode 100644 index 00000000..d822a9e3 --- /dev/null +++ b/docs-ua/scripts/test/test.md @@ -0,0 +1,34 @@ +# Тестовий файл розмітки з перехресними посиланнями + +Ця папка містить колекцію маніфест файлів Kubernetes для розгортання сервісу ChatQnA на масштабованих вузлах. Вона включає комплексний [інструмент для бенчмаркінгу] (/GenAIEval/evals/benchmark/README.md), який дозволяє проводити аналіз пропускної здатності для оцінки продуктивності виводу. + +Ми створили [BKC маніфест](https://github.com/opea-project/GenAIExamples/tree/main/ChatQnA/benchmark) для одновузлового, двовузлового і чотиривузлового кластерів K8s. Для того, щоб застосувати, нам потрібно перевірити і налаштувати деякі значення. + +Для тестування продуктивності використовується [інструмент бенчмарку](https://github.com/opea-project/GenAIEval/tree/main/evals/benchmark). Нам потрібно встановити інструмент бенчмарку на головному вузлі Kubernetes, яким є k8s-master. + +У цьому документі описано процес розгортання програми CodeGen з використанням трубопроводу мікросервісів [GenAIComps](https://github.com/opea-project/GenAIComps.git) на сервері Intel Gaudi2. Кроки включають створення образів Docker, розгортання контейнера за допомогою Docker Compose і виконання сервісів для інтеграції мікросервісів, таких як `llm`. Незабаром ми опублікуємо образи Docker на Docker Hub, що ще більше спростить процес розгортання цього сервісу. + +Встановіть GMC у кластері Kubernetes, якщо ви цього ще не зробили, виконавши кроки з розділу «Початок роботи» на сторінці [Встановлення GMC](https://github.com/opea-project/GenAIInfra/tree/main/microservices-connector#readme). Незабаром ми опублікуємо образи на Docker Hub, після чого збірки не знадобляться, що ще більше спростить встановлення. + +Якщо ви отримуєте помилки на кшталт «Доступ заборонено», спочатку [перевірте мікросервіс](https://github.com/opea-project/GenAIExamples/tree/main/CodeGen/docker_compose/intel/cpu/xeon#validate-microservices). + +Оновіть базу знань через локальний файл [nke-10k-2023.pdf](https://github.com/opea-project/GenAIComps/blob/main/comps/retrievers/redis/data/nke-10k-2023.pdf) + +Будь ласка, зверніться до [Xeon README](/GenAIExamples/AudioQnA/docker_compose/intel/cpu/xeon/README.md) або [Gaudi README](/GenAIExamples/AudioQnA/docker_compose/intel/hpu/gaudi/README.md) для створення образів OPEA. Незабаром вони також будуть доступні на Docker Hub для спрощення використання. + +Ось [посилання](https://github.com/opea-project/GenAIComps/blob/main/comps/reranks/tei/Dockerfile) на файл Docker. + +У цьому прикладі ви можете ознайомитися з інструментами yaml і python-файлів. Для більш детальної інформації, будь ласка, зверніться до розділу «Provide your own tools» інструкції [тут](https://github.com/opea-project/GenAIComps/tree/main/comps/agent/langchain#5-customize-agent-strategy). + +Ось інше [посилання](https://github.com/opea-project/GenAIExamples/blob/main/ChatQnA/ui/docker/Dockerfile.react) для вивчення. + +Ось гарний [Docker Xeon README](/GenAIExamples/DocSum/docker_compose/intel/cpu/xeon/README.md) і з посиланням на розділ [Docker Xeon README](/GenAIExamples/DocSum/docker_compose/intel/cpu/xeon/README.md#section) + +І посилання на python-файл [finetune_config](https://github.com/opea-project/GenAIComps/blob/main/comps/finetuning/finetune_config.py), щоб було цікавіше. + +Ось [issue](https://github.com/opea-project/GenAIExamples/issues/763) +і [Actions](https://github.com/opea-project/GenAIExamples/actions) також. +Можна також перевірити [PR](https://github.com/opea-project/GenAIExamples/pulls) +і [Projects](https://github.com/opea-project/GenAIExamples/projects). + +У примітках до випуску ви знайдете [88b3c1](https://github.com/opea-project/GenAIInfra/commit/88b3c108e5b5e3bfb6d9346ce2863b69f70cc2f1) посилання на комміти. diff --git a/docs-ua/scripts/test/test.md.saved b/docs-ua/scripts/test/test.md.saved new file mode 100644 index 00000000..9d0c8fac --- /dev/null +++ b/docs-ua/scripts/test/test.md.saved @@ -0,0 +1,35 @@ +# Test markdown file with cross-repo links + +This folder contains a collection of Kubernetes manifest files for deploying the ChatQnA service across scalable nodes. It includes a comprehensive [benchmarking tool](https://github.com/opea-project/GenAIEval/blob/main/evals/benchmark/README.md) that enables throughput analysis to assess inference performance. + +We have created the [BKC manifest](https://github.com/opea-project/GenAIExamples/tree/main/ChatQnA/benchmark) for single node, two nodes and four nodes K8s cluster. In order to apply, we need to check out and configure some values. + +The test uses the [benchmark tool](https://github.com/opea-project/GenAIEval/tree/main/evals/benchmark) to do performance test. We need to set up benchmark tool at the master node of Kubernetes which is k8s-master. + +This document outlines the deployment process for a CodeGen application utilizing the [GenAIComps](https://github.com/opea-project/GenAIComps.git) microservice pipeline on Intel Gaudi2 server. The steps include Docker images creation, container deployment via Docker Compose, and service execution to integrate microservices such as `llm`. We will publish the Docker images to the Docker Hub soon, further simplifying the deployment process for this service. + +Install GMC in your Kubernetes cluster, if you have not already done so, by following the steps in Section "Getting Started" at [GMC Install](https://github.com/opea-project/GenAIInfra/tree/main/microservices-connector#readme). We will soon publish images to Docker Hub, at which point no builds will be required, further simplifying install. + +If you get errors like "Access Denied", [validate micro service](https://github.com/opea-project/GenAIExamples/tree/main/CodeGen/docker_compose/intel/cpu/xeon#validate-microservices) first. + +Update Knowledge Base via Local File [nke-10k-2023.pdf](https://github.com/opea-project/GenAIComps/blob/main/comps/retrievers/redis/data/nke-10k-2023.pdf) + +Please refer to [Xeon README](https://github.com/opea-project/GenAIExamples/blob/main/AudioQnA/docker_compose/intel/cpu/xeon/README.md) or [Gaudi README](https://github.com/opea-project/GenAIExamples/blob/main/AudioQnA/docker_compose/intel/hpu/gaudi/README.md) to build the OPEA images. These too will be available on Docker Hub soon to simplify use. + +Here's a [Link](https://github.com/opea-project/GenAIComps/blob/main/comps/reranks/tei/Dockerfile) to a Docker file. + +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#5-customize-agent-strategy). + +Here's another [Link](https://github.com/opea-project/GenAIExamples/blob/main/ChatQnA/ui/docker/Dockerfile.react) to examine. + +Here is a nice one [Docker Xeon README](https://github.com/opea-project/GenAIExamples/blob/main/DocSum/docker_compose/intel/cpu/xeon/README.md) and that with a section reference [Docker Xeon README](https://github.com/opea-project/GenAIExamples/blob/main/DocSum/docker_compose/intel/cpu/xeon/README.md#section) + +And a reference to a python file [finetune_config](https://github.com/opea-project/GenAIComps/blob/main/comps/finetuning/finetune_config.py) to keep things interesting. + +Here's an [issue](https://github.com/opea-project/GenAIExamples/issues/763) +reference and +[Actions](https://github.com/opea-project/GenAIExamples/actions) reference too. +Might as well test [PRs](https://github.com/opea-project/GenAIExamples/pulls) +and [Projects](https://github.com/opea-project/GenAIExamples/projects) too. + +In release notes will find [88b3c1](https://github.com/opea-project/GenAIInfra/commit/88b3c108e5b5e3bfb6d9346ce2863b69f70cc2f1) commit references. diff --git a/docs-ua/sphinx/_static/images/BrokenBlocks.png b/docs-ua/sphinx/_static/images/BrokenBlocks.png new file mode 100755 index 00000000..1c9104fd Binary files /dev/null and b/docs-ua/sphinx/_static/images/BrokenBlocks.png differ diff --git a/docs-ua/sphinx/_static/images/OPEA-favicon-32x32.png b/docs-ua/sphinx/_static/images/OPEA-favicon-32x32.png new file mode 100755 index 00000000..de450bf4 Binary files /dev/null and b/docs-ua/sphinx/_static/images/OPEA-favicon-32x32.png differ diff --git a/docs-ua/sphinx/_static/images/opea-horizontal-color-w200.png b/docs-ua/sphinx/_static/images/opea-horizontal-color-w200.png new file mode 100755 index 00000000..159720ab Binary files /dev/null and b/docs-ua/sphinx/_static/images/opea-horizontal-color-w200.png differ diff --git a/docs-ua/sphinx/_static/images/opea-horizontal-white-w200.png b/docs-ua/sphinx/_static/images/opea-horizontal-white-w200.png new file mode 100755 index 00000000..7e9fec04 Binary files /dev/null and b/docs-ua/sphinx/_static/images/opea-horizontal-white-w200.png differ diff --git a/docs-ua/sphinx/_static/images/opea-icon-color.svg b/docs-ua/sphinx/_static/images/opea-icon-color.svg new file mode 100755 index 00000000..7dfea27b --- /dev/null +++ b/docs-ua/sphinx/_static/images/opea-icon-color.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs-ua/sphinx/_static/images/opea-icon-white.svg b/docs-ua/sphinx/_static/images/opea-icon-white.svg new file mode 100755 index 00000000..fa7c58f4 --- /dev/null +++ b/docs-ua/sphinx/_static/images/opea-icon-white.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs-ua/sphinx/_static/opea-custom.css b/docs-ua/sphinx/_static/opea-custom.css new file mode 100644 index 00000000..4dc79c08 --- /dev/null +++ b/docs-ua/sphinx/_static/opea-custom.css @@ -0,0 +1,340 @@ +/* -- Extra CSS styles for OPEA content (RTD theme) ----------------------- */ + +/* make the page width fill the window */ +.wy-nav-content { + max-width: 1100px; +} + +/* (temporarily) add an under development tagline to the bread crumb) */ +.wy-breadcrumbs::after { + content: " (Content is under construction)"; + background-color: #FFFACD; + color: red; + font-weight: bold; +} + +/* pygments tweak for white-on-black console */ + +.highlight-console .highlight { + background-color: black; +} +.highlight-console .highlight pre, .highlight-console .highlight .go, .highlight-console .highlight .gp { + color: white; +} +.highlight-console .highlight .hll { + background-color: white; +} +.highlight-console .highlight .hll .go, .highlight-console .highlight .hll .gp { + color: black; + font-weight: bold; +} + +/* :option: link color */ +a code span.pre { + color: #2980b9; +} + +/* tweak doc version selection */ +.rst-versions { + position: static; +} + +.rst-versions .rst-current-version { + padding: 5px; + background-color: #FF6900; + color: #FFFFFF; +} + +.rst-versions .rst-other-versions { + padding: 5px; +} + +div.rst-other-versions dl { + margin-bottom: 0; +} + +/* code block highlight color in rtd changed to lime green, no no no */ + +.rst-content tt.literal, .rst-content code.literal, .highlight { + background: #f0f0f0; +} +.rst-content tt.literal, .rst-content code.literal { + color: #000000; +} + +div.non-compliant-code div.highlight { + background: #f7d7d7; +} + +/* Tweak sidebar colors for OPEA theme */ + +.wy-side-nav-search { + background-color: #FF6900; +} + +/* Make the version number more visible */ +.wy-side-nav-search>div.version { + color: rgba(255,255,255,1); +} + +/* left-nav toctree caption style */ +.wy-menu-vertical p.caption { + color: #FF6900 ; + font-size: 100% ; + margin: 0 0 1em 0 ; + padding: 0 0 0 0.5em ; +} + +/* squish the space between a paragraph before a list but not in a note */ +div:not(.admonition) > p + ul, div:not(.admonition) > p + ol { + margin-top: -20px; +} + +/* add some space before the figure caption */ +p.caption { +# border-top: 1px solid; + margin-top: 1em; +} + +/* add a colon after the figure/table number (before the caption) */ +span.caption-number::after { + content: ": "; +} + +p.extrafooter { + text-align: right; + margin-top: -36px; +} + +table.align-center { + display: table !important; +} + +/* put the table caption at the bottom, as done for figures */ +table { + caption-side: bottom; +} + + +.code-block-caption { + color: #000; + font: italic 85%/1 arial,sans-serif; + padding: 1em 0; + text-align: center; +} + +/* make .. hlist:: tables fill the page */ +table.hlist { + width: 95% !important; +} + +/* override rtd theme white-space no-wrap in table heading and content + * and top align for content too (not middle) + */ +th,td { + white-space: normal !important; + vertical-align: top !important; +} + +/* tweak display of option tables to make first column wider */ +col.option { + width: 25%; +} + +/* tweak format for (:kbd:`F10`) */ +kbd +{ + -moz-border-radius:3px; + -moz-box-shadow:0 1px 0 rgba(0,0,0,0.2),0 0 0 2px #fff inset; + -webkit-border-radius:3px; + -webkit-box-shadow:0 1px 0 rgba(0,0,0,0.2),0 0 0 2px #fff inset; + background-color:#f7f7f7; + border:1px solid #ccc; + border-radius:3px; + box-shadow:0 1px 0 rgba(0,0,0,0.2),0 0 0 2px #fff inset; + color:#333; + display:inline-block; + font-family:Arial,Helvetica,sans-serif; + font-size:11px; + line-height:1.4; + margin:0 .1em; + padding:.1em .6em; + text-shadow:0 1px 0 #fff; +} + +/* home page grid display */ + +.grid { + list-style-type: none !important; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + margin: 1rem auto; + max-width: calc((250px + 2rem) * 3); +} + +.grid-item { + list-style-type: none !important; + -webkit-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 200px; + text-align: center; + margin: 1rem; +} + +.grid-item a { + display: block; + width: 200px; + height: 200px; + padding: 20px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + border: 1px solid #c6cbce; + background-color: #FF6900; + border-radius: 30px; + color: white; +} + +.grid-item h2 { + font-size: 1.1rem; +} + +/* tweek for images in the home-page grid */ + +/* +.grid-item img { + /* max-width: 50%; + max-height: 50%; + margin-bottom: 0.7rem; +} */ + + +.grid-item a:hover { + background-color: #FFB500; + color: white; +} + + +.grid-item p { + margin-top: 0.5rem; + font-size: 85%; + line-height:1.2; + color: #404040; +} + +.grid-icon { + line-height: 1.8; + font-size: 4rem; + color: #FFFFFF; +} + + +/* add a class for multi-column support + * in docs to replace use of .hlist with + * a .. rst-class:: rst-columns + */ + +.rst-columns2 { + column-width: 28em; + column-fill: balance; + margin-bottom: 1em; +} +.rst-columns3, .rst-columns { + column-width: 18em; + column-fill: balance; + margin-bottom: 1em; +} + +/* numbered "h2" steps */ + +body { + counter-reset: step-count; +} + +div.numbered-step h2::before, +section.numbered-step h2::before { + counter-increment: step-count; + content: counter(step-count); + background: #cccccc; + border-radius: 0.8em; + -moz-border-radius: 0.8em; + -webkit-border-radius: 0.8em; + color: #ffffff; + display: inline-block; + font-weight: bold; + line-height: 1.6em; + margin-right: 5px; + margin-left: -1.8em; + text-align: center; + width: 1.6em;} + +/* bold the level1 headings in on-page toctree displays */ +.rst-content .toctree-l1 > a { + font-weight: bold; +} + +/* add icon on external links */ +a.reference.external::after { + font-family: 'FontAwesome'; + font-size: 80%; + content: " \f08e"; +} + +/* generic light gray box shadow (for use on images via class directive) */ +.drop-shadow { + box-shadow: 5px 5px 10px #aaaaaa; +} + +/* add some space after an image with a shadow style applied */ +img.drop-shadow { + margin-bottom: 2em !important; +} + +/* tweak last updated section of footer to be right-aligned */ +.lastupdated { + float:right; +} + +/* some custom classes used in rst-class directives */ +.centered { + text-align: center; +} + +/* colors from ACRN brand pallet */ +.bg-opea-darkorange{ + background-color: #FF6900; + color: white; +} +.bg-opea-lightorange { + background-color: #FFB500; +} + +/* The style in theme.css for tables uses a slightly smaller font size, but was + only affecting paragraphs where the immediate parent was a th or td tag. Fix + this so that all paragraphs within a th or td tag have this style applied. + (This shows up if you have a table with a bullet list: the bullet list paragraph + fontsize went back to the default.) */ + +html.writer-html5 .rst-content table.docutils td p { + line-height: 1rem; + margin-bottom: 0; + font-size: .9rem; +} + diff --git a/docs-ua/sphinx/_static/opea-custom.js b/docs-ua/sphinx/_static/opea-custom.js new file mode 100644 index 00000000..ac0f4453 --- /dev/null +++ b/docs-ua/sphinx/_static/opea-custom.js @@ -0,0 +1,10 @@ +/* Extra acrn-specific javascript */ + +$(document).ready(function(){ + /* tweak logo link to the marketing site instead of doc site */ + $( ".icon-home" ).attr({href: "https://opea.dev/", target: "_blank"}); + + /* open external links in a new tab */ + $('a[class*=external]').attr({target: '_blank', rel: 'noopener'}); + +}); diff --git a/docs-ua/sphinx/_templates/aversions.html b/docs-ua/sphinx/_templates/aversions.html new file mode 100644 index 00000000..4b66cbdd --- /dev/null +++ b/docs-ua/sphinx/_templates/aversions.html @@ -0,0 +1,25 @@ +{# Add rst-badge after rst-versions for small badge style. #} +
+ + OPEA Project + v: {{ current_version }} + + +
+
+
{{ _('Document Versions') }}
+ {% for slug, url in versions %} +
{{ slug }}
+ {% endfor %} +
+
+
{{ _('OPEA Project links') }}
+
+ Project Home +
+
+ Wiki +
+
+
+
diff --git a/docs-ua/sphinx/_templates/breadcrumbs.html b/docs-ua/sphinx/_templates/breadcrumbs.html new file mode 100644 index 00000000..6c6493a1 --- /dev/null +++ b/docs-ua/sphinx/_templates/breadcrumbs.html @@ -0,0 +1,14 @@ +{% extends "!breadcrumbs.html" %} +{% block breadcrumbs %} + + {# parameterize default name "Docs" in breadcrumb via docs_title in conf.py #} + {% if not docs_title %} + {% set docs_title = "Docs" %} + {% endif %} + +
  • {{ docs_title }} »
  • + {% for doc in parents %} +
  • {{ doc.title }} »
  • + {% endfor %} +
  • {{ title }}
  • +{% endblock %} diff --git a/docs-ua/sphinx/_templates/footer.html b/docs-ua/sphinx/_templates/footer.html new file mode 100644 index 00000000..3e7a73de --- /dev/null +++ b/docs-ua/sphinx/_templates/footer.html @@ -0,0 +1,13 @@ +{% extends "!footer.html" %} +{% block contentinfo %} +

    + {%- if show_copyright %} + {%- if hasdoc('copyright') %} + {%- trans path=pathto('copyright'), copyright=copyright|e %}© Copyright {{ copyright }}.{% endtrans %} + {%- else %} + {%- trans copyright=copyright|e %}© Copyright {{ copyright }}.{% endtrans %} + {%- endif %} + {%- endif %} + +Published on {{last_updated}}. +{% endblock %} diff --git a/docs-ua/sphinx/_templates/layout.html b/docs-ua/sphinx/_templates/layout.html new file mode 100644 index 00000000..b1ecda38 --- /dev/null +++ b/docs-ua/sphinx/_templates/layout.html @@ -0,0 +1,16 @@ +{% extends "!layout.html" %} +{% block document %} + {% if not is_release %} + + {% endif %} + {{ super() }} +{% endblock %} +{% block menu %} + {% include "aversions.html" %} + {{ super() }} +{% endblock %} diff --git a/docs-ua/sphinx/_templates/versions.html b/docs-ua/sphinx/_templates/versions.html new file mode 100644 index 00000000..cd602720 --- /dev/null +++ b/docs-ua/sphinx/_templates/versions.html @@ -0,0 +1 @@ +{# wipe out the versions.html from the rtd theme #} diff --git a/docs-ua/sphinx/extensions/html_redirects.py b/docs-ua/sphinx/extensions/html_redirects.py new file mode 100644 index 00000000..b2da0dd4 --- /dev/null +++ b/docs-ua/sphinx/extensions/html_redirects.py @@ -0,0 +1,74 @@ +# Copyright 2018-2019 Espressif Systems (Shanghai) PTE LTD +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + + +# Mechanism to generate static HTML redirect pages in the output +# +# Uses redirect_template.html and the list of pages given in +# conf.html_redirect_pages +# +# Adapted from ideas in https://tech.signavio.com/2017/managing-sphinx-redirects +import os.path + +from sphinx.builders.html import StandaloneHTMLBuilder + +REDIRECT_TEMPLATE = """ + + + + + + +

    Page has moved here.

    + + +""" + + +def setup(app): + app.add_config_value('html_redirect_pages', [], 'html') + app.connect('build-finished', create_redirect_pages) + + # Since we're just setting up a build-finished hook, which runs + # after both reading and writing, this extension is safe for both. + return { + 'parallel_read_safe': True, + 'parallel_write_safe': True, + } + + +def create_redirect_pages(app, docname): + if not isinstance(app.builder, StandaloneHTMLBuilder): + return # only relevant for standalone HTML output + + for (old_url, new_url) in app.config.html_redirect_pages: + if old_url.startswith('/'): + old_url = old_url[1:] + print("Creating redirect: %s.html to %s.html" % (old_url, new_url)) + + new_url = app.builder.get_relative_uri(old_url, new_url) + out_file = app.builder.get_outfilename(old_url) + + out_dir = os.path.dirname(out_file) + if not os.path.exists(out_dir): + os.makedirs(out_dir) + + content = REDIRECT_TEMPLATE.replace("$NEWURL", new_url) + + if not os.path.exists(out_file): + with open(out_file, "w") as rp: + rp.write(content) diff --git a/docs-ua/sphinx/extensions/link_roles.py b/docs-ua/sphinx/extensions/link_roles.py new file mode 100644 index 00000000..d11a5639 --- /dev/null +++ b/docs-ua/sphinx/extensions/link_roles.py @@ -0,0 +1,64 @@ +# Copyright (c) 2019-2024 Intel Corporation. +# +# SPDX-License-Identifier: Apache-2.0 + +# based on http://protips.readthedocs.io/link-roles.html + +from __future__ import print_function +from __future__ import unicode_literals +import re +import os +import os.path +from os import path +import subprocess +from docutils import nodes + + +def run_cmd_get_output(cmd): + try: + with open(os.devnull, 'w') as devnull: + output = subprocess.check_output(cmd, stderr=devnull, shell=True).strip() + except subprocess.CalledProcessError as e: + output = e.output.decode('ascii') + + return output + +def get_github_rev(): + tag = run_cmd_get_output('git describe --tags --exact-match') + if tag: + return tag.decode("utf-8") + else: + return 'main' + + +def setup(app): + rev = get_github_rev() + + baseurl = 'https://github.com/opea-project/' + repos = ["GenAIComps", "GenAIEval", "GenAIExamples", "GenAIInfra", "Governance", "docs"] + + for r in repos: + app.add_role('{}_blob'.format(r), autolink('{}{}/blob/{}/%s'.format(baseurl, r, rev))) + app.add_role('{}_raw'.format(r), autolink('{}{}/raw/{}/%s'.format(baseurl, r, rev))) + + # The role just creates new nodes based on information in the + # arguments; its behavior doesn't depend on any other documents. + return { + 'parallel_read_safe': True, + 'parallel_write_safe': True, + } + + +def autolink(pattern): + def role(name, rawtext, text, lineno, inliner, options={}, content=[]): + m = re.search(r'(.*)\s*<(.*)>', text) + if m: + link_text = m.group(1) + link = m.group(2) + else: + link_text = text + link = text + url = pattern % (link,) + node = nodes.reference(rawtext, link_text, refuri=url, **options) + return [node], [] + return role diff --git a/docs-ua/sphinx/substitutions.txt b/docs-ua/sphinx/substitutions.txt new file mode 100644 index 00000000..d247d2d2 --- /dev/null +++ b/docs-ua/sphinx/substitutions.txt @@ -0,0 +1,23 @@ +.. |br| raw:: html .. force a line break in HTML output (blank lines needed here) + +
    + +.. These are replacement strings for non-ASCII characters used within the project + using the same name as the html entity names (e.g., ©) for that character + +.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGN + :ltrim: +.. |trade| unicode:: U+02122 .. TRADEMARK SIGN + :ltrim: +.. |reg| unicode:: U+000AE .. REGISTERED TRADEMARK SIGN + :ltrim: +.. |deg| unicode:: U+000B0 .. DEGREE SIGN + :ltrim: +.. |plusminus| unicode:: U+000B1 .. PLUS-MINUS SIGN + :rtrim: +.. |micro| unicode:: U+000B5 .. MICRO SIGN + :rtrim: +.. |check| unicode:: U+02714 .. HEAVY CHECK MARK + :rtrim: +.. |oplus| unicode:: U+02295 .. CIRCLED PLUS SIGN +.. |rarr| unicode:: U+02192 .. RIGHTWARDS ARROW