From c005493ad798dfe0456bda0eb8ad3429c4a9085b Mon Sep 17 00:00:00 2001 From: rudeigerc Date: Wed, 30 Apr 2025 16:52:00 +0800 Subject: [PATCH] docs: initialize site Signed-off-by: rudeigerc --- {docs/examples => examples}/README.md | 0 .../envoy-ai-gateway/basic.yaml | 0 .../hostpath/playground.yaml | 0 {docs/examples => examples}/hpa/README.md | 0 .../examples => examples}/hpa/playground.yaml | 0 .../huggingface/playground.yaml | 0 .../examples => examples}/llamacpp/README.md | 0 .../llamacpp/playground.yaml | 0 .../modelscope/playground.yaml | 0 .../multi-nodes/service.yaml | 0 .../objstore-oss/playground.yaml | 0 .../ollama/playground.yaml | 0 .../sglang/playground.yaml | 0 .../llamacpp/playground.yaml | 0 .../speculative-decoding/vllm/playground.yaml | 0 .../examples => examples}/tgi/playground.yaml | 0 .../NNNN-template/README.md | 0 .../NNNN-template/proposal.yaml | 0 site/.gitignore | 5 + .../icon.svg => site/assets/icons/logo.svg | 0 site/assets/scss/_styles_project.scss | 9 + site/assets/scss/_variables_project.scss | 9 + site/content/en/_index.md | 59 ++++++ site/content/en/docs/_index.md | 5 + {docs => site/content/en/docs}/develop.md | 11 +- .../content/en/docs}/installation.md | 8 +- site/content/en/docs/integrations/_index.md | 6 + .../en/docs/integrations}/envoy-ai-gateway.md | 5 +- .../en/docs/integrations}/open-webui.md | 5 +- .../docs/integrations/prometheus-operator.md | 13 +- .../en/docs/integrations}/support-backends.md | 5 +- site/content/en/docs/reference/_index.md | 9 + .../en/docs}/reference/core.v1alpha1.md | 0 .../en/docs}/reference/inference.v1alpha1.md | 0 site/content/en/search.md | 4 + site/go.mod | 5 + site/go.sum | 4 + site/hugo.toml | 169 ++++++++++++++++++ site/layouts/404.html | 6 + site/package.json | 8 + site/static/favicons/android-144x144.png | Bin 0 -> 3498 bytes site/static/favicons/android-192x192.png | Bin 0 -> 4289 bytes site/static/favicons/android-36x36.png | Bin 0 -> 875 bytes site/static/favicons/android-48x48.png | Bin 0 -> 1229 bytes site/static/favicons/android-72x72.png | Bin 0 -> 1680 bytes site/static/favicons/android-96x96.png | Bin 0 -> 2304 bytes .../favicons/android-chrome-192x192.png | Bin 0 -> 4289 bytes .../favicons/android-chrome-512x512.png | Bin 0 -> 10178 bytes .../android-chrome-maskable-192x192.png | Bin 0 -> 4289 bytes .../android-chrome-maskable-512x512.png | Bin 0 -> 10178 bytes .../favicons/apple-touch-icon-180x180.png | Bin 0 -> 4057 bytes site/static/favicons/favicon-16x16.png | Bin 0 -> 506 bytes site/static/favicons/favicon-32x32.png | Bin 0 -> 848 bytes site/static/favicons/favicon.ico | Bin 0 -> 1150 bytes {docs/assets => site/static/images}/arch.png | Bin {docs/assets => site/static/images}/infra.png | Bin {docs/assets => site/static/images}/logo.png | Bin .../static/images}/prometheus.png | Bin 58 files changed, 332 insertions(+), 13 deletions(-) rename {docs/examples => examples}/README.md (100%) rename {docs/examples => examples}/envoy-ai-gateway/basic.yaml (100%) rename {docs/examples => examples}/hostpath/playground.yaml (100%) rename {docs/examples => examples}/hpa/README.md (100%) rename {docs/examples => examples}/hpa/playground.yaml (100%) rename {docs/examples => examples}/huggingface/playground.yaml (100%) rename {docs/examples => examples}/llamacpp/README.md (100%) rename {docs/examples => examples}/llamacpp/playground.yaml (100%) rename {docs/examples => examples}/modelscope/playground.yaml (100%) rename {docs/examples => examples}/multi-nodes/service.yaml (100%) rename {docs/examples => examples}/objstore-oss/playground.yaml (100%) rename {docs/examples => examples}/ollama/playground.yaml (100%) rename {docs/examples => examples}/sglang/playground.yaml (100%) rename {docs/examples => examples}/speculative-decoding/llamacpp/playground.yaml (100%) rename {docs/examples => examples}/speculative-decoding/vllm/playground.yaml (100%) rename {docs/examples => examples}/tgi/playground.yaml (100%) rename {docs/proposals => proposals}/NNNN-template/README.md (100%) rename {docs/proposals => proposals}/NNNN-template/proposal.yaml (100%) create mode 100644 site/.gitignore rename docs/assets/icon.svg => site/assets/icons/logo.svg (100%) create mode 100644 site/assets/scss/_styles_project.scss create mode 100644 site/assets/scss/_variables_project.scss create mode 100644 site/content/en/_index.md create mode 100755 site/content/en/docs/_index.md rename {docs => site/content/en/docs}/develop.md (79%) rename {docs => site/content/en/docs}/installation.md (95%) create mode 100644 site/content/en/docs/integrations/_index.md rename {docs => site/content/en/docs/integrations}/envoy-ai-gateway.md (98%) rename {docs => site/content/en/docs/integrations}/open-webui.md (98%) rename docs/prometheus-operator/README.md => site/content/en/docs/integrations/prometheus-operator.md (93%) rename {docs => site/content/en/docs/integrations}/support-backends.md (95%) create mode 100644 site/content/en/docs/reference/_index.md rename {docs => site/content/en/docs}/reference/core.v1alpha1.md (100%) rename {docs => site/content/en/docs}/reference/inference.v1alpha1.md (100%) create mode 100644 site/content/en/search.md create mode 100644 site/go.mod create mode 100644 site/go.sum create mode 100644 site/hugo.toml create mode 100644 site/layouts/404.html create mode 100644 site/package.json create mode 100644 site/static/favicons/android-144x144.png create mode 100644 site/static/favicons/android-192x192.png create mode 100644 site/static/favicons/android-36x36.png create mode 100644 site/static/favicons/android-48x48.png create mode 100644 site/static/favicons/android-72x72.png create mode 100644 site/static/favicons/android-96x96.png create mode 100644 site/static/favicons/android-chrome-192x192.png create mode 100644 site/static/favicons/android-chrome-512x512.png create mode 100644 site/static/favicons/android-chrome-maskable-192x192.png create mode 100644 site/static/favicons/android-chrome-maskable-512x512.png create mode 100644 site/static/favicons/apple-touch-icon-180x180.png create mode 100644 site/static/favicons/favicon-16x16.png create mode 100644 site/static/favicons/favicon-32x32.png create mode 100644 site/static/favicons/favicon.ico rename {docs/assets => site/static/images}/arch.png (100%) rename {docs/assets => site/static/images}/infra.png (100%) rename {docs/assets => site/static/images}/logo.png (100%) rename {docs/prometheus-operator => site/static/images}/prometheus.png (100%) diff --git a/docs/examples/README.md b/examples/README.md similarity index 100% rename from docs/examples/README.md rename to examples/README.md diff --git a/docs/examples/envoy-ai-gateway/basic.yaml b/examples/envoy-ai-gateway/basic.yaml similarity index 100% rename from docs/examples/envoy-ai-gateway/basic.yaml rename to examples/envoy-ai-gateway/basic.yaml diff --git a/docs/examples/hostpath/playground.yaml b/examples/hostpath/playground.yaml similarity index 100% rename from docs/examples/hostpath/playground.yaml rename to examples/hostpath/playground.yaml diff --git a/docs/examples/hpa/README.md b/examples/hpa/README.md similarity index 100% rename from docs/examples/hpa/README.md rename to examples/hpa/README.md diff --git a/docs/examples/hpa/playground.yaml b/examples/hpa/playground.yaml similarity index 100% rename from docs/examples/hpa/playground.yaml rename to examples/hpa/playground.yaml diff --git a/docs/examples/huggingface/playground.yaml b/examples/huggingface/playground.yaml similarity index 100% rename from docs/examples/huggingface/playground.yaml rename to examples/huggingface/playground.yaml diff --git a/docs/examples/llamacpp/README.md b/examples/llamacpp/README.md similarity index 100% rename from docs/examples/llamacpp/README.md rename to examples/llamacpp/README.md diff --git a/docs/examples/llamacpp/playground.yaml b/examples/llamacpp/playground.yaml similarity index 100% rename from docs/examples/llamacpp/playground.yaml rename to examples/llamacpp/playground.yaml diff --git a/docs/examples/modelscope/playground.yaml b/examples/modelscope/playground.yaml similarity index 100% rename from docs/examples/modelscope/playground.yaml rename to examples/modelscope/playground.yaml diff --git a/docs/examples/multi-nodes/service.yaml b/examples/multi-nodes/service.yaml similarity index 100% rename from docs/examples/multi-nodes/service.yaml rename to examples/multi-nodes/service.yaml diff --git a/docs/examples/objstore-oss/playground.yaml b/examples/objstore-oss/playground.yaml similarity index 100% rename from docs/examples/objstore-oss/playground.yaml rename to examples/objstore-oss/playground.yaml diff --git a/docs/examples/ollama/playground.yaml b/examples/ollama/playground.yaml similarity index 100% rename from docs/examples/ollama/playground.yaml rename to examples/ollama/playground.yaml diff --git a/docs/examples/sglang/playground.yaml b/examples/sglang/playground.yaml similarity index 100% rename from docs/examples/sglang/playground.yaml rename to examples/sglang/playground.yaml diff --git a/docs/examples/speculative-decoding/llamacpp/playground.yaml b/examples/speculative-decoding/llamacpp/playground.yaml similarity index 100% rename from docs/examples/speculative-decoding/llamacpp/playground.yaml rename to examples/speculative-decoding/llamacpp/playground.yaml diff --git a/docs/examples/speculative-decoding/vllm/playground.yaml b/examples/speculative-decoding/vllm/playground.yaml similarity index 100% rename from docs/examples/speculative-decoding/vllm/playground.yaml rename to examples/speculative-decoding/vllm/playground.yaml diff --git a/docs/examples/tgi/playground.yaml b/examples/tgi/playground.yaml similarity index 100% rename from docs/examples/tgi/playground.yaml rename to examples/tgi/playground.yaml diff --git a/docs/proposals/NNNN-template/README.md b/proposals/NNNN-template/README.md similarity index 100% rename from docs/proposals/NNNN-template/README.md rename to proposals/NNNN-template/README.md diff --git a/docs/proposals/NNNN-template/proposal.yaml b/proposals/NNNN-template/proposal.yaml similarity index 100% rename from docs/proposals/NNNN-template/proposal.yaml rename to proposals/NNNN-template/proposal.yaml diff --git a/site/.gitignore b/site/.gitignore new file mode 100644 index 00000000..40b67f41 --- /dev/null +++ b/site/.gitignore @@ -0,0 +1,5 @@ +/public +resources/ +node_modules/ +package-lock.json +.hugo_build.lock \ No newline at end of file diff --git a/docs/assets/icon.svg b/site/assets/icons/logo.svg similarity index 100% rename from docs/assets/icon.svg rename to site/assets/icons/logo.svg diff --git a/site/assets/scss/_styles_project.scss b/site/assets/scss/_styles_project.scss new file mode 100644 index 00000000..d96fe6d3 --- /dev/null +++ b/site/assets/scss/_styles_project.scss @@ -0,0 +1,9 @@ +a { + text-decoration: none; +} + +.td-box--white { + a { + color: $primary !important; + } +} diff --git a/site/assets/scss/_variables_project.scss b/site/assets/scss/_variables_project.scss new file mode 100644 index 00000000..2ed28b3b --- /dev/null +++ b/site/assets/scss/_variables_project.scss @@ -0,0 +1,9 @@ +/* +Add styles or override variables from the theme here. +*/ + +// Theme colors +$primary: #EE4C1E; +$secondary: #FFFFFF; + +$link-color: #EE4C1E; diff --git a/site/content/en/_index.md b/site/content/en/_index.md new file mode 100644 index 00000000..07891eeb --- /dev/null +++ b/site/content/en/_index.md @@ -0,0 +1,59 @@ +--- +title: llmaz +--- + +{{< blocks/cover color="primary" image_anchor="top" height="max" >}} +

