diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..c263dbe0 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "docs/themes/hugo-theme-relearn"] + path = docs/themes/hugo-theme-relearn + url = https://github.com/McShelby/hugo-theme-relearn.git diff --git a/docs/Dockerfile b/docs/Dockerfile new file mode 100644 index 00000000..4e653452 --- /dev/null +++ b/docs/Dockerfile @@ -0,0 +1,4 @@ +FROM klakegg/hugo:ext-alpine + +RUN apk add git && \ + git config --global --add safe.directory /src diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 00000000..b0934f2d --- /dev/null +++ b/docs/README.md @@ -0,0 +1,103 @@ +# LocalAI website + +LocalAI documentation website + +## Requirement +In this project, the Docsy theme component is pulled in as a Hugo module, together with other module dependencies: + +```bash +$ hugo mod graph +hugo: collected modules in 566 ms +hugo: collected modules in 578 ms +github.com/google/docsy-example github.com/google/docsy@v0.5.1-0.20221017155306-99eacb09ffb0 +github.com/google/docsy-example github.com/google/docsy/dependencies@v0.5.1-0.20221014161617-be5da07ecff1 +github.com/google/docsy/dependencies@v0.5.1-0.20221014161617-be5da07ecff1 github.com/twbs/bootstrap@v4.6.2+incompatible +github.com/google/docsy/dependencies@v0.5.1-0.20221014161617-be5da07ecff1 github.com/FortAwesome/Font-Awesome@v0.0.0-20220831210243-d3a7818c253f +``` + +If you want to do SCSS edits and want to publish these, you need to install `PostCSS` + +```bash +npm install +``` + +## Running the website locally + +Building and running the site locally requires a recent `extended` version of [Hugo](https://gohugo.io). +You can find out more about how to install Hugo for your environment in our +[Getting started](https://www.docsy.dev/docs/getting-started/#prerequisites-and-installation) guide. + +Once you've made your working copy of the site repo, from the repo root folder, run: + +``` +hugo server +``` + +## Running a container locally + +You can run docsy-example inside a [Docker](https://docs.docker.com/) +container, the container runs with a volume bound to the `docsy-example` +folder. This approach doesn't require you to install any dependencies other +than [Docker Desktop](https://www.docker.com/products/docker-desktop) on +Windows and Mac, and [Docker Compose](https://docs.docker.com/compose/install/) +on Linux. + +1. Build the docker image + + ```bash + docker-compose build + ``` + +1. Run the built image + + ```bash + docker-compose up + ``` + + > NOTE: You can run both commands at once with `docker-compose up --build`. + +1. Verify that the service is working. + + Open your web browser and type `http://localhost:1313` in your navigation bar, + This opens a local instance of the docsy-example homepage. You can now make + changes to the docsy example and those changes will immediately show up in your + browser after you save. + +### Cleanup + +To stop Docker Compose, on your terminal window, press **Ctrl + C**. + +To remove the produced images run: + +```console +docker-compose rm +``` +For more information see the [Docker Compose +documentation](https://docs.docker.com/compose/gettingstarted/). + +## Troubleshooting + +As you run the website locally, you may run into the following error: + +``` +➜ hugo server + +INFO 2021/01/21 21:07:55 Using config file: +Building sites … INFO 2021/01/21 21:07:55 syncing static files to / +Built in 288 ms +Error: Error building site: TOCSS: failed to transform "scss/main.scss" (text/x-scss): resource "scss/scss/main.scss_9fadf33d895a46083cdd64396b57ef68" not found in file cache +``` + +This error occurs if you have not installed the extended version of Hugo. +See this [section](https://www.docsy.dev/docs/get-started/docsy-as-module/installation-prerequisites/#install-hugo) of the user guide for instructions on how to install Hugo. + +Or you may encounter the following error: + +``` +➜ hugo server + +Error: failed to download modules: binary with name "go" not found +``` + +This error occurs if you have not installed the `go` programming language on your system. +See this [section](https://www.docsy.dev/docs/get-started/docsy-as-module/installation-prerequisites/#install-go-language) of the user guide for instructions on how to install `go`. diff --git a/docs/config.toml b/docs/config.toml new file mode 100644 index 00000000..65fa5ed4 --- /dev/null +++ b/docs/config.toml @@ -0,0 +1,181 @@ +# this is a required setting for this theme to appear on https://themes.gohugo.io/ +# change this to a value appropriate for you; if your site is served from a subdirectory +# set it like "https://example.com/mysite/" +baseURL = "https://localai.io/" + +# canonicalization will only be used for the sitemap.xml and index.xml files; +# if set to false, a site served from a subdirectory will generate wrong links +# inside of the above mentioned files; if you serve the page from the servers root +# you are free to set the value to false as recommended by the official Hugo documentation +canonifyURLs = true # true -> all relative URLs would instead be canonicalized using baseURL +# required value to serve this page from a webserver AND the file system; +# if you don't want to serve your page from the file system, you can also set this value +# to false +relativeURLs = true # true -> rewrite all relative URLs to be relative to the current content +# if you set uglyURLs to false, this theme will append 'index.html' to any branch bundle link +# so your page can be also served from the file system; if you don't want that, +# set disableExplicitIndexURLs=true in the [params] section +uglyURLs = false # true -> basic/index.html -> basic.html + +# the directory where Hugo reads the themes from; this is specific to your +# installation and most certainly needs be deleted or changed +#themesdir = "../.." +# yeah, well, obviously a mandatory setting for your site, if you want to +# use this theme ;-) +theme = "hugo-theme-relearn" + +# the main language of this site; also an automatic pirrrate translation is +# available in this showcase +languageCode = "en" + +# make sure your defaultContentLanguage is the first one in the [languages] +# array below, as the theme needs to make assumptions on it +defaultContentLanguage = "en" + +# the site's title of this showcase; you should change this ;-) +title = "LocalAI Documentation" + +# We disable this for testing the exampleSite; you must do so too +# if you want to use the themes parameter disableGeneratorVersion=true; +# otherwise Hugo will create a generator tag on your home page +disableHugoGeneratorInject = true + +[outputs] + # add JSON to the home to support Lunr search; This is a mandatory setting + # for the search functionality + # add PRINT to home, section and page to activate the feature to print whole + # chapters + home = ["HTML", "RSS", "PRINT", "SEARCH", "SEARCHPAGE"] + section = ["HTML", "RSS", "PRINT"] + page = ["HTML", "RSS", "PRINT"] + +[markup] + [markup.highlight] + # if `guessSyntax = true`, there will be no unstyled code even if no language + # was given BUT Mermaid and Math codefences will not work anymore! So this is a + # mandatory setting for your site if you want to use Mermaid or Math codefences + guessSyntax = true + + # here in this showcase we use our own modified chroma syntax highlightning style + # which is imported in theme-relearn-light.css / theme-relearn-dark.css; + # if you want to use a predefined style instead: + # - remove the following `noClasses` + # - set the following `style` to a predefined style name + # - remove the `@import` of the self-defined chroma stylesheet from your CSS files + # (here eg.: theme-relearn-light.css / theme-relearn-dark.css) + noClasses = false + style = "tango" + + [markup.goldmark.renderer] + # activated for this showcase to use HTML and JavaScript; decide on your own needs; + # if in doubt, remove this line + unsafe = true + +# allows `hugo server` to display this showcase in IE11; this is used for testing, as we +# are still supporting IE11 - although with degraded experience; if you don't care about +# `hugo server` or browsers of ancient times, fell free to remove this whole block +[server] + [[server.headers]] + for = "**.html" + [server.headers.values] + X-UA-Compatible = "IE=edge" + +# showcase of the menu shortcuts; you can use relative URLs linking +# to your content or use fully-quallified URLs to link outside of +# your project +[languages] + [languages.en] + title = "LocalAI documentation" + weight = 1 + languageName = "English" + [languages.en.params] + landingPageName = " Home" + [[languages.en.menu.shortcuts]] + name = " Home" + url = "/" + weight = 1 + [[languages.en.menu.shortcuts]] + name = " GitHub repo" + identifier = "ds" + url = "https://github.com/go-skynet/LocalAI" + weight = 10 + + [[languages.en.menu.shortcuts]] + name = " Examples" + url = "https://github.com/go-skynet/LocalAI/tree/master/examples/" + weight = 11 + + [[languages.en.menu.shortcuts]] + name = " Model Gallery" + url = "https://github.com/go-skynet/model-gallery" + weight = 12 + + [[languages.en.menu.shortcuts]] + name = " Container images" + url = "https://quay.io/repository/go-skynet/local-ai" + weight = 20 + #[[languages.en.menu.shortcuts]] + # name = " Credits" + # url = "more/credits/" + # weight = 30 + + [[languages.en.menu.shortcuts]] + name = " Releases" + url = "https://github.com/go-skynet/LocalAI/releases" + weight = 40 + + +# mounts are only needed in this showcase to access the publicly available screenshots; +# remove this section if you don't need further mounts +[module] + [[module.mounts]] + source = 'archetypes' + target = 'archetypes' + [[module.mounts]] + source = 'assets' + target = 'assets' + [[module.mounts]] + source = 'content' + target = 'content' + [[module.mounts]] + source = 'data' + target = 'data' + [[module.mounts]] + source = 'i18n' + target = 'i18n' + [[module.mounts]] + source = '../images' + target = 'static/images' + [[module.mounts]] + source = 'layouts' + target = 'layouts' + [[module.mounts]] + source = 'static' + target = 'static' + + +# settings specific to this theme's features; choose to your likings and +# consult this documentation for explaination +[params] + editURL = "https://github.com/mudler/LocalAI/edit/master/docs/content/" + description = "Documentation for LocalAI" + author = "Ettore Di Giacinto" + showVisitedLinks = true + collapsibleMenu = true + disableBreadcrumb = false + disableInlineCopyToClipBoard = true + disableNextPrev = false + disableLandingPageButton = true + breadcrumbSeparator = ">" + titleSeparator = "::" + themeVariant = [ "auto", "relearn-bright", "relearn-light", "relearn-dark", "learn", "neon", "blue", "green", "red" ] + themeVariantAuto = [ "relearn-light", "relearn-dark" ] + disableSeoHiddenPages = true + # this is to index search for your native language in other languages, too (eg. + # pir in this showcase) + additionalContentLanguage = [ "en" ] + # this is for the stylesheet generator to allow for interactivity in Mermaid + # graphs; you usually will not need it and you should remove this for + # security reasons + mermaidInitialize = "{ \"securityLevel\": \"loose\" }" + mermaidZoom = true \ No newline at end of file diff --git a/docs/content/_index.en.md b/docs/content/_index.en.md new file mode 100644 index 00000000..a2ced5b3 --- /dev/null +++ b/docs/content/_index.en.md @@ -0,0 +1,179 @@ ++++ +archetype = "home" +title = "LocalAI" ++++ + +

+ +LocalAI forks + + +LocalAI stars + + +LocalAI pull-requests + + + + +

