diff --git a/website/docs/topics/captainagent/agent_library.mdx b/website/docs/topics/captainagent/agent_library.mdx
index 0864a131c7..df15c17d75 100644
--- a/website/docs/topics/captainagent/agent_library.mdx
+++ b/website/docs/topics/captainagent/agent_library.mdx
@@ -1,4 +1,7 @@
-# Agent Library
+---
+title: Agent Library
+---
+
## Library Structure
A simple agent in agent library requires three fields:
- description: This describes the functionality of the agent.
diff --git a/website/docs/topics/captainagent/configurations.mdx b/website/docs/topics/captainagent/configurations.mdx
index 1bdc850d05..cfed43b655 100644
--- a/website/docs/topics/captainagent/configurations.mdx
+++ b/website/docs/topics/captainagent/configurations.mdx
@@ -1,4 +1,7 @@
-# Configurations in `nested_config`
+---
+title: Configurations in `nested_config`
+---
+
CaptainAgent requires `nested_config` for configuration. Below is an example, we will break it down and provide a detailed explanation.
```
@@ -23,15 +26,18 @@ nested_config = {
}
```
-:::info Requirements
+
+
If you run CaptainAgent without specifying a `nested_config`, a default is used and this **requires an OAI_CONFIG_LIST**.
**The default model used is OpenAI's GPT-4o**.
To see the default configuration and the OpenAI model used, see the [captainagent.py](https://github.com/ag2ai/ag2/blob/ceb75d865d0a7eb2b7c0bc51776e093681e0970e/autogen/agentchat/contrib/captainagent.py) file.
-For advice on using OAI_CONFIG_LIST, [see the documentation](https://ag2ai.github.io/ag2/docs/topics/llm_configuration#oai_config_list-pattern).
-:::
+For advice on using OAI_CONFIG_LIST, [see the documentation](/website/docs/topics/llm_configuration#oai_config_list-pattern).
+
+
+
## `autobuild_init_config`
This section is used to configure the initial setup of autobuild. `autobuild_init_config` takes in arguments from `AgentBuilder.__init__()`. Check the full list of arguments [here](https://github.com/ag2ai/ag2/blob/main/autogen/agentchat/contrib/agent_builder.py#L181).
@@ -52,22 +58,22 @@ Configures the backbone of agents in the group chat. Defaults to `gpt-4o`.
This section is used to configure the building process of autobuild. `autobuild_build_config` takes in arguments for `AgentBuilder.build()`. Check the full list of arguments [here](https://github.com/ag2ai/ag2/blob/main/autogen/agentchat/contrib/agent_builder.py#L365).
### `default_llm_config`
-Configures the default parameters for the builder during the autobuild process. Defaults to `{"temperature": 1, "top_p": 0.95, "max_tokens": 2048}`. `config_list` is **not* needed here.
+Configures the default parameters for the builder during the autobuild process. Defaults to `{"temperature": 1, "top_p": 0.95, "max_tokens": 2048}`. `config_list` is **not** needed here.
### `code_execution_config`
-Configures how the user proxy executes code within the nested chat. Defaults to `{"timeout": 300, "work_dir": "groupchat", "last_n_messages": 1, "use_docker": False}`. Full configuration docs [here](https://ag2ai.github.io/ag2/docs/reference/agentchat/user_proxy_agent).
+Configures how the user proxy executes code within the nested chat. Defaults to `{"timeout": 300, "work_dir": "groupchat", "last_n_messages": 1, "use_docker": False}`. Full configuration docs [here](/docs/reference/agentchat/user_proxy_agent).
### `coding`
Enables or disables whether to add the user proxy in the nested chat. Defaults to `True`.
### `library_path_or_json`
-Specifies the path to the agent library file. For details on customizing your own agent library, refer to the [agent library page](https://ag2ai.github.io/ag2/docs/topics/captainagent/agent_library).
+Specifies the path to the agent library file. For details on customizing your own agent library, refer to the [agent library page](/docs/topics/captainagent/agent_library).
### `kwargs`
`autobuild_build_config` takes in arguments for `AgentBuilder.build()`. Check the full list of arguments [here](https://github.com/ag2ai/ag2/blob/main/autogen/agentchat/contrib/agent_builder.py#L365).
## `autobuild_tool_config`
-This section is used to configure how to retrieve the tool library for the agents in the group chat. For details on customizing your own tool library, refer to the [tool library page](https://ag2ai.github.io/ag2/docs/topics/captainagent/tool_library).
+This section is used to configure how to retrieve the tool library for the agents in the group chat. For details on customizing your own tool library, refer to the [tool library page](/docs/topics/captainagent/tool_library).
### `tool_root`
Specifies the root directory of the tool library. When set to `'default'`, it will load the default library we provide.
@@ -76,13 +82,13 @@ Specifies the root directory of the tool library. When set to `'default'`, it wi
Configures the retriever model used for fetching relevant tools from the library. Defaults to `all-mpnet-base-v2`. The value is valid as long as it is found by [SentenceTransformers library](https://huggingface.co/sentence-transformers).
## `group_chat_config`
-This section is used to configure the group chat settings. `group_chat_config` also takes in arguments for initializing `autogen.GroupChat`. Refer to all the configurables [here](https://ag2ai.github.io/ag2/docs/reference/agentchat/groupchat).
+This section is used to configure the group chat settings. `group_chat_config` also takes in arguments for initializing `autogen.GroupChat`. Refer to all the configurables [here](/docs/reference/agentchat/groupchat).
### `max_round`
Specifies the maximum number of rounds in a group chat session. Defaults to `10`.
### `kwargs`
-`group_chat_config` also takes in arguments for initializing `autogen.GroupChat`. Refer to all the configurables [here](https://ag2ai.github.io/ag2/docs/reference/agentchat/groupchat).
+`group_chat_config` also takes in arguments for initializing `autogen.GroupChat`. Refer to all the configurables [here](/docs/reference/agentchat/groupchat).
## `group_chat_llm_config`
Specifies the LLM config of the `GroupChatManager`.
diff --git a/website/docs/topics/captainagent/tool_library.mdx b/website/docs/topics/captainagent/tool_library.mdx
index d308642ba2..64d394419d 100644
--- a/website/docs/topics/captainagent/tool_library.mdx
+++ b/website/docs/topics/captainagent/tool_library.mdx
@@ -1,4 +1,7 @@
-# Tool Library
+---
+title: Tool Library
+---
+
In CaptainAgent, tools are in the form of python functions. The agents can write code to import functions and call them according to their needs. This can significantly enhance the functionality and capabilities of the agents.
We provide a list of tools that comes with the release of CaptainAgent. Its full content can be found [here](https://github.com/ag2ai/ag2/tree/main/autogen/agentchat/contrib/captainagent/tools/README.md)
diff --git a/website/docs/topics/handling_long_contexts/compressing_text_w_llmligua.md b/website/docs/topics/handling_long_contexts/compressing_text_w_llmligua.mdx
similarity index 97%
rename from website/docs/topics/handling_long_contexts/compressing_text_w_llmligua.md
rename to website/docs/topics/handling_long_contexts/compressing_text_w_llmligua.mdx
index 04f0fde7d1..21fcbe9016 100644
--- a/website/docs/topics/handling_long_contexts/compressing_text_w_llmligua.md
+++ b/website/docs/topics/handling_long_contexts/compressing_text_w_llmligua.mdx
@@ -1,10 +1,13 @@
-# Compressing Text with LLMLingua
+---
+title: Compressing Text with LLMLingua
+---
Text compression is crucial for optimizing interactions with LLMs, especially when dealing with long prompts that can lead to higher costs and slower response times. LLMLingua is a tool designed to compress prompts effectively, enhancing the efficiency and cost-effectiveness of LLM operations.
This guide introduces LLMLingua's integration with AutoGen, demonstrating how to use this tool to compress text, thereby optimizing the usage of LLMs for various applications.
-:::info Requirements
+
+
Install `autogen[long-context]` and `PyMuPDF`:
```bash
@@ -12,7 +15,9 @@ pip install "autogen[long-context]" PyMuPDF
```
For more information, please refer to the [installation guide](/docs/installation/).
-:::
+
+
+
## Example 1: Compressing AutoGen Research Paper using LLMLingua
@@ -93,9 +98,11 @@ user_proxy = autogen.UserProxyAgent(
)
```
-:::tip
-Learn more about configuring LLMs for agents [here](/docs/topics/llm_configuration).
-:::
+
+
+ Learn more about configuring LLMs for agents [here](/docs/topics/llm_configuration).
+
+
```python
context_handling = transform_messages.TransformMessages(transforms=[text_compressor])
diff --git a/website/docs/topics/handling_long_contexts/intro_to_transform_messages.md b/website/docs/topics/handling_long_contexts/intro_to_transform_messages.mdx
similarity index 98%
rename from website/docs/topics/handling_long_contexts/intro_to_transform_messages.md
rename to website/docs/topics/handling_long_contexts/intro_to_transform_messages.mdx
index 73bb00b9f7..25726aa902 100644
--- a/website/docs/topics/handling_long_contexts/intro_to_transform_messages.md
+++ b/website/docs/topics/handling_long_contexts/intro_to_transform_messages.mdx
@@ -1,4 +1,6 @@
-# Introduction to Transform Messages
+---
+title: Introduction to Transform Messages
+---
Why do we need to handle long contexts? The problem arises from several constraints and requirements:
@@ -12,7 +14,8 @@ Why do we need to handle long contexts? The problem arises from several constrai
The `TransformMessages` capability is designed to modify incoming messages before they are processed by the LLM agent. This can include limiting the number of messages, truncating messages to meet token limits, and more.
-:::info Requirements
+
+
Install `autogen`:
```bash
@@ -20,7 +23,9 @@ pip install autogen
```
For more information, please refer to the [installation guide](/docs/installation/).
-:::
+
+
+
### Exploring and Understanding Transformations
@@ -154,9 +159,11 @@ user_proxy = autogen.UserProxyAgent(
)
```
-:::tip
-Learn more about configuring LLMs for agents [here](/docs/topics/llm_configuration).
-:::
+
+
+ Learn more about configuring LLMs for agents [here](/docs/topics/llm_configuration).
+
+
We first need to write the `test` function that creates a very long chat history by exchanging messages between an assistant and a user proxy agent, and then attempts to initiate a new chat without clearing the history, potentially triggering an error due to token limits.
diff --git a/website/docs/topics/llm-caching.md b/website/docs/topics/llm-caching.mdx
similarity index 99%
rename from website/docs/topics/llm-caching.md
rename to website/docs/topics/llm-caching.mdx
index 53db1f95ad..10a58d5ceb 100644
--- a/website/docs/topics/llm-caching.md
+++ b/website/docs/topics/llm-caching.mdx
@@ -1,4 +1,6 @@
-# LLM Caching
+---
+title: LLM Caching
+---
AutoGen supports caching API requests so that they can be reused when the same request is issued. This is useful when repeating or continuing experiments for reproducibility and cost saving.
diff --git a/website/docs/topics/llm-observability.md b/website/docs/topics/llm-observability.mdx
similarity index 98%
rename from website/docs/topics/llm-observability.md
rename to website/docs/topics/llm-observability.mdx
index dd0e2cc57b..119dc19dca 100644
--- a/website/docs/topics/llm-observability.md
+++ b/website/docs/topics/llm-observability.mdx
@@ -1,4 +1,6 @@
-# Agent Observability
+---
+title: Agent Observability
+---
AutoGen supports advanced LLM agent observability and monitoring through built-in logging and partner providers.
diff --git a/website/docs/topics/non-openai-models/about-using-nonopenai-models.md b/website/docs/topics/non-openai-models/about-using-nonopenai-models.mdx
similarity index 92%
rename from website/docs/topics/non-openai-models/about-using-nonopenai-models.md
rename to website/docs/topics/non-openai-models/about-using-nonopenai-models.mdx
index 41134a5224..c71f11183b 100644
--- a/website/docs/topics/non-openai-models/about-using-nonopenai-models.md
+++ b/website/docs/topics/non-openai-models/about-using-nonopenai-models.mdx
@@ -1,4 +1,6 @@
-# Non-OpenAI Models
+---
+title: Non-OpenAI Models
+---
AutoGen allows you to use non-OpenAI models through proxy servers that provide
an OpenAI-compatible API or a [custom model client](https://ag2ai.github.io/ag2/blog/2024/01/26/Custom-Models)
@@ -53,12 +55,13 @@ provided below:
- [LM Studio](/docs/topics/non-openai-models/local-lm-studio)
- [vLLM example](/docs/topics/non-openai-models/local-vllm)
-````mdx-code-block
-:::tip
-If you are planning to use Function Calling, not all cloud-based and local proxy servers support
-Function Calling with their OpenAI-compatible API, so check their documentation.
-:::
-````
+
+
+ If you are planning to use Function Calling, not all cloud-based and local
+ proxy servers support Function Calling with their OpenAI-compatible API, so
+ check their documentation.
+
+
### Configuration for Non-OpenAI models
diff --git a/website/docs/topics/non-openai-models/best-tips-for-nonopenai-models.md b/website/docs/topics/non-openai-models/best-tips-for-nonopenai-models.mdx
similarity index 98%
rename from website/docs/topics/non-openai-models/best-tips-for-nonopenai-models.md
rename to website/docs/topics/non-openai-models/best-tips-for-nonopenai-models.mdx
index 0b3a325ff0..5e7bdfa157 100644
--- a/website/docs/topics/non-openai-models/best-tips-for-nonopenai-models.md
+++ b/website/docs/topics/non-openai-models/best-tips-for-nonopenai-models.mdx
@@ -1,4 +1,6 @@
-# Tips for Non-OpenAI Models
+---
+title: Tips for Non-OpenAI Models
+---
Here are some tips for using non-OpenAI Models with AutoGen.
diff --git a/website/docs/topics/non-openai-models/images/cloudlocalproxy.png b/website/docs/topics/non-openai-models/images/cloudlocalproxy.png
old mode 100755
new mode 100644
index c1cc04a7b1..963a889f0f
--- a/website/docs/topics/non-openai-models/images/cloudlocalproxy.png
+++ b/website/docs/topics/non-openai-models/images/cloudlocalproxy.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:1c2e71bbd8ca4f2a83d8c1e3dbb75a4fc3586318d849699ba3d2e6beaec3d3d3
-size 57529
+oid sha256:88c2dbc96a920528d4ef9507b5be88f18aa1ea810690108d2f27ed42563ecc3a
+size 577606
diff --git a/website/docs/topics/non-openai-models/local-vllm.md b/website/docs/topics/non-openai-models/local-vllm.mdx
similarity index 100%
rename from website/docs/topics/non-openai-models/local-vllm.md
rename to website/docs/topics/non-openai-models/local-vllm.mdx
diff --git a/website/docs/topics/openai-assistant/gpt_assistant_agent.md b/website/docs/topics/openai-assistant/gpt_assistant_agent.mdx
similarity index 99%
rename from website/docs/topics/openai-assistant/gpt_assistant_agent.md
rename to website/docs/topics/openai-assistant/gpt_assistant_agent.mdx
index 4e358fcab1..595765e4ab 100644
--- a/website/docs/topics/openai-assistant/gpt_assistant_agent.md
+++ b/website/docs/topics/openai-assistant/gpt_assistant_agent.mdx
@@ -1,4 +1,6 @@
-# Agent Backed by OpenAI Assistant API
+---
+title: "Agent Backed by OpenAI Assistant API"
+---
The GPTAssistantAgent is a powerful component of the AutoGen framework, utilizing OpenAI's Assistant API to enhance agents with advanced capabilities. This agent enables the integration of multiple tools such as the Code Interpreter, File Search, and Function Calling, allowing for a highly customizable and dynamic interaction model.
diff --git a/website/docs/topics/retrieval_augmentation.md b/website/docs/topics/retrieval_augmentation.mdx
similarity index 98%
rename from website/docs/topics/retrieval_augmentation.md
rename to website/docs/topics/retrieval_augmentation.mdx
index 22ee7d28ba..78b2b1c5c4 100644
--- a/website/docs/topics/retrieval_augmentation.md
+++ b/website/docs/topics/retrieval_augmentation.mdx
@@ -1,4 +1,6 @@
-# Retrieval Augmentation
+---
+title: Retrieval Augmentation
+---
Retrieval Augmented Generation (RAG) is a powerful technique that combines language models with external knowledge retrieval to improve the quality and relevance of generated responses.
@@ -11,7 +13,7 @@ The following is an example setup demonstrating how to create retrieval augmente
Here `RetrieveUserProxyAgent` instance acts as a proxy agent that retrieves relevant information based on the user's input.
-Refer to the [doc](https://ag2ai.github.io/ag2/docs/reference/agentchat/contrib/retrieve_user_proxy_agent)
+Refer to the [doc](/docs/reference/agentchat/contrib/retrieve_user_proxy_agent)
for more information on the detailed configurations.
```python
diff --git a/website/docs/tutorial/what-next.md b/website/docs/tutorial/what-next.mdx
similarity index 98%
rename from website/docs/tutorial/what-next.md
rename to website/docs/tutorial/what-next.mdx
index 88d951b268..d73fc615db 100644
--- a/website/docs/tutorial/what-next.md
+++ b/website/docs/tutorial/what-next.mdx
@@ -1,4 +1,6 @@
-# What Next?
+---
+title: What Next?
+---
Now that you have learned the basics of AutoGen, you can start to build your own
agents. Here are some ideas to get you started without going to the advanced
diff --git a/website/logo/ag2-white.svg b/website/logo/ag2-white.svg
new file mode 100644
index 0000000000..cea304d77d
--- /dev/null
+++ b/website/logo/ag2-white.svg
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/website/logo/ag2.svg b/website/logo/ag2.svg
new file mode 100644
index 0000000000..c6d1ce5656
--- /dev/null
+++ b/website/logo/ag2.svg
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/website/mint-app-gallery-deps.js b/website/mint-app-gallery-deps.js
new file mode 100644
index 0000000000..f7ad0834d8
--- /dev/null
+++ b/website/mint-app-gallery-deps.js
@@ -0,0 +1,106 @@
+// Load jQuery if not present
+if (typeof jQuery === "undefined") {
+ const jqueryScript = document.createElement("script");
+ jqueryScript.src =
+ "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js";
+ document.head.appendChild(jqueryScript);
+
+ jqueryScript.onload = function () {
+ // Load Chosen after jQuery
+ const chosenScript = document.createElement("script");
+ chosenScript.src =
+ "https://cdnjs.cloudflare.com/ajax/libs/chosen/1.8.7/chosen.jquery.min.js";
+ document.head.appendChild(chosenScript);
+
+ // Add Chosen CSS
+ const chosenStyles = document.createElement("link");
+ chosenStyles.rel = "stylesheet";
+ chosenStyles.href =
+ "https://cdnjs.cloudflare.com/ajax/libs/chosen/1.8.7/chosen.min.css";
+ document.head.appendChild(chosenStyles);
+
+ // Initialize Chosen when everything is loaded
+ chosenScript.onload = function () {
+ initializeGallerySelect();
+ };
+ };
+}
+
+function getTagsFromURL() {
+ const searchParams = new URLSearchParams(window.location.search);
+ const tags = searchParams.get("tags");
+ return tags ? tags.split(",") : [];
+}
+
+// Function to initialize Chosen on gallery select
+function initializeGallerySelect() {
+ // Add flag to check if already initialized
+ const selectElement = $(".examples-gallery-container .tag-filter");
+ if (selectElement.length && !selectElement.data("chosen-initialized")) {
+ selectElement
+ .chosen({
+ width: "100%",
+ placeholder_text_multiple: "Filter by tags",
+ })
+ .data("chosen-initialized", true);
+
+ // Get tags from URL and update chosen
+ const urlTags = getTagsFromURL();
+ if (urlTags.length > 0) {
+ selectElement.val(urlTags);
+ selectElement.trigger("chosen:updated");
+
+ // Trigger the gallery:tagChange event with URL tags
+ const customEvent = new CustomEvent("gallery:tagChange", {
+ detail: urlTags,
+ });
+ document.dispatchEvent(customEvent);
+ }
+
+ // Set up change handler
+ selectElement.on("change", function (evt, params) {
+ const selectedValues = $(this).val() || [];
+ const customEvent = new CustomEvent("gallery:tagChange", {
+ detail: selectedValues,
+ });
+ document.dispatchEvent(customEvent);
+ });
+ }
+}
+
+// Debounce function
+function debounce(func, wait) {
+ let timeout;
+ return function executedFunction(...args) {
+ const later = () => {
+ clearTimeout(timeout);
+ func(...args);
+ };
+ clearTimeout(timeout);
+ timeout = setTimeout(later, wait);
+ };
+}
+
+// Debounced version of initialize
+const debouncedInitialize = debounce(initializeGallerySelect, 100);
+
+// Watch for URL changes using MutationObserver
+const observer = new MutationObserver((mutations) => {
+ if (window.location.pathname.includes("/notebooks")) {
+ debouncedInitialize();
+ }
+});
+
+observer.observe(document.body, {
+ childList: true,
+ subtree: true,
+ attributes: false,
+ characterData: false,
+});
+
+// Initialize on page load
+document.addEventListener("DOMContentLoaded", function () {
+ if (window.jQuery && window.jQuery.fn.chosen) {
+ initializeGallerySelect();
+ }
+});
diff --git a/website/mint-style.css b/website/mint-style.css
new file mode 100644
index 0000000000..25e8388dce
--- /dev/null
+++ b/website/mint-style.css
@@ -0,0 +1,615 @@
+:root {
+ --migration-icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzI1XzEyNDApIj4KPHBhdGggZD0iTTE2LjAwMDQgOS4xNDUwMkgxNS4yMzU0VjE0LjQ3NUgxNi4wMDA0VjkuMTQ1MDJaIiBmaWxsPSJjdXJyZW50Q29sb3IiLz4KPHBhdGggZD0iTTE1LjIzNDYgMTQuNDc1SDE0LjQ3NDZWMTUuMjRIMTUuMjM0NlYxNC40NzVaIiBmaWxsPSJjdXJyZW50Q29sb3IiLz4KPHBhdGggZD0iTTE1LjIzNDYgOC4zOEgxNC40NzQ2VjkuMTQ1MDFIMTUuMjM0NlY4LjM4WiIgZmlsbD0iY3VycmVudENvbG9yIi8+CjxwYXRoIGQ9Ik0xNS4yMzQ2IDMuODEwMDZIMTQuNDc0NlY2LjA5NTA2SDE1LjIzNDZWMy44MTAwNloiIGZpbGw9ImN1cnJlbnRDb2xvciIvPgo8cGF0aCBkPSJNMTQuNDc1IDMuMDQ1MDRIMTMuNzFWMy44MTAwNEgxNC40NzVWMy4wNDUwNFoiIGZpbGw9ImN1cnJlbnRDb2xvciIvPgo8cGF0aCBkPSJNMTQuNDc0NiAxNS4yNEg5LjEzOTY1VjE2SDE0LjQ3NDZWMTUuMjRaIiBmaWxsPSJjdXJyZW50Q29sb3IiLz4KPHBhdGggZD0iTTE0LjQ3NDYgNy42Mkg5LjEzOTY1VjguMzhIMTQuNDc0NlY3LjYyWiIgZmlsbD0iY3VycmVudENvbG9yIi8+CjxwYXRoIGQ9Ik0xMC42NjQ2IDAuNzYwMDFWMS41MjUwMUg5Ljg5OTY1VjIuMjg1MDFIOS4xMzk2NVYzLjA0NTAxSDkuODk5NjVWMy44MTAwMUgxMC42NjQ2VjQuNTcwMDFIMTEuNDI0NlYzLjA0NTAxSDEzLjcwOTZWMi4yODUwMUgxMS40MjQ2VjAuNzYwMDFIMTAuNjY0NloiIGZpbGw9ImN1cnJlbnRDb2xvciIvPgo8cGF0aCBkPSJNOS4xMzk4OCAxNC40NzVIOC4zNzk4OFYxNS4yNEg5LjEzOTg4VjE0LjQ3NVoiIGZpbGw9ImN1cnJlbnRDb2xvciIvPgo8cGF0aCBkPSJNOS4xMzk4OCA4LjM4SDguMzc5ODhWOS4xNDUwMUg5LjEzOTg4VjguMzhaIiBmaWxsPSJjdXJyZW50Q29sb3IiLz4KPHBhdGggZD0iTTguMzgwMjMgOS4xNDUwMkg3LjYxNTIzVjE0LjQ3NUg4LjM4MDIzVjkuMTQ1MDJaIiBmaWxsPSJjdXJyZW50Q29sb3IiLz4KPHBhdGggZD0iTTguMzgwMjMgMS41MjUwMkg3LjYxNTIzVjYuODU1MDJIOC4zODAyM1YxLjUyNTAyWiIgZmlsbD0iY3VycmVudENvbG9yIi8+CjxwYXRoIGQ9Ik03LjYxNTQ3IDYuODU0OThINi44NTU0N1Y3LjYxOTk4SDcuNjE1NDdWNi44NTQ5OFoiIGZpbGw9ImN1cnJlbnRDb2xvciIvPgo8cGF0aCBkPSJNNy42MTU0NyAwLjc2MDAxSDYuODU1NDdWMS41MjUwMUg3LjYxNTQ3VjAuNzYwMDFaIiBmaWxsPSJjdXJyZW50Q29sb3IiLz4KPHBhdGggZD0iTTUuMzMwMTYgMTUuMjQwMVYxNC40NzUxSDYuMDk1MTZWMTMuNzE1MUg2Ljg1NTE2VjEyLjk1MDFINi4wOTUxNlYxMi4xOTAxSDUuMzMwMTZWMTEuNDMwMUg0LjU3MDE2VjEyLjk1MDFIMi4yODUxNlYxMy43MTUxSDQuNTcwMTZWMTUuMjQwMUg1LjMzMDE2WiIgZmlsbD0iY3VycmVudENvbG9yIi8+CjxwYXRoIGQ9Ik02Ljg1NDUzIDcuNjJIMS41MTk1M1Y4LjM4SDYuODU0NTNWNy42MloiIGZpbGw9ImN1cnJlbnRDb2xvciIvPgo8cGF0aCBkPSJNNi44NTQ1MyAwSDEuNTE5NTNWMC43Nkg2Ljg1NDUzVjBaIiBmaWxsPSJjdXJyZW50Q29sb3IiLz4KPHBhdGggZD0iTTIuMjg0NTMgMTIuMTg5OUgxLjUxOTUzVjEyLjk0OTlIMi4yODQ1M1YxMi4xODk5WiIgZmlsbD0iY3VycmVudENvbG9yIi8+CjxwYXRoIGQ9Ik0xLjUxOTc3IDkuOTA1MDNIMC43NTk3NjZWMTIuMTlIMS41MTk3N1Y5LjkwNTAzWiIgZmlsbD0iY3VycmVudENvbG9yIi8+CjxwYXRoIGQ9Ik0xLjUxOTc3IDYuODU0OThIMC43NTk3NjZWNy42MTk5OEgxLjUxOTc3VjYuODU0OThaIiBmaWxsPSJjdXJyZW50Q29sb3IiLz4KPHBhdGggZD0iTTEuNTE5NzcgMC43NjAwMUgwLjc1OTc2NlYxLjUyNTAxSDEuNTE5NzdWMC43NjAwMVoiIGZpbGw9ImN1cnJlbnRDb2xvciIvPgo8cGF0aCBkPSJNMC43NiAxLjUyNTAySDBWNi44NTUwMkgwLjc2VjEuNTI1MDJaIiBmaWxsPSJjdXJyZW50Q29sb3IiLz4KPC9nPgo8L3N2Zz4K);
+ --research-icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzlfMTM3NikiPgo8cGF0aCBkPSJNMTQuODU5NiAxMS44MTI0SDE0LjA5NDZWMTEuMDQ5OUgxMy4zMzQ2VjEwLjI4OTlIMTIuNTY5NlY4Ljc2NDg5SDExLjgwOTZWMTAuMjg5OUgxMS4wNDk2VjExLjA0OTlIMTAuMjg0NlYxMS44MTQ5SDguNzY0NjVWMTIuNTc0OUgxMC4yODQ2VjEzLjMzNDlIMTEuMDQ5NlYxNC4wOTk5SDExLjgwOTZWMTQuODU5OUgxMi41Njk2VjE1LjYxOTlIMTQuODU5NlYxNC44NTk5SDE1LjYxOTZWMTIuNTc0OUgxNC44NTk2VjExLjgxMjRaTTE0Ljg1OTYgMTQuMDk3NEgxNC4wOTQ2VjEzLjMzMjRIMTMuMzM0NlYxMi41NzI0SDEyLjU2OTZWMTEuODEyNEgxMy4zMzQ2VjEyLjU3MjRIMTQuMDk0NlYxMy4zMzI0SDE0Ljg1OTZWMTQuMDk3NFoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0xMy4zMzUzIDQuOTUyMzlIMTIuNTcwM1Y4Ljc2MjM5SDEzLjMzNTNWNC45NTIzOVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0xMi41Njk2IDMuNDI3NDlIMTEuODA5NlY0Ljk1MjQ5SDEyLjU2OTZWMy40Mjc0OVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0xMS44MDk4IDIuNjY3NDhIMTEuMDQ5OFYzLjQyNzQ4SDExLjgwOThWMi42Njc0OFoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0xMS4wNTAyIDYuNDc3NDJIMTAuMjg1MlY3LjIzNzQySDExLjA1MDJWNi40Nzc0MloiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0xMS4wNTAyIDEuOTA3NDdIMTAuMjg1MlYyLjY2NzQ3SDExLjA1MDJWMS45MDc0N1oiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0xMC4yODQ0IDcuMjM3NDNIOS41MjQ0MVY4LjAwMjQzSDEwLjI4NDRWNy4yMzc0M1oiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0xMC4yODQ0IDUuNzEyNEg5LjUyNDQxVjYuNDc3NEgxMC4yODQ0VjUuNzEyNFoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik05LjUyNDY1IDguMDAyNDRIOC43NjQ2NVY4Ljc2MjQ0SDkuNTI0NjVWOC4wMDI0NFoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik05LjUyNDY1IDQuOTUyMzlIOC43NjQ2NVY1LjcxMjM5SDkuNTI0NjVWNC45NTIzOVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0xMC4yODQ2IDEuMTQyNDZIOC43NjQ2NVYxLjkwNzQ2SDEwLjI4NDZWMS4xNDI0NloiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik04Ljc2NTA4IDEyLjU3MjRINC45NTUwOFYxMy4zMzI0SDguNzY1MDhWMTIuNTcyNFoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik04LjAwMDIzIDQuOTUyMzlINy4yNDAyM1Y2LjQ3NzM5SDguMDAwMjNWNC45NTIzOVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik03LjIzOTYxIDYuNDc3NDJINi40NzQ2MVY3LjIzNzQySDcuMjM5NjFWNi40Nzc0MloiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik02LjQ3NDg0IDcuMjM3NDNINS43MTQ4NFY4Ljc2MjQzSDYuNDc0ODRWNy4yMzc0M1oiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik04Ljc2NTA4IDAuMzgyNDQ2SDQuOTU1MDhWMS4xNDI0NUg4Ljc2NTA4VjAuMzgyNDQ2WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTQuOTU0NjkgMTEuODEyNUgzLjQyOTY5VjEyLjU3MjVINC45NTQ2OVYxMS44MTI1WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTQuOTU0NDUgOC4wMDI0NEg0LjE4OTQ1VjguNzYyNDRINC45NTQ0NVY4LjAwMjQ0WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTQuOTU0NDUgNC45NTIzOUg0LjE4OTQ1VjUuNzEyMzlINC45NTQ0NVY0Ljk1MjM5WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTQuOTU0NjkgMS4xNDI0NkgzLjQyOTY5VjEuOTA3NDZINC45NTQ2OVYxLjE0MjQ2WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTQuMTg5NjkgNy4yMzc0M0gzLjQyOTY5VjguMDAyNDNINC4xODk2OVY3LjIzNzQzWiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTQuMTg5NjkgNS43MTI0SDMuNDI5NjlWNi40Nzc0SDQuMTg5NjlWNS43MTI0WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTMuNDI5OTIgMTEuMDQ3NUgyLjY2OTkyVjExLjgxMjVIMy40Mjk5MlYxMS4wNDc1WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTMuNDI5OTIgNi40Nzc0MkgyLjY2OTkyVjcuMjM3NDJIMy40Mjk5MlY2LjQ3NzQyWiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTMuNDI5OTIgMS45MDc0N0gyLjY2OTkyVjIuNjY3NDdIMy40Mjk5MlYxLjkwNzQ3WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTIuNjcwMjcgMTAuMjg3NUgxLjkwNTI3VjExLjA0NzVIMi42NzAyN1YxMC4yODc1WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTIuNjcwMjcgMi42Njc0OEgxLjkwNTI3VjMuNDI3NDhIMi42NzAyN1YyLjY2NzQ4WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTEuOTA0NTMgOC43NjI0NUgxLjE0NDUzVjEwLjI4NzVIMS45MDQ1M1Y4Ljc2MjQ1WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTEuOTA0NTMgMy40Mjc0OUgxLjE0NDUzVjQuOTUyNDlIMS45MDQ1M1YzLjQyNzQ5WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTEuMTQ0ODggNC45NTIzOUgwLjM3OTg4M1Y4Ljc2MjM5SDEuMTQ0ODhWNC45NTIzOVoiIGZpbGw9ImJsYWNrIi8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDBfOV8xMzc2Ij4KPHJlY3Qgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=);
+ --contributor-icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzlfMTM3MCkiPgo8cGF0aCBkPSJNMTYuMDAwMiA5LjE0MjQ2SDE1LjI0MDJWOS45MDc0NkgxNi4wMDAyVjkuMTQyNDZaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTUuMjM5OCA4LjM4MjQ1SDEzLjcxNDhWOS4xNDI0NUgxNS4yMzk4VjguMzgyNDVaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTQuNDc0OCA2Ljg1NzQySDEzLjcxNDhWNy42MjI0MkgxNC40NzQ4VjYuODU3NDJaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTEuNDI5NiA3LjYyMjQ1VjYuMDk3NDVIMTAuNjY5NlY1LjMzMjQ1SDkuOTA0NjVWMy44MTI0NUgxMC42Njk2VjMuMDQ3NDVIMTMuNzE0NlYzLjgxMjQ1SDE0LjQ3NDZWNi44NTc0NUgxNS4yMzk2VjIuMjg3NDVIMTQuNDc0NlYxLjUyMjQ1SDEzLjcxNDZWMC43NjI0NTFIMTAuNjY5NlYxLjUyMjQ1SDkuOTA0NjVWMi4yODc0NUg5LjE0NDY1VjQuNTcyNDVINi44NTk2NVYyLjI4NzQ1SDYuMDk0NjVWMS41MjI0NUg1LjMzNDY1VjAuNzYyNDUxSDIuMjg0NjVWMS41MjI0NUgxLjUyNDY1VjIuMjg3NDVIMC43NjQ2NDhWNi44NTc0NUgxLjUyNDY1VjMuODEyNDVIMi4yODQ2NVYzLjA0NzQ1SDUuMzM0NjVWMy44MTI0NUg2LjA5NDY1VjUuMzMyNDVINS4zMzQ2NVY2LjA5NzQ1SDQuNTc0NjVWNy42MjI0NUgyLjI4NDY1VjguMzgyNDVINC41NzQ2NVYxMS40Mjc1SDUuMzM0NjVWNy42MjI0NUg2LjA5NDY1VjYuODU3NDVIOS45MDQ2NVY3LjYyMjQ1SDEwLjY2OTZWMTEuNDI3NUgxMS40Mjk2VjguMzgyNDVIMTMuNzE0NlY3LjYyMjQ1SDExLjQyOTZaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTIuOTU1NCAxNC40Nzc0SDEyLjE5MDRWMTUuMjM3NEgxMi45NTU0VjE0LjQ3NzRaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTIuMTg5NyAxMy43MTc0SDExLjQyOTdWMTQuNDc3NEgxMi4xODk3VjEzLjcxNzRaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTEuNDMwMyAxMi45NTI0SDkuOTA1MjdWMTMuNzE3NEgxMS40MzAzVjEyLjk1MjRaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTAuNjcwMyAxMS40Mjc1SDkuOTA1MjdWMTIuMTkyNUgxMC42NzAzVjExLjQyNzVaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNOS45MDQ1MyA4LjM4MjQ1SDkuMTQ0NTNWOS45MDc0NUg5LjkwNDUzVjguMzgyNDVaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNOS45MDQ3MyAxMi4xOTI1SDYuMDk0NzNWMTIuOTUyNUg5LjkwNDczVjEyLjE5MjVaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNOS4xNDUzNSAxMC42Njc1SDYuODYwMzVWMTEuNDI3NUg5LjE0NTM1VjEwLjY2NzVaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNNi44NTk3MyA4LjM4MjQ1SDYuMDk0NzNWOS45MDc0NUg2Ljg1OTczVjguMzgyNDVaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNNi4wOTQ5NiAxMS40Mjc1SDUuMzM0OTZWMTIuMTkyNUg2LjA5NDk2VjExLjQyNzVaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNNi4wOTUyIDEyLjk1MjRINC41NzUyVjEzLjcxNzRINi4wOTUyVjEyLjk1MjRaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNNC41NzQ1NyAxMy43MTc0SDMuODA5NTdWMTQuNDc3NEg0LjU3NDU3VjEzLjcxNzRaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMy44MDk4IDE0LjQ3NzRIMy4wNDk4VjE1LjIzNzRIMy44MDk4VjE0LjQ3NzRaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMi4yODUzOSA2Ljg1NzQySDEuNTI1MzlWNy42MjI0MkgyLjI4NTM5VjYuODU3NDJaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMi4yODQ2NSA4LjM4MjQ1SDAuNzY0NjQ4VjkuMTQyNDVIMi4yODQ2NVY4LjM4MjQ1WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTAuNzY1IDkuMTQyNDZIMFY5LjkwNzQ2SDAuNzY1VjkuMTQyNDZaIiBmaWxsPSJibGFjayIvPgo8L2c+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzlfMTM3MCI+CjxyZWN0IHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K);
+ --autogen-icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzlfMTM1OCkiPgo8cGF0aCBkPSJNMTUuMjM5OSAxMS4wNUgxNC40Nzk5VjExLjgxSDEyLjk1NDlWMTMuMzM1SDExLjQyOTlWMTQuODZIMTAuNjY5OVYxNS42MkgxNS45OTk5VjE0Ljg2SDE1LjIzOTlWMTEuMDVaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTUuMjQwNSAyLjY3MDA0SDE0LjQ4MDVWNC4xOTAwNEgxNS4yNDA1VjIuNjcwMDRaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTQuNDc5OCAxMC4yODVIMTMuNzE0OFYxMS4wNUgxNC40Nzk4VjEwLjI4NVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0xNC40Nzk4IDQuMTkwMDZIMTMuNzE0OFY0Ljk1NTA2SDE0LjQ3OThWNC4xOTAwNloiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0xNC40Nzk4IDEuOTA1MDNIMTMuNzE0OFYyLjY3MDAzSDE0LjQ3OThWMS45MDUwM1oiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0xMy43MTUxIDQuOTU0OTZIMTIuOTU1MVY1LjcxNDk2SDEzLjcxNTFWNC45NTQ5NloiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0xMy43MTUxIDEuMTQ1MDJIMTIuOTU1MVYxLjkwNTAySDEzLjcxNTFWMS4xNDUwMloiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0xMi45NTUzIDUuNzE0OTdIMTIuMTk1M1Y2LjQ3OTk3SDEyLjk1NTNWNS43MTQ5N1oiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0xMi45NTUzIDQuMTkwMDZIMTIuMTk1M1Y0Ljk1NTA2SDEyLjk1NTNWNC4xOTAwNloiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0xMi45NTQ3IDAuMzgwMDA1SDExLjQyOTdWMS4xNDVIMTIuOTU0N1YwLjM4MDAwNVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0xMy43MTQ3IDkuNTI1MDJIMTEuNDI5N1YxMC4yODVIMTMuNzE0N1Y5LjUyNTAyWiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTEyLjE5NDcgNi40Nzk5OEgxMS40Mjk3VjcuMjM5OThIMTIuMTk0N1Y2LjQ3OTk4WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTEyLjE5NDcgMy40MzAwNUgxMS40Mjk3VjQuMTkwMDVIMTIuMTk0N1YzLjQzMDA1WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTExLjQyOTkgMTAuMjg1SDEwLjY2OTlWMTEuMDVIMTEuNDI5OVYxMC4yODVaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTEuNDI5OSA4Ljc2NTAxSDEwLjY2OTlWOS41MjUwMUgxMS40Mjk5VjguNzY1MDFaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTEuNDI5OSA3LjIzOTk5SDEwLjY2OTlWNy45OTk5OUgxMS40Mjk5VjcuMjM5OTlaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTEuNDI5OSA0LjE5MDA2SDEwLjY2OTlWNC45NTUwNkgxMS40Mjk5VjQuMTkwMDZaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTEuNDI5OSAyLjY3MDA0SDEwLjY2OTlWMy40MzAwNEgxMS40Mjk5VjIuNjcwMDRaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTEuNDI5OSAxLjE0NTAySDEwLjY2OTlWMS45MDUwMkgxMS40Mjk5VjEuMTQ1MDJaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTAuNjcwMyAxNC4wOTVIOS45MDUyN1YxNC44NkgxMC42NzAzVjE0LjA5NVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0xMC42NzAzIDExLjA1SDkuOTA1MjdWMTEuODFIMTAuNjcwM1YxMS4wNVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0xMC42NzAzIDhIOS45MDUyN1Y4Ljc2NUgxMC42NzAzVjhaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTAuNjcwMyA0Ljk1NDk2SDkuOTA1MjdWNS43MTQ5NkgxMC42NzAzVjQuOTU0OTZaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTAuNjcwMyAxLjkwNTAzSDkuOTA1MjdWMi42NzAwM0gxMC42NzAzVjEuOTA1MDNaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNOS45MDQ1MyAxMS44MTAxSDkuMTQ0NTNWMTQuMDk1MUg5LjkwNDUzVjExLjgxMDFaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNOS45MDQ1MyA4Ljc2NTAxSDkuMTQ0NTNWOS41MjUwMUg5LjkwNDUzVjguNzY1MDFaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNOS45MDQ1MyA1LjcxNDk3SDkuMTQ0NTNWNi40Nzk5N0g5LjkwNDUzVjUuNzE0OTdaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNOS45MDQ1MyAyLjY3MDA0SDkuMTQ0NTNWMy40MzAwNEg5LjkwNDUzVjIuNjcwMDRaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNOS4xNDQ3NyAxMS4wNUg4LjM4NDc3VjExLjgxSDkuMTQ0NzdWMTEuMDVaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNOS4xNDQ3NyA5LjUyNTAySDguMzg0NzdWMTAuMjg1SDkuMTQ0NzdWOS41MjUwMloiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik05LjE0NDc3IDYuNDc5OThIOC4zODQ3N1Y3LjIzOTk4SDkuMTQ0NzdWNi40Nzk5OFoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik05LjE0NDc3IDMuNDMwMDVIOC4zODQ3N1Y0LjE5MDA1SDkuMTQ0NzdWMy40MzAwNVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik04LjM4NTEyIDEwLjI4NUg3LjYyMDEyVjExLjA1SDguMzg1MTJWMTAuMjg1WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTguMzg1MTIgNy4yMzk5OUg3LjYyMDEyVjcuOTk5OTlIOC4zODUxMlY3LjIzOTk5WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTguMzg1MTIgNC4xOTAwNkg3LjYyMDEyVjQuOTU1MDZIOC4zODUxMlY0LjE5MDA2WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTcuNjIwMzUgMTEuMDVINi44NjAzNVYxMS44MUg3LjYyMDM1VjExLjA1WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTcuNjIwMzUgOEg2Ljg2MDM1VjguNzY1SDcuNjIwMzVWOFoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik03LjYyMDM1IDQuOTU0OTZINi44NjAzNVY1LjcxNDk2SDcuNjIwMzVWNC45NTQ5NloiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik02Ljg1OTYxIDExLjgxMDFINi4wOTk2MVYxMi41NzUxSDYuODU5NjFWMTEuODEwMVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik02Ljg1OTYxIDguNzY1MDFINi4wOTk2MVY5LjUyNTAxSDYuODU5NjFWOC43NjUwMVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik02Ljg1OTYxIDUuNzE0OTdINi4wOTk2MVY2LjQ3OTk3SDYuODU5NjFWNS43MTQ5N1oiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik02Ljg1OTYxIDQuMTkwMDZINi4wOTk2MVY0Ljk1NTA2SDYuODU5NjFWNC4xOTAwNloiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik02LjA5OTk2IDEyLjU3NUg1LjMzNDk2VjEzLjMzNUg2LjA5OTk2VjEyLjU3NVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik02LjA5OTk2IDkuNTI1MDJINS4zMzQ5NlYxMC4yODVINi4wOTk5NlY5LjUyNTAyWiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTYuMDk5OTYgNi40Nzk5OEg1LjMzNDk2VjcuMjM5OThINi4wOTk5NlY2LjQ3OTk4WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTYuMDk5OTYgMy40MzAwNUg1LjMzNDk2VjQuMTkwMDVINi4wOTk5NlYzLjQzMDA1WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTUuMzM1MiAxMy4zMzVINC41NzUyVjE0LjA5NUg1LjMzNTJWMTMuMzM1WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTUuMzM1MiAxMC4yODVINC41NzUyVjExLjA1SDUuMzM1MlYxMC4yODVaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNNS4zMzUyIDcuMjM5OTlINC41NzUyVjcuOTk5OTlINS4zMzUyVjcuMjM5OTlaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNNS4zMzUyIDIuNjcwMDRINC41NzUyVjMuNDMwMDRINS4zMzUyVjIuNjcwMDRaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNNC41NzQ1NyAxNC4wOTVIMy44MDk1N1YxNC44Nkg0LjU3NDU3VjE0LjA5NVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik00LjU3NDU3IDExLjA1SDMuODA5NTdWMTEuODFINC41NzQ1N1YxMS4wNVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik00LjU3NDU3IDhIMy44MDk1N1Y4Ljc2NUg0LjU3NDU3VjhaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNNC41NzQ1NyA2LjQ3OTk4SDMuODA5NTdWNy4yMzk5OEg0LjU3NDU3VjYuNDc5OThaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNNC41NzQ1NyAxLjkwNTAzSDMuODA5NTdWMi42NzAwM0g0LjU3NDU3VjEuOTA1MDNaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMy44MDk4IDEzLjMzNUgzLjA0OThWMTQuMDk1SDMuODA5OFYxMy4zMzVaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMy44MDk4IDExLjgxMDFIMy4wNDk4VjEyLjU3NTFIMy44MDk4VjExLjgxMDFaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMy44MDk4IDguNzY1MDFIMy4wNDk4VjkuNTI1MDFIMy44MDk4VjguNzY1MDFaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMy44MDk4IDUuNzE0OTdIMy4wNDk4VjYuNDc5OTdIMy44MDk4VjUuNzE0OTdaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMy44MDk4IDEuMTQ1MDJIMy4wNDk4VjEuOTA1MDJIMy44MDk4VjEuMTQ1MDJaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMi4yOSAxNC4wOTUxSDEuNTI1VjEzLjMzNTFIMC43NjVWMTEuODEwMUgwVjE1LjYyMDFIMy44MVYxNC44NjAxSDIuMjlWMTQuMDk1MVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0zLjA1MDA0IDEyLjU3NUgyLjI5MDA0VjEzLjMzNUgzLjA1MDA0VjEyLjU3NVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0zLjA1MDA0IDkuNTI1MDJIMi4yOTAwNFYxMC4yODVIMy4wNTAwNFY5LjUyNTAyWiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTMuMDUwMDQgNC45NTQ5NkgyLjI5MDA0VjUuNzE0OTZIMy4wNTAwNFY0Ljk1NDk2WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTMuMDUwMzkgMC4zODAwMDVIMS41MjUzOVYxLjE0NUgzLjA1MDM5VjAuMzgwMDA1WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTIuMjkwMzkgMTEuODEwMUgxLjUyNTM5VjEyLjU3NTFIMi4yOTAzOVYxMS44MTAxWiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTIuMjkwMzkgMTAuMjg1SDEuNTI1MzlWMTEuMDVIMi4yOTAzOVYxMC4yODVaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMi4yOTAzOSA0LjE5MDA2SDEuNTI1MzlWNC45NTUwNkgyLjI5MDM5VjQuMTkwMDZaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMS41MjQ2NSAxMS4wNUgwLjc2NDY0OFYxMS44MUgxLjUyNDY1VjExLjA1WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTEuNTI0NjUgMy40MzAwNUgwLjc2NDY0OFY0LjE5MDA1SDEuNTI0NjVWMy40MzAwNVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0xLjUyNDY1IDEuMTQ1MDJIMC43NjQ2NDhWMS45MDUwMkgxLjUyNDY1VjEuMTQ1MDJaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMC43NjUgMS45MDUwM0gwVjMuNDMwMDNIMC43NjVWMS45MDUwM1oiIGZpbGw9ImJsYWNrIi8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDBfOV8xMzU4Ij4KPHJlY3Qgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=);
+ --ecosystem-icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzlfMTM2NCkiPgo8cGF0aCBkPSJNMTMuNzE1MSAzLjA1MDA1SDEyLjk1NTFWMTIuOTU1SDEzLjcxNTFWMTIuMTlIMTYuMDAwMVYxMS40M0gxMy43MTUxVjkuOTA1MDVIMTYuMDAwMVY5LjE0NTA1SDEzLjcxNTFWNi44NjAwNUgxNi4wMDAxVjYuMDk1MDVIMTMuNzE1MVY0LjU3NTA1SDE2LjAwMDFWMy44MTAwNUgxMy43MTUxVjMuMDUwMDVaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMy4wNDk4IDEyLjk1NVYxMy43MTVIMy44MDk4VjE2SDQuNTY5OFYxMy43MTVINi4wOTQ4VjE2SDYuODU5OFYxMy43MTVIOS4xNDQ4VjE2SDkuOTA0OFYxMy43MTVIMTEuNDI5OFYxNkgxMi4xODk4VjEzLjcxNUgxMi45NTQ4VjEyLjk1NUgzLjA0OThaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTEuNDI5NiAzLjgxMDA2SDQuNTY5NTdWNC41NzUwNkgzLjgwOTU3VjExLjQzMDFINC41Njk1N1YxMC42NzAxSDYuMDk0NTdWOS45MDUwNkg3LjYxOTU3VjkuMTQ1MDZIOC4zNzk1N1Y4LjM4NTA2SDkuMTQ0NTdWNy42MjAwNkg5LjkwNDU3VjYuODYwMDZIMTAuNjY0NlY1LjMzNTA2SDExLjQyOTZWMTEuNDMwMUgxMi4xODk2VjQuNTc1MDZIMTEuNDI5NlYzLjgxMDA2Wk02Ljg1OTU3IDcuNjIwMDZINS4zMzQ1N1Y2Ljg2MDA2SDYuODU5NTdWNy42MjAwNlpNOS4xNDQ1NyA2LjA5NTA2SDUuMzM0NTdWNS4zMzUwNkg5LjE0NDU3VjYuMDk1MDZaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTEuNDMwMyAxMS40MzAxSDQuNTcwMzFWMTIuMTkwMUgxMS40MzAzVjExLjQzMDFaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTAuNjY1MyA5LjkwNTAzSDkuOTA1MjdWMTAuNjdIMTAuNjY1M1Y5LjkwNTAzWiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTkuMTQ0ODggOS45MDUwM0g4LjM3OTg4VjEwLjY3SDkuMTQ0ODhWOS45MDUwM1oiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0xMi45NTQ4IDMuMDVWMi4yOUgxMi4xODk4VjBIMTEuNDI5OFYyLjI5SDkuOTA0OFYwSDkuMTQ0OFYyLjI5SDYuODU5OFYwSDYuMDk0OFYyLjI5SDQuNTY5OFYwSDMuODA5OFYyLjI5SDMuMDQ5OFYzLjA1SDEyLjk1NDhaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMy4wNSAzLjA1MDA1SDIuMjg1VjMuODEwMDVIMFY0LjU3NTA1SDIuMjg1VjYuMDk1MDVIMFY2Ljg2MDA1SDIuMjg1VjkuMTQ1MDVIMFY5LjkwNTA1SDIuMjg1VjExLjQzSDBWMTIuMTlIMi4yODVWMTIuOTU1SDMuMDVWMy4wNTAwNVoiIGZpbGw9ImJsYWNrIi8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDBfOV8xMzY0Ij4KPHJlY3Qgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=);
+ --faq-icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTExLjA1MDEgNy42MjAwNlY4LjM4MDA2SDkuNTI1MDhWOS4xNDUwNkg0Ljk1NTA4VjkuOTA1MDZINy4yNDAwOFYxMC42NjUxSDguMDAwMDhWMTEuNDMwMUg4Ljc2NTA4VjEyLjE5MDFIMTEuODEwMVYxMi45NTAxSDEyLjU3NTFWMTMuNzE1MUgxMy4zMzUxVjE0LjQ3NTFIMTQuMDk1MVYxMS40MzAxSDE0Ljg2MDFWMTAuNjY1MUgxNS42MjAxVjcuNjIwMDZIMTQuODYwMVY2Ljg1NTA2SDE0LjA5NTFWNi4wOTUwNkgxMi41NzUxVjMuODEwMDZIMTEuODEwMVY3LjYyMDA2SDExLjA1MDFaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTEuODA5OCAzLjA0NTA0SDExLjA0OThWMy44MTAwNEgxMS44MDk4VjMuMDQ1MDRaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTAuMjg0NiA1LjMzNTA4SDguNzY0NjVWNi44NTUwOEgxMC4yODQ2VjUuMzM1MDhaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTEuMDQ5NCAyLjI4NTAzSDkuNTI0NDFWMy4wNDUwM0gxMS4wNDk0VjIuMjg1MDNaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNNy4yMzk4NCA1LjMzNTA4SDUuNzE0ODRWNi44NTUwOEg3LjIzOTg0VjUuMzM1MDhaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNNC45NTQ0NSA5LjkwNTAzSDQuMTg5NDVWMTAuNjY1SDQuOTU0NDVWOS45MDUwM1oiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik05LjUyNDY5IDEuNTI1MDJIMy40Mjk2OVYyLjI4NTAySDkuNTI0NjlWMS41MjUwMloiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0zLjQyOTkyIDkuMTQ1MDJIMi42Njk5MlYxMi4xOUgzLjQyOTkyVjExLjQzSDQuMTg5OTJWMTAuNjY1SDMuNDI5OTJWOS4xNDUwMloiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik00LjE4OTkyIDUuMzM1MDhIMi42Njk5MlY2Ljg1NTA4SDQuMTg5OTJWNS4zMzUwOFoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0zLjQzMDI3IDIuMjg1MDNIMS45MDUyN1YzLjA0NTAzSDMuNDMwMjdWMi4yODUwM1oiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0yLjY3MDI3IDguMzhIMS45MDUyN1Y5LjE0NTAxSDIuNjcwMjdWOC4zOFoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0xLjkwNDUzIDcuNjJIMS4xNDQ1M1Y4LjM4SDEuOTA0NTNWNy42MloiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0xLjkwNDUzIDMuMDQ1MDRIMS4xNDQ1M1YzLjgxMDA0SDEuOTA0NTNWMy4wNDUwNFoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0xLjE0NDg4IDMuODEwMDZIMC4zNzk4ODNWNy42MjAwNkgxLjE0NDg4VjMuODEwMDZaIiBmaWxsPSJibGFjayIvPgo8L3N2Zz4K);
+ --api-icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE0Ljg1NzggNS4zMzI1MkgxNC4wOTI4VjEwLjY2NzVIMTQuODU3OFY1LjMzMjUyWiIgZmlsbD0iIzAwMDAwMSIvPgo8cGF0aCBkPSJNMTQuMDkzIDEwLjY2NzVIMTMuMzMzVjExLjQyNzVIMTQuMDkzVjEwLjY2NzVaIiBmaWxsPSIjMDAwMDAxIi8+CjxwYXRoIGQ9Ik0xNC4wOTMgNC41NzI1MUgxMy4zMzNWNS4zMzI1MUgxNC4wOTNWNC41NzI1MVoiIGZpbGw9IiMwMDAwMDEiLz4KPHBhdGggZD0iTTEzLjMzMjYgNS4zMzI1MkgxMS44MDc2VjYuMDkyNTJIMTMuMzMyNlY1LjMzMjUyWiIgZmlsbD0iIzAwMDAwMSIvPgo8cGF0aCBkPSJNMTMuMzMyNiAxMS40Mjc1SDExLjgwNzZWMTIuMTkyNUgxMy4zMzI2VjExLjQyNzVaIiBmaWxsPSIjMDAwMDAxIi8+CjxwYXRoIGQ9Ik0xMi41NzI1IDQuNTcyNDlWMy44MDc0OUgxMS44MDc1VjMuMDQ3NDlIMTAuMjg3NVYzLjgwNzQ5SDkuNTIyNDZWNC41NzI0OUgxMC4yODc1VjUuMzMyNDlIMTEuODA3NVY0LjU3MjQ5SDEyLjU3MjVaIiBmaWxsPSIjMDAwMDAxIi8+CjxwYXRoIGQ9Ik0xMS44MDcxIDYuMDkyNDFIMTAuMjg3MVY2Ljg1NzQxSDExLjgwNzFWNi4wOTI0MVoiIGZpbGw9IiMwMDAwMDEiLz4KPHBhdGggZD0iTTExLjgwNzEgMTIuMTkyNUgxMC4yODcxVjEyLjk1MjVIMTEuODA3MVYxMi4xOTI1WiIgZmlsbD0iIzAwMDAwMSIvPgo8cGF0aCBkPSJNOC43NjIzIDE0LjQ3NzRWMTMuNzEyNEgxMC4yODczVjEyLjk1MjRIOC43NjIzVjcuNjE3NDNINy4yMzczVjguMzgyNDNINy45OTczVjEzLjcxMjRINy4yMzczVjE0LjQ3NzRIOC43NjIzWiIgZmlsbD0iIzAwMDAwMSIvPgo8cGF0aCBkPSJNMTAuMjg3NyA2Ljg1NzQySDguNzYyN1Y3LjYxNzQySDEwLjI4NzdWNi44NTc0MloiIGZpbGw9IiMwMDAwMDEiLz4KPHBhdGggZD0iTTguNzYyNTQgNi4wOTI1MUg5LjUyMjU0VjUuMzMyNTFIOC43NjI1NFY0LjU3MjUxSDcuMjM3NTRWNS4zMzI1MUg2LjQ3NzU0VjYuMDkyNTFINy4yMzc1NFY2Ljg1NzUxSDguNzYyNTRWNi4wOTI1MVoiIGZpbGw9IiMwMDAwMDEiLz4KPHBhdGggZD0iTTcuMjM3NTQgMS41MjI0NlYyLjI4NzQ2SDYuNDc3NTRWMy4wNDc0Nkg3LjIzNzU0VjMuODA3NDZIOC43NjI1NFYzLjA0NzQ2SDkuNTIyNTRWMi4yODc0Nkg4Ljc2MjU0VjEuNTIyNDZINy4yMzc1NFoiIGZpbGw9IiMwMDAwMDEiLz4KPHBhdGggZD0iTTcuMjM3ODkgMTIuOTUyNUg1LjcxMjg5VjEzLjcxMjVINy4yMzc4OVYxMi45NTI1WiIgZmlsbD0iIzAwMDAwMSIvPgo8cGF0aCBkPSJNNy4yMzc4OSA2Ljg1NzQySDUuNzEyODlWNy42MTc0Mkg3LjIzNzg5VjYuODU3NDJaIiBmaWxsPSIjMDAwMDAxIi8+CjxwYXRoIGQ9Ik01LjcxMjM4IDEyLjE5MjVINC4xOTIzOFYxMi45NTI1SDUuNzEyMzhWMTIuMTkyNVoiIGZpbGw9IiMwMDAwMDEiLz4KPHBhdGggZD0iTTUuNzEyNzMgNC41NzI0OUg2LjQ3NzczVjMuODA3NDlINS43MTI3M1YzLjA0NzQ5SDQuMTkyNzNWMy44MDc0OUgzLjQyNzczVjQuNTcyNDlINC4xOTI3M1Y1LjMzMjQ5SDUuNzEyNzNWNC41NzI0OVoiIGZpbGw9IiMwMDAwMDEiLz4KPHBhdGggZD0iTTUuNzEyMzggNi4wOTI0MUg0LjE5MjM4VjYuODU3NDFINS43MTIzOFY2LjA5MjQxWiIgZmlsbD0iIzAwMDAwMSIvPgo8cGF0aCBkPSJNNC4xOTI5NyAxMS40Mjc1SDIuNjY3OTdWMTIuMTkyNUg0LjE5Mjk3VjExLjQyNzVaIiBmaWxsPSIjMDAwMDAxIi8+CjxwYXRoIGQ9Ik00LjE5Mjk3IDUuMzMyNTJIMi42Njc5N1Y2LjA5MjUySDQuMTkyOTdWNS4zMzI1MloiIGZpbGw9IiMwMDAwMDEiLz4KPHBhdGggZD0iTTIuNjY3MzQgMTAuNjY3NUgxLjkwMjM0VjExLjQyNzVIMi42NjczNFYxMC42Njc1WiIgZmlsbD0iIzAwMDAwMSIvPgo8cGF0aCBkPSJNMi42NjczNCA0LjU3MjUxSDEuOTAyMzRWNS4zMzI1MUgyLjY2NzM0VjQuNTcyNTFaIiBmaWxsPSIjMDAwMDAxIi8+CjxwYXRoIGQ9Ik0xLjkwMjU4IDUuMzMyNTJIMS4xNDI1OFYxMC42Njc1SDEuOTAyNThWNS4zMzI1MloiIGZpbGw9IiMwMDAwMDEiLz4KPC9zdmc+Cg==);
+ --user-guide-icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzEwXzE4ODApIj4KPHBhdGggZD0iTTEuOTA1MjcgMC43NkgxNC4wOTUzVjEuNTI1SDIuNjcwMjdWMi4yODVIMTQuMDk1M1YzLjA1SDEuOTA1MjdWMy44MUgyLjY3MDI3VjE1LjI0SDEuOTA1MjdWMTZIMTQuODYwM1YxNS4yNEgzLjQzMDI3VjMuODFIMTQuODYwM1YxNS4yNEgxNS42MjAzVjMuMDVIMTQuODYwM1YwLjc2SDE1LjYyMDNWMEgxLjkwNTI3VjAuNzZaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTIuNTc0NiAxMi4xOUgxMS44MDk2VjEyLjk1NUgxMi41NzQ2VjEyLjE5WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTEyLjU3NTEgNi4wOTUwMkgxMS44MTAxVjUuMzM1MDJINi40ODAwOFY2LjA5NTAySDUuNzE1MDhWNi44NjAwMkg0Ljk1NTA4VjEyLjE5SDUuNzE1MDhWOS4xNDUwMkg2LjQ4MDA4VjguMzgwMDJINy4yNDAwOFY3LjYyMDAySDExLjA1MDFWOC4zODAwMkgxMS44MTAxVjkuMTQ1MDJIMTIuNTc1MVYxMi4xOUgxMy4zMzUxVjYuODYwMDJIMTIuNTc1MVY2LjA5NTAyWiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTExLjgwOTUgMTIuOTU1SDYuNDc5NDlWMTMuNzE1SDExLjgwOTVWMTIuOTU1WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTExLjA1MDIgMTAuNjY1SDEwLjI4NTJWMTEuNDNIMTEuMDUwMlYxMC42NjVaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTEuMDUwMiA5LjE0NTAySDEwLjI4NTJWOS45MDUwMkgxMS4wNTAyVjkuMTQ1MDJaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTAuMjg1IDExLjQzSDhWMTIuMTlIMTAuMjg1VjExLjQzWiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTguMDAwMjMgMTAuNjY1SDcuMjQwMjNWMTEuNDNIOC4wMDAyM1YxMC42NjVaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNOC4wMDAyMyA5LjE0NTAySDcuMjQwMjNWOS45MDUwMkg4LjAwMDIzVjkuMTQ1MDJaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNNi40Nzk4NCAxMi4xOUg1LjcxNDg0VjEyLjk1NUg2LjQ3OTg0VjEyLjE5WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTEuOTA0NTMgMTQuNDc1SDEuMTQ0NTNWMTUuMjRIMS45MDQ1M1YxNC40NzVaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMS45MDQ1MyAwLjc2MDAxSDEuMTQ0NTNWMS41MjUwMUgxLjkwNDUzVjAuNzYwMDFaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMS4xNDQ4OCAzLjA1MDAySDEuOTA0ODhWMi4yODUwMkgxLjE0NDg4VjEuNTI1MDJIMC4zNzk4ODNWMTQuNDc1SDEuMTQ0ODhWMy4wNTAwMloiIGZpbGw9ImJsYWNrIi8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDBfMTBfMTg4MCI+CjxyZWN0IHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K);
+ --use-cases-icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzlfMTIyMCkiPgo8cGF0aCBkPSJNMTYuMDAwMiA4LjAwMjVIMTUuMjQwMlYxMS44MTI1SDE2LjAwMDJWOC4wMDI1WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTE1LjIzOTYgMTEuODEyNUgxNC40NzQ2VjEzLjMzMjVIMTUuMjM5NlYxMS44MTI1WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTE1LjIzOTYgNi40Nzc0OEgxNC40NzQ2VjguMDAyNDhIMTUuMjM5NlY2LjQ3NzQ4WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTE0LjQ3NDggMTMuMzMyNUgxMy43MTQ4VjE0Ljg1NzVIMTQuNDc0OFYxMy4zMzI1WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTE0LjQ3NDggNS43MTI1MkgxMy43MTQ4VjYuNDc3NTJIMTQuNDc0OFY1LjcxMjUyWiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTEzLjcxNTIgMTQuODU3NUgxMi45NTAyVjE1LjYxNzVIMTMuNzE1MlYxNC44NTc1WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTEzLjcxNTIgMTAuMjg3NUgxMi45NTAyVjExLjgxMjVIMTMuNzE1MlYxMC4yODc1WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTEzLjcxNTIgOC4wMDI1SDEyLjk1MDJWOS41MjI1SDEzLjcxNTJWOC4wMDI1WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTEzLjcxNTIgNC45NTI1MUgxMi45NTAyVjUuNzEyNTFIMTMuNzE1MlY0Ljk1MjUxWiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTEyLjk1MDQgMTEuODEyNUgxMi4xOTA0VjEyLjU3MjVIMTIuOTUwNFYxMS44MTI1WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTEyLjk1MDQgNS43MTI1MkgxMi4xOTA0VjguMDAyNTJIMTIuOTUwNFY1LjcxMjUyWiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTEyLjk1MDQgMi42Njc0OEgxMi4xOTA0VjMuNDI3NDhIMTIuOTUwNFYyLjY2NzQ4WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTEyLjE4OTcgMTIuNTcyNUgxMS40Mjk3VjEzLjMzMjVIMTIuMTg5N1YxMi41NzI1WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTEyLjk0OTcgOS41MjI1MkgxMS40Mjk3VjEwLjI4NzVIMTIuOTQ5N1Y5LjUyMjUyWiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTEyLjE4OTcgMy40Mjc0OUgxMS40Mjk3VjQuMTkyNDlIMTIuMTg5N1YzLjQyNzQ5WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTEyLjE4OTcgMS45MDc1M0gxMS40Mjk3VjIuNjY3NTNIMTIuMTg5N1YxLjkwNzUzWiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTExLjQzIDEwLjI4NzVIMTAuNjY1VjExLjA0NzVIMTEuNDNWMTAuMjg3NVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0xMS40MyA0LjE5MjVIMTAuNjY1VjQuOTUyNUgxMS40M1Y0LjE5MjVaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTEuNDMgMS4xNDI1MkgxMC42NjVWMS45MDc1MkgxMS40M1YxLjE0MjUyWiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTEwLjY2NTMgMTQuODU3NUg5LjkwNTI3VjE1LjYxNzVIMTAuNjY1M1YxNC44NTc1WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTEwLjY2NTMgMTEuMDQ3NUg5LjkwNTI3VjExLjgxMjVIMTAuNjY1M1YxMS4wNDc1WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTEwLjY2NTMgNC45NTI1MUg5LjkwNTI3VjUuNzEyNTFIMTAuNjY1M1Y0Ljk1MjUxWiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTEwLjY2NTMgMC4zODI1MDdIOS45MDUyN1YxLjE0MjUxSDEwLjY2NTNWMC4zODI1MDdaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNOS45MDQ1MyAxMS44MTI1SDkuMTQ0NTNWMTQuODU3NUg5LjkwNDUzVjExLjgxMjVaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNOS4xNDQ4OCAwLjM4MjUwN0g4LjM3OTg4VjEuOTA3NTFIOS4xNDQ4OFYwLjM4MjUwN1oiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik04LjM4MDEyIDEuOTA3NTNINy42MjAxMlY0LjE5MjUzSDguMzgwMTJWMS45MDc1M1oiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik03LjYyMDQ3IDQuMTkyNUg2Ljg1NTQ3VjUuNzEyNUg3LjYyMDQ3VjQuMTkyNVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik02Ljg1NDczIDExLjgxMjVINi4wOTQ3M1YxNC44NTc1SDYuODU0NzNWMTEuODEyNVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik02LjA5NDk2IDE0Ljg1NzVINS4zMzQ5NlYxNS42MTc1SDYuMDk0OTZWMTQuODU3NVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik02LjA5NDk2IDExLjA0NzVINS4zMzQ5NlYxMS44MTI1SDYuMDk0OTZWMTEuMDQ3NVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik02LjA5NDk2IDQuOTUyNTFINS4zMzQ5NlY1LjcxMjUxSDYuMDk0OTZWNC45NTI1MVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik02LjA5NDk2IDAuMzgyNTA3SDUuMzM0OTZWMS4xNDI1MUg2LjA5NDk2VjAuMzgyNTA3WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTUuMzM1MzEgMTAuMjg3NUg0LjU3MDMxVjExLjA0NzVINS4zMzUzMVYxMC4yODc1WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTUuMzM1MzEgNC4xOTI1SDQuNTcwMzFWNC45NTI1SDUuMzM1MzFWNC4xOTI1WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTUuMzM1MzEgMS4xNDI1Mkg0LjU3MDMxVjEuOTA3NTJINS4zMzUzMVYxLjE0MjUyWiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTQuNTY5NTcgMTIuNTcyNUgzLjgwOTU3VjEzLjMzMjVINC41Njk1N1YxMi41NzI1WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTQuNTY5OCA5LjUyMjUySDMuMDQ5OFYxMC4yODc1SDQuNTY5OFY5LjUyMjUyWiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTQuNTY5NTcgMy40Mjc0OUgzLjgwOTU3VjQuMTkyNDlINC41Njk1N1YzLjQyNzQ5WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTQuNTY5NTcgMS45MDc1M0gzLjgwOTU3VjIuNjY3NTNINC41Njk1N1YxLjkwNzUzWiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTMuODA5OCAxMS44MTI1SDMuMDQ5OFYxMi41NzI1SDMuODA5OFYxMS44MTI1WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTMuODA5OCA1LjcxMjUySDMuMDQ5OFY4LjAwMjUySDMuODA5OFY1LjcxMjUyWiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTMuODA5OCAyLjY2NzQ4SDMuMDQ5OFYzLjQyNzQ4SDMuODA5OFYyLjY2NzQ4WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTMuMDUwMTYgMTQuODU3NUgyLjI4NTE2VjE1LjYxNzVIMy4wNTAxNlYxNC44NTc1WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTMuMDUwMTYgMTAuMjg3NUgyLjI4NTE2VjExLjgxMjVIMy4wNTAxNlYxMC4yODc1WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTMuMDUwMTYgOC4wMDI1SDIuMjg1MTZWOS41MjI1SDMuMDUwMTZWOC4wMDI1WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTMuMDUwMTYgNC45NTI1MUgyLjI4NTE2VjUuNzEyNTFIMy4wNTAxNlY0Ljk1MjUxWiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTIuMjg1MzkgMTMuMzMyNUgxLjUyNTM5VjE0Ljg1NzVIMi4yODUzOVYxMy4zMzI1WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTIuMjg1MzkgNS43MTI1MkgxLjUyNTM5VjYuNDc3NTJIMi4yODUzOVY1LjcxMjUyWiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTEuNTI0NzcgMTEuODEyNUgwLjc1OTc2NlYxMy4zMzI1SDEuNTI0NzdWMTEuODEyNVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0xLjUyNDc3IDYuNDc3NDhIMC43NTk3NjZWOC4wMDI0OEgxLjUyNDc3VjYuNDc3NDhaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMC43NiA4LjAwMjVIMFYxMS44MTI1SDAuNzZWOC4wMDI1WiIgZmlsbD0iYmxhY2siLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF85XzEyMjAiPgo8cmVjdCB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9IndoaXRlIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==);
+ --tutorials-icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzlfMTE5MykiPgo8cGF0aCBkPSJNMTQuNDggMy4wNVYwSDYuODZWMC43NkgzLjgxVjEuNTI1SDEuNTI1VjYuODZIMC43NjVWOC4zOEgwVjE2SDE2VjMuMDVIMTQuNDhaTTMuODEgMTUuMjRIMC43NjVWMTAuNjY1SDMuODFWMTUuMjRaTTMuODEgOS45MDVIMi4yOVYyLjI4NUgzLjgxVjkuOTA1Wk00LjU3NSAxLjUyNUg2Ljg2VjIuMjg1SDUuMzM1VjkuOTA1SDQuNTc1VjEuNTI1Wk02Ljg2IDMuMDVWOS45MDVINi4xVjMuMDVINi44NlpNNy42MiAxNS4yNEg0LjU3NVYxMC42NjVINy42MlYxNS4yNFpNMTUuMjQgMTUuMjRIOC4zODVWOS45MDVINy42MlYwLjc2SDEzLjcxNVYzLjA1SDExLjQzVjMuODFIMTUuMjRWMTUuMjRaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTMuNzE1MSAxMC42NjVIMTIuOTU1MVYxMS40M0gxMy43MTUxVjEwLjY2NVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0xMy43MTUxIDkuMTQ0OTlIMTIuOTU1MVY5LjkwNDk5SDEzLjcxNTFWOS4xNDQ5OVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0xMi45NTQ3IDExLjQzSDExLjQyOTdWMTIuMTlIMTIuOTU0N1YxMS40M1oiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0xMS40Mjk5IDEwLjY2NUgxMC42Njk5VjExLjQzSDExLjQyOTlWMTAuNjY1WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTExLjQyOTkgOS4xNDQ5OUgxMC42Njk5VjkuOTA0OTlIMTEuNDI5OVY5LjE0NDk5WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTExLjQyOTkgMy44MUgxMC42Njk5VjUuMzM1SDExLjQyOTlWMy44MVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0xMC42NzAzIDUuMzM0OTlIOS45MDUyN1Y2Ljg1OTk5SDEwLjY3MDNWNS4zMzQ5OVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik05LjkwNDUzIDYuODU5OTlIOS4xNDQ1M1Y4LjM3OTk5SDkuOTA0NTNWNi44NTk5OVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik05LjkwNDUzIDEuNTI0OTlIOS4xNDQ1M1YyLjI4NDk5SDkuOTA0NTNWMS41MjQ5OVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik05LjE0NDc3IDguMzhIOC4zODQ3N1Y5LjkwNUg5LjE0NDc3VjguMzhaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNNi44NTk5NiAxMi4xOUg1LjMzNDk2VjEzLjcxNUg2Ljg1OTk2VjEyLjE5WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTMuMDUwMzkgMTIuMTlIMS41MjUzOVYxMy43MTVIMy4wNTAzOVYxMi4xOVoiIGZpbGw9ImJsYWNrIi8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDBfOV8xMTkzIj4KPHJlY3Qgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=);
+ --installation-icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzlfMTE2NCkiPgo8cGF0aCBkPSJNMTQuNDc0NiAzLjgxVjQuNTdIMTUuMjM5NlY1LjMzNUgxNC40NzQ2VjYuMDk1SDE1Ljk5OTZWMy44MUgxNC40NzQ2WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTE1LjIzOTYgNi44NTUwMUgxNC40NzQ2VjcuNjIwMDFIMTUuMjM5NlY2Ljg1NTAxWiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTE1LjIzOTYgMi4yODVIMTQuNDc0NlYzLjA0NUgxNS4yMzk2VjIuMjg1WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTE0LjQ3NDggNy42MkgxMy43MTQ4VjguMzhIMTQuNDc0OFY3LjYyWiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTE0LjQ3NDggNi4wOTVIMTMuNzE0OFY2Ljg1NUgxNC40NzQ4VjYuMDk1WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTE0LjQ3NDggMy4wNDUwMUgxMy43MTQ4VjMuODEwMDFIMTQuNDc0OFYzLjA0NTAxWiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTE0LjQ3NDggMS41MjQ5OUgxMy43MTQ4VjIuMjg0OTlIMTQuNDc0OFYxLjUyNDk5WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTEzLjcxNTEgOC4zOEgxMi45NTUxVjkuMTQwMDFIMTMuNzE1MVY4LjM4WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTEzLjcxNTEgMC43NjAwMUgxMi45NTUxVjEuNTI1MDFIMTMuNzE1MVYwLjc2MDAxWiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTEyLjk1NTQgNy42MkgxMi4xOTA0VjguMzhIMTIuOTU1NFY3LjYyWiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTEyLjk1NTQgMS41MjQ5OUgxMi4xOTA0VjIuMjg0OTlIMTIuOTU1NFYxLjUyNDk5WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTkuOTA1MjcgMFYxLjUyNUgxMC42NzAzVjAuNzZIMTEuNDMwM1YxLjUyNUgxMi4xOTAzVjBIOS45MDUyN1oiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0xMS40Mjk5IDEyLjk1SDEwLjY2OTlWMTMuNzE1SDExLjQyOTlWMTIuOTVaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNOS45MDUyNyA4LjM4VjkuMTQwMDFIMTEuNDMwM1YxMC42NjVIOS45MDUyN1YxMS40M0gxMi4xOTAzVjguMzhIOS45MDUyN1oiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0xMC42NzAzIDEzLjcxNUg5LjkwNTI3VjE0LjQ3NUgxMC42NzAzVjEzLjcxNVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0xMC42NzAzIDEyLjE5SDkuOTA1MjdWMTIuOTVIMTAuNjcwM1YxMi4xOVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0xMC42NzAzIDYuODU1MDFIOS45MDUyN1Y3LjYyMDAxSDEwLjY3MDNWNi44NTUwMVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik05LjkwNDUzIDYuMDk1MDFIMTAuNjY5NVY2Ljg1NTAxSDEyLjE4OTVWNi4wOTUwMUgxMi45NTQ1VjMuODEwMDFIMTIuMTg5NVY0LjU3MDAxSDExLjQyOTVWMy44MTAwMUgxMi4xODk1VjMuMDQ1MDFIOS45MDQ1M1YzLjgxMDAxSDkuMTQ0NTNWNS4zMzUwMUg5LjkwNDUzVjYuMDk1MDFaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNOS45MDQ1MyAxNC40NzVIOS4xNDQ1M1YxNS4yNEg5LjkwNDUzVjE0LjQ3NVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik05LjkwNDUzIDExLjQzSDkuMTQ0NTNWMTIuMTlIOS45MDQ1M1YxMS40M1oiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik05LjkwNDUzIDcuNjJIOS4xNDQ1M1Y4LjM4SDkuOTA0NTNWNy42MloiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik05LjkwNDUzIDEuNTI0OTlIOS4xNDQ1M1YyLjI4NDk5SDkuOTA0NTNWMS41MjQ5OVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik05LjE0NDg4IDEzLjcxNUg4LjM3OTg4VjE0LjQ3NUg5LjE0NDg4VjEzLjcxNVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik05LjE0NDg4IDUuMzM0OTlIOC4zNzk4OFY2LjA5NDk5SDkuMTQ0ODhWNS4zMzQ5OVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik05LjE0NDg4IDAuNzYwMDFIOC4zNzk4OFYxLjUyNTAxSDkuMTQ0ODhWMC43NjAwMVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik04LjM4MDEyIDEyLjk1SDcuNjIwMTJWMTMuNzE1SDguMzgwMTJWMTIuOTVaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNOC4zODAxMiA5LjE0MDAxSDcuNjIwMTJWMTAuNjY1SDguMzgwMTJWOS4xNDAwMVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik04LjM4MDEyIDYuMDk1SDcuNjIwMTJWNi44NTVIOC4zODAxMlY2LjA5NVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik04LjM4MDEyIDEuNTI0OTlINy42MjAxMlYyLjI4NDk5SDguMzgwMTJWMS41MjQ5OVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik02Ljg2MDIgMTUuMjRINS4zMzUyVjEzLjcxNUg0LjU3NTJWMTZINy42MjAyVjEzLjcxNUg2Ljg2MDJWMTUuMjRaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNNy42MjAzNSAxMC42NjVINi44NjAzNVYxMS40M0g3LjYyMDM1VjEwLjY2NVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik03LjYyMDM1IDguMzhINi44NjAzNVY5LjE0MDAxSDcuNjIwMzVWOC4zOFoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik03LjYyMDM1IDIuMjg1SDYuODYwMzVWMy4wNDVINy42MjAzNVYyLjI4NVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik02Ljg1OTk2IDcuNjJINS4zMzQ5NlY4LjM4SDYuODU5OTZWNy42MloiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik02Ljg1OTk2IDExLjQzSDUuMzM0OTZWMTIuMTlINi44NTk5NlYxMS40M1oiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik01LjMzNTIgMTAuNjY1SDQuNTc1MlYxMS40M0g1LjMzNTJWMTAuNjY1WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTUuMzM1MiA4LjM4SDQuNTc1MlY5LjE0MDAxSDUuMzM1MlY4LjM4WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTUuMzM1MiA0LjU3SDYuODYwMlY2LjA5NUg3LjYyMDJWMy44MUg0LjU3NTJWNi4wOTVINS4zMzUyVjQuNTdaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNNC41NzQ1NyAxMi45NUgzLjgwOTU3VjEzLjcxNUg0LjU3NDU3VjEyLjk1WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTQuNTc0NTcgOS4xNDAwMUgzLjgwOTU3VjEwLjY2NUg0LjU3NDU3VjkuMTQwMDFaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNNC41NzQ1NyA2LjA5NUgzLjgwOTU3VjYuODU1SDQuNTc0NTdWNi4wOTVaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMy44MDk4IDEzLjcxNUgzLjA0OThWMTQuNDc1SDMuODA5OFYxMy43MTVaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMy44MDk4IDUuMzM0OTlIMy4wNDk4VjYuMDk0OTlIMy44MDk4VjUuMzM0OTlaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMy4wNTAxNiAxNC40NzVIMi4yODUxNlYxNS4yNEgzLjA1MDE2VjE0LjQ3NVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0zLjA1MDE2IDExLjQzSDIuMjg1MTZWMTIuMTlIMy4wNTAxNlYxMS40M1oiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0zLjA1MDE2IDcuNjJIMi4yODUxNlY4LjM4SDMuMDUwMTZWNy42MloiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0zLjA1MDE2IDQuNTcwMDFIMi4yODUxNlY1LjMzNTAxSDMuMDUwMTZWNC41NzAwMVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0yLjI4NTM5IDEzLjcxNUgxLjUyNTM5VjE0LjQ3NUgyLjI4NTM5VjEzLjcxNVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0yLjI4NTM5IDEyLjE5SDEuNTI1MzlWMTIuOTVIMi4yODUzOVYxMi4xOVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0wLjc2NSAxMC42NjVWOS4xNDAwMUgyLjI4NVY4LjM4SDBWMTEuNDNIMi4yODVWMTAuNjY1SDAuNzY1WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTIuMjg1MzkgNi44NTUwMUgxLjUyNTM5VjcuNjIwMDFIMi4yODUzOVY2Ljg1NTAxWiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTIuMjg1MzkgNS4zMzQ5OUgxLjUyNTM5VjYuMDk0OTlIMi4yODUzOVY1LjMzNDk5WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTEuNTI0NjUgMTIuOTVIMC43NjQ2NDhWMTMuNzE1SDEuNTI0NjVWMTIuOTVaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMS41MjQ2NSA2LjA5NUgwLjc2NDY0OFY2Ljg1NUgxLjUyNDY1VjYuMDk1WiIgZmlsbD0iYmxhY2siLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF85XzExNjQiPgo8cmVjdCB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9IndoaXRlIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==);
+ --getting-started-icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzlfMTAxNykiPgo8cGF0aCBkPSJNMTUuNjE3NCAxMC42Njc1SDE0Ljg1NzRWMTEuNDI3NUgxNS42MTc0VjEwLjY2NzVaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTUuNjE3NCAzLjA0NzUySDE0Ljg1NzRWMy44MDc1MkgxNS42MTc0VjMuMDQ3NTJaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTQuODU3NyA5LjE0MjUySDE0LjA5NzdWMTAuNjY3NUgxNC44NTc3VjkuMTQyNTJaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTQuODU3NyAzLjgwNzUzSDE0LjA5NzdWNS4zMzI1M0gxNC44NTc3VjMuODA3NTNaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNOS41MjI4MSAxMS40Mjc1VjMuMDQ3NTJIMTQuODU3OFYyLjI4NzUySDkuNTIyODFWMS41MjI1Mkg4Ljc2MjgxVjkuOTAyNTJIMS4xNDI4MVYxLjUyMjUySDAuMzgyODEyVjE1LjIzNzVIMS4xNDI4MVYxMC42Njc1SDcuMjM3ODFWMTEuNDI3NUg4LjAwMjgxVjEyLjE4NzVIMTQuODU3OFYxMS40Mjc1SDkuNTIyODFaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTQuMDk4IDcuNjE3NTJIMTMuMzMzVjkuMTQyNTJIMTQuMDk4VjcuNjE3NTJaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTQuMDk4IDUuMzMyNTJIMTMuMzMzVjYuODU3NTJIMTQuMDk4VjUuMzMyNTJaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTMuMzMzMiA2Ljg1NzUxSDEyLjU3MzJWNy42MTc1MUgxMy4zMzMyVjYuODU3NTFaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNOC43NjI1OCAwLjc2MjUxMkgxLjE0MjU4VjEuNTIyNTFIOC43NjI1OFYwLjc2MjUxMloiIGZpbGw9ImJsYWNrIi8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDBfOV8xMDE3Ij4KPHJlY3Qgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=);
+ --welcome-icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzEwXzI5MSkiPgo8cGF0aCBkPSJNMC4zODI4MTIgOC4zOEgxLjkwMjgxVjcuNjJIMi42Njc4MVY2Ljg1NUgzLjQyNzgxVjYuMDk1SDQuMTkyODFWNS4zMzVINC45NTI4MVY0LjU3SDUuNzEyODFWMy44MUg2LjQ3NzgxVjMuMDQ1SDcuMjM3ODFWMi4yODVIOC43NjI4MVYzLjA0NUg5LjUyMjgxVjMuODFIMTAuMjg3OFY0LjU3SDExLjA0NzhWNS4zMzVIMTEuODA3OFY2LjA5NUgxMi41NzI4VjYuODU1SDEzLjMzMjhWNy42MkgxNC4wOTI4VjguMzhIMTUuNjE3OFY2Ljg1NUgxNC44NTc4VjYuMDk1SDE0LjA5MjhWNS4zMzVIMTMuMzMyOFY0LjU3SDEyLjU3MjhWMy44MUgxMS44MDc4VjMuMDQ1SDExLjA0NzhWMi4yODVIMTAuMjg3OFYxLjUyNUg5LjUyMjgxVjAuNzZIOC43NjI4MVYwSDcuMjM3ODFWMC43Nkg2LjQ3NzgxVjEuNTI1SDUuNzEyODFWMi4yODVINC45NTI4MVYzLjA0NUg0LjE5MjgxVjMuODFIMy40Mjc4MVY0LjU3SDIuNjY3ODFWNS4zMzVIMS45MDI4MVY2LjA5NUgxLjE0MjgxVjYuODU1SDAuMzgyODEyVjguMzhaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTMuMzMyNSAxNS4yNEgxMC4yODc1VjExLjQzSDkuNTIyNDZWMTZIMTQuMDkyNVY5LjE0MDAxSDEzLjMzMjVWMTUuMjRaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTMuMzMzMiA4LjM4SDEyLjU3MzJWOS4xNDAwMUgxMy4zMzMyVjguMzhaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTIuNTcyNiA3LjYySDExLjgwNzZWOC4zOEgxMi41NzI2VjcuNjJaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTEuODA3OSA2Ljg1NTAxSDExLjA0NzlWNy42MjAwMUgxMS44MDc5VjYuODU1MDFaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTEuMDQ4MSA2LjA5NUgxMC4yODgxVjYuODU1SDExLjA0ODFWNi4wOTVaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTAuMjg3NSA1LjMzNDk5SDkuNTIyNDZWNi4wOTQ5OUgxMC4yODc1VjUuMzM0OTlaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNOS41MjI3IDEwLjY2NUg4Ljc2MjdWMTEuNDNIOS41MjI3VjEwLjY2NVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik05LjUyMjcgNC41NzAwMUg4Ljc2MjdWNS4zMzUwMUg5LjUyMjdWNC41NzAwMVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik04Ljc2MzI4IDkuOTA1SDcuMjM4MjhWMTAuNjY1SDguNzYzMjhWOS45MDVaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNOC43NjMyOCAzLjgxSDcuMjM4MjhWNC41N0g4Ljc2MzI4VjMuODFaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNNy4yMzc1NCAxMC42NjVINi40Nzc1NFYxMS40M0g3LjIzNzU0VjEwLjY2NVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik03LjIzNzU0IDQuNTcwMDFINi40Nzc1NFY1LjMzNTAxSDcuMjM3NTRWNC41NzAwMVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik02LjQ3NzM0IDExLjQzSDUuNzEyMzRWMTUuMjRIMi42NjczNFY5LjE0MDAxSDEuOTAyMzRWMTZINi40NzczNFYxMS40M1oiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik02LjQ3Nzg5IDUuMzM0OTlINS43MTI4OVY2LjA5NDk5SDYuNDc3ODlWNS4zMzQ5OVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik01LjcxMzEzIDYuMDk1SDQuOTUzMTJWNi44NTVINS43MTMxM1Y2LjA5NVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik00Ljk1MjM4IDYuODU1MDFINC4xOTIzOFY3LjYyMDAxSDQuOTUyMzhWNi44NTUwMVoiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik00LjE5MjczIDcuNjJIMy40Mjc3M1Y4LjM4SDQuMTkyNzNWNy42MloiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0zLjQyNzk3IDguMzhIMi42Njc5N1Y5LjE0MDAxSDMuNDI3OTdWOC4zOFoiIGZpbGw9ImJsYWNrIi8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDBfMTBfMjkxIj4KPHJlY3Qgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=);
+}
+
+h1,
+h2,
+h3,
+h4 {
+ letter-spacing: 0.01em !important;
+ --font-family-headings-custom: "Jersey 10" !important;
+ text-transform: uppercase !important;
+ font-weight: 400 !important;
+
+ code {
+ text-transform: none !important;
+ }
+}
+
+.card h2 {
+ font-size: 2rem !important;
+
+ code {
+ font-size: 1rem !important;
+ }
+}
+
+h1 {
+ font-size: 3rem !important;
+
+ code {
+ font-size: 2rem !important;
+ }
+}
+
+h2 {
+ font-size: 2.5rem !important;
+
+ code {
+ font-size: 1.5rem !important;
+ }
+}
+
+h3 {
+ font-size: 2rem !important;
+
+ code {
+ font-size: 1.25rem !important;
+ }
+}
+
+h4 {
+ font-size: 1.5rem !important;
+
+ code {
+ font-size: 1rem !important;
+ }
+}
+
+a.colab-badge, a.github-badge {
+ display: inline-block;
+ border:none;
+}
+
+a.colab-badge > img, a.github-badge > img {
+ margin: 0;
+ padding: 0;
+}
+
+/* Home page hero section starts */
+.homepage-hero-section {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ background-color: #4B9CD6; /* #4B9CD6 */
+}
+.hero-content {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+}
+.homepage-hero-section .hero-content .hero-logo {
+ margin: 2em auto 0;
+}
+.homepage-hero-section .hero-content .hero-title {
+ margin: 0;
+ color: #fff;
+}
+.homepage-hero-section .hero-content .hero-subtitle {
+ margin: 0 0 1em 0;
+ color: #fff;
+}
+.homepage-hero-section .hero-content .hero-btn {
+ margin: 0 auto 2em;
+ background-color: #ebedf0;
+ border-radius: 5px;
+ padding: 5px 30px;
+ border: none;
+ cursor: pointer;
+ text-align: center;
+ display: inline-block;
+ color: #000;
+}
+/* Home page hero section ends */
+/* Home page popular resources section starts */
+.popular-resources .card {
+ padding: 0;
+ box-shadow: none;
+ border: none;
+ background: transparent;
+}
+
+.popular-resources .card .px-6.py-5 {
+ padding: 0;
+ text-align: center;
+}
+.popular-resources .youtube-video a {
+ color: #4b9cd6;
+ display: inline-block;
+}
+.popular-resources .youtube-video a:hover {
+ text-decoration: underline;
+}
+/* Home page popular resources section ends */
+
+/* Home page key features section starts */
+.key-features .card {
+ padding: 0.5rem;
+ box-shadow: none;
+ border: none;
+ background: transparent;
+}
+.key-features .card .px-6.py-5 {
+ padding: 0;
+ text-align: center;
+}
+.key-features .card .key-feature img {
+ width:132px;
+ height:132px;
+ margin:0 auto;
+}
+.key-features .card .key-feature a > p {
+ color: #4b9cd6;
+ font-weight: bold;
+ margin: 0.75rem 0;
+}
+.key-features .card .key-feature p {
+ font-size: 0.85rem;
+}
+/* Home page key features section ends */
+/* Home page explore content section starts */
+
+.explore-content h2 {
+ font-size: 1.5rem !important;
+}
+/* Home page explore content section ends */
+
+/* Examples page Gallery section starts */
+.examples-gallery-container h5{
+ font-weight: bold;
+}
+.examples-gallery-container p{
+ font-size: 0.7rem;
+ margin-top: 0.25rem;
+ line-height: 1.5;
+}
+.examples-gallery-container .card {
+ padding: 1rem;
+ transition: all 0.3s ease;
+ border: 1px solid #e8e8e8;
+ border-radius: 4px;
+ cursor: pointer;
+ overflow: hidden;
+}
+.examples-gallery-container .card-description {
+ color: #727272;
+ display: -webkit-box;
+ line-clamp: 3;
+ -webkit-box-orient: vertical;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+.examples-gallery-container .card:hover {
+ box-shadow: 0 1px 2px -2px rgba(0, 0, 0, 0.16),
+ 0 3px 6px 0 rgba(0, 0, 0, 0.12),
+ 0 5px 12px 4px rgba(0, 0, 0, 0.09);
+}
+.examples-gallery-container .card-title {
+ margin: 12px 0;
+ display: -webkit-box;
+ line-clamp: 4;
+ -webkit-box-orient: vertical;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+.examples-gallery-container .card .px-6.py-5 {
+ padding: 0;
+}
+.examples-gallery-container .tag {
+ display: inline-block;
+ background: #f5f5f5;
+ padding: 0 12px;
+ border-radius: 12px;
+ font-size: 0.7rem;
+ color: #666;
+ cursor: pointer;
+ transition: background-color 0.2s;
+ margin: 0.35rem 0.1rem 0 0;
+ font-size: 0.7rem;
+}
+
+.examples-gallery-container .badges a{
+ display: inline-block;
+}
+.examples-gallery-container .tag:hover {
+ background-color: #e0e0e0;
+}
+
+.examples-gallery-container .chosen-container-multi .chosen-choices li.search-field {
+ padding: 0px !important;
+ margin: 0px !important;
+}
+.examples-gallery-container .chosen-container-multi .chosen-choices li.search-field::before,
+.examples-gallery-container .chosen-container-multi .chosen-drop .chosen-results .active-result::before,
+.examples-gallery-container .chosen-container-multi .chosen-drop .chosen-results .result-selected::before,
+.examples-gallery-container .chosen-container-multi .chosen-choices li.search-choice::before {
+ display: none;
+}
+.examples-gallery-container .chosen-container-multi .chosen-choices li.search-choice,
+.examples-gallery-container .chosen-container-multi .chosen-drop .chosen-results .active-result,
+.examples-gallery-container .chosen-container-multi .chosen-drop .chosen-results .result-selected {
+ padding-left: 5px !important;
+}
+.examples-gallery-container .search-choice-close {
+ border-bottom: none;
+}
+/* Examples page Gallery section ends */
+#search-bar-entry {
+ border-radius: 0 !important;
+ height: 36px;
+ background: #ffffff;
+ border: 2px solid #000000;
+ box-shadow: 2px 2px 0px rgba(62, 37, 13, 0.24);
+
+ --font-family-headings-custom: "Jersey 10" !important;
+ font-family: var(
+ --font-family-headings-custom,
+ var(--font-inter, sans-serif)
+ );
+ font-size: 18px;
+ color: #000000;
+
+ span {
+ color: #9ea3a2;
+ font-size: 16px;
+ font-weight: 400;
+ }
+}
+
+.dark #search-bar-entry {
+ background: #000000;
+ border: 2px solid #ffffff;
+ color: #ffffff;
+}
+
+#content-area {
+ padding-top: 38px;
+ padding-left: 48px;
+ padding-right: 48px;
+ padding-bottom: 38px;
+ background-color: #fafafa;
+ border-width: 0px 1px;
+ border-style: solid;
+ border-color: rgb(var(--gray-500) / 0.05);
+ margin-left: 320px;
+ margin-top: -2.5rem;
+
+ width: 800px !important;
+ min-width: 800px !important;
+
+ @media screen and (max-width: 1600px) {
+ width: 700px !important;
+ min-width: 700px !important;
+ }
+ @media screen and (max-width: 1024px) {
+ width: 100%;
+ min-width: 100% !important;
+ margin-top: -2.5rem;
+ margin-left: -1rem;
+ margin-right: -1rem;
+ }
+}
+#table-of-contents {
+ padding-left: 0;
+}
+
+.dark #content-area {
+ background-color: rgba(255, 255, 255, 0.08);
+ border-color: rgb(var(--gray-300) / 0.06);
+}
+
+#topbar-cta-button {
+ --font-family-headings-custom: "Jersey 10" !important;
+ gap: 10px;
+ isolation: isolate;
+ font-family: var(
+ --font-family-headings-custom,
+ var(--font-inter, sans-serif)
+ );
+ font-size: 32px;
+ font-weight: 400;
+ color: #ffffff;
+}
+
+#topbar-cta-button > a > span {
+ background: #000000 !important;
+ border: 2px solid #ffffff !important;
+ box-shadow: 2px 2px 0px rgba(62, 37, 13, 0.24) !important;
+ border-radius: 0 !important;
+ transition: all 0.2s ease-in-out !important;
+}
+
+#topbar-cta-button:hover > a > span {
+ box-shadow: 2px 2px 0px rgba(62, 37, 13, 0.24), 2px 2px 0px #ffffff !important;
+}
+
+#topbar-cta-button * {
+ --font-family-headings-custom: "Jersey 10" !important;
+ font-family: var(
+ --font-family-headings-custom,
+ var(--font-inter, sans-serif)
+ );
+ font-size: 20px;
+}
+
+.dark table {
+ border-color: rgb(var(--gray-800));
+}
+
+table {
+ td,
+ th {
+ border: 1px solid rgb(var(--gray-300));
+ padding: 0.75rem !important;
+ }
+
+ td:not(:first-child) {
+ border-left-width: 1px;
+ }
+}
+
+#sidebar {
+ width: 320px !important;
+}
+
+@media screen and (min-width: 1024px) {
+ .dark #navigation-items {
+ a:before,
+ h5:before {
+ background-color: rgb(var(--gray-200));
+ }
+ }
+
+ #navigation-items {
+ a {
+ position: relative;
+ }
+
+ & > div > ul > li {
+ & > a,
+ & > div {
+ padding-left: 2.5rem !important;
+ }
+
+ & > ul > li {
+ & > a,
+ & > div {
+ padding-left: 3.5rem !important;
+ }
+ }
+ }
+
+ h5 {
+ display: inline-flex;
+ align-items: center;
+ }
+
+ a:before,
+ h5:before {
+ display: inline-flex;
+ width: 16px;
+ height: 16px;
+ margin-right: 0.5rem;
+ background-color: rgb(var(--gray-900));
+ }
+
+ /* a[href="/docs/Getting-Started"] {
+ font-weight: 600;
+ padding-left: 1rem !important;
+
+ &::before {
+ content: "";
+ mask: var(--getting-started-icon);
+ }
+ }
+
+ a[href="/docs/FAQ"] {
+ font-weight: 600;
+ padding-left: 1rem !important;
+
+ &::before {
+ content: "";
+ mask: var(--faq-icon);
+ }
+ }
+
+ a[href="/docs/Research"] {
+ font-weight: 600;
+ padding-left: 1rem !important;
+
+ &::before {
+ content: "";
+ mask: var(--research-icon);
+ }
+ }
+
+ a[href="/docs/Migration-Guide"] {
+ font-weight: 600;
+ padding-left: 1rem !important;
+
+ &::before {
+ content: "";
+ mask: var(--migration-icon);
+ }
+ } */
+
+ h5[data-text="Installation"]:before {
+ content: "";
+ mask: var(--installation-icon);
+ }
+
+ h5[data-text="Tutorials"]:before {
+ content: "";
+ mask: var(--tutorials-icon);
+ }
+
+ h5[data-text="Use Cases"]:before {
+ content: "";
+ mask: var(--use-cases-icon);
+ }
+
+ h5[data-text="User Guide"]:before {
+ content: "";
+ mask: var(--user-guide-icon);
+ }
+
+ h5[data-text="Contributor Guide"]:before {
+ content: "";
+ mask: var(--contributor-icon);
+ }
+
+ h5[data-text="Ecosystem"]:before {
+ content: "";
+ mask: var(--ecosystem-icon);
+ }
+
+ h5[data-text="AutoGen Studio"]:before {
+ content: "";
+ mask: var(--autogen-icon);
+ }
+
+ li > div {
+ width: 100%;
+
+ & > div + svg {
+ margin-left: auto;
+ }
+ }
+
+ & > div {
+ margin-top: 1rem;
+
+ &:first-child {
+ margin-top: 0;
+ h5 {
+ display: none;
+ }
+ }
+ }
+ }
+}
+
+.tip,
+.warning,
+.info,
+.note {
+ & > div {
+ padding: 16px 24px;
+ background: #e9f5e7;
+ border: 2px solid #419228;
+ border-radius: 0;
+
+ display: flex;
+ flex-direction: column;
+
+ &:before {
+ --font-family-headings-custom: "Jersey 10" !important;
+ font-family: var(
+ --font-family-headings-custom,
+ var(--font-inter, sans-serif)
+ );
+ font-size: 18px;
+ line-height: 18px;
+ text-transform: uppercase;
+
+ background-repeat: no-repeat;
+ padding-left: 24px;
+ }
+
+ & > div:first-child {
+ display: none;
+ }
+ }
+}
+
+.tip > div {
+ background: #e9f5e7;
+ border: 2px solid #419228;
+
+ &:before {
+ content: "TIP";
+ color: #113007;
+ background-image: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE0LjQ3NDggMy4wNTAwNUgxMy43MTQ4VjkuMTQ1MDVIMTQuNDc0OFYzLjA1MDA1WiIgZmlsbD0iIzExMzAwNyIvPgo8cGF0aCBkPSJNMTMuNzE1MiA5LjE0NTAySDEyLjk1MDJWOS45MDUwMkgxMy43MTUyVjkuMTQ1MDJaIiBmaWxsPSIjMTEzMDA3Ii8+CjxwYXRoIGQ9Ik0xMy43MTUyIDIuMjg1MTZIMTIuOTUwMlYzLjA1MDE2SDEzLjcxNTJWMi4yODUxNloiIGZpbGw9IiMxMTMwMDciLz4KPHBhdGggZD0iTTEyLjk1MDQgOS45MDUwM0gxMi4xOTA0VjEwLjY2NUgxMi45NTA0VjkuOTA1MDNaIiBmaWxsPSIjMTEzMDA3Ii8+CjxwYXRoIGQ9Ik0xMi45NTA0IDEuNTI0OUgxMi4xOTA0VjIuMjg0OUgxMi45NTA0VjEuNTI0OVoiIGZpbGw9IiMxMTMwMDciLz4KPHBhdGggZD0iTTEyLjE5MDggMTAuNjY1SDExLjQyNThWMTEuNDNIMTIuMTkwOFYxMC42NjVaIiBmaWxsPSIjMTEzMDA3Ii8+CjxwYXRoIGQ9Ik0xMi4xOTA4IDAuNzYwMDFIMTEuNDI1OFYxLjUyNTAxSDEyLjE5MDhWMC43NjAwMVoiIGZpbGw9IiMxMTMwMDciLz4KPHBhdGggZD0iTTkuMTQwMzEgMTEuNDI5OVY4LjM3OTg4SDguMzgwMzFWMTEuNDI5OUg3LjYyMDMxVjguMzc5ODhINi44NTUzMVYxMS40Mjk5SDQuNTcwMzFWMTIuMTg5OUg1LjMzMDMxVjE1LjIzOTlINi4wOTUzMVYxNC40NzQ5SDkuOTA1MzFWMTUuMjM5OUgxMC42NjUzVjEyLjE4OTlIMTEuNDI1M1YxMS40Mjk5SDkuMTQwMzFaTTkuOTA1MzEgMTIuOTQ5OUg2LjA5NTMxVjEyLjE4OTlIOS45MDUzMVYxMi45NDk5WiIgZmlsbD0iIzExMzAwNyIvPgo8cGF0aCBkPSJNMTAuNjY1MyA1LjMzNDk2SDkuOTA1MjdWNi44NTQ5NkgxMC42NjUzVjUuMzM0OTZaIiBmaWxsPSIjMTEzMDA3Ii8+CjxwYXRoIGQ9Ik05LjkwNTYyIDYuODU0OThIOS4xNDA2MlY4LjM3OTk4SDkuOTA1NjJWNi44NTQ5OFoiIGZpbGw9IiMxMTMwMDciLz4KPHBhdGggZD0iTTkuOTA1NyAxNS4yNEg2LjA5NTdWMTZIOS45MDU3VjE1LjI0WiIgZmlsbD0iIzExMzAwNyIvPgo8cGF0aCBkPSJNNi44NTU3IDYuODU0OThINi4wOTU3VjguMzc5OThINi44NTU3VjYuODU0OThaIiBmaWxsPSIjMTEzMDA3Ii8+CjxwYXRoIGQ9Ik02LjA5NTA4IDUuMzM0OTZINS4zMzAwOFY2Ljg1NDk2SDYuMDk1MDhWNS4zMzQ5NloiIGZpbGw9IiMxMTMwMDciLz4KPHBhdGggZD0iTTExLjQyNTMgMEg0LjU3MDMxVjAuNzZIMTEuNDI1M1YwWiIgZmlsbD0iIzExMzAwNyIvPgo8cGF0aCBkPSJNNC41NzA1NSAxMC42NjVIMy44MTA1NVYxMS40M0g0LjU3MDU1VjEwLjY2NVoiIGZpbGw9IiMxMTMwMDciLz4KPHBhdGggZD0iTTQuNTcwNTUgMC43NjAwMUgzLjgxMDU1VjEuNTI1MDFINC41NzA1NVYwLjc2MDAxWiIgZmlsbD0iIzExMzAwNyIvPgo8cGF0aCBkPSJNMy44MDk5MiA5LjkwNTAzSDMuMDQ0OTJWMTAuNjY1SDMuODA5OTJWOS45MDUwM1oiIGZpbGw9IiMxMTMwMDciLz4KPHBhdGggZD0iTTMuODA5OTIgMS41MjQ5SDMuMDQ0OTJWMi4yODQ5SDMuODA5OTJWMS41MjQ5WiIgZmlsbD0iIzExMzAwNyIvPgo8cGF0aCBkPSJNMy4wNDUxNiA5LjE0NTAySDIuMjg1MTZWOS45MDUwMkgzLjA0NTE2VjkuMTQ1MDJaIiBmaWxsPSIjMTEzMDA3Ii8+CjxwYXRoIGQ9Ik0zLjA0NTE2IDIuMjg1MTZIMi4yODUxNlYzLjA1MDE2SDMuMDQ1MTZWMi4yODUxNloiIGZpbGw9IiMxMTMwMDciLz4KPHBhdGggZD0iTTIuMjg1MzkgMy4wNTAwNUgxLjUyNTM5VjkuMTQ1MDVIMi4yODUzOVYzLjA1MDA1WiIgZmlsbD0iIzExMzAwNyIvPgo8L3N2Zz4K");
+ }
+}
+
+.note > div {
+ background: #ebf7ff;
+ border: 2px solid #3298d8;
+
+ &:before {
+ content: "Note";
+ color: #004d80;
+ background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDE2IDE2IiBmaWxsPSJub25lIj4KPHBhdGggZD0iTTYuMDk3MDMgNC45NTIzOUg1LjMzMjAzVjUuNzEyMzlINi4wOTcwM1Y0Ljk1MjM5WiIgZmlsbD0iIzExMzAwNyIvPgo8cGF0aCBkPSJNNC41NzI0NiAxNC4xVjYuNDc3NDVINS4zMzI0NlY1LjcxMjQ1SDQuNTcyNDZWNC45NDk5NUgxLjUyMjQ2VjE1LjYxNUg0LjU3MjQ2VjE0Ljg1NUg2LjA5OTk2VjE0LjFINC41NzI0NlpNMy44MDc0NiA3Ljk5OTk1SDMuMDQ5OTZWNi40Nzk5NUgzLjgwOTk2TDMuODA3NDYgNy45OTk5NVoiIGZpbGw9IiMxMTMwMDciLz4KPHBhdGggZD0iTTYuODU3NjYgNC4xOTI1SDYuMDk3NjZWNC45NTI1SDYuODU3NjZWNC4xOTI1WiIgZmlsbD0iIzExMzAwNyIvPgo8cGF0aCBkPSJNNy42MTc0MiAxLjE0MjQ2SDYuODU3NDJWNC4xOTI0Nkg3LjYxNzQyVjEuMTQyNDZaIiBmaWxsPSIjMTEzMDA3Ii8+CjxwYXRoIGQ9Ik04LjM4MjE5IDYuNDc3NDJINy42MTcxOVY3LjIzNzQySDguMzgyMTlWNi40Nzc0MloiIGZpbGw9IiMxMTMwMDciLz4KPHBhdGggZD0iTTkuMTQyMTkgMC4zODI0NDZINy42MTcxOVYxLjE0MjQ1SDkuMTQyMTlWMC4zODI0NDZaIiBmaWxsPSIjMTEzMDA3Ii8+CjxwYXRoIGQ9Ik05LjE0MTg0IDUuNzEyNTJIOC4zODE4NFY2LjQ3NzUySDkuMTQxODRWNS43MTI1MloiIGZpbGw9IiMxMTMwMDciLz4KPHBhdGggZD0iTTkuMTQxODQgOC43NjI0NUg4LjM4MTg0VjEwLjI4NzVIOS4xNDE4NFY4Ljc2MjQ1WiIgZmlsbD0iIzExMzAwNyIvPgo8cGF0aCBkPSJNOS4xNDE4NCAxMS4wNDc1SDguMzgxODRWMTIuNTcyNUg5LjE0MTg0VjExLjA0NzVaIiBmaWxsPSIjMTEzMDA3Ii8+CjxwYXRoIGQ9Ik05LjkwMjU4IDEuMTQyNDZIOS4xNDI1OFYxLjkwMjQ2SDkuOTAyNThWMS4xNDI0NloiIGZpbGw9IiMxMTMwMDciLz4KPHBhdGggZD0iTTkuOTAyNTggNC45NTIzOUg5LjE0MjU4VjUuNzEyMzlIOS45MDI1OFY0Ljk1MjM5WiIgZmlsbD0iIzExMzAwNyIvPgo8cGF0aCBkPSJNMTAuNjY3MyAxLjkwMjQ3SDkuOTAyMzRWNC45NTI0N0gxMC42NjczVjEuOTAyNDdaIiBmaWxsPSIjMTEzMDA3Ii8+CjxwYXRoIGQ9Ik0xMy43MTIzIDUuNzEyNTJIOS45MDIzNFY2LjQ3NzUySDEzLjcxMjNWNS43MTI1MloiIGZpbGw9IiMxMTMwMDciLz4KPHBhdGggZD0iTTEwLjY2NzcgMTQuMDk3NUg5LjkwMjY2VjE0Ljg1NzVINi4wOTc2NlYxNS42MTc1SDEyLjE5MjdWMTQuODU3NUgxMC42Njc3VjE0LjA5NzVaIiBmaWxsPSIjMTEzMDA3Ii8+CjxwYXRoIGQ9Ik05LjE0MjU4IDEyLjU3MjRWMTQuMDk3NEg5LjkwMjU4VjEzLjMzMjRIMTIuOTUyNlYxNC4wOTc0SDEzLjcxMjZWMTIuNTcyNEg5LjE0MjU4WiIgZmlsbD0iIzExMzAwNyIvPgo8cGF0aCBkPSJNMTIuOTUyNCAxNC4wOTc0SDEyLjE5MjRWMTQuODU3NEgxMi45NTI0VjE0LjA5NzRaIiBmaWxsPSIjMTEzMDA3Ii8+CjxwYXRoIGQ9Ik0xMy43MTI2IDcuOTk3NDJIOS45MDI1OFY2LjQ3NzQySDkuMTQyNThWOC43NjI0MkgxMy43MTI2VjEwLjI4NzRIOS4xNDI1OFYxMS4wNDc0SDEzLjcxMjZWMTIuNTcyNEgxNC40Nzc2VjYuNDc3NDJIMTMuNzEyNlY3Ljk5NzQyWiIgZmlsbD0iIzExMzAwNyIvPgo8L3N2Zz4=");
+ }
+}
+
+.info > div {
+ background: #f9f9ff;
+ border: 2px solid #c5c7dc;
+
+ &:before {
+ content: "INFO";
+ color: #0f6194;
+ background-image: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzE0NF84MTk3MikiPgo8cGF0aCBkPSJNMTUuNjE3NCA0LjE4OTk0SDE0Ljg1NzRWNS43MTQ5NEgxNS42MTc0VjQuMTg5OTRaIiBmaWxsPSIjMEY2MTk0Ii8+CjxwYXRoIGQ9Ik0xNC44NTc3IDMuNDI5OTNIMTQuMDk3N1Y0LjE4OTkzSDE0Ljg1NzdWMy40Mjk5M1oiIGZpbGw9IiMwRjYxOTQiLz4KPHBhdGggZD0iTTE0Ljg1OCA1LjcxNDg0SDEzLjMzM1Y2LjQ3NDg0SDE0Ljg1OFY1LjcxNDg0WiIgZmlsbD0iIzBGNjE5NCIvPgo8cGF0aCBkPSJNMTQuMDk4IDIuNjY1MDRIMTMuMzMzVjMuNDMwMDRIMTQuMDk4VjIuNjY1MDRaIiBmaWxsPSIjMEY2MTk0Ii8+CjxwYXRoIGQ9Ik0xMy4zMzIzIDQuOTQ5NzFIMTIuNTcyM1Y1LjcxNDcxSDEzLjMzMjNWNC45NDk3MVoiIGZpbGw9IiMwRjYxOTQiLz4KPHBhdGggZD0iTTEzLjMzMjMgMS45MDQ3OUgxMi41NzIzVjIuNjY0NzlIMTMuMzMyM1YxLjkwNDc5WiIgZmlsbD0iIzBGNjE5NCIvPgo8cGF0aCBkPSJNMTIuNTcyNiA1LjcxNDg0SDExLjgwNzZWNi40NzQ4NEgxMi41NzI2VjUuNzE0ODRaIiBmaWxsPSIjMEY2MTk0Ii8+CjxwYXRoIGQ9Ik0xMi41NzI2IDQuMTg5OTRIMTEuODA3NlY0Ljk0OTk0SDEyLjU3MjZWNC4xODk5NFoiIGZpbGw9IiMwRjYxOTQiLz4KPHBhdGggZD0iTTEyLjU3MjYgMS4xMzk4OUgxMS44MDc2VjEuOTA0ODlIMTIuNTcyNlYxLjEzOTg5WiIgZmlsbD0iIzBGNjE5NCIvPgo8cGF0aCBkPSJNMTEuODA3OSA4Ljc1OTc3SDExLjA0NzlWMTEuMDQ0OEgxMS44MDc5VjguNzU5NzdaIiBmaWxsPSIjMEY2MTk0Ii8+CjxwYXRoIGQ9Ik0xMS44MDc5IDYuNDc0ODVIMTEuMDQ3OVY3LjIzNDg1SDExLjgwNzlWNi40NzQ4NVoiIGZpbGw9IiMwRjYxOTQiLz4KPHBhdGggZD0iTTExLjgwNzkgMy40Mjk5M0gxMS4wNDc5VjQuMTg5OTNIMTEuODA3OVYzLjQyOTkzWiIgZmlsbD0iIzBGNjE5NCIvPgo8cGF0aCBkPSJNMTEuODA3MSAwLjM3OTg4M0gxMC4yODcxVjEuMTM5ODhIMTEuODA3MVYwLjM3OTg4M1oiIGZpbGw9IiMwRjYxOTQiLz4KPHBhdGggZD0iTTExLjA0NzEgMTEuMDQ0OUgxMC4yODcxVjEyLjU2OTlIMTEuMDQ3MVYxMS4wNDQ5WiIgZmlsbD0iIzBGNjE5NCIvPgo8cGF0aCBkPSJNMTEuMDQ3MSA3LjIzNDg2SDEwLjI4NzFWOC43NTk4NkgxMS4wNDcxVjcuMjM0ODZaIiBmaWxsPSIjMEY2MTk0Ii8+CjxwYXRoIGQ9Ik0xMS4wNDcxIDIuNjY1MDRIMTAuMjg3MVYzLjQzMDA0SDExLjA0NzFWMi42NjUwNFoiIGZpbGw9IiMwRjYxOTQiLz4KPHBhdGggZD0iTTEwLjI4ODQgMTIuNTY5OEg5LjUyMzQ0VjEzLjMyOThIMTAuMjg4NFYxMi41Njk4WiIgZmlsbD0iIzBGNjE5NCIvPgo8cGF0aCBkPSJNMTAuMjg4NCAzLjQyOTkzSDkuNTIzNDRWNC4xODk5M0gxMC4yODg0VjMuNDI5OTNaIiBmaWxsPSIjMEY2MTk0Ii8+CjxwYXRoIGQ9Ik0xMC4yODg0IDEuMTM5ODlIOS41MjM0NFYyLjY2NDg5SDEwLjI4ODRWMS4xMzk4OVoiIGZpbGw9IiMwRjYxOTQiLz4KPHBhdGggZD0iTTkuNTIyNyA4SDguNzYyN1Y4Ljc2SDkuNTIyN1Y4WiIgZmlsbD0iIzBGNjE5NCIvPgo8cGF0aCBkPSJNOS41MjI3IDQuMTg5OTRIOC43NjI3VjQuOTQ5OTRIOS41MjI3VjQuMTg5OTRaIiBmaWxsPSIjMEY2MTk0Ii8+CjxwYXRoIGQ9Ik05LjUyMjkzIDEzLjMyOThIOC4wMDI5M1YxNC4wOTQ4SDkuNTIyOTNWMTMuMzI5OFoiIGZpbGw9IiMwRjYxOTQiLz4KPHBhdGggZD0iTTguNzYyOTMgNy4yMzQ4Nkg4LjAwMjkzVjcuOTk5ODZIOC43NjI5M1Y3LjIzNDg2WiIgZmlsbD0iIzBGNjE5NCIvPgo8cGF0aCBkPSJNOC4wMDMyOCAxMi41Njk4SDcuMjM4MjhWMTMuMzI5OEg4LjAwMzI4VjEyLjU2OThaIiBmaWxsPSIjMEY2MTk0Ii8+CjxwYXRoIGQ9Ik04LjAwMzI4IDYuNDc0ODVINy4yMzgyOFY3LjIzNDg1SDguMDAzMjhWNi40NzQ4NVoiIGZpbGw9IiMwRjYxOTQiLz4KPHBhdGggZD0iTTguNzYzMjggNC45NDk3MUg3LjIzODI4VjUuNzE0NzFIOC43NjMyOFY0Ljk0OTcxWiIgZmlsbD0iIzBGNjE5NCIvPgo8cGF0aCBkPSJNNy4yMzg1MiAxMS44MTAxSDYuNDc4NTJWMTIuNTcwMUg3LjIzODUyVjExLjgxMDFaIiBmaWxsPSIjMEY2MTk0Ii8+CjxwYXRoIGQ9Ik0xLjkwNzgxIDE0Ljg1NDlIMi42Njc4MVYxNC4wOTQ5SDMuNDI3ODFWMTMuMzI5OUg0LjE5MjgxVjEyLjU2OTlINC45NTI4MVYxMS44MDk5SDYuNDc3ODFWMTEuMDQ0OUg1LjcxMjgxVjEwLjI4NDlINC45NTI4MVY5LjUyNDlINC4xOTI4MVYxMS4wNDQ5SDMuNDI3ODFWMTEuODA5OUgyLjY2NzgxVjEyLjU2OTlIMS45MDc4MVYxMy4zMjk5SDEuMTQyODFWMTQuMDk0OUgwLjM4MjgxMlYxNS42MTk5SDEuOTA3ODFWMTQuODU0OVoiIGZpbGw9IiMwRjYxOTQiLz4KPHBhdGggZD0iTTcuMjM4MTMgNC4xODk5NEg0Ljk1MzEyVjQuOTQ5OTRINy4yMzgxM1Y0LjE4OTk0WiIgZmlsbD0iIzBGNjE5NCIvPgo8cGF0aCBkPSJNNC45NTI3MyA0Ljk0OTcxSDMuNDI3NzNWNS43MTQ3MUg0Ljk1MjczVjQuOTQ5NzFaIiBmaWxsPSIjMEY2MTk0Ii8+CjxwYXRoIGQ9Ik00LjE5MjczIDguNzU5NzdIMy40Mjc3M1Y5LjUyNDc3SDQuMTkyNzNWOC43NTk3N1oiIGZpbGw9IiMwRjYxOTQiLz4KPHBhdGggZD0iTTMuNDI3OTcgOEgyLjY2Nzk3VjguNzZIMy40Mjc5N1Y4WiIgZmlsbD0iIzBGNjE5NCIvPgo8cGF0aCBkPSJNMy40Mjc5NyA1LjcxNDg0SDIuNjY3OTdWNi40NzQ4NEgzLjQyNzk3VjUuNzE0ODRaIiBmaWxsPSIjMEY2MTk0Ii8+CjxwYXRoIGQ9Ik0yLjY2ODIgNi40NzQ4NUgxLjkwODJWNy45OTk4NUgyLjY2ODJWNi40NzQ4NVoiIGZpbGw9IiMwRjYxOTQiLz4KPC9nPgo8L3N2Zz4K");
+ }
+}
+
+.warning > div {
+ background: #ffece4;
+ border: 2px solid #f44f0e;
+
+ &:before {
+ content: "WARNING";
+ color: #b43300;
+ background-image: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzE0NF84MjAwOSkiPgo8cGF0aCBkPSJNMTYuMDAwMiAxMy43MTQ4SDE1LjI0MDJWMTUuMjM5OEgxNi4wMDAyVjEzLjcxNDhaIiBmaWxsPSIjQjQzMzAwIi8+CjxwYXRoIGQ9Ik0xNS4yMzk2IDEyLjE4OTlIMTQuNDc0NlYxMy43MTQ5SDE1LjIzOTZWMTIuMTg5OVoiIGZpbGw9IiNCNDMzMDAiLz4KPHBhdGggZD0iTTE1LjIzOTggMTUuMjRIMC43NTk3NjZWMTZIMTUuMjM5OFYxNS4yNFoiIGZpbGw9IiNCNDMzMDAiLz4KPHBhdGggZD0iTTE0LjQ3NDggMTAuNjY1SDEzLjcxNDhWMTIuMTlIMTQuNDc0OFYxMC42NjVaIiBmaWxsPSIjQjQzMzAwIi8+CjxwYXRoIGQ9Ik0xMy43MTUyIDkuMTQ1MDJIMTIuOTUwMlYxMC42NjVIMTMuNzE1MlY5LjE0NTAyWiIgZmlsbD0iI0I0MzMwMCIvPgo8cGF0aCBkPSJNMTIuOTQ5NSA3LjYyMDEySDEyLjE4OTVWOS4xNDUxMkgxMi45NDk1VjcuNjIwMTJaIiBmaWxsPSIjQjQzMzAwIi8+CjxwYXRoIGQ9Ik0xMi4xODk3IDYuMDk0OTdIMTEuNDI5N1Y3LjYxOTk3SDEyLjE4OTdWNi4wOTQ5N1oiIGZpbGw9IiNCNDMzMDAiLz4KPHBhdGggZD0iTTExLjQzIDQuNTY5ODJIMTAuNjY1VjYuMDk0ODJIMTEuNDNWNC41Njk4MloiIGZpbGw9IiNCNDMzMDAiLz4KPHBhdGggZD0iTTEwLjY2NDMgMy4wNDQ5Mkg5LjkwNDNWNC41Njk5MkgxMC42NjQzVjMuMDQ0OTJaIiBmaWxsPSIjQjQzMzAwIi8+CjxwYXRoIGQ9Ik05LjkwNDUzIDEuNTI0OUg5LjE0NDUzVjMuMDQ0OUg5LjkwNDUzVjEuNTI0OVoiIGZpbGw9IiNCNDMzMDAiLz4KPHBhdGggZD0iTTkuMTQ1NyAxMC42NjVINi44NTU3VjExLjQzSDYuMDk1N1YxMy43MTVINi44NTU3VjE0LjQ3NUg5LjE0NTdWMTMuNzE1SDkuOTA1N1YxMS40M0g5LjE0NTdWMTAuNjY1WiIgZmlsbD0iI0I0MzMwMCIvPgo8cGF0aCBkPSJNOS4xNDU3IDQuNTY5ODJINi44NTU3VjUuMzM0ODJINi4wOTU3VjguMzc5ODJINi44NTU3VjkuOTA0ODJIOS4xNDU3VjguMzc5ODJIOS45MDU3VjUuMzM0ODJIOS4xNDU3VjQuNTY5ODJaTTkuMTQ1NyA3LjYxOTgySDguMzgwN1Y2LjA5NDgySDcuNjIwN1Y1LjMzNDgySDguMzgwN1Y2LjA5NDgySDkuMTQ1N1Y3LjYxOTgyWiIgZmlsbD0iI0I0MzMwMCIvPgo8cGF0aCBkPSJNOS4xNDQ4OCAwLjc2MDAxSDguMzc5ODhWMS41MjUwMUg5LjE0NDg4VjAuNzYwMDFaIiBmaWxsPSIjQjQzMzAwIi8+CjxwYXRoIGQ9Ik04LjM4MDEyIDBINy42MjAxMlYwLjc2SDguMzgwMTJWMFoiIGZpbGw9IiNCNDMzMDAiLz4KPHBhdGggZD0iTTcuNjIwNDcgMC43NjAwMUg2Ljg1NTQ3VjEuNTI1MDFINy42MjA0N1YwLjc2MDAxWiIgZmlsbD0iI0I0MzMwMCIvPgo8cGF0aCBkPSJNNi44NTU3IDEuNTI0OUg2LjA5NTdWMy4wNDQ5SDYuODU1N1YxLjUyNDlaIiBmaWxsPSIjQjQzMzAwIi8+CjxwYXRoIGQ9Ik02LjA5NDk2IDMuMDQ0OTJINS4zMzQ5NlY0LjU2OTkySDYuMDk0OTZWMy4wNDQ5MloiIGZpbGw9IiNCNDMzMDAiLz4KPHBhdGggZD0iTTUuMzM1MzEgNC41Njk4Mkg0LjU3MDMxVjYuMDk0ODJINS4zMzUzMVY0LjU2OTgyWiIgZmlsbD0iI0I0MzMwMCIvPgo8cGF0aCBkPSJNNC41NzA1NSA2LjA5NDk3SDMuODEwNTVWNy42MTk5N0g0LjU3MDU1VjYuMDk0OTdaIiBmaWxsPSIjQjQzMzAwIi8+CjxwYXRoIGQ9Ik0zLjgwOTkyIDcuNjIwMTJIMy4wNDQ5MlY5LjE0NTEySDMuODA5OTJWNy42MjAxMloiIGZpbGw9IiNCNDMzMDAiLz4KPHBhdGggZD0iTTMuMDQ1MTYgOS4xNDUwMkgyLjI4NTE2VjEwLjY2NUgzLjA0NTE2VjkuMTQ1MDJaIiBmaWxsPSIjQjQzMzAwIi8+CjxwYXRoIGQ9Ik0yLjI4NTM5IDEwLjY2NUgxLjUyNTM5VjEyLjE5SDIuMjg1MzlWMTAuNjY1WiIgZmlsbD0iI0I0MzMwMCIvPgo8cGF0aCBkPSJNMS41MjQ3NyAxMi4xODk5SDAuNzU5NzY2VjEzLjcxNDlIMS41MjQ3N1YxMi4xODk5WiIgZmlsbD0iI0I0MzMwMCIvPgo8cGF0aCBkPSJNMC43NiAxMy43MTQ4SDBWMTUuMjM5OEgwLjc2VjEzLjcxNDhaIiBmaWxsPSIjQjQzMzAwIi8+CjwvZz4KPC9zdmc+");
+ }
+}
+
+.dark {
+ .tip,
+ .info,
+ .warning,
+ .note {
+ & > div:before {
+ color: #ffffff;
+ }
+ }
+
+ .tip > div {
+ &:before {
+ background-image: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE0LjQ3NDggMy4wNTAwNUgxMy43MTQ4VjkuMTQ1MDVIMTQuNDc0OFYzLjA1MDA1WiIgZmlsbD0iI2ZmZmZmZiIvPgo8cGF0aCBkPSJNMTMuNzE1MiA5LjE0NTAySDEyLjk1MDJWOS45MDUwMkgxMy43MTUyVjkuMTQ1MDJaIiBmaWxsPSIjZmZmZmZmIi8+CjxwYXRoIGQ9Ik0xMy43MTUyIDIuMjg1MTZIMTIuOTUwMlYzLjA1MDE2SDEzLjcxNTJWMi4yODUxNloiIGZpbGw9IiNmZmZmZmYiLz4KPHBhdGggZD0iTTEyLjk1MDQgOS45MDUwM0gxMi4xOTA0VjEwLjY2NUgxMi45NTA0VjkuOTA1MDNaIiBmaWxsPSIjZmZmZmZmIi8+CjxwYXRoIGQ9Ik0xMi45NTA0IDEuNTI0OUgxMi4xOTA0VjIuMjg0OUgxMi45NTA0VjEuNTI0OVoiIGZpbGw9IiNmZmZmZmYiLz4KPHBhdGggZD0iTTEyLjE5MDggMTAuNjY1SDExLjQyNThWMTEuNDNIMTIuMTkwOFYxMC42NjVaIiBmaWxsPSIjZmZmZmZmIi8+CjxwYXRoIGQ9Ik0xMi4xOTA4IDAuNzYwMDFIMTEuNDI1OFYxLjUyNTAxSDEyLjE5MDhWMC43NjAwMVoiIGZpbGw9IiNmZmZmZmYiLz4KPHBhdGggZD0iTTkuMTQwMzEgMTEuNDI5OVY4LjM3OTg4SDguMzgwMzFWMTEuNDI5OUg3LjYyMDMxVjguMzc5ODhINi44NTUzMVYxMS40Mjk5SDQuNTcwMzFWMTIuMTg5OUg1LjMzMDMxVjE1LjIzOTlINi4wOTUzMVYxNC40NzQ5SDkuOTA1MzFWMTUuMjM5OUgxMC42NjUzVjEyLjE4OTlIMTEuNDI1M1YxMS40Mjk5SDkuMTQwMzFaTTkuOTA1MzEgMTIuOTQ5OUg2LjA5NTMxVjEyLjE4OTlIOS45MDUzMVYxMi45NDk5WiIgZmlsbD0iI2ZmZmZmZiIvPgo8cGF0aCBkPSJNMTAuNjY1MyA1LjMzNDk2SDkuOTA1MjdWNi44NTQ5NkgxMC42NjUzVjUuMzM0OTZaIiBmaWxsPSIjZmZmZmZmIi8+CjxwYXRoIGQ9Ik05LjkwNTYyIDYuODU0OThIOS4xNDA2MlY4LjM3OTk4SDkuOTA1NjJWNi44NTQ5OFoiIGZpbGw9IiNmZmZmZmYiLz4KPHBhdGggZD0iTTkuOTA1NyAxNS4yNEg2LjA5NTdWMTZIOS45MDU3VjE1LjI0WiIgZmlsbD0iI2ZmZmZmZiIvPgo8cGF0aCBkPSJNNi44NTU3IDYuODU0OThINi4wOTU3VjguMzc5OThINi44NTU3VjYuODU0OThaIiBmaWxsPSIjZmZmZmZmIi8+CjxwYXRoIGQ9Ik02LjA5NTA4IDUuMzM0OTZINS4zMzAwOFY2Ljg1NDk2SDYuMDk1MDhWNS4zMzQ5NloiIGZpbGw9IiNmZmZmZmYiLz4KPHBhdGggZD0iTTExLjQyNTMgMEg0LjU3MDMxVjAuNzZIMTEuNDI1M1YwWiIgZmlsbD0iI2ZmZmZmZiIvPgo8cGF0aCBkPSJNNC41NzA1NSAxMC42NjVIMy44MTA1NVYxMS40M0g0LjU3MDU1VjEwLjY2NVoiIGZpbGw9IiNmZmZmZmYiLz4KPHBhdGggZD0iTTQuNTcwNTUgMC43NjAwMUgzLjgxMDU1VjEuNTI1MDFINC41NzA1NVYwLjc2MDAxWiIgZmlsbD0iI2ZmZmZmZiIvPgo8cGF0aCBkPSJNMy44MDk5MiA5LjkwNTAzSDMuMDQ0OTJWMTAuNjY1SDMuODA5OTJWOS45MDUwM1oiIGZpbGw9IiNmZmZmZmYiLz4KPHBhdGggZD0iTTMuODA5OTIgMS41MjQ5SDMuMDQ0OTJWMi4yODQ5SDMuODA5OTJWMS41MjQ5WiIgZmlsbD0iI2ZmZmZmZiIvPgo8cGF0aCBkPSJNMy4wNDUxNiA5LjE0NTAySDIuMjg1MTZWOS45MDUwMkgzLjA0NTE2VjkuMTQ1MDJaIiBmaWxsPSIjZmZmZmZmIi8+CjxwYXRoIGQ9Ik0zLjA0NTE2IDIuMjg1MTZIMi4yODUxNlYzLjA1MDE2SDMuMDQ1MTZWMi4yODUxNloiIGZpbGw9IiNmZmZmZmYiLz4KPHBhdGggZD0iTTIuMjg1MzkgMy4wNTAwNUgxLjUyNTM5VjkuMTQ1MDVIMi4yODUzOVYzLjA1MDA1WiIgZmlsbD0iI2ZmZmZmZiIvPgo8L3N2Zz4K");
+ }
+ }
+ .note > div {
+ &:before {
+ background-image: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzE0NF84MTk3MikiPgo8cGF0aCBkPSJNMTUuNjE3NCA0LjE4OTk0SDE0Ljg1NzRWNS43MTQ5NEgxNS42MTc0VjQuMTg5OTRaIiBmaWxsPSIjZmZmZmZmIi8+CjxwYXRoIGQ9Ik0xNC44NTc3IDMuNDI5OTNIMTQuMDk3N1Y0LjE4OTkzSDE0Ljg1NzdWMy40Mjk5M1oiIGZpbGw9IiNmZmZmZmYiLz4KPHBhdGggZD0iTTE0Ljg1OCA1LjcxNDg0SDEzLjMzM1Y2LjQ3NDg0SDE0Ljg1OFY1LjcxNDg0WiIgZmlsbD0iI2ZmZmZmZiIvPgo8cGF0aCBkPSJNMTQuMDk4IDIuNjY1MDRIMTMuMzMzVjMuNDMwMDRIMTQuMDk4VjIuNjY1MDRaIiBmaWxsPSIjZmZmZmZmIi8+CjxwYXRoIGQ9Ik0xMy4zMzIzIDQuOTQ5NzFIMTIuNTcyM1Y1LjcxNDcxSDEzLjMzMjNWNC45NDk3MVoiIGZpbGw9IiNmZmZmZmYiLz4KPHBhdGggZD0iTTEzLjMzMjMgMS45MDQ3OUgxMi41NzIzVjIuNjY0NzlIMTMuMzMyM1YxLjkwNDc5WiIgZmlsbD0iI2ZmZmZmZiIvPgo8cGF0aCBkPSJNMTIuNTcyNiA1LjcxNDg0SDExLjgwNzZWNi40NzQ4NEgxMi41NzI2VjUuNzE0ODRaIiBmaWxsPSIjZmZmZmZmIi8+CjxwYXRoIGQ9Ik0xMi41NzI2IDQuMTg5OTRIMTEuODA3NlY0Ljk0OTk0SDEyLjU3MjZWNC4xODk5NFoiIGZpbGw9IiNmZmZmZmYiLz4KPHBhdGggZD0iTTEyLjU3MjYgMS4xMzk4OUgxMS44MDc2VjEuOTA0ODlIMTIuNTcyNlYxLjEzOTg5WiIgZmlsbD0iI2ZmZmZmZiIvPgo8cGF0aCBkPSJNMTEuODA3OSA4Ljc1OTc3SDExLjA0NzlWMTEuMDQ0OEgxMS44MDc5VjguNzU5NzdaIiBmaWxsPSIjZmZmZmZmIi8+CjxwYXRoIGQ9Ik0xMS44MDc5IDYuNDc0ODVIMTEuMDQ3OVY3LjIzNDg1SDExLjgwNzlWNi40NzQ4NVoiIGZpbGw9IiNmZmZmZmYiLz4KPHBhdGggZD0iTTExLjgwNzkgMy40Mjk5M0gxMS4wNDc5VjQuMTg5OTNIMTEuODA3OVYzLjQyOTkzWiIgZmlsbD0iI2ZmZmZmZiIvPgo8cGF0aCBkPSJNMTEuODA3MSAwLjM3OTg4M0gxMC4yODcxVjEuMTM5ODhIMTEuODA3MVYwLjM3OTg4M1oiIGZpbGw9IiNmZmZmZmYiLz4KPHBhdGggZD0iTTExLjA0NzEgMTEuMDQ0OUgxMC4yODcxVjEyLjU2OTlIMTEuMDQ3MVYxMS4wNDQ5WiIgZmlsbD0iI2ZmZmZmZiIvPgo8cGF0aCBkPSJNMTEuMDQ3MSA3LjIzNDg2SDEwLjI4NzFWOC43NTk4NkgxMS4wNDcxVjcuMjM0ODZaIiBmaWxsPSIjZmZmZmZmIi8+CjxwYXRoIGQ9Ik0xMS4wNDcxIDIuNjY1MDRIMTAuMjg3MVYzLjQzMDA0SDExLjA0NzFWMi42NjUwNFoiIGZpbGw9IiNmZmZmZmYiLz4KPHBhdGggZD0iTTEwLjI4ODQgMTIuNTY5OEg5LjUyMzQ0VjEzLjMyOThIMTAuMjg4NFYxMi41Njk4WiIgZmlsbD0iI2ZmZmZmZiIvPgo8cGF0aCBkPSJNMTAuMjg4NCAzLjQyOTkzSDkuNTIzNDRWNC4xODk5M0gxMC4yODg0VjMuNDI5OTNaIiBmaWxsPSIjZmZmZmZmIi8+CjxwYXRoIGQ9Ik0xMC4yODg0IDEuMTM5ODlIOS41MjM0NFYyLjY2NDg5SDEwLjI4ODRWMS4xMzk4OVoiIGZpbGw9IiNmZmZmZmYiLz4KPHBhdGggZD0iTTkuNTIyNyA4SDguNzYyN1Y4Ljc2SDkuNTIyN1Y4WiIgZmlsbD0iI2ZmZmZmZiIvPgo8cGF0aCBkPSJNOS41MjI3IDQuMTg5OTRIOC43NjI3VjQuOTQ5OTRIOS41MjI3VjQuMTg5OTRaIiBmaWxsPSIjZmZmZmZmIi8+CjxwYXRoIGQ9Ik05LjUyMjkzIDEzLjMyOThIOC4wMDI5M1YxNC4wOTQ4SDkuNTIyOTNWMTMuMzI5OFoiIGZpbGw9IiNmZmZmZmYiLz4KPHBhdGggZD0iTTguNzYyOTMgNy4yMzQ4Nkg4LjAwMjkzVjcuOTk5ODZIOC43NjI5M1Y3LjIzNDg2WiIgZmlsbD0iI2ZmZmZmZiIvPgo8cGF0aCBkPSJNOC4wMDMyOCAxMi41Njk4SDcuMjM4MjhWMTMuMzI5OEg4LjAwMzI4VjEyLjU2OThaIiBmaWxsPSIjZmZmZmZmIi8+CjxwYXRoIGQ9Ik04LjAwMzI4IDYuNDc0ODVINy4yMzgyOFY3LjIzNDg1SDguMDAzMjhWNi40NzQ4NVoiIGZpbGw9IiNmZmZmZmYiLz4KPHBhdGggZD0iTTguNzYzMjggNC45NDk3MUg3LjIzODI4VjUuNzE0NzFIOC43NjMyOFY0Ljk0OTcxWiIgZmlsbD0iI2ZmZmZmZiIvPgo8cGF0aCBkPSJNNy4yMzg1MiAxMS44MTAxSDYuNDc4NTJWMTIuNTcwMUg3LjIzODUyVjExLjgxMDFaIiBmaWxsPSIjZmZmZmZmIi8+CjxwYXRoIGQ9Ik0xLjkwNzgxIDE0Ljg1NDlIMi42Njc4MVYxNC4wOTQ5SDMuNDI3ODFWMTMuMzI5OUg0LjE5MjgxVjEyLjU2OTlINC45NTI4MVYxMS44MDk5SDYuNDc3ODFWMTEuMDQ0OUg1LjcxMjgxVjEwLjI4NDlINC45NTI4MVY5LjUyNDlINC4xOTI4MVYxMS4wNDQ5SDMuNDI3ODFWMTEuODA5OUgyLjY2NzgxVjEyLjU2OTlIMS45MDc4MVYxMy4zMjk5SDEuMTQyODFWMTQuMDk0OUgwLjM4MjgxMlYxNS42MTk5SDEuOTA3ODFWMTQuODU0OVoiIGZpbGw9IiNmZmZmZmYiLz4KPHBhdGggZD0iTTcuMjM4MTMgNC4xODk5NEg0Ljk1MzEyVjQuOTQ5OTRINy4yMzgxM1Y0LjE4OTk0WiIgZmlsbD0iI2ZmZmZmZiIvPgo8cGF0aCBkPSJNNC45NTI3MyA0Ljk0OTcxSDMuNDI3NzNWNS43MTQ3MUg0Ljk1MjczVjQuOTQ5NzFaIiBmaWxsPSIjZmZmZmZmIi8+CjxwYXRoIGQ9Ik00LjE5MjczIDguNzU5NzdIMy40Mjc3M1Y5LjUyNDc3SDQuMTkyNzNWOC43NTk3N1oiIGZpbGw9IiNmZmZmZmYiLz4KPHBhdGggZD0iTTMuNDI3OTcgOEgyLjY2Nzk3VjguNzZIMy40Mjc5N1Y4WiIgZmlsbD0iI2ZmZmZmZiIvPgo8cGF0aCBkPSJNMy40Mjc5NyA1LjcxNDg0SDIuNjY3OTdWNi40NzQ4NEgzLjQyNzk3VjUuNzE0ODRaIiBmaWxsPSIjZmZmZmZmIi8+CjxwYXRoIGQ9Ik0yLjY2ODIgNi40NzQ4NUgxLjkwODJWNy45OTk4NUgyLjY2ODJWNi40NzQ4NVoiIGZpbGw9IiNmZmZmZmYiLz4KPC9nPgo8L3N2Zz4K");
+ }
+ }
+ .warning > div {
+ &:before {
+ background-image: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzE0NF84MjAwOSkiPgo8cGF0aCBkPSJNMTYuMDAwMiAxMy43MTQ4SDE1LjI0MDJWMTUuMjM5OEgxNi4wMDAyVjEzLjcxNDhaIiBmaWxsPSIjZmZmZmZmIi8+CjxwYXRoIGQ9Ik0xNS4yMzk2IDEyLjE4OTlIMTQuNDc0NlYxMy43MTQ5SDE1LjIzOTZWMTIuMTg5OVoiIGZpbGw9IiNmZmZmZmYiLz4KPHBhdGggZD0iTTE1LjIzOTggMTUuMjRIMC43NTk3NjZWMTZIMTUuMjM5OFYxNS4yNFoiIGZpbGw9IiNmZmZmZmYiLz4KPHBhdGggZD0iTTE0LjQ3NDggMTAuNjY1SDEzLjcxNDhWMTIuMTlIMTQuNDc0OFYxMC42NjVaIiBmaWxsPSIjZmZmZmZmIi8+CjxwYXRoIGQ9Ik0xMy43MTUyIDkuMTQ1MDJIMTIuOTUwMlYxMC42NjVIMTMuNzE1MlY5LjE0NTAyWiIgZmlsbD0iI2ZmZmZmZiIvPgo8cGF0aCBkPSJNMTIuOTQ5NSA3LjYyMDEySDEyLjE4OTVWOS4xNDUxMkgxMi45NDk1VjcuNjIwMTJaIiBmaWxsPSIjZmZmZmZmIi8+CjxwYXRoIGQ9Ik0xMi4xODk3IDYuMDk0OTdIMTEuNDI5N1Y3LjYxOTk3SDEyLjE4OTdWNi4wOTQ5N1oiIGZpbGw9IiNmZmZmZmYiLz4KPHBhdGggZD0iTTExLjQzIDQuNTY5ODJIMTAuNjY1VjYuMDk0ODJIMTEuNDNWNC41Njk4MloiIGZpbGw9IiNmZmZmZmYiLz4KPHBhdGggZD0iTTEwLjY2NDMgMy4wNDQ5Mkg5LjkwNDNWNC41Njk5MkgxMC42NjQzVjMuMDQ0OTJaIiBmaWxsPSIjZmZmZmZmIi8+CjxwYXRoIGQ9Ik05LjkwNDUzIDEuNTI0OUg5LjE0NDUzVjMuMDQ0OUg5LjkwNDUzVjEuNTI0OVoiIGZpbGw9IiNmZmZmZmYiLz4KPHBhdGggZD0iTTkuMTQ1NyAxMC42NjVINi44NTU3VjExLjQzSDYuMDk1N1YxMy43MTVINi44NTU3VjE0LjQ3NUg5LjE0NTdWMTMuNzE1SDkuOTA1N1YxMS40M0g5LjE0NTdWMTAuNjY1WiIgZmlsbD0iI2ZmZmZmZiIvPgo8cGF0aCBkPSJNOS4xNDU3IDQuNTY5ODJINi44NTU3VjUuMzM0ODJINi4wOTU3VjguMzc5ODJINi44NTU3VjkuOTA0ODJIOS4xNDU3VjguMzc5ODJIOS45MDU3VjUuMzM0ODJIOS4xNDU3VjQuNTY5ODJaTTkuMTQ1NyA3LjYxOTgySDguMzgwN1Y2LjA5NDgySDcuNjIwN1Y1LjMzNDgySDguMzgwN1Y2LjA5NDgySDkuMTQ1N1Y3LjYxOTgyWiIgZmlsbD0iI2ZmZmZmZiIvPgo8cGF0aCBkPSJNOS4xNDQ4OCAwLjc2MDAxSDguMzc5ODhWMS41MjUwMUg5LjE0NDg4VjAuNzYwMDFaIiBmaWxsPSIjZmZmZmZmIi8+CjxwYXRoIGQ9Ik04LjM4MDEyIDBINy42MjAxMlYwLjc2SDguMzgwMTJWMFoiIGZpbGw9IiNmZmZmZmYiLz4KPHBhdGggZD0iTTcuNjIwNDcgMC43NjAwMUg2Ljg1NTQ3VjEuNTI1MDFINy42MjA0N1YwLjc2MDAxWiIgZmlsbD0iI2ZmZmZmZiIvPgo8cGF0aCBkPSJNNi44NTU3IDEuNTI0OUg2LjA5NTdWMy4wNDQ5SDYuODU1N1YxLjUyNDlaIiBmaWxsPSIjZmZmZmZmIi8+CjxwYXRoIGQ9Ik02LjA5NDk2IDMuMDQ0OTJINS4zMzQ5NlY0LjU2OTkySDYuMDk0OTZWMy4wNDQ5MloiIGZpbGw9IiNmZmZmZmYiLz4KPHBhdGggZD0iTTUuMzM1MzEgNC41Njk4Mkg0LjU3MDMxVjYuMDk0ODJINS4zMzUzMVY0LjU2OTgyWiIgZmlsbD0iI2ZmZmZmZiIvPgo8cGF0aCBkPSJNNC41NzA1NSA2LjA5NDk3SDMuODEwNTVWNy42MTk5N0g0LjU3MDU1VjYuMDk0OTdaIiBmaWxsPSIjZmZmZmZmIi8+CjxwYXRoIGQ9Ik0zLjgwOTkyIDcuNjIwMTJIMy4wNDQ5MlY5LjE0NTEySDMuODA5OTJWNy42MjAxMloiIGZpbGw9IiNmZmZmZmYiLz4KPHBhdGggZD0iTTMuMDQ1MTYgOS4xNDUwMkgyLjI4NTE2VjEwLjY2NUgzLjA0NTE2VjkuMTQ1MDJaIiBmaWxsPSIjZmZmZmZmIi8+CjxwYXRoIGQ9Ik0yLjI4NTM5IDEwLjY2NUgxLjUyNTM5VjEyLjE5SDIuMjg1MzlWMTAuNjY1WiIgZmlsbD0iI2ZmZmZmZiIvPgo8cGF0aCBkPSJNMS41MjQ3NyAxMi4xODk5SDAuNzU5NzY2VjEzLjcxNDlIMS41MjQ3N1YxMi4xODk5WiIgZmlsbD0iI2ZmZmZmZiIvPgo8cGF0aCBkPSJNMC43NiAxMy43MTQ4SDBWMTUuMjM5OEgwLjc2VjEzLjcxNDhaIiBmaWxsPSIjZmZmZmZmIi8+CjwvZz4KPC9zdmc+Cg==");
+ }
+ }
+ .info > div {
+ &:before {
+ background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDE2IDE2IiBmaWxsPSJub25lIj4KPHBhdGggZD0iTTYuMDk3MDMgNC45NTIzOUg1LjMzMjAzVjUuNzEyMzlINi4wOTcwM1Y0Ljk1MjM5WiIgZmlsbD0iI2ZmZmZmZiIvPgo8cGF0aCBkPSJNNC41NzI0NiAxNC4xVjYuNDc3NDVINS4zMzI0NlY1LjcxMjQ1SDQuNTcyNDZWNC45NDk5NUgxLjUyMjQ2VjE1LjYxNUg0LjU3MjQ2VjE0Ljg1NUg2LjA5OTk2VjE0LjFINC41NzI0NlpNMy44MDc0NiA3Ljk5OTk1SDMuMDQ5OTZWNi40Nzk5NUgzLjgwOTk2TDMuODA3NDYgNy45OTk5NVoiIGZpbGw9IiNmZmZmZmYiLz4KPHBhdGggZD0iTTYuODU3NjYgNC4xOTI1SDYuMDk3NjZWNC45NTI1SDYuODU3NjZWNC4xOTI1WiIgZmlsbD0iI2ZmZmZmZiIvPgo8cGF0aCBkPSJNNy42MTc0MiAxLjE0MjQ2SDYuODU3NDJWNC4xOTI0Nkg3LjYxNzQyVjEuMTQyNDZaIiBmaWxsPSIjZmZmZmZmIi8+CjxwYXRoIGQ9Ik04LjM4MjE5IDYuNDc3NDJINy42MTcxOVY3LjIzNzQySDguMzgyMTlWNi40Nzc0MloiIGZpbGw9IiNmZmZmZmYiLz4KPHBhdGggZD0iTTkuMTQyMTkgMC4zODI0NDZINy42MTcxOVYxLjE0MjQ1SDkuMTQyMTlWMC4zODI0NDZaIiBmaWxsPSIjZmZmZmZmIi8+CjxwYXRoIGQ9Ik05LjE0MTg0IDUuNzEyNTJIOC4zODE4NFY2LjQ3NzUySDkuMTQxODRWNS43MTI1MloiIGZpbGw9IiNmZmZmZmYiLz4KPHBhdGggZD0iTTkuMTQxODQgOC43NjI0NUg4LjM4MTg0VjEwLjI4NzVIOS4xNDE4NFY4Ljc2MjQ1WiIgZmlsbD0iI2ZmZmZmZiIvPgo8cGF0aCBkPSJNOS4xNDE4NCAxMS4wNDc1SDguMzgxODRWMTIuNTcyNUg5LjE0MTg0VjExLjA0NzVaIiBmaWxsPSIjZmZmZmZmIi8+CjxwYXRoIGQ9Ik05LjkwMjU4IDEuMTQyNDZIOS4xNDI1OFYxLjkwMjQ2SDkuOTAyNThWMS4xNDI0NloiIGZpbGw9IiNmZmZmZmYiLz4KPHBhdGggZD0iTTkuOTAyNTggNC45NTIzOUg5LjE0MjU4VjUuNzEyMzlIOS45MDI1OFY0Ljk1MjM5WiIgZmlsbD0iI2ZmZmZmZiIvPgo8cGF0aCBkPSJNMTAuNjY3MyAxLjkwMjQ3SDkuOTAyMzRWNC45NTI0N0gxMC42NjczVjEuOTAyNDdaIiBmaWxsPSIjZmZmZmZmIi8+CjxwYXRoIGQ9Ik0xMy43MTIzIDUuNzEyNTJIOS45MDIzNFY2LjQ3NzUySDEzLjcxMjNWNS43MTI1MloiIGZpbGw9IiNmZmZmZmYiLz4KPHBhdGggZD0iTTEwLjY2NzcgMTQuMDk3NUg5LjkwMjY2VjE0Ljg1NzVINi4wOTc2NlYxNS42MTc1SDEyLjE5MjdWMTQuODU3NUgxMC42Njc3VjE0LjA5NzVaIiBmaWxsPSIjZmZmZmZmIi8+CjxwYXRoIGQ9Ik05LjE0MjU4IDEyLjU3MjRWMTQuMDk3NEg5LjkwMjU4VjEzLjMzMjRIMTIuOTUyNlYxNC4wOTc0SDEzLjcxMjZWMTIuNTcyNEg5LjE0MjU4WiIgZmlsbD0iI2ZmZmZmZiIvPgo8cGF0aCBkPSJNMTIuOTUyNCAxNC4wOTc0SDEyLjE5MjRWMTQuODU3NEgxMi45NTI0VjE0LjA5NzRaIiBmaWxsPSIjZmZmZmZmIi8+CjxwYXRoIGQ9Ik0xMy43MTI2IDcuOTk3NDJIOS45MDI1OFY2LjQ3NzQySDkuMTQyNThWOC43NjI0MkgxMy43MTI2VjEwLjI4NzRIOS4xNDI1OFYxMS4wNDc0SDEzLjcxMjZWMTIuNTcyNEgxNC40Nzc2VjYuNDc3NDJIMTMuNzEyNlY3Ljk5NzQyWiIgZmlsbD0iI2ZmZmZmZiIvPgo8L3N2Zz4=");
+ }
+ }
+}
+
+.codeblock-dark {
+ border-radius: 0 !important;
+}
diff --git a/website/mint.json b/website/mint.json
new file mode 100644
index 0000000000..5ee80c8390
--- /dev/null
+++ b/website/mint.json
@@ -0,0 +1,588 @@
+{
+ "$schema": "https://mintlify.com/schema.json",
+ "name": "AG2",
+ "logo": {
+ "dark": "/logo/ag2-white.svg",
+ "light": "/logo/ag2.svg"
+ },
+ "metadata": {
+ "og:image": "https://media.githubusercontent.com/media/harishmohanraj/ag2/refs/heads/main/website/static/img/cover.png"
+ },
+ "favicon": "/logo/ag2.svg",
+ "search": {
+ "prompt": "Search or ask..."
+ },
+ "colors": {
+ "primary": "#4b9cd6",
+ "light": "#63a9db",
+ "dark": "#338fd1",
+ "anchors": {
+ "from": "#338fd1",
+ "to": "#63a9db"
+ }
+ },
+ "topbarCtaButton": {
+ "type": "github",
+ "url": "https://github.com/ag2ai/ag2"
+ },
+ "font": {
+ "headings": {
+ "family": "Jersey 10"
+ },
+ "body": {
+ "family": "Inter"
+ }
+ },
+ "tabs": [
+ {
+ "name": "Documentation",
+ "url": "docs"
+ },
+ {
+ "name": "Examples",
+ "url": "notebooks"
+ },
+ {
+ "name": "Blog",
+ "url": "blog"
+ },
+ {
+ "name": "Community Talks",
+ "url": "talks"
+ }
+ ],
+ "anchors": [],
+ "navigation": [
+ {
+ "group": "",
+ "pages": [
+ "docs/Home",
+ "docs/Getting-Started"
+ ]
+ },
+ {
+ "group": "Installation",
+ "pages": [
+ "docs/installation/Installation",
+ "docs/installation/Docker",
+ "docs/installation/Optional-Dependencies"
+ ]
+ },
+ {
+ "group": "Tutorials",
+ "pages": [
+ "docs/tutorial/introduction",
+ "docs/tutorial/chat-termination",
+ "docs/tutorial/human-in-the-loop",
+ "docs/tutorial/code-executors",
+ "docs/tutorial/tool-use",
+ "docs/tutorial/conversation-patterns",
+ "docs/tutorial/what-next"
+ ]
+ },
+ {
+ "group": "Use Cases",
+ "pages": [
+ "docs/Use-Cases/agent_chat",
+ "docs/Use-Cases/enhanced_inference"
+ ]
+ },
+ {
+ "group": "User Guide",
+ "pages": [
+ {
+ "group": "Code Execution",
+ "pages": [
+ "docs/topics/code-execution/cli-code-executor",
+ "docs/topics/code-execution/custom-executor",
+ "docs/topics/code-execution/jupyter-code-executor",
+ "docs/topics/code-execution/user-defined-functions"
+ ]
+ },
+ {
+ "group": "OpenAI Assistant",
+ "pages": [
+ "docs/topics/openai-assistant/gpt_assistant_agent"
+ ]
+ },
+ {
+ "group": "GroupChat",
+ "pages": [
+ "docs/topics/groupchat/customized_speaker_selection",
+ "docs/topics/groupchat/resuming_groupchat",
+ "docs/topics/groupchat/transform_messages_speaker_selection",
+ "docs/topics/groupchat/using_custom_model_client_classes"
+ ]
+ },
+ {
+ "group": "Using Non-OpenAI Models",
+ "pages": [
+ "docs/topics/non-openai-models/about-using-nonopenai-models",
+ "docs/topics/non-openai-models/best-tips-for-nonopenai-models",
+ "docs/topics/non-openai-models/cloud-anthropic",
+ "docs/topics/non-openai-models/cloud-bedrock",
+ "docs/topics/non-openai-models/cloud-cerebras",
+ "docs/topics/non-openai-models/cloud-cohere",
+ "docs/topics/non-openai-models/cloud-gemini",
+ "docs/topics/non-openai-models/cloud-gemini_vertexai",
+ "docs/topics/non-openai-models/cloud-groq",
+ "docs/topics/non-openai-models/cloud-litellm-watsonx",
+ "docs/topics/non-openai-models/cloud-mistralai",
+ "docs/topics/non-openai-models/cloud-togetherai",
+ "docs/topics/non-openai-models/local-litellm-ollama",
+ "docs/topics/non-openai-models/local-lm-studio",
+ "docs/topics/non-openai-models/local-ollama",
+ "docs/topics/non-openai-models/local-vllm"
+ ]
+ },
+ {
+ "group": "CaptainAgent",
+ "pages": [
+ "docs/topics/captainagent/agent_library",
+ "docs/topics/captainagent/configurations",
+ "docs/topics/captainagent/tool_library"
+ ]
+ },
+ {
+ "group": "Handling Long Contexts",
+ "pages": [
+ "docs/topics/handling_long_contexts/compressing_text_w_llmligua",
+ "docs/topics/handling_long_contexts/intro_to_transform_messages"
+ ]
+ },
+ "docs/topics/llm-caching",
+ "docs/topics/llm-observability",
+ "docs/topics/llm_configuration",
+ {
+ "group": "Prompting and Reasoning",
+ "pages": [
+ "docs/topics/prompting-and-reasoning/react",
+ "docs/topics/prompting-and-reasoning/reflection"
+ ]
+ },
+ "docs/topics/retrieval_augmentation",
+ "docs/topics/swarm",
+ "docs/topics/task_decomposition",
+ "docs/FAQ"
+ ]
+ },
+ {
+ "group": "API Reference",
+ "pages": [
+ {
+ "group": "agentchat",
+ "pages": [
+ {
+ "group": "agentchat.contrib",
+ "pages": [
+ {
+ "group": "agentchat.contrib.agent_eval",
+ "pages": [
+ "docs/reference/agentchat/contrib/agent_eval/agent_eval",
+ "docs/reference/agentchat/contrib/agent_eval/criterion",
+ "docs/reference/agentchat/contrib/agent_eval/critic_agent",
+ "docs/reference/agentchat/contrib/agent_eval/quantifier_agent",
+ "docs/reference/agentchat/contrib/agent_eval/subcritic_agent",
+ "docs/reference/agentchat/contrib/agent_eval/task"
+ ]
+ },
+ {
+ "group": "agentchat.contrib.capabilities",
+ "pages": [
+ "docs/reference/agentchat/contrib/capabilities/agent_capability",
+ "docs/reference/agentchat/contrib/capabilities/generate_images",
+ "docs/reference/agentchat/contrib/capabilities/teachability",
+ "docs/reference/agentchat/contrib/capabilities/text_compressors",
+ "docs/reference/agentchat/contrib/capabilities/transform_messages",
+ "docs/reference/agentchat/contrib/capabilities/transforms",
+ "docs/reference/agentchat/contrib/capabilities/transforms_util",
+ "docs/reference/agentchat/contrib/capabilities/vision_capability"
+ ]
+ },
+ {
+ "group": "agentchat.contrib.captainagent",
+ "pages": [
+ {
+ "group": "agentchat.contrib.captainagent.tools",
+ "pages": [
+ {
+ "group": "agentchat.contrib.captainagent.tools.data_analysis",
+ "pages": [
+ "docs/reference/agentchat/contrib/captainagent/tools/data_analysis/calculate_correlation",
+ "docs/reference/agentchat/contrib/captainagent/tools/data_analysis/calculate_skewness_and_kurtosis",
+ "docs/reference/agentchat/contrib/captainagent/tools/data_analysis/detect_outlier_iqr",
+ "docs/reference/agentchat/contrib/captainagent/tools/data_analysis/detect_outlier_zscore",
+ "docs/reference/agentchat/contrib/captainagent/tools/data_analysis/explore_csv",
+ "docs/reference/agentchat/contrib/captainagent/tools/data_analysis/shapiro_wilk_test"
+ ]
+ },
+ {
+ "group": "agentchat.contrib.captainagent.tools.information_retrieval",
+ "pages": [
+ "docs/reference/agentchat/contrib/captainagent/tools/information_retrieval/arxiv_download",
+ "docs/reference/agentchat/contrib/captainagent/tools/information_retrieval/arxiv_search",
+ "docs/reference/agentchat/contrib/captainagent/tools/information_retrieval/extract_pdf_image",
+ "docs/reference/agentchat/contrib/captainagent/tools/information_retrieval/extract_pdf_text",
+ "docs/reference/agentchat/contrib/captainagent/tools/information_retrieval/get_wikipedia_text",
+ "docs/reference/agentchat/contrib/captainagent/tools/information_retrieval/get_youtube_caption",
+ "docs/reference/agentchat/contrib/captainagent/tools/information_retrieval/image_qa",
+ "docs/reference/agentchat/contrib/captainagent/tools/information_retrieval/optical_character_recognition",
+ "docs/reference/agentchat/contrib/captainagent/tools/information_retrieval/perform_web_search",
+ "docs/reference/agentchat/contrib/captainagent/tools/information_retrieval/scrape_wikipedia_tables",
+ "docs/reference/agentchat/contrib/captainagent/tools/information_retrieval/transcribe_audio_file",
+ "docs/reference/agentchat/contrib/captainagent/tools/information_retrieval/youtube_download"
+ ]
+ },
+ {
+ "group": "agentchat.contrib.captainagent.tools.math",
+ "pages": [
+ "docs/reference/agentchat/contrib/captainagent/tools/math/calculate_circle_area_from_diameter",
+ "docs/reference/agentchat/contrib/captainagent/tools/math/calculate_day_of_the_week",
+ "docs/reference/agentchat/contrib/captainagent/tools/math/calculate_fraction_sum",
+ "docs/reference/agentchat/contrib/captainagent/tools/math/calculate_matrix_power",
+ "docs/reference/agentchat/contrib/captainagent/tools/math/calculate_reflected_point",
+ "docs/reference/agentchat/contrib/captainagent/tools/math/complex_numbers_product",
+ "docs/reference/agentchat/contrib/captainagent/tools/math/compute_currency_conversion",
+ "docs/reference/agentchat/contrib/captainagent/tools/math/count_distinct_permutations",
+ "docs/reference/agentchat/contrib/captainagent/tools/math/evaluate_expression",
+ "docs/reference/agentchat/contrib/captainagent/tools/math/find_continuity_point",
+ "docs/reference/agentchat/contrib/captainagent/tools/math/fraction_to_mixed_numbers",
+ "docs/reference/agentchat/contrib/captainagent/tools/math/modular_inverse_sum",
+ "docs/reference/agentchat/contrib/captainagent/tools/math/simplify_mixed_numbers",
+ "docs/reference/agentchat/contrib/captainagent/tools/math/sum_of_digit_factorials",
+ "docs/reference/agentchat/contrib/captainagent/tools/math/sum_of_primes_below"
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "group": "agentchat.contrib.graph_rag",
+ "pages": [
+ "docs/reference/agentchat/contrib/graph_rag/document",
+ "docs/reference/agentchat/contrib/graph_rag/falkor_graph_query_engine",
+ "docs/reference/agentchat/contrib/graph_rag/falkor_graph_rag_capability",
+ "docs/reference/agentchat/contrib/graph_rag/graph_query_engine",
+ "docs/reference/agentchat/contrib/graph_rag/graph_rag_capability",
+ "docs/reference/agentchat/contrib/graph_rag/neo4j_graph_query_engine",
+ "docs/reference/agentchat/contrib/graph_rag/neo4j_graph_rag_capability"
+ ]
+ },
+ {
+ "group": "agentchat.contrib.vectordb",
+ "pages": [
+ "docs/reference/agentchat/contrib/vectordb/base",
+ "docs/reference/agentchat/contrib/vectordb/chromadb",
+ "docs/reference/agentchat/contrib/vectordb/mongodb",
+ "docs/reference/agentchat/contrib/vectordb/pgvectordb",
+ "docs/reference/agentchat/contrib/vectordb/qdrant",
+ "docs/reference/agentchat/contrib/vectordb/utils"
+ ]
+ },
+ "docs/reference/agentchat/contrib/agent_builder",
+ "docs/reference/agentchat/contrib/agent_optimizer",
+ "docs/reference/agentchat/contrib/captainagent",
+ "docs/reference/agentchat/contrib/gpt_assistant_agent",
+ "docs/reference/agentchat/contrib/img_utils",
+ "docs/reference/agentchat/contrib/llamaindex_conversable_agent",
+ "docs/reference/agentchat/contrib/llava_agent",
+ "docs/reference/agentchat/contrib/math_user_proxy_agent",
+ "docs/reference/agentchat/contrib/multimodal_conversable_agent",
+ "docs/reference/agentchat/contrib/qdrant_retrieve_user_proxy_agent",
+ "docs/reference/agentchat/contrib/reasoning_agent",
+ "docs/reference/agentchat/contrib/retrieve_assistant_agent",
+ "docs/reference/agentchat/contrib/retrieve_user_proxy_agent",
+ "docs/reference/agentchat/contrib/society_of_mind_agent",
+ "docs/reference/agentchat/contrib/swarm_agent",
+ "docs/reference/agentchat/contrib/text_analyzer_agent",
+ "docs/reference/agentchat/contrib/tool_retriever",
+ "docs/reference/agentchat/contrib/web_surfer"
+ ]
+ },
+ "docs/reference/agentchat/agent",
+ "docs/reference/agentchat/assistant_agent",
+ "docs/reference/agentchat/chat",
+ "docs/reference/agentchat/conversable_agent",
+ "docs/reference/agentchat/groupchat",
+ "docs/reference/agentchat/user_proxy_agent",
+ "docs/reference/agentchat/utils"
+ ]
+ },
+ {
+ "group": "cache",
+ "pages": [
+ "docs/reference/cache/abstract_cache_base",
+ "docs/reference/cache/cache",
+ "docs/reference/cache/cache_factory",
+ "docs/reference/cache/cosmos_db_cache",
+ "docs/reference/cache/disk_cache",
+ "docs/reference/cache/in_memory_cache",
+ "docs/reference/cache/redis_cache"
+ ]
+ },
+ {
+ "group": "coding",
+ "pages": [
+ {
+ "group": "coding.jupyter",
+ "pages": [
+ "docs/reference/coding/jupyter/base",
+ "docs/reference/coding/jupyter/docker_jupyter_server",
+ "docs/reference/coding/jupyter/embedded_ipython_code_executor",
+ "docs/reference/coding/jupyter/jupyter_client",
+ "docs/reference/coding/jupyter/jupyter_code_executor",
+ "docs/reference/coding/jupyter/local_jupyter_server"
+ ]
+ },
+ "docs/reference/coding/base",
+ "docs/reference/coding/docker_commandline_code_executor",
+ "docs/reference/coding/factory",
+ "docs/reference/coding/func_with_reqs",
+ "docs/reference/coding/local_commandline_code_executor",
+ "docs/reference/coding/markdown_code_extractor",
+ "docs/reference/coding/utils"
+ ]
+ },
+ {
+ "group": "io",
+ "pages": [
+ "docs/reference/io/base",
+ "docs/reference/io/console",
+ "docs/reference/io/websockets"
+ ]
+ },
+ {
+ "group": "logger",
+ "pages": [
+ "docs/reference/logger/base_logger",
+ "docs/reference/logger/file_logger"
+ ]
+ },
+ {
+ "group": "oai",
+ "pages": [
+ "docs/reference/oai/anthropic",
+ "docs/reference/oai/bedrock",
+ "docs/reference/oai/cerebras",
+ "docs/reference/oai/client",
+ "docs/reference/oai/client_utils",
+ "docs/reference/oai/cohere",
+ "docs/reference/oai/completion",
+ "docs/reference/oai/gemini",
+ "docs/reference/oai/groq",
+ "docs/reference/oai/mistral",
+ "docs/reference/oai/ollama",
+ "docs/reference/oai/openai_utils",
+ "docs/reference/oai/together"
+ ]
+ },
+ "docs/reference/browser_utils",
+ "docs/reference/code_utils",
+ "docs/reference/exception_utils",
+ "docs/reference/function_utils",
+ "docs/reference/graph_utils",
+ "docs/reference/math_utils",
+ "docs/reference/retrieve_utils",
+ "docs/reference/runtime_logging",
+ "docs/reference/token_count_utils"
+ ]
+ },
+ {
+ "group": "AutoGen Studio",
+ "pages": [
+ "docs/autogen-studio/getting-started",
+ "docs/autogen-studio/usage",
+ "docs/autogen-studio/faqs"
+ ]
+ },
+ {
+ "group": "Ecosystem",
+ "pages": [
+ "docs/ecosystem/agentops",
+ "docs/ecosystem/azure_cosmos_db",
+ "docs/ecosystem/composio",
+ "docs/ecosystem/databricks",
+ "docs/ecosystem/llamaindex",
+ "docs/ecosystem/mem0",
+ "docs/ecosystem/memgpt",
+ "docs/ecosystem/microsoft-fabric",
+ "docs/ecosystem/ollama",
+ "docs/ecosystem/pgvector",
+ "docs/ecosystem/portkey",
+ "docs/ecosystem/promptflow"
+ ]
+ },
+ {
+ "group": "Contributor Guide",
+ "pages": [
+ "docs/contributor-guide/contributing",
+ "docs/contributor-guide/docker",
+ "docs/contributor-guide/documentation",
+ "docs/contributor-guide/file-bug-report",
+ "docs/contributor-guide/maintainer",
+ "docs/contributor-guide/pre-commit",
+ "docs/contributor-guide/tests",
+ "docs/Research",
+ "docs/Migration-Guide"
+ ]
+ },
+ {
+ "group": "Talks",
+ "pages": [
+ "talks/future_talks/index",
+ "talks/2024-11-28/index",
+ "talks/2024-11-25/index",
+ "talks/2024-11-18/index",
+ "talks/2024-11-12/index",
+ "talks/2024-11-11/index",
+ "talks/2024-11-04/index",
+ "talks/2024-10-15/index",
+ "talks/2024-10-14/index",
+ "talks/2024-09-30/index",
+ "talks/2024-09-23/index",
+ "talks/2024-08-26/index"
+ ]
+ },
+ {
+ "group": "Blog",
+ "pages": [
+ {
+ "group": "Recent posts",
+ "pages": [
+ "blog/2024-12-06-FalkorDB-Structured/index",
+ "blog/2024-12-02-ReasoningAgent2/index",
+ "blog/2024-11-27-Prompt-Leakage-Probing/index",
+ "blog/2024-11-17-Swarm/index",
+ "blog/2024-11-15-CaptainAgent/index",
+ "blog/2024-10-23-NOVA/index",
+ "blog/2024-07-25-AgentOps/index",
+ "blog/2024-06-24-AltModels-Classes/index",
+ "blog/2024-06-21-AgentEval/index",
+ "blog/2024-05-24-Agent/index",
+ "blog/2024-03-11-AutoDefense/index",
+ "blog/2024-03-03-AutoGen-Update/index",
+ "blog/2024-02-29-StateFlow/index",
+ "blog/2024-02-11-FSM-GroupChat/index",
+ "blog/2024-02-02-AutoAnny/index",
+ "blog/2024-01-26-Custom-Models/index",
+ "blog/2024-01-25-AutoGenBench/index",
+ "blog/2024-01-23-Code-execution-in-docker/index",
+ "blog/2023-12-29-AgentDescriptions/index",
+ "blog/2023-12-23-AgentOptimizer/index",
+ "blog/2023-12-01-AutoGenStudio/index",
+ "blog/2023-11-26-Agent-AutoBuild/index",
+ "blog/2023-11-20-AgentEval/index",
+ "blog/2023-11-13-OAI-assistants/index",
+ "blog/2023-11-09-EcoAssistant/index",
+ "blog/2023-11-06-LMM-Agent/index",
+ "blog/2023-10-26-TeachableAgent/index",
+ "blog/2023-10-18-RetrieveChat/index",
+ "blog/2023-07-14-Local-LLMs/index",
+ "blog/2023-06-28-MathChat/index",
+ "blog/2023-05-18-GPT-adaptive-humaneval/index",
+ "blog/2023-04-21-LLM-tuning-math/index"
+ ]
+ }
+ ]
+ },
+ {
+ "group": "Examples",
+ "pages": [
+ "notebooks/Examples",
+ {
+ "group": "Examples by Notebook",
+ "pages": [
+ "notebooks/Notebooks",
+ "notebooks/agentchat_RetrieveChat_mongodb",
+ "notebooks/agentchat_RetrieveChat_pgvector",
+ "notebooks/agentchat_RetrieveChat_qdrant",
+ "notebooks/agentchat_agentops",
+ "notebooks/agentchat_agentoptimizer",
+ "notebooks/agentchat_auto_feedback_from_code_execution",
+ "notebooks/agentchat_azr_ai_search",
+ "notebooks/agentchat_captainagent",
+ "notebooks/agentchat_cost_token_tracking",
+ "notebooks/agentchat_custom_model",
+ "notebooks/agentchat_dalle_and_gpt4v",
+ "notebooks/agentchat_databricks_dbrx",
+ "notebooks/agentchat_function_call",
+ "notebooks/agentchat_function_call_async",
+ "notebooks/agentchat_function_call_code_writing",
+ "notebooks/agentchat_function_call_currency_calculator",
+ "notebooks/agentchat_group_chat_with_llamaindex_agents",
+ "notebooks/agentchat_groupchat",
+ "notebooks/agentchat_groupchat_RAG",
+ "notebooks/agentchat_groupchat_customized",
+ "notebooks/agentchat_groupchat_finite_state_machine",
+ "notebooks/agentchat_groupchat_research",
+ "notebooks/agentchat_groupchat_stateflow",
+ "notebooks/agentchat_groupchat_vis",
+ "notebooks/agentchat_guidance",
+ "notebooks/agentchat_human_feedback",
+ "notebooks/agentchat_image_generation_capability",
+ "notebooks/agentchat_inception_function",
+ "notebooks/agentchat_langchain",
+ "notebooks/agentchat_lmm_gpt-4v",
+ "notebooks/agentchat_lmm_llava",
+ "notebooks/agentchat_logging",
+ "notebooks/agentchat_with_memory",
+ "notebooks/agentchat_multi_task_async_chats",
+ "notebooks/agentchat_multi_task_chats",
+ "notebooks/agentchat_nested_chats_chess",
+ "notebooks/agentchat_nested_chats_chess_altmodels",
+ "notebooks/agentchat_nested_sequential_chats",
+ "notebooks/agentchat_nestedchat",
+ "notebooks/agentchat_nestedchat_optiguide",
+ "notebooks/agentchat_oai_assistant_function_call",
+ "notebooks/agentchat_oai_assistant_groupchat",
+ "notebooks/agentchat_oai_assistant_retrieval",
+ "notebooks/agentchat_oai_assistant_twoagents_basic",
+ "notebooks/agentchat_oai_code_interpreter",
+ "notebooks/agentchat_openlit",
+ "notebooks/agentchat_planning",
+ "notebooks/agentchat_reasoning_agent",
+ "notebooks/agentchat_society_of_mind",
+ "notebooks/agentchat_sql_spider",
+ "notebooks/agentchat_stream",
+ "notebooks/agentchat_structured_outputs",
+ "notebooks/agentchat_surfer",
+ "notebooks/agentchat_swarm",
+ "notebooks/agentchat_swarm_graphrag_telemetry_trip_planner",
+ "notebooks/agentchat_swarm_graphrag_trip_planner",
+ "notebooks/agentchat_swarm_w_groupchat_legacy",
+ "notebooks/agentchat_teachability",
+ "notebooks/agentchat_teachable_oai_assistants",
+ "notebooks/agentchat_teaching",
+ "notebooks/agentchat_transform_messages",
+ "notebooks/agentchat_two_users",
+ "notebooks/agentchat_video_transcript_translate_with_whisper",
+ "notebooks/agentchat_web_info",
+ "notebooks/agentchat_webscraping_with_apify",
+ "notebooks/agentchat_websockets",
+ "notebooks/agentchats_sequential_chats",
+ "notebooks/agenteval_cq_math",
+ "notebooks/async_human_input",
+ "notebooks/autobuild_agent_library",
+ "notebooks/autobuild_basic",
+ "notebooks/autogen_uniformed_api_calling",
+ "notebooks/gpt_assistant_agent_function_call",
+ "notebooks/lats_search",
+ "notebooks/JSON_mode_example",
+ "notebooks/agentchat_RetrieveChat",
+ "notebooks/agentchat_graph_rag_neo4j",
+ "notebooks/agentchat_swarm_enhanced"
+ ]
+ },
+ "notebooks/Gallery"
+ ]
+ }
+ ],
+ "footerSocials": {
+ "x": "https://x.com/Chi_Wang_",
+ "github": "https://github.com/ag2ai/ag2",
+ "linkedin": "https://www.linkedin.com/company/ag2ai",
+ "discord": "https://discord.gg/pAbnFJrkgZ",
+ "youtube": "https://www.youtube.com/@ag2ai"
+ }
+}
diff --git a/website/package.json b/website/package.json
index 62edcdad2b..51349b440d 100644
--- a/website/package.json
+++ b/website/package.json
@@ -1,67 +1,13 @@
{
"name": "website",
"version": "0.0.0",
- "private": true,
- "resolutions": {
- "nth-check": "2.0.1",
- "trim": "0.0.3",
- "got": "11.8.5",
- "node-forge": "1.3.0",
- "minimatch": "3.0.5",
- "loader-utils": "2.0.4",
- "eta": "2.0.0",
- "@sideway/formula": "3.0.1",
- "http-cache-semantics": "4.1.1"
- },
+ "description": "The Open Source Agent OS",
"scripts": {
- "docusaurus": "docusaurus",
- "start": "docusaurus start",
- "build": "docusaurus build",
- "swizzle": "docusaurus swizzle",
- "deploy": "docusaurus deploy",
- "clear": "docusaurus clear",
- "serve": "docusaurus serve",
- "write-translations": "docusaurus write-translations",
- "write-heading-ids": "docusaurus write-heading-ids"
+ "test": "echo \"Error: no test specified\" && exit 1",
+ "mintlify:dev": "mintlify dev"
},
+ "license": "Apache-2.0",
"dependencies": {
- "@docusaurus/core": "^3.1.1",
- "@docusaurus/plugin-client-redirects": "^3.1.1",
- "@docusaurus/preset-classic": "^3.1.1",
- "@easyops-cn/docusaurus-search-local": "^0.21.1",
- "@mdx-js/react": "^3.0.0",
- "@svgr/webpack": "^5.5.0",
- "antd": "^5.11.5",
- "clsx": "^1.1.1",
- "docusaurus-plugin-clarity": "^2.1.0",
- "file-loader": "^6.2.0",
- "hast-util-is-element": "1.1.0",
- "joi": "17.6.0",
- "minimatch": "3.0.5",
- "postcss-preset-env": "^9.3.0",
- "react": "^18.2.0",
- "react-dom": "^18.2.0",
- "rehype-katex": "4",
- "remark-math": "3",
- "trim": "^0.0.3",
- "url-loader": "^4.1.1"
- },
- "devDependencies": {
- "@docusaurus/module-type-aliases": "^3.1.1",
- "@docusaurus/types": "^3.1.1",
- "postcss": "^8.4"
- },
- "browserslist": {
- "production": [
- ">0.5%",
- "not dead",
- "not op_mini all"
- ],
- "development": [
- "last 1 chrome version",
- "last 1 firefox version",
- "last 1 safari version"
- ]
- },
- "license": "Apache-2.0"
+ "mintlify": "^4.0.294"
+ }
}
diff --git a/website/process_api_reference.py b/website/process_api_reference.py
new file mode 100644
index 0000000000..9652b8d7fe
--- /dev/null
+++ b/website/process_api_reference.py
@@ -0,0 +1,221 @@
+# Copyright (c) 2023 - 2024, Owners of https://github.com/ag2ai
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# Portions derived from https://github.com/microsoft/autogen are under the MIT License.
+# SPDX-License-Identifier: MIT
+#!/usr/bin/env python
+
+from __future__ import annotations
+
+import argparse
+import json
+import os
+import subprocess
+import sys
+from pathlib import Path
+from typing import Any, List, Optional
+
+
+def run_pydoc_markdown(config_file: Path) -> None:
+ """Run pydoc-markdown with the specified config file.
+
+ Args:
+ config_file (Path): Path to the pydoc-markdown config file
+ """
+ try:
+ subprocess.run(["pydoc-markdown"], check=True, capture_output=True, text=True)
+ print(f"Successfully ran pydoc-markdown with config: {config_file}")
+ except subprocess.CalledProcessError as e:
+ print(f"Error running pydoc-markdown: {e.stderr}")
+ sys.exit(1)
+ except FileNotFoundError:
+ print("pydoc-markdown not found. Please install it with: pip install pydoc-markdown")
+ sys.exit(1)
+
+
+def escape_html_tags(content: str) -> str:
+ """Escape all angle brackets < > in the content.
+
+ Args:
+ content (str): Input text content
+
+ Returns:
+ str: Content with all angle brackets escaped
+ """
+ return content.replace("<", r"\<").replace("{", r"\{")
+
+
+def read_file_content(file_path: str) -> str:
+ """Read content from a file.
+
+ Args:
+ file_path (str): Path to the file
+
+ Returns:
+ str: Content of the file
+ """
+ with open(file_path, "r", encoding="utf-8") as f:
+ return f.read()
+
+
+def write_file_content(file_path: str, content: str) -> None:
+ """Write content to a file.
+
+ Args:
+ file_path (str): Path to the file
+ content (str): Content to write
+ """
+ with open(file_path, "w", encoding="utf-8") as f:
+ f.write(content)
+
+
+def convert_md_to_mdx(input_dir: Path) -> None:
+ """Convert all .md files in directory to .mdx while preserving structure.
+
+ Args:
+ input_dir (Path): Directory containing .md files to convert
+ """
+ if not input_dir.exists():
+ print(f"Directory not found: {input_dir}")
+ sys.exit(1)
+
+ for md_file in input_dir.rglob("*.md"):
+ mdx_file = md_file.with_suffix(".mdx")
+
+ # Read content from .md file
+ content = md_file.read_text(encoding="utf-8")
+
+ # Escape HTML tags
+ processed_content = escape_html_tags(content)
+
+ # Update sidenav title
+ processed_content = processed_content.replace("sidebar_label: ", "sidebarTitle: ")
+
+ # Write content to .mdx file
+ mdx_file.write_text(processed_content, encoding="utf-8")
+
+ # Remove original .md file
+ md_file.unlink()
+ print(f"Converted: {md_file} -> {mdx_file}")
+
+
+def get_mdx_files(directory: Path) -> List[str]:
+ """Get all MDX files in directory and subdirectories."""
+ return [f"{str(p.relative_to(directory).with_suffix(''))}".replace("\\", "/") for p in directory.rglob("*.mdx")]
+
+
+def add_prefix(path: str, parent_groups: List[str] = None) -> str:
+ """Create full path with prefix and parent groups."""
+ groups = parent_groups or []
+ return f"docs/reference/{'/'.join(groups + [path])}"
+
+
+def create_nav_structure(paths: List[str], parent_groups: List[str] = None) -> List[Any]:
+ """Convert list of file paths into nested navigation structure."""
+ groups = {}
+ pages = []
+ parent_groups = parent_groups or []
+
+ for path in paths:
+ parts = path.split("/")
+ if len(parts) == 1:
+ pages.append(add_prefix(path, parent_groups))
+ else:
+ group = parts[0]
+ subpath = "/".join(parts[1:])
+ groups.setdefault(group, []).append(subpath)
+
+ # Sort directories and create their structures
+ sorted_groups = [
+ {
+ "group": ".".join(parent_groups + [group]) if parent_groups else group,
+ "pages": create_nav_structure(subpaths, parent_groups + [group]),
+ }
+ for group, subpaths in sorted(groups.items())
+ ]
+
+ # Sort pages
+ sorted_pages = sorted(pages)
+
+ # Return directories first, then files
+ return sorted_groups + sorted_pages
+
+
+def update_nav(mint_json_path: Path, new_nav_pages: List[Any]) -> None:
+ """
+ Update the 'API Reference' section in mint.json navigation with new pages.
+
+ Args:
+ mint_json_path: Path to mint.json file
+ new_nav_pages: New navigation structure to replace in API Reference pages
+ """
+ try:
+ # Read the current mint.json
+ with open(mint_json_path, "r") as f:
+ mint_config = json.load(f)
+
+ # Find and update the API Reference section
+ for section in mint_config["navigation"]:
+ if section.get("group") == "API Reference":
+ section["pages"] = new_nav_pages
+ break
+
+ # Write back to mint.json with proper formatting
+ with open(mint_json_path, "w") as f:
+ json.dump(mint_config, f, indent=2)
+ f.write("\n")
+
+ except json.JSONDecodeError:
+ print(f"Error: {mint_json_path} is not valid JSON")
+ except Exception as e:
+ print(f"Error updating mint.json: {e}")
+
+
+def update_mint_json_with_api_nav(script_dir: Path, api_dir: Path) -> None:
+ """Update mint.json with MDX files in the API directory."""
+ mint_json_path = script_dir / "mint.json"
+ if not mint_json_path.exists():
+ print(f"File not found: {mint_json_path}")
+ sys.exit(1)
+
+ # Get all MDX files in the API directory
+ mdx_files = get_mdx_files(api_dir)
+
+ # Create navigation structure
+ nav_structure = create_nav_structure(mdx_files)
+
+ # Update mint.json with new navigation
+ update_nav(mint_json_path, nav_structure)
+
+
+def main() -> None:
+ script_dir = Path(__file__).parent.absolute()
+
+ parser = argparse.ArgumentParser(description="Process API reference documentation")
+ parser.add_argument("--config", type=Path, help="Path to pydoc-markdown config file", default=script_dir)
+ parser.add_argument(
+ "--api-dir",
+ type=Path,
+ help="Directory containing API documentation to process",
+ default=script_dir / "docs" / "reference",
+ )
+
+ args = parser.parse_args()
+
+ # Run pydoc-markdown
+ print("Running pydoc-markdown...")
+ run_pydoc_markdown(args.config)
+
+ # Convert MD to MDX
+ print("Converting MD files to MDX...")
+ convert_md_to_mdx(args.api_dir)
+
+ # Update mint.json
+ update_mint_json_with_api_nav(script_dir, args.api_dir)
+
+ print("API reference processing complete!")
+
+
+if __name__ == "__main__":
+ main()
diff --git a/website/process_notebooks.py b/website/process_notebooks.py
index 05f199b37c..0e5b903f77 100755
--- a/website/process_notebooks.py
+++ b/website/process_notebooks.py
@@ -12,6 +12,7 @@
import concurrent.futures
import json
import os
+import re
import shutil
import signal
import subprocess
@@ -23,7 +24,7 @@
from dataclasses import dataclass
from multiprocessing import current_process
from pathlib import Path
-from typing import Dict, Optional, Tuple, Union
+from typing import Dict, List, Optional, Tuple, Union
from termcolor import colored
@@ -77,7 +78,7 @@ def check_quarto_bin(quarto_bin: str = "quarto") -> None:
def notebooks_target_dir(website_directory: Path) -> Path:
"""Return the target directory for notebooks."""
- return website_directory / "docs" / "notebooks"
+ return website_directory / "notebooks"
def load_metadata(notebook: Path) -> typing.Dict:
@@ -230,7 +231,7 @@ def process_notebook(src_notebook: Path, website_dir: Path, notebook_dir: Path,
src_notebook, f"Failed to render {src_notebook}\n\nstderr:\n{result.stderr}\nstdout:\n{result.stdout}"
)
- post_process_mdx(target_file, src_notebook, front_matter)
+ post_process_mdx(target_file, src_notebook, front_matter, website_dir)
return fmt_ok(src_notebook)
@@ -316,8 +317,74 @@ def get_error_info(nb: NotebookNode) -> Optional[NotebookError]:
return None
+def add_front_matter_to_metadata_mdx(
+ front_matter: Dict[str, Union[str, List[str]]], website_dir: Path, rendered_mdx: Path
+) -> None:
+ metadata_mdx = website_dir / "snippets" / "data" / "NotebooksMetadata.mdx"
+
+ metadata = []
+ if metadata_mdx.exists():
+ with open(metadata_mdx, "r", encoding="utf-8") as f:
+ content = f.read()
+ if content:
+ start = content.find("export const notebooksMetadata = [")
+ end = content.rfind("]")
+ if start != -1 and end != -1:
+ metadata = json.loads(content[start + 32 : end + 1])
+
+ # Create new entry for current notebook
+ entry = {
+ "title": front_matter.get("title", ""),
+ "link": f"/notebooks/{rendered_mdx.stem}",
+ "description": front_matter.get("description", ""),
+ "image": front_matter.get("image"),
+ "tags": front_matter.get("tags", []),
+ "source": front_matter.get("source_notebook"),
+ }
+ # Update metadata list
+ existing_entry = next((item for item in metadata if item["title"] == entry["title"]), None)
+ if existing_entry:
+ metadata[metadata.index(existing_entry)] = entry
+ else:
+ metadata.append(entry)
+
+ # Write metadata back to file
+ with open(metadata_mdx, "w", encoding="utf-8") as f:
+ f.write(
+ "{/*\nAuto-generated file - DO NOT EDIT\nPlease edit the add_front_matter_to_metadata_mdx function in process_notebooks.py\n*/}\n\n"
+ )
+ f.write("export const notebooksMetadata = ")
+ f.write(json.dumps(metadata, indent=4))
+ f.write(";\n")
+
+
+def convert_mdx_image_blocks(content: str, rendered_mdx: Path, website_dir: Path) -> str:
+ """
+ Converts MDX code block image syntax to regular markdown image syntax.
+
+ Args:
+ content (str): The markdown content containing mdx-code-block image syntax
+
+ Returns:
+ str: The converted markdown content with standard image syntax
+ """
+
+ def resolve_path(match):
+ img_pattern = r"!\[(.*?)\]\((.*?)\)"
+ img_match = re.search(img_pattern, match.group(1))
+ if not img_match:
+ return match.group(0)
+
+ alt, rel_path = img_match.groups()
+ abs_path = (rendered_mdx.parent / Path(rel_path)).resolve().relative_to(website_dir)
+ return f"![{alt}](/{abs_path})"
+
+ pattern = r"````mdx-code-block\n(!\[.*?\]\(.*?\))\n````"
+ return re.sub(pattern, resolve_path, content)
+
+
# rendered_notebook is the final mdx file
-def post_process_mdx(rendered_mdx: Path, source_notebooks: Path, front_matter: Dict) -> None:
+def post_process_mdx(rendered_mdx: Path, source_notebooks: Path, front_matter: Dict, website_dir: Path) -> None:
with open(rendered_mdx, "r", encoding="utf-8") as f:
content = f.read()
@@ -327,6 +394,9 @@ def post_process_mdx(rendered_mdx: Path, source_notebooks: Path, front_matter: D
front_matter = yaml.safe_load(content[4:front_matter_end])
content = content[front_matter_end + 3 :]
+ # Clean heading IDs using regex - matches from # to the end of ID block
+ content = re.sub(r"(#{1,6}[^{]+){#[^}]+}", r"\1", content)
+
# Each intermediate path needs to be resolved for this to work reliably
repo_root = Path(__file__).parent.resolve().parent.resolve()
repo_relative_notebook = source_notebooks.resolve().relative_to(repo_root)
@@ -334,49 +404,52 @@ def post_process_mdx(rendered_mdx: Path, source_notebooks: Path, front_matter: D
front_matter["custom_edit_url"] = f"https://github.com/ag2ai/ag2/edit/main/{repo_relative_notebook}"
# Is there a title on the content? Only search up until the first code cell
- first_code_cell = content.find("```")
- if first_code_cell != -1:
- title_search_content = content[:first_code_cell]
- else:
- title_search_content = content
-
- title_exists = title_search_content.find("\n# ") != -1
- if not title_exists:
- content = f"# {front_matter['title']}\n{content}"
-
+ # first_code_cell = content.find("```")
+ # if first_code_cell != -1:
+ # title_search_content = content[:first_code_cell]
+ # else:
+ # title_search_content = content
+
+ # title_exists = title_search_content.find("\n# ") != -1
+ # if not title_exists:
+ # content = f"# {front_matter['title']}\n{content}"
# inject in content directly after the markdown title the word done
# Find the end of the line with the title
- title_end = content.find("\n", content.find("#"))
+ # title_end = content.find("\n", content.find("#"))
# Extract page title
- title = content[content.find("#") + 1 : content.find("\n", content.find("#"))].strip()
+ # title = content[content.find("#") + 1 : content.find("\n", content.find("#"))].strip()
# If there is a { in the title we trim off the { and everything after it
- if "{" in title:
- title = title[: title.find("{")].strip()
+ # if "{" in title:
+ # title = title[: title.find("{")].strip()
github_link = f"https://github.com/ag2ai/ag2/blob/main/{repo_relative_notebook}"
content = (
- content[:title_end]
- + "\n[![Open on GitHub](https://img.shields.io/badge/Open%20on%20GitHub-grey?logo=github)]("
- + github_link
- + ")"
- + content[title_end:]
+ f'\n'
+ + """ """
+ + " "
+ + content
)
# If no colab link is present, insert one
if "colab-badge.svg" not in content:
colab_link = f"https://colab.research.google.com/github/ag2ai/ag2/blob/main/{repo_relative_notebook}"
content = (
- content[:title_end]
- + "\n[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)]("
- + colab_link
- + ")"
- + content[title_end:]
+ f'\n'
+ + """ """
+ + " "
+ + content
)
+ # Create the front matter metadata js file for examples by notebook section
+ add_front_matter_to_metadata_mdx(front_matter, website_dir, rendered_mdx)
+
# Dump front_matter to ysaml
front_matter = yaml.dump(front_matter, default_flow_style=False)
+ # Convert mdx image syntax to mintly image syntax
+ content = convert_mdx_image_blocks(content, rendered_mdx, website_dir)
+
# Rewrite the content as
# ---
# front_matter
@@ -430,6 +503,140 @@ def f() -> None:
thread.start()
+def copy_examples_mdx_files(website_dir: str) -> None:
+ # The mdx files to copy to the notebooks directory
+ example_section_mdx_files = ["Examples", "Gallery", "Notebooks"]
+
+ # Create notebooks directory if it doesn't exist
+ website_dir = Path(website_dir)
+ notebooks_dir = website_dir / "notebooks"
+ notebooks_dir.mkdir(parents=True, exist_ok=True)
+
+ for mdx_file in example_section_mdx_files:
+ src_mdx_file_path = (website_dir / "docs" / f"{mdx_file}.mdx").resolve()
+ dest_mdx_file_path = (notebooks_dir / f"{mdx_file}.mdx").resolve()
+ # Copy mdx file to notebooks directory
+ shutil.copy(src_mdx_file_path, dest_mdx_file_path)
+
+
+def update_navigation_with_notebooks(website_dir: Path) -> None:
+ """
+ Updates mint.json navigation to include notebook entries from NotebooksMetadata.mdx.
+
+ Args:
+ website_dir (Path): Root directory of the website
+ """
+ mint_json_path = (website_dir / "mint.json").resolve()
+ metadata_path = (website_dir / "snippets" / "data" / "NotebooksMetadata.mdx").resolve()
+
+ if not mint_json_path.exists():
+ print(f"mint.json not found at {mint_json_path}")
+ return
+
+ if not metadata_path.exists():
+ print(f"NotebooksMetadata.mdx not found at {metadata_path}")
+ return
+
+ # Read mint.json
+ with open(mint_json_path, "r", encoding="utf-8") as f:
+ mint_config = json.load(f)
+
+ # Read NotebooksMetadata.mdx and extract metadata links
+ with open(metadata_path, "r", encoding="utf-8") as f:
+ content = f.read()
+ # Extract the array between the brackets
+ start = content.find("export const notebooksMetadata = [")
+ end = content.rfind("]")
+ if start == -1 or end == -1:
+ print("Could not find notebooksMetadata in the file")
+ return
+ metadata_str = content[start + 32 : end + 1]
+ notebooks_metadata = json.loads(metadata_str)
+
+ # Find the Examples group in navigation
+ examples_group = None
+ for group in mint_config["navigation"]:
+ if group.get("group") == "Examples":
+ examples_group = group
+ break
+
+ if examples_group is None:
+ print("Examples group not found in navigation")
+ return
+
+ # Create notebooks entry
+ notebooks_entry = {
+ "group": "Examples by Notebook",
+ "pages": ["notebooks/Notebooks"]
+ + [
+ Path(item["source"])
+ .resolve()
+ .with_suffix("")
+ .as_posix()
+ .replace("/website/", "/")
+ .replace("/notebook/", "notebooks/")
+ for item in notebooks_metadata
+ if not item["source"].startswith("/website/docs/")
+ ],
+ }
+
+ # Replace the pages list in Examples group with our standard pages plus notebooks
+ examples_group["pages"] = ["notebooks/Examples", notebooks_entry, "notebooks/Gallery"]
+
+ # Write back to mint.json
+ with open(mint_json_path, "w", encoding="utf-8") as f:
+ json.dump(mint_config, f, indent=2)
+
+ print(f"Updated navigation in {mint_json_path}")
+
+
+def fix_internal_references(content: str, root_path: Path, current_file_path: Path) -> str:
+ """
+ Resolves internal markdown references relative to root_dir and returns fixed content.
+
+ Args:
+ content: Markdown content to fix
+ root_path: Root directory for resolving paths
+ current_file_path: Path of the current file being processed
+ """
+
+ def resolve_link(match):
+ display_text, raw_path = match.groups()
+ try:
+ path_parts = raw_path.split("#")
+ rel_path = path_parts[0]
+ anchor = f"#{path_parts[1]}" if len(path_parts) > 1 else ""
+
+ resolved = (current_file_path.parent / rel_path).resolve()
+ final_path = (resolved.relative_to(root_path.resolve())).with_suffix("")
+
+ return f"[{display_text}](/{final_path}{anchor})"
+ except Exception:
+ return match.group(0)
+
+ pattern = r"\[([^\]]+)\]\(((?:\.\./|\./)?\w+(?:/[\w-]+)*\.md(?:#[\w-]+)?)\)"
+ return re.sub(pattern, resolve_link, content)
+
+
+def fix_internal_references_in_mdx_files(website_dir: Path) -> None:
+ """Process all MDX files in directory to fix internal references."""
+ for file_path in website_dir.glob("**/*.mdx"):
+ try:
+ with open(file_path, "r", encoding="utf-8") as f:
+ content = f.read()
+
+ fixed_content = fix_internal_references(content, website_dir, file_path)
+
+ if content != fixed_content:
+ with open(file_path, "w", encoding="utf-8") as f:
+ f.write(fixed_content)
+ print(f"Fixed internal references in {file_path}")
+
+ except Exception:
+ print(f"Error: {file_path}")
+ sys.exit(1)
+
+
def main() -> None:
script_dir = Path(__file__).parent.absolute()
parser = argparse.ArgumentParser()
@@ -519,6 +726,13 @@ def main() -> None:
notebook, args.website_directory, args.notebook_directory, args.quarto_bin, args.dry_run
)
)
+
+ # Post-processing steps after all notebooks are handled
+ if not args.dry_run:
+ copy_examples_mdx_files(args.website_directory)
+ update_navigation_with_notebooks(args.website_directory)
+ fix_internal_references_in_mdx_files(args.website_directory)
+
else:
print("Unknown subcommand")
sys.exit(1)
diff --git a/website/snippets/components/ClientSideComponent.mdx b/website/snippets/components/ClientSideComponent.mdx
new file mode 100644
index 0000000000..2c23171c06
--- /dev/null
+++ b/website/snippets/components/ClientSideComponent.mdx
@@ -0,0 +1,7 @@
+export const ClientSideComponent = ({ Component, componentProps }) => {
+ if (typeof document === "undefined") {
+ return null;
+ }
+
+ return ;
+};
diff --git a/website/snippets/components/ExploreContent.mdx b/website/snippets/components/ExploreContent.mdx
new file mode 100644
index 0000000000..e547640967
--- /dev/null
+++ b/website/snippets/components/ExploreContent.mdx
@@ -0,0 +1,47 @@
+export const ExploreContent = () => {
+
+ const contents = [
+ {
+ title: "Get Started",
+ link: "/docs/Getting-Started",
+ description: "Learn how to get started with AG2. Follow the instruction to quickly build-up your first AG2 application.",
+ },
+ {
+ title: "Tutorial",
+ link: "/docs/tutorial/introduction",
+ description: "This tutorial introduces basic concepts and building blocks of AG2.",
+ },
+ {
+ title: "User Guide",
+ link: "/docs/topics",
+ description: "Users' guide to different functionalities of AG2, including CodeExecution, GroupChat, and more.",
+ },
+ {
+ title: "Examples",
+ link: "/docs/Examples",
+ description: "Learn different examples demonstrating the usage of AG2 in various scenarios.",
+ },
+ {
+ title: "Applications",
+ link: "/docs/Gallery",
+ description: "A collection of different applications built using AG2.",
+ },
+ {
+ title: "Contributions",
+ link: "/docs/contributor-guide/contributing",
+ description: "Learn about how you can contribute to AG2 and this documentation, including pushing patches, code review and more.",
+ },
+ ];
+
+ return (
+
+
+ {contents.map((feature, index) => (
+
+ {feature.description}
+
+ ))}
+
+
+ )
+}
diff --git a/website/snippets/components/GalleryPage.js b/website/snippets/components/GalleryPage.js
new file mode 100644
index 0000000000..11406aa29c
--- /dev/null
+++ b/website/snippets/components/GalleryPage.js
@@ -0,0 +1,169 @@
+import React, { useEffect, useState, useCallback } from "react";
+import { Card, List, Select, Typography } from "antd";
+import { useLocation, useHistory } from "react-router-dom";
+
+const { Option } = Select;
+const { Paragraph, Title } = Typography;
+
+const GalleryPage = (props) => {
+ const location = useLocation();
+ const history = useHistory();
+
+ // Function to get tags from the URL query string.
+ const getTagsFromURL = useCallback(() => {
+ const searchParams = new URLSearchParams(location.search);
+ const tags = searchParams.get("tags");
+ return tags ? tags.split(",") : [];
+ }, [location.search]);
+
+ // Initialize selectedTags state based on URL parameters.
+ const [selectedTags, setSelectedTags] = useState(getTagsFromURL());
+
+ useEffect(() => {
+ // Update state if the URL search parameters change.
+ const tagsFromURL = getTagsFromURL();
+ setSelectedTags(tagsFromURL);
+ }, [getTagsFromURL]);
+
+ const TagsView = ({ tags }) => (
+
+ {tags?.map((tag, index) => (
+
+ {
+ if (!selectedTags.includes(tag)) {
+ handleTagChange([...selectedTags, tag])
+ }
+ evt.preventDefault();
+ evt.stopPropagation();
+ return false;
+ }} >
+ {tag}
+
+ ))}
+
+ );
+
+ const allTags = [...new Set(props.items.flatMap((item) => item.tags))];
+
+ const handleTagChange = (tags) => {
+ setSelectedTags(tags);
+ const searchParams = new URLSearchParams();
+ if (tags.length > 0) {
+ searchParams.set("tags", tags.join(","));
+ }
+ history.push(`${location.pathname}?${searchParams.toString()}`);
+ };
+
+ const filteredData =
+ selectedTags.length > 0
+ ? props.items.filter((item) =>
+ selectedTags.some((tag) => item.tags.includes(tag))
+ )
+ : props.items;
+
+ const defaultImageIfNoImage = props.allowDefaultImage ?? true;
+ const imageFunc = (item) => {
+ const image =
+
+ ;
+
+ const imageToUse = item.image ? image : defaultImageIfNoImage ? image : null;
+ return imageToUse;
+ }
+
+ const badges = (item) => {
+ if (!item.source) {
+ return null;
+ }
+ const colab_href = `https://colab.research.google.com/github/ag2ai/ag2/blob/main/${item.source}`;
+ const github_href = `https://github.com/ag2ai/ag2/blob/main/${item.source}`;
+ return (
+
+
+
+ );
+ }
+
+ const target = props.target ?? "_blank";
+ return (
+
+ );
+};
+
+export default GalleryPage;
diff --git a/website/snippets/components/GalleryPage.mdx b/website/snippets/components/GalleryPage.mdx
new file mode 100644
index 0000000000..f9696ced47
--- /dev/null
+++ b/website/snippets/components/GalleryPage.mdx
@@ -0,0 +1,144 @@
+export const GalleryPage = ({
+ galleryItems,
+ allowDefaultImage = true,
+ target = "_blank",
+}) => {
+
+ const getTagsFromURL = () => {
+ const searchParams = new URLSearchParams(window.location.search);
+ const tags = searchParams.get("tags");
+ return tags ? tags.split(",") : [];
+ };
+
+ let selectedTags = getTagsFromURL();
+ const defaultImageIfNoImage = allowDefaultImage ?? true;
+ const allTags = [...new Set(galleryItems.flatMap((item) => item.tags))];
+
+ const updateURL = (tags) => {
+ const searchParams = new URLSearchParams(window.location.search);
+ if (tags.length > 0) {
+ searchParams.set("tags", tags.join(","));
+ } else {
+ searchParams.delete("tags");
+ }
+ const searchParamsString = searchParams.toString();
+ const newURL = searchParamsString ? `${window.location.pathname}?${searchParamsString}` : window.location.pathname;
+ window.history.pushState({}, '', newURL);
+ };
+
+ window.addEventListener('popstate', () => {
+ selectedTags = getTagsFromURL();
+ filterItems();
+
+ const select = document.querySelector('.tag-filter');
+ if (select && window.jQuery) {
+ $(select).val(selectedTags).trigger('chosen:updated');
+ }
+ });
+
+ const handleGalleryTagChange = (event) => {
+ handleTagChange(event.detail);
+ };
+
+ document.removeEventListener('gallery:tagChange', handleGalleryTagChange);
+ document.addEventListener('gallery:tagChange', handleGalleryTagChange);
+
+ const imageFunc = (item) => {
+ const image = (
+
+ );
+ const imageToUse = item.image
+ ? image
+ : defaultImageIfNoImage
+ ? image
+ : null;
+ return imageToUse;
+ };
+
+ const handleTagChange = (tags) => {
+ selectedTags = tags;
+ updateURL(tags);
+ filterItems();
+ };
+
+ const filterItems = () => {
+ const cards = document.querySelectorAll('.examples-gallery-container .card');
+ cards.forEach(card => {
+ const cardTags = Array.from(card.querySelectorAll('.tag')).map(tag => tag.textContent);
+ if (selectedTags.length === 0 || selectedTags.some(tag => cardTags.includes(tag))) {
+ card.style.display = '';
+ } else {
+ card.style.display = 'none';
+ }
+ });
+ };
+
+ const TagsView = ({ tags }) => (
+
+ {tags?.map((tag, index) => (
+ {
+ if (!selectedTags.includes(tag)) {
+ handleTagChange([...selectedTags, tag]);
+
+ const select = document.querySelector('.tag-filter');
+ if (select && window.jQuery) {
+ $(select).val([...selectedTags, tag]).trigger('chosen:updated');
+ }
+ }
+ evt.preventDefault();
+ evt.stopPropagation();
+ return false;
+ }}
+ >
+ {tag}
+
+ ))}
+
+ );
+
+ const badges = (item) => {
+ if (!item.source) {
+ return null;
+ }
+ const colab_href = `https://colab.research.google.com/github/ag2ai/ag2/blob/main/${item.source}`;
+ const github_href = `https://github.com/ag2ai/ag2/blob/main/${item.source}`;
+ return (
+
+
+
+ );
+ }
+
+ return (
+
+
+ {galleryItems.map((item, index) => (
+
+ {item.title}
+ {badges(item)}
+ {item.description || item.title}
+
+
+ ))}
+
+
+ );
+};
diff --git a/website/snippets/components/PopularResources.mdx b/website/snippets/components/PopularResources.mdx
new file mode 100644
index 0000000000..2832729eb6
--- /dev/null
+++ b/website/snippets/components/PopularResources.mdx
@@ -0,0 +1,42 @@
+export const PopularResources = ({ src, linkText }) => {
+ const convertEmbedToWatchUrl = (embedUrl) => {
+ const url = new URL(embedUrl);
+ const videoId = url.pathname.split('/')[2];
+ return `https://www.youtube.com/watch?v=${videoId}`;
+ };
+
+ const resourcesList = [
+ {
+ src: "https://www.youtube.com/embed/RLwyXRVvlNk",
+ linkText: "Foundation Capital Interview with Dr. Chi Wang"
+ },
+ {
+ src: "https://www.youtube.com/embed/TBNTH-fwGPE",
+ linkText: "Learn AG2 on DeepLearningAI"
+ }
+ ]
+
+ return (
+
+
+ {resourcesList.map((resource, index) => (
+
+
+
+ ))}
+
+
+ );
+};
diff --git a/website/snippets/data/GalleryItems.mdx b/website/snippets/data/GalleryItems.mdx
new file mode 100644
index 0000000000..f6ea6f2c78
--- /dev/null
+++ b/website/snippets/data/GalleryItems.mdx
@@ -0,0 +1,239 @@
+export const galleryItems = [
+ {
+ "title": "AutoTx - Crypto Transactions Agent",
+ "link": "https://www.agentcoin.org/blog/autotx",
+ "description": "Generates on-chain transactions, which are submitted to a smart account so users can easily approve & execute them.",
+ "image": "autotx.png",
+ "tags": ["tools", "groupchat", "app", "blockchain"]
+ },
+ {
+ "title": "AutoGen Virtual Focus Group",
+ "link": "https://github.com/msamylea/autogen_focus_group",
+ "description": "A virtual consumer focus group with multiple custom personas, product details, and final analysis created with AutoGen, Ollama/Llama3, and Streamlit.",
+ "image": "default.png",
+ "tags": ["ui", "groupchat"]
+ },
+ {
+ "title": "Function Generator & Validator",
+ "link": "https://github.com/abhaymathur21/TensionCode",
+ "description": "A platform where user-required code is generated and simultaneously validated against sample data by AutoGen.",
+ "image": "TensionCode.png",
+ "tags": ["app", "ui"]
+ },
+ {
+ "title": "Autogen Robot",
+ "link": "https://github.com/AaronWard/generative-ai-workbook/tree/main/personal_projects/19.autogen-robot",
+ "description": "This project showcases how agent's can act as a brain to control a physical robot.",
+ "image": "robot.jpg",
+ "tags": ["robotics"]
+ },
+ {
+ "title": "AutoGen Group Chat Playground",
+ "link": "https://huggingface.co/spaces/thinkall/AutoGen_Playground",
+ "description": "A huggingface space to explore AutoGen group chat, build agents with zero-code, and access source code for reuse.",
+ "tags": ["ui"]
+ },
+ {
+ "title": "A Stateful Dev Environment Powered by Jupyter Notebook",
+ "link": "https://github.com/olimoz/AI_Teams_AutoGen/blob/main/JupyterNotebooksForAutoGen.ipynb",
+ "description": "An AutoGen Teams Powered by Jupyter notebook.",
+ "tags": ["extension", "tools"]
+ },
+ {
+ "title": "Solving Security Vulnerabilities with AutoGen",
+ "link": "https://www.linkedin.com/pulse/solving-security-vulnerabilities-llms-society-mind-model-leah-bonser-kcswc?trk=public_post_feed-article-content",
+ "description": "An article discussing the use of AutoGen to tackle security vulnerabilities.",
+ "image": "default.png",
+ "tags": ["app"]
+ },
+ {
+ "title": "Research Agents via AutoGen",
+ "link": "https://youtu.be/AVInhYBUnKs?feature=shared",
+ "description": "A guide to building a team of AI research agents using AutoGen.",
+ "image": "default.png",
+ "tags": ["groupchat", "tools"]
+ },
+ {
+ "title": "AutoGen with Ollama and LiteLLM",
+ "link": "https://youtu.be/y7wMTwJN7rA",
+ "description": "A demonstration of integrating Ollama, LiteLLM, and AutoGen.",
+ "image": "default.png",
+ "tags": ["extension"]
+ },
+ {
+ "title": "AutoGen Engineer",
+ "link": "https://chat.openai.com/g/g-Y50TY4F35-AutoGen-engineer",
+ "description": "Join the AutoGen Engineer group chat to collaborate and build with others.",
+ "image": "default.png",
+ "tags": ["groupchat", "app"]
+ },
+ {
+ "title": "AutoGen with Obsidian",
+ "link": "https://youtu.be/iWdVAr4xMkg",
+ "description": "Learn how to integrate AutoGen with Obsidian for note-taking and management.",
+ "image": "default.png",
+ "tags": ["tools", "app"]
+ },
+ {
+ "title": "AutoGen Builder GPT",
+ "link": "https://chat.openai.com/g/g-EwugVj4zq-AutoGen-builder",
+ "description": "A platform for building conversational AI agents with AutoGen Builder GPT.",
+ "image": "default.png",
+ "tags": ["groupchat", "ui"]
+ },
+ {
+ "title": "AutoGen Multi-Round Human Interaction Chatbot with Gradio 4.0",
+ "link": "https://huggingface.co/spaces/thinkall/AutoGen-human-input-demo",
+ "description": "Experience a multi-round human interaction chatbot built with AutoGen and Gradio 4.0.",
+ "image": "default.png",
+ "tags": ["ui", "app"]
+ },
+ {
+ "title": "Agentcloud.dev (UI for AutoGen)",
+ "link": "https://github.com/rnadigital/agentcloud",
+ "description": "Agentcloud.dev provides a user interface for managing and collaborating with AutoGen agents.",
+ "image": "default.png",
+ "tags": ["ui"]
+ },
+ {
+ "title": "Next.js + FASTAPI Based UI for AutoGen",
+ "link": "https://github.com/victordibia/AutoGen-ui",
+ "description": "A project featuring a UI for AutoGen built with Next.js and FastAPI.",
+ "image": "default.png",
+ "tags": ["ui"]
+ },
+ {
+ "title": "Full Function UI for AutoGen Powered by Panel",
+ "link": "https://youtu.be/9lSaRP9GLCY?si=HihULAe3FFyteFHY",
+ "description": "A UI allows users to directly interact with AI agents in real-time during a group chat scenario",
+ "tags": ["ui"]
+ },
+ {
+ "title": "AutoGen Monitoring and Observability",
+ "link": "https://docs.arize.com/phoenix/quickstart/llm-traces/autogen-support",
+ "description": "Documentation on monitoring and observability features for AutoGen.",
+ "image": "default.png",
+ "tags": ["extension"]
+ },
+ {
+ "title": "Postgres Data Analytics AI Agent with AutoGen",
+ "link": "https://www.youtube.com/playlist?list=PLS_o2ayVCKvDzj2YxeFqMq9UbR1PkPEh0",
+ "description": "Utilizing AutoGen to speak directly to Postgres Database.",
+ "image": "default.png",
+ "tags": ["tools", "app"]
+ },
+ {
+ "title": "AutoGen with Local LLMs",
+ "link": "https://hackernoon.com/beep-beep-bop-bop-how-to-deploy-multiple-ai-agents-using-local-llms",
+ "description": "An article on deploying multiple AI agents using local LLMs with AutoGen.",
+ "image": "default.png",
+ "tags": ["extension"]
+ },
+ {
+ "title": "AutoGen with FastApi backend and React Frontend",
+ "link": "https://github.com/bonadio/AutoGenwebdemo",
+ "description": "A demonstration of using AutoGen with a FastAPI backend and React frontend.",
+ "image": "default.png",
+ "tags": ["ui"]
+ },
+ {
+ "title": "Talk to AutoGen Agents Using Whisper and Gradio",
+ "link": "https://youtu.be/WysBjwJoulo",
+ "description": "Interact with AutoGen agents using Whisper and Gradio interfaces.",
+ "image": "default.png",
+ "tags": ["ui"]
+ },
+ {
+ "title": "AutoGen + LangChain + ChromaDB = You Super AI Assistant",
+ "link": "https://www.youtube.com/watch?v=fd9fcRhYoFQ",
+ "description": "Create a super AI assistant combining AutoGen, LangChain, and ChromaDB.",
+ "image": "default.png",
+ "tags": ["app"]
+ },
+ {
+ "title": "AutoGen + Flowise = Super AI Agents on No-Code Platform",
+ "link": "https://github.com/sugarforever/LangChain-Advanced/blob/main/Integrations/AutoGen/autogen_flowise_ai_agent.ipynb",
+ "description": "Build super AI agents on a no-code platform using AutoGen and Flowise.",
+ "image": "default.png",
+ "tags": ["app"]
+ },
+ {
+ "title": "AutoGen with RunPod and TextGen WebUI",
+ "link": "https://youtu.be/FHXmiAvloUg",
+ "description": "Learn how to use AutoGen with RunPod and TextGen WebUI for enhanced AI agent integration.",
+ "image": "default.png",
+ "tags": ["ui", "extension"]
+ },
+ {
+ "title": "Jarvis Collaborates with AutoGen for Tweet Analysis",
+ "link": "https://github.com/ngaut/jarvis#demo",
+ "description": "Explore how Jarvis collaborates with AutoGen for tweet analysis.",
+ "image": "default.png",
+ "tags": ["tools", "app"]
+ },
+ {
+ "title": "AutoGen + LangChain + PlayHT = Super AI Agent that Speaks",
+ "link": "https://www.youtube.com/watch?v=zo2ft4Qje1Y",
+ "description": "Combine AutoGen, LangChain, and PlayHT to create a speaking super AI agent.",
+ "image": "default.png",
+ "tags": ["tools", "app"]
+ },
+ {
+ "title": "AutoGen Flow with FastAPI and Nextjs",
+ "link": "https://github.com/jaemil/agentsflow",
+ "description": "A development flow using AutoGen with FastAPI and Next.js.",
+ "image": "default.png",
+ "tags": ["ui"]
+ },
+ {
+ "title": "Build Vision-Enabled AI Agents with AutoGen + Llava",
+ "link": "https://youtu.be/JgVb8A6OJwM",
+ "description": "Tutorial on building vision-enabled AI agents using AutoGen and llava.",
+ "image": "default.png",
+ "tags": ["tools", "app"]
+ },
+ {
+ "title": "AutoGen + Chainlit chat interface with multi-agent conversation",
+ "link": "https://github.com/antoineross/Autogen-UI/tree/main",
+ "description": "Chainlit chat interface with multi-agent conversation between agents to complete a tasks",
+ "image": "default.png",
+ "tags": ["ui"]
+ },
+ {
+ "title": "XForce IDE: Build AutoGen based workforces from a drag and drop UI",
+ "link": "https://ide.x-force.ai",
+ "description": "X-Force IDE is a low-code, agent-as-a-service UI framework that lets you create AutoGen-based workforces from a drag-and-drop-like user interface.",
+ "image": "x-force-ide-ui.png",
+ "tags": ["ui"]
+ },
+ {
+ "title": "Multimodal Webagent created with AutoGen and OpenAI's Assistants API",
+ "link": "https://github.com/schauppi/MultimodalWebAgent",
+ "description": "A multimodal webbrowsing agent that autonomously browses the web.",
+ "image": "webagent.jpg",
+ "tags": ["tools", "app"]
+ },
+ {
+ "title": "Create Issues from Code Commits - using Autogen",
+ "link": "https://blog.composio.dev/automating-task-creation-with-openai-assistant-from-code-comments-to-linear-issues/",
+ "description": "Automatically creating linear tasks and assigning them to the right person, project, and team from GitHub commits using AutoGen Agents.",
+ "image": "composio-autogen.png",
+ "tags": ["tools"]
+ },
+ {
+ "title": "Agentok - Autogen Visualized",
+ "link": "https://github.com/hughlv/agentok",
+ "description": "Offering intuitive visual tools that streamline the creation and management of complex AutoGen workflows.",
+ "image": "agentok.png",
+ "tags": [
+ "tools", "ui", "app"
+ ]
+ },
+ {
+ "title": "Expense Tracker - using Autogen",
+ "link": "https://github.com/Kirushikesh/Personal-Finance-Agent",
+ "description": "Tracks personal finance income and expenses then helps the user to analyse it using AutoGen agents.",
+ "image": "default.png",
+ "tags": ["tools", "app"]
+ }
+]
diff --git a/website/snippets/data/NotebooksMetadata.mdx b/website/snippets/data/NotebooksMetadata.mdx
new file mode 100644
index 0000000000..d5c69dcf3a
--- /dev/null
+++ b/website/snippets/data/NotebooksMetadata.mdx
@@ -0,0 +1,1007 @@
+{/*
+Auto-generated file - DO NOT EDIT
+Please edit the add_front_matter_to_metadata_mdx function in process_notebooks.py
+*/}
+
+export const notebooksMetadata = [
+ {
+ "title": "Using RetrieveChat Powered by MongoDB Atlas for Retrieve Augmented Code Generation and Question Answering",
+ "link": "/notebooks/agentchat_RetrieveChat_mongodb",
+ "description": "Explore the use of AutoGen's RetrieveChat for tasks like code generation from docstrings, answering complex questions with human feedback, and exploiting features like Update Context, custom prompts, and few-shot learning.",
+ "image": null,
+ "tags": [
+ "MongoDB",
+ "integration",
+ "RAG"
+ ],
+ "source": "/notebook/agentchat_RetrieveChat_mongodb.ipynb"
+ },
+ {
+ "title": "Using RetrieveChat Powered by PGVector for Retrieve Augmented Code Generation and Question Answering",
+ "link": "/notebooks/agentchat_RetrieveChat_pgvector",
+ "description": "Explore the use of AutoGen's RetrieveChat for tasks like code generation from docstrings, answering complex questions with human feedback, and exploiting features like Update Context, custom prompts, and few-shot learning.",
+ "image": null,
+ "tags": [
+ "PGVector",
+ "integration",
+ "RAG"
+ ],
+ "source": "/notebook/agentchat_RetrieveChat_pgvector.ipynb"
+ },
+ {
+ "title": "Using RetrieveChat with Qdrant for Retrieve Augmented Code Generation and Question Answering",
+ "link": "/notebooks/agentchat_RetrieveChat_qdrant",
+ "description": "This notebook demonstrates the usage of QdrantRetrieveUserProxyAgent for RAG.",
+ "image": null,
+ "tags": [
+ "Qdrant",
+ "integration",
+ "RAG"
+ ],
+ "source": "/notebook/agentchat_RetrieveChat_qdrant.ipynb"
+ },
+ {
+ "title": "Agent Tracking with AgentOps",
+ "link": "/notebooks/agentchat_agentops",
+ "description": "Use AgentOps to simplify the development process and monitor your agents in production.",
+ "image": null,
+ "tags": [
+ "integration",
+ "monitoring",
+ "debugging"
+ ],
+ "source": "/notebook/agentchat_agentops.ipynb"
+ },
+ {
+ "title": "AgentOptimizer: An Agentic Way to Train Your LLM Agent",
+ "link": "/notebooks/agentchat_agentoptimizer",
+ "description": "AgentOptimizer is able to prompt LLMs to iteratively optimize function/skills of AutoGen agents according to the historical conversation and performance.",
+ "image": null,
+ "tags": [
+ "optimization",
+ "tool/function"
+ ],
+ "source": "/notebook/agentchat_agentoptimizer.ipynb"
+ },
+ {
+ "title": "Task Solving with Code Generation, Execution and Debugging",
+ "link": "/notebooks/agentchat_auto_feedback_from_code_execution",
+ "description": "Use conversable language learning model agents to solve tasks and provide automatic feedback through a comprehensive example of writing, executing, and debugging Python code to compare stock price changes.",
+ "image": null,
+ "tags": [
+ "code generation"
+ ],
+ "source": "/notebook/agentchat_auto_feedback_from_code_execution.ipynb"
+ },
+ {
+ "title": "Assistants with Azure Cognitive Search and Azure Identity",
+ "link": "/notebooks/agentchat_azr_ai_search",
+ "description": "This notebook demonstrates the use of Assistant Agents in conjunction with Azure Cognitive Search and Azure Identity",
+ "image": null,
+ "tags": [
+ "integration",
+ "RAG",
+ "Azure Identity",
+ "Azure AI Search"
+ ],
+ "source": "/notebook/agentchat_azr_ai_search.ipynb"
+ },
+ {
+ "title": "CaptainAgent",
+ "link": "/notebooks/agentchat_captainagent",
+ "description": "Introducing CaptainAgent, a powerful agent that can manage and orchestrate other agents and tools to solve complex tasks.",
+ "image": null,
+ "tags": [
+ "autobuild",
+ "CaptainAgent"
+ ],
+ "source": "/notebook/agentchat_captainagent.ipynb"
+ },
+ {
+ "title": "Usage tracking with AutoGen",
+ "link": "/notebooks/agentchat_cost_token_tracking",
+ "description": "cost calculation",
+ "image": null,
+ "tags": [
+ "cost"
+ ],
+ "source": "/notebook/agentchat_cost_token_tracking.ipynb"
+ },
+ {
+ "title": "Agent Chat with custom model loading",
+ "link": "/notebooks/agentchat_custom_model",
+ "description": "Define and load a custom model",
+ "image": null,
+ "tags": [
+ "integration",
+ "custom model"
+ ],
+ "source": "/notebook/agentchat_custom_model.ipynb"
+ },
+ {
+ "title": "Agent Chat with Multimodal Models: DALLE and GPT-4V",
+ "link": "/notebooks/agentchat_dalle_and_gpt4v",
+ "description": "Multimodal agent chat with DALL-E and GPT-4v.",
+ "image": null,
+ "tags": [
+ "multimodal",
+ "gpt-4v"
+ ],
+ "source": "/notebook/agentchat_dalle_and_gpt4v.ipynb"
+ },
+ {
+ "title": "Use AutoGen in Databricks with DBRX",
+ "link": "/notebooks/agentchat_databricks_dbrx",
+ "description": "Use Databricks DBRX and Foundation Model APIs to build AutoGen applications backed by open-source LLMs.",
+ "image": null,
+ "tags": [
+ "integration",
+ "code generation",
+ "dbrx",
+ "databricks",
+ "open source",
+ "lakehouse",
+ "custom model",
+ "data intelligence"
+ ],
+ "source": "/notebook/agentchat_databricks_dbrx.ipynb"
+ },
+ {
+ "title": "Auto Generated Agent Chat: Task Solving with Provided Tools as Functions",
+ "link": "/notebooks/agentchat_function_call",
+ "description": "Register function calls using AssistantAgent and UserProxyAgent to execute python or shell code in customized ways. Demonstrating two ways of registering functions.",
+ "image": null,
+ "tags": [
+ "code generation",
+ "tool/function"
+ ],
+ "source": "/notebook/agentchat_function_call.ipynb"
+ },
+ {
+ "title": "Task Solving with Provided Tools as Functions (Asynchronous Function Calls)",
+ "link": "/notebooks/agentchat_function_call_async",
+ "description": "Learn how to implement both synchronous and asynchronous function calls using AssistantAgent and UserProxyAgent in AutoGen, with examples of their application in individual and group chat settings for task execution with language models.",
+ "image": null,
+ "tags": [
+ "tool/function",
+ "async"
+ ],
+ "source": "/notebook/agentchat_function_call_async.ipynb"
+ },
+ {
+ "title": "Writing a software application using function calls",
+ "link": "/notebooks/agentchat_function_call_code_writing",
+ "description": "Equip your agent with functions that can efficiently implement features into your software application.",
+ "image": null,
+ "tags": [
+ "code generation",
+ "tool/function",
+ "fastapi",
+ "software engineering"
+ ],
+ "source": "/notebook/agentchat_function_call_code_writing.ipynb"
+ },
+ {
+ "title": "Currency Calculator: Task Solving with Provided Tools as Functions",
+ "link": "/notebooks/agentchat_function_call_currency_calculator",
+ "description": "Learn how to register function calls using AssistantAgent and UserProxyAgent.",
+ "image": null,
+ "tags": [
+ "tool/function"
+ ],
+ "source": "/notebook/agentchat_function_call_currency_calculator.ipynb"
+ },
+ {
+ "title": "Groupchat with Llamaindex agents",
+ "link": "/notebooks/agentchat_group_chat_with_llamaindex_agents",
+ "description": "Integrate llamaindex agents with Autogen.",
+ "image": null,
+ "tags": [
+ "react",
+ "llamaindex",
+ "integration",
+ "group chat",
+ "software engineering"
+ ],
+ "source": "/notebook/agentchat_group_chat_with_llamaindex_agents.ipynb"
+ },
+ {
+ "title": "Group Chat",
+ "link": "/notebooks/agentchat_groupchat",
+ "description": "Explore the utilization of large language models in automated group chat scenarios, where agents perform tasks collectively, demonstrating how they can be configured, interact with each other, and retrieve specific information from external resources.",
+ "image": null,
+ "tags": [
+ "orchestration",
+ "group chat",
+ "code generation"
+ ],
+ "source": "/notebook/agentchat_groupchat.ipynb"
+ },
+ {
+ "title": "Group Chat with Retrieval Augmented Generation",
+ "link": "/notebooks/agentchat_groupchat_RAG",
+ "description": "Implement and manage a multi-agent chat system using AutoGen, where AI assistants retrieve information, generate code, and interact collaboratively to solve complex tasks, especially in areas not covered by their training data.",
+ "image": null,
+ "tags": [
+ "group chat",
+ "orchestration",
+ "RAG"
+ ],
+ "source": "/notebook/agentchat_groupchat_RAG.ipynb"
+ },
+ {
+ "title": "Group Chat with Customized Speaker Selection Method",
+ "link": "/notebooks/agentchat_groupchat_customized",
+ "description": "Introduce group chat with customized speaker selection method.",
+ "image": null,
+ "tags": [
+ "orchestration",
+ "group chat"
+ ],
+ "source": "/notebook/agentchat_groupchat_customized.ipynb"
+ },
+ {
+ "title": "FSM - User can input speaker transition constraints",
+ "link": "/notebooks/agentchat_groupchat_finite_state_machine",
+ "description": "Explore the demonstration of the Finite State Machine implementation, which allows the user to input speaker transition constraints.",
+ "image": null,
+ "tags": [
+ "group chat",
+ "fsm",
+ "orchestration"
+ ],
+ "source": "/notebook/agentchat_groupchat_finite_state_machine.ipynb"
+ },
+ {
+ "title": "Perform Research with Multi-Agent Group Chat",
+ "link": "/notebooks/agentchat_groupchat_research",
+ "description": "Perform research using a group chat with a number of specialized agents.",
+ "image": null,
+ "tags": [
+ "group chat",
+ "planning",
+ "code generation"
+ ],
+ "source": "/notebook/agentchat_groupchat_research.ipynb"
+ },
+ {
+ "title": "StateFlow: Build Workflows through State-Oriented Actions",
+ "link": "/notebooks/agentchat_groupchat_stateflow",
+ "description": "StateFlow: Build workflows through state-oriented actions.",
+ "image": null,
+ "tags": [
+ "orchestration",
+ "group chat",
+ "stateflow",
+ "research"
+ ],
+ "source": "/notebook/agentchat_groupchat_stateflow.ipynb"
+ },
+ {
+ "title": "Group Chat with Coder and Visualization Critic",
+ "link": "/notebooks/agentchat_groupchat_vis",
+ "description": "Explore a group chat example using agents such as a coder and visualization agent.",
+ "image": null,
+ "tags": [
+ "group chat",
+ "code generation"
+ ],
+ "source": "/notebook/agentchat_groupchat_vis.ipynb"
+ },
+ {
+ "title": "Using Guidance with AutoGen",
+ "link": "/notebooks/agentchat_guidance",
+ "description": "Constrained responses via guidance.",
+ "image": null,
+ "tags": [
+ "guidance",
+ "integration",
+ "JSON"
+ ],
+ "source": "/notebook/agentchat_guidance.ipynb"
+ },
+ {
+ "title": "Auto Generated Agent Chat: Task Solving with Code Generation, Execution, Debugging & Human Feedback",
+ "link": "/notebooks/agentchat_human_feedback",
+ "description": "Code generation, execution, debugging and human feedback.",
+ "image": null,
+ "tags": [
+ "human",
+ "code generation"
+ ],
+ "source": "/notebook/agentchat_human_feedback.ipynb"
+ },
+ {
+ "title": "Generate Dalle Images With Conversable Agents",
+ "link": "/notebooks/agentchat_image_generation_capability",
+ "description": "Generate images with conversable agents.",
+ "image": null,
+ "tags": [
+ "capability",
+ "multimodal"
+ ],
+ "source": "/notebook/agentchat_image_generation_capability.ipynb"
+ },
+ {
+ "title": "Auto Generated Agent Chat: Function Inception",
+ "link": "/notebooks/agentchat_inception_function",
+ "description": "Function Inception: Enable AutoGen agents to update/remove functions during conversations.",
+ "image": null,
+ "tags": [
+ "function inception",
+ "tool/function"
+ ],
+ "source": "/notebook/agentchat_inception_function.ipynb"
+ },
+ {
+ "title": "Auto Generated Agent Chat: Task Solving with Langchain Provided Tools as Functions",
+ "link": "/notebooks/agentchat_langchain",
+ "description": "Use Langchain tools.",
+ "image": null,
+ "tags": [
+ "langchain",
+ "integration",
+ "tool/function"
+ ],
+ "source": "/notebook/agentchat_langchain.ipynb"
+ },
+ {
+ "title": "Engaging with Multimodal Models: GPT-4V in AutoGen",
+ "link": "/notebooks/agentchat_lmm_gpt-4v",
+ "description": "Leveraging multimodal models through two different methodologies: MultimodalConversableAgent and VisionCapability.",
+ "image": null,
+ "tags": [
+ "multimodal",
+ "gpt-4v"
+ ],
+ "source": "/notebook/agentchat_lmm_gpt-4v.ipynb"
+ },
+ {
+ "title": "Agent Chat with Multimodal Models: LLaVA",
+ "link": "/notebooks/agentchat_lmm_llava",
+ "description": "Leveraging multimodal models like llava.",
+ "image": null,
+ "tags": [
+ "multimodal",
+ "llava"
+ ],
+ "source": "/notebook/agentchat_lmm_llava.ipynb"
+ },
+ {
+ "title": "Runtime Logging with AutoGen",
+ "link": "/notebooks/agentchat_logging",
+ "description": "Provide capabilities of runtime logging for debugging and performance analysis.",
+ "image": null,
+ "tags": [
+ "logging",
+ "debugging"
+ ],
+ "source": "/notebook/agentchat_logging.ipynb"
+ },
+ {
+ "title": "Agent with memory using Mem0",
+ "link": "/notebooks/agentchat_with_memory",
+ "description": "Use Mem0 to create agents with memory.",
+ "image": null,
+ "tags": [
+ "mem0",
+ "integration",
+ "memory"
+ ],
+ "source": "/notebook/agentchat_with_memory.ipynb"
+ },
+ {
+ "title": "Solving Multiple Tasks in a Sequence of Async Chats",
+ "link": "/notebooks/agentchat_multi_task_async_chats",
+ "description": "Use conversational agents to solve a set of tasks with a sequence of async chats.",
+ "image": null,
+ "tags": [
+ "orchestration",
+ "async",
+ "sequential chats"
+ ],
+ "source": "/notebook/agentchat_multi_task_async_chats.ipynb"
+ },
+ {
+ "title": "Solving Multiple Tasks in a Sequence of Chats",
+ "link": "/notebooks/agentchat_multi_task_chats",
+ "description": "Use conversational agents to solve a set of tasks with a sequence of chats.",
+ "image": null,
+ "tags": [
+ "orchestration",
+ "sequential chats"
+ ],
+ "source": "/notebook/agentchat_multi_task_chats.ipynb"
+ },
+ {
+ "title": "Nested Chats for Tool Use in Conversational Chess",
+ "link": "/notebooks/agentchat_nested_chats_chess",
+ "description": "LLM-backed agents playing chess with each other using nested chats.",
+ "image": null,
+ "tags": [
+ "nested chat",
+ "tool/function",
+ "orchestration"
+ ],
+ "source": "/notebook/agentchat_nested_chats_chess.ipynb"
+ },
+ {
+ "title": "Conversational Chess using non-OpenAI clients",
+ "link": "/notebooks/agentchat_nested_chats_chess_altmodels",
+ "description": "LLM-backed agents playing chess with each other using nested chats.",
+ "image": null,
+ "tags": [
+ "nested chat",
+ "tool/function",
+ "orchestration"
+ ],
+ "source": "/notebook/agentchat_nested_chats_chess_altmodels.ipynb"
+ },
+ {
+ "title": "Solving Complex Tasks with A Sequence of Nested Chats",
+ "link": "/notebooks/agentchat_nested_sequential_chats",
+ "description": "Solve complex tasks with one or more sequence chats nested as inner monologue.",
+ "image": null,
+ "tags": [
+ "nested chat",
+ "sequential chats",
+ "orchestration"
+ ],
+ "source": "/notebook/agentchat_nested_sequential_chats.ipynb"
+ },
+ {
+ "title": "Solving Complex Tasks with Nested Chats",
+ "link": "/notebooks/agentchat_nestedchat",
+ "description": "Solve complex tasks with a chat nested as inner monologue.",
+ "image": null,
+ "tags": [
+ "nested chat",
+ "reflection",
+ "reasoning",
+ "orchestration"
+ ],
+ "source": "/notebook/agentchat_nestedchat.ipynb"
+ },
+ {
+ "title": "OptiGuide with Nested Chats in AutoGen",
+ "link": "/notebooks/agentchat_nestedchat_optiguide",
+ "description": "This is a nested chat re-implementation of OptiGuide which is an LLM-based supply chain optimization framework.",
+ "image": null,
+ "tags": [
+ "nested chat",
+ "hierarchical chat",
+ "code generation",
+ "orchestration"
+ ],
+ "source": "/notebook/agentchat_nestedchat_optiguide.ipynb"
+ },
+ {
+ "title": "Chat with OpenAI Assistant using function call in AutoGen: OSS Insights for Advanced GitHub Data Analysis",
+ "link": "/notebooks/agentchat_oai_assistant_function_call",
+ "description": "This Jupyter Notebook demonstrates how to leverage OSS Insight (Open Source Software Insight) for advanced GitHub data analysis by defining `Function calls` in AutoGen for the OpenAI Assistant.",
+ "image": null,
+ "tags": [
+ "OpenAI Assistant",
+ "tool/function"
+ ],
+ "source": "/notebook/agentchat_oai_assistant_function_call.ipynb"
+ },
+ {
+ "title": "Auto Generated Agent Chat: Group Chat with GPTAssistantAgent",
+ "link": "/notebooks/agentchat_oai_assistant_groupchat",
+ "description": "Use GPTAssistantAgent in group chat.",
+ "image": null,
+ "tags": [
+ "OpenAI Assistant",
+ "group chat"
+ ],
+ "source": "/notebook/agentchat_oai_assistant_groupchat.ipynb"
+ },
+ {
+ "title": "RAG OpenAI Assistants in AutoGen",
+ "link": "/notebooks/agentchat_oai_assistant_retrieval",
+ "description": "OpenAI Assistant with retrieval augmentation.",
+ "image": null,
+ "tags": [
+ "RAG",
+ "OpenAI Assistant"
+ ],
+ "source": "/notebook/agentchat_oai_assistant_retrieval.ipynb"
+ },
+ {
+ "title": "OpenAI Assistants in AutoGen",
+ "link": "/notebooks/agentchat_oai_assistant_twoagents_basic",
+ "description": "Two-agent chat with OpenAI assistants.",
+ "image": null,
+ "tags": [
+ "OpenAI Assistant"
+ ],
+ "source": "/notebook/agentchat_oai_assistant_twoagents_basic.ipynb"
+ },
+ {
+ "title": "Auto Generated Agent Chat: GPTAssistant with Code Interpreter",
+ "link": "/notebooks/agentchat_oai_code_interpreter",
+ "description": "This Jupyter Notebook showcases the integration of the Code Interpreter tool which executes Python code dynamically within applications.",
+ "image": null,
+ "tags": [
+ "OpenAI Assistant",
+ "code interpreter"
+ ],
+ "source": "/notebook/agentchat_oai_code_interpreter.ipynb"
+ },
+ {
+ "title": "Agent Observability with OpenLIT",
+ "link": "/notebooks/agentchat_openlit",
+ "description": "Use OpenLIT to easily monitor AI agents in production with OpenTelemetry.",
+ "image": null,
+ "tags": [
+ "integration",
+ "monitoring",
+ "observability",
+ "debugging"
+ ],
+ "source": "/notebook/agentchat_openlit.ipynb"
+ },
+ {
+ "title": "Auto Generated Agent Chat: Collaborative Task Solving with Coding and Planning Agent",
+ "link": "/notebooks/agentchat_planning",
+ "description": "Use planning agent in a function call.",
+ "image": null,
+ "tags": [
+ "planning",
+ "orchestration",
+ "nested chat",
+ "tool/function"
+ ],
+ "source": "/notebook/agentchat_planning.ipynb"
+ },
+ {
+ "title": "ReasoningAgent (Tree of Thoughts with Beam Search)",
+ "link": "/notebooks/agentchat_reasoning_agent",
+ "description": "Use ReasoningAgent for o1 style reasoning in Agentic workflows with LLMs using AG2",
+ "image": null,
+ "tags": [
+ "reasoning agent",
+ "tree of thoughts"
+ ],
+ "source": "/notebook/agentchat_reasoning_agent.ipynb"
+ },
+ {
+ "title": "SocietyOfMindAgent",
+ "link": "/notebooks/agentchat_society_of_mind",
+ "description": "Explore the demonstration of the SocietyOfMindAgent in the AutoGen library, which runs a group chat as an internal monologue, but appears to the external world as a single agent, offering a structured way to manage complex interactions among multiple agents and handle issues such as extracting responses from complex dialogues and dealing with context window constraints.",
+ "image": null,
+ "tags": [
+ "orchestration",
+ "nested chat",
+ "group chat"
+ ],
+ "source": "/notebook/agentchat_society_of_mind.ipynb"
+ },
+ {
+ "title": "SQL Agent for Spider text-to-SQL benchmark",
+ "link": "/notebooks/agentchat_sql_spider",
+ "description": "Natural language text to SQL query using the Spider text-to-SQL benchmark.",
+ "image": null,
+ "tags": [
+ "SQL",
+ "tool/function"
+ ],
+ "source": "/notebook/agentchat_sql_spider.ipynb"
+ },
+ {
+ "title": "Interactive LLM Agent Dealing with Data Stream",
+ "link": "/notebooks/agentchat_stream",
+ "description": "Automated continual learning from new data.",
+ "image": null,
+ "tags": [
+ "streaming",
+ "async",
+ "learning"
+ ],
+ "source": "/notebook/agentchat_stream.ipynb"
+ },
+ {
+ "title": "Structured output",
+ "link": "/notebooks/agentchat_structured_outputs",
+ "description": "OpenAI offers a functionality for defining a structure of the messages generated by LLMs, AutoGen enables this functionality by propagating response_format passed to your agents to the underlying client.",
+ "image": null,
+ "tags": [
+ "structured output"
+ ],
+ "source": "/notebook/agentchat_structured_outputs.ipynb"
+ },
+ {
+ "title": "WebSurferAgent",
+ "link": "/notebooks/agentchat_surfer",
+ "description": "Browse the web with agents.",
+ "image": null,
+ "tags": [
+ "web",
+ "nested chat",
+ "tool/function"
+ ],
+ "source": "/notebook/agentchat_surfer.ipynb"
+ },
+ {
+ "title": "Swarm Orchestration with AG2",
+ "link": "/notebooks/agentchat_swarm",
+ "description": "Swarm Ochestration",
+ "image": null,
+ "tags": [
+ "orchestration",
+ "group chat",
+ "swarm"
+ ],
+ "source": "/notebook/agentchat_swarm.ipynb"
+ },
+ {
+ "title": "Using a local Telemetry server to monitor a GraphRAG agent",
+ "link": "/notebooks/agentchat_swarm_graphrag_telemetry_trip_planner",
+ "description": "FalkorDB GraphRAG utilises a knowledge graph and can be added as a capability to agents. Together with a swarm orchestration of agents is highly effective at providing a RAG capability.",
+ "image": null,
+ "tags": [
+ "RAG",
+ "tool/function",
+ "swarm"
+ ],
+ "source": "/notebook/agentchat_swarm_graphrag_telemetry_trip_planner.ipynb"
+ },
+ {
+ "title": "Trip planning with a FalkorDB GraphRAG agent using a Swarm",
+ "link": "/notebooks/agentchat_swarm_graphrag_trip_planner",
+ "description": "FalkorDB GraphRAG utilises a knowledge graph and can be added as a capability to agents. Together with a swarm orchestration of agents is highly effective at providing a RAG capability.",
+ "image": null,
+ "tags": [
+ "RAG",
+ "tool/function",
+ "swarm"
+ ],
+ "source": "/notebook/agentchat_swarm_graphrag_trip_planner.ipynb"
+ },
+ {
+ "title": "(Legacy) Implement Swarm-style orchestration with GroupChat",
+ "link": "/notebooks/agentchat_swarm_w_groupchat_legacy",
+ "description": "(Legacy) Implement Swarm-style orchestration with GroupChat",
+ "image": null,
+ "tags": [
+ "orchestration",
+ "group chat",
+ "stateflow",
+ "swarm"
+ ],
+ "source": "/notebook/agentchat_swarm_w_groupchat_legacy.ipynb"
+ },
+ {
+ "title": "Chatting with a teachable agent",
+ "link": "/notebooks/agentchat_teachability",
+ "description": "Learn how to persist memories across chat sessions using the Teachability capability",
+ "image": null,
+ "tags": [
+ "teachability",
+ "learning",
+ "RAG",
+ "capability"
+ ],
+ "source": "/notebook/agentchat_teachability.ipynb"
+ },
+ {
+ "title": "Making OpenAI Assistants Teachable",
+ "link": "/notebooks/agentchat_teachable_oai_assistants",
+ "description": "Teach OpenAI assistants.",
+ "image": null,
+ "tags": [
+ "teachability",
+ "capability",
+ "learning",
+ "RAG",
+ "OpenAI Assistant"
+ ],
+ "source": "/notebook/agentchat_teachable_oai_assistants.ipynb"
+ },
+ {
+ "title": "Auto Generated Agent Chat: Teaching AI New Skills via Natural Language Interaction",
+ "link": "/notebooks/agentchat_teaching",
+ "description": "Teach the agent news skills using natural language.",
+ "image": null,
+ "tags": [
+ "learning",
+ "teaching"
+ ],
+ "source": "/notebook/agentchat_teaching.ipynb"
+ },
+ {
+ "title": "Preprocessing Chat History with `TransformMessages`",
+ "link": "/notebooks/agentchat_transform_messages",
+ "description": "Preprocessing chat history with `TransformMessages`",
+ "image": null,
+ "tags": [
+ "long context handling",
+ "capability"
+ ],
+ "source": "/notebook/agentchat_transform_messages.ipynb"
+ },
+ {
+ "title": "Auto Generated Agent Chat: Collaborative Task Solving with Multiple Agents and Human Users",
+ "link": "/notebooks/agentchat_two_users",
+ "description": "Involve multiple human users via function calls and nested chat.",
+ "image": null,
+ "tags": [
+ "human",
+ "tool/function"
+ ],
+ "source": "/notebook/agentchat_two_users.ipynb"
+ },
+ {
+ "title": "Translating Video audio using Whisper and GPT-3.5-turbo",
+ "link": "/notebooks/agentchat_video_transcript_translate_with_whisper",
+ "description": "Use tools to extract and translate the transcript of a video file.",
+ "image": null,
+ "tags": [
+ "whisper",
+ "multimodal",
+ "tool/function"
+ ],
+ "source": "/notebook/agentchat_video_transcript_translate_with_whisper.ipynb"
+ },
+ {
+ "title": "Auto Generated Agent Chat: Solving Tasks Requiring Web Info",
+ "link": "/notebooks/agentchat_web_info",
+ "description": "Solve tasks requiring web info.",
+ "image": null,
+ "tags": [
+ "web",
+ "code generation"
+ ],
+ "source": "/notebook/agentchat_web_info.ipynb"
+ },
+ {
+ "title": "Web Scraping using Apify Tools",
+ "link": "/notebooks/agentchat_webscraping_with_apify",
+ "description": "Scrapping web pages and summarizing the content using agents with tools.",
+ "image": null,
+ "tags": [
+ "web",
+ "apify",
+ "integration",
+ "tool/function"
+ ],
+ "source": "/notebook/agentchat_webscraping_with_apify.ipynb"
+ },
+ {
+ "title": "Websockets: Streaming input and output using websockets",
+ "link": "/notebooks/agentchat_websockets",
+ "description": "Websockets facilitate real-time, bidirectional communication between web clients and servers, enhancing the responsiveness and interactivity of AutoGen-powered applications.",
+ "image": null,
+ "tags": [
+ "websockets",
+ "streaming"
+ ],
+ "source": "/notebook/agentchat_websockets.ipynb"
+ },
+ {
+ "title": "Solving Multiple Tasks in a Sequence of Chats with Different Conversable Agent Pairs",
+ "link": "/notebooks/agentchats_sequential_chats",
+ "description": "Use AutoGen to solve a set of tasks with a sequence of chats.",
+ "image": null,
+ "tags": [
+ "orchestration",
+ "sequential chats"
+ ],
+ "source": "/notebook/agentchats_sequential_chats.ipynb"
+ },
+ {
+ "title": "Demonstrating the `AgentEval` framework using the task of solving math problems as an example",
+ "link": "/notebooks/agenteval_cq_math",
+ "description": "AgentEval: a multi-agent system for assessing utility of LLM-powered applications",
+ "image": null,
+ "tags": [
+ "eval"
+ ],
+ "source": "/notebook/agenteval_cq_math.ipynb"
+ },
+ {
+ "title": "Agent Chat with Async Human Inputs",
+ "link": "/notebooks/async_human_input",
+ "description": "Async human inputs.",
+ "image": null,
+ "tags": [
+ "async",
+ "human"
+ ],
+ "source": "/notebook/async_human_input.ipynb"
+ },
+ {
+ "title": "Automatically Build Multi-agent System from Agent Library",
+ "link": "/notebooks/autobuild_agent_library",
+ "description": "Automatically build multi-agent system from agent library",
+ "image": null,
+ "tags": [
+ "autobuild"
+ ],
+ "source": "/notebook/autobuild_agent_library.ipynb"
+ },
+ {
+ "title": "AutoBuild",
+ "link": "/notebooks/autobuild_basic",
+ "description": "Automatically build multi-agent system with AgentBuilder",
+ "image": null,
+ "tags": [
+ "autobuild"
+ ],
+ "source": "/notebook/autobuild_basic.ipynb"
+ },
+ {
+ "title": "A Uniform interface to call different LLMs",
+ "link": "/notebooks/autogen_uniformed_api_calling",
+ "description": "Uniform interface to call different LLM.",
+ "image": null,
+ "tags": [
+ "integration",
+ "custom model"
+ ],
+ "source": "/notebook/autogen_uniformed_api_calling.ipynb"
+ },
+ {
+ "title": "From Dad Jokes To Sad Jokes: Function Calling with GPTAssistantAgent",
+ "link": "/notebooks/gpt_assistant_agent_function_call",
+ "description": "Use tools in a GPTAssistantAgent Multi-Agent System by utilizing functions such as calling an API and writing to a file.",
+ "image": null,
+ "tags": [
+ "OpenAI Assistant",
+ "tool/function"
+ ],
+ "source": "/notebook/gpt_assistant_agent_function_call.ipynb"
+ },
+ {
+ "title": "Language Agent Tree Search",
+ "link": "/notebooks/lats_search",
+ "description": "Language Agent Tree Search.",
+ "image": null,
+ "tags": [
+ "LATS",
+ "search",
+ "reasoning",
+ "reflection"
+ ],
+ "source": "/notebook/lats_search.ipynb"
+ },
+ {
+ "title": "Tool Use",
+ "link": "/docs/notebooks/tool-use",
+ "description": "",
+ "image": null,
+ "tags": [],
+ "source": "/website/docs/tutorial/tool-use.ipynb"
+ },
+ {
+ "title": "Mitigating Prompt hacking with JSON Mode in Autogen",
+ "link": "/notebooks/JSON_mode_example",
+ "description": "Use JSON mode and Agent Descriptions to mitigate prompt manipulation and control speaker transition.",
+ "image": null,
+ "tags": [
+ "JSON",
+ "description",
+ "prompt hacking",
+ "group chat",
+ "orchestration"
+ ],
+ "source": "/notebook/JSON_mode_example.ipynb"
+ },
+ {
+ "title": "Using RetrieveChat for Retrieve Augmented Code Generation and Question Answering",
+ "link": "/notebooks/agentchat_RetrieveChat",
+ "description": "Explore the use of AutoGen's RetrieveChat for tasks like code generation from docstrings, answering complex questions with human feedback, and exploiting features like Update Context, custom prompts, and few-shot learning.",
+ "image": null,
+ "tags": [
+ "RAG"
+ ],
+ "source": "/notebook/agentchat_RetrieveChat.ipynb"
+ },
+ {
+ "title": "Anthropic Claude",
+ "link": "/notebooks/cloud-anthropic",
+ "description": "Define and load a custom model",
+ "image": null,
+ "tags": [
+ "custom model"
+ ],
+ "source": "/website/docs/topics/non-openai-models/cloud-anthropic.ipynb"
+ },
+ {
+ "title": "Amazon Bedrock",
+ "link": "/notebooks/cloud-bedrock",
+ "description": "Define and load a custom model",
+ "image": null,
+ "tags": [
+ "custom model"
+ ],
+ "source": "/website/docs/topics/non-openai-models/cloud-bedrock.ipynb"
+ },
+ {
+ "title": "ReAct",
+ "link": "/notebooks/react",
+ "description": "",
+ "image": null,
+ "tags": [],
+ "source": "/website/docs/topics/prompting-and-reasoning/react.ipynb"
+ },
+ {
+ "title": "Allowing Human Feedback in Agents",
+ "link": "/notebooks/human-in-the-loop",
+ "description": "",
+ "image": null,
+ "tags": [],
+ "source": "/website/docs/tutorial/human-in-the-loop.ipynb"
+ },
+ {
+ "title": "Task Decomposition",
+ "link": "/notebooks/task_decomposition",
+ "description": "",
+ "image": null,
+ "tags": [],
+ "source": "/website/docs/topics/task_decomposition.ipynb"
+ },
+ {
+ "title": "Using Neo4j's graph database with AG2 agents for Question & Answering",
+ "link": "/notebooks/agentchat_graph_rag_neo4j",
+ "description": "Neo4j GraphRAG utilises a knowledge graph and can be added as a capability to agents.",
+ "image": null,
+ "tags": [
+ "RAG"
+ ],
+ "source": "/notebook/agentchat_graph_rag_neo4j.ipynb"
+ },
+ {
+ "title": "Swarm Orchestration",
+ "link": "/notebooks/swarm",
+ "description": "",
+ "image": null,
+ "tags": [],
+ "source": "/website/docs/topics/swarm.ipynb"
+ },
+ {
+ "title": "LiteLLM with WatsonX",
+ "link": "/notebooks/cloud-litellm-watsonx",
+ "description": "",
+ "image": null,
+ "tags": [],
+ "source": "/website/docs/topics/non-openai-models/cloud-litellm-watsonx.ipynb"
+ },
+ {
+ "title": "Introduction to AutoGen",
+ "link": "/notebooks/introduction",
+ "description": "",
+ "image": null,
+ "tags": [],
+ "source": "/website/docs/tutorial/introduction.ipynb"
+ },
+ {
+ "title": "Conversation Patterns",
+ "link": "/notebooks/conversation-patterns",
+ "description": "",
+ "image": null,
+ "tags": [],
+ "source": "/website/docs/tutorial/conversation-patterns.ipynb"
+ },
+ {
+ "title": "Enhanced Swarm Orchestration with AG2",
+ "link": "/notebooks/agentchat_swarm_enhanced",
+ "description": "Swarm Ochestration",
+ "image": null,
+ "tags": [
+ "orchestration",
+ "group chat",
+ "swarm"
+ ],
+ "source": "/notebook/agentchat_swarm_enhanced.ipynb"
+ },
+ {
+ "title": "Cerebras",
+ "link": "/notebooks/cloud-cerebras",
+ "description": "",
+ "image": null,
+ "tags": [],
+ "source": "/website/docs/topics/non-openai-models/cloud-cerebras.ipynb"
+ }
+];
diff --git a/website/static/img/autogen_agentchat.png b/website/static/img/autogen_agentchat.png
index 54d78c66d8..c6bbe5ac32 100644
--- a/website/static/img/autogen_agentchat.png
+++ b/website/static/img/autogen_agentchat.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:2056728b68699091b74c223baecdb127ac85ff81f1f7c61e8e25543652ee0ecb
-size 130557
+oid sha256:9218520aede4943b58b2d852ddd825cbdd7fa1eba07a9016441e8edbdb930d85
+size 1602383
diff --git a/website/static/img/chat_example.png b/website/static/img/chat_example.png
index 5e68f40a0d..a12f6ca2c3 100644
--- a/website/static/img/chat_example.png
+++ b/website/static/img/chat_example.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:18130669ccef4cd19fae7ede12f4d8ece2e93dde4cee07e9a39b4d59e1e8e1dd
-size 441624
+oid sha256:53860f030c9fc724827004814008e5342e7914edaadfae3a6363044d4cf66afc
+size 1013165
diff --git a/website/static/img/cover.png b/website/static/img/cover.png
new file mode 100644
index 0000000000..32387d802a
--- /dev/null
+++ b/website/static/img/cover.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9828808b314a7f31c3223d735c972e5e71994473f88aadaf323d86c5b004b48c
+size 162605