diff --git a/.github/workflows/github-pages.yaml b/.github/workflows/github-pages.yaml new file mode 100644 index 0000000..fef98ff --- /dev/null +++ b/.github/workflows/github-pages.yaml @@ -0,0 +1,28 @@ +name: github-pages +on: + push: + branches: + - main +permissions: + contents: write +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Configure Git Credentials + run: | + git config user.name github-actions[bot] + git config user.email 41898282+github-actions[bot]@users.noreply.github.com + - uses: actions/setup-python@v5 + with: + python-version: 3.x + - run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV + - uses: actions/cache@v4 + with: + key: mkdocs-material-${{ env.cache_id }} + path: .cache + restore-keys: | + mkdocs-material- + - run: pip install mkdocs-material + - run: mkdocs gh-deploy --force diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 51047a3..0009122 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -16,7 +16,8 @@ jobs: platform: - "ubuntu-latest" - "macos-latest" - - "windows-latest" + # FIXME: "windows-latest" is not supported for now + # - "windows-latest" python-version: - "3.10" runs-on: ${{ matrix.platform }} diff --git a/Makefile b/Makefile index de1851b..fe9c0fb 100644 --- a/Makefile +++ b/Makefile @@ -80,3 +80,18 @@ docker-scan: ## scan Docker image .PHONY: ci-test-docker ci-test-docker: docker-lint docker-build docker-run ## run CI test for Docker + +# --- +# Docs +# --- + +.PHONY: docs +docs: ## build documentation + poetry run mkdocs build + +.PHONY: docs-serve +docs-serve: ## serve documentation + poetry run mkdocs serve + +.PHONY: ci-test-docs +ci-test-docs: docs ## run CI test for documentation diff --git a/README.md b/README.md index 6ced8f1..9f73006 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,7 @@ [![docker](https://github.com/ks6088ts-labs/workshop-azure-openai/actions/workflows/docker.yaml/badge.svg?branch=main)](https://github.com/ks6088ts-labs/workshop-azure-openai/actions/workflows/docker.yaml?query=branch%3Amain) [![docker-release](https://github.com/ks6088ts-labs/workshop-azure-openai/actions/workflows/docker-release.yaml/badge.svg)](https://github.com/ks6088ts-labs/workshop-azure-openai/actions/workflows/docker-release.yaml) [![ghcr](https://github.com/ks6088ts-labs/workshop-azure-openai/actions/workflows/ghcr.yaml/badge.svg)](https://github.com/ks6088ts-labs/workshop-azure-openai/actions/workflows/ghcr.yaml) +[![docs](https://github.com/ks6088ts-labs/workshop-azure-openai/actions/workflows/github-pages.yaml/badge.svg)](https://github.com/ks6088ts-labs/workshop-azure-openai/actions/workflows/github-pages.yaml) diff --git a/apps/10_streamlit_batch_transcription/README.md b/docs/apps/10_streamlit_batch_transcription.md similarity index 90% rename from apps/10_streamlit_batch_transcription/README.md rename to docs/apps/10_streamlit_batch_transcription.md index b342bfc..6e58b78 100644 --- a/apps/10_streamlit_batch_transcription/README.md +++ b/docs/apps/10_streamlit_batch_transcription.md @@ -1,4 +1,4 @@ -# Call Batch Transcription API with Streamlit +# 10. Call Batch Transcription API with Streamlit This is a Streamlit app that calls Azure AI Speech Batch Transcription API. @@ -36,7 +36,7 @@ $ python -m streamlit run apps/10_streamlit_batch_transcription/main.py ### Example -![Streamlit](../../docs/images/10_streamlit_batch_transcription.main.png) +![Streamlit](../images/10_streamlit_batch_transcription.main.png) ## References diff --git a/apps/11_promptflow/README.md b/docs/apps/11_promptflow.md similarity index 99% rename from apps/11_promptflow/README.md rename to docs/apps/11_promptflow.md index 8fe60ff..406e4f3 100644 --- a/apps/11_promptflow/README.md +++ b/docs/apps/11_promptflow.md @@ -1,4 +1,4 @@ -# Getting Started with Prompt flow +# 11. Getting Started with Prompt flow This application explains how to get started with [Prompt flow](https://github.com/microsoft/promptflow), a Python library that provides a simple and easy way to build conversational AI applications. diff --git a/apps/12_langgraph_agent/README.md b/docs/apps/12_langgraph_agent.md similarity index 94% rename from apps/12_langgraph_agent/README.md rename to docs/apps/12_langgraph_agent.md index 26c9f22..ae906aa 100644 --- a/apps/12_langgraph_agent/README.md +++ b/docs/apps/12_langgraph_agent.md @@ -1,4 +1,4 @@ -# Create agents with LangGraph +# 12. Create agents with LangGraph This app demonstrates how to implement agents with LangGraph. @@ -49,7 +49,7 @@ python apps/12_langgraph_agent/advanced_rag_flows/ingestion.py python apps/12_langgraph_agent/advanced_rag_flows/main.py ``` -![Advanced RAG Flows](../../docs/images/12_langgraph_agent_graph.png) +![Advanced RAG Flows](../images/12_langgraph_agent_graph.png) ## References diff --git a/apps/13_langchain_toolkits/README.md b/docs/apps/13_langchain_toolkits.md similarity index 99% rename from apps/13_langchain_toolkits/README.md rename to docs/apps/13_langchain_toolkits.md index 76d0c18..9fe0b44 100644 --- a/apps/13_langchain_toolkits/README.md +++ b/docs/apps/13_langchain_toolkits.md @@ -1,4 +1,4 @@ -# LangChain Toolkits sample applications +# 13. LangChain Toolkits sample applications This app demonstrates how to use LangChain Toolkits. diff --git a/apps/14_streamlit_azure_ai_speech/README.md b/docs/apps/14_streamlit_azure_ai_speech.md similarity index 94% rename from apps/14_streamlit_azure_ai_speech/README.md rename to docs/apps/14_streamlit_azure_ai_speech.md index d865e5f..94a9dc5 100644 --- a/apps/14_streamlit_azure_ai_speech/README.md +++ b/docs/apps/14_streamlit_azure_ai_speech.md @@ -1,4 +1,4 @@ -# Realtime transcription with Azure AI Speech Service +# 14. Realtime transcription with Azure AI Speech Service This app demonstrates how to use Azure AI Speech Service for realtime transcription. diff --git a/apps/15_streamlit_chat_slm/README.md b/docs/apps/15_streamlit_chat_slm.md similarity index 94% rename from apps/15_streamlit_chat_slm/README.md rename to docs/apps/15_streamlit_chat_slm.md index 80bf7d5..ce8fc7a 100644 --- a/apps/15_streamlit_chat_slm/README.md +++ b/docs/apps/15_streamlit_chat_slm.md @@ -1,4 +1,4 @@ -# Streamlit Chat with SLM +# 15. Streamlit Chat with SLM ## Overview diff --git a/apps/16_whisper_transcription/README.md b/docs/apps/16_whisper_transcription.md similarity index 78% rename from apps/16_whisper_transcription/README.md rename to docs/apps/16_whisper_transcription.md index 3665794..3117ed3 100644 --- a/apps/16_whisper_transcription/README.md +++ b/docs/apps/16_whisper_transcription.md @@ -1,4 +1,6 @@ -# References +# 16. Whisper transcription + +## References - [openai/whisper](https://github.com/openai/whisper) - [Improve --model argument handling and help message #1764](https://github.com/openai/whisper/pull/1764) diff --git a/apps/1_call_azure_openai_chat/README.md b/docs/apps/1_call_azure_openai_chat.md similarity index 99% rename from apps/1_call_azure_openai_chat/README.md rename to docs/apps/1_call_azure_openai_chat.md index 8f1920a..af9099f 100644 --- a/apps/1_call_azure_openai_chat/README.md +++ b/docs/apps/1_call_azure_openai_chat.md @@ -1,4 +1,4 @@ -# Call Azure OpenAI Service API from Python +# 1. Call Azure OpenAI Service API from Python This app demonstrates how to call the Azure OpenAI Service API from Python. diff --git a/apps/2_streamlit_chat/README.md b/docs/apps/2_streamlit_chat.md similarity index 95% rename from apps/2_streamlit_chat/README.md rename to docs/apps/2_streamlit_chat.md index c7dc354..71de23b 100644 --- a/apps/2_streamlit_chat/README.md +++ b/docs/apps/2_streamlit_chat.md @@ -1,4 +1,4 @@ -# Create an Azure OpenAI Chat app using Streamlit +# 2. Create an Azure OpenAI Chat app using Streamlit This app demonstrates how to create a chat application using Azure OpenAI Service and Streamlit. @@ -108,11 +108,11 @@ $ python -m streamlit run apps/2_streamlit_chat/main.py When you access `http://localhost:8501`, you will see the following screen. -![Streamlit Chat](../../docs/images/2_streamlit_chat.initial_page.png) +![Streamlit Chat](../images/2_streamlit_chat.initial_page.png) To start a conversation, fill in the required fields in the sidebar and you will see the following screen. -![Streamlit Chat](../../docs/images/2_streamlit_chat.chat_page.png) +![Streamlit Chat](../images/2_streamlit_chat.chat_page.png) ## Note diff --git a/apps/3_call_azure_cosmos_db/README.md b/docs/apps/3_call_azure_cosmos_db.md similarity index 98% rename from apps/3_call_azure_cosmos_db/README.md rename to docs/apps/3_call_azure_cosmos_db.md index ef0c14f..08f8c6c 100644 --- a/apps/3_call_azure_cosmos_db/README.md +++ b/docs/apps/3_call_azure_cosmos_db.md @@ -1,4 +1,4 @@ -# Call Azure Cosmos DB from Python +# 3. Call Azure Cosmos DB from Python This app demonstrates how to call Azure Cosmos DB from Python. diff --git a/apps/4_streamlit_chat_history/README.md b/docs/apps/4_streamlit_chat_history.md similarity index 95% rename from apps/4_streamlit_chat_history/README.md rename to docs/apps/4_streamlit_chat_history.md index 020f236..a22091b 100644 --- a/apps/4_streamlit_chat_history/README.md +++ b/docs/apps/4_streamlit_chat_history.md @@ -1,4 +1,4 @@ -# Add feature to store chat history using Azure Cosmos DB +# 4. Add feature to store chat history using Azure Cosmos DB This app demonstrates how to add a feature to save chat history using Azure Cosmos DB to an Azure OpenAI Chat app using Streamlit implemented in [2_streamlit_chat](../2_streamlit_chat/). @@ -36,11 +36,11 @@ Access `http://localhost:8501` and set the required fields in the sidebar to sta When you send a message, the chat history will be saved in Azure Cosmos DB. -![Chat page](../../docs/images/4_streamlit_chat_history.chat_page.png) +![Chat page](../images/4_streamlit_chat_history.chat_page.png) Conversation history can be viewed from the Cosmos DB Data Explorer as shown below. -![Cosmos DB Data Explorer](../../docs/images/4_streamlit_chat_history.data_explorer.png) +![Cosmos DB Data Explorer](../images/4_streamlit_chat_history.data_explorer.png) The chat history is saved as shown below. diff --git a/apps/5_streamlit_query_chat_history/README.md b/docs/apps/5_streamlit_query_chat_history.md similarity index 90% rename from apps/5_streamlit_query_chat_history/README.md rename to docs/apps/5_streamlit_query_chat_history.md index a8a1a27..7117649 100644 --- a/apps/5_streamlit_query_chat_history/README.md +++ b/docs/apps/5_streamlit_query_chat_history.md @@ -1,4 +1,4 @@ -# Search Chat History +# 5. Search Chat History This application is used to search the chat history accumulated in [4_streamlit_chat_history](../4_streamlit_chat_history/). @@ -34,4 +34,4 @@ Access `http://localhost:8501` and set the required fields in the sidebar to sea When you click the "Search" button, the chat history will be displayed. -![Main page](../../docs/images/5_streamlit_query_chat_history.main.png) +![Main page](../images/5_streamlit_query_chat_history.main.png) diff --git a/apps/6_call_azure_ai_search/README.md b/docs/apps/6_call_azure_ai_search.md similarity index 96% rename from apps/6_call_azure_ai_search/README.md rename to docs/apps/6_call_azure_ai_search.md index 01d5a85..46dac7e 100644 --- a/apps/6_call_azure_ai_search/README.md +++ b/docs/apps/6_call_azure_ai_search.md @@ -1,4 +1,4 @@ -# Call Azure AI Search from Python +# 6. Call Azure AI Search from Python This application explains how to call Azure AI Search from Python. @@ -50,8 +50,7 @@ So we introduce `RecursiveCharacterTextSplitter` which provides a simple and eas 1. Set credentials in `.env` 1. Run scripts in the [apps/6_call_azure_ai_search](./) directory -> [!CAUTION] -> `AZURE_AI_SEARCH_INDEX_NAME` in `.env` should be unique and should not be changed once set. +> [!CAUTION] > `AZURE_AI_SEARCH_INDEX_NAME` in `.env` should be unique and should not be changed once set. > If you change the index name, you will need to recreate the index and re-upload the documents. Set up the environment and install dependencies: diff --git a/apps/7_streamlit_chat_rag/README.md b/docs/apps/7_streamlit_chat_rag.md similarity index 97% rename from apps/7_streamlit_chat_rag/README.md rename to docs/apps/7_streamlit_chat_rag.md index 9119055..52b9533 100644 --- a/apps/7_streamlit_chat_rag/README.md +++ b/docs/apps/7_streamlit_chat_rag.md @@ -1,4 +1,4 @@ -# Add RAG feature to Streamlit chat app +# 7. Add RAG feature to Streamlit chat app This app demonstrates how to add the Retrieval-Augmented Generation (RAG) feature to a Streamlit chat app. @@ -64,7 +64,7 @@ Access `http://localhost:8501` and set the required fields in the sidebar to sta When you send a question about Contoso Corporation, the chatbot will respond with an answer from Azure AI Search. -![RAG Chat](../../docs/images/7_streamlit_chat_rag.main.png) +![RAG Chat](../images/7_streamlit_chat_rag.main.png) To see how the RAG feature works, watch the video below. diff --git a/apps/8_streamlit_azure_openai_batch/README.md b/docs/apps/8_streamlit_azure_openai_batch.md similarity index 88% rename from apps/8_streamlit_azure_openai_batch/README.md rename to docs/apps/8_streamlit_azure_openai_batch.md index 7b8fb22..3287674 100644 --- a/apps/8_streamlit_azure_openai_batch/README.md +++ b/docs/apps/8_streamlit_azure_openai_batch.md @@ -1,4 +1,4 @@ -# Call Azure OpenAI Batch API with Streamlit +# 8. Call Azure OpenAI Batch API with Streamlit This app demonstrates how to call Azure OpenAI Batch API with Streamlit. @@ -30,7 +30,7 @@ $ python -m streamlit run apps/8_streamlit_azure_openai_batch/main.py ### Example -![Streamlit Chat](../../docs/images/8_streamlit_azure_openai_batch.main.png) +![Streamlit Chat](../images/8_streamlit_azure_openai_batch.main.png) ## References diff --git a/apps/99_streamlit_examples/README.md b/docs/apps/99_streamlit_examples.md similarity index 62% rename from apps/99_streamlit_examples/README.md rename to docs/apps/99_streamlit_examples.md index 88ac966..a174d08 100644 --- a/apps/99_streamlit_examples/README.md +++ b/docs/apps/99_streamlit_examples.md @@ -1,4 +1,4 @@ -# Code samples for Streamlit +# 99. Code samples for Streamlit This app includes code samples for Streamlit. You can run the app and select the sample you want to run from the sidebar. @@ -35,51 +35,51 @@ Access to http://localhost:8501 and select the sample you want to run from the s #### 1. File Q&A -![File Q&A](../../docs/images/99_streamlit_examples.fileqa.png) +![File Q&A](../images/99_streamlit_examples.fileqa.png) #### 2. Image Q&A -![Image Q&A](../../docs/images/99_streamlit_examples.imageqa.png) +![Image Q&A](../images/99_streamlit_examples.imageqa.png) #### 3. Camera Q&A -![Camera Q&A](../../docs/images/99_streamlit_examples.cameraqa.png) +![Camera Q&A](../images/99_streamlit_examples.cameraqa.png) #### 4. Translate text -![Translate text](../../docs/images/99_streamlit_examples.translate.png) +![Translate text](../images/99_streamlit_examples.translate.png) #### 5. Explain data -![Explain data](../../docs/images/99_streamlit_examples.explaindata.png) +![Explain data](../images/99_streamlit_examples.explaindata.png) #### 6. Speech to Text -![Speech to Text](../../docs/images/99_streamlit_examples.stt.png) +![Speech to Text](../images/99_streamlit_examples.stt.png) #### 7. Text to Speech -![Text to Speech](../../docs/images/99_streamlit_examples.tts.png) +![Text to Speech](../images/99_streamlit_examples.tts.png) #### 8. Create image -![Create image](../../docs/images/99_streamlit_examples.createimage.png) +![Create image](../images/99_streamlit_examples.createimage.png) #### 9. Visualize location -![Visualize location](../../docs/images/99_streamlit_examples.map.png) +![Visualize location](../images/99_streamlit_examples.map.png) #### 10. Object detection -![Object detection](../../docs/images/99_streamlit_examples.objectdetection.png) +![Object detection](../images/99_streamlit_examples.objectdetection.png) #### 11. Pose estimation -![Pose estimation](../../docs/images/99_streamlit_examples.poseestimation.png) +![Pose estimation](../images/99_streamlit_examples.poseestimation.png) #### 12. Video processing -![Video processing](../../docs/images/99_streamlit_examples.videoprocessing.png) +![Video processing](../images/99_streamlit_examples.videoprocessing.png) ref. [data-videos/traffic.mp4](https://github.com/OlafenwaMoses/ImageAI/blob/master/data-videos/traffic.mp4) diff --git a/apps/9_streamlit_azure_document_intelligence/README.md b/docs/apps/9_streamlit_azure_document_intelligence.md similarity index 86% rename from apps/9_streamlit_azure_document_intelligence/README.md rename to docs/apps/9_streamlit_azure_document_intelligence.md index edc0cca..f7dbf62 100644 --- a/apps/9_streamlit_azure_document_intelligence/README.md +++ b/docs/apps/9_streamlit_azure_document_intelligence.md @@ -1,4 +1,4 @@ -# Call Azure Document Intelligence API with Streamlit +# 9. Call Azure Document Intelligence API with Streamlit This Streamlit app demonstrates how to call Azure Document Intelligence API with Streamlit. @@ -30,7 +30,7 @@ $ python -m streamlit run apps/9_streamlit_azure_document_intelligence/main.py ### Example -![Streamlit Chat](../../docs/images/9_streamlit_azure_document_intelligence.main.png) +![Streamlit Chat](../images/9_streamlit_azure_document_intelligence.main.png) ## References diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..000ea34 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,17 @@ +# Welcome to MkDocs + +For full documentation visit [mkdocs.org](https://www.mkdocs.org). + +## Commands + +* `mkdocs new [dir-name]` - Create a new project. +* `mkdocs serve` - Start the live-reloading docs server. +* `mkdocs build` - Build the documentation site. +* `mkdocs -h` - Print help message and exit. + +## Project layout + + mkdocs.yml # The configuration file. + docs/ + index.md # The documentation homepage. + ... # Other markdown pages, images and other files. diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 0000000..f7fa9e6 --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,46 @@ +# yaml-language-server: $schema=https://squidfunk.github.io/mkdocs-material/schema.json +site_name: Workshop for Azure OpenAI Service +site_url: "" +nav: + - Home: index.md + - Applications: + - 1. Call Azure OpenAI Service API from Python: apps/1_call_azure_openai_chat.md + - 2. Create an Azure OpenAI Chat app using Streamlit: apps/2_streamlit_chat.md + - 3. Call Azure Cosmos DB from Python: apps/3_call_azure_cosmos_db.md + - 4. Add feature to store chat history using Azure Cosmos DB: apps/4_streamlit_chat_history.md + - 5. Search Chat History: apps/5_streamlit_query_chat_history.md + - 6. Call Azure AI Search from Python: apps/6_call_azure_ai_search.md + - 7. Add RAG feature to Streamlit chat app: apps/7_streamlit_chat_rag.md + - 8. Call Azure OpenAI Batch API with Streamlit: apps/8_streamlit_azure_openai_batch.md + - 9. Call Azure Document Intelligence API with Streamlit: apps/9_streamlit_azure_document_intelligence.md + - 10. Call Batch Transcription API with Streamlit: apps/10_streamlit_batch_transcription.md + - 11. Getting Started with Prompt flow: apps/11_promptflow.md + - 12. Create agents with LangGraph: apps/12_langgraph_agent.md + - 13. LangChain Toolkits sample applications: apps/13_langchain_toolkits.md + - 14. Realtime transcription with Azure AI Speech Service: apps/14_streamlit_azure_ai_speech.md + - 15. Streamlit Chat with SLM: apps/15_streamlit_chat_slm.md + - 16. Whisper transcription: apps/16_whisper_transcription.md + - 99. Code samples for Streamlit: apps/99_streamlit_examples.md +theme: + name: material + # https://squidfunk.github.io/mkdocs-material/setup/changing-the-colors/#automatic-light-dark-mode + palette: + # Palette toggle for automatic mode + - media: "(prefers-color-scheme)" + toggle: + icon: material/brightness-auto + name: Switch to light mode + + # Palette toggle for light mode + - media: "(prefers-color-scheme: light)" + scheme: default + toggle: + icon: material/brightness-7 + name: Switch to dark mode + + # Palette toggle for dark mode + - media: "(prefers-color-scheme: dark)" + scheme: slate + toggle: + icon: material/brightness-4 + name: Switch to system preference diff --git a/poetry.lock b/poetry.lock index d15621b..bfa4026 100644 --- a/poetry.lock +++ b/poetry.lock @@ -461,6 +461,20 @@ typing-extensions = ">=4.6.0" [package.extras] aio = ["azure-core[aio] (>=1.30.0)"] +[[package]] +name = "babel" +version = "2.16.0" +description = "Internationalization utilities" +optional = false +python-versions = ">=3.8" +files = [ + {file = "babel-2.16.0-py3-none-any.whl", hash = "sha256:368b5b98b37c06b7daf6696391c3240c938b37767d4584413e8438c5c435fa8b"}, + {file = "babel-2.16.0.tar.gz", hash = "sha256:d1f3554ca26605fe173f3de0c65f750f5a42f924499bf134de6423582298e316"}, +] + +[package.extras] +dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] + [[package]] name = "backoff" version = "2.2.1" @@ -1601,6 +1615,23 @@ test-downstream = ["aiobotocore (>=2.5.4,<3.0.0)", "dask-expr", "dask[dataframe, test-full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "cloudpickle", "dask", "distributed", "dropbox", "dropboxdrivefs", "fastparquet", "fusepy", "gcsfs", "jinja2", "kerchunk", "libarchive-c", "lz4", "notebook", "numpy", "ocifs", "pandas", "panel", "paramiko", "pyarrow", "pyarrow (>=1)", "pyftpdlib", "pygit2", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "python-snappy", "requests", "smbprotocol", "tqdm", "urllib3", "zarr", "zstandard"] tqdm = ["tqdm"] +[[package]] +name = "ghp-import" +version = "2.1.0" +description = "Copy your docs directly to the gh-pages branch." +optional = false +python-versions = "*" +files = [ + {file = "ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"}, + {file = "ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619"}, +] + +[package.dependencies] +python-dateutil = ">=2.8.1" + +[package.extras] +dev = ["flake8", "markdown", "twine", "wheel"] + [[package]] name = "gitdb" version = "4.0.11" @@ -2919,6 +2950,21 @@ html5 = ["html5lib"] htmlsoup = ["BeautifulSoup4"] source = ["Cython (>=3.0.11)"] +[[package]] +name = "markdown" +version = "3.7" +description = "Python implementation of John Gruber's Markdown." +optional = false +python-versions = ">=3.8" +files = [ + {file = "Markdown-3.7-py3-none-any.whl", hash = "sha256:7eb6df5690b81a1d7942992c97fad2938e956e79df20cbc6186e9c3a77b1c803"}, + {file = "markdown-3.7.tar.gz", hash = "sha256:2ae2471477cfd02dbbf038d5d9bc226d40def84b4fe2986e49b59b6b472bbed2"}, +] + +[package.extras] +docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] +testing = ["coverage", "pyyaml"] + [[package]] name = "markdown-it-py" version = "3.0.0" @@ -3143,6 +3189,103 @@ opencv-contrib-python = "*" protobuf = ">=4.25.3,<5" sounddevice = ">=0.4.4" +[[package]] +name = "mergedeep" +version = "1.3.4" +description = "A deep merge function for 🐍." +optional = false +python-versions = ">=3.6" +files = [ + {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"}, + {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"}, +] + +[[package]] +name = "mkdocs" +version = "1.6.1" +description = "Project documentation with Markdown." +optional = false +python-versions = ">=3.8" +files = [ + {file = "mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e"}, + {file = "mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2"}, +] + +[package.dependencies] +click = ">=7.0" +colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""} +ghp-import = ">=1.0" +jinja2 = ">=2.11.1" +markdown = ">=3.3.6" +markupsafe = ">=2.0.1" +mergedeep = ">=1.3.4" +mkdocs-get-deps = ">=0.2.0" +packaging = ">=20.5" +pathspec = ">=0.11.1" +pyyaml = ">=5.1" +pyyaml-env-tag = ">=0.1" +watchdog = ">=2.0" + +[package.extras] +i18n = ["babel (>=2.9.0)"] +min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.4)", "jinja2 (==2.11.1)", "markdown (==3.3.6)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "mkdocs-get-deps (==0.2.0)", "packaging (==20.5)", "pathspec (==0.11.1)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "watchdog (==2.0)"] + +[[package]] +name = "mkdocs-get-deps" +version = "0.2.0" +description = "MkDocs extension that lists all dependencies according to a mkdocs.yml file" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134"}, + {file = "mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c"}, +] + +[package.dependencies] +mergedeep = ">=1.3.4" +platformdirs = ">=2.2.0" +pyyaml = ">=5.1" + +[[package]] +name = "mkdocs-material" +version = "9.5.40" +description = "Documentation that simply works" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mkdocs_material-9.5.40-py3-none-any.whl", hash = "sha256:8e7a16ada34e79a7b6459ff2602584222f522c738b6a023d1bea853d5049da6f"}, + {file = "mkdocs_material-9.5.40.tar.gz", hash = "sha256:b69d70e667ec51fc41f65e006a3184dd00d95b2439d982cb1586e4c018943156"}, +] + +[package.dependencies] +babel = ">=2.10,<3.0" +colorama = ">=0.4,<1.0" +jinja2 = ">=3.0,<4.0" +markdown = ">=3.2,<4.0" +mkdocs = ">=1.6,<2.0" +mkdocs-material-extensions = ">=1.3,<2.0" +paginate = ">=0.5,<1.0" +pygments = ">=2.16,<3.0" +pymdown-extensions = ">=10.2,<11.0" +regex = ">=2022.4" +requests = ">=2.26,<3.0" + +[package.extras] +git = ["mkdocs-git-committers-plugin-2 (>=1.1,<2.0)", "mkdocs-git-revision-date-localized-plugin (>=1.2.4,<2.0)"] +imaging = ["cairosvg (>=2.6,<3.0)", "pillow (>=10.2,<11.0)"] +recommended = ["mkdocs-minify-plugin (>=0.7,<1.0)", "mkdocs-redirects (>=1.2,<2.0)", "mkdocs-rss-plugin (>=1.6,<2.0)"] + +[[package]] +name = "mkdocs-material-extensions" +version = "1.3.1" +description = "Extension pack for Python Markdown and MkDocs Material." +optional = false +python-versions = ">=3.8" +files = [ + {file = "mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31"}, + {file = "mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443"}, +] + [[package]] name = "ml-dtypes" version = "0.4.1" @@ -4364,6 +4507,21 @@ files = [ {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, ] +[[package]] +name = "paginate" +version = "0.5.7" +description = "Divides large result sets into pages for easier browsing" +optional = false +python-versions = "*" +files = [ + {file = "paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591"}, + {file = "paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945"}, +] + +[package.extras] +dev = ["pytest", "tox"] +lint = ["black"] + [[package]] name = "pandas" version = "2.2.3" @@ -5198,6 +5356,24 @@ dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pyte docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] +[[package]] +name = "pymdown-extensions" +version = "10.11.2" +description = "Extension pack for Python Markdown." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pymdown_extensions-10.11.2-py3-none-any.whl", hash = "sha256:41cdde0a77290e480cf53892f5c5e50921a7ee3e5cd60ba91bf19837b33badcf"}, + {file = "pymdown_extensions-10.11.2.tar.gz", hash = "sha256:bc8847ecc9e784a098efd35e20cba772bc5a1b529dfcef9dc1972db9021a1049"}, +] + +[package.dependencies] +markdown = ">=3.6" +pyyaml = "*" + +[package.extras] +extra = ["pygments (>=2.12)"] + [[package]] name = "pyparsing" version = "3.1.4" @@ -5426,6 +5602,20 @@ files = [ {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, ] +[[package]] +name = "pyyaml-env-tag" +version = "0.1" +description = "A custom YAML tag for referencing environment variables in YAML files. " +optional = false +python-versions = ">=3.6" +files = [ + {file = "pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"}, + {file = "pyyaml_env_tag-0.1.tar.gz", hash = "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb"}, +] + +[package.dependencies] +pyyaml = "*" + [[package]] name = "referencing" version = "0.35.1" @@ -7266,4 +7456,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.0" python-versions = "^3.10" -content-hash = "4d05480b65259e06f2f1f725e63151e287d15e669f8812911decf4e9d5e19271" +content-hash = "11c6ecf61c307492ece6e90c96a215bfd09be2449b00c62944351389b025522d" diff --git a/pyproject.toml b/pyproject.toml index 5858980..487256b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -48,6 +48,10 @@ pytest = "^8.3.3" coverage = "^7.6.1" pytest-cov = "^5.0.0" + +[tool.poetry.group.docs.dependencies] +mkdocs-material = "^9.5.40" + [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api"