+ + Learn More + + + GitHub + +

Easy, advanced inference platform for large language models on Kubernetes

+{{< blocks/link-down color="white" >}} + +{{< /blocks/cover >}} + + +{{% blocks/section color="white" type="row" %}} + +

Key Features

+ +{{% blocks/feature icon="fas fa-user-shield" title="Easy of Use" %}} +People can quick deploy a LLM service with minimal configurations. +{{% /blocks/feature %}} + +{{% blocks/feature icon="fas fa-cogs" title="Broad Backends Support" %}} +llmaz supports a wide range of advanced inference backends for different scenarios, like vLLM, Text-Generation-Inference, SGLang, llama.cpp. Find the full list of supported backends here. +{{% /blocks/feature %}} + +{{% blocks/feature icon="fas fa-exchange-alt" title="Accelerator Fungibility" %}} +llmaz supports serving the same LLM with various accelerators to optimize cost and performance. +{{% /blocks/feature %}} + +{{% blocks/feature icon="fas fa-warehouse" title="Various Model Providers" %}} +llmaz supports a wide range of model providers, such as HuggingFace, ModelScope, ObjectStores. llmaz will automatically handle the model loading, requiring no effort from users. +{{% /blocks/feature %}} + +{{% blocks/feature icon="fas fa-network-wired" title="Multi-Host Support" %}} +llmaz supports both single-host and multi-host scenarios with LWS from day 0. +{{% /blocks/feature %}} + +{{% blocks/feature icon="fas fa-door-open" title="AI Gateway Support" %}} +Offering capabilities like token-based rate limiting, model routing with the integration of Envoy AI Gateway. +{{% /blocks/feature %}} + +{{% blocks/feature icon="fas fa-comments" title="Build-in ChatUI" %}} +Out-of-the-box chatbot support with the integration of Open WebUI, offering capacities like function call, RAG, web search and more, see configurations here. +{{% /blocks/feature %}} + +{{% blocks/feature icon="fas fa-expand-arrows-alt" title="Scaling Efficiency" %}} +llmaz supports horizontal scaling with HPA by default and will integrate with autoscaling components like Cluster-Autoscaler or Karpenter for smart scaling across different clouds. +{{% /blocks/feature %}} + +{{% blocks/feature icon="fas fa-box-open" title="Efficient Model Distribution (WIP)" %}} +Out-of-the-box model cache system support with Manta, still under development right now with architecture reframing. +{{% /blocks/feature %}} + +{{% /blocks/section %}} diff --git a/site/content/en/docs/_index.md b/site/content/en/docs/_index.md new file mode 100755 index 00000000..54a94dc0 --- /dev/null +++ b/site/content/en/docs/_index.md @@ -0,0 +1,5 @@ +--- +title: Documentation +linkTitle: Documentation +menu: {main: {weight: 20}} +--- diff --git a/docs/develop.md b/site/content/en/docs/develop.md similarity index 79% rename from docs/develop.md rename to site/content/en/docs/develop.md index f04b1253..8c435de2 100644 --- a/docs/develop.md +++ b/site/content/en/docs/develop.md @@ -1,6 +1,9 @@ -# Develop Guidance - -A develop guidance for people who want to learn more about this project. +--- +title: Develop Guidance +weight: 3 +description: > + This section contains a develop guidance for people who want to learn more about this project. +--- ## Project Structure @@ -22,4 +25,4 @@ See the [API Reference](./reference/core.v1alpha1.md) for more details. ### Inference APIs -See the [API Reference](./reference/inference.v1alpha1.md) for more details. \ No newline at end of file +See the [API Reference](./reference/inference.v1alpha1.md) for more details. diff --git a/docs/installation.md b/site/content/en/docs/installation.md similarity index 95% rename from docs/installation.md rename to site/content/en/docs/installation.md index 29454f16..45893fa7 100644 --- a/docs/installation.md +++ b/site/content/en/docs/installation.md @@ -1,4 +1,10 @@ -# Installation Guide +--- +title: Installation +weight: 1 +description: > + This section introduces the installation guidance for llmaz. +--- + ## Prerequisites diff --git a/site/content/en/docs/integrations/_index.md b/site/content/en/docs/integrations/_index.md new file mode 100644 index 00000000..2fa6e806 --- /dev/null +++ b/site/content/en/docs/integrations/_index.md @@ -0,0 +1,6 @@ +--- +title: Integrations +weight: 2 +description: > + This section contains the llmaz integration information. +--- diff --git a/docs/envoy-ai-gateway.md b/site/content/en/docs/integrations/envoy-ai-gateway.md similarity index 98% rename from docs/envoy-ai-gateway.md rename to site/content/en/docs/integrations/envoy-ai-gateway.md index 0b063c88..8d539030 100644 --- a/docs/envoy-ai-gateway.md +++ b/site/content/en/docs/integrations/envoy-ai-gateway.md @@ -1,4 +1,7 @@ -# Envoy AI Gateway +--- +title: Envoy AI Gateway +weight: 1 +--- [Envoy AI Gateway](https://aigateway.envoyproxy.io/) is an open source project for using Envoy Gateway to handle request traffic from application clients to Generative AI services. diff --git a/docs/open-webui.md b/site/content/en/docs/integrations/open-webui.md similarity index 98% rename from docs/open-webui.md rename to site/content/en/docs/integrations/open-webui.md index d363838e..23c44c3f 100644 --- a/docs/open-webui.md +++ b/site/content/en/docs/integrations/open-webui.md @@ -1,4 +1,7 @@ -# Open-WebUI +--- +title: Open WebUI +weight: 2 +--- [Open WebUI](https://github.com/open-webui/open-webui) is a user-friendly AI interface with OpenAI-compatible APIs, serving as the default chatbot for llmaz. diff --git a/docs/prometheus-operator/README.md b/site/content/en/docs/integrations/prometheus-operator.md similarity index 93% rename from docs/prometheus-operator/README.md rename to site/content/en/docs/integrations/prometheus-operator.md index 2d9dfad9..c05cc2f0 100644 --- a/docs/prometheus-operator/README.md +++ b/site/content/en/docs/integrations/prometheus-operator.md @@ -1,10 +1,13 @@ -# Install Prometheus Operator Guide +--- +title: Prometheus Operator +weight: 3 +--- Currently, llmaz has already integrated metrics. This document provides deployment steps explaining how to install and configure Prometheus Operator in a Kubernetes cluster. ### Install the prometheus operator -Please follow the [documentation](https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/getting-started/installation.md) to install +Please follow the [documentation](https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/getting-started/installation.md) to install ```bash # Installing the prometheus operator @@ -14,9 +17,9 @@ prometheus-operator-55b5c96cf8-jl2nx 1/1 Running 0 12s ``` Ensure that the Prometheus Operator Pod is running successfully. -### Install the ServiceMonitor CR for llmaz +### Install the ServiceMonitor CR for llmaz -To enable monitoring for the llmaz system, you need to install the ServiceMonitor custom resource (CR). +To enable monitoring for the llmaz system, you need to install the ServiceMonitor custom resource (CR). You can either modify the Helm chart prometheus according to the [documentation](./../../chart/values.global.yaml) or use `make install-prometheus` in Makefile. - Using Helm Chart: to modify the values.global.yaml @@ -73,4 +76,4 @@ Forwarding from 0.0.0.0:9090 -> 9090 If using kind, we can use port-forward, `kubectl port-forward services/prometheus-operated 39090:9090 --address 0.0.0.0 -n llmaz-system` This allows us to access prometheus using a browser: `http://localhost:9090/query` -![prometheus](prometheus.png?raw=true) +![prometheus](/images/prometheus.png?raw=true) diff --git a/docs/support-backends.md b/site/content/en/docs/integrations/support-backends.md similarity index 95% rename from docs/support-backends.md rename to site/content/en/docs/integrations/support-backends.md index 7a067f76..0d2d5821 100644 --- a/docs/support-backends.md +++ b/site/content/en/docs/integrations/support-backends.md @@ -1,4 +1,7 @@ -# All Kinds of Supported Inference Backends +--- +title: Supported Inference Backends +weight: 4 +--- If you want to integrate more backends into llmaz, please refer to this [PR](https://github.com/InftyAI/llmaz/pull/182). It's always welcomed. diff --git a/site/content/en/docs/reference/_index.md b/site/content/en/docs/reference/_index.md new file mode 100644 index 00000000..6099d40e --- /dev/null +++ b/site/content/en/docs/reference/_index.md @@ -0,0 +1,9 @@ +--- +title: Reference +weight: 4 +description: > + This section contains the llmaz reference information. +menu: + main: + weight: 30 +--- diff --git a/docs/reference/core.v1alpha1.md b/site/content/en/docs/reference/core.v1alpha1.md similarity index 100% rename from docs/reference/core.v1alpha1.md rename to site/content/en/docs/reference/core.v1alpha1.md diff --git a/docs/reference/inference.v1alpha1.md b/site/content/en/docs/reference/inference.v1alpha1.md similarity index 100% rename from docs/reference/inference.v1alpha1.md rename to site/content/en/docs/reference/inference.v1alpha1.md diff --git a/site/content/en/search.md b/site/content/en/search.md new file mode 100644 index 00000000..394feea5 --- /dev/null +++ b/site/content/en/search.md @@ -0,0 +1,4 @@ +--- +title: Search Results +layout: search +--- diff --git a/site/go.mod b/site/go.mod new file mode 100644 index 00000000..6c41c171 --- /dev/null +++ b/site/go.mod @@ -0,0 +1,5 @@ +module github.com/InftyAI/llmaz/site + +go 1.23 + +require github.com/google/docsy v0.11.0 // indirect diff --git a/site/go.sum b/site/go.sum new file mode 100644 index 00000000..558b7c83 --- /dev/null +++ b/site/go.sum @@ -0,0 +1,4 @@ +github.com/FortAwesome/Font-Awesome v0.0.0-20240716171331-37eff7fa00de/go.mod h1:IUgezN/MFpCDIlFezw3L8j83oeiIuYoj28Miwr/KUYo= +github.com/google/docsy v0.11.0 h1:QnV40cc28QwS++kP9qINtrIv4hlASruhC/K3FqkHAmM= +github.com/google/docsy v0.11.0/go.mod h1:hGGW0OjNuG5ZbH5JRtALY3yvN8ybbEP/v2iaK4bwOUI= +github.com/twbs/bootstrap v5.3.3+incompatible/go.mod h1:fZTSrkpSf0/HkL0IIJzvVspTt1r9zuf7XlZau8kpcY0= diff --git a/site/hugo.toml b/site/hugo.toml new file mode 100644 index 00000000..9fa0e079 --- /dev/null +++ b/site/hugo.toml @@ -0,0 +1,169 @@ +baseURL = "https://llmaz.inftyai.com/" +title = "llmaz" + +# Language settings +contentDir = "content/en" +defaultContentLanguage = "en" +defaultContentLanguageInSubdir = false +# Useful when translating. +enableMissingTranslationPlaceholders = true + +enableRobotsTXT = true + +# Will give values to .Lastmod etc. +enableGitInfo = true + +# Comment out to disable taxonomies in Docsy +disableKinds = ["taxonomy"] + +# Highlighting config +pygmentsCodeFences = true +pygmentsUseClasses = false +# Use the new Chroma Go highlighter in Hugo. +pygmentsUseClassic = false +#pygmentsOptions = "linenos=table" +# See https://help.farbox.com/pygments.html +pygmentsStyle = "tango" + +# Configure how URLs look like per section. +[permalinks] +blog = "/:section/:year/:month/:day/:slug/" + +# Image processing configuration. +[imaging] +resampleFilter = "CatmullRom" +quality = 75 +anchor = "Smart" + +# [services] +# [services.googleAnalytics] +# id = "" + +# Language configuration + +[languages] +[languages.en] +languageName ="English" +title = "llmaz" +[languages.en.params] +description = "Easy, advanced inference platform for large language models on Kubernetes." + +[markup] + [markup.goldmark] + [markup.goldmark.parser.attribute] + block = true + [markup.goldmark.renderer] + unsafe = true + [markup.highlight] + # See a complete list of available styles at https://xyproto.github.io/splash/docs/all.html + style = "tango" + # Uncomment if you want your chosen highlight style used for code blocks without a specified language + # guessSyntax = "true" + +# Comment out if you don't want the "print entire section" link enabled. +[outputs] +section = ["HTML", "print", "RSS"] + +# Everything below this are Site Params + +[params] +# First one is picked as the Twitter card image if not set on page. +# images = ["images/project-illustration.png"] + +# Menu title if your navbar has a versions selector to access old versions of your site. +# This menu appears only if you have at least one [params.versions] set. +version_menu = "Releases" + +# Flag used in the "version-banner" partial to decide whether to display a +# banner on every page indicating that this is an archived version of the docs. +# Set this flag to "true" if you want to display the banner. +archived_version = false + +# The version number for the version of the docs represented in this doc set. +# Used in the "version-banner" partial to display a version number for the +# current doc set. +version = "v0.1.3" + +# A link to latest version of the docs. Used in the "version-banner" partial to +# point people to the main doc site. +url_latest_version = "https://example.com" + +# Repository configuration (URLs for in-page links to opening issues and suggesting changes) +github_repo = "https://github.com/InftyAI/llmaz" +# An optional link to a related project repo. For example, the sibling repository where your product code lives. +github_project_repo = "https://github.com/InftyAI/llmaz" + +# Specify a value here if your content directory is not in your repo's root directory +github_subdir = "site" + +# Uncomment this if your GitHub repo does not have "main" as the default branch, +# or specify a new value if you want to reference another branch in your GitHub links +github_branch= "main" + +# Google Custom Search Engine ID. Remove or comment out to disable search. +# gcs_engine_id = "d72aa9b2712488cc3" + +# Enable Lunr.js offline search +offlineSearch = true + +# Enable syntax highlighting and copy buttons on code blocks with Prism +prism_syntax_highlighting = false + +copyright = "The InftyAI Team" + +# User interface configuration +[params.ui] +# Set to true to disable breadcrumb navigation. +breadcrumb_disable = false +# Set to false if you don't want to display a logo (/assets/icons/logo.svg) in the top navbar +navbar_logo = true +# Set to true if you don't want the top navbar to be translucent when over a `block/cover`, like on the homepage. +navbar_translucent_over_cover_disable = false +# Enable to show the side bar menu in its compact state. +sidebar_menu_compact = false +# Set to true to hide the sidebar search box (the top nav search box will still be displayed if search is enabled) +sidebar_search_disable = true + +# Adds a H2 section titled "Feedback" to the bottom of each doc. The responses are sent to Google Analytics as events. +# This feature depends on [services.googleAnalytics] and will be disabled if "services.googleAnalytics.id" is not set. +# If you want this feature, but occasionally need to remove the "Feedback" section from a single page, +# add "hide_feedback: true" to the page's front matter. +[params.ui.feedback] +enable = true +# The responses that the user sees after clicking "yes" (the page was helpful) or "no" (the page was not helpful). +yes = 'Glad to hear it! Please tell us how we can improve.' +no = 'Sorry to hear that. Please tell us how we can improve.' + +# Adds a reading time to the top of each doc. +# If you want this feature, but occasionally need to remove the Reading time from a single page, +# add "hide_readingtime: true" to the page's front matter +[params.ui.readingtime] +enable = true + +[params.links] +# End user relevant links. These will show up on left side of footer and in the community page if you have one. +[[params.links.user]] + name ="Twitter" + url = "https://x.com/InftyAI" + icon = "fab fa-x-twitter" + desc = "Follow us on Twitter to get the latest news!" +# Developer relevant links. These will show up on right side of footer and in the community page if you have one. +[[params.links.developer]] + name = "GitHub" + url = "https://github.com/InftyAI/llmaz" + icon = "fab fa-github" + desc = "Github repository" +[[params.links.developer]] + name = "Slack" + url = "https://inftyai.slack.com/" + icon = "fab fa-slack" + desc = "Chat with other developers" + +# hugo module configuration +[module] + [module.hugoVersion] + extended = true + min = "0.110.0" + [[module.imports]] + path = "github.com/google/docsy" + disable = false diff --git a/site/layouts/404.html b/site/layouts/404.html new file mode 100644 index 00000000..d32828c8 --- /dev/null +++ b/site/layouts/404.html @@ -0,0 +1,6 @@ +{{ define "main" -}} +
+