+ +> πŸ’‘ Get help - [❓FAQ](https://localai.io/faq/) [❓How tos](https://localai.io/howtos/) [πŸ’­Discussions](https://github.com/go-skynet/LocalAI/discussions) [πŸ’­Discord](https://discord.gg/uJAeKSAGDy) +> +> [πŸ’» Quickstart](https://localai.io/basics/getting_started/) [πŸ“£ News](https://localai.io/basics/news/) [ πŸ›« Examples ](https://github.com/go-skynet/LocalAI/tree/master/examples/) [ πŸ–ΌοΈ Models ](https://localai.io/models/) + +**LocalAI** is the free, Open Source OpenAI alternative. LocalAI act as a drop-in replacement REST API that's compatible with OpenAI API specifications for local inferencing. It allows you to run LLMs, generate images, audio (and not only) locally or on-prem with consumer grade hardware, supporting multiple model families that are compatible with the ggml format. Does not require GPU. It is maintained by [mudler](https://github.com/mudler). + +

Follow LocalAI

+ +

+ +Follow LocalAI_API + + +Join LocalAI Discord Community + + +

Connect with the Creator

+ +

+ +Follow mudler_it + + +Follow on Github + +

+ +

Share LocalAI Repository

+ +

+ + +Follow _LocalAI +Share on Telegram + +Share on Reddit + Buy Me A Coffee + +

+ +
+ +In a nutshell: + +- Local, OpenAI drop-in alternative REST API. You own your data. +- NO GPU required. NO Internet access is required either + - Optional, GPU Acceleration is available in `llama.cpp`-compatible LLMs. See also the [build section](https://localai.io/basics/build/index.html). +- Supports multiple models +- πŸƒ Once loaded the first time, it keep models loaded in memory for faster inference +- ⚑ Doesn't shell-out, but uses C++ bindings for a faster inference and better performance. + +LocalAI was created by [Ettore Di Giacinto](https://github.com/mudler/) and is a community-driven project, focused on making the AI accessible to anyone. Any contribution, feedback and PR is welcome! + +Note that this started just as a [fun weekend project](https://localai.io/#backstory) in order to try to create the necessary pieces for a full AI assistant like `ChatGPT`: the community is growing fast and we are working hard to make it better and more stable. If you want to help, please consider contributing (see below)! + +## πŸš€ Features + +- πŸ“– [Text generation with GPTs](https://localai.io/features/text-generation/) (`llama.cpp`, `gpt4all.cpp`, ... [:book: and more](https://localai.io/model-compatibility/index.html#model-compatibility-table)) +- πŸ—£ [Text to Audio](https://localai.io/features/text-to-audio/) +- πŸ”ˆ [Audio to Text](https://localai.io/features/audio-to-text/) (Audio transcription with `whisper.cpp`) +- 🎨 [Image generation with stable diffusion](https://localai.io/features/image-generation) +- πŸ”₯ [OpenAI functions](https://localai.io/features/openai-functions/) πŸ†• +- 🧠 [Embeddings generation for vector databases](https://localai.io/features/embeddings/) +- ✍️ [Constrained grammars](https://localai.io/features/constrained_grammars/) +- πŸ–ΌοΈ [Download Models directly from Huggingface ](https://localai.io/models/) + +## πŸ”₯πŸ”₯ Hot topics / Roadmap + +- Backend rework for LocalAI v2 https://github.com/go-skynet/LocalAI/issues/1126 +- Roadmap: https://github.com/go-skynet/LocalAI/issues?q=is%3Aissue+is%3Aopen+label%3Aroadmap + +Some items: + +- [ ] Enable gallery management directly from the webui. https://github.com/go-skynet/LocalAI/issues/918 +- [x] llama.cpp lora adapters: https://github.com/go-skynet/LocalAI/issues/919 +- [ ] image variants and edits: https://github.com/go-skynet/LocalAI/issues/921 +- [ ] esrgan for diffusers: https://github.com/go-skynet/LocalAI/issues/917 +- [ ] ggml-stablediffusion: https://github.com/go-skynet/LocalAI/issues/916 +- [ ] SAM: https://github.com/go-skynet/LocalAI/issues/915 +- [x] diffusers lora adapters: https://github.com/go-skynet/LocalAI/issues/914 +- [ ] resource management and control: https://github.com/go-skynet/LocalAI/issues/912 +- [ ] ChatGLM: https://github.com/go-skynet/LocalAI/issues/754 +- [ ] text-to-video : https://github.com/go-skynet/LocalAI/issues/933 +- [ ] rustformers: https://github.com/go-skynet/LocalAI/issues/939 +- [x] Vall-e: https://github.com/go-skynet/LocalAI/issues/985 +- [ ] Speculative sampling: https://github.com/go-skynet/LocalAI/issues/1013 +- [ ] Falcon/GPTNeoX on llama.cpp: https://github.com/go-skynet/LocalAI/issues/1009 +- [ ] transformers/vllm: https://github.com/go-skynet/LocalAI/issues/1015 +- [ ] TortoiseTTS: https://github.com/go-skynet/LocalAI/issues/1016 +- [ ] Exllama2: https://github.com/go-skynet/LocalAI/issues/1053 +- [ ] ctransformers: https://github.com/go-skynet/LocalAI/issues/1056 +- [ ] GPTQ for LLama: https://github.com/go-skynet/LocalAI/issues/1055 +- [ ] LLaVA and miniGPT-4: https://github.com/go-skynet/LocalAI/issues/1054 +- [ ] Test generation inference: https://github.com/go-skynet/LocalAI/issues/1042 +- [ ] docs - extending LocalAI with external backends: https://github.com/go-skynet/LocalAI/issues/1057 + + +## How does it work? + +LocalAI is an API written in Go that serves as an OpenAI shim, enabling software already developed with OpenAI SDKs to seamlessly integrate with LocalAI. It can be effortlessly implemented as a substitute, even on consumer-grade hardware. This capability is achieved by employing various C++ backends, including [ggml](https://github.com/ggerganov/ggml), to perform inference on LLMs using both CPU and, if desired, GPU. Internally LocalAI backends are just gRPC server, indeed you can specify and build your own gRPC server and extend LocalAI in runtime as well. It is possible to specify external gRPC server and/or binaries that LocalAI will manage internally. + +LocalAI uses a mixture of backends written in various languages (C++, Golang, Python, ...). You can check [the model compatibility table]({{%relref "model-compatibility" %}}) to learn about all the components of LocalAI. + +![localai](https://github.com/go-skynet/localai-website/assets/2420543/6492e685-8282-4217-9daa-e229a31548bc) + +## Contribute and help + +To help the project you can: + +- If you have technological skills and want to contribute to development, have a look at the open issues. If you are new you can have a look at the [good-first-issue](https://github.com/go-skynet/LocalAI/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) and [help-wanted](https://github.com/go-skynet/LocalAI/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22) labels. + +- If you don't have technological skills you can still help improving documentation or [add examples](https://github.com/go-skynet/LocalAI/tree/master/examples) or share your user-stories with our community, any help and contribution is welcome! + +## 🌟 Star history + +[![LocalAI Star history Chart](https://api.star-history.com/svg?repos=go-skynet/LocalAI&type=Date)](https://star-history.com/#go-skynet/LocalAI&Date) + +## πŸ“– License + +LocalAI is a community-driven project created by [Ettore Di Giacinto](https://github.com/mudler/). + +MIT - Author Ettore Di Giacinto + +## πŸ™‡ Acknowledgements + +LocalAI couldn't have been built without the help of great software already available from the community. Thank you! + +- [llama.cpp](https://github.com/ggerganov/llama.cpp) +- https://github.com/tatsu-lab/stanford_alpaca +- https://github.com/cornelk/llama-go for the initial ideas +- https://github.com/antimatter15/alpaca.cpp +- https://github.com/EdVince/Stable-Diffusion-NCNN +- https://github.com/ggerganov/whisper.cpp +- https://github.com/saharNooby/rwkv.cpp +- https://github.com/rhasspy/piper +- https://github.com/cmp-nct/ggllm.cpp + +## Backstory + +As much as typical open source projects starts, I, [mudler](https://github.com/mudler/), was fiddling around with [llama.cpp](https://github.com/ggerganov/llama.cpp) over my long nights and wanted to have a way to call it from `go`, as I am a Golang developer and use it extensively. So I've created `LocalAI` (or what was initially known as `llama-cli`) and added an API to it. + +But guess what? The more I dived into this rabbit hole, the more I realized that I had stumbled upon something big. With all the fantastic C++ projects floating around the community, it dawned on me that I could piece them together to create a full-fledged OpenAI replacement. So, ta-da! LocalAI was born, and it quickly overshadowed its humble origins. + +Now, why did I choose to go with C++ bindings, you ask? Well, I wanted to keep LocalAI snappy and lightweight, allowing it to run like a champ on any system and avoid any Golang penalties of the GC, and, most importantly built on shoulders of giants like `llama.cpp`. Go is good at backends and API and is easy to maintain. And hey, don't forget that I'm all about sharing the love. That's why I made LocalAI MIT licensed, so everyone can hop on board and benefit from it. + +As if that wasn't exciting enough, as the project gained traction, [mkellerman](https://github.com/mkellerman) and [Aisuko](https://github.com/Aisuko) jumped in to lend a hand. mkellerman helped set up some killer examples, while Aisuko is becoming our community maestro. The community now is growing even more with new contributors and users, and I couldn't be happier about it! + +Oh, and let's not forget the real MVP hereβ€”[llama.cpp](https://github.com/ggerganov/llama.cpp). Without this extraordinary piece of software, LocalAI wouldn't even exist. So, a big shoutout to the community for making this magic happen! + +## πŸ€— Contributors + +This is a community project, a special thanks to our contributors! πŸ€— + + + + + + diff --git a/docs/content/advanced/_index.en.md b/docs/content/advanced/_index.en.md new file mode 100644 index 00000000..fa100e4a --- /dev/null +++ b/docs/content/advanced/_index.en.md @@ -0,0 +1,356 @@ + ++++ +disableToc = false +title = "Advanced" +weight = 6 ++++ + +### Advanced configuration with YAML files + +In order to define default prompts, model parameters (such as custom default `top_p` or `top_k`), LocalAI can be configured to serve user-defined models with a set of default parameters and templates. + +You can create multiple `yaml` files in the models path or either specify a single YAML configuration file. +Consider the following `models` folder in the `example/chatbot-ui`: + +``` +base ❯ ls -liah examples/chatbot-ui/models +36487587 drwxr-xr-x 2 mudler mudler 4.0K May 3 12:27 . +36487586 drwxr-xr-x 3 mudler mudler 4.0K May 3 10:42 .. +36465214 -rw-r--r-- 1 mudler mudler 10 Apr 27 07:46 completion.tmpl +36464855 -rw-r--r-- 1 mudler mudler ?G Apr 27 00:08 luna-ai-llama2-uncensored.ggmlv3.q5_K_M.bin +36464537 -rw-r--r-- 1 mudler mudler 245 May 3 10:42 gpt-3.5-turbo.yaml +36467388 -rw-r--r-- 1 mudler mudler 180 Apr 27 07:46 chat.tmpl +``` + +In the `gpt-3.5-turbo.yaml` file it is defined the `gpt-3.5-turbo` model which is an alias to use `luna-ai-llama2` with pre-defined options. + +For instance, consider the following that declares `gpt-3.5-turbo` backed by the `luna-ai-llama2` model: + +```yaml +name: gpt-3.5-turbo +# Default model parameters +parameters: + # Relative to the models path + model: luna-ai-llama2-uncensored.ggmlv3.q5_K_M.bin + # temperature + temperature: 0.3 + # all the OpenAI request options here.. + +# Default context size +context_size: 512 +threads: 10 +# Define a backend (optional). By default it will try to guess the backend the first time the model is interacted with. +backend: llama-stable # available: llama, stablelm, gpt2, gptj rwkv + +# Enable prompt caching +prompt_cache_path: "alpaca-cache" +prompt_cache_all: true + +# stopwords (if supported by the backend) +stopwords: +- "HUMAN:" +- "### Response:" +# define chat roles +roles: + assistant: '### Response:' + system: '### System Instruction:' + user: '### Instruction:' +template: + # template file ".tmpl" with the prompt template to use by default on the endpoint call. Note there is no extension in the files + completion: completion + chat: chat +``` + +Specifying a `config-file` via CLI allows to declare models in a single file as a list, for instance: + +```yaml +- name: list1 + parameters: + model: testmodel + context_size: 512 + threads: 10 + stopwords: + - "HUMAN:" + - "### Response:" + roles: + user: "HUMAN:" + system: "GPT:" + template: + completion: completion + chat: chat +- name: list2 + parameters: + model: testmodel + context_size: 512 + threads: 10 + stopwords: + - "HUMAN:" + - "### Response:" + roles: + user: "HUMAN:" + system: "GPT:" + template: + completion: completion + chat: chat +``` + +See also [chatbot-ui](https://github.com/go-skynet/LocalAI/tree/master/examples/chatbot-ui) as an example on how to use config files. + +### Full config model file reference + +```yaml +# Model name. +# The model name is used to identify the model in the API calls. +name: gpt-3.5-turbo + +# Default model parameters. +# These options can also be specified in the API calls +parameters: + # Relative to the models path + model: luna-ai-llama2-uncensored.ggmlv3.q5_K_M.bin + # temperature + temperature: 0.3 + # all the OpenAI request options here.. + top_k: + top_p: + max_tokens: + ignore_eos: true + n_keep: 10 + seed: + mode: + step: + negative_prompt: + typical_p: + tfz: + frequency_penalty: + mirostat_eta: + mirostat_tau: + mirostat: + rope_freq_base: + rope_freq_scale: + negative_prompt_scale: + +# Default context size +context_size: 512 +# Default number of threads +threads: 10 +# Define a backend (optional). By default it will try to guess the backend the first time the model is interacted with. +backend: llama-stable # available: llama, stablelm, gpt2, gptj rwkv +# stopwords (if supported by the backend) +stopwords: +- "HUMAN:" +- "### Response:" +# string to trim space to +trimspace: +- string +# Strings to cut from the response +cutstrings: +- "string" + +# Directory used to store additional assets +asset_dir: "" + +# define chat roles +roles: + user: "HUMAN:" + system: "GPT:" + assistant: "ASSISTANT:" +template: + # template file ".tmpl" with the prompt template to use by default on the endpoint call. Note there is no extension in the files + completion: completion + chat: chat + edit: edit_template + function: function_template + +function: + disable_no_action: true + no_action_function_name: "reply" + no_action_description_name: "Reply to the AI assistant" + +system_prompt: +rms_norm_eps: +# Set it to 8 for llama2 70b +ngqa: 1 +## LLAMA specific options +# Enable F16 if backend supports it +f16: true +# Enable debugging +debug: true +# Enable embeddings +embeddings: true +# Mirostat configuration (llama.cpp only) +mirostat_eta: 0.8 +mirostat_tau: 0.9 +mirostat: 1 +# GPU Layers (only used when built with cublas) +gpu_layers: 22 +# Enable memory lock +mmlock: true +# GPU setting to split the tensor in multiple parts and define a main GPU +# see llama.cpp for usage +tensor_split: "" +main_gpu: "" +# Define a prompt cache path (relative to the models) +prompt_cache_path: "prompt-cache" +# Cache all the prompts +prompt_cache_all: true +# Read only +prompt_cache_ro: false +# Enable mmap +mmap: true +# Enable low vram mode (GPU only) +low_vram: true +# Set NUMA mode (CPU only) +numa: true +# Lora settings +lora_adapter: "/path/to/lora/adapter" +lora_base: "/path/to/lora/base" +# Disable mulmatq (CUDA) +no_mulmatq: true +``` + +### Prompt templates + +The API doesn't inject a default prompt for talking to the model. You have to use a prompt similar to what's described in the standford-alpaca docs: https://github.com/tatsu-lab/stanford_alpaca#data-release. + +
+You can use a default template for every model present in your model path, by creating a corresponding file with the `.tmpl` suffix next to your model. For instance, if the model is called `foo.bin`, you can create a sibling file, `foo.bin.tmpl` which will be used as a default prompt and can be used with alpaca: + +``` +The below instruction describes a task. Write a response that appropriately completes the request. + +### Instruction: +{{.Input}} + +### Response: +``` + +See the [prompt-templates](https://github.com/go-skynet/LocalAI/tree/master/prompt-templates) directory in this repository for templates for some of the most popular models. + + +For the edit endpoint, an example template for alpaca-based models can be: + +```yaml +Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request. + +### Instruction: +{{.Instruction}} + +### Input: +{{.Input}} + +### Response: +``` + +
+ +### Install models using the API + +Instead of installing models manually, you can use the LocalAI API endpoints and a model definition to install programmatically via API models in runtime. + +A curated collection of model files is in the [model-gallery](https://github.com/go-skynet/model-gallery) (work in progress!). The files of the model gallery are different from the model files used to configure LocalAI models. The model gallery files contains information about the model setup, and the files necessary to run the model locally. + +To install for example `lunademo`, you can send a POST call to the `/models/apply` endpoint with the model definition url (`url`) and the name of the model should have in LocalAI (`name`, optional): + +```bash +curl --location 'http://localhost:8080/models/apply' \ +--header 'Content-Type: application/json' \ +--data-raw '{ + "id": "TheBloke/Luna-AI-Llama2-Uncensored-GGML/luna-ai-llama2-uncensored.ggmlv3.q5_K_M.bin", + "name": "lunademo" +}' +``` + + +### Preloading models during startup + +In order to allow the API to start-up with all the needed model on the first-start, the model gallery files can be used during startup. + +```bash +PRELOAD_MODELS='[{"url": "https://raw.githubusercontent.com/go-skynet/model-gallery/main/gpt4all-j.yaml","name": "gpt4all-j"}]' local-ai +``` + +`PRELOAD_MODELS` (or `--preload-models`) takes a list in JSON with the same parameter of the API calls of the `/models/apply` endpoint. + +Similarly it can be specified a path to a YAML configuration file containing a list of models with `PRELOAD_MODELS_CONFIG` ( or `--preload-models-config` ): + +```yaml +- url: https://raw.githubusercontent.com/go-skynet/model-gallery/main/gpt4all-j.yaml + name: gpt4all-j +# ... +``` + +### Automatic prompt caching + +LocalAI can automatically cache prompts for faster loading of the prompt. This can be useful if your model need a prompt template with prefixed text in the prompt before the input. + +To enable prompt caching, you can control the settings in the model config YAML file: + +```yaml + +# Enable prompt caching +prompt_cache_path: "cache" +prompt_cache_all: true + +``` + +`prompt_cache_path` is relative to the models folder. you can enter here a name for the file that will be automatically create during the first load if `prompt_cache_all` is set to `true`. + +### Configuring a specific backend for the model + +By default LocalAI will try to autoload the model by trying all the backends. This might work for most of models, but some of the backends are NOT configured to autoload. + +The available backends are listed in the [model compatibility table]({{%relref "model-compatibility" %}}). + +In order to specify a backend for your models, create a model config file in your `models` directory specifying the backend: + +```yaml +name: gpt-3.5-turbo + +# Default model parameters +parameters: + # Relative to the models path + model: ... + +backend: llama-stable +# ... +``` + +### Connect external backends + +LocalAI backends are internally implemented using `gRPC` services. This also allows `LocalAI` to connect to external `gRPC` services on start and extend LocalAI functionalities via third-party binaries. + +The `--external-grpc-backends` parameter in the CLI can be used either to specify a local backend (a file) or a remote URL. The syntax is `:`. Once LocalAI is started with it, the new backend name will be available for all the API endpoints. + +So for instance, to register a new backend which is a local file: + +``` +./local-ai --debug --external-grpc-backends "my-awesome-backend:/path/to/my/backend.py" +``` + +Or a remote URI: + +``` +./local-ai --debug --external-grpc-backends "my-awesome-backend:host:port" +``` + +### Environment variables + +When LocalAI runs in a container, +there are additional environment variables available that modify the behavior of LocalAI on startup: + +| Environment variable | Default | Description | +|----------------------------|---------|------------------------------------------------------------------------------------------------------------| +| `REBUILD` | `false` | Rebuild LocalAI on startup | +| `BUILD_TYPE` | | Build type. Available: `cublas`, `openblas`, `clblas` | +| `GO_TAGS` | | Go tags. Available: `stablediffusion` | +| `HUGGINGFACEHUB_API_TOKEN` | | Special token for interacting with HuggingFace Inference API, required only when using the `langchain-huggingface` backend | + +Here is how to configure these variables: + +```bash +# Option 1: command line +docker run --env REBUILD=true localai +# Option 2: set within an env file +docker run --env-file .env localai +``` diff --git a/docs/content/advanced/development.md b/docs/content/advanced/development.md new file mode 100644 index 00000000..9f73b8a5 --- /dev/null +++ b/docs/content/advanced/development.md @@ -0,0 +1,37 @@ + ++++ +disableToc = false +title = "Development documentation" +weight = 7 ++++ + +{{% notice note %}} + +This section is for developers and contributors. If you are looking for the user documentation, this is not the right place! + +{{% /notice %}} + +This section will collect how-to, notes and development documentation + +## Contributing + +We use conventional commits and semantic versioning. Please follow the [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/) specification when writing commit messages. + +## Creating a gRPC backend + +LocalAI backends are `gRPC` servers. + +In order to create a new backend you need: + +- If there are changes required to the protobuf code, modify the [proto](https://github.com/go-skynet/LocalAI/blob/master/pkg/grpc/proto/backend.proto) file and re-generate the code with `make protogen`. +- Modify the `Makefile` to add your new backend and re-generate the client code with `make protogen` if necessary. +- Create a new `gRPC` server in `extra/grpc` if it's not written in go: [link](https://github.com/go-skynet/LocalAI/tree/master/extra/grpc), and create the specific implementation. + - Golang `gRPC` servers should be added in the [pkg/backend](https://github.com/go-skynet/LocalAI/tree/master/pkg/backend) directory given their type. See [piper](https://github.com/go-skynet/LocalAI/blob/master/pkg/backend/tts/piper.go) as an example. + - Golang servers needs a respective `cmd/grpc` binary that must be created too, see also [cmd/grpc/piper](https://github.com/go-skynet/LocalAI/tree/master/cmd/grpc/piper) as an example, update also the Makefile accordingly to build the binary during build time. +- Update the Dockerfile: if the backend is written in another language, update the `Dockerfile` default *EXTERNAL_GRPC_BACKENDS* variable by listing the new binary [link](https://github.com/go-skynet/LocalAI/blob/c2233648164f67cdb74dd33b8d46244e14436ab3/Dockerfile#L14). + +Once you are done, you can either re-build `LocalAI` with your backend or you can try it out by running the `gRPC` server manually and specifying the host and IP to LocalAI with `--external-grpc-backends` or using (`EXTERNAL_GRPC_BACKENDS` environment variable, comma separated list of `name:host:port` tuples, e.g. `my-awesome-backend:host:port`): + +```bash +./local-ai --debug --external-grpc-backends "my-awesome-backend:host:port" ... +``` diff --git a/docs/content/build/_index.en.md b/docs/content/build/_index.en.md new file mode 100644 index 00000000..c1739f39 --- /dev/null +++ b/docs/content/build/_index.en.md @@ -0,0 +1,189 @@ + ++++ +disableToc = false +title = "Build" +weight = 5 +url = '/basics/build/' + ++++ + +### Build locally + +Requirements: + +Either Docker/podman, or +- Golang >= 1.21 +- Cmake/make +- GCC + +In order to build the `LocalAI` container image locally you can use `docker`: + +``` +# build the image +docker build -t localai . +docker run localai +``` + +Or you can build the manually binary with `make`: + +``` +git clone https://github.com/go-skynet/LocalAI +cd LocalAI +make build +``` + +To run: `./local-ai` + +{{% notice note %}} + +#### CPU flagset compatibility + + +LocalAI uses different backends based on ggml and llama.cpp to run models. If your CPU doesn't support common instruction sets, you can disable them during build: + +``` +CMAKE_ARGS="-DLLAMA_F16C=OFF -DLLAMA_AVX512=OFF -DLLAMA_AVX2=OFF -DLLAMA_AVX=OFF -DLLAMA_FMA=OFF" make build +``` + +To have effect on the container image, you need to set `REBUILD=true`: + +``` +docker run quay.io/go-skynet/localai +docker run --rm -ti -p 8080:8080 -e DEBUG=true -e MODELS_PATH=/models -e THREADS=1 -e REBUILD=true -e CMAKE_ARGS="-DLLAMA_F16C=OFF -DLLAMA_AVX512=OFF -DLLAMA_AVX2=OFF -DLLAMA_AVX=OFF -DLLAMA_FMA=OFF" -v $PWD/models:/models quay.io/go-skynet/local-ai:latest +``` + +{{% /notice %}} + +### Build on mac + +Building on Mac (M1 or M2) works, but you may need to install some prerequisites using `brew`. + +The below has been tested by one mac user and found to work. Note that this doesn't use Docker to run the server: + +``` +# install build dependencies +brew install abseil cmake go grpc protobuf wget + +# clone the repo +git clone https://github.com/go-skynet/LocalAI.git + +cd LocalAI + +# build the binary +make build + +# Download gpt4all-j to models/ +wget https://gpt4all.io/models/ggml-gpt4all-j.bin -O models/ggml-gpt4all-j + +# Use a template from the examples +cp -rf prompt-templates/ggml-gpt4all-j.tmpl models/ + +# Run LocalAI +./local-ai --models-path=./models/ --debug=true + +# Now API is accessible at localhost:8080 +curl http://localhost:8080/v1/models + +curl http://localhost:8080/v1/chat/completions -H "Content-Type: application/json" -d '{ + "model": "ggml-gpt4all-j", + "messages": [{"role": "user", "content": "How are you?"}], + "temperature": 0.9 + }' +``` + +### Build with Image generation support + + +**Requirements**: OpenCV, Gomp + +Image generation is experimental and requires `GO_TAGS=stablediffusion` to be set during build: + +``` +make GO_TAGS=stablediffusion build +``` + +### Build with Text to audio support + +**Requirements**: piper-phonemize + +Text to audio support is experimental and requires `GO_TAGS=tts` to be set during build: + +``` +make GO_TAGS=tts build +``` + +### Acceleration + +List of the variables available to customize the build: + +| Variable | Default | Description | +| ---------------------| ------- | ----------- | +| `BUILD_TYPE` | None | Build type. Available: `cublas`, `openblas`, `clblas`, `metal`,`hipblas` | +| `GO_TAGS` | `tts stablediffusion` | Go tags. Available: `stablediffusion`, `tts` | +| `CLBLAST_DIR` | | Specify a CLBlast directory | +| `CUDA_LIBPATH` | | Specify a CUDA library path | + +#### OpenBLAS + +Software acceleration. + +Requirements: OpenBLAS + +``` +make BUILD_TYPE=openblas build +``` + +#### CuBLAS + +Nvidia Acceleration. + +Requirement: Nvidia CUDA toolkit + +Note: CuBLAS support is experimental, and has not been tested on real HW. please report any issues you find! + +``` +make BUILD_TYPE=cublas build +``` + +More informations available in the upstream PR: https://github.com/ggerganov/llama.cpp/pull/1412 + +#### Hipblas (AMD GPU) + +AMD GPU Acceleration + +Requirement: ROCm + +``` +make BUILD_TYPE=hipblas build +``` + +Specific GPU targets can be specified with `GPU_TARGETS`: + +``` +make BUILD_TYPE=hipblas GPU_TARGETS=gfx90a build +``` + +#### ClBLAS + +AMD/Intel GPU acceleration. + +Requirement: OpenCL, CLBlast + +``` +make BUILD_TYPE=clblas build +``` + +To specify a clblast dir set: `CLBLAST_DIR` + +### Metal (Apple Silicon) + +``` +make BUILD_TYPE=metal build + +# Set `gpu_layers: 1` to your YAML model config file and `f16: true` +# Note: only models quantized with q4_0 are supported! +``` + +### Windows compatibility + +Make sure to give enough resources to the running container. See https://github.com/go-skynet/LocalAI/issues/2 diff --git a/docs/content/faq/_index.en.md b/docs/content/faq/_index.en.md new file mode 100644 index 00000000..78e7b25e --- /dev/null +++ b/docs/content/faq/_index.en.md @@ -0,0 +1,98 @@ + ++++ +disableToc = false +title = "FAQ" +weight = 9 ++++ + +## Frequently asked questions + +Here are answers to some of the most common questions. + + +### How do I get models? + +
+ +Most ggml-based models should work, but newer models may require additions to the API. If a model doesn't work, please feel free to open up issues. However, be cautious about downloading models from the internet and directly onto your machine, as there may be security vulnerabilities in lama.cpp or ggml that could be maliciously exploited. Some models can be found on Hugging Face: https://huggingface.co/models?search=ggml, or models from gpt4all are compatible too: https://github.com/nomic-ai/gpt4all. + +
+ +### What's the difference with Serge, or XXX? + + +
+ +LocalAI is a multi-model solution that doesn't focus on a specific model type (e.g., llama.cpp or alpaca.cpp), and it handles all of these internally for faster inference, easy to set up locally and deploy to Kubernetes. + +
+ + +### Everything is slow, how come? + +
+ +There are few situation why this could occur. Some tips are: +- Don't use HDD to store your models. Prefer SSD over HDD. In case you are stuck with HDD, disable `mmap` in the model config file so it loads everything in memory. +- Watch out CPU overbooking. Ideally the `--threads` should match the number of physical cores. For instance if your CPU has 4 cores, you would ideally allocate `<= 4` threads to a model. +- Run LocalAI with `DEBUG=true`. This gives more information, including stats on the token inference speed. +- Check that you are actually getting an output: run a simple curl request with `"stream": true` to see how fast the model is responding. + +
+ +### Can I use it with a Discord bot, or XXX? + +
+ +Yes! If the client uses OpenAI and supports setting a different base URL to send requests to, you can use the LocalAI endpoint. This allows to use this with every application that was supposed to work with OpenAI, but without changing the application! + +
+ + +### Can this leverage GPUs? + +
+ +There is partial GPU support, see build instructions above. + +
+ +### Where is the webUI? + +
+There is the availability of localai-webui and chatbot-ui in the examples section and can be setup as per the instructions. However as LocalAI is an API you can already plug it into existing projects that provides are UI interfaces to OpenAI's APIs. There are several already on github, and should be compatible with LocalAI already (as it mimics the OpenAI API) + +
+ +### Does it work with AutoGPT? + +
+ +Yes, see the [examples](https://github.com/go-skynet/LocalAI/tree/master/examples/)! + +
+ +### How can I troubleshoot when something is wrong? + +
+ +Enable the debug mode by setting `DEBUG=true` in the environment variables. This will give you more information on what's going on. +You can also specify `--debug` in the command line. + +
+ +### I'm getting 'invalid pitch' error when running with CUDA, what's wrong? + +
+ +This typically happens when your prompt exceeds the context size. Try to reduce the prompt size, or increase the context size. + +
+ +### I'm getting a 'SIGILL' error, what's wrong? + +
+ +Your CPU probably does not have support for certain instructions that are compiled by default in the pre-built binaries. If you are running in a container, try setting `REBUILD=true` and disable the CPU instructions that are not compatible with your CPU. For instance: `CMAKE_ARGS="-DLLAMA_F16C=OFF -DLLAMA_AVX512=OFF -DLLAMA_AVX2=OFF -DLLAMA_FMA=OFF" make build` + +
diff --git a/docs/content/features/GPU-acceleration.md b/docs/content/features/GPU-acceleration.md new file mode 100644 index 00000000..924d3f08 --- /dev/null +++ b/docs/content/features/GPU-acceleration.md @@ -0,0 +1,10 @@ + ++++ +disableToc = false +title = "⚑ GPU acceleration" +weight = 2 ++++ + +{{% notice note %}} +Section under construction +{{% /notice %}} diff --git a/docs/content/features/_index.en.md b/docs/content/features/_index.en.md new file mode 100644 index 00000000..173050d4 --- /dev/null +++ b/docs/content/features/_index.en.md @@ -0,0 +1,16 @@ + ++++ +disableToc = false +title = "Features" +weight = 3 ++++ + +This section contains the documentation for the features supported by LocalAI. + +- [πŸ“– Text generation (GPT)]({{%relref "features/text-generation" %}}) +- [πŸ—£ Text to Audio]({{%relref "features/text-to-audio" %}}) +- [πŸ”ˆ Audio to text]({{%relref "features/audio-to-text" %}}) +- [🎨 Image generation]({{%relref "features/image-generation" %}}) +- [🧠 Embeddings]({{%relref "features/embeddings" %}}) +- [πŸ”₯ OpenAI functions]({{%relref "features/openai-functions" %}}) +- [✍️ Constrained grammars]({{%relref "features/constrained_grammars" %}}) diff --git a/docs/content/features/audio-to-text.md b/docs/content/features/audio-to-text.md new file mode 100644 index 00000000..94d3795f --- /dev/null +++ b/docs/content/features/audio-to-text.md @@ -0,0 +1,41 @@ ++++ +disableToc = false +title = "πŸ”ˆ Audio to text" +weight = 2 ++++ + +The transcription endpoint allows to convert audio files to text. The endpoint is based on [whisper.cpp](https://github.com/ggerganov/whisper.cpp), a C++ library for audio transcription. The endpoint supports the audio formats supported by `ffmpeg`. + +## Usage + +Once LocalAI is started and whisper models are installed, you can use the `/v1/audio/transcriptions` API endpoint. + +For instance, with cURL: + +```bash +curl http://localhost:8080/v1/audio/transcriptions -H "Content-Type: multipart/form-data" -F file="@" -F model="" +``` + +## Example + +Download one of the models from [here](https://huggingface.co/ggerganov/whisper.cpp/tree/main) in the `models` folder, and create a YAML file for your model: + +```yaml +name: whisper-1 +backend: whisper +parameters: + model: whisper-en +``` + +The transcriptions endpoint then can be tested like so: + +```bash +## Get an example audio file +wget --quiet --show-progress -O gb1.ogg https://upload.wikimedia.org/wikipedia/commons/1/1f/George_W_Bush_Columbia_FINAL.ogg + +## Send the example audio file to the transcriptions endpoint +curl http://localhost:8080/v1/audio/transcriptions -H "Content-Type: multipart/form-data" -F file="@$PWD/gb1.ogg" -F model="whisper-1" + +## Result +{"text":"My fellow Americans, this day has brought terrible news and great sadness to our country.At nine o'clock this morning, Mission Control in Houston lost contact with our Space ShuttleColumbia.A short time later, debris was seen falling from the skies above Texas.The Columbia's lost.There are no survivors.One board was a crew of seven.Colonel Rick Husband, Lieutenant Colonel Michael Anderson, Commander Laurel Clark, Captain DavidBrown, Commander William McCool, Dr. Kultna Shavla, and Elon Ramon, a colonel in the IsraeliAir Force.These men and women assumed great risk in the service to all humanity.In an age when spaceflight has come to seem almost routine, it is easy to overlook thedangers of travel by rocket and the difficulties of navigating the fierce outer atmosphere ofthe Earth.These astronauts knew the dangers, and they faced them willingly, knowing they had a highand noble purpose in life.Because of their courage and daring and idealism, we will miss them all the more.All Americans today are thinking as well of the families of these men and women who havebeen given this sudden shock and grief.You're not alone.Our entire nation agrees with you, and those you loved will always have the respect andgratitude of this country.The cause in which they died will continue.Mankind has led into the darkness beyond our world by the inspiration of discovery andthe longing to understand.Our journey into space will go on.In the skies today, we saw destruction and tragedy.As farther than we can see, there is comfort and hope.In the words of the prophet Isaiah, \"Lift your eyes and look to the heavens who createdall these, he who brings out the starry hosts one by one and calls them each by name.\"Because of his great power and mighty strength, not one of them is missing.The same creator who names the stars also knows the names of the seven souls we mourntoday.The crew of the shuttle Columbia did not return safely to Earth yet we can pray that all aresafely home.May God bless the grieving families and may God continue to bless America.[BLANK_AUDIO]"} +``` diff --git a/docs/content/features/constrained_grammars.md b/docs/content/features/constrained_grammars.md new file mode 100644 index 00000000..1557a936 --- /dev/null +++ b/docs/content/features/constrained_grammars.md @@ -0,0 +1,30 @@ + ++++ +disableToc = false +title = "✍️ Constrained grammars" +weight = 6 ++++ + +The chat endpoint accepts an additional `grammar` parameter which takes a [BNF defined grammar](https://en.wikipedia.org/wiki/Backus%E2%80%93Naur_form). + +This allows the LLM to constrain the output to a user-defined schema, allowing to generate `JSON`, `YAML`, and everything that can be defined with a BNF grammar. + +{{% notice note %}} +This feature works only with models compatible with the [llama.cpp](https://github.com/ggerganov/llama.cpp) backend (see also [Model compatibility]({{%relref "model-compatibility" %}})). For details on how it works, see the upstream PRs: https://github.com/ggerganov/llama.cpp/pull/1773, https://github.com/ggerganov/llama.cpp/pull/1887 +{{% /notice %}} + +## Setup + +Follow the setup instructions from the [LocalAI functions]({{%relref "features/openai-functions" %}}) page. + +## πŸ’‘ Usage example + +For example, to constrain the output to either `yes`, `no`: + +```bash +curl http://localhost:8080/v1/chat/completions -H "Content-Type: application/json" -d '{ + "model": "gpt-4", + "messages": [{"role": "user", "content": "Do you like apples?"}], + "grammar": "root ::= (\"yes\" | \"no\")" +}' +``` diff --git a/docs/content/features/embeddings.md b/docs/content/features/embeddings.md new file mode 100644 index 00000000..58992c30 --- /dev/null +++ b/docs/content/features/embeddings.md @@ -0,0 +1,99 @@ + ++++ +disableToc = false +title = "🧠 Embeddings" +weight = 2 ++++ + +LocalAI supports generating embeddings for text or list of tokens. + +For the API documentation you can refer to the OpenAI docs: https://platform.openai.com/docs/api-reference/embeddings + +## Model compatibility + +The embedding endpoint is compatible with `llama.cpp` models, `bert.cpp` models and sentence-transformers models available in huggingface. + +## Manual Setup + +Create a `YAML` config file in the `models` directory. Specify the `backend` and the model file. + +```yaml +name: text-embedding-ada-002 # The model name used in the API +parameters: + model: +backend: "" +embeddings: true +# .. other parameters +``` + +## Bert embeddings + +To use `bert.cpp` models you can use the `bert` embedding backend. + +An example model config file: + +```yaml +name: text-embedding-ada-002 +parameters: + model: bert +backend: bert-embeddings +embeddings: true +# .. other parameters +``` + +The `bert` backend uses [bert.cpp](https://github.com/skeskinen/bert.cpp) and uses `ggml` models. + +For instance you can download the `ggml` quantized version of `all-MiniLM-L6-v2` from https://huggingface.co/skeskinen/ggml: + +```bash +wget https://huggingface.co/skeskinen/ggml/resolve/main/all-MiniLM-L6-v2/ggml-model-q4_0.bin -O models/bert +``` + +To test locally (LocalAI server running on `localhost`), +you can use `curl` (and `jq` at the end to prettify): + +```bash +curl http://localhost:8080/embeddings -X POST -H "Content-Type: application/json" -d '{ + "input": "Your text string goes here", + "model": "text-embedding-ada-002" +}' | jq "." +``` + +## Huggingface embeddings + +To use `sentence-formers` and models in `huggingface` you can use the `huggingface` embedding backend. + +```yaml +name: text-embedding-ada-002 +backend: huggingface-embeddings +embeddings: true +parameters: + model: all-MiniLM-L6-v2 +``` + +The `huggingface` backend uses Python [sentence-transformers](https://github.com/UKPLab/sentence-transformers). For a list of all pre-trained models available see here: https://github.com/UKPLab/sentence-transformers#pre-trained-models + +{{% notice note %}} + +- The `huggingface` backend is an optional backend of LocalAI and uses Python. If you are running `LocalAI` from the containers you are good to go and should be already configured for use. If you are running `LocalAI` manually you must install the python dependencies (`pip install -r /path/to/LocalAI/extra/requirements`) and specify the extra backend in the `EXTERNAL_GRPC_BACKENDS` environment variable ( `EXTERNAL_GRPC_BACKENDS="huggingface-embeddings:/path/to/LocalAI/extra/grpc/huggingface/huggingface.py"` ) . +- The `huggingface` backend does support only embeddings of text, and not of tokens. If you need to embed tokens you can use the `bert` backend or `llama.cpp`. +- No models are required to be downloaded before using the `huggingface` backend. The models will be downloaded automatically the first time the API is used. + +{{% /notice %}} + +## Llama.cpp embeddings + +Embeddings with `llama.cpp` are supported with the `llama` backend. + +```yaml +name: my-awesome-model +backend: llama +embeddings: true +parameters: + model: ggml-file.bin +# ... +``` + +## πŸ’‘ Examples + +- Example that uses LLamaIndex and LocalAI as embedding: [here](https://github.com/go-skynet/LocalAI/tree/master/examples/query_data/). diff --git a/docs/content/features/image-generation.md b/docs/content/features/image-generation.md new file mode 100644 index 00000000..b7099368 --- /dev/null +++ b/docs/content/features/image-generation.md @@ -0,0 +1,153 @@ + ++++ +disableToc = false +title = "🎨 Image generation" +weight = 2 ++++ + +![anime_girl](https://github.com/go-skynet/LocalAI/assets/2420543/8aaca62a-e864-4011-98ae-dcc708103928) +(Generated with [AnimagineXL](https://huggingface.co/Linaqruf/animagine-xl)) + +LocalAI supports generating images with Stable diffusion, running on CPU using a C++ implementation, [Stable-Diffusion-NCNN](https://github.com/EdVince/Stable-Diffusion-NCNN) ([binding](https://github.com/mudler/go-stable-diffusion)) and [🧨 Diffusers]({{%relref "model-compatibility/diffusers" %}}). + +## Usage + +OpenAI docs: https://platform.openai.com/docs/api-reference/images/create + +To generate an image you can send a POST request to the `/v1/images/generations` endpoint with the instruction as the request body: + +```bash +# 512x512 is supported too +curl http://localhost:8080/v1/images/generations -H "Content-Type: application/json" -d '{ + "prompt": "A cute baby sea otter", + "size": "256x256" +}' +``` + +Available additional parameters: `mode`, `step`. + +Note: To set a negative prompt, you can split the prompt with `|`, for instance: `a cute baby sea otter|malformed`. + +```bash +curl http://localhost:8080/v1/images/generations -H "Content-Type: application/json" -d '{ + "prompt": "floating hair, portrait, ((loli)), ((one girl)), cute face, hidden hands, asymmetrical bangs, beautiful detailed eyes, eye shadow, hair ornament, ribbons, bowties, buttons, pleated skirt, (((masterpiece))), ((best quality)), colorful|((part of the head)), ((((mutated hands and fingers)))), deformed, blurry, bad anatomy, disfigured, poorly drawn face, mutation, mutated, extra limb, ugly, poorly drawn hands, missing limb, blurry, floating limbs, disconnected limbs, malformed hands, blur, out of focus, long neck, long body, Octane renderer, lowres, bad anatomy, bad hands, text", + "size": "256x256" +}' +``` + +## stablediffusion-cpp + +| mode=0 | mode=1 (winograd/sgemm) | +|------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------| +| ![test](https://github.com/go-skynet/LocalAI/assets/2420543/7145bdee-4134-45bb-84d4-f11cb08a5638) | ![b643343452981](https://github.com/go-skynet/LocalAI/assets/2420543/abf14de1-4f50-4715-aaa4-411d703a942a) | +| ![b6441997879](https://github.com/go-skynet/LocalAI/assets/2420543/d50af51c-51b7-4f39-b6c2-bf04c403894c) | ![winograd2](https://github.com/go-skynet/LocalAI/assets/2420543/1935a69a-ecce-4afc-a099-1ac28cb649b3) | +| ![winograd](https://github.com/go-skynet/LocalAI/assets/2420543/1979a8c4-a70d-4602-95ed-642f382f6c6a) | ![winograd3](https://github.com/go-skynet/LocalAI/assets/2420543/e6d184d4-5002-408f-b564-163986e1bdfb) | + +Note: image generator supports images up to 512x512. You can use other tools however to upscale the image, for instance: https://github.com/upscayl/upscayl. + +### Setup + +Note: In order to use the `images/generation` endpoint with the `stablediffusion` C++ backend, you need to build LocalAI with `GO_TAGS=stablediffusion`. If you are using the container images, it is already enabled. + +{{< tabs >}} +{{% tab name="Prepare the model in runtime" %}} + +While the API is running, you can install the model by using the `/models/apply` endpoint and point it to the `stablediffusion` model in the [models-gallery](https://github.com/go-skynet/model-gallery#image-generation-stable-diffusion): + +```bash +curl http://localhost:8080/models/apply -H "Content-Type: application/json" -d '{ + "url": "github:go-skynet/model-gallery/stablediffusion.yaml" +}' +``` + +{{% /tab %}} +{{% tab name="Automatically prepare the model before start" %}} + +You can set the `PRELOAD_MODELS` environment variable: + +```bash +PRELOAD_MODELS=[{"url": "github:go-skynet/model-gallery/stablediffusion.yaml"}] +``` + +or as arg: + +```bash +local-ai --preload-models '[{"url": "github:go-skynet/model-gallery/stablediffusion.yaml"}]' +``` + +or in a YAML file: + +```bash +local-ai --preload-models-config "/path/to/yaml" +``` + +YAML: + +```yaml +- url: github:go-skynet/model-gallery/stablediffusion.yaml +``` + +{{% /tab %}} +{{% tab name="Install manually" %}} + +1. Create a model file `stablediffusion.yaml` in the models folder: + +```yaml +name: stablediffusion +backend: stablediffusion +parameters: + model: stablediffusion_assets +``` + +2. Create a `stablediffusion_assets` directory inside your `models` directory +3. Download the ncnn assets from https://github.com/EdVince/Stable-Diffusion-NCNN#out-of-box and place them in `stablediffusion_assets`. + +The models directory should look like the following: + +```bash +models +β”œβ”€β”€ stablediffusion_assets +β”‚Β Β  β”œβ”€β”€ AutoencoderKL-256-256-fp16-opt.param +β”‚Β Β  β”œβ”€β”€ AutoencoderKL-512-512-fp16-opt.param +β”‚Β Β  β”œβ”€β”€ AutoencoderKL-base-fp16.param +β”‚Β Β  β”œβ”€β”€ AutoencoderKL-encoder-512-512-fp16.bin +β”‚Β Β  β”œβ”€β”€ AutoencoderKL-fp16.bin +β”‚Β Β  β”œβ”€β”€ FrozenCLIPEmbedder-fp16.bin +β”‚Β Β  β”œβ”€β”€ FrozenCLIPEmbedder-fp16.param +β”‚Β Β  β”œβ”€β”€ log_sigmas.bin +β”‚Β Β  β”œβ”€β”€ tmp-AutoencoderKL-encoder-256-256-fp16.param +β”‚Β Β  β”œβ”€β”€ UNetModel-256-256-MHA-fp16-opt.param +β”‚Β Β  β”œβ”€β”€ UNetModel-512-512-MHA-fp16-opt.param +β”‚Β Β  β”œβ”€β”€ UNetModel-base-MHA-fp16.param +β”‚Β Β  β”œβ”€β”€ UNetModel-MHA-fp16.bin +β”‚Β Β  └── vocab.txt +└── stablediffusion.yaml +``` + +{{% /tab %}} + +{{< /tabs >}} + +## Diffusers + +This is an extra backend - in the container is already available and there is nothing to do for the setup. + +### Model setup + +The models will be downloaded the first time you use the backend from `huggingface` automatically. + +Create a model configuration file in the `models` directory, for instance to use `Linaqruf/animagine-xl` with CPU: + +```yaml +name: animagine-xl +parameters: + model: Linaqruf/animagine-xl +backend: diffusers + +# Force CPU usage - set to true for GPU +f16: false +diffusers: + pipeline_type: StableDiffusionXLPipeline + cuda: false # Enable for GPU usage (CUDA) + scheduler_type: euler_a +``` diff --git a/docs/content/features/openai-functions.md b/docs/content/features/openai-functions.md new file mode 100644 index 00000000..b6726422 --- /dev/null +++ b/docs/content/features/openai-functions.md @@ -0,0 +1,126 @@ + ++++ +disableToc = false +title = "πŸ”₯ OpenAI functions" +weight = 2 ++++ + +LocalAI supports running OpenAI functions with `llama.cpp` compatible models. + +![localai-functions-1](https://github.com/ggerganov/llama.cpp/assets/2420543/5bd15da2-78c1-4625-be90-1e938e6823f1) + +To learn more about OpenAI functions, see the [OpenAI API blog post](https://openai.com/blog/function-calling-and-other-api-updates). + +πŸ’‘ Check out also [LocalAGI](https://github.com/mudler/LocalAGI) for an example on how to use LocalAI functions. + +## Setup + +OpenAI functions are available only with `ggml` or `gguf` models compatible with `llama.cpp`. + +You don't need to do anything specific - just use `ggml` or `gguf` models. + + +## Usage example + +You can configure a model manually with a YAML config file in the models directory, for example: + +```yaml +name: gpt-3.5-turbo +parameters: + # Model file name + model: ggml-openllama.bin + top_p: 80 + top_k: 0.9 + temperature: 0.1 +``` + +To use the functions with the OpenAI client in python: + +```python +import openai +# ... +# Send the conversation and available functions to GPT +messages = [{"role": "user", "content": "What's the weather like in Boston?"}] +functions = [ + { + "name": "get_current_weather", + "description": "Get the current weather in a given location", + "parameters": { + "type": "object", + "properties": { + "location": { + "type": "string", + "description": "The city and state, e.g. San Francisco, CA", + }, + "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}, + }, + "required": ["location"], + }, + } +] +response = openai.ChatCompletion.create( + model="gpt-3.5-turbo", + messages=messages, + functions=functions, + function_call="auto", +) +# ... +``` + +{{% notice note %}} +When running the python script, be sure to: + +- Set `OPENAI_API_KEY` environment variable to a random string (the OpenAI api key is NOT required!) +- Set `OPENAI_API_BASE` to point to your LocalAI service, for example `OPENAI_API_BASE=http://localhost:8080` + +{{% /notice %}} + +## Advanced + +It is possible to also specify the full function signature (for debugging, or to use with other clients). + +The chat endpoint accepts the `grammar_json_functions` additional parameter which takes a JSON schema object. + +For example, with curl: + +```bash +curl http://localhost:8080/v1/chat/completions -H "Content-Type: application/json" -d '{ + "model": "gpt-4", + "messages": [{"role": "user", "content": "How are you?"}], + "temperature": 0.1, + "grammar_json_functions": { + "oneOf": [ + { + "type": "object", + "properties": { + "function": {"const": "create_event"}, + "arguments": { + "type": "object", + "properties": { + "title": {"type": "string"}, + "date": {"type": "string"}, + "time": {"type": "string"} + } + } + } + }, + { + "type": "object", + "properties": { + "function": {"const": "search"}, + "arguments": { + "type": "object", + "properties": { + "query": {"type": "string"} + } + } + } + } + ] + } + }' +``` + +## πŸ’‘ Examples + +A full e2e example with `docker-compose` is available [here](https://github.com/go-skynet/LocalAI/tree/master/examples/functions). diff --git a/docs/content/features/text-generation.md b/docs/content/features/text-generation.md new file mode 100644 index 00000000..5fe0d928 --- /dev/null +++ b/docs/content/features/text-generation.md @@ -0,0 +1,70 @@ + ++++ +disableToc = false +title = "πŸ“– Text generation (GPT)" +weight = 2 ++++ + +LocalAI supports generating text with GPT with `llama.cpp` and other backends (such as `rwkv.cpp` as ) see also the [Model compatibility]({{%relref "model-compatibility" %}}) for an up-to-date list of the supported model families. + +Note: + +- You can also specify the model name as part of the OpenAI token. +- If only one model is available, the API will use it for all the requests. + +### Chat completions + +https://platform.openai.com/docs/api-reference/chat + +For example, to generate a chat completion, you can send a POST request to the `/v1/chat/completions` endpoint with the instruction as the request body: + +```bash +curl http://localhost:8080/v1/chat/completions -H "Content-Type: application/json" -d '{ + "model": "ggml-koala-7b-model-q4_0-r2.bin", + "messages": [{"role": "user", "content": "Say this is a test!"}], + "temperature": 0.7 +}' +``` + +Available additional parameters: `top_p`, `top_k`, `max_tokens` + +### Edit completions + +https://platform.openai.com/docs/api-reference/edits + +To generate an edit completion you can send a POST request to the `/v1/edits` endpoint with the instruction as the request body: + +```bash +curl http://localhost:8080/v1/edits -H "Content-Type: application/json" -d '{ + "model": "ggml-koala-7b-model-q4_0-r2.bin", + "instruction": "rephrase", + "input": "Black cat jumped out of the window", + "temperature": 0.7 +}' +``` + +Available additional parameters: `top_p`, `top_k`, `max_tokens`. + +### Completions + +https://platform.openai.com/docs/api-reference/completions + +To generate a completion, you can send a POST request to the `/v1/completions` endpoint with the instruction as per the request body: + +```bash +curl http://localhost:8080/v1/completions -H "Content-Type: application/json" -d '{ + "model": "ggml-koala-7b-model-q4_0-r2.bin", + "prompt": "A long time ago in a galaxy far, far away", + "temperature": 0.7 +}' +``` + +Available additional parameters: `top_p`, `top_k`, `max_tokens` + +### List models + +You can list all the models available with: + +```bash +curl http://localhost:8080/v1/models +``` diff --git a/docs/content/features/text-to-audio.md b/docs/content/features/text-to-audio.md new file mode 100644 index 00000000..8b4748b3 --- /dev/null +++ b/docs/content/features/text-to-audio.md @@ -0,0 +1,63 @@ + ++++ +disableToc = false +title = "πŸ—£ Text to audio (TTS)" +weight = 2 ++++ + +The `/tts` endpoint can be used to generate speech from text. + +Input: `input`, `model` + +For example, to generate an audio file, you can send a POST request to the `/tts` endpoint with the instruction as the request body: + +```bash +curl http://localhost:8080/tts -H "Content-Type: application/json" -d '{ + "input": "Hello world", + "model": "tts" +}' +``` + +Returns an `audio/wav` file. + +#### Setup + +LocalAI supports [bark]({{%relref "model-compatibility/bark" %}}) , `piper` and `vall-e-x`: + +{{% notice note %}} + +The `piper` backend is used for `onnx` models and requires the modules to be downloaded first. + +To install the `piper` audio models manually: + +- Download Voices from https://github.com/rhasspy/piper/releases/tag/v0.0.2 +- Extract the `.tar.tgz` files (.onnx,.json) inside `models` +- Run the following command to test the model is working + +{{% /notice %}} + +To use the tts endpoint, run the following command. You can specify a backend with the `backend` parameter. For example, to use the `piper` backend: +```bash +curl http://localhost:8080/tts -H "Content-Type: application/json" -d '{ + "model":"it-riccardo_fasol-x-low.onnx", + "backend": "piper", + "input": "Ciao, sono Ettore" +}' | aplay +``` + +Note: + +- `aplay` is a Linux command. You can use other tools to play the audio file. +- The model name is the filename with the extension. +- The model name is case sensitive. +- LocalAI must be compiled with the `GO_TAGS=tts` flag. + +#### Configuration + +Audio models can be configured via `YAML` files. This allows to configure specific setting for each backend. For instance, backends might be specifying a voice or supports voice cloning which must be specified in the configuration file. + +```yaml +name: tts +backend: vall-e-x +parameters: ... +``` \ No newline at end of file diff --git a/docs/content/getting_started/_index.en.md b/docs/content/getting_started/_index.en.md new file mode 100644 index 00000000..4677ef6b --- /dev/null +++ b/docs/content/getting_started/_index.en.md @@ -0,0 +1,421 @@ + ++++ +disableToc = false +title = "Getting started" +weight = 1 +url = '/basics/getting_started/' ++++ + +`LocalAI` is available as a container image and binary. You can check out all the available images with corresponding tags [here](https://quay.io/repository/go-skynet/local-ai?tab=tags&tag=latest). + +### How to get started +For a always up to date step by step how to of setting up LocalAI, Please see our [How to]({{%relref "howtos" %}}) page. + +### Fast Setup +The easiest way to run LocalAI is by using [`docker compose`](https://docs.docker.com/compose/install/) or with [Docker](https://docs.docker.com/engine/install/) (to build locally, see the [build section]({{%relref "build" %}})). The following example uses `docker compose`: + +```bash + +git clone https://github.com/go-skynet/LocalAI + +cd LocalAI + +# (optional) Checkout a specific LocalAI tag +# git checkout -b build + +# copy your models to models/ +cp your-model.bin models/ + +# (optional) Edit the .env file to set things like context size and threads +# vim .env + +# start with docker compose +docker compose up -d --pull always +# or you can build the images with: +# docker compose up -d --build + +# Now API is accessible at localhost:8080 +curl http://localhost:8080/v1/models +# {"object":"list","data":[{"id":"your-model.bin","object":"model"}]} + +curl http://localhost:8080/v1/completions -H "Content-Type: application/json" -d '{ + "model": "your-model.bin", + "prompt": "A long time ago in a galaxy far, far away", + "temperature": 0.7 + }' +``` + +### Example: Use luna-ai-llama2 model with `docker compose` + + +```bash +# Clone LocalAI +git clone https://github.com/go-skynet/LocalAI + +cd LocalAI + +# (optional) Checkout a specific LocalAI tag +# git checkout -b build + +# Download luna-ai-llama2 to models/ +wget https://huggingface.co/TheBloke/Luna-AI-Llama2-Uncensored-GGUF/resolve/main/luna-ai-llama2-uncensored.Q4_0.gguf -O models/luna-ai-llama2 + +# Use a template from the examples +cp -rf prompt-templates/getting_started.tmpl models/luna-ai-llama2.tmpl + +# (optional) Edit the .env file to set things like context size and threads +# vim .env + +# start with docker compose +docker compose up -d --pull always +# or you can build the images with: +# docker compose up -d --build +# Now API is accessible at localhost:8080 +curl http://localhost:8080/v1/models +# {"object":"list","data":[{"id":"luna-ai-llama2","object":"model"}]} + +curl http://localhost:8080/v1/chat/completions -H "Content-Type: application/json" -d '{ + "model": "luna-ai-llama2", + "messages": [{"role": "user", "content": "How are you?"}], + "temperature": 0.9 + }' + +# {"model":"luna-ai-llama2","choices":[{"message":{"role":"assistant","content":"I'm doing well, thanks. How about you?"}}]} +``` + +{{% notice note %}} +- If running on Apple Silicon (ARM) it is **not** suggested to run on Docker due to emulation. Follow the [build instructions]({{%relref "build" %}}) to use Metal acceleration for full GPU support. +- If you are running Apple x86_64 you can use `docker`, there is no additional gain into building it from source. +- If you are on Windows, please run ``docker-compose`` not ``docker compose`` and make sure the project is in the Linux Filesystem, otherwise loading models might be slow. For more Info: [Microsoft Docs](https://learn.microsoft.com/en-us/windows/wsl/filesystems) +{{% /notice %}} + +### From binaries + +LocalAI binary releases are available in [Github](https://github.com/go-skynet/LocalAI/releases). + +You can control LocalAI with command line arguments, to specify a binding address, or the number of threads. + +
+ +Usage: + +``` +local-ai --models-path [--address
] [--threads ] +``` + +| Parameter | Environmental Variable | Default Variable | Description | +| ------------------------------ | ------------------------------- | -------------------------------------------------- | ------------------------------------------------------------------- | +| --f16 | $F16 | false | Enable f16 mode | +| --debug | $DEBUG | false | Enable debug mode | +| --cors | $CORS | false | Enable CORS support | +| --cors-allow-origins value | $CORS_ALLOW_ORIGINS | | Specify origins allowed for CORS | +| --threads value | $THREADS | 4 | Number of threads to use for parallel computation | +| --models-path value | $MODELS_PATH | ./models | Path to the directory containing models used for inferencing | +| --preload-models value | $PRELOAD_MODELS | | List of models to preload in JSON format at startup | +| --preload-models-config value | $PRELOAD_MODELS_CONFIG | | A config with a list of models to apply at startup. Specify the path to a YAML config file | +| --config-file value | $CONFIG_FILE | | Path to the config file | +| --address value | $ADDRESS | :8080 | Specify the bind address for the API server | +| --image-path value | $IMAGE_PATH | | Path to the directory used to store generated images | +| --context-size value | $CONTEXT_SIZE | 512 | Default context size of the model | +| --upload-limit value | $UPLOAD_LIMIT | 15 | Default upload limit in megabytes (audio file upload) | +| --galleries | $GALLERIES | | Allows to set galleries from command line | + +
+ +### Docker + +LocalAI has a set of images to support CUDA, ffmpeg and 'vanilla' (CPU-only). The image list is on [quay](https://quay.io/repository/go-skynet/local-ai?tab=tags): + +- Vanilla images tags: `master`, `v1.40.0`, `latest`, ... +- FFmpeg images tags: `master-ffmpeg`, `v1.40.0-ffmpeg`, ... +- CUDA `11` tags: `master-cublas-cuda11`, `v1.40.0-cublas-cuda11`, ... +- CUDA `12` tags: `master-cublas-cuda12`, `v1.40.0-cublas-cuda12`, ... +- CUDA `11` + FFmpeg tags: `master-cublas-cuda11-ffmpeg`, `v1.40.0-cublas-cuda11-ffmpeg`, ... +- CUDA `12` + FFmpeg tags: `master-cublas-cuda12-ffmpeg`, `v1.40.0-cublas-cuda12-ffmpeg`, ... + +Example: + +- Standard (GPT + `stablediffusion`): `quay.io/go-skynet/local-ai:latest` +- FFmpeg: `quay.io/go-skynet/local-ai:v1.40.0-ffmpeg` +- CUDA 11+FFmpeg: `quay.io/go-skynet/local-ai:v1.40.0-cublas-cuda11-ffmpeg` +- CUDA 12+FFmpeg: `quay.io/go-skynet/local-ai:v1.40.0-cublas-cuda12-ffmpeg` + +Example of starting the API with `docker`: + +```bash +docker run -p 8080:8080 -v $PWD/models:/models -ti --rm quay.io/go-skynet/local-ai:latest --models-path /models --context-size 700 --threads 4 +``` + +You should see: +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ Fiber v2.42.0 β”‚ +β”‚ http://127.0.0.1:8080 β”‚ +β”‚ (bound on host 0.0.0.0 and port 8080) β”‚ +β”‚ β”‚ +β”‚ Handlers ............. 1 Processes ........... 1 β”‚ +β”‚ Prefork ....... Disabled PID ................. 1 β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +``` + +{{% notice note %}} +Note: the binary inside the image is pre-compiled, and might not suite all CPUs. +To enable CPU optimizations for the execution environment, +the default behavior is to rebuild when starting the container. +To disable this auto-rebuild behavior, +set the environment variable `REBUILD` to `false`. + +See [docs on all environment variables]({{%relref "advanced#environment-variables" %}}) +for more info. +{{% /notice %}} + +#### CUDA: + +Requirement: nvidia-container-toolkit (installation instructions [1](https://www.server-world.info/en/note?os=Ubuntu_22.04&p=nvidia&f=2) [2](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html)) + +You need to run the image with `--gpus all`, and + +``` +docker run --rm -ti --gpus all -p 8080:8080 -e DEBUG=true -e MODELS_PATH=/models -e PRELOAD_MODELS='[{"url": "github:go-skynet/model-gallery/openllama_7b.yaml", "name": "gpt-3.5-turbo", "overrides": { "f16":true, "gpu_layers": 35, "mmap": true, "batch": 512 } } ]' -e THREADS=1 -v $PWD/models:/models quay.io/go-skynet/local-ai:v1.40.0-cublas-cuda12 +``` + +In the terminal where LocalAI was started, you should see: + +``` +5:13PM DBG Config overrides map[gpu_layers:10] +5:13PM DBG Checking "open-llama-7b-q4_0.bin" exists and matches SHA +5:13PM DBG Downloading "https://huggingface.co/SlyEcho/open_llama_7b_ggml/resolve/main/open-llama-7b-q4_0.bin" +5:13PM DBG Downloading open-llama-7b-q4_0.bin: 393.4 MiB/3.5 GiB (10.88%) ETA: 40.965550709s +5:13PM DBG Downloading open-llama-7b-q4_0.bin: 870.8 MiB/3.5 GiB (24.08%) ETA: 31.526866642s +5:13PM DBG Downloading open-llama-7b-q4_0.bin: 1.3 GiB/3.5 GiB (36.26%) ETA: 26.37351405s +5:13PM DBG Downloading open-llama-7b-q4_0.bin: 1.7 GiB/3.5 GiB (48.64%) ETA: 21.11682624s +5:13PM DBG Downloading open-llama-7b-q4_0.bin: 2.2 GiB/3.5 GiB (61.49%) ETA: 15.656029361s +5:14PM DBG Downloading open-llama-7b-q4_0.bin: 2.6 GiB/3.5 GiB (74.33%) ETA: 10.360950226s +5:14PM DBG Downloading open-llama-7b-q4_0.bin: 3.1 GiB/3.5 GiB (87.05%) ETA: 5.205663978s +5:14PM DBG Downloading open-llama-7b-q4_0.bin: 3.5 GiB/3.5 GiB (99.85%) ETA: 61.269714ms +5:14PM DBG File "open-llama-7b-q4_0.bin" downloaded and verified +5:14PM DBG Prompt template "openllama-completion" written +5:14PM DBG Prompt template "openllama-chat" written +5:14PM DBG Written config file /models/gpt-3.5-turbo.yaml +``` + +LocalAI will download automatically the OpenLLaMa model and run with GPU. Wait for the download to complete. You can also avoid automatic download of the model by not specifying a `PRELOAD_MODELS` variable. For compatible models with GPU support see the [model compatibility table]({{%relref "model-compatibility" %}}). + +To test that the API is working run in another terminal: + +``` +curl http://localhost:8080/v1/chat/completions -H "Content-Type: application/json" -d '{ + "model": "gpt-3.5-turbo", + "messages": [{"role": "user", "content": "What is an alpaca?"}], + "temperature": 0.1 + }' +``` + +And if the GPU inferencing is working, you should be able to see something like: + +``` +5:22PM DBG Loading model in memory from file: /models/open-llama-7b-q4_0.bin +ggml_init_cublas: found 1 CUDA devices: + Device 0: Tesla T4 +llama.cpp: loading model from /models/open-llama-7b-q4_0.bin +llama_model_load_internal: format = ggjt v3 (latest) +llama_model_load_internal: n_vocab = 32000 +llama_model_load_internal: n_ctx = 1024 +llama_model_load_internal: n_embd = 4096 +llama_model_load_internal: n_mult = 256 +llama_model_load_internal: n_head = 32 +llama_model_load_internal: n_layer = 32 +llama_model_load_internal: n_rot = 128 +llama_model_load_internal: ftype = 2 (mostly Q4_0) +llama_model_load_internal: n_ff = 11008 +llama_model_load_internal: n_parts = 1 +llama_model_load_internal: model size = 7B +llama_model_load_internal: ggml ctx size = 0.07 MB +llama_model_load_internal: using CUDA for GPU acceleration +llama_model_load_internal: mem required = 4321.77 MB (+ 1026.00 MB per state) +llama_model_load_internal: allocating batch_size x 1 MB = 512 MB VRAM for the scratch buffer +llama_model_load_internal: offloading 10 repeating layers to GPU +llama_model_load_internal: offloaded 10/35 layers to GPU +llama_model_load_internal: total VRAM used: 1598 MB +................................................................................................... +llama_init_from_file: kv self size = 512.00 MB +``` + +{{% notice note %}} +When enabling GPU inferencing, set the number of GPU layers to offload with: `gpu_layers: 1` to your YAML model config file and `f16: true`. You might also need to set `low_vram: true` if the device has low VRAM. +{{% /notice %}} + +### Run LocalAI in Kubernetes + +LocalAI can be installed inside Kubernetes with helm. + +Requirements: +- SSD storage class, or disable `mmap` to load the whole model in memory + +
+By default, the helm chart will install LocalAI instance using the ggml-gpt4all-j model without persistent storage. + +1. Add the helm repo + ```bash + helm repo add go-skynet https://go-skynet.github.io/helm-charts/ + ``` +2. Install the helm chart: + ```bash + helm repo update + helm install local-ai go-skynet/local-ai -f values.yaml + ``` +> **Note:** For further configuration options, see the [helm chart repository on GitHub](https://github.com/go-skynet/helm-charts). +### Example values +Deploy a single LocalAI pod with 6GB of persistent storage serving up a `ggml-gpt4all-j` model with custom prompt. +```yaml +### values.yaml + +replicaCount: 1 + +deployment: + image: quay.io/go-skynet/local-ai:latest ##(This is for CPU only, to use GPU change it to a image that supports GPU IE "v1.40.0-cublas-cuda12") + env: + threads: 4 + context_size: 512 + modelsPath: "/models" + +resources: + {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +# Prompt templates to include +# Note: the keys of this map will be the names of the prompt template files +promptTemplates: + {} + # ggml-gpt4all-j.tmpl: | + # The prompt below is a question to answer, a task to complete, or a conversation to respond to; decide which and write an appropriate response. + # ### Prompt: + # {{.Input}} + # ### Response: + +# Models to download at runtime +models: + # Whether to force download models even if they already exist + forceDownload: false + + # The list of URLs to download models from + # Note: the name of the file will be the name of the loaded model + list: + - url: "https://gpt4all.io/models/ggml-gpt4all-j.bin" + # basicAuth: base64EncodedCredentials + + # Persistent storage for models and prompt templates. + # PVC and HostPath are mutually exclusive. If both are enabled, + # PVC configuration takes precedence. If neither are enabled, ephemeral + # storage is used. + persistence: + pvc: + enabled: false + size: 6Gi + accessModes: + - ReadWriteOnce + + annotations: {} + + # Optional + storageClass: ~ + + hostPath: + enabled: false + path: "/models" + +service: + type: ClusterIP + port: 80 + annotations: {} + # If using an AWS load balancer, you'll need to override the default 60s load balancer idle timeout + # service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout: "1200" + +ingress: + enabled: false + className: "" + annotations: + {} + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + hosts: + - host: chart-example.local + paths: + - path: / + pathType: ImplementationSpecific + tls: [] + # - secretName: chart-example-tls + # hosts: + # - chart-example.local + +nodeSelector: {} + +tolerations: [] + +affinity: {} +``` +
+ + +### Build from source + +See the [build section]({{%relref "build" %}}). + +### Other examples + +![Screenshot from 2023-04-26 23-59-55](https://user-images.githubusercontent.com/2420543/234715439-98d12e03-d3ce-4f94-ab54-2b256808e05e.png) + +To see other examples on how to integrate with other projects for instance for question answering or for using it with chatbot-ui, see: [examples](https://github.com/go-skynet/LocalAI/tree/master/examples/). + + +### Clients + +OpenAI clients are already compatible with LocalAI by overriding the basePath, or the target URL. + +## Javascript + +
+ +https://github.com/openai/openai-node/ + +```javascript +import { Configuration, OpenAIApi } from 'openai'; + +const configuration = new Configuration({ + basePath: `http://localhost:8080/v1` +}); +const openai = new OpenAIApi(configuration); +``` + +
+ +## Python + +
+ +https://github.com/openai/openai-python + +Set the `OPENAI_API_BASE` environment variable, or by code: + +```python +import openai + +openai.api_base = "http://localhost:8080/v1" + +# create a chat completion +chat_completion = openai.ChatCompletion.create(model="gpt-3.5-turbo", messages=[{"role": "user", "content": "Hello world"}]) + +# print the completion +print(completion.choices[0].message.content) +``` + +
diff --git a/docs/content/howtos/_index.md b/docs/content/howtos/_index.md new file mode 100644 index 00000000..ec28923c --- /dev/null +++ b/docs/content/howtos/_index.md @@ -0,0 +1,23 @@ ++++ +disableToc = false +title = "How-tos" +weight = 9 ++++ + +## How-tos + +This section includes LocalAI end-to-end examples, tutorial and how-tos curated by the community and maintained by [lunamidori5](https://github.com/lunamidori5). + +- [Setup LocalAI with Docker on CPU]({{%relref "howtos/easy-setup-docker-cpu" %}}) +- [Setup LocalAI with Docker With CUDA]({{%relref "howtos/easy-setup-docker-gpu" %}}) +- [Seting up a Model]({{%relref "howtos/easy-model-import-downloaded" %}}) +- [Making requests via Autogen]({{%relref "howtos/easy-request-autogen" %}}) +- [Making requests via OpenAi API V0]({{%relref "howtos/easy-request-openai-v0" %}}) +- [Making requests via OpenAi API V1]({{%relref "howtos/easy-request-openai-v1" %}}) +- [Making requests via Curl]({{%relref "howtos/easy-request-curl" %}}) + +## Programs and Demos + +This section includes other programs and how to setup, install, and use of LocalAI. +- [Python LocalAI Demo]({{%relref "howtos/easy-setup-full" %}}) - [lunamidori5](https://github.com/lunamidori5) +- [Autogen]({{%relref "howtos/autogen-setup" %}}) - [lunamidori5](https://github.com/lunamidori5) diff --git a/docs/content/howtos/autogen-setup.md b/docs/content/howtos/autogen-setup.md new file mode 100644 index 00000000..bd53b42b --- /dev/null +++ b/docs/content/howtos/autogen-setup.md @@ -0,0 +1,91 @@ + ++++ +disableToc = false +title = "Easy Demo - AutoGen" +weight = 2 ++++ + +This is just a short demo of setting up ``LocalAI`` with Autogen, this is based on you already having a model setup. + +```python +import os +import openai +import autogen + +openai.api_key = "sx-xxx" +OPENAI_API_KEY = "sx-xxx" +os.environ['OPENAI_API_KEY'] = OPENAI_API_KEY + +config_list_json = [ + { + "model": "gpt-3.5-turbo", + "api_base": "http://[YOURLOCALAIIPHERE]:8080/v1", + "api_type": "open_ai", + "api_key": "NULL", + } +] + +print("models to use: ", [config_list_json[i]["model"] for i in range(len(config_list_json))]) + +llm_config = {"config_list": config_list_json, "seed": 42} +user_proxy = autogen.UserProxyAgent( + name="Admin", + system_message="A human admin. Interact with the planner to discuss the plan. Plan execution needs to be approved by this admin.", + code_execution_config={ + "work_dir": "coding", + "last_n_messages": 8, + "use_docker": "python:3", + }, + human_input_mode="ALWAYS", + is_termination_msg=lambda x: x.get("content", "").rstrip().endswith("TERMINATE"), +) +engineer = autogen.AssistantAgent( + name="Coder", + llm_config=llm_config, +) +scientist = autogen.AssistantAgent( + name="Scientist", + llm_config=llm_config, + system_message="""Scientist. You follow an approved plan. You are able to categorize papers after seeing their abstracts printed. You don't write code.""" +) +planner = autogen.AssistantAgent( + name="Planner", + system_message='''Planner. Suggest a plan. Revise the plan based on feedback from admin and critic, until admin approval. +The plan may involve an engineer who can write code and a scientist who doesn't write code. +Explain the plan first. Be clear which step is performed by an engineer, and which step is performed by a scientist. +''', + llm_config=llm_config, +) +executor = autogen.UserProxyAgent( + name="Executor", + system_message="Executor. Execute the code written by the engineer and report the result.", + human_input_mode="NEVER", + code_execution_config={ + "work_dir": "coding", + "last_n_messages": 8, + "use_docker": "python:3", + } +) +critic = autogen.AssistantAgent( + name="Critic", + system_message="Critic. Double check plan, claims, code from other agents and provide feedback. Check whether the plan includes adding verifiable info such as source URL.", + llm_config=llm_config, +) +groupchat = autogen.GroupChat(agents=[user_proxy, engineer, scientist, planner, executor, critic], messages=[], max_round=999) +manager = autogen.GroupChatManager(groupchat=groupchat, llm_config=llm_config) + + +#autogen.ChatCompletion.start_logging() + +#text_input = input("Please enter request: ") +text_input = ("Change this to a task you would like the group chat to do or comment this out and uncomment the other line!") + +#Uncomment one of these two chats based on what you would like to do + +#user_proxy.initiate_chat(engineer, message=str(text_input)) +#For a one on one chat use this one ^ + +#user_proxy.initiate_chat(manager, message=str(text_input)) +#To setup a group chat use this one ^ +``` + diff --git a/docs/content/howtos/easy-model-import-downloaded.md b/docs/content/howtos/easy-model-import-downloaded.md new file mode 100644 index 00000000..cbe17431 --- /dev/null +++ b/docs/content/howtos/easy-model-import-downloaded.md @@ -0,0 +1,135 @@ + ++++ +disableToc = false +title = "Easy Model Setup" +weight = 2 ++++ + +Lets Learn how to setup a model, for this ``How To`` we are going to use the ``Luna-Ai`` model (Yes I know haha - ``Luna Midori`` making a how to using the ``luna-ai-llama2`` model - lol) + +To download the model to your models folder, run this command in a commandline of your picking. +```bash +curl --location 'http://localhost:8080/models/apply' \ +--header 'Content-Type: application/json' \ +--data-raw '{ + "id": "TheBloke/Luna-AI-Llama2-Uncensored-GGUF/luna-ai-llama2-uncensored.Q4_K_M.gguf" +}' +``` + +Each model needs at least ``4`` files, with out these files, the model will run raw, what that means is you can not change settings of the model. +``` +File 1 - The model's GGUF file +File 2 - The model's .yaml file +File 3 - The Chat API .tmpl file +File 4 - The Completion API .tmpl file +``` +So lets fix that! We are using ``lunademo`` name for this ``How To`` but you can name the files what ever you want! Lets make blank files to start with + +```bash +touch lunademo-chat.tmpl +touch lunademo-completion.tmpl +touch lunademo.yaml +``` +Now lets edit the `"lunademo-chat.tmpl"`, Looking at the huggingface repo, this model uses the ``ASSISTANT:`` tag for when the AI replys, so lets make sure to add that to this file. Do not add the user as we will be doing that in our yaml file! + +```txt +{{.Input}} + +ASSISTANT: +``` + +Now in the `"lunademo-completion.tmpl"` file lets add this. + +```txt +Complete the following sentence: {{.Input}} +``` + + +For the `"lunademo.yaml"` file. Lets set it up for your computer or hardware. (If you want to see advanced yaml configs - [Link](https://localai.io/advanced/)) + +We are going to 1st setup the backend and context size. + +```yaml +backend: llama +context_size: 2000 +``` + +What this does is tell ``LocalAI`` how to load the model. Then we are going to **add** our settings in after that. Lets add the models name and the models settings. The models ``name:`` is what you will put into your request when sending a ``OpenAI`` request to ``LocalAI`` +```yaml +name: lunademo +parameters: + model: luna-ai-llama2-uncensored.Q4_K_M.gguf + temperature: 0.2 + top_k: 40 + top_p: 0.65 +``` + +Now that we have the model set up, there a few things we should add to the yaml file to make it run better, for this model it uses the following roles. +```yaml +roles: + assistant: 'ASSISTANT:' + system: 'SYSTEM:' + user: 'USER:' +``` + +What that did is made sure that ``LocalAI`` added the test to the users in the request, so if a message is from ``system`` it shows up in the template as ``SYSTEM:``, speaking of template files, lets add those to our models yaml file now. +```yaml +template: + chat: lunademo-chat + completion: lunademo-completion +``` + +If you are running on ``GPU`` or want to tune the model, you can add settings like +```yaml +f16: true +gpu_layers: 4 +``` + +To fully tune the model to your like. But be warned, you **must** restart ``LocalAI`` after changing a yaml file + +```bash +docker-compose restart ##windows +docker compose restart ##linux / mac +``` + +If you want to check your models yaml, here is a full copy! +```yaml +backend: llama +context_size: 2000 +##Put settings right here for tunning!! Before name but after Backend! +name: lunademo +parameters: + model: luna-ai-llama2-uncensored.Q4_K_M.gguf + temperature: 0.2 + top_k: 40 + top_p: 0.65 +roles: + assistant: 'ASSISTANT:' + system: 'SYSTEM:' + user: 'USER:' +template: + chat: lunademo-chat + completion: lunademo-completion +``` + +Now that we got that setup, lets test it out but sending a request by using [Curl]({{%relref "easy-request-curl" %}}) Or use the [OpenAI Python API]({{%relref "easy-request-openai-v1" %}})! + +## Adv Stuff +Alright now that we have learned how to set up our own models, here is how to use the gallery to do alot of this for us. This command will download and set up (mostly, we will **always** need to edit our yaml file to fit our computer / hardware) +```bash +curl http://localhost:8080/models/apply -H "Content-Type: application/json" -d '{ + "id": "model-gallery@lunademo" + }' +``` + +This will setup the model, models yaml, and both template files (you will see it only did one, as completions is out of date and not supported by ``OpenAI`` if you need one, just follow the steps from before to make one. +If you would like to download a raw model using the gallery api, you can run this command. You will need to set up the 3 files needed to run the model tho! +```bash +curl --location 'http://localhost:8080/models/apply' \ +--header 'Content-Type: application/json' \ +--data-raw '{ + "id": "NAME_OFF_HUGGINGFACE/REPO_NAME/MODENAME.gguf", + "name": "REQUSTNAME" +}' +``` + diff --git a/docs/content/howtos/easy-request-autogen.md b/docs/content/howtos/easy-request-autogen.md new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/docs/content/howtos/easy-request-autogen.md @@ -0,0 +1 @@ + diff --git a/docs/content/howtos/easy-request-curl.md b/docs/content/howtos/easy-request-curl.md new file mode 100644 index 00000000..b362504c --- /dev/null +++ b/docs/content/howtos/easy-request-curl.md @@ -0,0 +1,35 @@ + ++++ +disableToc = false +title = "Easy Request - Curl" +weight = 2 ++++ + +Now we can make a curl request! + +Curl Chat API - + +```bash +curl http://localhost:8080/v1/chat/completions -H "Content-Type: application/json" -d '{ + "model": "lunademo", + "messages": [{"role": "user", "content": "How are you?"}], + "temperature": 0.9 + }' +``` + +Curl Completion API - + +```bash +curl --request POST \ + --url http://localhost:8080/v1/completions \ + --header 'Content-Type: application/json' \ + --data '{ + "model": "lunademo", + "prompt": "function downloadFile(string url, string outputPath) {", + "max_tokens": 256, + "temperature": 0.5 +}' +``` + +See [OpenAI API](https://platform.openai.com/docs/api-reference) for more info! +Have fun using LocalAI! diff --git a/docs/content/howtos/easy-request-openai-v0.md b/docs/content/howtos/easy-request-openai-v0.md new file mode 100644 index 00000000..4c3b891a --- /dev/null +++ b/docs/content/howtos/easy-request-openai-v0.md @@ -0,0 +1,50 @@ + ++++ +disableToc = false +title = "Easy Request - Openai V0" +weight = 2 ++++ + +This is for Python, ``OpenAI``=``0.28.1``, if you are on ``OpenAI``=>``V1`` please use this [How to]({{%relref "howtos/easy-request-openai-v1" %}}) + +OpenAI Chat API Python - + +```python +import os +import openai +openai.api_base = "http://localhost:8080/v1" +openai.api_key = "sx-xxx" +OPENAI_API_KEY = "sx-xxx" +os.environ['OPENAI_API_KEY'] = OPENAI_API_KEY + +completion = openai.ChatCompletion.create( + model="lunademo", + messages=[ + {"role": "system", "content": "You are a helpful assistant."}, + {"role": "user", "content": "How are you?"} + ] +) + +print(completion.choices[0].message.content) +``` + +OpenAI Completion API Python - + +```python +import os +import openai +openai.api_base = "http://localhost:8080/v1" +openai.api_key = "sx-xxx" +OPENAI_API_KEY = "sx-xxx" +os.environ['OPENAI_API_KEY'] = OPENAI_API_KEY + +completion = openai.Completion.create( + model="lunademo", + prompt="function downloadFile(string url, string outputPath) ", + max_tokens=256, + temperature=0.5) + +print(completion.choices[0].text) +``` +See [OpenAI API](https://platform.openai.com/docs/api-reference) for more info! +Have fun using LocalAI! diff --git a/docs/content/howtos/easy-request-openai-v1.md b/docs/content/howtos/easy-request-openai-v1.md new file mode 100644 index 00000000..dfa8e343 --- /dev/null +++ b/docs/content/howtos/easy-request-openai-v1.md @@ -0,0 +1,28 @@ + ++++ +disableToc = false +title = "Easy Request - Openai V1" +weight = 2 ++++ + +This is for Python, ``OpenAI``=>``V1``, if you are on ``OpenAI``<``V1`` please use this [How to]({{%relref "howtos/easy-request-openai-v0" %}}) + +OpenAI Chat API Python - +```python +from openai import OpenAI + +client = OpenAI(base_url="http://localhost:8080/v1", api_key="sk-xxx") + +messages = [ +{"role": "system", "content": "You are LocalAI, a helpful, but really confused ai, you will only reply with confused emotes"}, +{"role": "user", "content": "Hello How are you today LocalAI"} +] +completion = client.chat.completions.create( + model="lunademo", + messages=messages, +) + +print(completion.choices[0].message) +``` +See [OpenAI API](https://platform.openai.com/docs/api-reference) for more info! +Have fun using LocalAI! diff --git a/docs/content/howtos/easy-setup-docker-cpu.md b/docs/content/howtos/easy-setup-docker-cpu.md new file mode 100644 index 00000000..06a420b2 --- /dev/null +++ b/docs/content/howtos/easy-setup-docker-cpu.md @@ -0,0 +1,131 @@ + ++++ +disableToc = false +title = "Easy Setup - CPU Docker" +weight = 2 ++++ + +{{% notice Note %}} +- You will need about 10gb of RAM Free +- You will need about 15gb of space free on C drive for ``Docker-compose`` +{{% /notice %}} + +We are going to run `LocalAI` with `docker-compose` for this set up. + + +Lets clone `LocalAI` with git. + +```bash +git clone https://github.com/go-skynet/LocalAI +``` + + +Then we will cd into the ``LocalAI`` folder. + +```bash +cd LocalAI +``` + + +At this point we want to set up our `.env` file, here is a copy for you to use if you wish, please make sure to set it to the same as in the `docker-compose` file for later. + +```bash +## Set number of threads. +## Note: prefer the number of physical cores. Overbooking the CPU degrades performance notably. +THREADS=2 + +## Specify a different bind address (defaults to ":8080") +# ADDRESS=127.0.0.1:8080 + +## Define galleries. +## models will to install will be visible in `/models/available` +GALLERIES=[{"name":"model-gallery", "url":"github:go-skynet/model-gallery/index.yaml"}, {"url": "github:go-skynet/model-gallery/huggingface.yaml","name":"huggingface"}] + +## Default path for models +MODELS_PATH=/models + +## Enable debug mode +# DEBUG=true + +## Disables COMPEL (Lets Stable Diffuser work, uncomment if you plan on using it) +# COMPEL=0 + +## Enable/Disable single backend (useful if only one GPU is available) +# SINGLE_ACTIVE_BACKEND=true + +## Specify a build type. Available: cublas, openblas, clblas. +BUILD_TYPE=cublas + +## Uncomment and set to true to enable rebuilding from source +# REBUILD=true + +## Enable go tags, available: stablediffusion, tts +## stablediffusion: image generation with stablediffusion +## tts: enables text-to-speech with go-piper +## (requires REBUILD=true) +# +#GO_TAGS=tts + +## Path where to store generated images +# IMAGE_PATH=/tmp + +## Specify a default upload limit in MB (whisper) +# UPLOAD_LIMIT + +# HUGGINGFACEHUB_API_TOKEN=Token here +``` + + +Now that we have the `.env` set lets set up our `docker-compose` file. +It will use a container from [quay.io](https://quay.io/repository/go-skynet/local-ai?tab=tags). +Also note this `docker-compose` file is for `CPU` only. + +```docker +version: '3.6' + +services: + api: + image: quay.io/go-skynet/local-ai:v1.40.0 + tty: true # enable colorized logs + restart: always # should this be on-failure ? + ports: + - 8080:8080 + env_file: + - .env + volumes: + - ./models:/models + - ./images/:/tmp/generated/images/ + command: ["/usr/bin/local-ai" ] +``` + + +Make sure to save that in the root of the `LocalAI` folder. Then lets spin up the Docker run this in a `CMD` or `BASH` + +```bash +docker-compose up -d --pull always +``` + + +Now we are going to let that set up, once it is done, lets check to make sure our huggingface / localai galleries are working (wait until you see this screen to do this) + +You should see: +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ Fiber v2.42.0 β”‚ +β”‚ http://127.0.0.1:8080 β”‚ +β”‚ (bound on host 0.0.0.0 and port 8080) β”‚ +β”‚ β”‚ +β”‚ Handlers ............. 1 Processes ........... 1 β”‚ +β”‚ Prefork ....... Disabled PID ................. 1 β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +``` + +```bash +curl http://localhost:8080/models/available +``` + +Output will look like this: + +![](https://cdn.discordapp.com/attachments/1116933141895053322/1134037542845566976/image.png) + +Now that we got that setup, lets go setup a [model]({{%relref "easy-model-import-downloaded" %}}) diff --git a/docs/content/howtos/easy-setup-docker-gpu.md b/docs/content/howtos/easy-setup-docker-gpu.md new file mode 100644 index 00000000..ee386d46 --- /dev/null +++ b/docs/content/howtos/easy-setup-docker-gpu.md @@ -0,0 +1,146 @@ + ++++ +disableToc = false +title = "Easy Setup - GPU Docker" +weight = 2 ++++ + +{{% notice Note %}} +- You will need about 10gb of RAM Free +- You will need about 15gb of space free on C drive for ``Docker-compose`` +{{% /notice %}} + +We are going to run `LocalAI` with `docker-compose` for this set up. + + +Lets clone `LocalAI` with git. + +```bash +git clone https://github.com/go-skynet/LocalAI +``` + + +Then we will cd into the `LocalAI` folder. + +```bash +cd LocalAI +``` + + +At this point we want to set up our `.env` file, here is a copy for you to use if you wish, please make sure to set it to the same as in the `docker-compose` file for later. + +```bash +## Set number of threads. +## Note: prefer the number of physical cores. Overbooking the CPU degrades performance notably. +THREADS=2 + +## Specify a different bind address (defaults to ":8080") +# ADDRESS=127.0.0.1:8080 + +## Define galleries. +## models will to install will be visible in `/models/available` +GALLERIES=[{"name":"model-gallery", "url":"github:go-skynet/model-gallery/index.yaml"}, {"url": "github:go-skynet/model-gallery/huggingface.yaml","name":"huggingface"}] + +## Default path for models +MODELS_PATH=/models + +## Enable debug mode +# DEBUG=true + +## Disables COMPEL (Lets Stable Diffuser work, uncomment if you plan on using it) +# COMPEL=0 + +## Enable/Disable single backend (useful if only one GPU is available) +# SINGLE_ACTIVE_BACKEND=true + +## Specify a build type. Available: cublas, openblas, clblas. +BUILD_TYPE=cublas + +## Uncomment and set to true to enable rebuilding from source +# REBUILD=true + +## Enable go tags, available: stablediffusion, tts +## stablediffusion: image generation with stablediffusion +## tts: enables text-to-speech with go-piper +## (requires REBUILD=true) +# +#GO_TAGS=tts + +## Path where to store generated images +# IMAGE_PATH=/tmp + +## Specify a default upload limit in MB (whisper) +# UPLOAD_LIMIT + +# HUGGINGFACEHUB_API_TOKEN=Token here +``` + + +Now that we have the `.env` set lets set up our `docker-compose` file. +It will use a container from [quay.io](https://quay.io/repository/go-skynet/local-ai?tab=tags). +Also note this `docker-compose` file is for `CUDA` only. + +Please change the image to what you need. +``` +Cuda 11 - v1.40.0-cublas-cuda11 +Cuda 12 - v1.40.0-cublas-cuda12 +Cuda 11 with TTS - v1.40.0-cublas-cuda11-ffmpeg +Cuda 12 with TTS - v1.40.0-cublas-cuda12-ffmpeg +``` + +```docker +version: '3.6' + +services: + api: + deploy: + resources: + reservations: + devices: + - driver: nvidia + count: 1 + capabilities: [gpu] + image: quay.io/go-skynet/local-ai:[CHANGEMETOIMAGENEEDED] + tty: true # enable colorized logs + restart: always # should this be on-failure ? + ports: + - 8080:8080 + env_file: + - .env + volumes: + - ./models:/models + - ./images/:/tmp/generated/images/ + command: ["/usr/bin/local-ai" ] +``` + + +Make sure to save that in the root of the `LocalAI` folder. Then lets spin up the Docker run this in a `CMD` or `BASH` + +```bash +docker-compose up -d --pull always +``` + + +Now we are going to let that set up, once it is done, lets check to make sure our huggingface / localai galleries are working (wait until you see this screen to do this) + +You should see: +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ Fiber v2.42.0 β”‚ +β”‚ http://127.0.0.1:8080 β”‚ +β”‚ (bound on host 0.0.0.0 and port 8080) β”‚ +β”‚ β”‚ +β”‚ Handlers ............. 1 Processes ........... 1 β”‚ +β”‚ Prefork ....... Disabled PID ................. 1 β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +``` + +```bash +curl http://localhost:8080/models/available +``` + +Output will look like this: + +![](https://cdn.discordapp.com/attachments/1116933141895053322/1134037542845566976/image.png) + +Now that we got that setup, lets go setup a [model]({{%relref "easy-model-import-downloaded" %}}) diff --git a/docs/content/howtos/easy-setup-embeddings.md b/docs/content/howtos/easy-setup-embeddings.md new file mode 100644 index 00000000..8c3fc2b7 --- /dev/null +++ b/docs/content/howtos/easy-setup-embeddings.md @@ -0,0 +1,37 @@ ++++ +disableToc = false +title = "Easy Setup - Embeddings" +weight = 2 ++++ + +To install an embedding model, run the following command + +```bash +curl http://localhost:8080/models/apply -H "Content-Type: application/json" -d '{ + "id": "model-gallery@bert-embeddings" + }' +``` + +Now we need to make a ``bert.yaml`` in the models folder +```yaml +backend: bert-embeddings +embeddings: true +name: text-embedding-ada-002 +parameters: + model: bert +``` + +**Restart LocalAI after you change a yaml file** + +When you would like to request the model from CLI you can do + +```bash +curl http://localhost:8080/v1/embeddings \ + -H "Content-Type: application/json" \ + -d '{ + "input": "The food was delicious and the waiter...", + "model": "text-embedding-ada-002" + }' +``` + +See [OpenAI Embedding](https://platform.openai.com/docs/api-reference/embeddings/object) for more info! diff --git a/docs/content/howtos/easy-setup-full.md b/docs/content/howtos/easy-setup-full.md new file mode 100644 index 00000000..9b76e761 --- /dev/null +++ b/docs/content/howtos/easy-setup-full.md @@ -0,0 +1,61 @@ ++++ +disableToc = false +title = "Easy Demo - Full Chat Python AI" +weight = 2 ++++ + +{{% notice Note %}} +- You will need about 10gb of RAM Free +- You will need about 15gb of space free on C drive for ``Docker-compose`` +{{% /notice %}} + +This is for `Linux`, `Mac OS`, or `Windows` Hosts. - [Docker Desktop](https://docs.docker.com/engine/install/), [Python 3.11](https://www.python.org/downloads/release/python-3110/), [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) + +Linux Hosts: + +There is a Full_Auto installer compatible with some types of Linux distributions, feel free to use them, but note that they may not fully work. If you need to install something, please use the links at the top. + +```bash +git clone https://github.com/lunamidori5/localai-lunademo.git + +cd localai-lunademo + +#Pick your type of linux for the Full Autos, if you already have python, docker, and docker-compose installed skip this chmod. But make sure you chmod the setup_linux file. + +chmod +x Full_Auto_setup_Debian.sh or chmod +x Full_Auto_setup_Ubutnu.sh + +chmod +x Setup_Linux.sh + +#Make sure to install cuda to your host OS and to Docker if you plan on using GPU + +./(the setupfile you wish to run) +``` + +Windows Hosts: + +```batch +REM Make sure you have git, docker-desktop, and python 3.11 installed + +git clone https://github.com/lunamidori5/localai-lunademo.git + +cd localai-lunademo + +call Setup.bat +``` + +MacOS Hosts: +- I need some help working on a MacOS Setup file, if you are willing to help out, please contact Luna Midori on [discord](https://discord.com/channels/1096914990004457512/1099364883755171890/1147591145057157200) or put in a PR on [Luna Midori's github](https://github.com/lunamidori5/localai-lunademo). + +Video How Tos + +- Ubuntu - ``COMING SOON`` +- Debian - ``COMING SOON`` +- Windows - ``COMING SOON`` +- MacOS - ``PLANED - NEED HELP`` + +Enjoy localai! (If you need help contact Luna Midori on [Discord](https://discord.com/channels/1096914990004457512/1099364883755171890/1147591145057157200)) + +{{% notice Issues %}} +- Trying to run ``Setup.bat`` or ``Setup_Linux.sh`` from `Git Bash` on Windows is not working. (Somewhat fixed) +- Running over `SSH` or other remote command line based apps may bug out, load slowly, or crash. +{{% /notice %}} diff --git a/docs/content/howtos/easy-setup-sd.md b/docs/content/howtos/easy-setup-sd.md new file mode 100644 index 00000000..0e8735fc --- /dev/null +++ b/docs/content/howtos/easy-setup-sd.md @@ -0,0 +1,46 @@ ++++ +disableToc = false +title = "Easy Setup - Stable Diffusion" +weight = 2 ++++ + +To set up a Stable Diffusion model is super easy. +In your models folder make a file called ``stablediffusion.yaml``, then edit that file with the following. (You can change ``Linaqruf/animagine-xl`` with what ever ``sd-lx`` model you would like. +```yaml +name: animagine-xl +parameters: + model: Linaqruf/animagine-xl +backend: diffusers + +# Force CPU usage - set to true for GPU +f16: false +diffusers: + pipeline_type: StableDiffusionXLPipeline + cuda: false # Enable for GPU usage (CUDA) + scheduler_type: dpm_2_a +``` + +If you are using docker, you will need to run in the localai folder with the ``docker-compose.yaml`` file in it +```bash +docker-compose down #windows +docker compose down #linux/mac +``` + +Then in your ``.env`` file uncomment this line. +```yaml +COMPEL=0 +``` + +After that we can reinstall the LocalAI docker VM by running in the localai folder with the ``docker-compose.yaml`` file in it +```bash +docker-compose up #windows +docker compose up #linux/mac +``` + +Then to download and setup the model, Just send in a normal ``OpenAI`` request! LocalAI will do the rest! +```bash +curl http://localhost:8080/v1/images/generations -H "Content-Type: application/json" -d '{ + "prompt": "Two Boxes, 1blue, 1red", + "size": "256x256" +}' +``` diff --git a/docs/content/integrations/AnythingLLM.md b/docs/content/integrations/AnythingLLM.md new file mode 100644 index 00000000..a9e58bae --- /dev/null +++ b/docs/content/integrations/AnythingLLM.md @@ -0,0 +1,70 @@ + ++++ +disableToc = false +title = "AnythingLLM" +description="Integrate your LocalAI LLM and embedding models into AnythingLLM by Mintplex Labs" +weight = 2 ++++ + +AnythingLLM is an open source ChatGPT equivalent tool for chatting with documents and more in a secure environment by [Mintplex Labs Inc](https://github.com/Mintplex-Labs). + +![image](https://github.com/Mintplex-Labs/anything-llm/raw/master/images/screenshots/chatting.gif) + +⭐ Star on Github - https://github.com/Mintplex-Labs/anything-llm + +* Chat with your LocalAI models (or hosted models like OpenAi, Anthropic, and Azure) +* Embed documents (txt, pdf, json, and more) using your LocalAI Sentence Transformers +* Select any vector database you want (Chroma, Pinecone, qDrant, Weaviate ) or use the embedded on-instance vector database (LanceDB) +* Supports single or multi-user tenancy with built-in permissions +* Full developer API +* Locally running SQLite db for minimal setup. + +AnythingLLM is a fully transparent tool to deliver a customized, white-label ChatGPT equivalent experience using only the models and services you or your organization are comfortable using. + +### Why AnythingLLM? + +AnythingLLM aims to enable you to quickly and comfortably get a ChatGPT equivalent experience using your proprietary documents for your organization with zero compromise on security or comfort. + +### What does AnythingLLM include? +- Full UI +- Full admin console and panel for managing users, chats, model selection, vector db connection, and embedder selection +- Multi-user support and logins +- Supports both desktop and mobile view ports +- Built in vector database where no data leaves your instance at all +- Docker support + +## Install + +### Local via docker + +Running via docker and integrating with your LocalAI instance is a breeze. + +First, pull in the latest AnythingLLM Docker image +`docker pull mintplexlabs/anythingllm:master` + +Next, run the image on a container exposing port `3001`. +`docker run -d -p 3001:3001 mintplexlabs/anythingllm:master` + +Now open `http://localhost:3001` and you will start on-boarding for setting up your AnythingLLM instance to your comfort level + + +## Integration with your LocalAI instance. + +There are two areas where you can leverage your models loaded into LocalAI - LLM and Embedding. Any LLM models should be ready to run a chat completion. + +### LLM model selection + +During onboarding and from the sidebar setting you can select `LocalAI` as your LLM. Here you can set both the model and token limit of the specific model. The dropdown will automatically populate once your url is set. + +The URL should look like `http://localhost:8000/v1` or wherever your LocalAI instance is being served from. Non-localhost URLs are permitted if hosting LocalAI on cloud services. + +![localai-setup](https://github.com/Mintplex-Labs/anything-llm/raw/master/images/LLMproviders/localai-setup.png) + + +### LLM embedding model selection + +During onboarding and from the sidebar setting you can select `LocalAI` as your preferred embedding engine. This model will be the model used when you upload any kind of document via AnythingLLM. Here you can set the model from available models via the LocalAI API. The dropdown will automatically populate once your url is set. + +The URL should look like `http://localhost:8000/v1` or wherever your LocalAI instance is being served from. Non-localhost URLs are permitted if hosting LocalAI on cloud services. + +![localai-setup](https://github.com/Mintplex-Labs/anything-llm/raw/master/images/LLMproviders/localai-embedding.png) \ No newline at end of file diff --git a/docs/content/integrations/BMO-Chatbot.md b/docs/content/integrations/BMO-Chatbot.md new file mode 100644 index 00000000..d2978214 --- /dev/null +++ b/docs/content/integrations/BMO-Chatbot.md @@ -0,0 +1,58 @@ + ++++ +disableToc = false +title = "BMO Chatbo" +weight = 2 ++++ + +Generate and brainstorm ideas while creating your notes using Large Language Models (LLMs) such as OpenAI's "gpt-3.5-turbo" and "gpt-4" for Obsidian. + +![](https://raw.githubusercontent.com/longy2k/obsidian-bmo-chatbot/main/README_images/Screenshot-1.png) + +Github Link - https://github.com/longy2k/obsidian-bmo-chatbot + +## Features +- **Chat from anywhere in Obsidian:** Chat with your bot from anywhere within Obsidian. +- **Chat with current note:** Use your chatbot to reference and engage within your current note. +- **Chatbot responds in Markdown:** Receive formatted responses in Markdown for consistency. +- **Customizable bot name:** Personalize the chatbot's name. +- **System role prompt:** Configure the chatbot to prompt for user roles before responding to messages. +- **Set Max Tokens and Temperature:** Customize the length and randomness of the chatbot's responses with Max Tokens and Temperature settings. +- **System theme color accents:** Seamlessly matches the chatbot's interface with your system's color scheme. +- **Interact with self-hosted Large Language Models (LLMs):** Use the REST API URL provided to interact with self-hosted Large Language Models (LLMs) using [LocalAI](https://localai.io/howtos/). + +## Requirements +To use this plugin, with [LocalAI](https://localai.io/howtos/), you will need to have the self-hosted API set up and running. You can follow the instructions provided by the self-hosted API provider to get it up and running. +Once you have the REST API URL for your self-hosted API, you can use it with this plugin to interact with your models. +Explore some ``GGUF`` models at [theBloke](https://huggingface.co/TheBloke). + +## How to activate the plugin +Two methods: + +Obsidian Community plugins (**Recommended**): + 1. Search for "BMO Chatbot" in the Obsidian Community plugins. + 2. Enable "BMO Chatbot" in the settings. + +To activate the plugin from this repo: + 1. Navigate to the plugin's folder in your terminal. + 2. Run `npm install` to install any necessary dependencies for the plugin. + 3. Once the dependencies have been installed, run `npm run build` to build the plugin. + 4. Once the plugin has been built, it should be ready to activate. + +## Getting Started +To start using the plugin, enable it in your settings menu and enter your OpenAPI key. After completing these steps, you can access the bot panel by clicking on the bot icon in the left sidebar. +If you want to clear the chat history, simply click on the bot icon again in the left ribbon bar. + +## Supported Models +- OpenAI + - gpt-3.5-turbo + - gpt-3.5-turbo-16k + - gpt-4 +- Anthropic + - claude-instant-1.2 + - claude-2.0 +- Any self-hosted models using [LocalAI](https://localai.io/howtos/) + +## Other Notes +"BMO" is a tag name for this project, inspired by the character BMO from the animated TV show "Adventure Time." + diff --git a/docs/content/integrations/Bionic-GPT.md b/docs/content/integrations/Bionic-GPT.md new file mode 100644 index 00000000..e18dec66 --- /dev/null +++ b/docs/content/integrations/Bionic-GPT.md @@ -0,0 +1,103 @@ + ++++ +disableToc = false +title = "BionicGPT" +weight = 2 ++++ + +an on-premise replacement for ChatGPT, offering the advantages of Generative AI while maintaining strict data confidentiality, BionicGPT can run on your laptop or scale into the data center. + +![](https://raw.githubusercontent.com/purton-tech/bionicgpt/main/website/static/github-readme.png) + +BionicGPT Homepage - https://bionic-gpt.com +Github link - https://github.com/purton-tech/bionicgpt + + +## Try it out +Cut and paste the following into a `docker-compose.yaml` file and run `docker-compose up -d` access the user interface on http://localhost:7800/auth/sign_up +This has been tested on an AMD 2700x with 16GB of ram. The included `ggml-gpt4all-j` model runs on CPU only. +**Warning** - The images in this `docker-compose` are large due to having the model weights pre-loaded for convenience. + +```yaml +services: + + # LocalAI with pre-loaded ggml-gpt4all-j + local-ai: + image: ghcr.io/purton-tech/bionicgpt-model-api:llama-2-7b-chat + + # Handles parsing of multiple documents types. + unstructured: + image: downloads.unstructured.io/unstructured-io/unstructured-api:db264d8 + ports: + - "8000:8000" + + # Handles routing between the application, barricade and the LLM API + envoy: + image: ghcr.io/purton-tech/bionicgpt-envoy:1.1.10 + ports: + - "7800:7700" + + # Postgres pre-loaded with pgVector + db: + image: ankane/pgvector + environment: + POSTGRES_PASSWORD: testpassword + POSTGRES_USER: postgres + POSTGRES_DB: finetuna + healthcheck: + test: ["CMD-SHELL", "pg_isready -U postgres"] + interval: 10s + timeout: 5s + retries: 5 + + # Sets up our database tables + migrations: + image: ghcr.io/purton-tech/bionicgpt-db-migrations:1.1.10 + environment: + DATABASE_URL: postgresql://postgres:testpassword@db:5432/postgres?sslmode=disable + depends_on: + db: + condition: service_healthy + + # Barricade handles all /auth routes for user sign up and sign in. + barricade: + image: purtontech/barricade + environment: + # This secret key is used to encrypt cookies. + SECRET_KEY: 190a5bf4b3cbb6c0991967ab1c48ab30790af876720f1835cbbf3820f4f5d949 + DATABASE_URL: postgresql://postgres:testpassword@db:5432/postgres?sslmode=disable + FORWARD_URL: app + FORWARD_PORT: 7703 + REDIRECT_URL: /app/post_registration + depends_on: + db: + condition: service_healthy + migrations: + condition: service_completed_successfully + + # Our axum server delivering our user interface + embeddings-job: + image: ghcr.io/purton-tech/bionicgpt-embeddings-job:1.1.10 + environment: + APP_DATABASE_URL: postgresql://ft_application:testpassword@db:5432/postgres?sslmode=disable + depends_on: + db: + condition: service_healthy + migrations: + condition: service_completed_successfully + + # Our axum server delivering our user interface + app: + image: ghcr.io/purton-tech/bionicgpt:1.1.10 + environment: + APP_DATABASE_URL: postgresql://ft_application:testpassword@db:5432/postgres?sslmode=disable + depends_on: + db: + condition: service_healthy + migrations: + condition: service_completed_successfully +``` + +## Kubernetes Ready + +BionicGPT is optimized to run on Kubernetes and implements the full pipeline of LLM fine tuning from data acquisition to user interface. diff --git a/docs/content/integrations/Flowise.md b/docs/content/integrations/Flowise.md new file mode 100644 index 00000000..bc41bb3c --- /dev/null +++ b/docs/content/integrations/Flowise.md @@ -0,0 +1,54 @@ + ++++ +disableToc = false +title = "Flowise" +weight = 2 ++++ + +Build LLM Apps Easily + +![Flowise](https://raw.githubusercontent.com/FlowiseAI/Flowise/main/images/flowise.png) + +Github Link - https://github.com/FlowiseAI/Flowise + +## ⚑Local Install + +Download and Install [NodeJS](https://nodejs.org/en/download) >= 18.15.0 + +1. Install Flowise + ```bash + npm install -g flowise + ``` +2. Start Flowise + + ```bash + npx flowise start + ``` + +3. Open [http://localhost:3000](http://localhost:3000) + +## 🐳 Docker + +### Docker Compose + +1. Go to `docker` folder at the root of the project +2. Copy `.env.example` file, paste it into the same location, and rename to `.env` +3. `docker-compose up -d` +4. Open [http://localhost:3000](http://localhost:3000) +5. You can bring the containers down by `docker-compose stop --rmi all` + +### Docker Compose (Flowise + LocalAI) + +1. In a command line Run ``git clone https://github.com/go-skynet/LocalAI`` +2. Then run ``cd LocalAI/examples/flowise`` +3. Then run ``docker-compose up -d --pull always`` +4. Open [http://localhost:3000](http://localhost:3000) +5. You can bring the containers down by `docker-compose stop --rmi all` + +## 🌱 Env Variables + +Flowise support different environment variables to configure your instance. You can specify the following variables in the `.env` file inside `packages/server` folder. Read [more](https://github.com/FlowiseAI/Flowise/blob/main/CONTRIBUTING.md#-env-variables) + +## πŸ“– Documentation + +[Flowise Docs](https://docs.flowiseai.com/) diff --git a/docs/content/integrations/K8sGPT.md b/docs/content/integrations/K8sGPT.md new file mode 100644 index 00000000..5db1fd5f --- /dev/null +++ b/docs/content/integrations/K8sGPT.md @@ -0,0 +1,466 @@ + ++++ +disableToc = false +title = "k8sgpt" +weight = 2 ++++ + +a tool for scanning your Kubernetes clusters, diagnosing, and triaging issues in simple English. + +![](https://raw.githubusercontent.com/k8sgpt-ai/k8sgpt/main/images/banner-white.png) + +It has SRE experience codified into its analyzers and helps to pull out the most relevant information to enrich it with AI. + +Github Link - https://github.com/k8sgpt-ai/k8sgpt + +## CLI Installation + +### Linux/Mac via brew + +``` +brew tap k8sgpt-ai/k8sgpt +brew install k8sgpt +``` + +
+ RPM-based installation (RedHat/CentOS/Fedora) + + **32 bit:** + + ``` + curl -LO https://github.com/k8sgpt-ai/k8sgpt/releases/download/v0.3.18/k8sgpt_386.rpm + sudo rpm -ivh k8sgpt_386.rpm + ``` + + + **64 bit:** + + + ``` + curl -LO https://github.com/k8sgpt-ai/k8sgpt/releases/download/v0.3.18/k8sgpt_amd64.rpm + sudo rpm -ivh -i k8sgpt_amd64.rpm + ``` + +
+ +
+ DEB-based installation (Ubuntu/Debian) + + **32 bit:** + + ``` + curl -LO https://github.com/k8sgpt-ai/k8sgpt/releases/download/v0.3.18/k8sgpt_386.deb + sudo dpkg -i k8sgpt_386.deb + ``` + + **64 bit:** + + + ``` + curl -LO https://github.com/k8sgpt-ai/k8sgpt/releases/download/v0.3.18/k8sgpt_amd64.deb + sudo dpkg -i k8sgpt_amd64.deb + ``` + +
+ +
+ + APK-based installation (Alpine) + + **32 bit:** + + ``` + curl -LO https://github.com/k8sgpt-ai/k8sgpt/releases/download/v0.3.18/k8sgpt_386.apk + apk add k8sgpt_386.apk + ``` + + **64 bit:** + + ``` + curl -LO https://github.com/k8sgpt-ai/k8sgpt/releases/download/v0.3.18/k8sgpt_amd64.apk + apk add k8sgpt_amd64.apk + ``` + x +
+ +
+ Failing Installation on WSL or Linux (missing gcc) + When installing Homebrew on WSL or Linux, you may encounter the following error: + + ``` + ==> Installing k8sgpt from k8sgpt-ai/k8sgpt Error: The following formula cannot be installed from a bottle and must be + built from the source. k8sgpt Install Clang or run brew install gcc. + ``` + +If you install gcc as suggested, the problem will persist. Therefore, you need to install the build-essential package. + ``` + sudo apt-get update + sudo apt-get install build-essential + ``` +
+ + +### Windows + +* Download the latest Windows binaries of **k8sgpt** from the [Release](https://github.com/k8sgpt-ai/k8sgpt/releases) + tab based on your system architecture. +* Extract the downloaded package to your desired location. Configure the system *path* variable with the binary location + +## Operator Installation + +To install within a Kubernetes cluster please use our `k8sgpt-operator` with installation instructions available [here](https://github.com/k8sgpt-ai/k8sgpt-operator) + +_This mode of operation is ideal for continuous monitoring of your cluster and can integrate with your existing monitoring such as Prometheus and Alertmanager._ + + +## Quick Start + +* Currently the default AI provider is OpenAI, you will need to generate an API key from [OpenAI](https://openai.com) + * You can do this by running `k8sgpt generate` to open a browser link to generate it +* Run `k8sgpt auth add` to set it in k8sgpt. + * You can provide the password directly using the `--password` flag. +* Run `k8sgpt filters` to manage the active filters used by the analyzer. By default, all filters are executed during analysis. +* Run `k8sgpt analyze` to run a scan. +* And use `k8sgpt analyze --explain` to get a more detailed explanation of the issues. +* You also run `k8sgpt analyze --with-doc` (with or without the explain flag) to get the official documentation from kubernetes. + +## Analyzers + +K8sGPT uses analyzers to triage and diagnose issues in your cluster. It has a set of analyzers that are built in, but +you will be able to write your own analyzers. + +### Built in analyzers + +#### Enabled by default + +- [x] podAnalyzer +- [x] pvcAnalyzer +- [x] rsAnalyzer +- [x] serviceAnalyzer +- [x] eventAnalyzer +- [x] ingressAnalyzer +- [x] statefulSetAnalyzer +- [x] deploymentAnalyzer +- [x] cronJobAnalyzer +- [x] nodeAnalyzer +- [x] mutatingWebhookAnalyzer +- [x] validatingWebhookAnalyzer + +#### Optional + +- [x] hpaAnalyzer +- [x] pdbAnalyzer +- [x] networkPolicyAnalyzer + +## Examples + +_Run a scan with the default analyzers_ + +``` +k8sgpt generate +k8sgpt auth add +k8sgpt analyze --explain +k8sgpt analyze --explain --with-doc +``` + +_Filter on resource_ + +``` +k8sgpt analyze --explain --filter=Service +``` + +_Filter by namespace_ +``` +k8sgpt analyze --explain --filter=Pod --namespace=default +``` + +_Output to JSON_ + +``` +k8sgpt analyze --explain --filter=Service --output=json +``` + +_Anonymize during explain_ + +``` +k8sgpt analyze --explain --filter=Service --output=json --anonymize +``` + +
+ Using filters + +_List filters_ + +``` +k8sgpt filters list +``` + +_Add default filters_ + +``` +k8sgpt filters add [filter(s)] +``` + +### Examples : + +- Simple filter : `k8sgpt filters add Service` +- Multiple filters : `k8sgpt filters add Ingress,Pod` + +_Remove default filters_ + +``` +k8sgpt filters remove [filter(s)] +``` + +### Examples : + +- Simple filter : `k8sgpt filters remove Service` +- Multiple filters : `k8sgpt filters remove Ingress,Pod` + +
+ +
+ + Additional commands + +_List configured backends_ + +``` +k8sgpt auth list +``` + +_Update configured backends_ + +``` +k8sgpt auth update $MY_BACKEND1,$MY_BACKEND2.. +``` + +_Remove configured backends_ + +``` +k8sgpt auth remove $MY_BACKEND1,$MY_BACKEND2.. +``` + +_List integrations_ + +``` +k8sgpt integrations list +``` + +_Activate integrations_ + +``` +k8sgpt integrations activate [integration(s)] +``` + +_Use integration_ + +``` +k8sgpt analyze --filter=[integration(s)] +``` + +_Deactivate integrations_ + +``` +k8sgpt integrations deactivate [integration(s)] +``` + +_Serve mode_ + +``` +k8sgpt serve +``` + +_Analysis with serve mode_ + +``` +curl -X GET "http://localhost:8080/analyze?namespace=k8sgpt&explain=false" +``` +
+ + +## Key Features + +
+ LocalAI provider + +To run local models, it is possible to use OpenAI compatible APIs, for instance [LocalAI](https://github.com/go-skynet/LocalAI) which uses [llama.cpp](https://github.com/ggerganov/llama.cpp) to run inference on consumer-grade hardware. Models supported by LocalAI for instance are Vicuna, Alpaca, LLaMA, Cerebras, GPT4ALL, GPT4ALL-J, Llama2 and koala. + + +To run local inference, you need to download the models first, for instance you can find `gguf` compatible models in [huggingface.com](https://huggingface.co/models?search=gguf) (for example vicuna, alpaca and koala). + +### Start the API server + +To start the API server, follow the instruction in [LocalAI](https://localai.io/howtos/). + +### Run k8sgpt + +To run k8sgpt, run `k8sgpt auth add` with the `localai` backend: + +``` +k8sgpt auth add --backend localai --model --baseurl http://localhost:8080/v1 --temperature 0.7 +``` + +Now you can analyze with the `localai` backend: + +``` +k8sgpt analyze --explain --backend localai +``` + +
+ +
+Setting a new default AI provider + +There may be scenarios where you wish to have K8sGPT plugged into several default AI providers. In this case you may wish to use one as a new default, other than OpenAI which is the project default. + +_To view available providers_ + +``` +k8sgpt auth list +Default: +> openai +Active: +> openai +> azureopenai +Unused: +> localai +> noopai + +``` + + +_To set a new default provider_ + +``` +k8sgpt auth default -p azureopenai +Default provider set to azureopenai +``` + + +
+ + +
+ +With this option, the data is anonymized before being sent to the AI Backend. During the analysis execution, `k8sgpt` retrieves sensitive data (Kubernetes object names, labels, etc.). This data is masked when sent to the AI backend and replaced by a key that can be used to de-anonymize the data when the solution is returned to the user. + + + Anonymization + +1. Error reported during analysis: +```bash +Error: HorizontalPodAutoscaler uses StatefulSet/fake-deployment as ScaleTargetRef which does not exist. +``` + +2. Payload sent to the AI backend: +```bash +Error: HorizontalPodAutoscaler uses StatefulSet/tGLcCRcHa1Ce5Rs as ScaleTargetRef which does not exist. +``` + +3. Payload returned by the AI: +```bash +The Kubernetes system is trying to scale a StatefulSet named tGLcCRcHa1Ce5Rs using the HorizontalPodAutoscaler, but it cannot find the StatefulSet. The solution is to verify that the StatefulSet name is spelled correctly and exists in the same namespace as the HorizontalPodAutoscaler. +``` + +4. Payload returned to the user: +```bash +The Kubernetes system is trying to scale a StatefulSet named fake-deployment using the HorizontalPodAutoscaler, but it cannot find the StatefulSet. The solution is to verify that the StatefulSet name is spelled correctly and exists in the same namespace as the HorizontalPodAutoscaler. +``` + +Note: **Anonymization does not currently apply to events.** + +### Further Details + +**Anonymization does not currently apply to events.** + +*In a few analysers like Pod, we feed to the AI backend the event messages which are not known beforehand thus we are not masking them for the **time being**.* + +- The following is the list of analysers in which data is **being masked**:- + + - Statefulset + - Service + - PodDisruptionBudget + - Node + - NetworkPolicy + - Ingress + - HPA + - Deployment + - Cronjob + +- The following is the list of analysers in which data is **not being masked**:- + + - RepicaSet + - PersistentVolumeClaim + - Pod + - **_*Events_** + +***Note**: + - k8gpt will not mask the above analysers because they do not send any identifying information except **Events** analyser. + - Masking for **Events** analyzer is scheduled in the near future as seen in this [issue](https://github.com/k8sgpt-ai/k8sgpt/issues/560). _Further research has to be made to understand the patterns and be able to mask the sensitive parts of an event like pod name, namespace etc._ + +- The following is the list of fields which are not **being masked**:- + + - Describe + - ObjectStatus + - Replicas + - ContainerStatus + - **_*Event Message_** + - ReplicaStatus + - Count (Pod) + +***Note**: + - It is quite possible the payload of the event message might have something like "super-secret-project-pod-X crashed" which we don't currently redact _(scheduled in the near future as seen in this [issue](https://github.com/k8sgpt-ai/k8sgpt/issues/560))_. + +### Proceed with care + + - The K8gpt team recommends using an entirely different backend **(a local model) in critical production environments**. By using a local model, you can rest assured that everything stays within your DMZ, and nothing is leaked. + - If there is any uncertainty about the possibility of sending data to a public LLM (open AI, Azure AI) and it poses a risk to business-critical operations, then, in such cases, the use of public LLM should be avoided based on personal assessment and the jurisdiction of risks involved. + + +
+ +
+ Configuration management + +`k8sgpt` stores config data in the `$XDG_CONFIG_HOME/k8sgpt/k8sgpt.yaml` file. The data is stored in plain text, including your OpenAI key. + +Config file locations: +| OS | Path | +| ------- | ------------------------------------------------ | +| MacOS | ~/Library/Application Support/k8sgpt/k8sgpt.yaml | +| Linux | ~/.config/k8sgpt/k8sgpt.yaml | +| Windows | %LOCALAPPDATA%/k8sgpt/k8sgpt.yaml | +
+ +
+There may be scenarios where caching remotely is preferred. +In these scenarios K8sGPT supports AWS S3 Integration. + + Remote caching + + _As a prerequisite `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` are required as environmental variables._ + +_Adding a remote cache_ + +Note: this will create the bucket if it does not exist +``` +k8sgpt cache add --region --bucket +``` + +_Listing cache items_ +``` +k8sgpt cache list +``` + +_Removing the remote cache_ +Note: this will not delete the bucket +``` +k8sgpt cache remove --bucket +``` +
+ + +## Documentation + +Find our official documentation available [here](https://docs.k8sgpt.ai) diff --git a/docs/content/integrations/Kairos.md b/docs/content/integrations/Kairos.md new file mode 100644 index 00000000..417562d3 --- /dev/null +++ b/docs/content/integrations/Kairos.md @@ -0,0 +1,39 @@ + ++++ +disableToc = false +title = "Kairos" +weight = 2 ++++ + +![Kairos Logo](https://user-images.githubusercontent.com/2420543/193010398-72d4ba6e-7efe-4c2e-b7ba-d3a826a55b7d.png) + +[Kairos](https://github.com/kairos-io/kairos) - Kubernetes-focused, Cloud Native Linux meta-distribution + +The immutable Linux meta-distribution for edge Kubernetes. + +Github Link - https://github.com/kairos-io/kairos + +## Intro + +With Kairos you can build immutable, bootable Kubernetes and OS images for your edge devices as easily as writing a Dockerfile. Optional P2P mesh with distributed ledger automates node bootstrapping and coordination. Updating nodes is as easy as CI/CD: push a new image to your container registry and let secure, risk-free A/B atomic upgrades do the rest. Kairos is part of the Secure Edge-Native Architecture (SENA) to securely run workloads at the Edge ([whitepaper](https://github.com/kairos-io/kairos/files/11250843/Secure-Edge-Native-Architecture-white-paper-20240417.3.pdf)). + +Kairos (formerly `c3os`) is an open-source project which brings Edge, cloud, and bare metal lifecycle OS management into the same design principles with a unified Cloud Native API. + +## At-a-glance: + +- :bowtie: Community Driven +- :octocat: Open Source +- :lock: Linux immutable, meta-distribution +- :key: Secure +- :whale: Container-based +- :penguin: Distribution agnostic + +## Kairos can be used to: + +- Easily spin-up a Kubernetes cluster, with the Linux distribution of your choice :penguin: +- Create your Immutable infrastructure, no more infrastructure drift! :lock: +- Manage the cluster lifecycle with Kubernetesβ€”from building to provisioning, and upgrading :rocket: +- Create a multipleβ€”node, a single cluster that spans up across regions :earth_africa: + +For comprehensive docs, tutorials, and examples see our [documentation](https://kairos.io/docs/getting-started/). + diff --git a/docs/content/integrations/LLMStack.md b/docs/content/integrations/LLMStack.md new file mode 100644 index 00000000..70b582fe --- /dev/null +++ b/docs/content/integrations/LLMStack.md @@ -0,0 +1,60 @@ + ++++ +disableToc = false +title = "LLMStack" +weight = 2 ++++ + +![LLMStack](https://llmstack.ai/img/llmstack-logo-light-white-bg.svg) + +[LLMStack](https://github.com/trypromptly/LLMStack) - LLMStack is a no-code platform for building generative AI applications, chatbots, agents and connecting them to your data and business processes. + +Github Link - https://github.com/trypromptly/LLMStack + +## Overview + +Build tailor-made generative AI applications, chatbots and agents that cater to your unique needs by chaining multiple LLMs. Seamlessly integrate your own data and GPT-powered models without any coding experience using LLMStack's no-code builder. Trigger your AI chains from Slack or Discord. Deploy to the cloud or on-premise. + +![llmstack-quickstart](https://github.com/trypromptly/LLMStack/assets/431988/72de45f5-23f9-4cd3-91b0-7d5ae97534c3) + +## Getting Started + +LLMStack deployment comes with a default admin account whose credentials are `admin` and `promptly`. _Be sure to change the password from admin panel after logging in_. + +## Features + +**πŸ”— Chain multiple models**: LLMStack allows you to chain multiple LLMs together to build complex generative AI applications. + +**πŸ“Š Use generative AI on your Data**: Import your data into your accounts and use it in AI chains. LLMStack allows importing various types (_CSV, TXT, PDF, DOCX, PPTX etc.,_) of data from a variety of sources (_gdrive, notion, websites, direct uploads etc.,_). Platform will take care of preprocessing and vectorization of your data and store it in the vector database that is provided out of the box. + +**πŸ› οΈ No-code builder**: LLMStack comes with a no-code builder that allows you to build AI chains without any coding experience. You can chain multiple LLMs together and connect them to your data and business processes. + +**☁️ Deploy to the cloud or on-premise**: LLMStack can be deployed to the cloud or on-premise. You can deploy it to your own infrastructure or use our cloud offering at [Promptly](https://trypromptly.com). + +**πŸš€ API access**: Apps or chatbots built with LLMStack can be accessed via HTTP API. You can also trigger your AI chains from **_Slack_** or **_Discord_**. + +**🏒 Multi-tenant**: LLMStack is multi-tenant. You can create multiple organizations and add users to them. Users can only access the data and AI chains that belong to their organization. + +## What can you build with LLMStack? + +Using LLMStack you can build a variety of generative AI applications, chatbots and agents. Here are some examples: + +**πŸ“ Text generation**: You can build apps that generate product descriptions, blog posts, news articles, tweets, emails, chat messages, etc., by using text generation models and optionally connecting your data. Check out this [marketing content generator](https://trypromptly.com/app/50ee8bae-712e-4b95-9254-74d7bcf3f0cb) for example + +**πŸ€– Chatbots**: You can build chatbots trained on your data powered by ChatGPT like [Promptly Help](https://trypromptly.com/app/f4d7cb50-1805-4add-80c5-e30334bce53c) that is embedded on Promptly website + +**🎨 Multimedia generation**: Build complex applications that can generate text, images, videos, audio, etc. from a prompt. This [story generator](https://trypromptly.com/app/9d6da897-67cf-4887-94ec-afd4b9362655) is an example + +**πŸ—£οΈ Conversational AI**: Build conversational AI systems that can have a conversation with a user. Check out this [Harry Potter character chatbot](https://trypromptly.com/app/bdeb9850-b32e-44cf-b2a8-e5d54dc5fba4) + +**πŸ” Search augmentation**: Build search augmentation systems that can augment search results with additional information using APIs. Sharebird uses LLMStack to augment search results with AI generated answer from their content similar to Bing's chatbot + +**πŸ’¬ Discord and Slack bots**: Apps built on LLMStack can be triggered from Slack or Discord. You can easily connect your AI chains to Slack or Discord from LLMStack's no-code app editor. Check out our [Discord server](https://discord.gg/3JsEzSXspJ) to interact with one such bot. + +## Administration + +Login to [http://localhost:3000/admin](http://localhost:3000/admin) using the admin account. You can add users and assign them to organizations in the admin panel. + +## Documentation + +Check out our documentation at [llmstack.ai/docs](https://llmstack.ai/docs/) to learn more about LLMStack. diff --git a/docs/content/integrations/LinGoose.md b/docs/content/integrations/LinGoose.md new file mode 100644 index 00000000..15ab1629 --- /dev/null +++ b/docs/content/integrations/LinGoose.md @@ -0,0 +1,74 @@ + ++++ +disableToc = false +title = "LinGoose" +weight = 2 ++++ + +**LinGoose** (_Lingo + Go + Goose_ πŸͺΏ) aims to be a complete Go framework for creating LLM apps. πŸ€– βš™οΈ + +![lin](https://lingoose.io/assets/img/lingoose-small.png) + +Github Link - https://github.com/henomis/lingoose + +## Overview + +**LinGoose** is a powerful Go framework for developing Large Language Model (LLM) based applications using pipelines. It is designed to be a complete solution and provides multiple components, including Prompts, Templates, Chat, Output Decoders, LLM, Pipelines, and Memory. With **LinGoose**, you can interact with LLM AI through prompts and generate complex templates. Additionally, it includes a chat feature, allowing you to create chatbots. The Output Decoders component enables you to extract specific information from the output of the LLM, while the LLM interface allows you to send prompts to various AI, such as the ones provided by OpenAI. You can chain multiple LLM steps together using Pipelines and store the output of each step in Memory for later retrieval. **LinGoose** also includes a Document component, which is used to store text, and a Loader component, which is used to load Documents from various sources. Finally, it includes TextSplitters, which are used to split text or Documents into multiple parts, Embedders, which are used to embed text or Documents into embeddings, and Indexes, which are used to store embeddings and documents and to perform searches. + +## Components + +**LinGoose** is composed of multiple components, each one with its own purpose. + +| Component | Package | Description | +| ----------------- | ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| **Prompt** | [prompt](prompt/) | Prompts are the way to interact with LLM AI. They can be simple text, or more complex templates. Supports **Prompt Templates** and **[Whisper](https://openai.com) prompt** | +| **Chat Prompt** | [chat](chat/) | Chat is the way to interact with the chat LLM AI. It can be a simple text prompt, or a more complex chatbot. | +| **Decoders** | [decoder](decoder/) | Output decoders are used to decode the output of the LLM. They can be used to extract specific information from the output. Supports **JSONDecoder** and **RegExDecoder** | +| **LLMs** | [llm](llm/) | LLM is an interface to various AI such as the ones provided by OpenAI. It is responsible for sending the prompt to the AI and retrieving the output. Supports **[LocalAI](https://localai.io/howtos/)**, **[HuggingFace](https://huggingface.co)** and **[Llama.cpp](https://github.com/ggerganov/llama.cpp)**. | +| **Pipelines** | [pipeline](pipeline/) | Pipelines are used to chain multiple LLM steps together. | +| **Memory** | [memory](memory/) | Memory is used to store the output of each step. It can be used to retrieve the output of a previous step. Supports memory in **Ram** | +| **Document** | [document](document/) | Document is used to store a text | +| **Loaders** | [loader](loader/) | Loaders are used to load Documents from various sources. Supports **TextLoader**, **DirectoryLoader**, **PDFToTextLoader** and **PubMedLoader** . | +| **TextSplitters** | [textsplitter](textsplitter/) | TextSplitters are used to split text or Documents into multiple parts. Supports **RecursiveTextSplitter**. | +| **Embedders** | [embedder](embedder/) | Embedders are used to embed text or Documents into embeddings. Supports **[OpenAI](https://openai.com)** | +| **Indexes** | [index](index/) | Indexes are used to store embeddings and documents and to perform searches. Supports **SimpleVectorIndex**, **[Pinecone](https://pinecone.io)** and **[Qdrant](https://qdrant.tech)** | + +## Usage + +Please refer to the documentation at [lingoose.io](https://lingoose.io/docs/) to understand how to use LinGoose. If you prefer the πŸ‘‰ [examples directory](examples/) contains a lot of examples πŸš€. +However, here is a **powerful** example of what **LinGoose** is capable of: + +_Talk is cheap. Show me the [code](examples/)._ - Linus Torvalds + +```go +package main + +import ( + "context" + + openaiembedder "github.com/henomis/lingoose/embedder/openai" + "github.com/henomis/lingoose/index/option" + simplevectorindex "github.com/henomis/lingoose/index/simpleVectorIndex" + "github.com/henomis/lingoose/llm/openai" + "github.com/henomis/lingoose/loader" + qapipeline "github.com/henomis/lingoose/pipeline/qa" + "github.com/henomis/lingoose/textsplitter" +) + +func main() { + docs, _ := loader.NewPDFToTextLoader("./kb").WithPDFToTextPath("/opt/homebrew/bin/pdftotext").WithTextSplitter(textsplitter.NewRecursiveCharacterTextSplitter(2000, 200)).Load(context.Background()) + index := simplevectorindex.New("db", ".", openaiembedder.New(openaiembedder.AdaEmbeddingV2)) + index.LoadFromDocuments(context.Background(), docs) + qapipeline.New(openai.NewChat().WithVerbose(true)).WithIndex(index).Query(context.Background(), "What is the NATO purpose?", option.WithTopK(1)) +} +``` + +This is the _famous_ 4-lines **lingoose** knowledge base chatbot. πŸ€– + +## Installation + +Be sure to have a working Go environment, then run the following command: + +```shell +go get github.com/henomis/lingoose +``` diff --git a/docs/content/integrations/LocalAGI.md b/docs/content/integrations/LocalAGI.md new file mode 100644 index 00000000..69ff1d23 --- /dev/null +++ b/docs/content/integrations/LocalAGI.md @@ -0,0 +1,174 @@ + ++++ +disableToc = false +title = "LocalAGI" +weight = 2 ++++ + +LocalAGI is a small πŸ€– virtual assistant that you can run locally, made by the [LocalAI](https://github.com/go-skynet/LocalAI) author and powered by it. + +![localagi](https://github.com/mudler/LocalAGI/assets/2420543/b69817ce-2361-4234-a575-8f578e159f33) + +[AutoGPT](https://github.com/Significant-Gravitas/Auto-GPT), [babyAGI](https://github.com/yoheinakajima/babyagi), ... and now LocalAGI! + +Github Link - https://github.com/mudler/LocalAGI + +## Info + +The goal is: +- Keep it simple, hackable and easy to understand +- No API keys needed, No cloud services needed, 100% Local. Tailored for Local use, however still compatible with OpenAI. +- Smart-agent/virtual assistant that can do tasks +- Small set of dependencies +- Run with Docker/Podman/Containers +- Rather than trying to do everything, provide a good starting point for other projects + +Note: Be warned! It was hacked in a weekend, and it's just an experiment to see what can be done with local LLMs. + +![Screenshot from 2023-08-05 22-40-40](https://github.com/mudler/LocalAGI/assets/2420543/144da83d-3879-44f2-985c-efd690e2b136) + +## πŸš€ Features + +- 🧠 LLM for intent detection +- 🧠 Uses functions for actions + - πŸ“ Write to long-term memory + - πŸ“– Read from long-term memory + - 🌐 Internet access for search + - :card_file_box: Write files + - πŸ”Œ Plan steps to achieve a goal +- πŸ€– Avatar creation with Stable Diffusion +- πŸ—¨οΈ Conversational +- πŸ—£οΈ Voice synthesis with TTS + +## :book: Quick start + +No frills, just run docker-compose and start chatting with your virtual assistant: + +```bash +# Modify the configuration +# nano .env +docker-compose run -i --rm localagi +``` + +## How to use it + +By default localagi starts in interactive mode + +### Examples + +Road trip planner by limiting searching to internet to 3 results only: + +```bash +docker-compose run -i --rm localagi \ + --skip-avatar \ + --subtask-context \ + --postprocess \ + --search-results 3 \ + --prompt "prepare a plan for my roadtrip to san francisco" +``` + +Limit results of planning to 3 steps: + +```bash +docker-compose run -i --rm localagi \ + --skip-avatar \ + --subtask-context \ + --postprocess \ + --search-results 1 \ + --prompt "do a plan for my roadtrip to san francisco" \ + --plan-message "The assistant replies with a plan of 3 steps to answer the request with a list of subtasks with logical steps. The reasoning includes a self-contained, detailed and descriptive instruction to fullfill the task." +``` + +### Advanced + +localagi has several options in the CLI to tweak the experience: + +- `--system-prompt` is the system prompt to use. If not specified, it will use none. +- `--prompt` is the prompt to use for batch mode. If not specified, it will default to interactive mode. +- `--interactive` is the interactive mode. When used with `--prompt` will drop you in an interactive session after the first prompt is evaluated. +- `--skip-avatar` will skip avatar creation. Useful if you want to run it in a headless environment. +- `--re-evaluate` will re-evaluate if another action is needed or we have completed the user request. +- `--postprocess` will postprocess the reasoning for analysis. +- `--subtask-context` will include context in subtasks. +- `--search-results` is the number of search results to use. +- `--plan-message` is the message to use during planning. You can override the message for example to force a plan to have a different message. +- `--tts-api-base` is the TTS API base. Defaults to `http://api:8080`. +- `--localai-api-base` is the LocalAI API base. Defaults to `http://api:8080`. +- `--images-api-base` is the Images API base. Defaults to `http://api:8080`. +- `--embeddings-api-base` is the Embeddings API base. Defaults to `http://api:8080`. +- `--functions-model` is the functions model to use. Defaults to `functions`. +- `--embeddings-model` is the embeddings model to use. Defaults to `all-MiniLM-L6-v2`. +- `--llm-model` is the LLM model to use. Defaults to `gpt-4`. +- `--tts-model` is the TTS model to use. Defaults to `en-us-kathleen-low.onnx`. +- `--stablediffusion-model` is the Stable Diffusion model to use. Defaults to `stablediffusion`. +- `--stablediffusion-prompt` is the Stable Diffusion prompt to use. Defaults to `DEFAULT_PROMPT`. +- `--force-action` will force a specific action. +- `--debug` will enable debug mode. + +### Customize + +To use a different model, you can see the examples in the `config` folder. +To select a model, modify the `.env` file and change the `PRELOAD_MODELS_CONFIG` variable to use a different configuration file. + +### Caveats + +The "goodness" of a model has a big impact on how LocalAGI works. Currently `13b` models are powerful enough to actually able to perform multi-step tasks or do more actions. However, it is quite slow when running on CPU (no big surprise here). + +The context size is a limitation - you can find in the `config` examples to run with superhot 8k context size, but the quality is not good enough to perform complex tasks. + +## What is LocalAGI? + +It is a dead simple experiment to show how to tie the various LocalAI functionalities to create a virtual assistant that can do tasks. It is simple on purpose, trying to be minimalistic and easy to understand and customize for everyone. + +It is different from babyAGI or AutoGPT as it uses [LocalAI functions](https://localai.io/features/openai-functions/) - it is a from scratch attempt built on purpose to run locally with [LocalAI](https://localai.io) (no API keys needed!) instead of expensive, cloud services. It sets apart from other projects as it strives to be small, and easy to fork on. + +### How it works? + +`LocalAGI` just does the minimal around LocalAI functions to create a virtual assistant that can do generic tasks. It works by an endless loop of `intent detection`, `function invocation`, `self-evaluation` and `reply generation` (if it decides to reply! :)). The agent is capable of planning complex tasks by invoking multiple functions, and remember things from the conversation. + +In a nutshell, it goes like this: + +- Decide based on the conversation history if it needs to take an action by using functions. It uses the LLM to detect the intent from the conversation. +- if it need to take an action (e.g. "remember something from the conversation" ) or generate complex tasks ( executing a chain of functions to achieve a goal ) it invokes the functions +- it re-evaluates if it needs to do any other action +- return the result back to the LLM to generate a reply for the user + +Under the hood LocalAI converts functions to llama.cpp BNF grammars. While OpenAI fine-tuned a model to reply to functions, LocalAI constrains the LLM to follow grammars. This is a much more efficient way to do it, and it is also more flexible as you can define your own functions and grammars. For learning more about this, check out the [LocalAI documentation](https://localai.io/docs/llm) and my tweet that explains how it works under the hoods: https://twitter.com/mudler_it/status/1675524071457533953. + +### Agent functions + +The intention of this project is to keep the agent minimal, so can be built on top of it or forked. The agent is capable of doing the following functions: +- remember something from the conversation +- recall something from the conversation +- search something from the internet +- plan a complex task by invoking multiple functions +- write files to disk + +## Roadmap + +- [x] 100% Local, with Local AI. NO API KEYS NEEDED! +- [x] Create a simple virtual assistant +- [x] Make the virtual assistant do functions like store long-term memory and autonomously search between them when needed +- [x] Create the assistant avatar with Stable Diffusion +- [x] Give it a voice +- [ ] Use weaviate instead of Chroma +- [ ] Get voice input (push to talk or wakeword) +- [ ] Make a REST API (OpenAI compliant?) so can be plugged by e.g. a third party service +- [x] Take a system prompt so can act with a "character" (e.g. "answer in rick and morty style") + +## Development + +Run docker-compose with main.py checked-out: + +```bash +docker-compose run -v main.py:/app/main.py -i --rm localagi +``` + +## Notes + +- a 13b model is enough for doing contextualized research and search/retrieve memory +- a 30b model is enough to generate a roadmap trip plan ( so cool! ) +- With superhot models looses its magic, but maybe suitable for search +- Context size is your enemy. `--postprocess` some times helps, but not always +- It can be silly! +- It is slow on CPU, don't expect `7b` models to perform good, and `13b` models perform better but on CPU are quite slow. diff --git a/docs/content/integrations/Mattermost-OpenOps.md b/docs/content/integrations/Mattermost-OpenOps.md new file mode 100644 index 00000000..db351918 --- /dev/null +++ b/docs/content/integrations/Mattermost-OpenOps.md @@ -0,0 +1,84 @@ + ++++ +disableToc = false +title = "Mattermost-OpenOps" +weight = 2 ++++ + +OpenOps is an open source platform for applying generative AI to workflows in secure environments. + +![image](https://github.com/azigler/zigmud/assets/7295363/91901757-923d-4fa3-a0e2-c884561aab7e) + +Github Link - https://github.com/mattermost/openops + +* Enables AI exploration with full data control in a multi-user pilot. +* Supports broad ecosystem of AI models from OpenAI and Microsoft to open source LLMs from Hugging Face. +* Speeds development of custom security, compliance and data custody policy from early evaluation to future scale. + +Unliked closed source, vendor-controlled environments where data controls cannot be audited, OpenOps provides a transparent, open source, customer-controlled platform for developing, securing and auditing AI-accelerated workflows. + +### Why Open Ops? + +Everyone is in a race to deploy generative AI solutions, but need to do so in a responsible and safe way. OpenOps lets you run powerful models in a safe sandbox to establish the right safety protocols before rolling out to users. Here's an example of an evaluation, implementation, and iterative rollout process: + +- **Phase 1:** Set up the OpenOps collaboration sandbox, a self-hosted service providing multi-user chat and integration with GenAI. *(this repository)* + +- **Phase 2:** Evaluate different GenAI providers, whether from public SaaS services like OpenAI or local open source models, based on your security and privacy requirements. + +- **Phase 3:** Invite select early adopters (especially colleagues focusing on trust and safety) to explore and evaluate the GenAI based on their workflows. Observe behavior, and record user feedback, and identify issues. Iterate on workflows and usage policies together in the sandbox. Consider issues such as data leakage, legal/copyright, privacy, response correctness and appropriateness as you apply AI at scale. + +- **Phase 4:** Set and implement policies as availability is incrementally rolled out to your wider organization. + +### What does OpenOps include? + +Deploying the OpenOps sandbox includes the following components: +- 🏰 **Mattermost Server** - Open source, self-hosted alternative to Discord and Slack for strict security environments with playbooks/workflow automation, tools integration, real time 1-1 and group messaging, audio calling and screenshare. +- πŸ“™ **PostgreSQL** - Database for storing private data from multi-user, chat collaboration discussions and audit history. +- πŸ€– [**Mattermost AI plugin**](https://github.com/mattermost/mattermost-plugin-ai) - Extension of Mattermost platform for AI bot and generative AI integration. +- πŸ¦™ **Open Source, Self-Hosted LLM models** - Models for evaluation and use case development from Hugging Face and other sources, including GPT4All (runs on a laptop in 4.2 GB) and Falcon LLM (example of leading scaled self-hosted models). Uses [LocalAI](https://github.com/go-skynet/LocalAI). +- πŸ”ŒπŸ§  ***(Configurable)* Closed Source, Vendor-Hosted AI models** - SaaS-based GenAI models from Azure AI, OpenAI, & Anthropic. +- πŸ”ŒπŸ“± ***(Configurable)* Mattermost Mobile and Desktop Apps** - End-user apps for future production deployment. + +## Install + +### Local + +***Rather watch a video?** πŸ“½οΈ Check out our YouTube tutorial video for getting started with OpenOps: https://www.youtube.com/watch?v=20KSKBzZmik* + +***Rather read a blog post?** πŸ“ Check out our Mattermost blog post for getting started with OpenOps: https://mattermost.com/blog/open-source-ai-framework/* + +1. Clone the repository: `git clone https://github.com/mattermost/openops && cd openops` +2. Start docker services and configure plugin + - **If using OpenAI:** + - Run `env backend=openai ./init.sh` + - Run `./configure_openai.sh sk-` to add your API credentials *or* use the Mattermost system console to configure the plugin + - **If using LocalAI:** + - Run `env backend=localai ./init.sh` + - Run `env backend=localai ./download_model.sh` to download one *or* supply your own gguf formatted model in the `models` directory. +3. Access Mattermost and log in with the credentials provided in the terminal. + +When you log in, you will start out in a direct message with your AI Assistant bot. Now you can start exploring AI [usages](#usage). + +### Gitpod +[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#backend=openai/https://github.com/mattermost/openops) + +1. Click the above badge and start your Gitpod workspace +2. You will see VSCode interface and the workspace will configure itself automatically. Wait for the services to start and for your `root` login for Mattermost to be generated in the terminal +3. Run `./configure_openai.sh sk-` to add your API credentials *or* use the Mattermost system console to configure the plugin +4. Access Mattermost and log in with the credentials supplied in the terminal. + +When you log in, you will start out in a direct message with your AI Assistant bot. Now you can start exploring AI [usages](#usage). + +## Usage + +There many ways to integrate generative AI into confidential, self-hosted workplace discussions. To help you get started, here are some examples provided in OpenOps: + +| Title | Image | Description | +| ---------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Streaming Conversation** | ![Streaming Conversation](https://github.com/mattermost/mattermost-plugin-ai/blob/master/img/summarize_thread.gif?raw=true) | The OpenOps platform reproduces streamed replies from popular GenAI chatbots creating a sense of responsiveness and conversational engagement, while masking actual wait times. | +| **Thread Summarization** | ![Thread Summarization](https://github.com/mattermost/mattermost-plugin-ai/blob/master/img/summarize_button.gif?raw=true) | Use the "Summarize Thread" menu option or the `/summarize` command to get a summary of the thread in a Direct Message from an AI bot. AI-generated summaries can be created from private, chat-based discussions to speed information flows and decision-making while reducing the time and cost required for organizations to stay up-to-date. | +| **Contextual Interrogation** | ![Contextual Interrogation](https://github.com/mattermost/mattermost-plugin-ai/blob/master/img/thread_interrogation.png?raw=true) | Users can ask follow-up questions to discussion summaries generated by AI bots to learn more about the underlying information without reviewing the raw input. | +| **Meeting Summarization** | ![Meeting Summarization](https://github.com/mattermost/mattermost-plugin-ai/blob/master/img/meeting_summary.png?raw=true) | Create meeting summaries! Designed to work with the [Mattermost Calls plugin](https://github.com/mattermost/mattermost-plugin-calls) recording feature. | +| **Chat with AI Bots** | ![Chat with AI Bots](https://github.com/mattermost/mattermost-plugin-ai/blob/master/img/chat_anywhere.png?raw=true) | End users can interact with the AI bot in any discussion thread by mentioning AI bot with an `@` prefix, as they would get the attention of a human user. The bot will receive the thread information as context for replying. | +| **Sentiment Analysis** | [![React for me](https://github.com/mattermost/openops/assets/3191642/56bf132a-b834-46a3-882c-9b1f38a9f9fc)](https://github.com/mattermost/mattermost-plugin-ai/assets/3191642/5282b066-86b5-478d-ae10-57c3cb3ba038) | Use the "React for me" menu option to have the AI bot analyze the sentiment of messages use its conclusion to deliver an emoji reaction on the user’s behalf. | +| **Reinforcement Learning from Human Feedback** | ![RLHF](https://github.com/mattermost/openops/assets/3191642/ec330f7e-2aba-4370-bf21-e585a793160e) | Bot posts are distinguished from human posts by having πŸ‘ πŸ‘Ž icons available for human end users to signal whether the AI response was positive or problematic. The history of responses can be used in future to fine-tune the underlying AI models, as well as to potentially evaluate the responses of new models based on their correlation to positive and negative user ratings for past model responses. | diff --git a/docs/content/integrations/Mods.md b/docs/content/integrations/Mods.md new file mode 100644 index 00000000..e1550e40 --- /dev/null +++ b/docs/content/integrations/Mods.md @@ -0,0 +1,246 @@ + ++++ +disableToc = false +title = "Mods" +weight = 2 ++++ + +

+ Mods product art and type treatment +
+

+ +AI for the command line, built for pipelines. + +

a GIF of mods running

+ +LLM based AI is really good at interpreting the output of commands and +returning the results in CLI friendly text formats like Markdown. Mods is a +simple tool that makes it super easy to use AI on the command line and in your +pipelines. Mods works with [OpenAI](https://platform.openai.com/account/api-keys) +and [LocalAI](https://github.com/go-skynet/LocalAI) + +To get started, [install Mods](#installation) and check out some of the +examples below. Since Mods has built-in Markdown formatting, you may also want +to grab [Glow](https://github.com/charmbracelet/glow) to give the output some +_pizzazz_. + +Github Link - https://github.com/charmbracelet/mods + +## What Can It Do? + +Mods works by reading standard in and prefacing it with a prompt supplied in +the `mods` arguments. It sends the input text to an LLM and prints out the +result, optionally asking the LLM to format the response as Markdown. This +gives you a way to "question" the output of a command. Mods will also work on +standard in or an argument supplied prompt individually. + +## Installation + +Mods works with OpenAI compatible endpoints. By default, Mods is configured to +support OpenAI's official API and a LocalAI installation running on port 8080. +You can configure additional endpoints in your settings file by running +`mods --settings`. + +### LocalAI + +LocalAI allows you to run a multitude of models locally. Mods works with the +GPT4ALL-J model as setup in [this tutorial](https://github.com/go-skynet/LocalAI#example-use-gpt4all-j-model). +You can define more LocalAI models and endpoints with `mods --settings`. + +### Install Mods + +```bash +# macOS or Linux +brew install charmbracelet/tap/mods + +# Arch Linux (btw) +yay -S mods + +# Debian/Ubuntu +sudo mkdir -p /etc/apt/keyrings +curl -fsSL https://repo.charm.sh/apt/gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/charm.gpg +echo "deb [signed-by=/etc/apt/keyrings/charm.gpg] https://repo.charm.sh/apt/ * *" | sudo tee /etc/apt/sources.list.d/charm.list +sudo apt update && sudo apt install mods + +# Fedora/RHEL +echo '[charm] +name=Charm +baseurl=https://repo.charm.sh/yum/ +enabled=1 +gpgcheck=1 +gpgkey=https://repo.charm.sh/yum/gpg.key' | sudo tee /etc/yum.repos.d/charm.repo +sudo yum install mods +``` + +Or, download it: + +- [Packages][releases] are available in Debian and RPM formats +- [Binaries][releases] are available for Linux, macOS, and Windows + +[releases]: https://github.com/charmbracelet/mods/releases + +Or, just install it with `go`: + +```sh +go install github.com/charmbracelet/mods@latest +``` + +## Saving conversations + +Conversations save automatically. They are identified by their latest prompt. +Similar to Git, conversations have a SHA-1 identifier and a title. Conversations +can be updated, maintaining their SHA-1 identifier but changing their title. + +

a GIF listing and showing saved conversations.

+ +## Settings + +`--settings` + +Mods lets you tune your query with a variety of settings. You can configure +Mods with `mods --settings` or pass the settings as environment variables +and flags. + +#### Model + +`-m`, `--model`, `MODS_MODEL` + +Mods uses `gpt-4` with OpenAI by default but you can specify any model as long +as your account has access to it or you have installed locally with LocalAI. + +You can add new models to the settings with `mods --settings`. +You can also specify a model and an API endpoint with `-m` and `-a` +to use models not in the settings file. + +#### Title + +`-t`, `--title` + +Set a custom save title for the conversation. + +#### Continue last + +`-C`, `--continue-last` + +Continues the previous conversation. + +#### Continue + +`-c`, `--continue` + +Continue from the last response or a given title or SHA1. + +#### List + +`-l`, `--list` + +Lists all saved conversations. + +#### Show + +`-s`, `--show` + +Show the saved conversation the given title or SHA1. + +#### Delete + +`--delete` + +Deletes the saved conversation with the given title or SHA1. + +#### Format As Markdown + +`-f`, `--format`, `MODS_FORMAT` + +Ask the LLM to format the response as markdown. You can edit the text passed to +the LLM with `mods --settings` then changing the `format-text` value. + +#### Raw + +`-r`, `--raw`, `MODS_RAW` + +Print the raw response without syntax highlighting, even when connect to a TTY. + +#### Max Tokens + +`--max-tokens`, `MODS_MAX_TOKENS` + +Max tokens tells the LLM to respond in less than this number of tokens. LLMs +are better at longer responses so values larger than 256 tend to work best. + +#### Temperature + +`--temp`, `MODS_TEMP` + +Sampling temperature is a number between 0.0 and 2.0 and determines how +confident the model is in its choices. Higher values make the output more +random and lower values make it more deterministic. + +#### TopP + +`--topp`, `MODS_TOPP` + +Top P is an alternative to sampling temperature. It's a number between 0.0 and +2.0 with smaller numbers narrowing the domain from which the model will create +its response. + +#### No Limit + +`--no-limit`, `MODS_NO_LIMIT` + +By default Mods attempts to size the input to the maximum size the allowed by +the model. You can potentially squeeze a few more tokens into the input by +setting this but also risk getting a max token exceeded error from the OpenAI API. + +#### Include Prompt + +`-P`, `--prompt`, `MODS_INCLUDE_PROMPT` + +Include prompt will preface the response with the entire prompt, both standard +in and the prompt supplied by the arguments. + +#### Include Prompt Args + +`-p`, `--prompt-args`, `MODS_INCLUDE_PROMPT_ARGS` + +Include prompt args will include _only_ the prompt supplied by the arguments. +This can be useful if your standard in content is long and you just a want a +summary before the response. + +#### Max Retries + +`--max-retries`, `MODS_MAX_RETRIES` + +The maximum number of retries to failed API calls. The retries happen with an +exponential backoff. + +#### Fanciness + +`--fanciness`, `MODS_FANCINESS` + +Your desired level of fanciness. + +#### Quiet + +`-q`, `--quiet`, `MODS_QUIET` + +Output nothing to standard err. + +#### Reset Settings + +`--reset-settings` + +Backup your old settings file and reset everything to the defaults. + +#### No Cache + +`--no-cache`, `MODS_NO_CACHE` + +Disables conversation saving. + +#### HTTP Proxy + +`-x`, `--http-proxy`, `MODS_HTTP_PROXY` + +Use the HTTP proxy to the connect the API endpoints. diff --git a/docs/content/integrations/Spark.md b/docs/content/integrations/Spark.md new file mode 100644 index 00000000..e5518619 --- /dev/null +++ b/docs/content/integrations/Spark.md @@ -0,0 +1,75 @@ + ++++ +disableToc = false +title = "Spark" +weight = 2 ++++ + +an LLM-powered autonomous agent platform + +![AI Spark](https://cdn.discordapp.com/attachments/1138961497691799693/1162248501120475227/unnamed.jpg?ex=653b3f44&is=6528ca44&hm=e0b2f74f2ba38097b8e78b80182e2e6beff4a3827847ddffb2693178a3dd6e05&) + +A framework for autonomous agents who can work together to accomplish tasks using [LocalAI](https://github.com/go-skynet/LocalAI). + +Github Link - https://github.com/cedriking/spark + +## Setup + +You will need at least Node 10. + +[Download the repository](https://github.com/cedriking/spark), then install dependencies: `yarn` or `npm install`. + +Rename the `.env.template` file at the root of the project to `.env` and add your secrets to it: + +``` +# the following are needed for the agent to be able to search the web: +GOOGLE_SEARCH_ENGINE_ID=... # create a custom search engine at https://cse.google.com/cse/all +GOOGLE_API_KEY=... # obtain from https://console.cloud.google.com/apis/credentials +AGENT_DELAY=... # optionally, a delay in milliseconds following every agent action +MODEL=... # any Llama.cpp LLM model +SERVER=... # optionally, a server to connect to (default http://localhost:8080) +``` + +You'll also need to enable the Google Custom Search API for your Google Cloud account, e.g. + +## Running + +Start the program: + +``` +yarn dev [# of agents] +``` + +or: + +``` +npm run dev [# of agents] +``` + +Interact with the agents through the console. Anything you type will be sent as a message to all agents currently. + +## Action errors + +After spinning up a new agent, you will often see them make some mistakes which generate errors: + +- Trying to use an action before they've asked for `help` on it to know what its parameters are +- Trying to just use a raw text response instead of a correctly-formatted action (or raw text wrapping a code block which contains a valid action) +- Trying to use a multi-line parameter value without wrapping it in the multiline delimiter (`% ff9d7713-0bb0-40d4-823c-5a66de48761b`) + +This is a normal period of adjustment as they learn to operate themselves. They generally will learn from these mistakes and recover, although agents sometimes devolve into endless error loops and can't figure out what the problem is. It's highly advised to never leave an agent unattended. + +## Agent state + +Each agent stores its state under the `.store` directory. Agent 1, for example, has + +``` +.store/1/memory +.store/1/goals +.store/1/notes +``` + +You can simply delete any of these things, or the whole agent folder (or the whole `.store`) to selectively wipe whatever state you want between runs. Otherwise, agents will pick up where you left off on restart. + +A nice aspect of this is that when you want to debug a problem you ran into with a particular agent, you can delete the events in their memory subsequent to the point where the problem occurred, make changes to the code, and restart them to effectively replay that moment until you've fixed the bug. You can also ask an agent to implement a feature, and once they've done so you can restart, tell them that you've loaded the feature, and ask them to try it out. + +Code based on [ai-legion](https://github.com/eumemic/ai-legion). diff --git a/docs/content/integrations/_index.md b/docs/content/integrations/_index.md new file mode 100644 index 00000000..2ee5fa1b --- /dev/null +++ b/docs/content/integrations/_index.md @@ -0,0 +1,14 @@ + ++++ +disableToc = false +title = "Integrations" +weight = 8 ++++ + +## The following softwares has out-of-the-box integrations with LocalAI + +LocalAI can be used as a drop-in replacement, however, the projects in this folder provides specific integrations with LocalAI: + +- [Logseq GPT3 OpenAI plugin](https://github.com/briansunter/logseq-plugin-gpt3-openai) allows to set a base URL, and works with LocalAI. + +Feel free to open up a [issue](https://github.com/go-skynet/localai-website/issues) to get a page for your project made or if you see a error on one of the pages.! diff --git a/docs/content/integrations/autogpt4all.md b/docs/content/integrations/autogpt4all.md new file mode 100644 index 00000000..558061fb --- /dev/null +++ b/docs/content/integrations/autogpt4all.md @@ -0,0 +1,77 @@ + ++++ +disableToc = false +title = "AutoGPT4all" +weight = 2 ++++ + +AutoGPT4All provides you with both bash and python scripts to set up and configure [AutoGPT](https://github.com/Significant-Gravitas/Auto-GPT.git) running with the [GPT4All](#) model on the [LocalAI](https://github.com/go-skynet/LocalAI) server. This setup allows you to run queries against an open-source licensed model without any limits, completely free and offline. + +![photo](https://bafkreif7cbmuvhztfdlscnmgi3ob32d6ulkqgbjqy4cff2krth4dynwwhe.ipfs.nftstorage.link) + +Github Link - https://github.com/aorumbayev/autogpt4all + +## πŸš€ Quickstart + +## Using Bash Script: + +```sh +git clone https://github.com/aorumbayev/autogpt4all.git +cd autogpt4all +chmod +x autogpt4all.sh +./autogpt4all.sh +``` + +### Using Python Script: + +Make sure you have Python installed on your machine. + +```sh +git clone https://github.com/aorumbayev/autogpt4all.git +cd autogpt4all +python autogpt4all.py +``` + +> ❗️ Please note this script has been primarily tested on MacOS with an M1 processor. It should work on Linux and Windows, but it has not been thoroughly tested on these platforms. If not on MacOS install git, go and make before running the script. + +## πŸŽ›οΈ Script Options + +## For the bash script: + +`--custom_model_url` - Specify a custom URL for the model download step. By default, the script will use https://gpt4all.io/models/ggml-gpt4all-l13b-snoozy.bin. + +Example: + +``` +./autogpt4all.sh --custom_model_url "https://example.com/path/to/model.bin" +``` + +`--uninstall` - Uninstall the projects from your local machine by deleting the LocalAI and Auto-GPT directories. + +Example: + +``` +./autogpt4all.sh --uninstall +``` + +> To recap the commands, a --help flag is also available for the bash script. + +## For the Python Script: + +You can use similar options as the bash script: + +`--custom_model_url` - Specify a custom URL for the model download step. + +Example: + +```sh +python autogpt4all.py --custom_model_url "https://example.com/path/to/model.bin" +``` + +`--uninstall` - Uninstall the projects from your local machine. + +Example: + +```sh +python autogpt4all.py --uninstall +``` diff --git a/docs/content/model-compatibility/_index.en.md b/docs/content/model-compatibility/_index.en.md new file mode 100644 index 00000000..355b7740 --- /dev/null +++ b/docs/content/model-compatibility/_index.en.md @@ -0,0 +1,80 @@ + ++++ +disableToc = false +title = "Model compatibility" +weight = 4 ++++ + +LocalAI is compatible with the models supported by [llama.cpp](https://github.com/ggerganov/llama.cpp) supports also [GPT4ALL-J](https://github.com/nomic-ai/gpt4all) and [cerebras-GPT with ggml](https://huggingface.co/lxe/Cerebras-GPT-2.7B-Alpaca-SP-ggml). + +{{% notice note %}} + +LocalAI will attempt to automatically load models which are not explicitly configured for a specific backend. You can specify the backend to use by configuring a model with a YAML file. See [the advanced section]({{%relref "advanced" %}}) for more details. + +{{% /notice %}} + +### Hardware requirements + +Depending on the model you are attempting to run might need more RAM or CPU resources. Check out also [here](https://github.com/ggerganov/llama.cpp#memorydisk-requirements) for `ggml` based backends. `rwkv` is less expensive on resources. + +### Model compatibility table + +Besides llama based models, LocalAI is compatible also with other architectures. The table below lists all the compatible models families and the associated binding repository. + +| Backend and Bindings | Compatible models | Completion/Chat endpoint | Capability | Embeddings support | Token stream support | Acceleration | +|----------------------------------------------------------------------------------|-----------------------|--------------------------|---------------------------|-----------------------------------|----------------------|--------------| +| [llama.cpp]({{%relref "model-compatibility/llama-cpp" %}}) | Vicuna, Alpaca, LLaMa | yes | GPT and Functions | yes** | yes | CUDA, openCL, cuBLAS, Metal | +| [gpt4all-llama](https://github.com/nomic-ai/gpt4all) | Vicuna, Alpaca, LLaMa | yes | GPT | no | yes | N/A | +| [gpt4all-mpt](https://github.com/nomic-ai/gpt4all) | MPT | yes | GPT | no | yes | N/A | +| [gpt4all-j](https://github.com/nomic-ai/gpt4all) | GPT4ALL-J | yes | GPT | no | yes | N/A | +| [falcon-ggml](https://github.com/ggerganov/ggml) ([binding](https://github.com/go-skynet/go-ggml-transformers.cpp)) | Falcon (*) | yes | GPT | no | no | N/A | +| [gpt2](https://github.com/ggerganov/ggml) ([binding](https://github.com/go-skynet/go-ggml-transformers.cpp)) | GPT2, Cerebras | yes | GPT | no | no | N/A | +| [dolly](https://github.com/ggerganov/ggml) ([binding](https://github.com/go-skynet/go-ggml-transformers.cpp)) | Dolly | yes | GPT | no | no | N/A | +| [gptj](https://github.com/ggerganov/ggml) ([binding](https://github.com/go-skynet/go-ggml-transformers.cpp)) | GPTJ | yes | GPT | no | no | N/A | +| [mpt](https://github.com/ggerganov/ggml) ([binding](https://github.com/go-skynet/go-ggml-transformers.cpp)) | MPT | yes | GPT | no | no | N/A | +| [replit](https://github.com/ggerganov/ggml) ([binding](https://github.com/go-skynet/go-ggml-transformers.cpp)) | Replit | yes | GPT | no | no | N/A | +| [gptneox](https://github.com/ggerganov/ggml) ([binding](https://github.com/go-skynet/go-ggml-transformers.cpp)) | GPT NeoX, RedPajama, StableLM | yes | GPT | no | no | N/A | +| [starcoder](https://github.com/ggerganov/ggml) ([binding](https://github.com/go-skynet/go-ggml-transformers.cpp)) | Starcoder | yes | GPT | no | no | N/A| +| [bloomz](https://github.com/NouamaneTazi/bloomz.cpp) ([binding](https://github.com/go-skynet/bloomz.cpp)) | Bloom | yes | GPT | no | no | N/A | +| [rwkv](https://github.com/saharNooby/rwkv.cpp) ([binding](https://github.com/donomii/go-rwkv.cpp)) | rwkv | yes | GPT | no | yes | N/A | +| [bert](https://github.com/skeskinen/bert.cpp) ([binding](https://github.com/go-skynet/go-bert.cpp)) | bert | no | Embeddings only | yes | no | N/A | +| [whisper](https://github.com/ggerganov/whisper.cpp) | whisper | no | Audio | no | no | N/A | +| [stablediffusion](https://github.com/EdVince/Stable-Diffusion-NCNN) ([binding](https://github.com/mudler/go-stable-diffusion)) | stablediffusion | no | Image | no | no | N/A | +| [langchain-huggingface](https://github.com/tmc/langchaingo) | Any text generators available on HuggingFace through API | yes | GPT | no | no | N/A | +| [piper](https://github.com/rhasspy/piper) ([binding](https://github.com/mudler/go-piper)) | Any piper onnx model | no | Text to voice | no | no | N/A | +| [falcon](https://github.com/cmp-nct/ggllm.cpp/tree/c12b2d65f732a0d8846db2244e070f0f3e73505c) ([binding](https://github.com/mudler/go-ggllm.cpp)) | Falcon *** | yes | GPT | no | yes | CUDA | +| `huggingface-embeddings` [sentence-transformers](https://github.com/UKPLab/sentence-transformers) | BERT | no | Embeddings only | yes | no | N/A | +| `bark` | bark | no | Audio generation | no | no | yes | +| `AutoGPTQ` | GPTQ | yes | GPT | yes | no | N/A | +| `exllama` | GPTQ | yes | GPT only | no | no | N/A | +| `diffusers` | SD,... | no | Image generation | no | no | N/A | +| `vall-e-x` | Vall-E | no | Audio generation and Voice cloning | no | no | CPU/CUDA | +| `vllm` | Various GPTs and quantization formats | yes | GPT | no | no | CPU/CUDA | + +Note: any backend name listed above can be used in the `backend` field of the model configuration file (See [the advanced section]({{%relref "advanced" %}})). + +- \* 7b ONLY +- ** doesn't seem to be accurate +- *** 7b and 40b with the `ggccv` format, for instance: https://huggingface.co/TheBloke/WizardLM-Uncensored-Falcon-40B-GGML + +Tested with: + +- [X] Automatically by CI with OpenLLAMA and GPT4ALL. +- [X] LLaMA πŸ¦™ +- [X] [Vicuna](https://github.com/ggerganov/llama.cpp/discussions/643#discussioncomment-5533894) +- [Alpaca](https://github.com/ggerganov/llama.cpp#instruction-mode-with-alpaca) +- [X] [GPT4ALL](https://gpt4all.io) (see also [using GPT4All](https://github.com/ggerganov/llama.cpp#using-gpt4all)) +- [X] [GPT4ALL-J](https://gpt4all.io/models/ggml-gpt4all-j.bin) (no changes required) +- [X] [Koala](https://bair.berkeley.edu/blog/2023/04/03/koala/) 🐨 +- [X] Cerebras-GPT +- [X] [WizardLM](https://github.com/nlpxucan/WizardLM) +- [X] [RWKV](https://github.com/BlinkDL/RWKV-LM) models with [rwkv.cpp](https://github.com/saharNooby/rwkv.cpp) +- [X] [bloom.cpp](https://github.com/NouamaneTazi/bloomz.cpp) +- [X] [Chinese LLaMA / Alpaca](https://github.com/ymcui/Chinese-LLaMA-Alpaca) +- [X] [Vigogne (French)](https://github.com/bofenghuang/vigogne) +- [X] [OpenBuddy 🐢 (Multilingual)](https://github.com/OpenBuddy/OpenBuddy) +- [X] [Pygmalion 7B / Metharme 7B](https://github.com/ggerganov/llama.cpp#using-pygmalion-7b--metharme-7b) +- [X] [HuggingFace Inference](https://huggingface.co/inference-api) models available through API +- [X] Falcon + +Note: You might need to convert some models from older models to the new format, for indications, see [the README in llama.cpp](https://github.com/ggerganov/llama.cpp#using-gpt4all) for instance to run `gpt4all`. diff --git a/docs/content/model-compatibility/autogptq.md b/docs/content/model-compatibility/autogptq.md new file mode 100644 index 00000000..de173a30 --- /dev/null +++ b/docs/content/model-compatibility/autogptq.md @@ -0,0 +1,38 @@ + ++++ +disableToc = false +title = "πŸ¦™ AutoGPTQ" +weight = 3 ++++ + +[AutoGPTQ](https://github.com/PanQiWei/AutoGPTQ) is an easy-to-use LLMs quantization package with user-friendly apis, based on GPTQ algorithm. + +## Prerequisites + +This is an extra backend - in the container images is already available and there is nothing to do for the setup. + +If you are building LocalAI locally, you need to install [AutoGPTQ manually](https://github.com/PanQiWei/AutoGPTQ#quick-installation). + + +## Model setup + +The models are automatically downloaded from `huggingface` if not present the first time. It is possible to define models via `YAML` config file, or just by querying the endpoint with the `huggingface` repository model name. For example, create a `YAML` config file in `models/`: + +``` +name: orca +backend: autogptq +model_base_name: "orca_mini_v2_13b-GPTQ-4bit-128g.no-act.order" +parameters: + model: "TheBloke/orca_mini_v2_13b-GPTQ" +# ... +``` + +Test with: + +```bash +curl http://localhost:8080/v1/chat/completions -H "Content-Type: application/json" -d '{ + "model": "orca", + "messages": [{"role": "user", "content": "How are you?"}], + "temperature": 0.1 + }' +``` diff --git a/docs/content/model-compatibility/bark.md b/docs/content/model-compatibility/bark.md new file mode 100644 index 00000000..2da88f32 --- /dev/null +++ b/docs/content/model-compatibility/bark.md @@ -0,0 +1,39 @@ + ++++ +disableToc = false +title = "🐢 Bark" +weight = 4 ++++ + + +[Bark](https://github.com/suno-ai/bark) allows to generate audio from text prompts. + +## Setup + +This is an extra backend - in the container is already available and there is nothing to do for the setup. + + +## Model setup + +There is nothing to be done for the model setup. You can already start to use bark. The models will be downloaded the first time you use the backend. + +## Usage + +Use the `tts` endpoint by specifying the `bark` backend: + +``` +curl http://localhost:8080/tts -H "Content-Type: application/json" -d '{ + "backend": "bark", + "input":"Hello!" + }' | aplay +``` + +To specify a voice from https://github.com/suno-ai/bark#-voice-presets ( https://suno-ai.notion.site/8b8e8749ed514b0cbf3f699013548683?v=bc67cff786b04b50b3ceb756fd05f68c ), use the `model` parameter: + +``` +curl http://localhost:8080/tts -H "Content-Type: application/json" -d '{ + "backend": "bark", + "input":"Hello!", + "model": "v2/en_speaker_4" + }' | aplay +``` \ No newline at end of file diff --git a/docs/content/model-compatibility/diffusers.md b/docs/content/model-compatibility/diffusers.md new file mode 100644 index 00000000..3cddbedd --- /dev/null +++ b/docs/content/model-compatibility/diffusers.md @@ -0,0 +1,170 @@ + ++++ +disableToc = false +title = "🧨 Diffusers" +weight = 4 ++++ + +[Diffusers](https://huggingface.co/docs/diffusers/index) is the go-to library for state-of-the-art pretrained diffusion models for generating images, audio, and even 3D structures of molecules. LocalAI has a diffusers backend which allows image generation using the `diffusers` library. + +![anime_girl](https://github.com/go-skynet/LocalAI/assets/2420543/8aaca62a-e864-4011-98ae-dcc708103928) +(Generated with [AnimagineXL](https://huggingface.co/Linaqruf/animagine-xl)) + +Note: currently only the image generation is supported. It is experimental, so you might encounter some issues on models which weren't tested yet. + +## Setup + +This is an extra backend - in the container is already available and there is nothing to do for the setup. + +## Model setup + +The models will be downloaded the first time you use the backend from `huggingface` automatically. + +Create a model configuration file in the `models` directory, for instance to use `Linaqruf/animagine-xl` with CPU: + +```yaml +name: animagine-xl +parameters: + model: Linaqruf/animagine-xl +backend: diffusers + +# Force CPU usage - set to true for GPU +f16: false +diffusers: + pipeline_type: StableDiffusionXLPipeline + cuda: false # Enable for GPU usage (CUDA) + scheduler_type: euler_a +``` + +## Local models + +You can also use local models, or modify some parameters like `clip_skip`, `scheduler_type`, for instance: + +```yaml +name: stablediffusion +parameters: + model: toonyou_beta6.safetensors +backend: diffusers +step: 30 +f16: true +diffusers: + pipeline_type: StableDiffusionPipeline + cuda: true + enable_parameters: "negative_prompt,num_inference_steps,clip_skip" + scheduler_type: "k_dpmpp_sde" + cfg_scale: 8 + clip_skip: 11 +``` + +## Configuration parameters + +The following parameters are available in the configuration file: + +| Parameter | Description | Default | +| --- | --- | --- | +| `f16` | Force the usage of `float16` instead of `float32` | `false` | +| `step` | Number of steps to run the model for | `30` | +| `cuda` | Enable CUDA acceleration | `false` | +| `enable_parameters` | Parameters to enable for the model | `negative_prompt,num_inference_steps,clip_skip` | +| `scheduler_type` | Scheduler type | `k_dpp_sde` | +| `cfg_scale` | Configuration scale | `8` | +| `clip_skip` | Clip skip | None | +| `pipeline_type` | Pipeline type | `StableDiffusionPipeline` | + +There are available several types of schedulers: + +| Scheduler | Description | +| --- | --- | +| `ddim` | DDIM | +| `pndm` | PNDM | +| `heun` | Heun | +| `unipc` | UniPC | +| `euler` | Euler | +| `euler_a` | Euler a | +| `lms` | LMS | +| `k_lms` | LMS Karras | +| `dpm_2` | DPM2 | +| `k_dpm_2` | DPM2 Karras | +| `dpm_2_a` | DPM2 a | +| `k_dpm_2_a` | DPM2 a Karras | +| `dpmpp_2m` | DPM++ 2M | +| `k_dpmpp_2m` | DPM++ 2M Karras | +| `dpmpp_sde` | DPM++ SDE | +| `k_dpmpp_sde` | DPM++ SDE Karras | +| `dpmpp_2m_sde` | DPM++ 2M SDE | +| `k_dpmpp_2m_sde` | DPM++ 2M SDE Karras | + +Pipelines types available: + +| Pipeline type | Description | +| --- | --- | +| `StableDiffusionPipeline` | Stable diffusion pipeline | +| `StableDiffusionImg2ImgPipeline` | Stable diffusion image to image pipeline | +| `StableDiffusionDepth2ImgPipeline` | Stable diffusion depth to image pipeline | +| `DiffusionPipeline` | Diffusion pipeline | +| `StableDiffusionXLPipeline` | Stable diffusion XL pipeline | + +## Usage + +### Text to Image +Use the `image` generation endpoint with the `model` name from the configuration file: + +```bash +curl http://localhost:8080/v1/images/generations \ + -H "Content-Type: application/json" \ + -d '{ + "prompt": "|", + "model": "animagine-xl", + "step": 51, + "size": "1024x1024" + }' +``` + +## Image to Image + +https://huggingface.co/docs/diffusers/using-diffusers/img2img + +An example model (GPU): +```yaml +name: stablediffusion-edit +parameters: + model: nitrosocke/Ghibli-Diffusion +backend: diffusers +step: 25 + +f16: true +diffusers: + pipeline_type: StableDiffusionImg2ImgPipeline + cuda: true + enable_parameters: "negative_prompt,num_inference_steps,image" +``` + +```bash +IMAGE_PATH=/path/to/your/image +(echo -n '{"image": "'; base64 $IMAGE_PATH; echo '", "prompt": "a sky background","size": "512x512","model":"stablediffusion-edit"}') | +curl -H "Content-Type: application/json" -d @- http://localhost:8080/v1/images/generations +``` + +## Depth to Image + +https://huggingface.co/docs/diffusers/using-diffusers/depth2img + +```yaml +name: stablediffusion-depth +parameters: + model: stabilityai/stable-diffusion-2-depth +backend: diffusers +step: 50 +# Force CPU usage +f16: true +diffusers: + pipeline_type: StableDiffusionDepth2ImgPipeline + cuda: true + enable_parameters: "negative_prompt,num_inference_steps,image" + cfg_scale: 6 +``` + +```bash +(echo -n '{"image": "'; base64 ~/path/to/image.jpeg; echo '", "prompt": "a sky background","size": "512x512","model":"stablediffusion-depth"}') | +curl -H "Content-Type: application/json" -d @- http://localhost:8080/v1/images/generations +``` diff --git a/docs/content/model-compatibility/exllama.md b/docs/content/model-compatibility/exllama.md new file mode 100644 index 00000000..3aa97f47 --- /dev/null +++ b/docs/content/model-compatibility/exllama.md @@ -0,0 +1,42 @@ + ++++ +disableToc = false +title = "πŸ¦™ Exllama" +weight = 2 ++++ + + +[Exllama](https://github.com/turboderp/exllama) is a "A more memory-efficient rewrite of the HF transformers implementation of Llama for use with quantized weights" + +## Prerequisites + +This is an extra backend - in the container images is already available and there is nothing to do for the setup. + +If you are building LocalAI locally, you need to install [exllama manually](https://github.com/jllllll/exllama#this-is-a-python-module-version-of-exllama) first. + +## Model setup + +Download the model as a folder inside the `model ` directory and create a YAML file specifying the `exllama` backend. For instance with the `TheBloke/WizardLM-7B-uncensored-GPTQ` model: + +``` +$ git lfs install +$ cd models && git clone https://huggingface.co/TheBloke/WizardLM-7B-uncensored-GPTQ +$ ls models/ +.keep WizardLM-7B-uncensored-GPTQ/ exllama.yaml +$ cat models/exllama.yaml +name: exllama +parameters: + model: WizardLM-7B-uncensored-GPTQ +backend: exllama +# ... +``` + +Test with: + +```bash +curl http://localhost:8080/v1/chat/completions -H "Content-Type: application/json" -d '{ + "model": "exllama", + "messages": [{"role": "user", "content": "How are you?"}], + "temperature": 0.1 + }' +``` diff --git a/docs/content/model-compatibility/llama-cpp.md b/docs/content/model-compatibility/llama-cpp.md new file mode 100644 index 00000000..6fcd498f --- /dev/null +++ b/docs/content/model-compatibility/llama-cpp.md @@ -0,0 +1,81 @@ + ++++ +disableToc = false +title = "πŸ¦™ llama.cpp" +weight = 1 ++++ + +[llama.cpp](https://github.com/ggerganov/llama.cpp) is a popular port of Facebook's LLaMA model in C/C++. + +{{% notice note %}} + +The `ggml` file format has been deprecated. If you are using `ggml` models and you are configuring your model with a YAML file, specify, use the `llama-stable` backend instead. If you are relying in automatic detection of the model, you should be fine. For `gguf` models, use the `llama` backend. + +{{% /notice %}} + +## Features + +The `llama.cpp` model supports the following features: +- [πŸ“– Text generation (GPT)]({{%relref "features/text-generation" %}}) +- [🧠 Embeddings]({{%relref "features/embeddings" %}}) +- [πŸ”₯ OpenAI functions]({{%relref "features/openai-functions" %}}) +- [✍️ Constrained grammars]({{%relref "features/constrained_grammars" %}}) + +## Setup + +LocalAI supports `llama.cpp` models out of the box. You can use the `llama.cpp` model in the same way as any other model. + +### Manual setup + +It is sufficient to copy the `ggml` or `guf` model files in the `models` folder. You can refer to the model in the `model` parameter in the API calls. + +[You can optionally create an associated YAML]({{%relref "advanced" %}}) model config file to tune the model's parameters or apply a template to the prompt. + +Prompt templates are useful for models that are fine-tuned towards a specific prompt. + +### Automatic setup + +LocalAI supports model galleries which are indexes of models. For instance, the huggingface gallery contains a large curated index of models from the huggingface model hub for `ggml` or `gguf` models. + +For instance, if you have the galleries enabled, you can just start chatting with models in huggingface by running: + +```bash +curl http://localhost:8080/v1/chat/completions -H "Content-Type: application/json" -d '{ + "model": "TheBloke/WizardLM-13B-V1.2-GGML/wizardlm-13b-v1.2.ggmlv3.q2_K.bin", + "messages": [{"role": "user", "content": "Say this is a test!"}], + "temperature": 0.1 + }' +``` + +LocalAI will automatically download and configure the model in the `model` directory. + +Models can be also preloaded or downloaded on demand. To learn about model galleries, check out the [model gallery documentation]({{%relref "models" %}}). + +### YAML configuration + +To use the `llama.cpp` backend, specify `llama` as the backend in the YAML file: + +```yaml +name: llama +backend: llama +parameters: + # Relative to the models path + model: file.gguf.bin +``` + +In the example above we specify `llama` as the backend to restrict loading `gguf` models only. + +For instance, to use the `llama-stable` backend for `ggml` models: + +```yaml +name: llama +backend: llama-stable +parameters: + # Relative to the models path + model: file.ggml.bin +``` + +### Reference + +- [llama](https://github.com/ggerganov/llama.cpp) +- [binding](https://github.com/go-skynet/go-llama.cpp) \ No newline at end of file diff --git a/docs/content/model-compatibility/rwkv.md b/docs/content/model-compatibility/rwkv.md new file mode 100644 index 00000000..f9d61cca --- /dev/null +++ b/docs/content/model-compatibility/rwkv.md @@ -0,0 +1,15 @@ + ++++ +disableToc = false +title = "RWKV" +weight = 1 ++++ + +A full example on how to run a rwkv model is in the [examples](https://github.com/go-skynet/LocalAI/tree/master/examples/rwkv). + +Note: rwkv models needs to specify the backend `rwkv` in the YAML config files and have an associated tokenizer along that needs to be provided with it: + +``` +36464540 -rw-r--r-- 1 mudler mudler 1.2G May 3 10:51 rwkv_small +36464543 -rw-r--r-- 1 mudler mudler 2.4M May 3 10:51 rwkv_small.tokenizer.json +``` diff --git a/docs/content/model-compatibility/vall-e-x.md b/docs/content/model-compatibility/vall-e-x.md new file mode 100644 index 00000000..dd514131 --- /dev/null +++ b/docs/content/model-compatibility/vall-e-x.md @@ -0,0 +1,50 @@ + ++++ +disableToc = false +title = "πŸ†• Vall-E-X" +weight = 4 ++++ + +[VALL-E-X](https://github.com/Plachtaa/VALL-E-X) is an open source implementation of Microsoft's VALL-E X zero-shot TTS model. + +## Setup + +The backend will automatically download the required files in order to run the model. + +This is an extra backend - in the container is already available and there is nothing to do for the setup. If you are building manually, you need to install Vall-E-X manually first. + +## Usage + +Use the tts endpoint by specifying the vall-e-x backend: + +``` +curl http://localhost:8080/tts -H "Content-Type: application/json" -d '{ + "backend": "vall-e-x", + "input":"Hello!" + }' | aplay +``` + +## Voice cloning + +In order to use voice cloning capabilities you must create a `YAML` configuration file to setup a model: + +```yaml +name: cloned-voice +backend: vall-e-x +parameters: + model: "cloned-voice" +vall-e: + # The path to the audio file to be cloned + # relative to the models directory + audio_path: "path-to-wav-source.wav" +``` + +Then you can specify the model name in the requests: + +``` +curl http://localhost:8080/tts -H "Content-Type: application/json" -d '{ + "backend": "vall-e-x", + "model": "cloned-voice", + "input":"Hello!" + }' | aplay +``` diff --git a/docs/content/model-compatibility/vllm.md b/docs/content/model-compatibility/vllm.md new file mode 100644 index 00000000..ae58ea7c --- /dev/null +++ b/docs/content/model-compatibility/vllm.md @@ -0,0 +1,39 @@ + ++++ +disableToc = false +title = "πŸ†• vLLM" +weight = 4 ++++ + +[vLLM](https://github.com/vllm-project/vllm) is a fast and easy-to-use library for LLM inference. + +LocalAI has a built-in integration with vLLM, and it can be used to run models. You can check out `vllm` performance [here](https://github.com/vllm-project/vllm#performance). + +## Setup + +Create a YAML file for the model you want to use with `vllm`. + +To setup a model, you need to just specify the model name in the YAML config file: +```yaml +name: vllm +backend: vllm +parameters: + model: "facebook/opt-125m" + +# Decomment to specify a quantization method (optional) +# quantization: "awq" +``` + +The backend will automatically download the required files in order to run the model. + + +## Usage + +Use the `completions` endpoint by specifying the `vllm` backend: +``` +curl http://localhost:8080/v1/completions -H "Content-Type: application/json" -d '{ + "model": "vllm", + "prompt": "Hello, my name is", + "temperature": 0.1, "top_p": 0.1 + }' + ``` \ No newline at end of file diff --git a/docs/content/models/_index.en.md b/docs/content/models/_index.en.md new file mode 100644 index 00000000..da02b04d --- /dev/null +++ b/docs/content/models/_index.en.md @@ -0,0 +1,506 @@ + ++++ +disableToc = false +title = "πŸ–ΌοΈ Model gallery" +weight = 7 ++++ + +

+
+
+
+

+ +The model gallery is a (experimental!) collection of models configurations for [LocalAI](https://github.com/go-skynet/LocalAI). + +LocalAI to ease out installations of models provide a way to preload models on start and downloading and installing them in runtime. You can install models manually by copying them over the `models` directory, or use the API to configure, download and verify the model assets for you. As the UI is still a work in progress, you will find here the documentation about the API Endpoints. + +{{% notice note %}} +The models in this gallery are not directly maintained by LocalAI. If you find a model that is not working, please open an issue on the model gallery repository. +{{% /notice %}} + +{{% notice note %}} +GPT and text generation models might have a license which is not permissive for commercial use or might be questionable or without any license at all. Please check the model license before using it. The official gallery contains only open licensed models. +{{% /notice %}} + +## Useful Links and resources + +- [Open LLM Leaderboard](https://huggingface.co/spaces/HuggingFaceH4/open_llm_leaderboard) - here you can find a list of the most performing models on the Open LLM benchmark. Keep in mind models compatible with LocalAI must be quantized in the `ggml` format. + + +## Model repositories + +You can install a model in runtime, while the API is running and it is started already, or before starting the API by preloading the models. + +To install a model in runtime you will need to use the `/models/apply` LocalAI API endpoint. + +To enable the `model-gallery` repository you need to start `local-ai` with the `GALLERIES` environment variable: + +``` +GALLERIES=[{"name":"", "url":"" + }' +# or if from a repository +curl $LOCALAI/models/apply -H "Content-Type: application/json" -d '{ + "id": "@" + }' +``` + +An example that installs openllama can be: + +```bash +LOCALAI=http://localhost:8080 +curl $LOCALAI/models/apply -H "Content-Type: application/json" -d '{ + "url": "https://github.com/go-skynet/model-gallery/blob/main/openllama_3b.yaml" + }' +``` + +The API will return a job `uuid` that you can use to track the job progress: +``` +{"uuid":"1059474d-f4f9-11ed-8d99-c4cbe106d571","status":"http://localhost:8080/models/jobs/1059474d-f4f9-11ed-8d99-c4cbe106d571"} +``` + +For instance, a small example bash script that waits a job to complete can be (requires `jq`): + +```bash +response=$(curl -s http://localhost:8080/models/apply -H "Content-Type: application/json" -d '{"url": "$model_url"}') + +job_id=$(echo "$response" | jq -r '.uuid') + +while [ "$(curl -s http://localhost:8080/models/jobs/"$job_id" | jq -r '.processed')" != "true" ]; do + sleep 1 +done + +echo "Job completed" +``` + +To preload models on start instead you can use the `PRELOAD_MODELS` environment variable. + +
+ +To preload models on start, use the `PRELOAD_MODELS` environment variable by setting it to a JSON array of model uri: + +```bash +PRELOAD_MODELS='[{"url": ""}]' +``` + +Note: `url` or `id` must be specified. `url` is used to a url to a model gallery configuration, while an `id` is used to refer to models inside repositories. If both are specified, the `id` will be used. + +For example: + +```bash +PRELOAD_MODELS=[{"url": "github:go-skynet/model-gallery/stablediffusion.yaml"}] +``` + +or as arg: + +```bash +local-ai --preload-models '[{"url": "github:go-skynet/model-gallery/stablediffusion.yaml"}]' +``` + +or in a YAML file: + +```bash +local-ai --preload-models-config "/path/to/yaml" +``` + +YAML: +```yaml +- url: github:go-skynet/model-gallery/stablediffusion.yaml +``` + +
+ +{{% notice note %}} + +You can find already some open licensed models in the [model gallery](https://github.com/go-skynet/model-gallery). + +If you don't find the model in the gallery you can try to use the "base" model and provide an URL to LocalAI: + +
+ +``` +curl $LOCALAI/models/apply -H "Content-Type: application/json" -d '{ + "url": "github:go-skynet/model-gallery/base.yaml", + "name": "model-name", + "files": [ + { + "uri": "", + "sha256": "", + "filename": "model" + } + ] + }' +``` + +
+ +{{% /notice %}} + +## Installing a model with a different name + +To install a model with a different name, specify a `name` parameter in the request body. + +```bash +LOCALAI=http://localhost:8080 +curl $LOCALAI/models/apply -H "Content-Type: application/json" -d '{ + "url": "", + "name": "" + }' +``` + +For example, to install a model as `gpt-3.5-turbo`: + +```bash +LOCALAI=http://localhost:8080 +curl $LOCALAI/models/apply -H "Content-Type: application/json" -d '{ + "url": "github:go-skynet/model-gallery/gpt4all-j.yaml", + "name": "gpt-3.5-turbo" + }' +``` +## Additional Files + +
+ +To download additional files with the model, use the `files` parameter: + +```bash +LOCALAI=http://localhost:8080 +curl $LOCALAI/models/apply -H "Content-Type: application/json" -d '{ + "url": "", + "name": "", + "files": [ + { + "uri": "", + "sha256": "", + "filename": "" + } + ] + }' +``` + +
+ +## Overriding configuration files + +
+ +To override portions of the configuration file, such as the backend or the model file, use the `overrides` parameter: + +```bash +LOCALAI=http://localhost:8080 +curl $LOCALAI/models/apply -H "Content-Type: application/json" -d '{ + "url": "", + "name": "", + "overrides": { + "backend": "llama", + "f16": true, + ... + } + }' +``` + +
+ + + +## Examples + +### Embeddings: Bert + +
+ +```bash +curl $LOCALAI/models/apply -H "Content-Type: application/json" -d '{ + "url": "github:go-skynet/model-gallery/bert-embeddings.yaml", + "name": "text-embedding-ada-002" + }' +``` + +To test it: + +```bash +LOCALAI=http://localhost:8080 +curl $LOCALAI/v1/embeddings -H "Content-Type: application/json" -d '{ + "input": "Test", + "model": "text-embedding-ada-002" + }' +``` + +
+ +### Image generation: Stable diffusion + +URL: https://github.com/EdVince/Stable-Diffusion-NCNN + +{{< tabs >}} +{{% tab name="Prepare the model in runtime" %}} + +While the API is running, you can install the model by using the `/models/apply` endpoint and point it to the `stablediffusion` model in the [models-gallery](https://github.com/go-skynet/model-gallery#image-generation-stable-diffusion): +```bash +curl $LOCALAI/models/apply -H "Content-Type: application/json" -d '{ + "url": "github:go-skynet/model-gallery/stablediffusion.yaml" + }' +``` + +{{% /tab %}} +{{% tab name="Automatically prepare the model before start" %}} + +You can set the `PRELOAD_MODELS` environment variable: + +```bash +PRELOAD_MODELS=[{"url": "github:go-skynet/model-gallery/stablediffusion.yaml"}] +``` + +or as arg: + +```bash +local-ai --preload-models '[{"url": "github:go-skynet/model-gallery/stablediffusion.yaml"}]' +``` + +or in a YAML file: + +```bash +local-ai --preload-models-config "/path/to/yaml" +``` + +YAML: +```yaml +- url: github:go-skynet/model-gallery/stablediffusion.yaml +``` + +{{% /tab %}} +{{< /tabs >}} + +Test it: + +``` +curl $LOCALAI/v1/images/generations -H "Content-Type: application/json" -d '{ + "prompt": "floating hair, portrait, ((loli)), ((one girl)), cute face, hidden hands, asymmetrical bangs, beautiful detailed eyes, eye shadow, hair ornament, ribbons, bowties, buttons, pleated skirt, (((masterpiece))), ((best quality)), colorful|((part of the head)), ((((mutated hands and fingers)))), deformed, blurry, bad anatomy, disfigured, poorly drawn face, mutation, mutated, extra limb, ugly, poorly drawn hands, missing limb, blurry, floating limbs, disconnected limbs, malformed hands, blur, out of focus, long neck, long body, Octane renderer, lowres, bad anatomy, bad hands, text", + "mode": 2, "seed":9000, + "size": "256x256", "n":2 +}' +``` + +### Audio transcription: Whisper + +URL: https://github.com/ggerganov/whisper.cpp + +{{< tabs >}} +{{% tab name="Prepare the model in runtime" %}} + +```bash +curl $LOCALAI/models/apply -H "Content-Type: application/json" -d '{ + "url": "github:go-skynet/model-gallery/whisper-base.yaml", + "name": "whisper-1" + }' +``` + +{{% /tab %}} +{{% tab name="Automatically prepare the model before start" %}} + +You can set the `PRELOAD_MODELS` environment variable: + +```bash +PRELOAD_MODELS=[{"url": "github:go-skynet/model-gallery/whisper-base.yaml", "name": "whisper-1"}] +``` + +or as arg: + +```bash +local-ai --preload-models '[{"url": "github:go-skynet/model-gallery/whisper-base.yaml", "name": "whisper-1"}]' +``` + +or in a YAML file: + +```bash +local-ai --preload-models-config "/path/to/yaml" +``` + +YAML: +```yaml +- url: github:go-skynet/model-gallery/whisper-base.yaml + name: whisper-1 +``` + +{{% /tab %}} +{{< /tabs >}} + +### GPTs + +
+ +```bash +LOCALAI=http://localhost:8080 +curl $LOCALAI/models/apply -H "Content-Type: application/json" -d '{ + "url": "github:go-skynet/model-gallery/gpt4all-j.yaml", + "name": "gpt4all-j" + }' +``` + +To test it: + +``` +curl $LOCALAI/v1/chat/completions -H "Content-Type: application/json" -d '{ + "model": "gpt4all-j", + "messages": [{"role": "user", "content": "How are you?"}], + "temperature": 0.1 + }' +``` + +
+ +### Note + +LocalAI will create a batch process that downloads the required files from a model definition and automatically reload itself to include the new model. + +Input: `url` or `id` (required), `name` (optional), `files` (optional) + +```bash +curl http://localhost:8080/models/apply -H "Content-Type: application/json" -d '{ + "url": "", + "id": "@", + "name": "", + "files": [ + { + "uri": "", + "sha256": "", + "filename": "" + }, + "overrides": { "backend": "...", "f16": true } + ] + } +``` + +An optional, list of additional files can be specified to be downloaded within `files`. The `name` allows to override the model name. Finally it is possible to override the model config file with `override`. + +The `url` is a full URL, or a github url (`github:org/repo/file.yaml`), or a local file (`file:///path/to/file.yaml`). +The `id` is a string in the form `@`, where `` is the name of the gallery, and `` is the name of the model in the gallery. Galleries can be specified during startup with the `GALLERIES` environment variable. + +Returns an `uuid` and an `url` to follow up the state of the process: + +```json +{ "uuid":"251475c9-f666-11ed-95e0-9a8a4480ac58", "status":"http://localhost:8080/models/jobs/251475c9-f666-11ed-95e0-9a8a4480ac58"} +``` + +To see a collection example of curated models definition files, see the [model-gallery](https://github.com/go-skynet/model-gallery). + +#### Get model job state `/models/jobs/` + +This endpoint returns the state of the batch job associated to a model installation. + +```bash +curl http://localhost:8080/models/jobs/ +``` + +Returns a json containing the error, and if the job is being processed: + +```json +{"error":null,"processed":true,"message":"completed"} +``` diff --git a/docs/content/news/_index.en.md b/docs/content/news/_index.en.md new file mode 100644 index 00000000..61ae4f90 --- /dev/null +++ b/docs/content/news/_index.en.md @@ -0,0 +1,428 @@ ++++ +disableToc = false +title = "πŸ†• What's New" +weight = 2 +url = '/basics/news/' + ++++ + +## 30-10-2023: __v1.40.0__ + +This release is a preparation before v2 - the efforts now will be to refactor, polish and add new backends. Follow up on: https://github.com/mudler/LocalAI/issues/1126 + +## Hot topics + +This release now brings the `llama-cpp` backend which is a c++ backend tied to llama.cpp. It follows more closely and tracks recent versions of llama.cpp. It is not feature compatible with the current `llama` backend but plans are to sunset the current `llama` backend in favor of this one. This one will be probably be the latest release containing the older `llama` backend written in go and c++. The major improvement with this change is that there are less layers that could be expose to potential bugs - and as well it ease out maintenance as well. + +### Support for ROCm/HIPBLAS + +This release bring support for AMD thanks to @65a . See more details in https://github.com/mudler/LocalAI/pull/1100 + +### More CLI commands + +Thanks to @jespino now the local-ai binary has more subcommands allowing to manage the gallery or try out directly inferencing, check it out! + +[Release notes](https://github.com/mudler/LocalAI/releases/tag/v1.40.0) + +## 25-09-2023: __v1.30.0__ + +This is an exciting LocalAI release! Besides bug-fixes and enhancements this release brings the new backend to a whole new level by extending support to vllm and vall-e-x for audio generation! + +Check out the documentation for vllm [here](https://localai.io/model-compatibility/vllm/) and Vall-E-X [here](https://localai.io/model-compatibility/vall-e-x/) + +[Release notes](https://github.com/mudler/LocalAI/releases/tag/v1.30.0) + +## 26-08-2023: __v1.25.0__ + +Hey everyone, [Ettore](https://github.com/mudler/) here, I'm so happy to share this release out - while this summer is hot apparently doesn't stop LocalAI development :) + +This release brings a lot of new features, bugfixes and updates! Also a big shout out to the community, this was a great release! + +### Attention 🚨 + +From this release the `llama` backend supports only `gguf` files (see {{< pr "943" >}}). LocalAI however still supports `ggml` files. We ship a version of llama.cpp before that change in a separate backend, named `llama-stable` to allow still loading `ggml` files. If you were specifying the `llama` backend manually to load `ggml` files from this release you should use `llama-stable` instead, or do not specify a backend at all (LocalAI will automatically handle this). + +### Image generation enhancements + +The [Diffusers]({{%relref "model-compatibility/diffusers" %}}) backend got now various enhancements, including support to generate images from images, longer prompts, and support for more kernels schedulers. See the [Diffusers]({{%relref "model-compatibility/diffusers" %}}) documentation for more information. + +### Lora adapters + +Now it's possible to load lora adapters for llama.cpp. See {{< pr "955" >}} for more information. + +### Device management + +It is now possible for single-devices with one GPU to specify `--single-active-backend` to allow only one backend active at the time {{< pr "925" >}}. + +### Community spotlight + +![2023_08_26_15_09_27](https://github.com/go-skynet/localai-website/assets/2420543/f0204f8f-7462-4cdd-9154-4538683c1eef) + +#### Resources management + +Thanks to the continous community efforts (another cool contribution from {{< github "dave-gray101" >}} ) now it's possible to shutdown a backend programmatically via the API. +There is an ongoing effort in the community to better handling of resources. See also the [πŸ”₯Roadmap](https://localai.io/#-hot-topics--roadmap). + +#### New how-to section + +Thanks to the community efforts now we have a new [how-to section]({{%relref "howtos" %}}) with various examples on how to use LocalAI. This is a great starting point for new users! We are currently working on improving it, a huge shout out to {{< github "lunamidori5" >}} from the community for the impressive efforts on this! + +#### πŸ’‘ More examples! + +- Open source autopilot? See the new addition by {{< github "gruberdev" >}} in our [examples](https://github.com/go-skynet/LocalAI/tree/master/examples/continue) on how to use Continue with LocalAI! +- Want to try LocalAI with Insomnia? Check out the new [Insomnia example](https://github.com/go-skynet/LocalAI/tree/master/examples/insomnia) by {{< github "dave-gray101" >}}! + +#### LocalAGI in discord! + +Did you know that we have now few cool bots in our Discord? come check them out! We also have an instance of [LocalAGI](https://github.com/mudler/LocalAGI) ready to help you out! + + + +### Changelog summary + +#### Breaking Changes πŸ›  +* feat: bump llama.cpp, add gguf support by {{< github "mudler" >}} in {{< pr "943" >}} + +#### Exciting New Features πŸŽ‰ + +* feat(Makefile): allow to restrict backend builds by {{< github "mudler" >}} in {{< pr "890" >}} +* feat(diffusers): various enhancements by {{< github "mudler" >}} in {{< pr "895" >}} +* feat: make initializer accept gRPC delay times by {{< github "mudler" >}} in {{< pr "900" >}} +* feat(diffusers): add DPMSolverMultistepScheduler++, DPMSolverMultistepSchedulerSDE++, guidance_scale by {{< github "mudler" >}} in {{< pr "903" >}} +* feat(diffusers): overcome prompt limit by {{< github "mudler" >}} in {{< pr "904" >}} +* feat(diffusers): add img2img and clip_skip, support more kernels schedulers by {{< github "mudler" >}} in {{< pr "906" >}} +* Usage Features by {{< github "dave-gray101" >}} in {{< pr "863" >}} +* feat(diffusers): be consistent with pipelines, support also depthimg2img by {{< github "mudler" >}} in {{< pr "926" >}} +* feat: add --single-active-backend to allow only one backend active at the time by {{< github "mudler" >}} in {{< pr "925" >}} +* feat: add llama-stable backend by {{< github "mudler" >}} in {{< pr "932" >}} +* feat: allow to customize rwkv tokenizer by {{< github "dave-gray101" >}} in {{< pr "937" >}} +* feat: backend monitor shutdown endpoint, process based by {{< github "dave-gray101" >}} in {{< pr "938" >}} +* feat: Allow to load lora adapters for llama.cpp by {{< github "mudler" >}} in {{< pr "955" >}} + +Join our Discord community! our vibrant community is growing fast, and we are always happy to help! https://discord.gg/uJAeKSAGDy + +The full changelog is available [here](https://github.com/go-skynet/LocalAI/releases/tag/v.1.25.0). + +--- + +## πŸ”₯πŸ”₯πŸ”₯πŸ”₯ 12-08-2023: __v1.24.0__ πŸ”₯πŸ”₯πŸ”₯πŸ”₯ + +This is release brings four(!) new additional backends to LocalAI: [🐢 Bark]({{%relref "model-compatibility/bark" %}}), πŸ¦™ [AutoGPTQ]({{%relref "model-compatibility/autogptq" %}}), [🧨 Diffusers]({{%relref "model-compatibility/diffusers" %}}), πŸ¦™ [exllama]({{%relref "model-compatibility/exllama" %}}) and a lot of improvements! + +### Major improvements: + +* feat: add bark and AutoGPTQ by {{< github "mudler" >}} in {{< pr "871" >}} +* feat: Add Diffusers by {{< github "mudler" >}} in {{< pr "874" >}} +* feat: add API_KEY list support by {{< github "neboman11" >}} and {{< github "bnusunny" >}} in {{< pr "877" >}} +* feat: Add exllama by {{< github "mudler" >}} in {{< pr "881" >}} +* feat: pre-configure LocalAI galleries by {{< github "mudler" >}} in {{< pr "886" >}} + +### 🐢 Bark + +[Bark]({{%relref "model-compatibility/bark" %}}) is a text-prompted generative audio model - it combines GPT techniques to generate Audio from text. It is a great addition to LocalAI, and it's available in the container images by default. + +It can also generate music, see the example: [lion.webm](https://user-images.githubusercontent.com/5068315/230684766-97f5ea23-ad99-473c-924b-66b6fab24289.webm) + +### πŸ¦™ AutoGPTQ + +[AutoGPTQ]({{%relref "model-compatibility/autogptq" %}}) is an easy-to-use LLMs quantization package with user-friendly apis, based on GPTQ algorithm. + +It is targeted mainly for GPU usage only. Check out the [AutoGPTQ documentation]({{%relref "model-compatibility/autogptq" %}}) for usage. + +### πŸ¦™ Exllama + +[Exllama]({{%relref "model-compatibility/exllama" %}}) is a "A more memory-efficient rewrite of the HF transformers implementation of Llama for use with quantized weights". It is a faster alternative to run LLaMA models on GPU.Check out the [Exllama documentation]({{%relref "model-compatibility/exllama" %}}) for usage. + +### 🧨 Diffusers + +[Diffusers]({{%relref "model-compatibility/diffusers" %}}) is the go-to library for state-of-the-art pretrained diffusion models for generating images, audio, and even 3D structures of molecules. Currently it is experimental, and supports generation only of images so you might encounter some issues on models which weren't tested yet. Check out the [Diffusers documentation]({{%relref "model-compatibility/diffusers" %}}) for usage. + +### πŸ”‘ API Keys + +Thanks to the community contributions now it's possible to specify a list of API keys that can be used to gate API requests. + +API Keys can be specified with the `API_KEY` environment variable as a comma-separated list of keys. + +### πŸ–ΌοΈ Galleries + +Now by default the model-gallery repositories are configured in the container images + +### πŸ’‘ New project + +[LocalAGI](https://github.com/mudler/LocalAGI) is a simple agent that uses LocalAI functions to have a full locally runnable assistant (with no API keys needed). + +See it [here in action](https://github.com/mudler/LocalAGI/assets/2420543/9ba43b82-dec5-432a-bdb9-8318e7db59a4) planning a trip for San Francisco! + +The full changelog is available [here](https://github.com/go-skynet/LocalAI/releases/tag/v.1.24.0). + +--- + +## πŸ”₯πŸ”₯ 29-07-2023: __v1.23.0__ πŸš€ + +This release focuses mostly on bugfixing and updates, with just a couple of new features: + +* feat: add rope settings and negative prompt, drop grammar backend by {{< github "mudler" >}} in {{< pr "797" >}} +* Added CPU information to entrypoint.sh by @finger42 in {{< pr "794" >}} +* feat: cancel stream generation if client disappears by @tmm1 in {{< pr "792" >}} + +Most notably, this release brings important fixes for CUDA (and not only): + +* fix: add rope settings during model load, fix CUDA by {{< github "mudler" >}} in {{< pr "821" >}} +* fix: select function calls if 'name' is set in the request by {{< github "mudler" >}} in {{< pr "827" >}} +* fix: symlink libphonemize in the container by {{< github "mudler" >}} in {{< pr "831" >}} + +{{% notice note %}} + +From this release [OpenAI functions]({{%relref "features/openai-functions" %}}) are available in the `llama` backend. The `llama-grammar` has been deprecated. See also [OpenAI functions]({{%relref "features/openai-functions" %}}). + +{{% /notice %}} + +The full [changelog is available here](https://github.com/go-skynet/LocalAI/releases/tag/v1.23.0) + +--- + +## πŸ”₯πŸ”₯πŸ”₯ 23-07-2023: __v1.22.0__ πŸš€ + +* feat: add llama-master backend by {{< github "mudler" >}} in {{< pr "752" >}} +* [build] pass build type to cmake on libtransformers.a build by @TonDar0n in {{< pr "741" >}} +* feat: resolve JSONSchema refs (planners) by {{< github "mudler" >}} in {{< pr "774" >}} +* feat: backends improvements by {{< github "mudler" >}} in {{< pr "778" >}} +* feat(llama2): add template for chat messages by {{< github "dave-gray101" >}} in {{< pr "782" >}} + +{{% notice note %}} + +From this release to use the OpenAI functions you need to use the `llama-grammar` backend. It has been added a `llama` backend for tracking `llama.cpp` master and `llama-grammar` for the grammar functionalities that have not been merged yet upstream. See also [OpenAI functions]({{%relref "features/openai-functions" %}}). Until the feature is merged we will have two llama backends. + +{{% /notice %}} + +## Huggingface embeddings + +In this release is now possible to specify to LocalAI external `gRPC` backends that can be used for inferencing {{< pr "778" >}}. It is now possible to write internal backends in any language, and a `huggingface-embeddings` backend is now available in the container image to be used with https://github.com/UKPLab/sentence-transformers. See also [Embeddings]({{%relref "features/embeddings" %}}). + +## LLaMa 2 has been released! + +Thanks to the community effort now LocalAI supports templating for LLaMa2! more at: {{< pr "782" >}} until we update the model gallery with LLaMa2 models! + +## Official langchain integration + +Progress has been made to support LocalAI with `langchain`. See: https://github.com/langchain-ai/langchain/pull/8134 + +--- + +## πŸ”₯πŸ”₯πŸ”₯ 17-07-2023: __v1.21.0__ πŸš€ + +* [whisper] Partial support for verbose_json format in transcribe endpoint by `@ldotlopez` in {{< pr "721" >}} +* LocalAI functions by `@mudler` in {{< pr "726" >}} +* `gRPC`-based backends by `@mudler` in {{< pr "743" >}} +* falcon support (7b and 40b) with `ggllm.cpp` by `@mudler` in {{< pr "743" >}} + +### LocalAI functions + +This allows to run OpenAI functions as described in the OpenAI blog post and documentation: https://openai.com/blog/function-calling-and-other-api-updates. + +This is a video of running the same example, locally with `LocalAI`: +![localai-functions-1](https://github.com/ggerganov/llama.cpp/assets/2420543/5bd15da2-78c1-4625-be90-1e938e6823f1) + +And here when it actually picks to reply to the user instead of using functions! +![functions-2](https://github.com/ggerganov/llama.cpp/assets/2420543/e3f89d15-1d2c-45ab-974f-6c9eb8eae41d) + +Note: functions are supported only with `llama.cpp`-compatible models. + +A full example is available here: https://github.com/go-skynet/LocalAI/tree/master/examples/functions + +### gRPC backends + +This is an internal refactor which is not user-facing, however, it allows to ease out maintenance and addition of new backends to LocalAI! + +### `falcon` support + +Now Falcon 7b and 40b models compatible with https://github.com/cmp-nct/ggllm.cpp are supported as well. + +The former, ggml-based backend has been renamed to `falcon-ggml`. + +### Default pre-compiled binaries + +From this release the default behavior of images has changed. Compilation is not triggered on start automatically, to recompile `local-ai` from scratch on start and switch back to the old behavior, you can set `REBUILD=true` in the environment variables. Rebuilding can be necessary if your CPU and/or architecture is old and the pre-compiled binaries are not compatible with your platform. See the [build section]({{%relref "build" %}}) for more information. + +[Full release changelog](https://github.com/go-skynet/LocalAI/releases/tag/v1.21.0) + +--- + +## πŸ”₯πŸ”₯πŸ”₯ 28-06-2023: __v1.20.0__ πŸš€ + +### Exciting New Features πŸŽ‰ + +* Add Text-to-Audio generation with `go-piper` by {{< github "mudler" >}} in {{< pr "649" >}} See [API endpoints]({{%relref "features/text-to-audio" %}}) in our documentation. +* Add gallery repository by {{< github "mudler" >}} in {{< pr "663" >}}. See [models]({{%relref "models" %}}) for documentation. + +### Container images +- Standard (GPT + `stablediffusion`): `quay.io/go-skynet/local-ai:v1.20.0` +- FFmpeg: `quay.io/go-skynet/local-ai:v1.20.0-ffmpeg` +- CUDA 11+FFmpeg: `quay.io/go-skynet/local-ai:v1.20.0-cublas-cuda11-ffmpeg` +- CUDA 12+FFmpeg: `quay.io/go-skynet/local-ai:v1.20.0-cublas-cuda12-ffmpeg` + +### Updates + +Updates to `llama.cpp`, `go-transformers`, `gpt4all.cpp` and `rwkv.cpp`. + +The NUMA option was enabled by {{< github "mudler" >}} in {{< pr "684" >}}, along with many new parameters (`mmap`,`mmlock`, ..). See [advanced]({{%relref "advanced" %}}) for the full list of parameters. + +### Gallery repositories + +In this release there is support for gallery repositories. These are repositories that contain models, and can be used to install models. The default gallery which contains only freely licensed models is in Github: https://github.com/go-skynet/model-gallery, but you can use your own gallery by setting the `GALLERIES` environment variable. An automatic index of huggingface models is available as well. + +For example, now you can start `LocalAI` with the following environment variable to use both galleries: + +```bash +GALLERIES=[{"name":"model-gallery", "url":"github:go-skynet/model-gallery/index.yaml"}, {"url": "github:ci-robbot/localai-huggingface-zoo/index.yaml","name":"huggingface"}] +``` + +And in runtime you can install a model from huggingface now with: + +```bash +curl http://localhost:8000/models/apply -H "Content-Type: application/json" -d '{ "id": "huggingface@thebloke__open-llama-7b-open-instruct-ggml__open-llama-7b-open-instruct.ggmlv3.q4_0.bin" }' +``` + +or a `tts` voice with: + +```bash +curl http://localhost:8080/models/apply -H "Content-Type: application/json" -d '{ "id": "model-gallery@voice-en-us-kathleen-low" }' +``` + +See also [models]({{%relref "models" %}}) for a complete documentation. + +### Text to Audio + +Now `LocalAI` uses [piper](https://github.com/rhasspy/piper) and [go-piper](https://github.com/mudler/go-piper) to generate audio from text. This is an experimental feature, and it requires `GO_TAGS=tts` to be set during build. It is enabled by default in the pre-built container images. + +To setup audio models, you can use the new galleries, or setup the models manually as described in [the API section of the documentation]({{%relref "features/text-to-audio" %}}). + +You can check the full changelog in [Github](https://github.com/go-skynet/LocalAI/releases/tag/v1.20.0) + +--- + +## πŸ”₯πŸ”₯πŸ”₯ 19-06-2023: __v1.19.0__ πŸš€ + +- Full CUDA GPU offload support ( [PR](https://github.com/go-skynet/go-llama.cpp/pull/105) by [mudler](https://github.com/mudler). Thanks to [chnyda](https://github.com/chnyda) for handing over the GPU access, and [lu-zero](https://github.com/lu-zero) to help in debugging ) +- Full GPU Metal Support is now fully functional. Thanks to [Soleblaze](https://github.com/Soleblaze) to iron out the Metal Apple silicon support! + +Container images: +- Standard (GPT + `stablediffusion`): `quay.io/go-skynet/local-ai:v1.19.2` +- FFmpeg: `quay.io/go-skynet/local-ai:v1.19.2-ffmpeg` +- CUDA 11+FFmpeg: `quay.io/go-skynet/local-ai:v1.19.2-cublas-cuda11-ffmpeg` +- CUDA 12+FFmpeg: `quay.io/go-skynet/local-ai:v1.19.2-cublas-cuda12-ffmpeg` + +--- + +## πŸ”₯πŸ”₯πŸ”₯ 06-06-2023: __v1.18.0__ πŸš€ + +This LocalAI release is plenty of new features, bugfixes and updates! Thanks to the community for the help, this was a great community release! + +We now support a vast variety of models, while being backward compatible with prior quantization formats, this new release allows still to load older formats and new [k-quants](https://github.com/ggerganov/llama.cpp/pull/1684)! + +### New features + +- ✨ Added support for `falcon`-based model families (7b) ( [mudler](https://github.com/mudler) ) +- ✨ Experimental support for Metal Apple Silicon GPU - ( [mudler](https://github.com/mudler) and thanks to [Soleblaze](https://github.com/Soleblaze) for testing! ). See the [build section]({{%relref "build#Acceleration" %}}). +- ✨ Support for token stream in the `/v1/completions` endpoint ( [samm81](https://github.com/samm81) ) +- ✨ Added huggingface backend ( [Evilfreelancer](https://github.com/EvilFreelancer) ) +- πŸ“· Stablediffusion now can output `2048x2048` images size with `esrgan`! ( [mudler](https://github.com/mudler) ) + +### Container images +- πŸ‹ CUDA container images (arm64, x86_64) ( [sebastien-prudhomme](https://github.com/sebastien-prudhomme) ) +- πŸ‹ FFmpeg container images (arm64, x86_64) ( [mudler](https://github.com/mudler) ) + +### Dependencies updates + +- πŸ†™ Bloomz has been updated to the latest ggml changes, including new quantization format ( [mudler](https://github.com/mudler) ) +- πŸ†™ RWKV has been updated to the new quantization format( [mudler](https://github.com/mudler) ) +- πŸ†™ [k-quants](https://github.com/ggerganov/llama.cpp/pull/1684) format support for the `llama` models ( [mudler](https://github.com/mudler) ) +- πŸ†™ gpt4all has been updated, incorporating upstream changes allowing to load older models, and with different CPU instruction set (AVX only, AVX2) from the same binary! ( [mudler](https://github.com/mudler) ) + +### Generic + +- 🐧 Fully Linux static binary releases ( [mudler](https://github.com/mudler) ) +- πŸ“· Stablediffusion has been enabled on container images by default ( [mudler](https://github.com/mudler) ) + Note: You can disable container image rebuilds with `REBUILD=false` + +### Examples + +- πŸ’‘ [AutoGPT](https://github.com/go-skynet/LocalAI/tree/master/examples/autoGPT) example ( [mudler](https://github.com/mudler) ) +- πŸ’‘ [PrivateGPT](https://github.com/go-skynet/LocalAI/tree/master/examples/privateGPT) example ( [mudler](https://github.com/mudler) ) +- πŸ’‘ [Flowise](https://github.com/go-skynet/LocalAI/tree/master/examples/flowise) example ( [mudler](https://github.com/mudler) ) + +Two new projects offer now direct integration with LocalAI! + +- [Flowise](https://github.com/FlowiseAI/Flowise/pull/123) +- [Mods](https://github.com/charmbracelet/mods) + +[Full release changelog](https://github.com/go-skynet/LocalAI/releases/tag/v1.18.0) + +--- + +## 29-05-2023: __v1.17.0__ + +Support for OpenCL has been added while building from sources. + +You can now build LocalAI from source with `BUILD_TYPE=clblas` to have an OpenCL build. See also the [build section]({{%relref "build#Acceleration" %}}). + +For instructions on how to install OpenCL/CLBlast see [here](https://github.com/ggerganov/llama.cpp#blas-build). + +rwkv.cpp has been updated to the new ggml format [commit](https://github.com/saharNooby/rwkv.cpp/commit/dea929f8cad90b7cf2f820c5a3d6653cfdd58c4e). + +--- + +## 27-05-2023: __v1.16.0__ + +Now it's possible to automatically download pre-configured models before starting the API. + +Start local-ai with the `PRELOAD_MODELS` containing a list of models from the gallery, for instance to install `gpt4all-j` as `gpt-3.5-turbo`: + +```bash +PRELOAD_MODELS=[{"url": "github:go-skynet/model-gallery/gpt4all-j.yaml", "name": "gpt-3.5-turbo"}] +``` + +`llama.cpp` models now can also automatically save the prompt cache state as well by specifying in the model YAML configuration file: + +```yaml +# Enable prompt caching + +# This is a file that will be used to save/load the cache. relative to the models directory. +prompt_cache_path: "alpaca-cache" + +# Always enable prompt cache +prompt_cache_all: true +``` + +See also the [advanced section]({{%relref "advanced" %}}). + +## Media, Blogs, Social + +- [Create a slackbot for teams and OSS projects that answer to documentation](https://mudler.pm/posts/smart-slackbot-for-teams/) +- [LocalAI meets k8sgpt](https://www.youtube.com/watch?v=PKrDNuJ_dfE) - CNCF Webinar showcasing LocalAI and k8sgpt. +- [Question Answering on Documents locally with LangChain, LocalAI, Chroma, and GPT4All](https://mudler.pm/posts/localai-question-answering/) by Ettore Di Giacinto +- [Tutorial to use k8sgpt with LocalAI](https://medium.com/@tyler_97636/k8sgpt-localai-unlock-kubernetes-superpowers-for-free-584790de9b65) - excellent usecase for localAI, using AI to analyse Kubernetes clusters. by Tyller Gillson + +## Previous + +- 23-05-2023: __v1.15.0__ released. `go-gpt2.cpp` backend got renamed to `go-ggml-transformers.cpp` updated including https://github.com/ggerganov/llama.cpp/pull/1508 which breaks compatibility with older models. This impacts RedPajama, GptNeoX, MPT(not `gpt4all-mpt`), Dolly, GPT2 and Starcoder based models. [Binary releases available](https://github.com/go-skynet/LocalAI/releases), various fixes, including {{< pr "341" >}} . +- 21-05-2023: __v1.14.0__ released. Minor updates to the `/models/apply` endpoint, `llama.cpp` backend updated including https://github.com/ggerganov/llama.cpp/pull/1508 which breaks compatibility with older models. `gpt4all` is still compatible with the old format. +- 19-05-2023: __v1.13.0__ released! πŸ”₯πŸ”₯ updates to the `gpt4all` and `llama` backend, consolidated CUDA support ( {{< pr "310" >}} thanks to @bubthegreat and @Thireus ), preliminar support for [installing models via API]({{%relref "advanced#" %}}). +- 17-05-2023: __v1.12.0__ released! πŸ”₯πŸ”₯ Minor fixes, plus CUDA ({{< pr "258" >}}) support for `llama.cpp`-compatible models and image generation ({{< pr "272" >}}). +- 16-05-2023: πŸ”₯πŸ”₯πŸ”₯ Experimental support for CUDA ({{< pr "258" >}}) in the `llama.cpp` backend and Stable diffusion CPU image generation ({{< pr "272" >}}) in `master`. + +Now LocalAI can generate images too: + +| mode=0 | mode=1 (winograd/sgemm) | +|------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------| +| ![b6441997879](https://github.com/go-skynet/LocalAI/assets/2420543/d50af51c-51b7-4f39-b6c2-bf04c403894c) | ![winograd2](https://github.com/go-skynet/LocalAI/assets/2420543/1935a69a-ecce-4afc-a099-1ac28cb649b3) | + +- 14-05-2023: __v1.11.1__ released! `rwkv` backend patch release +- 13-05-2023: __v1.11.0__ released! πŸ”₯ Updated `llama.cpp` bindings: This update includes a breaking change in the model files ( https://github.com/ggerganov/llama.cpp/pull/1405 ) - old models should still work with the `gpt4all-llama` backend. +- 12-05-2023: __v1.10.0__ released! πŸ”₯πŸ”₯ Updated `gpt4all` bindings. Added support for GPTNeox (experimental), RedPajama (experimental), Starcoder (experimental), Replit (experimental), MosaicML MPT. Also now `embeddings` endpoint supports tokens arrays. See the [langchain-chroma](https://github.com/go-skynet/LocalAI/tree/master/examples/langchain-chroma) example! Note - this update does NOT include https://github.com/ggerganov/llama.cpp/pull/1405 which makes models incompatible. +- 11-05-2023: __v1.9.0__ released! πŸ”₯ Important whisper updates ( {{< pr "233" >}} {{< pr "229" >}} ) and extended gpt4all model families support ( {{< pr "232" >}} ). Redpajama/dolly experimental ( {{< pr "214" >}} ) +- 10-05-2023: __v1.8.0__ released! πŸ”₯ Added support for fast and accurate embeddings with `bert.cpp` ( {{< pr "222" >}} ) +- 09-05-2023: Added experimental support for transcriptions endpoint ( {{< pr "211" >}} ) +- 08-05-2023: Support for embeddings with models using the `llama.cpp` backend ( {{< pr "207" >}} ) +- 02-05-2023: Support for `rwkv.cpp` models ( {{< pr "158" >}} ) and for `/edits` endpoint +- 01-05-2023: Support for SSE stream of tokens in `llama.cpp` backends ( {{< pr "152" >}} ) diff --git a/docs/docker-compose.yaml b/docs/docker-compose.yaml new file mode 100644 index 00000000..e8f211a6 --- /dev/null +++ b/docs/docker-compose.yaml @@ -0,0 +1,13 @@ +version: "3.3" + +services: + + site: + image: docsy/docsy-example + build: + context: . + command: server + ports: + - "1313:1313" + volumes: + - .:/src diff --git a/docs/go.mod b/docs/go.mod new file mode 100644 index 00000000..35b89dd1 --- /dev/null +++ b/docs/go.mod @@ -0,0 +1,3 @@ +module github.com/McShelby/hugo-theme-relearn.git + +go 1.19 diff --git a/docs/go.sum b/docs/go.sum new file mode 100644 index 00000000..e69de29b diff --git a/docs/layouts/404.html b/docs/layouts/404.html new file mode 100644 index 00000000..378b7367 --- /dev/null +++ b/docs/layouts/404.html @@ -0,0 +1,10 @@ +{{ define "main"}} +
+
+

Not found

+

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

+ +

You can learn how to make a 404 page like this in Custom 404 Pages.

+
+
+{{ end }} diff --git a/docs/layouts/partials/logo.html b/docs/layouts/partials/logo.html new file mode 100644 index 00000000..6b9f500b --- /dev/null +++ b/docs/layouts/partials/logo.html @@ -0,0 +1 @@ + diff --git a/docs/layouts/shortcodes/github.html b/docs/layouts/shortcodes/github.html new file mode 100644 index 00000000..1136e57f --- /dev/null +++ b/docs/layouts/shortcodes/github.html @@ -0,0 +1,5 @@ +{{ if .IsNamedParams }} +{{ .Get "user" }} +{{ else }} +{{ .Get 0 }} +{{ end }} diff --git a/docs/layouts/shortcodes/pr.html b/docs/layouts/shortcodes/pr.html new file mode 100644 index 00000000..5c09e1cf --- /dev/null +++ b/docs/layouts/shortcodes/pr.html @@ -0,0 +1,5 @@ +{{ if .IsNamedParams }} +{{ .Get "number" }} +{{ else }} +{{ .Get 0 }} +{{ end }} diff --git a/docs/netlify.toml b/docs/netlify.toml new file mode 100644 index 00000000..e04cfd8a --- /dev/null +++ b/docs/netlify.toml @@ -0,0 +1,4 @@ +[build] +[build.environment] +HUGO_VERSION = "0.104.3" +GO_VERSION = "1.19.2" diff --git a/docs/package.json b/docs/package.json new file mode 100644 index 00000000..0e1e2d39 --- /dev/null +++ b/docs/package.json @@ -0,0 +1,24 @@ +{ + "name": "tech-doc-hugo", + "version": "0.0.1", + "description": "Hugo theme for technical documentation.", + "main": "none.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/google/docsy-example.git" + }, + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/google/docsy-example/issues" + }, + "homepage": "https://github.com/google/docsy-example#readme", + "devDependencies": { + "autoprefixer": "^10.4.0", + "postcss": "^8.3.7", + "postcss-cli": "^10.0.0" + } +} diff --git a/docs/themes/hugo-theme-relearn b/docs/themes/hugo-theme-relearn new file mode 160000 index 00000000..c25bc2a2 --- /dev/null +++ b/docs/themes/hugo-theme-relearn @@ -0,0 +1 @@ +Subproject commit c25bc2a27ab46649393ef7b310e14fff1311116d