Not found

+

Oops! This page doesn't exist. Try going back to the home page.

+
+{{- end }} diff --git a/site/package.json b/site/package.json new file mode 100644 index 00000000..3feefdc5 --- /dev/null +++ b/site/package.json @@ -0,0 +1,8 @@ +{ + "devDependencies": { + "autoprefixer": "^10.4.21", + "cross-env": "^7.0.3", + "postcss-cli": "^11.0.1", + "rtlcss": "^4.3.0" + } +} diff --git a/site/static/favicons/android-144x144.png b/site/static/favicons/android-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..c639ddbb3dbad3190fe92f27dc68fc9259a54b9f GIT binary patch literal 3498 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 literal 0 HcmV?d00001 diff --git a/site/static/favicons/android-192x192.png b/site/static/favicons/android-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..61d29f48a1cff0e4c5542bc245e205e6d80a2019 GIT binary patch literal 4289 zcmcgw`8yPB_rGVs5N5K4$cRFb{ZV5ZOV)U0shF}PYX+087z_;_g*F)}j7M3LE!*I+ zG|4DSJVZ3vvy^=>G?uUD`{Vluyg!`#T-Uij*E!d@?{lu}d`_~Rt+@c7Bp(1kz|z9h z{y?|>D+um`)1Dc?bD$t0_U6W*tVe1d092HvsgdJt*Trn>S}ARzM9ogMyT#G&kO1lt z_b76bz|ptMiNVOl!<*2rSXCgXudTW8$>3ANDaTV@-ei%ySvO%fMXwBv$^DmhbB|bL zq_SEC*Gycl^aH^|7XUaeJ^}^qzU-+92+&fi<^rv~ON{q0;Op*t2$1r=KS<&My{)}s z0GKq&Ad!F?m!|?iVz}Y4V*m>?!2!U(7^9~LNZg6F0Emz5-oAa17e5{X)T%kFD*#CT zcK|Gey}$Z%Of^TDb(7QIsTZpiYZ%4ud=C90@mm3cHDlu@RQuPjvwUW^A?WE4KG5O* z>)}eS-nJ(uJH{<`m$(C&V~?VJBjt!e z>wxbMB=1=D7B~3GXdP!G#1-sH%~g58TrEafNp{DsJQx&>S4 zj&u^9f)}u$A0VJF(Y*M=B;N7f_c#&(I@|-sTOB1~xVI6RT&U8-8Vehw{$oj&99c*s|{5648NW} zo7Z>QZI@E>di}Ozu-o;Q1Y-)A?wPwvXIo!l2nMo^v&Ap&Ei-asw2OzO^y5m$#1Q(a z!VQqt>dnIWb>k?f0##T11gGhWEnxaAhP~+311B^v=UjG#CXT-H`H45ka|X2<81I>k zD%QQp^!mt zi&Jca=sF(H@f-LHfws?2*9`nMLogNv*e!+!|0{Ud-}ZcD$suV`E~=whAw$eCTntk^ zW1;)>YX8|h1YpX+luBi4Qe=+QNliK6i1+Zu=&Rg46qa?3!7B!@Go<4j;J0DY6yDS* z6IlT#+lMk!SVkR{TRlBh%r1o+nB6mnz$>!MNc5M66_fh#)Tsd##7QX))b!33+Gp09 zJ*T2v8GL=3Qh)MJ{5Qb_TsqS($SYinJa2$Y3oYK~AMz31bndwH6TB(WqHGUIsaTfN zA4re4w@xHs5849Pg@0UDzj;d^xGQ@^0al&aedvV3Jidw6CRlCP8JnPgcdL83gbg-j zwfXrc3J)1ZC?0uDP<+0zzWa?b|DOnAQUI`s@6BJ)*3^}i7&t|YvTv^p^|HFbgXSW; zCgh&3@(e&ujKw?f13|=NVFTQv8LvnBr-e6_<#cPkw2^747`@kb_oE456RT$XPY)^m zO4=g_#EI5XX{IZ8&XCEwT6$GjY(!#&f)AuM@Jiu=&>BzY1G$ZBcL~MF1gML|sk*>( z32xTjNy4KEl5&e5)xrQ%WX_47EJC?fX%UwQ!!E1DAnA4GPqdp_=2f&bjb8&=|9rTP zeKEy|g4+A@S$4YEm<(lSm)$a0yEx3L^T#+fRutN!og zsw1-wj1%3kmDvY|D(xP5^PzZ@6|c;*>_x~Kr!BFyGDrpT4i8<=@MYTGE+MIX?f$?8 zbE}fiqV}JH@YgyedKrTe2yhkEGaFQPli5A2p^m0G%Ol)ee@jg?dQ_D1G89Z8ofX(cI(hgxfk`$0o5WZ(OvVdaE(ki+i0 z>w{w?k8Vd)7u9C!MfRYk?l~NB>=GbBumOV|>j>6cy}BV)*3PP8r^v<94IzJoSk!+0 zue17BEhpsQm^Jx{sK5tUnpfzff38m=TDa{X*y@2LRb^f%Id{f_jP=`Wtj8!IP|Yb* zfRrL#9`UgWj=TOxx+gTS$U$X45W^VpvhWfOpd4##?^JswRg<1^xWb z$%DZ5j-BXh(USG>DCx5XfqN6mY?~(^fA~jujQ%zZ-^2|uCmRha_j*TBhI*i^&tdcU z*97--A3jU;SEGrBtSX+jrtdwL)kBfvM>RI}>z1r6@Q6s!=GF6Mw6P6cfY4GZ5ueaoFhu8T0^4aRzUuVa^d=4t`x`U7HUFR-F2W#l& z-37OrCKX3I0y~5DdR8uF{)7Z4D9HXLGRq9@9%>~-)l7>an4=^)V)0l?<&)K?5{43n z&lWCsF=jX+A9kH!!FAiym9_b#-g_(2h9AK09hThIH-5bm z@^}2FuV|WQz|=yaoG#@a=Q*_XQtf3FO~IXV!EZEfdA)~;`rLGRiPmBXBDvq`ee0_{ z<-{ACBhw|c=9T5zmS}KdYOeq?CkTJCo!KK(JDP;E-@+{~y=@}A*|KKrUIV?th`cNH zFIQ}$YkLfCne=5|E*eC!Be<|Z=yb7Wnc2qGdfh2$%@#Xr=GY0K5?7%;SK@cxPf;Pa zVZ1zp)^Zd0bG>tmUo?3*Wx*(|mj6-2$eG-e1x2Fp)3v(b7{!4>7Bk=8EL~>PrP-2f z8^eMa=6~>neLFC~O%LP#f~yOn-@pFESvLy7%u(X*k(}C-h0q`q8n5nD`KIbVdXMMA zZ=*ncTG(vQAI~vtaW+x_>xZ&}jMuiAKM5Q(+qBWupXSs_zWKQcyAn7371>Z5?9Cg} zeoR&eMBI!(lovIPcsaWk-ZP}gct%Z6Ksvt5O+(QqnY^hK`;(1byH;haJS+t0o%UlR z&VfI9Bi=~ZD>QaR`**SB;D2fH*h=$RMcA#GD{%2?XrzCgHp1%o|4O1dTpD8|uJO|m7m9!Cw(&z%+z)zI6^^cu!0Di;a%&J%6Tpjw;2h?qi(^dhnKE!EMIty zxHPwvpo-v#dZ2dhc9qZg@56i%THH;g?YrMMK;D~2p${Iyz-M)toaR{0V__ltPXz|% zCEI(lk-!FJpWykcwqCaV&b40$)5urM$%Nx;r5eQwm`u**L1m4>d`VOR?7a%5p@OA_ zx0XrT6I4{j#T=vj3;oXMGNYZ;`Cl8RK7Sxdy~pdM2rc@O-U6OaBTY)OPeFQPbg=vg z71%?}@Q)r7-x-d{vQ95|83tVSyeX611Icp&2S0bKZ5NjmHyrS_iXHSN^mVwWCoOa6 zW#TB3DnPd(MlBuGVfA!U*S@GL<;eZSsiQ&HJ1a9o%%0P8c`$vkTl!`!poU4k7Y_zmw5vt7&lK z-BBLd@H$6ZARl>po*3Je*8i%+Z8~%`wE=EQa7b=KWe?>9hMtU zO1~JYZeLn>jA3Y=-vZ+-1t*!L=xxx4x5_hXix6wzXT7(*X^hF znDpfW9@NHCF5$I_+6^#zA?4u`jhplxvFy@;`CCv z<<`K^S;FEn<+EVxwes-ANUQ3nB3gKJ2|3n=Ll)9|mA`x`*y9U;TW7f>Z6 zKS0q3HF1!G#~3ShrZ_^%Mr0APb1y5SW5+O6&giV!YNwU5Min~+f}LdV()P8oUG0R0 zm1qE;Swe9$LHw#NhwfJH^OeMj8dy8P4OmeW zFZ2ETl#TeDl1+osZ>a8;k=#;z!AOgBy&<4pvE07BUV6#`8&OvyOm9)w0YxGQ@G~sm z8Q;UgG3f!TA+NNO%iusg@v(1evFE>c5xvp8bsHwxBiu9*!+aj<6{Qe_y!zY;gA9vG zv4jW8sQ!)mNKicHVc_bxnvsA6nP(_MGp>@3*WcdXzH;$H6v_a&H@F`C*Vl|(<$bn1 z5wwQ3U_i10MolKk>2LE17|4KsYCieY*{N^xkJQK}Kd!2}$H+gGQGHoi`XrmE8J7&~ zo#`x}Af=7M36CKG)JGG z61Dv2?)a!rQ1Tf$Q5cZdw0V+lVNzoBYDs@YUaT)HljosYdVNykbcG;;LF$u8HbX{lLI$YL zgG9`(cD8NH*mr$yfN*QIJX!}peC@_qoO>jUMKD4%J@q<$2tIKLbHEahJ`oag20g5` zfAryBr4p{|v|+cli3!KBeS>@0;XTK>t%xY@B3$;x!RgZt<12$;yw`M|E5KJvwKF87 zuJCAitoDz9XI?pm1_$i+M~(efkuv~A&%|^B-$4PDOEoXe|A1Bd7ko&?RRG}o&blZ+ ziwlsl{0LKG$^f{m2>mSbh5)L!3zNomz{SP>CSzXzZ(Xd!)}$3l25K8$JJ?A8%k#FT JWybFD{|EG*-68-0 literal 0 HcmV?d00001 diff --git a/site/static/favicons/android-36x36.png b/site/static/favicons/android-36x36.png new file mode 100644 index 0000000000000000000000000000000000000000..770c50799c9fa1c1d74ec848ac03c3c4a5f920cf GIT binary patch literal 875 zcmV-x1C;!UP)Px&B}qg4L>1DV)1}}A z2vW)m=puncgE)JQzLmxrk7w=mUBZ=n`{(DGZ@$@$qaA;@Cudn2|C-0~pRBU8{Q1Sl z#V%XM+b$*$W7b(5|8BOib{6ddHX7*1$%jQ^R&zjb5cy#QhVd~`3j*S4F=o{|yRP>m zYbS+CZZ2y(o6G+J7MoRGmWM%Ly+FRSfQUfK`bj>$_*7tw<|oNbrb!_rohr~+5Dp_X zH5RM|bl)Hp5ok`P5}=yS9MD67a51A8(&Vcv2CV?_BJcsZkLxL89$FjdLZyNFK2lbB0HD(FX$Hs+vY=dfl*Lzh~!H&VpJ%nEbbT z=>$9EAF^U-_r8c|twa`y7l;lR0^|M2*BV?J>wTA!yVIkZqK|RthPRkOpb)UCdQsT= z=_UCYt&x6(^rGD9f6@)tRR>5COA%^KQUj8ykXq%s@d6E%IT@gIZw{oTA=F$uqL$In zZg^Td0TBEKg4P=BkZuMe)CcAR(ykoX=kEQRrHOwwS6WRsn1?8$<99Svm9M-$goxQ{ zS|sUp>*<3CX+R;m;jO3R)MI_9sTKuDieHLc>w%qK#(_f0-3KJw3Kx1`Gj>3fKYIL; zQ)}h!yR6HUaS>x5=%%y>MTm=cULEqD6Y4{xA!&X{Rb4+WeD`Tt$w4ny4%Js>Qp8w? zbZIXQez9+rz3)2U8}|XBb@)=s_v*X;I%B*~Alb{tfY96r2O5fq49HeM@}{UY*Rdd5 zM~K@5-D_lX)gGFm(ij~fzA=Afq7V6+YbXrn{R7^JKs!gR#SH)e002ovPDHLkV1i2G Bm@5DP literal 0 HcmV?d00001 diff --git a/site/static/favicons/android-48x48.png b/site/static/favicons/android-48x48.png new file mode 100644 index 0000000000000000000000000000000000000000..f4985406ec8881780e4e22d6f556638c615706d2 GIT binary patch literal 1229 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 JWybFD{|EG*-68-0 literal 0 HcmV?d00001 diff --git a/site/static/favicons/android-chrome-512x512.png b/site/static/favicons/android-chrome-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..4634c06e31cb73e3d170a47cb6644ff38f7fbb5c GIT binary patch literal 10178 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 JWybFD{|EG*-68-0 literal 0 HcmV?d00001 diff --git a/site/static/favicons/android-chrome-maskable-512x512.png b/site/static/favicons/android-chrome-maskable-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..4634c06e31cb73e3d170a47cb6644ff38f7fbb5c GIT binary patch literal 10178 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 literal 0 HcmV?d00001 diff --git a/site/static/favicons/favicon-16x16.png b/site/static/favicons/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..ebc95e8ee2bd654423c903b32ce37dc136a101a0 GIT binary patch literal 506 zcmVPx$v`IukR5(wClfO;^K@i4g_D-}Rfgn*RjDH?LrLtqMBT8X>p}Tt_V}VG=(oq;X z3u9u`0%Fi$LLutiuFRS_4}^Ht0?SXBP?3-*TL?7t? zM^y1Bo0$xF#$l>6q98gP~En|2}Jcu*W5gBZZ0j^ka$Q{biha~BAb&VcU%!&%4$ w{{_rXfy4U+F1gOshTQ?PRt21N=7lW#2Cy?Pef15wDF6Tf07*qoM6N<$f)^d!yZ`_I literal 0 HcmV?d00001 diff --git a/site/static/favicons/favicon-32x32.png b/site/static/favicons/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..a2355b8fcefa051b2fc6c152b137b09e131570a5 GIT binary patch literal 848 zcmV-W1F!svP)Px&3Q0skR9Hu~SFvsrK@i>DyC73o!YCFb1rktD(xgb|L!vMV1>%Qn{}7@fr1Paq z5g}0$3Fu6~0V0J0DR;N%t(eo?c=z^Vge%LpH}huRyfx9zReTfnqv&^)9EY#S9=;saa9o&9@F;=dl7? z0feeWP^uW;ljP&b=${!+hUeNWW<{~1+UW5D=#rQR#rX|$HV<{Djh+U8*2H#@m*vBw zmBh*C39sJTzOpLKmA#osKt3Q2KrHc9d4IVI}%7C&Po| zsRQtB{M4rDX=7ewFaqjL98f^p;G!Fw2gkamfDT*R%L{v}Q^ja^W&5rYj=pUs=p9mt zro=uChg$7|R6{RNm{XE`YA6EW=$*>mJ~H~p2tESvdbzjj^v$J(K|}IH{hD)XVu__W zg%Zq_x!FzmL%Gr^;2LT|VPlf~p@+8})4h-Ms^*~YJ^Sxb5Qugs)yQ@-7D@IEZ zFf{$(k?(do&nx=={2q3^YrW)MF1HmYlmVkM{0o??#m9T-!s7toW!@6G+xc_pkQ}hQ z{g5Ks45|j;lU!FBf--plaaVKO%R^g|Y#2E@|1ZE{p9%ngn+E2em{#QzOI*Tic9z_8s&-({q8z6-9Kcr5^2?{GxO$Vt=oM)E4( amD)cmd2h@T6kpf?0000-diAOddJMH@N)8K5{PqF(&d^yZe$tdC-FoKGabUyymV)&g_5Dj5@j(`l8