From 6ca4d38a01f48b717ae9a201cef7dce72016e78d Mon Sep 17 00:00:00 2001 From: Ettore Di Giacinto Date: Thu, 18 Jan 2024 19:41:08 +0100 Subject: [PATCH] docs/examples: enhancements (#1572) * docs: re-order sections * fix references * Add mixtral-instruct, tinyllama-chat, dolphin-2.5-mixtral-8x7b * Fix link * Minor corrections * fix: models is a StringSlice, not a String Signed-off-by: Ettore Di Giacinto * WIP: switch docs theme * content * Fix GH link * enhancements * enhancements * Fixed how to link Signed-off-by: lunamidori5 <118759930+lunamidori5@users.noreply.github.com> * fixups * logo fix * more fixups * final touches --------- Signed-off-by: Ettore Di Giacinto Signed-off-by: lunamidori5 <118759930+lunamidori5@users.noreply.github.com> Co-authored-by: lunamidori5 <118759930+lunamidori5@users.noreply.github.com> --- .github/ISSUE_TEMPLATE/bug_report.md | 4 +- .github/ISSUE_TEMPLATE/feature_request.md | 4 +- .gitmodules | 3 + LICENSE | 2 +- docs/assets/jsconfig.json | 11 + docs/config.toml | 296 ++++++----- docs/content/advanced/development.md | 37 -- docs/content/docs/advanced/_index.en.md | 11 + .../advanced/advanced-usage.md} | 24 +- .../{ => docs}/advanced/fine-tuning.md | 6 +- .../content/{faq/_index.en.md => docs/faq.md} | 53 +- .../{ => docs}/features/GPU-acceleration.md | 15 +- docs/content/docs/features/_index.en.md | 7 + .../{ => docs}/features/audio-to-text.md | 6 +- .../features/constrained_grammars.md | 10 +- .../content/{ => docs}/features/embeddings.md | 6 +- .../content/{ => docs}/features/gpt-vision.md | 6 +- .../{ => docs}/features/image-generation.md | 214 +++++++- .../features/model-gallery.md} | 32 +- .../{ => docs}/features/openai-functions.md | 6 +- docs/content/docs/features/text-generation.md | 263 ++++++++++ docs/content/docs/features/text-to-audio.md | 158 ++++++ .../content/docs/getting-started/_index.en.md | 7 + .../getting-started/build.md} | 53 +- .../docs/getting-started/customize-model.md | 71 +++ docs/content/docs/getting-started/manual.md | 150 ++++++ .../docs/getting-started/quickstart.md | 187 +++++++ docs/content/docs/integrations.md | 34 ++ .../{_index.en.md => docs/overview.md} | 23 +- docs/content/docs/reference/_index.en.md | 11 + .../reference/compatibility-table.md} | 52 +- .../{news/_index.en.md => docs/whats-new.md} | 64 +-- docs/content/features/_index.en.md | 17 - docs/content/features/text-generation.md | 70 --- docs/content/features/text-to-audio.md | 77 --- docs/content/getting_started/_index.en.md | 323 ------------ docs/content/integrations/AIKit.md | 178 ------- docs/content/integrations/AnythingLLM.md | 70 --- docs/content/integrations/BMO-Chatbot.md | 58 --- docs/content/integrations/Bionic-GPT.md | 103 ---- docs/content/integrations/Flowise.md | 54 -- docs/content/integrations/K8sGPT.md | 466 ------------------ docs/content/integrations/Kairos.md | 39 -- docs/content/integrations/LLMStack.md | 60 --- docs/content/integrations/LinGoose.md | 74 --- docs/content/integrations/LocalAGI.md | 174 ------- .../integrations/Mattermost-OpenOps.md | 84 ---- docs/content/integrations/Mods.md | 246 --------- docs/content/integrations/Spark.md | 75 --- docs/content/integrations/_index.md | 14 - docs/content/integrations/autogpt4all.md | 77 --- docs/content/integrations/langchain4j.md | 399 --------------- docs/content/model-compatibility/autogptq.md | 38 -- docs/content/model-compatibility/bark.md | 39 -- docs/content/model-compatibility/diffusers.md | 208 -------- docs/content/model-compatibility/exllama.md | 42 -- docs/content/model-compatibility/llama-cpp.md | 81 --- docs/content/model-compatibility/rwkv.md | 15 - docs/content/model-compatibility/vall-e-x.md | 50 -- docs/content/model-compatibility/vllm.md | 39 -- docs/data/landing.yaml | 50 ++ docs/go.mod | 2 + docs/go.sum | 4 + docs/layouts/index.html | 0 docs/layouts/partials/docs/gitinfo.html | 47 ++ docs/layouts/partials/docs/sidebar.html | 131 +++++ docs/layouts/partials/head.html | 62 +++ docs/netlify.toml | 2 +- docs/static/android-chrome-192x192.png | Bin 0 -> 58772 bytes docs/static/android-chrome-512x512.png | Bin 0 -> 367658 bytes docs/static/apple-touch-icon.png | Bin 0 -> 52747 bytes docs/static/favicon-16x16.png | Bin 0 -> 769 bytes docs/static/favicon-32x32.png | Bin 0 -> 2331 bytes docs/static/favicon.ico | Bin 0 -> 15406 bytes docs/themes/lotusdocs | 1 + embedded/models/dolphin-2.5-mixtral-8x7b.yaml | 27 + embedded/models/mixtral-instruct.yaml | 20 + embedded/models/tinyllama-chat.yaml | 28 ++ main.go | 2 +- 79 files changed, 1826 insertions(+), 3546 deletions(-) create mode 100644 docs/assets/jsconfig.json delete mode 100644 docs/content/advanced/development.md create mode 100644 docs/content/docs/advanced/_index.en.md rename docs/content/{advanced/_index.en.md => docs/advanced/advanced-usage.md} (97%) rename docs/content/{ => docs}/advanced/fine-tuning.md (99%) rename docs/content/{faq/_index.en.md => docs/faq.md} (87%) rename docs/content/{ => docs}/features/GPU-acceleration.md (94%) create mode 100644 docs/content/docs/features/_index.en.md rename docs/content/{ => docs}/features/audio-to-text.md (95%) rename docs/content/{ => docs}/features/constrained_grammars.md (73%) rename docs/content/{ => docs}/features/embeddings.md (98%) rename docs/content/{ => docs}/features/gpt-vision.md (92%) rename docs/content/{ => docs}/features/image-generation.md (50%) rename docs/content/{models/_index.en.md => docs/features/model-gallery.md} (98%) rename docs/content/{ => docs}/features/openai-functions.md (98%) create mode 100644 docs/content/docs/features/text-generation.md create mode 100644 docs/content/docs/features/text-to-audio.md create mode 100644 docs/content/docs/getting-started/_index.en.md rename docs/content/{build/_index.en.md => docs/getting-started/build.md} (78%) create mode 100644 docs/content/docs/getting-started/customize-model.md create mode 100644 docs/content/docs/getting-started/manual.md create mode 100644 docs/content/docs/getting-started/quickstart.md create mode 100644 docs/content/docs/integrations.md rename docs/content/{_index.en.md => docs/overview.md} (92%) create mode 100644 docs/content/docs/reference/_index.en.md rename docs/content/{model-compatibility/_index.en.md => docs/reference/compatibility-table.md} (77%) rename docs/content/{news/_index.en.md => docs/whats-new.md} (86%) delete mode 100644 docs/content/features/_index.en.md delete mode 100644 docs/content/features/text-generation.md delete mode 100644 docs/content/features/text-to-audio.md delete mode 100644 docs/content/getting_started/_index.en.md delete mode 100644 docs/content/integrations/AIKit.md delete mode 100644 docs/content/integrations/AnythingLLM.md delete mode 100644 docs/content/integrations/BMO-Chatbot.md delete mode 100644 docs/content/integrations/Bionic-GPT.md delete mode 100644 docs/content/integrations/Flowise.md delete mode 100644 docs/content/integrations/K8sGPT.md delete mode 100644 docs/content/integrations/Kairos.md delete mode 100644 docs/content/integrations/LLMStack.md delete mode 100644 docs/content/integrations/LinGoose.md delete mode 100644 docs/content/integrations/LocalAGI.md delete mode 100644 docs/content/integrations/Mattermost-OpenOps.md delete mode 100644 docs/content/integrations/Mods.md delete mode 100644 docs/content/integrations/Spark.md delete mode 100644 docs/content/integrations/_index.md delete mode 100644 docs/content/integrations/autogpt4all.md delete mode 100644 docs/content/integrations/langchain4j.md delete mode 100644 docs/content/model-compatibility/autogptq.md delete mode 100644 docs/content/model-compatibility/bark.md delete mode 100644 docs/content/model-compatibility/diffusers.md delete mode 100644 docs/content/model-compatibility/exllama.md delete mode 100644 docs/content/model-compatibility/llama-cpp.md delete mode 100644 docs/content/model-compatibility/rwkv.md delete mode 100644 docs/content/model-compatibility/vall-e-x.md delete mode 100644 docs/content/model-compatibility/vllm.md create mode 100644 docs/data/landing.yaml create mode 100644 docs/layouts/index.html create mode 100644 docs/layouts/partials/docs/gitinfo.html create mode 100644 docs/layouts/partials/docs/sidebar.html create mode 100644 docs/layouts/partials/head.html create mode 100644 docs/static/android-chrome-192x192.png create mode 100644 docs/static/android-chrome-512x512.png create mode 100644 docs/static/apple-touch-icon.png create mode 100644 docs/static/favicon-16x16.png create mode 100644 docs/static/favicon-32x32.png create mode 100644 docs/static/favicon.ico create mode 160000 docs/themes/lotusdocs create mode 100644 embedded/models/dolphin-2.5-mixtral-8x7b.yaml create mode 100644 embedded/models/mixtral-instruct.yaml create mode 100644 embedded/models/tinyllama-chat.yaml diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index a7f77221..36e22ced 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -2,9 +2,7 @@ name: Bug report about: Create a report to help us improve title: '' -labels: bug -assignees: mudler - +labels: bug, unconfirmed, up-for-grabs --- diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index c184aae9..d3b2873b 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -2,9 +2,7 @@ name: Feature request about: Suggest an idea for this project title: '' -labels: enhancement -assignees: mudler - +labels: enhancement, up-for-grabs --- diff --git a/.gitmodules b/.gitmodules index c263dbe0..2478b3ae 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "docs/themes/hugo-theme-relearn"] path = docs/themes/hugo-theme-relearn url = https://github.com/McShelby/hugo-theme-relearn.git +[submodule "docs/themes/lotusdocs"] + path = docs/themes/lotusdocs + url = https://github.com/colinwilson/lotusdocs diff --git a/LICENSE b/LICENSE index ad671f24..82df78b6 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2023 Ettore Di Giacinto +Copyright (c) 2023-2024 Ettore Di Giacinto (mudler@localai.io) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/docs/assets/jsconfig.json b/docs/assets/jsconfig.json new file mode 100644 index 00000000..9f2d1c43 --- /dev/null +++ b/docs/assets/jsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "paths": { + "*": [ + "../../../../.cache/hugo_cache/modules/filecache/modules/pkg/mod/github.com/gohugoio/hugo-mod-jslibs-dist/popperjs/v2@v2.21100.20000/package/dist/cjs/popper.js/*", + "../../../../.cache/hugo_cache/modules/filecache/modules/pkg/mod/github.com/twbs/bootstrap@v5.3.2+incompatible/js/*" + ] + } + } +} \ No newline at end of file diff --git a/docs/config.toml b/docs/config.toml index 65fa5ed4..71d18ba4 100644 --- a/docs/config.toml +++ b/docs/config.toml @@ -1,133 +1,178 @@ -# 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/" +languageCode = "en-GB" +contentDir = "content" +enableEmoji = true +enableGitInfo = true # N.B. .GitInfo does not currently function with git submodule content directories -# 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 +defaultContentLanguage = 'en' -# 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 + defaultMarkdownHandler = "goldmark" + [markup.tableOfContents] + endLevel = 3 + startLevel = 1 + [markup.goldmark] + [markup.goldmark.renderer] + unsafe = true # https://jdhao.github.io/2019/12/29/hugo_html_not_shown/ + # [markup.highlight] + # codeFences = false # disables Hugo's default syntax highlighting + # [markup.goldmark.parser] + # [markup.goldmark.parser.attribute] + # block = true + # title = 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" +[params] + + google_fonts = [ + ["Inter", "300, 400, 600, 700"], + ["Fira Code", "500, 700"] + ] + + sans_serif_font = "Inter" # Default is System font + secondary_font = "Inter" # Default is System font + mono_font = "Fira Code" # Default is System font + + [params.footer] + copyright = "© 2023-2024 Ettore Di Giacinto" + version = true # includes git commit info + + [params.social] + github = "mudler/LocalAI" # YOUR_GITHUB_ID or YOUR_GITHUB_URL + twitter = "LocalAI_API" # YOUR_TWITTER_ID + dicord = "uJAeKSAGDy" + # instagram = "colinwilson" # YOUR_INSTAGRAM_ID + rss = true # show rss icon with link + + [params.docs] # Parameters for the /docs 'template' + + logo = "https://github.com/go-skynet/LocalAI/assets/2420543/0966aa2a-166e-4f99-a3e5-6c915fc997dd" + logo_text = "LocalAI" + title = "LocalAI documentation" # default html title for documentation pages/sections + + pathName = "docs" # path name for documentation site | default "docs" + + # themeColor = "cyan" # (optional) - Set theme accent colour. Options include: blue (default), green, red, yellow, emerald, cardinal, magenta, cyan + + darkMode = true # enable dark mode option? default false + + prism = true # enable syntax highlighting via Prism + + prismTheme = "solarized-light" # (optional) - Set theme for PrismJS. Options include: lotusdocs (default), solarized-light, twilight, lucario + + # gitinfo + repoURL = "https://github.com/mudler/LocalAI" # Git repository URL for your site [support for GitHub, GitLab, and BitBucket] + repoBranch = "master" + editPage = true # enable 'Edit this page' feature - default false + lastMod = true # enable 'Last modified' date on pages - default false + lastModRelative = true # format 'Last modified' time as relative - default true + + sidebarIcons = true # enable sidebar icons? default false + breadcrumbs = true # default is true + backToTop = true # enable back-to-top button? default true + + # ToC + toc = true # enable table of contents? default is true + tocMobile = true # enable table of contents in mobile view? default is true + scrollSpy = true # enable scrollspy on ToC? default is true + + # front matter + descriptions = true # enable front matter descriptions under content title? + titleIcon = true # enable front matter icon title prefix? default is false + + # content navigation + navDesc = true # include front matter descriptions in Prev/Next navigation cards + navDescTrunc = 30 # Number of characters by which to truncate the Prev/Next descriptions + + listDescTrunc = 100 # Number of characters by which to truncate the list card description + + # Link behaviour + intLinkTooltip = true # Enable a tooltip for internal links that displays info about the destination? default false + # extLinkNewTab = false # Open external links in a new Tab? default true + # logoLinkURL = "" # Set a custom URL destination for the top header logo link. + + [params.flexsearch] # Parameters for FlexSearch + enabled = true + # tokenize = "full" + # optimize = true + # cache = 100 + # minQueryChar = 3 # default is 0 (disabled) + # maxResult = 5 # default is 5 + # searchSectionsIndex = [] + + [params.docsearch] # Parameters for DocSearch + # appID = "" # Algolia Application ID + # apiKey = "" # Algolia Search-Only API (Public) Key + # indexName = "" # Index Name to perform search on (or set env variable HUGO_PARAM_DOCSEARCH_indexName) + + [params.analytics] # Parameters for Analytics (Google, Plausible) + # plausibleURL = "/docs/s" # (or set via env variable HUGO_PARAM_ANALYTICS_plausibleURL) + # plausibleAPI = "/docs/s" # optional - (or set via env variable HUGO_PARAM_ANALYTICS_plausibleAPI) + # plausibleDomain = "" # (or set via env variable HUGO_PARAM_ANALYTICS_plausibleDomain) + + # [params.feedback] + # enabled = true + # emoticonTpl = true + # eventDest = ["plausible","google"] + # emoticonEventName = "Feedback" + # positiveEventName = "Positive Feedback" + # negativeEventName = "Negative Feedback" + # positiveFormTitle = "What did you like?" + # negativeFormTitle = "What went wrong?" + # successMsg = "Thank you for helping to improve Lotus Docs' documentation!" + # errorMsg = "Sorry! There was an error while attempting to submit your feedback!" + # positiveForm = [ + # ["Accurate", "Accurately describes the feature or option."], + # ["Solved my problem", "Helped me resolve an issue."], + # ["Easy to understand", "Easy to follow and comprehend."], + # ["Something else"] + # ] + # negativeForm = [ + # ["Inaccurate", "Doesn't accurately describe the feature or option."], + # ["Couldn't find what I was looking for", "Missing important information."], + # ["Hard to understand", "Too complicated or unclear."], + # ["Code sample errors", "One or more code samples are incorrect."], + # ["Something else"] + # ] + +[menu] + [[menu.primary]] + name = "Docs" + url = "docs/" + identifier = "docs" + weight = 10 +[[menu.primary]] + name = "Discord" + url = "https://discord.gg/uJAeKSAGDy" + identifier = "discord" + weight = 20 -# 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.fr] +# title = "LocalAI documentation" +# languageName = "Français" +# contentDir = "content/fr" +# weight = 20 +# [languages.de] +# title = "LocalAI documentation" +# languageName = "Deutsch" +# contentDir = "content/de" +# weight = 30 - [[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] + replacements = "github.com/colinwilson/lotusdocs -> lotusdocs" [[module.mounts]] source = 'archetypes' target = 'archetypes' @@ -152,30 +197,11 @@ disableHugoGeneratorInject = true [[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 + # uncomment line below for temporary local development of module + # or when using a 'theme' as a git submodule + [[module.imports]] + path = "github.com/colinwilson/lotusdocs" + disable = false + [[module.imports]] + path = "github.com/gohugoio/hugo-mod-bootstrap-scss/v5" + disable = false diff --git a/docs/content/advanced/development.md b/docs/content/advanced/development.md deleted file mode 100644 index 9f73b8a5..00000000 --- a/docs/content/advanced/development.md +++ /dev/null @@ -1,37 +0,0 @@ - -+++ -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/docs/advanced/_index.en.md b/docs/content/docs/advanced/_index.en.md new file mode 100644 index 00000000..fade370b --- /dev/null +++ b/docs/content/docs/advanced/_index.en.md @@ -0,0 +1,11 @@ +--- +weight: 20 +title: "Advanced" +description: "Advanced usage" +icon: science +lead: "" +date: 2020-10-06T08:49:15+00:00 +lastmod: 2020-10-06T08:49:15+00:00 +draft: false +images: [] +--- \ No newline at end of file diff --git a/docs/content/advanced/_index.en.md b/docs/content/docs/advanced/advanced-usage.md similarity index 97% rename from docs/content/advanced/_index.en.md rename to docs/content/docs/advanced/advanced-usage.md index 79e36749..a892cc36 100644 --- a/docs/content/advanced/_index.en.md +++ b/docs/content/docs/advanced/advanced-usage.md @@ -1,8 +1,9 @@ +++ disableToc = false -title = "Advanced" -weight = 6 +title = "Advanced usage" +weight = 21 +url = '/advanced' +++ ### Advanced configuration with YAML files @@ -309,7 +310,7 @@ prompt_cache_all: true 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" %}}). +The available backends are listed in the [model compatibility table]({{%relref "docs/reference/compatibility-table" %}}). In order to specify a backend for your models, create a model config file in your `models` directory specifying the backend: @@ -343,6 +344,19 @@ Or a remote URI: ./local-ai --debug --external-grpc-backends "my-awesome-backend:host:port" ``` +For example, to start vllm manually after compiling LocalAI (also assuming running the command from the root of the repository): + +```bash +./local-ai --external-grpc-backends "vllm:$PWD/backend/python/vllm/run.sh" +``` + +Note that first is is necessary to create the conda environment with: + +```bash +make -C backend/python/vllm +``` + + ### Environment variables When LocalAI runs in a container, @@ -419,11 +433,11 @@ RUN PATH=$PATH:/opt/conda/bin make -C backend/python/diffusers ENV EXTERNAL_GRPC_BACKENDS="diffusers:/build/backend/python/diffusers/run.sh" ``` -{{% notice note %}} +{{% alert note %}} You can specify remote external backends or path to local files. The syntax is `backend-name:/path/to/backend` or `backend-name:host:port`. -{{% /notice %}} +{{% /alert %}} #### In runtime diff --git a/docs/content/advanced/fine-tuning.md b/docs/content/docs/advanced/fine-tuning.md similarity index 99% rename from docs/content/advanced/fine-tuning.md rename to docs/content/docs/advanced/fine-tuning.md index e32923f7..550cb025 100644 --- a/docs/content/advanced/fine-tuning.md +++ b/docs/content/docs/advanced/fine-tuning.md @@ -2,12 +2,12 @@ +++ disableToc = false title = "Fine-tuning LLMs for text generation" -weight = 3 +weight = 22 +++ -{{% notice note %}} +{{% alert note %}} Section under construction -{{% /notice %}} +{{% /alert %}} This section covers how to fine-tune a language model for text generation and consume it in LocalAI. diff --git a/docs/content/faq/_index.en.md b/docs/content/docs/faq.md similarity index 87% rename from docs/content/faq/_index.en.md rename to docs/content/docs/faq.md index 1072b38b..620ede79 100644 --- a/docs/content/faq/_index.en.md +++ b/docs/content/docs/faq.md @@ -2,7 +2,8 @@ +++ disableToc = false title = "FAQ" -weight = 9 +weight = 24 +icon = "quiz" +++ ## Frequently asked questions @@ -12,25 +13,13 @@ Here are answers to some of the most common questions. ### How do I get models? -
- Most gguf-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=gguf, 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? - -
+### Everything is slow, how is it possible? 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. @@ -38,61 +27,31 @@ There are few situation why this could occur. Some tips are: - 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. - -
+There is GPU support, see {{%relref "docs/features/GPU-acceleration" %}}. ### 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) - -
+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` - -
+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` \ No newline at end of file diff --git a/docs/content/features/GPU-acceleration.md b/docs/content/docs/features/GPU-acceleration.md similarity index 94% rename from docs/content/features/GPU-acceleration.md rename to docs/content/docs/features/GPU-acceleration.md index 5a6ebe41..eda2bd51 100644 --- a/docs/content/features/GPU-acceleration.md +++ b/docs/content/docs/features/GPU-acceleration.md @@ -1,22 +1,23 @@ - +++ disableToc = false title = "⚑ GPU acceleration" -weight = 2 +weight = 9 +++ -{{% notice note %}} +{{% alert context="warning" %}} Section under construction -{{% /notice %}} +{{% /alert %}} This section contains instruction on how to use LocalAI with GPU acceleration. -{{% notice note %}} -For accelleration for AMD or Metal HW there are no specific container images, see the [build]({{%relref "build/#acceleration" %}}) -{{% /notice %}} +{{% alert icon="⚑" context="warning" %}} +For accelleration for AMD or Metal HW there are no specific container images, see the [build]({{%relref "docs/getting-started/build#Acceleration" %}}) +{{% /alert %}} ### CUDA(NVIDIA) acceleration +#### Requirements + 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)) To check what CUDA version do you need, you can either run `nvidia-smi` or `nvcc --version`. diff --git a/docs/content/docs/features/_index.en.md b/docs/content/docs/features/_index.en.md new file mode 100644 index 00000000..3fc2fd47 --- /dev/null +++ b/docs/content/docs/features/_index.en.md @@ -0,0 +1,7 @@ + ++++ +disableToc = false +title = "Features" +weight = 8 +icon = "feature_search" ++++ diff --git a/docs/content/features/audio-to-text.md b/docs/content/docs/features/audio-to-text.md similarity index 95% rename from docs/content/features/audio-to-text.md rename to docs/content/docs/features/audio-to-text.md index 94d3795f..06998fc4 100644 --- a/docs/content/features/audio-to-text.md +++ b/docs/content/docs/features/audio-to-text.md @@ -1,10 +1,12 @@ +++ disableToc = false title = "πŸ”ˆ Audio to text" -weight = 2 +weight = 16 +++ -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`. +Audio to text models are models that can generate text from an audio file. + +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 input supports all the audio formats supported by `ffmpeg`. ## Usage diff --git a/docs/content/features/constrained_grammars.md b/docs/content/docs/features/constrained_grammars.md similarity index 73% rename from docs/content/features/constrained_grammars.md rename to docs/content/docs/features/constrained_grammars.md index 1557a936..35600170 100644 --- a/docs/content/features/constrained_grammars.md +++ b/docs/content/docs/features/constrained_grammars.md @@ -2,20 +2,20 @@ +++ disableToc = false title = "✍️ Constrained grammars" -weight = 6 +weight = 15 +++ 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 %}} +{{% alert note %}} +This feature works only with models compatible with the [llama.cpp](https://github.com/ggerganov/llama.cpp) backend (see also [Model compatibility]({{%relref "docs/reference/compatibility-table" %}})). 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 +{{% /alert %}} ## Setup -Follow the setup instructions from the [LocalAI functions]({{%relref "features/openai-functions" %}}) page. +Follow the setup instructions from the [LocalAI functions]({{%relref "docs/features/openai-functions" %}}) page. ## πŸ’‘ Usage example diff --git a/docs/content/features/embeddings.md b/docs/content/docs/features/embeddings.md similarity index 98% rename from docs/content/features/embeddings.md rename to docs/content/docs/features/embeddings.md index 61d7b688..c07e19c9 100644 --- a/docs/content/features/embeddings.md +++ b/docs/content/docs/features/embeddings.md @@ -2,7 +2,7 @@ +++ disableToc = false title = "🧠 Embeddings" -weight = 2 +weight = 13 +++ LocalAI supports generating embeddings for text or list of tokens. @@ -73,7 +73,7 @@ parameters: The `sentencetransformers` 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 %}} +{{% alert note %}} - The `sentencetransformers` 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 (`make prepare-extra-conda-environments`). This requires `conda` to be installed. @@ -82,7 +82,7 @@ The `sentencetransformers` backend uses Python [sentence-transformers](https://g - The `sentencetransformers` 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 `sentencetransformers` backend. The models will be downloaded automatically the first time the API is used. -{{% /notice %}} +{{% /alert %}} ## Llama.cpp embeddings diff --git a/docs/content/features/gpt-vision.md b/docs/content/docs/features/gpt-vision.md similarity index 92% rename from docs/content/features/gpt-vision.md rename to docs/content/docs/features/gpt-vision.md index 3b37fe8f..559560d8 100644 --- a/docs/content/features/gpt-vision.md +++ b/docs/content/docs/features/gpt-vision.md @@ -2,12 +2,12 @@ +++ disableToc = false title = "πŸ†• GPT Vision" -weight = 2 +weight = 14 +++ -{{% notice note %}} +{{% alert note %}} Available only on `master` builds -{{% /notice %}} +{{% /alert %}} LocalAI supports understanding images by using [LLaVA](https://llava.hliu.cc/), and implements the [GPT Vision API](https://platform.openai.com/docs/guides/vision) from OpenAI. diff --git a/docs/content/features/image-generation.md b/docs/content/docs/features/image-generation.md similarity index 50% rename from docs/content/features/image-generation.md rename to docs/content/docs/features/image-generation.md index efa98555..5a3b5988 100644 --- a/docs/content/features/image-generation.md +++ b/docs/content/docs/features/image-generation.md @@ -2,13 +2,13 @@ +++ disableToc = false title = "🎨 Image generation" -weight = 2 +weight = 12 +++ ![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" %}}). +LocalAI supports generating images with Stable diffusion, running on CPU using C++ and Python implementations. ## Usage @@ -35,7 +35,9 @@ curl http://localhost:8080/v1/images/generations -H "Content-Type: application/j }' ``` -## stablediffusion-cpp +## Backends + +### stablediffusion-cpp | mode=0 | mode=1 (winograd/sgemm) | |------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------| @@ -45,7 +47,7 @@ curl http://localhost:8080/v1/images/generations -H "Content-Type: application/j 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 +#### 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. @@ -128,11 +130,14 @@ models {{< /tabs >}} -## Diffusers +### Diffusers -This is an extra backend - in the container is already available and there is nothing to do for the setup. +[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. -### Model setup +![anime_girl](https://github.com/go-skynet/LocalAI/assets/2420543/8aaca62a-e864-4011-98ae-dcc708103928) +(Generated with [AnimagineXL](https://huggingface.co/Linaqruf/animagine-xl)) + +#### Model setup The models will be downloaded the first time you use the backend from `huggingface` automatically. @@ -150,3 +155,198 @@ diffusers: cuda: false # Enable for GPU usage (CUDA) scheduler_type: euler_a ``` + +#### Dependencies + +This is an extra backend - in the container is already available and there is nothing to do for the setup. Do not use *core* images (ending with `-core`). If you are building manually, see the [build instructions]({{%relref "docs/getting-started/build" %}}). + +#### 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 +cuda: true +f16: true +diffusers: + 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 +cuda: true +diffusers: + pipeline_type: StableDiffusionPipeline + 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 | `AutoPipelineForText2Image` | + +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 +cuda: true +f16: true +diffusers: + pipeline_type: StableDiffusionImg2ImgPipeline + enable_parameters: "negative_prompt,num_inference_steps,image" +``` + +```bash +IMAGE_PATH=/path/to/your/image +(echo -n '{"file": "'; 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 +cuda: true +diffusers: + pipeline_type: StableDiffusionDepth2ImgPipeline + enable_parameters: "negative_prompt,num_inference_steps,image" + cfg_scale: 6 +``` + +```bash +(echo -n '{"file": "'; 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 +``` + +#### img2vid + + +```yaml +name: img2vid +parameters: + model: stabilityai/stable-video-diffusion-img2vid +backend: diffusers +step: 25 +# Force CPU usage +f16: true +cuda: true +diffusers: + pipeline_type: StableVideoDiffusionPipeline +``` + +```bash +(echo -n '{"file": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/svd/rocket.png?download=true","size": "512x512","model":"img2vid"}') | +curl -H "Content-Type: application/json" -X POST -d @- http://localhost:8080/v1/images/generations +``` + +#### txt2vid + +```yaml +name: txt2vid +parameters: + model: damo-vilab/text-to-video-ms-1.7b +backend: diffusers +step: 25 +# Force CPU usage +f16: true +cuda: true +diffusers: + pipeline_type: VideoDiffusionPipeline + cuda: true +``` + +```bash +(echo -n '{"prompt": "spiderman surfing","size": "512x512","model":"txt2vid"}') | +curl -H "Content-Type: application/json" -X POST -d @- http://localhost:8080/v1/images/generations +``` \ No newline at end of file diff --git a/docs/content/models/_index.en.md b/docs/content/docs/features/model-gallery.md similarity index 98% rename from docs/content/models/_index.en.md rename to docs/content/docs/features/model-gallery.md index e745120c..0d978122 100644 --- a/docs/content/models/_index.en.md +++ b/docs/content/docs/features/model-gallery.md @@ -2,7 +2,9 @@ +++ disableToc = false title = "πŸ–ΌοΈ Model gallery" -weight = 7 + +weight = 18 +url = '/models' +++

@@ -15,13 +17,13 @@ The model gallery is a (experimental!) collection of models configurations for [ 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 %}} +{{% alert 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 %}} +{{% /alert %}} -{{% notice note %}} +{{% alert 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 %}} +{{% /alert %}} ## Useful Links and resources @@ -48,7 +50,7 @@ GALLERIES=[{"name":"model-gallery", "url":"github:go-skynet/model-gallery/index. where `github:go-skynet/model-gallery/index.yaml` will be expanded automatically to `https://raw.githubusercontent.com/go-skynet/model-gallery/main/index.yaml`. -{{% notice note %}} +{{% alert note %}} As this feature is experimental, you need to run `local-ai` with a list of `GALLERIES`. Currently there are two galleries: @@ -63,19 +65,19 @@ GALLERIES=[{"name":"model-gallery", "url":"github:go-skynet/model-gallery/index. If running with `docker-compose`, simply edit the `.env` file and uncomment the `GALLERIES` variable, and add the one you want to use. -{{% /notice %}} +{{% /alert %}} -{{% notice note %}} +{{% alert note %}} You might not find all the models in this gallery. Automated CI updates the gallery automatically. You can find however most of the models on huggingface (https://huggingface.co/), generally it should be available `~24h` after upload. By under any circumstances LocalAI and any developer is not responsible for the models in this gallery, as CI is just indexing them and providing a convenient way to install with an automatic configuration with a consistent API. Don't install models from authors you don't trust, and, check the appropriate license for your use case. Models are automatically indexed and hosted on huggingface (https://huggingface.co/). For any issue with the models, please open an issue on the model gallery repository if it's a LocalAI misconfiguration, otherwise refer to the huggingface repository. If you think a model should not be listed, please reach to us and we will remove it from the gallery. -{{% /notice %}} +{{% /alert %}} -{{% notice note %}} +{{% alert note %}} There is no documentation yet on how to build a gallery or a repository - but you can find an example in the [model-gallery](https://github.com/go-skynet/model-gallery) repository. -{{% /notice %}} +{{% /alert %}} ### List Models @@ -117,7 +119,7 @@ where: - `bert-embeddings` is the model name in the gallery (read its [config here](https://github.com/go-skynet/model-gallery/blob/main/bert-embeddings.yaml)). -{{% notice note %}} +{{% alert note %}} If the `huggingface` model gallery is enabled (it's enabled by default), and the model has an entry in the model gallery's associated YAML config (for `huggingface`, see [`model-gallery/huggingface.yaml`](https://github.com/go-skynet/model-gallery/blob/main/huggingface.yaml)), @@ -132,7 +134,7 @@ curl $LOCALAI/models/apply -H "Content-Type: application/json" -d '{ ``` Note that the `id` can be used similarly when pre-loading models at start. -{{% /notice %}} +{{% /alert %}} ## How to install a model (without a gallery) @@ -217,7 +219,7 @@ YAML: -{{% notice note %}} +{{% alert note %}} You can find already some open licensed models in the [model gallery](https://github.com/go-skynet/model-gallery). @@ -241,7 +243,7 @@ curl $LOCALAI/models/apply -H "Content-Type: application/json" -d '{ -{{% /notice %}} +{{% /alert %}} ## Installing a model with a different name diff --git a/docs/content/features/openai-functions.md b/docs/content/docs/features/openai-functions.md similarity index 98% rename from docs/content/features/openai-functions.md rename to docs/content/docs/features/openai-functions.md index b6726422..1dc58882 100644 --- a/docs/content/features/openai-functions.md +++ b/docs/content/docs/features/openai-functions.md @@ -2,7 +2,7 @@ +++ disableToc = false title = "πŸ”₯ OpenAI functions" -weight = 2 +weight = 17 +++ LocalAI supports running OpenAI functions with `llama.cpp` compatible models. @@ -67,13 +67,13 @@ response = openai.ChatCompletion.create( # ... ``` -{{% notice note %}} +{{% alert 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 %}} +{{% /alert %}} ## Advanced diff --git a/docs/content/docs/features/text-generation.md b/docs/content/docs/features/text-generation.md new file mode 100644 index 00000000..ab69caea --- /dev/null +++ b/docs/content/docs/features/text-generation.md @@ -0,0 +1,263 @@ + ++++ +disableToc = false +title = "πŸ“– Text generation (GPT)" +weight = 10 ++++ + +LocalAI supports generating text with GPT with `llama.cpp` and other backends (such as `rwkv.cpp` as ) see also the [Model compatibility]({{%relref "docs/reference/compatibility-table" %}}) 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. + +## API Reference + +### 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 +``` + +## Backends + +### AutoGPTQ + +[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 + }' +``` +### RWKV + +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 +``` + +### llama.cpp + +[llama.cpp](https://github.com/ggerganov/llama.cpp) is a popular port of Facebook's LLaMA model in C/C++. + +{{% alert 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-ggml` backend instead. If you are relying in automatic detection of the model, you should be fine. For `gguf` models, use the `llama` backend. The go backend is deprecated as well but still available as `go-llama`. The go backend supports still features not available in the mainline: speculative sampling and embeddings. + +{{% /alert %}} + +#### Features + +The `llama.cpp` model supports the following features: +- [πŸ“– Text generation (GPT)]({{%relref "docs/features/text-generation" %}}) +- [🧠 Embeddings]({{%relref "docs/features/embeddings" %}}) +- [πŸ”₯ OpenAI functions]({{%relref "docs/features/openai-functions" %}}) +- [✍️ Constrained grammars]({{%relref "docs/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 `gguf` 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 "docs/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 and LocalAI already running, 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 "docs/features/model-gallery" %}}). + +#### 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-ggml` backend for `ggml` models: + +```yaml +name: llama +backend: llama-ggml +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) + + +### exllama/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". Both `exllama` and `exllama2` are supported. + +#### 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 +# Note: you can also specify "exllama2" if it's an exllama2 model here +# ... +``` + +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 + }' +``` + +### vLLM + +[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 + }' +``` diff --git a/docs/content/docs/features/text-to-audio.md b/docs/content/docs/features/text-to-audio.md new file mode 100644 index 00000000..40e242ae --- /dev/null +++ b/docs/content/docs/features/text-to-audio.md @@ -0,0 +1,158 @@ + ++++ +disableToc = false +title = "πŸ—£ Text to audio (TTS)" +weight = 11 ++++ + +The `/tts` endpoint can be used to generate speech from text. + +## Usage + +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. + + +## Backends + +### 🐸 Coqui + +Required: Don't use `LocalAI` images ending with the `-core` tag,. Python dependencies are required in order to use this backend. + +Coqui works without any configuration, to test it, you can run the following curl command: + +``` + curl http://localhost:8080/tts -H "Content-Type: application/json" -d '{ + "backend": "coqui", + "model": "tts_models/en/ljspeech/glow-tts", + "input":"Hello, this is a test!" + }' +``` + +### Bark + +[Bark](https://github.com/suno-ai/bark) allows to generate audio from text prompts. + +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 +``` + +### Piper + +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 + +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. + +### Transformers-musicgen + +LocalAI also has experimental support for `transformers-musicgen` for the generation of short musical compositions. Currently, this is implemented via the same requests used for text to speech: + +``` +curl --request POST \ + --url http://localhost:8080/tts \ + --header 'Content-Type: application/json' \ + --data '{ + "backend": "transformers-musicgen", + "model": "facebook/musicgen-medium", + "input": "Cello Rave" +}' | aplay +``` + +Future versions of LocalAI will expose additional control over audio generation beyond the text prompt. + +### Vall-E-X + +[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/docs/getting-started/_index.en.md b/docs/content/docs/getting-started/_index.en.md new file mode 100644 index 00000000..c115734c --- /dev/null +++ b/docs/content/docs/getting-started/_index.en.md @@ -0,0 +1,7 @@ + ++++ +disableToc = false +title = "Getting started" +weight = 2 +icon = "rocket_launch" ++++ diff --git a/docs/content/build/_index.en.md b/docs/content/docs/getting-started/build.md similarity index 78% rename from docs/content/build/_index.en.md rename to docs/content/docs/getting-started/build.md index ff9b3e2b..cd320720 100644 --- a/docs/content/build/_index.en.md +++ b/docs/content/docs/getting-started/build.md @@ -1,14 +1,20 @@ +++ disableToc = false -title = "Build" -weight = 5 +title = "Build LocalAI from source" +weight = 6 url = '/basics/build/' - +ico = "rocket_launch" +++ ### Build +LocalAI can be built as a container image or as a single, portable binary. Note that the some model architectures might require Python libraries, which are not included in the binary. The binary contains only the core backends written in Go and C++. + +LocalAI's extensible architecture allows you to add your own backends, which can be written in any language, and as such the container images contains also the Python dependencies to run all the available backends (for example, in order to run backends like __Diffusers__ that allows to generate images and videos from text). + +In some cases you might want to re-build LocalAI from source (for instance to leverage Apple Silicon acceleration), or to build a custom container image with your own backends. This section contains instructions on how to build LocalAI from source. + #### Container image Requirements: @@ -23,7 +29,9 @@ docker build -t localai . docker run localai ``` -#### Locally +#### Build LocalAI locally + +##### Requirements In order to build LocalAI locally, you need the following requirements: @@ -34,22 +42,22 @@ In order to build LocalAI locally, you need the following requirements: To install the dependencies follow the instructions below: -{{< tabs >}} -{{% tab name="Apple" %}} +{{< tabs tabTotal="3" >}} +{{% tab tabName="Apple" %}} ```bash brew install abseil cmake go grpc protobuf wget ``` {{% /tab %}} -{{% tab name="Debian" %}} +{{% tab tabName="Debian" %}} ```bash apt install golang protobuf-compiler-grpc libgrpc-dev make cmake ``` {{% /tab %}} -{{% tab name="From source" %}} +{{% tab tabName="From source" %}} Specify `BUILD_GRPC_FOR_BACKEND_LLAMA=true` to build automatically the gRPC dependencies @@ -60,7 +68,7 @@ make ... BUILD_GRPC_FOR_BACKEND_LLAMA=true build {{% /tab %}} {{< /tabs >}} - +##### Build To build LocalAI with `make`: ``` @@ -71,7 +79,7 @@ make build This should produce the binary `local-ai` -{{% notice note %}} +{{% alert note %}} #### CPU flagset compatibility @@ -89,7 +97,7 @@ 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 %}} +{{% /alert %}} ### Example: Build on mac @@ -133,7 +141,7 @@ curl http://localhost:8080/v1/chat/completions -H "Content-Type: application/jso **Requirements**: OpenCV, Gomp -Image generation is experimental and requires `GO_TAGS=stablediffusion` to be set during build: +Image generation requires `GO_TAGS=stablediffusion` or `GO_TAGS=tinydream` to be set during build: ``` make GO_TAGS=stablediffusion build @@ -156,7 +164,7 @@ 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` | +| `GO_TAGS` | `tts stablediffusion` | Go tags. Available: `stablediffusion`, `tts`, `tinydream` | | `CLBLAST_DIR` | | Specify a CLBlast directory | | `CUDA_LIBPATH` | | Specify a CUDA library path | @@ -216,7 +224,7 @@ make BUILD_TYPE=clblas build To specify a clblast dir set: `CLBLAST_DIR` -### Metal (Apple Silicon) +#### Metal (Apple Silicon) ``` make BUILD_TYPE=metal build @@ -225,7 +233,16 @@ make BUILD_TYPE=metal build # Note: only models quantized with q4_0 are supported! ``` -### Build only a single backend + +### Windows compatibility + +Make sure to give enough resources to the running container. See https://github.com/go-skynet/LocalAI/issues/2 + +### Examples + +More advanced build options are available, for instance to build only a single backend. + +#### Build only a single backend You can control the backends that are built by setting the `GRPC_BACKENDS` environment variable. For instance, to build only the `llama-cpp` backend only: @@ -235,14 +252,10 @@ make GRPC_BACKENDS=backend-assets/grpc/llama-cpp build By default, all the backends are built. -### Specific llama.cpp version +#### Specific llama.cpp version To build with a specific version of llama.cpp, set `CPPLLAMA_VERSION` to the tag or wanted sha: ``` CPPLLAMA_VERSION= make build ``` - -### 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/docs/getting-started/customize-model.md b/docs/content/docs/getting-started/customize-model.md new file mode 100644 index 00000000..0984d6ce --- /dev/null +++ b/docs/content/docs/getting-started/customize-model.md @@ -0,0 +1,71 @@ ++++ +disableToc = false +title = "Customizing the Model" +weight = 4 +icon = "rocket_launch" + ++++ + +To customize the prompt template or the default settings of the model, a configuration file is utilized. This file must adhere to the LocalAI YAML configuration standards. For comprehensive syntax details, refer to the [advanced documentation]({{%relref "docs/advanced" %}}). The configuration file can be located either remotely (such as in a Github Gist) or within the local filesystem or a remote URL. + +LocalAI can be initiated using either its container image or binary, with a command that includes URLs of model config files or utilizes a shorthand format (like `huggingface://` or `github://`), which is then expanded into complete URLs. + +The configuration can also be set via an environment variable. For instance: + +``` +# Command-Line Arguments +local-ai github://owner/repo/file.yaml@branch + +# Environment Variable +MODELS="github://owner/repo/file.yaml@branch,github://owner/repo/file.yaml@branch" local-ai +``` + +Here's an example to initiate the **phi-2** model: + +```bash +docker run -p 8080:8080 localai/localai:{{< version >}}-ffmpeg-core https://gist.githubusercontent.com/mudler/ad601a0488b497b69ec549150d9edd18/raw/a8a8869ef1bb7e3830bf5c0bae29a0cce991ff8d/phi-2.yaml +``` + +{{% alert icon="" %}} +The model configurations used in the quickstart are accessible here: [https://github.com/mudler/LocalAI/tree/master/embedded/models](https://github.com/mudler/LocalAI/tree/master/embedded/models). Contributions are welcome; please feel free to submit a Pull Request. + +The `phi-2` model configuration from the quickstart is expanded from [https://github.com/mudler/LocalAI/blob/master/examples/configurations/phi-2.yaml](https://github.com/mudler/LocalAI/blob/master/examples/configurations/phi-2.yaml). +{{% /alert %}} + +## Example: Customizing the Prompt Template + +To modify the prompt template, create a Github gist or a Pastebin file, and copy the content from [https://github.com/mudler/LocalAI/blob/master/examples/configurations/phi-2.yaml](https://github.com/mudler/LocalAI/blob/master/examples/configurations/phi-2.yaml). Alter the fields as needed: + +```yaml +name: phi-2 +context_size: 2048 +f16: true +threads: 11 +gpu_layers: 90 +mmap: true +parameters: + # Reference any HF model or a local file here + model: huggingface://TheBloke/phi-2-GGUF/phi-2.Q8_0.gguf + temperature: 0.2 + top_k: 40 + top_p: 0.95 +template: + + chat: &template | + Instruct: {{.Input}} + Output: + # Modify the prompt template here ^^^ as per your requirements + completion: *template +``` + +Then, launch LocalAI using your gist's URL: + +```bash +## Important! Substitute with your gist's URL! +docker run -p 8080:8080 localai/localai:{{< version >}}-ffmpeg-core https://gist.githubusercontent.com/xxxx/phi-2.yaml +``` + +## Next Steps + +- Visit the [advanced section]({{%relref "docs/advanced" %}}) for more insights on prompt templates and configuration files. +- To learn about fine-tuning an LLM model, check out the [fine-tuning section]({{%relref "docs/advanced/fine-tuning" %}}). \ No newline at end of file diff --git a/docs/content/docs/getting-started/manual.md b/docs/content/docs/getting-started/manual.md new file mode 100644 index 00000000..a09432c2 --- /dev/null +++ b/docs/content/docs/getting-started/manual.md @@ -0,0 +1,150 @@ + ++++ +disableToc = false +title = "Run models manually" +weight = 5 +icon = "rocket_launch" + ++++ + + +1. Ensure you have a model file, a configuration YAML file, or both. Customize model defaults and specific settings with a configuration file. For advanced configurations, refer to the [Advanced Documentation](docs/advanced). + +2. For GPU Acceleration instructions, visit [GPU acceleration](docs/features/gpu-acceleration). + +{{< tabs tabTotal="5" >}} +{{% tab tabName="Docker" %}} + +```bash +# Prepare the models into the `model` directory +mkdir models + +# copy your models to it +cp your-model.gguf models/ + +# run the LocalAI container +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 β”‚ +# β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + +# Try the endpoint with curl +curl http://localhost:8080/v1/completions -H "Content-Type: application/json" -d '{ + "model": "your-model.gguf", + "prompt": "A long time ago in a galaxy far, far away", + "temperature": 0.7 + }' +``` + +{{% alert note %}} +- If running on Apple Silicon (ARM) it is **not** suggested to run on Docker due to emulation. Follow the [build instructions]({{%relref "docs/getting-started/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. +{{% /alert %}} + +{{% /tab %}} +{{% tab tabName="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 + +# copy your models to models/ +cp your-model.gguf 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.gguf","object":"model"}]} + +curl http://localhost:8080/v1/completions -H "Content-Type: application/json" -d '{ + "model": "your-model.gguf", + "prompt": "A long time ago in a galaxy far, far away", + "temperature": 0.7 + }' +``` + +Note: If you are on Windows, please make sure the project is on the Linux Filesystem, otherwise loading models might be slow. For more Info: [Microsoft Docs](https://learn.microsoft.com/en-us/windows/wsl/filesystems) + +{{% /tab %}} + +{{% tab tabName="Kubernetes" %}} + +For installing LocalAI in Kubernetes, you can use the following helm chart: + +```bash +# Install the helm repository +helm repo add go-skynet https://go-skynet.github.io/helm-charts/ +# Update the repositories +helm repo update +# Get the values +helm show values go-skynet/local-ai > values.yaml + +# Edit the values value if needed +# vim values.yaml ... + +# Install the helm chart +helm install local-ai go-skynet/local-ai -f values.yaml +``` + +{{% /tab %}} +{{% tab tabName="From binary" %}} + +LocalAI binary releases are available in [Github](https://github.com/go-skynet/LocalAI/releases). + +{{% /tab %}} + +{{% tab tabName="From source" %}} + +See the [build section]({{%relref "docs/getting-started/build" %}}). + +{{% /tab %}} + +{{< /tabs >}} + + +### Example (Docker) + +```bash +mkdir models + +# 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 + +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 + +# 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?"}}]} +``` + +For more model configurations, visit the [Examples Section](https://github.com/mudler/LocalAI/tree/master/examples/configurations). diff --git a/docs/content/docs/getting-started/quickstart.md b/docs/content/docs/getting-started/quickstart.md new file mode 100644 index 00000000..32b0d393 --- /dev/null +++ b/docs/content/docs/getting-started/quickstart.md @@ -0,0 +1,187 @@ + ++++ +disableToc = false +title = "Quickstart" +weight = 3 +url = '/basics/getting_started/' +icon = "rocket_launch" + ++++ + +**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]({{%relref "docs/features/text-generation" %}}), generate images, audio (and not only) locally or on-prem with consumer grade hardware, supporting multiple model families and architectures. + +## Installation Methods + +LocalAI is available as a container image and binary, compatible with various container engines like Docker, Podman, and Kubernetes. Container images are published on [quay.io](https://quay.io/repository/go-skynet/local-ai?tab=tags&tag=latest) and [Dockerhub](https://hub.docker.com/r/localai/localai). Binaries can be downloaded from [GitHub](https://github.com/mudler/LocalAI/releases). + + +{{% alert icon="πŸ’‘" %}} + +**Hardware Requirements:** The hardware requirements for LocalAI vary based on the [model size] and [quantization] method used. For performance benchmarks with different backends, such as `llama.cpp`, visit [this link](https://github.com/ggerganov/llama.cpp#memorydisk-requirements). The `rwkv` backend is noted for its lower resource consumption. + +{{% /alert %}} + +## Prerequisites + +Before you begin, ensure you have a container engine installed if you are not using the binaries. Suitable options include Docker or Podman. For installation instructions, refer to the following guides: + +- [Install Docker Desktop (Mac, Windows, Linux)](https://docs.docker.com/get-docker/) +- [Install Podman (Linux)](https://podman.io/getting-started/installation) +- [Install Docker engine (Servers)](https://docs.docker.com/engine/install/#get-started) + + +## Running Models + +> _Do you have already a model file? Skip to [Run models manually]({{%relref "docs/getting-started/manual" %}})_. + +LocalAI allows one-click runs with popular models. It downloads the model and starts the API with the model loaded. + +There are different categories of models: [LLMs]({{%relref "docs/features/text-generation" %}}), [Multimodal LLM]({{%relref "docs/features/gpt-vision" %}}) , [Embeddings]({{%relref "docs/features/embeddings" %}}), [Audio to Text]({{%relref "docs/features/audio-to-text" %}}), and [Text to Audio]({{%relref "docs/features/text-to-audio" %}}) depending on the backend being used and the model architecture. + +{{% alert icon="πŸ’‘" %}} + +To customize the models, see [Model customization]({{%relref "docs/getting-started/customize-model" %}}). For more model configurations, visit the [Examples Section](https://github.com/mudler/LocalAI/tree/master/examples/configurations). +{{% /alert %}} + +{{< tabs tabTotal="3" >}} +{{% tab tabName="CPU-only" %}} + +> πŸ’‘Don't need GPU acceleration? use the CPU images which are lighter and do not have Nvidia dependencies + +| Model | Category | Docker command | +| --- | --- | --- | +| [phi-2](https://huggingface.co/microsoft/phi-2) | [LLM]({{%relref "docs/features/text-generation" %}}) | ```docker run -ti -p 8080:8080 localai/localai:{{< version >}}-ffmpeg-core phi-2``` | +| [llava](https://github.com/SkunkworksAI/BakLLaVA) | [Multimodal LLM]({{%relref "docs/features/gpt-vision" %}}) | ```docker run -ti -p 8080:8080 localai/localai:{{< version >}}-ffmpeg-core llava``` | +| [mistral-openorca](https://huggingface.co/Open-Orca/Mistral-7B-OpenOrca) | [LLM]({{%relref "docs/features/text-generation" %}}) | ```docker run -ti -p 8080:8080 localai/localai:{{< version >}}-ffmpeg-core mistral-openorca``` | +| [bert-cpp](https://github.com/skeskinen/bert.cpp) | [Embeddings]({{%relref "docs/features/embeddings" %}}) | ```docker run -ti -p 8080:8080 localai/localai:{{< version >}}-ffmpeg-core bert-cpp``` | +| [all-minilm-l6-v2](https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2) | [Embeddings]({{%relref "docs/features/embeddings" %}}) | ```docker run -ti -p 8080:8080 localai/localai:{{< version >}}-ffmpeg all-minilm-l6-v2``` | +| whisper-base | [Audio to Text]({{%relref "docs/features/audio-to-text" %}}) | ```docker run -ti -p 8080:8080 localai/localai:{{< version >}}-ffmpeg-core whisper-base``` | +| rhasspy-voice-en-us-amy | [Text to Audio]({{%relref "docs/features/text-to-audio" %}}) | ```docker run -ti -p 8080:8080 localai/localai:{{< version >}}-ffmpeg-core rhasspy-voice-en-us-amy``` | +| coqui | [Text to Audio]({{%relref "docs/features/text-to-audio" %}}) | ```docker run -ti -p 8080:8080 localai/localai:{{< version >}}-ffmpeg coqui``` | +| bark | [Text to Audio]({{%relref "docs/features/text-to-audio" %}}) | ```docker run -ti -p 8080:8080 localai/localai:{{< version >}}-ffmpeg bark``` | +| vall-e-x | [Text to Audio]({{%relref "docs/features/text-to-audio" %}}) | ```docker run -ti -p 8080:8080 localai/localai:{{< version >}}-ffmpeg vall-e-x``` | +| mixtral-instruct Mixtral-8x7B-Instruct-v0.1 | [LLM]({{%relref "docs/features/text-generation" %}}) | ```docker run -ti -p 8080:8080 localai/localai:{{< version >}}-ffmpeg-core mixtral-instruct``` | +| [tinyllama-chat](https://huggingface.co/TheBloke/TinyLlama-1.1B-Chat-v0.3-GGUF) [original model](https://huggingface.co/TinyLlama/TinyLlama-1.1B-Chat-v0.3) | [LLM]({{%relref "docs/features/text-generation" %}}) | ```docker run -ti -p 8080:8080 localai/localai:{{< version >}}-ffmpeg-core tinyllama-chat``` | +| [dolphin-2.5-mixtral-8x7b](https://huggingface.co/TheBloke/dolphin-2.5-mixtral-8x7b-GGUF) | [LLM]({{%relref "docs/features/text-generation" %}}) | ```docker run -ti -p 8080:8080 localai/localai:{{< version >}}-ffmpeg-core dolphin-2.5-mixtral-8x7b``` | +{{% /tab %}} +{{% tab tabName="GPU (CUDA 11)" %}} + + +> To know which version of CUDA do you have available, you can check with `nvidia-smi` or `nvcc --version` see also [GPU acceleration]({{%relref "docs/features/gpu-acceleration" %}}). + +| Model | Category | Docker command | +| --- | --- | --- | +| [phi-2](https://huggingface.co/microsoft/phi-2) | [LLM]({{%relref "docs/features/text-generation" %}}) | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda11-core phi-2``` | +| [llava](https://github.com/SkunkworksAI/BakLLaVA) | [Multimodal LLM]({{%relref "docs/features/gpt-vision" %}}) | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda11-core llava``` | +| [mistral-openorca](https://huggingface.co/Open-Orca/Mistral-7B-OpenOrca) | [LLM]({{%relref "docs/features/text-generation" %}}) | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda11-core mistral-openorca``` | +| [bert-cpp](https://github.com/skeskinen/bert.cpp) | [Embeddings]({{%relref "docs/features/embeddings" %}}) | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda11-core bert-cpp``` | +| [all-minilm-l6-v2](https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2) | [Embeddings]({{%relref "docs/features/embeddings" %}}) | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda11 all-minilm-l6-v2``` | +| whisper-base | [Audio to Text]({{%relref "docs/features/audio-to-text" %}}) | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda11-core whisper-base``` | +| rhasspy-voice-en-us-amy | [Text to Audio]({{%relref "docs/features/text-to-audio" %}}) | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda11-core rhasspy-voice-en-us-amy``` | +| coqui | [Text to Audio]({{%relref "docs/features/text-to-audio" %}}) | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda11 coqui``` | +| bark | [Text to Audio]({{%relref "docs/features/text-to-audio" %}}) | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda11 bark``` | +| vall-e-x | [Text to Audio]({{%relref "docs/features/text-to-audio" %}}) | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda11 vall-e-x``` | +| mixtral-instruct Mixtral-8x7B-Instruct-v0.1 | [LLM]({{%relref "docs/features/text-generation" %}}) | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda11-core mixtral-instruct``` | +| [tinyllama-chat](https://huggingface.co/TheBloke/TinyLlama-1.1B-Chat-v0.3-GGUF) [original model](https://huggingface.co/TinyLlama/TinyLlama-1.1B-Chat-v0.3) | [LLM]({{%relref "docs/features/text-generation" %}}) | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda11-core tinyllama-chat``` | +| [dolphin-2.5-mixtral-8x7b](https://huggingface.co/TheBloke/dolphin-2.5-mixtral-8x7b-GGUF) | [LLM]({{%relref "docs/features/text-generation" %}}) | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda11-core dolphin-2.5-mixtral-8x7b``` | +{{% /tab %}} + + +{{% tab tabName="GPU (CUDA 12)" %}} + +> To know which version of CUDA do you have available, you can check with `nvidia-smi` or `nvcc --version` see also [GPU acceleration]({{%relref "docs/features/gpu-acceleration" %}}). + +| Model | Category | Docker command | +| --- | --- | --- | +| [phi-2](https://huggingface.co/microsoft/phi-2) | [LLM]({{%relref "docs/features/text-generation" %}}) | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda12-core phi-2``` | +| [llava](https://github.com/SkunkworksAI/BakLLaVA) | [Multimodal LLM]({{%relref "docs/features/gpt-vision" %}}) | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda12-core llava``` | +| [mistral-openorca](https://huggingface.co/Open-Orca/Mistral-7B-OpenOrca) | [LLM]({{%relref "docs/features/text-generation" %}}) | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda12-core mistral-openorca``` | +| [bert-cpp](https://github.com/skeskinen/bert.cpp) | [Embeddings]({{%relref "docs/features/embeddings" %}}) | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda12-core bert-cpp``` | +| [all-minilm-l6-v2](https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2) | [Embeddings]({{%relref "docs/features/embeddings" %}}) | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda12 all-minilm-l6-v2``` | +| whisper-base | [Audio to Text]({{%relref "docs/features/audio-to-text" %}}) | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda12-core whisper-base``` | +| rhasspy-voice-en-us-amy | [Text to Audio]({{%relref "docs/features/text-to-audio" %}}) | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda12-core rhasspy-voice-en-us-amy``` | +| coqui | [Text to Audio]({{%relref "docs/features/text-to-audio" %}}) | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda12 coqui``` | +| bark | [Text to Audio]({{%relref "docs/features/text-to-audio" %}}) | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda12 bark``` | +| vall-e-x | [Text to Audio]({{%relref "docs/features/text-to-audio" %}}) | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda12 vall-e-x``` | +| mixtral-instruct Mixtral-8x7B-Instruct-v0.1 | [LLM]({{%relref "docs/features/text-generation" %}}) | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda12-core mixtral-instruct``` | +| [tinyllama-chat](https://huggingface.co/TheBloke/TinyLlama-1.1B-Chat-v0.3-GGUF) [original model](https://huggingface.co/TinyLlama/TinyLlama-1.1B-Chat-v0.3) | [LLM]({{%relref "docs/features/text-generation" %}}) | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda12-core tinyllama-chat``` | +| [dolphin-2.5-mixtral-8x7b](https://huggingface.co/TheBloke/dolphin-2.5-mixtral-8x7b-GGUF) | [LLM]({{%relref "docs/features/text-generation" %}}) | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda12-core dolphin-2.5-mixtral-8x7b``` | +{{% /tab %}} + +{{< /tabs >}} + +{{% alert icon="πŸ’‘" %}} +**Tip** You can actually specify multiple models to start an instance with the models loaded, for example to have both llava and phi-2 configured: + +```bash +docker run -ti -p 8080:8080 localai/localai:{{< version >}}-ffmpeg-core llava phi-2 +``` + +{{% /alert %}} + +## Container images + +LocalAI provides a variety of images to support different environments. These images are available on [quay.io](https://quay.io/repository/go-skynet/local-ai?tab=tags) and [Dockerhub](https://hub.docker.com/r/localai/localai). + +For GPU Acceleration support for Nvidia video graphic cards, use the Nvidia/CUDA images, if you don't have a GPU, use the CPU images. If you have AMD or Mac Silicon, see the [build section]({{%relref "docs/getting-started/build" %}}). + +{{% alert icon="πŸ’‘" %}} + +**Available Images Types**: + +- Images ending with `-core` are smaller images without predownload python dependencies. Use these images if you plan to use `llama.cpp`, `stablediffusion-ncn`, `tinydream` or `rwkv` backends - if you are not sure which one to use, do **not** use these images. +- FFMpeg is **not** included in the default images due to [its licensing](https://www.ffmpeg.org/legal.html). If you need FFMpeg, use the images ending with `-ffmpeg`. Note that `ffmpeg` is needed in case of using `audio-to-text` LocalAI's features. +- If using old and outdated CPUs and no GPUs you might need to set `REBUILD` to `true` as environment variable along with options to disable the flags which your CPU does not support, however note that inference will perform poorly and slow. See also [flagset compatibility]({{%relref "docs/getting-started/build#cpu-flagset-compatibility" %}}). + +{{% /alert %}} + +{{< tabs tabTotal="3" >}} +{{% tab tabName="Vanilla / CPU Images" %}} + +| Description | Quay | Dockerhub | +| --- | --- | --- | +| Latest images from the branch (development) | `quay.io/go-skynet/local-ai:master` | `localai/localai:master` | +| Latest tag | `quay.io/go-skynet/local-ai:latest` | `localai/localai:latest` | +| Versioned image | `quay.io/go-skynet/local-ai:{{< version >}}` | `localai/localai:{{< version >}}` | +| Versioned image including FFMpeg| `quay.io/go-skynet/local-ai:{{< version >}}-ffmpeg` | `localai/localai:{{< version >}}-ffmpeg` | +| Versioned image including FFMpeg, no python | `quay.io/go-skynet/local-ai:{{< version >}}-ffmpeg-core` | `localai/localai:{{< version >}}-ffmpeg-core` | + +{{% /tab %}} + +{{% tab tabName="GPU Images CUDA 11" %}} + + +| Description | Quay | Dockerhub | +| --- | --- | --- | +| Latest images from the branch (development) | `quay.io/go-skynet/local-ai:master-cublas-cuda11` | `localai/localai:master-cublas-cuda11` | +| Latest tag | `quay.io/go-skynet/local-ai:latest-cublas-cuda11` | `localai/localai:latest-cublas-cuda11` | +| Versioned image | `quay.io/go-skynet/local-ai:{{< version >}}-cublas-cuda11` | `localai/localai:{{< version >}}-cublas-cuda11` | +| Versioned image including FFMpeg| `quay.io/go-skynet/local-ai:{{< version >}}-cublas-cuda11-ffmpeg` | `localai/localai:{{< version >}}-cublas-cuda11-ffmpeg` | +| Versioned image including FFMpeg, no python | `quay.io/go-skynet/local-ai:{{< version >}}-cublas-cuda11-ffmpeg-core` | `localai/localai:{{< version >}}-cublas-cuda11-ffmpeg-core` | + +{{% /tab %}} + +{{% tab tabName="GPU Images CUDA 12" %}} + + +| Description | Quay | Dockerhub | +| --- | --- | --- | +| Latest images from the branch (development) | `quay.io/go-skynet/local-ai:master-cublas-cuda12` | `localai/localai:master-cublas-cuda12` | +| Latest tag | `quay.io/go-skynet/local-ai:latest-cublas-cuda12` | `localai/localai:latest-cublas-cuda12` | +| Versioned image | `quay.io/go-skynet/local-ai:{{< version >}}-cublas-cuda12` | `localai/localai:{{< version >}}-cublas-cuda12` | +| Versioned image including FFMpeg| `quay.io/go-skynet/local-ai:{{< version >}}-cublas-cuda12-ffmpeg` | `localai/localai:{{< version >}}-cublas-cuda12-ffmpeg` | +| Versioned image including FFMpeg, no python | `quay.io/go-skynet/local-ai:{{< version >}}-cublas-cuda12-ffmpeg-core` | `localai/localai:{{< version >}}-cublas-cuda12-ffmpeg-core` | + + +{{% /tab %}} + +{{< /tabs >}} + +## What's next? + +Explore further resources and community contributions: + +- [Community How to's](https://io.midori-ai.xyz/howtos/) +- [Examples](https://github.com/mudler/LocalAI/tree/master/examples#examples) + +[![Screenshot from 2023-04-26 23-59-55](https://user-images.githubusercontent.com/2420543/234715439-98d12e03-d3ce-4f94-ab54-2b256808e05e.png)](https://github.com/mudler/LocalAI/tree/master/examples#examples) \ No newline at end of file diff --git a/docs/content/docs/integrations.md b/docs/content/docs/integrations.md new file mode 100644 index 00000000..8ae2513a --- /dev/null +++ b/docs/content/docs/integrations.md @@ -0,0 +1,34 @@ ++++ +disableToc = false +title = "Integrations" +weight = 19 +icon = "rocket_launch" + ++++ + +## Community integrations + +List of projects that are using directly LocalAI behind the scenes: + +- https://github.com/sozercan/aikit +- https://github.com/aorumbayev/autogpt4all +- https://github.com/mudler/LocalAGI + +## The following softwares has out-of-the-box integrations with LocalAI + +LocalAI can be used as a drop-in replacement, however, the following projects provides specific integrations with LocalAI: + +- [AnythingLLM](https://github.com/Mintplex-Labs/anything-llm) +- [Logseq GPT3 OpenAI plugin](https://github.com/briansunter/logseq-plugin-gpt3-openai) allows to set a base URL, and works with LocalAI. +- https://github.com/longy2k/obsidian-bmo-chatbot +- https://github.com/FlowiseAI/Flowise +- https://github.com/k8sgpt-ai/k8sgpt +- https://github.com/kairos-io/kairos +- https://github.com/langchain4j/langchain4j +- https://github.com/henomis/lingoose +- https://github.com/trypromptly/LLMStack +- https://github.com/mattermost/openops +- https://github.com/charmbracelet/mods +- https://github.com/cedriking/spark + +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/_index.en.md b/docs/content/docs/overview.md similarity index 92% rename from docs/content/_index.en.md rename to docs/content/docs/overview.md index 6242a525..96577a84 100644 --- a/docs/content/_index.en.md +++ b/docs/content/docs/overview.md @@ -1,8 +1,21 @@ + +++ -archetype = "home" -title = "LocalAI" +title = "Overview" +weight = 1 +toc = true +description = "What is LocalAI?" +tags = ["Beginners"] +categories = [""] +author = "Ettore Di Giacinto" +# This allows to overwrite the landing page +url = '/' +icon = "info" +++ +

+ +

+

LocalAI forks @@ -21,11 +34,11 @@ title = "LocalAI" [](https://hub.docker.com/r/localai/localai) [](https://quay.io/repository/go-skynet/local-ai?tab=tags&tag=latest) -> πŸ’‘ 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) +> πŸ’‘ Get help - [❓FAQ](https://localai.io/faq/) [❓How tos](https://io.midori-ai.xyz/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/) [ πŸš€ Roadmap ](https://github.com/mudler/LocalAI/issues?q=is%3Aissue+is%3Aopen+label%3Aroadmap) -**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). +**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 and architectures. Does not require GPU. It is maintained by [mudler](https://github.com/mudler).

@@ -65,7 +78,7 @@ Note that this started just as a fun weekend project by [mudler](https://github. 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 uses a mixture of backends written in various languages (C++, Golang, Python, ...). You can check [the model compatibility table]({{%relref "docs/reference/compatibility-table" %}}) to learn about all the components of LocalAI. ![localai](https://github.com/go-skynet/localai-website/assets/2420543/6492e685-8282-4217-9daa-e229a31548bc) diff --git a/docs/content/docs/reference/_index.en.md b/docs/content/docs/reference/_index.en.md new file mode 100644 index 00000000..339d2728 --- /dev/null +++ b/docs/content/docs/reference/_index.en.md @@ -0,0 +1,11 @@ +--- +weight: 23 +title: "References" +description: "Reference" +icon: science +lead: "" +date: 2020-10-06T08:49:15+00:00 +lastmod: 2020-10-06T08:49:15+00:00 +draft: false +images: [] +--- \ No newline at end of file diff --git a/docs/content/model-compatibility/_index.en.md b/docs/content/docs/reference/compatibility-table.md similarity index 77% rename from docs/content/model-compatibility/_index.en.md rename to docs/content/docs/reference/compatibility-table.md index 53daa60b..123a6726 100644 --- a/docs/content/model-compatibility/_index.en.md +++ b/docs/content/docs/reference/compatibility-table.md @@ -1,29 +1,21 @@ +++ disableToc = false -title = "Model compatibility" -weight = 4 +title = "Model compatibility table" +weight = 24 +++ -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 `gguf` 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. +{{% alert 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 "docs/advanced" %}}) for more details. + +{{% /alert %}} + | 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 | +| [llama.cpp]({{%relref "docs/features/text-generation#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 | @@ -56,30 +48,8 @@ Besides llama based models, LocalAI is compatible also with other architectures. | `coqui` | Coqui | no | Audio generation and Voice cloning | no | no | CPU/CUDA | | `petals` | 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" %}})). +Note: any backend name listed above can be used in the `backend` field of the model configuration file (See [the advanced section]({{%relref "docs/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`. +- *** 7b and 40b with the `ggccv` format, for instance: https://huggingface.co/TheBloke/WizardLM-Uncensored-Falcon-40B-GGML \ No newline at end of file diff --git a/docs/content/news/_index.en.md b/docs/content/docs/whats-new.md similarity index 86% rename from docs/content/news/_index.en.md rename to docs/content/docs/whats-new.md index 2679fe3d..8f07b1cb 100644 --- a/docs/content/news/_index.en.md +++ b/docs/content/docs/whats-new.md @@ -1,11 +1,17 @@ +++ disableToc = false -title = "πŸ†• What's New" -weight = 2 +title = "News" +weight = 7 url = '/basics/news/' - +icon = "newspaper" +++ +Release notes have been now moved completely over Github releases. + +You can see the release notes [here](https://github.com/mudler/LocalAI/releases). + +# Older release notes + ## 04-12-2023: __v2.0.0__ This release brings a major overhaul in some backends. @@ -68,7 +74,7 @@ From this release the `llama` backend supports only `gguf` files (see {{< pr "94 ### 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. +The [Diffusers]({{%relref "docs/features/image-generation" %}}) backend got now various enhancements, including support to generate images from images, longer prompts, and support for more kernels schedulers. See the [Diffusers]({{%relref "docs/features/image-generation" %}}) documentation for more information. ### Lora adapters @@ -80,7 +86,7 @@ It is now possible for single-devices with one GPU to specify `--single-active-b ### Community spotlight -![2023_08_26_15_09_27](https://github.com/go-skynet/localai-website/assets/2420543/f0204f8f-7462-4cdd-9154-4538683c1eef) + #### Resources management @@ -89,7 +95,7 @@ There is an ongoing effort in the community to better handling of resources. See #### 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! +Thanks to the community efforts now we have a new [how-to website](https://io.midori-ai.xyz/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! @@ -131,7 +137,7 @@ The full changelog is available [here](https://github.com/go-skynet/LocalAI/rele ## πŸ”₯πŸ”₯πŸ”₯πŸ”₯ 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! +This is release brings four(!) new additional backends to LocalAI: [🐢 Bark]({{%relref "docs/features/text-to-audio#bark" %}}), πŸ¦™ [AutoGPTQ]({{%relref "docs/features/text-generation#autogptq" %}}), [🧨 Diffusers]({{%relref "docs/features/image-generation" %}}), πŸ¦™ [exllama]({{%relref "docs/features/text-generation#exllama" %}}) and a lot of improvements! ### Major improvements: @@ -143,23 +149,23 @@ This is release brings four(!) new additional backends to LocalAI: [🐢 Bark]({ ### 🐢 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. +[Bark]({{%relref "docs/features/text-to-audio#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. +[AutoGPTQ]({{%relref "docs/features/text-generation#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. +It is targeted mainly for GPU usage only. Check out the [ documentation]({{%relref "docs/features/text-generation" %}}) 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. +[Exllama]({{%relref "docs/features/text-generation#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 "docs/features/text-generation#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. +[Diffusers]({{%relref "docs/features/image-generation#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 "docs/features/image-generation" %}}) for usage. ### πŸ”‘ API Keys @@ -195,11 +201,11 @@ Most notably, this release brings important fixes for CUDA (and not only): * 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 %}} +{{% alert 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" %}}). +From this release [OpenAI functions]({{%relref "docs/features/openai-functions" %}}) are available in the `llama` backend. The `llama-grammar` has been deprecated. See also [OpenAI functions]({{%relref "docs/features/openai-functions" %}}). -{{% /notice %}} +{{% /alert %}} The full [changelog is available here](https://github.com/go-skynet/LocalAI/releases/tag/v1.23.0) @@ -213,15 +219,15 @@ The full [changelog is available here](https://github.com/go-skynet/LocalAI/rele * 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 %}} +{{% alert 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. +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 "docs/features/openai-functions" %}}). Until the feature is merged we will have two llama backends. -{{% /notice %}} +{{% /alert %}} ## 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" %}}). +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 "docs/features/embeddings" %}}). ## LLaMa 2 has been released! @@ -266,7 +272,7 @@ 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. +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 "docs/getting-started/build" %}}) for more information. [Full release changelog](https://github.com/go-skynet/LocalAI/releases/tag/v1.21.0) @@ -276,8 +282,8 @@ From this release the default behavior of images has changed. Compilation is not ### 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. +* Add Text-to-Audio generation with `go-piper` by {{< github "mudler" >}} in {{< pr "649" >}} See [API endpoints]({{%relref "docs/features/text-to-audio" %}}) in our documentation. +* Add gallery repository by {{< github "mudler" >}} in {{< pr "663" >}}. See [models]({{%relref "docs/features/model-gallery" %}}) for documentation. ### Container images - Standard (GPT + `stablediffusion`): `quay.io/go-skynet/local-ai:v1.20.0` @@ -289,7 +295,7 @@ From this release the default behavior of images has changed. Compilation is not 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. +The NUMA option was enabled by {{< github "mudler" >}} in {{< pr "684" >}}, along with many new parameters (`mmap`,`mmlock`, ..). See [advanced]({{%relref "docs/advanced" %}}) for the full list of parameters. ### Gallery repositories @@ -313,13 +319,13 @@ or a `tts` voice with: 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. +See also [models]({{%relref "docs/features/model-gallery" %}}) 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" %}}). +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 "docs/features/text-to-audio" %}}). You can check the full changelog in [Github](https://github.com/go-skynet/LocalAI/releases/tag/v1.20.0) @@ -347,7 +353,7 @@ We now support a vast variety of models, while being backward compatible with pr ### 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" %}}). +- ✨ 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 "docs/getting-started/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) ) @@ -388,7 +394,7 @@ Two new projects offer now direct integration with LocalAI! 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" %}}). +You can now build LocalAI from source with `BUILD_TYPE=clblas` to have an OpenCL build. See also the [build section]({{%relref "docs/getting-started/build#Acceleration" %}}). For instructions on how to install OpenCL/CLBlast see [here](https://github.com/ggerganov/llama.cpp#blas-build). @@ -418,7 +424,7 @@ prompt_cache_path: "alpaca-cache" prompt_cache_all: true ``` -See also the [advanced section]({{%relref "advanced" %}}). +See also the [advanced section]({{%relref "docs/advanced" %}}). ## Media, Blogs, Social @@ -431,7 +437,7 @@ See also the [advanced section]({{%relref "advanced" %}}). - 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#" %}}). +- 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 "docs/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`. diff --git a/docs/content/features/_index.en.md b/docs/content/features/_index.en.md deleted file mode 100644 index a0f4dc5d..00000000 --- a/docs/content/features/_index.en.md +++ /dev/null @@ -1,17 +0,0 @@ - -+++ -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" %}}) -- [πŸ†• GPT Vision API]({{%relref "features/gpt-vision" %}}) -- [✍️ Constrained grammars]({{%relref "features/constrained_grammars" %}}) diff --git a/docs/content/features/text-generation.md b/docs/content/features/text-generation.md deleted file mode 100644 index 5fe0d928..00000000 --- a/docs/content/features/text-generation.md +++ /dev/null @@ -1,70 +0,0 @@ - -+++ -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 deleted file mode 100644 index ab038d2f..00000000 --- a/docs/content/features/text-to-audio.md +++ /dev/null @@ -1,77 +0,0 @@ - -+++ -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. - -LocalAI also has experimental support for `transformers-musicgen` for the generation of short musical compositions. Currently, this is implemented via the same requests used for text to speech: - -``` -curl --request POST \ - --url http://localhost:8080/tts \ - --header 'Content-Type: application/json' \ - --data '{ - "backend": "transformers-musicgen", - "model": "facebook/musicgen-medium", - "input": "Cello Rave" -}' | aplay``` - -Future versions of LocalAI will expose additional control over audio generation beyond the text prompt. - -#### 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 deleted file mode 100644 index 180a39a3..00000000 --- a/docs/content/getting_started/_index.en.md +++ /dev/null @@ -1,323 +0,0 @@ - -+++ -disableToc = false -title = "Getting started" -weight = 1 -url = '/basics/getting_started/' -+++ - -`LocalAI` is available as a container image and binary. It can be used with docker, podman, kubernetes and any container engine. -Container images are published to [quay.io](https://quay.io/repository/go-skynet/local-ai?tab=tags&tag=latest) and [Dockerhub](https://hub.docker.com/r/localai/localai). - -[](https://hub.docker.com/r/localai/localai) -[](https://quay.io/repository/go-skynet/local-ai?tab=tags&tag=latest) - -See also our [How to](https://io.midori-ai.xyz/howtos/) section for end-to-end guided examples curated by the community. - -### How to get started - -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" %}})). - -LocalAI needs at least a model file to work, or a configuration YAML file, or both. You can customize further model defaults and specific settings with a configuration file (see [advanced]({{%relref "advanced" %}})). - -{{% notice note %}} -To run with GPU Accelleration, see [GPU acceleration]({{%relref "features/gpu-acceleration" %}}). -{{% /notice %}} - -{{< tabs >}} -{{% tab name="Docker" %}} - -```bash -# Prepare the models into the `model` directory -mkdir models - -# copy your models to it -cp your-model.gguf models/ - -# run the LocalAI container -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 β”‚ -# β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ - -# Try the endpoint with curl -curl http://localhost:8080/v1/completions -H "Content-Type: application/json" -d '{ - "model": "your-model.gguf", - "prompt": "A long time ago in a galaxy far, far away", - "temperature": 0.7 - }' -``` - -{{% 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. -{{% /notice %}} - -{{% /tab %}} -{{% tab name="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 - -# copy your models to models/ -cp your-model.gguf 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.gguf","object":"model"}]} - -curl http://localhost:8080/v1/completions -H "Content-Type: application/json" -d '{ - "model": "your-model.gguf", - "prompt": "A long time ago in a galaxy far, far away", - "temperature": 0.7 - }' -``` - -Note: If you are on Windows, please make sure the project is on the Linux Filesystem, otherwise loading models might be slow. For more Info: [Microsoft Docs](https://learn.microsoft.com/en-us/windows/wsl/filesystems) - -{{% /tab %}} - -{{% tab name="Kubernetes" %}} - -For installing LocalAI in Kubernetes, you can use the following helm chart: - -```bash -# Install the helm repository -helm repo add go-skynet https://go-skynet.github.io/helm-charts/ -# Update the repositories -helm repo update -# Get the values -helm show values go-skynet/local-ai > values.yaml - -# Edit the values value if needed -# vim values.yaml ... - -# Install the helm chart -helm install local-ai go-skynet/local-ai -f values.yaml -``` - -{{% /tab %}} -{{% tab name="From binary" %}} - -LocalAI binary releases are available in [Github](https://github.com/go-skynet/LocalAI/releases). - -{{% /tab %}} - -{{% tab name="From source" %}} - -See the [build section]({{%relref "build" %}}). - -{{% /tab %}} - -{{< /tabs >}} - -### Running Popular models (one-click!) - -You can run `local-ai` directly with a model name, and it will download the model and start the API with the model loaded. - -> Don't need GPU acceleration? use the CPU images which are lighter and do not have Nvidia dependencies -> To know which version of CUDA do you have available, you can check with `nvidia-smi` or `nvcc --version` - - -{{< tabs >}} -{{% tab name="CPU-only" %}} - -| Model | Category | Docker command | -| --- | --- | --- | -| [phi-2](https://huggingface.co/microsoft/phi-2) | LLM | ```docker run -ti -p 8080:8080 localai/localai:{{< version >}}-ffmpeg-core phi-2``` | -| [llava](https://github.com/SkunkworksAI/BakLLaVA) | Multimodal LLM | ```docker run -ti -p 8080:8080 localai/localai:{{< version >}}-ffmpeg-core llava``` | -| [mistral-openorca](https://huggingface.co/Open-Orca/Mistral-7B-OpenOrca) | LLM | ```docker run -ti -p 8080:8080 localai/localai:{{< version >}}-ffmpeg-core mistral-openorca``` | -| [bert-cpp](https://github.com/skeskinen/bert.cpp) | Embeddings | ```docker run -ti -p 8080:8080 localai/localai:{{< version >}}-ffmpeg-core bert-cpp``` | -| all-minilm-l6-v2 | Embeddings | ```docker run -ti -p 8080:8080 localai/localai:{{< version >}}-ffmpeg all-minilm-l6-v2``` | -| whisper-base | Audio to Text | ```docker run -ti -p 8080:8080 localai/localai:{{< version >}}-ffmpeg-core whisper-base``` | -| rhasspy-voice-en-us-amy | Text to Audio | ```docker run -ti -p 8080:8080 localai/localai:{{< version >}}-ffmpeg-core rhasspy-voice-en-us-amy``` | -| coqui | Text to Audio | ```docker run -ti -p 8080:8080 localai/localai:{{< version >}}-ffmpeg coqui``` | -| bark | Text to Audio | ```docker run -ti -p 8080:8080 localai/localai:{{< version >}}-ffmpeg bark``` | -| vall-e-x | Text to Audio | ```docker run -ti -p 8080:8080 localai/localai:{{< version >}}-ffmpeg vall-e-x``` | - -{{% /tab %}} -{{% tab name="GPU (CUDA 11)" %}} - - - -| Model | Category | Docker command | -| --- | --- | --- | -| [phi-2](https://huggingface.co/microsoft/phi-2) | LLM | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda11-core phi-2``` | -| [llava](https://github.com/SkunkworksAI/BakLLaVA) | Multimodal LLM | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda11-core llava``` | -| [mistral-openorca](https://huggingface.co/Open-Orca/Mistral-7B-OpenOrca) | LLM | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda11-core mistral-openorca``` | -| [bert-cpp](https://github.com/skeskinen/bert.cpp) | Embeddings | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda11-core bert-cpp``` | -| [all-minilm-l6-v2](https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2) | Embeddings | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda11 all-minilm-l6-v2``` | -| whisper-base | Audio to Text | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda11-core whisper-base``` | -| rhasspy-voice-en-us-amy | Text to Audio | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda11-core rhasspy-voice-en-us-amy``` | -| coqui | Text to Audio | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda11 coqui``` | -| bark | Text to Audio | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda11 bark``` | -| vall-e-x | Text to Audio | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda11 vall-e-x``` | - -{{% /tab %}} - - -{{% tab name="GPU (CUDA 12)" %}} - -| Model | Category | Docker command | -| --- | --- | --- | -| [phi-2](https://huggingface.co/microsoft/phi-2) | LLM | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda12-core phi-2``` | -| [llava](https://github.com/SkunkworksAI/BakLLaVA) | Multimodal LLM | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda12-core llava``` | -| [mistral-openorca](https://huggingface.co/Open-Orca/Mistral-7B-OpenOrca) | LLM | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda12-core mistral-openorca``` | -| bert-cpp | Embeddings | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda12-core bert-cpp``` | -| all-minilm-l6-v2 | Embeddings | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda12 all-minilm-l6-v2``` | -| whisper-base | Audio to Text | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda12-core whisper-base``` | -| rhasspy-voice-en-us-amy | Text to Audio | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda12-core rhasspy-voice-en-us-amy``` | -| coqui | Text to Audio | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda12 coqui``` | -| bark | Text to Audio | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda12 bark``` | -| vall-e-x | Text to Audio | ```docker run -ti -p 8080:8080 --gpus all localai/localai:{{< version >}}-cublas-cuda12 vall-e-x``` | - -{{% /tab %}} - -{{< /tabs >}} - -{{% notice note %}} - -LocalAI can be started (either the container image or the binary) with a list of model config files URLs or our short-handed format (e.g. `huggingface://`. `github://`). It works by passing the urls as arguments or environment variable, for example: - -``` -local-ai github://owner/repo/file.yaml@branch - -# Env -MODELS="github://owner/repo/file.yaml@branch,github://owner/repo/file.yaml@branch" local-ai - -# Args -local-ai --models github://owner/repo/file.yaml@branch --models github://owner/repo/file.yaml@branch -``` - -For example, to start localai with phi-2, it's possible for instance to also use a full config file from gists: - -```bash -docker run -p 8080:8080 localai/localai:{{< version >}}-ffmpeg-core https://gist.githubusercontent.com/mudler/ad601a0488b497b69ec549150d9edd18/raw/a8a8869ef1bb7e3830bf5c0bae29a0cce991ff8d/phi-2.yaml -``` - -The file should be a valid LocalAI YAML configuration file, for the full syntax see [advanced]({{%relref "advanced" %}}). -{{% /notice %}} - -### Container images - -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): - -{{< tabs >}} -{{% tab name="Vanilla / CPU Images" %}} -- `master` -- `latest` -- `{{< version >}}` -- `{{< version >}}-ffmpeg` -- `{{< version >}}-ffmpeg-core` - -Core Images - Smaller images without predownload python dependencies -{{% /tab %}} - -{{% tab name="GPU Images CUDA 11" %}} - -Images with Nvidia accelleration support - -> If you do not know which version of CUDA do you have available, you can check with `nvidia-smi` or `nvcc --version` - -- `master-cublas-cuda11` -- `master-cublas-cuda11-core` -- `{{< version >}}-cublas-cuda11` -- `{{< version >}}-cublas-cuda11-core` -- `{{< version >}}-cublas-cuda11-ffmpeg` -- `{{< version >}}-cublas-cuda11-ffmpeg-core` - -Core Images - Smaller images without predownload python dependencies -{{% /tab %}} - -{{% tab name="GPU Images CUDA 12" %}} - -Images with Nvidia accelleration support - -> If you do not know which version of CUDA do you have available, you can check with `nvidia-smi` or `nvcc --version` - -- `master-cublas-cuda12` -- `master-cublas-cuda12-core` -- `{{< version >}}-cublas-cuda12` -- `{{< version >}}-cublas-cuda12-core` -- `{{< version >}}-cublas-cuda12-ffmpeg` -- `{{< version >}}-cublas-cuda12-ffmpeg-core` - -Core Images - Smaller images without predownload python dependencies - -{{% /tab %}} - -{{< /tabs >}} - -Example: - -- Standard (GPT + `stablediffusion`): `quay.io/go-skynet/local-ai:latest` -- FFmpeg: `quay.io/go-skynet/local-ai:{{< version >}}-ffmpeg` -- CUDA 11+FFmpeg: `quay.io/go-skynet/local-ai:{{< version >}}-cublas-cuda11-ffmpeg` -- CUDA 12+FFmpeg: `quay.io/go-skynet/local-ai:{{< version >}}-cublas-cuda12-ffmpeg` - -{{% 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 %}} - -### Example: Use luna-ai-llama2 model with `docker` - -```bash -mkdir models - -# 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 - -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 - -# 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?"}}]} -``` - -To see other model configurations, see also the example section [here](https://github.com/mudler/LocalAI/tree/master/examples/configurations). - -### 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/). - diff --git a/docs/content/integrations/AIKit.md b/docs/content/integrations/AIKit.md deleted file mode 100644 index 56ea3cec..00000000 --- a/docs/content/integrations/AIKit.md +++ /dev/null @@ -1,178 +0,0 @@ - -+++ -disableToc = false -title = "AIKit" -description="AI + BuildKit = AIKit: Build and deploy large language models easily" -weight = 2 -+++ - -GitHub Link - https://github.com/sozercan/aikit - -[AIKit](https://github.com/sozercan/aikit) is a quick, easy, and local or cloud-agnostic way to get started to host and deploy large language models (LLMs) for inference. No GPU, internet access or additional tools are needed to get started except for [Docker](https://docs.docker.com/desktop/install/linux-install/)! - -AIKit uses [LocalAI](https://localai.io/) under-the-hood to run inference. LocalAI provides a drop-in replacement REST API that is OpenAI API compatible, so you can use any OpenAI API compatible client, such as [Kubectl AI](https://github.com/sozercan/kubectl-ai), [Chatbot-UI](https://github.com/sozercan/chatbot-ui) and many more, to send requests to open-source LLMs powered by AIKit! - -> At this time, AIKit is tested with LocalAI `llama` backend. Other backends may work but are not tested. Please open an issue if you'd like to see support for other backends. - -## Features - -- 🐳 No GPU, Internet access or additional tools needed except for [Docker](https://docs.docker.com/desktop/install/linux-install/)! -- 🀏 Minimal image size, resulting in less vulnerabilities and smaller attack surface with a custom [distroless](https://github.com/GoogleContainerTools/distroless)-based image -- πŸš€ Easy to use declarative configuration -- ✨ OpenAI API compatible to use with any OpenAI API compatible client -- 🚒 Kubernetes deployment ready -- πŸ“¦ Supports multiple models with a single image -- πŸ–₯️ Supports GPU-accelerated inferencing with NVIDIA GPUs -- πŸ” Signed images for `aikit` and pre-made models - -## Pre-made Models - -AIKit comes with pre-made models that you can use out-of-the-box! - -### CPU -- πŸ¦™ Llama 2 7B Chat: `ghcr.io/sozercan/llama2:7b` -- πŸ¦™ Llama 2 13B Chat: `ghcr.io/sozercan/llama2:13b` -- 🐬 Orca 2 13B: `ghcr.io/sozercan/orca2:13b` - -### NVIDIA CUDA - -- πŸ¦™ Llama 2 7B Chat (CUDA): `ghcr.io/sozercan/llama2:7b-cuda` -- πŸ¦™ Llama 2 13B Chat (CUDA): `ghcr.io/sozercan/llama2:13b-cuda` -- 🐬 Orca 2 13B (CUDA): `ghcr.io/sozercan/orca2:13b-cuda` - -> CUDA models includes CUDA v12. They are used with [NVIDIA GPU acceleration](#gpu-acceleration-support). - -## Quick Start - -### Creating an image - -> This section shows how to create a custom image with models of your choosing. If you want to use one of the pre-made models, skip to [running models](#running-models). -> -> Please see [models folder](./models/) for pre-made model definitions. You can find more model examples at [go-skynet/model-gallery](https://github.com/go-skynet/model-gallery). - -Create an `aikitfile.yaml` with the following structure: - -```yaml -#syntax=ghcr.io/sozercan/aikit:latest -apiVersion: v1alpha1 -models: - - name: llama-2-7b-chat - source: https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGUF/resolve/main/llama-2-7b-chat.Q4_K_M.gguf -``` - -> This is the simplest way to get started to build an image. For full `aikitfile` specification, see [specs](docs/specs.md). - -First, create a buildx buildkit instance. Alternatively, if you are using Docker v24 with [containerd image store](https://docs.docker.com/storage/containerd/) enabled, you can skip this step. - -```bash -docker buildx create --use --name aikit-builder -``` - -Then build your image with: - -```bash -docker buildx build . -t my-model -f aikitfile.yaml --load -``` - -This will build a local container image with your model(s). You can see the image with: - -```bash -docker images -REPOSITORY TAG IMAGE ID CREATED SIZE -my-model latest e7b7c5a4a2cb About an hour ago 5.51GB -``` - -### Running models - -You can start the inferencing server for your models with: - -```bash -# for pre-made models, replace "my-model" with the image name -docker run -d --rm -p 8080:8080 my-model -``` - -You can then send requests to `localhost:8080` to run inference from your models. For example: - -```bash -curl http://localhost:8080/v1/chat/completions -H "Content-Type: application/json" -d '{ - "model": "llama-2-7b-chat", - "messages": [{"role": "user", "content": "explain kubernetes in a sentence"}] - }' -{"created":1701236489,"object":"chat.completion","id":"dd1ff40b-31a7-4418-9e32-42151ab6875a","model":"llama-2-7b-chat","choices":[{"index":0,"finish_reason":"stop","message":{"role":"assistant","content":"\nKubernetes is a container orchestration system that automates the deployment, scaling, and management of containerized applications in a microservices architecture."}}],"usage":{"prompt_tokens":0,"completion_tokens":0,"total_tokens":0}} -``` - -## Kubernetes Deployment - -It is easy to get started to deploy your models to Kubernetes! - -Make sure you have a Kubernetes cluster running and `kubectl` is configured to talk to it, and your model images are accessible from the cluster. - -> You can use [kind](https://kind.sigs.k8s.io/) to create a local Kubernetes cluster for testing purposes. - -```bash -# create a deployment -# for pre-made models, replace "my-model" with the image name -kubectl create deployment my-llm-deployment --image=my-model - -# expose it as a service -kubectl expose deployment my-llm-deployment --port=8080 --target-port=8080 --name=my-llm-service - -# easy to scale up and down as needed -kubectl scale deployment my-llm-deployment --replicas=3 - -# port-forward for testing locally -kubectl port-forward service/my-llm-service 8080:8080 - -# send requests to your model -curl http://localhost:8080/v1/chat/completions -H "Content-Type: application/json" -d '{ - "model": "llama-2-7b-chat", - "messages": [{"role": "user", "content": "explain kubernetes in a sentence"}] - }' -{"created":1701236489,"object":"chat.completion","id":"dd1ff40b-31a7-4418-9e32-42151ab6875a","model":"llama-2-7b-chat","choices":[{"index":0,"finish_reason":"stop","message":{"role":"assistant","content":"\nKubernetes is a container orchestration system that automates the deployment, scaling, and management of containerized applications in a microservices architecture."}}],"usage":{"prompt_tokens":0,"completion_tokens":0,"total_tokens":0}} -``` - -> For an example Kubernetes deployment and service YAML, see [kubernetes folder](./kubernetes/). Please note that these are examples, you may need to customize them (such as properly configured resource requests and limits) based on your needs. - -## GPU Acceleration Support - -> At this time, only NVIDIA GPU acceleration is supported. Please open an issue if you'd like to see support for other GPU vendors. - -### NVIDIA - -AIKit supports GPU accelerated inferencing with [NVIDIA Container Toolkit](https://github.com/NVIDIA/nvidia-container-toolkit). You must also have [NVIDIA Drivers](https://www.nvidia.com/en-us/drivers/unix/) installed on your host machine. - -For Kubernetes, [NVIDIA GPU Operator](https://github.com/NVIDIA/gpu-operator) provides a streamlined way to install the NVIDIA drivers and container toolkit to configure your cluster to use GPUs. - -To get started with GPU-accelerated inferencing, make sure to set the following in your `aikitfile` and build your model. - -```yaml -runtime: cuda # use NVIDIA CUDA runtime -f16: true # use float16 precision -gpu_layers: 35 # number of layers to offload to GPU -low_vram: true # for devices with low VRAM -``` - -> Make sure to customize these values based on your model and GPU specs. - -After building the model, you can run it with [`--gpus all`](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/docker-specialized.html#gpu-enumeration) flag to enable GPU support: - -```bash -# for pre-made models, replace "my-model" with the image name -docker run --rm --gpus all -p 8080:8080 my-model -``` - -If GPU acceleration is working, you'll see output that is similar to following in the debug logs: - -```bash -5:32AM DBG GRPC(llama-2-7b-chat.Q4_K_M.gguf-127.0.0.1:43735): stderr ggml_init_cublas: found 1 CUDA devices: -5:32AM DBG GRPC(llama-2-7b-chat.Q4_K_M.gguf-127.0.0.1:43735): stderr Device 0: Tesla T4, compute capability 7.5 -... -5:32AM DBG GRPC(llama-2-7b-chat.Q4_K_M.gguf-127.0.0.1:43735): stderr llm_load_tensors: using CUDA for GPU acceleration -5:32AM DBG GRPC(llama-2-7b-chat.Q4_K_M.gguf-127.0.0.1:43735): stderr llm_load_tensors: mem required = 70.41 MB (+ 2048.00 MB per state) -5:32AM DBG GRPC(llama-2-7b-chat.Q4_K_M.gguf-127.0.0.1:43735): stderr llm_load_tensors: offloading 32 repeating layers to GPU -5:32AM DBG GRPC(llama-2-7b-chat.Q4_K_M.gguf-127.0.0.1:43735): stderr llm_load_tensors: offloading non-repeating layers to GPU -5:32AM DBG GRPC(llama-2-7b-chat.Q4_K_M.gguf-127.0.0.1:43735): stderr llm_load_tensors: offloading v cache to GPU -5:32AM DBG GRPC(llama-2-7b-chat.Q4_K_M.gguf-127.0.0.1:43735): stderr llm_load_tensors: offloading k cache to GPU -5:32AM DBG GRPC(llama-2-7b-chat.Q4_K_M.gguf-127.0.0.1:43735): stderr llm_load_tensors: offloaded 35/35 layers to GPU -5:32AM DBG GRPC(llama-2-7b-chat.Q4_K_M.gguf-127.0.0.1:43735): stderr llm_load_tensors: VRAM used: 5869 MB -``` diff --git a/docs/content/integrations/AnythingLLM.md b/docs/content/integrations/AnythingLLM.md deleted file mode 100644 index a9e58bae..00000000 --- a/docs/content/integrations/AnythingLLM.md +++ /dev/null @@ -1,70 +0,0 @@ - -+++ -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 deleted file mode 100644 index d2978214..00000000 --- a/docs/content/integrations/BMO-Chatbot.md +++ /dev/null @@ -1,58 +0,0 @@ - -+++ -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 deleted file mode 100644 index e18dec66..00000000 --- a/docs/content/integrations/Bionic-GPT.md +++ /dev/null @@ -1,103 +0,0 @@ - -+++ -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 deleted file mode 100644 index bc41bb3c..00000000 --- a/docs/content/integrations/Flowise.md +++ /dev/null @@ -1,54 +0,0 @@ - -+++ -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 deleted file mode 100644 index 5db1fd5f..00000000 --- a/docs/content/integrations/K8sGPT.md +++ /dev/null @@ -1,466 +0,0 @@ - -+++ -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 deleted file mode 100644 index 417562d3..00000000 --- a/docs/content/integrations/Kairos.md +++ /dev/null @@ -1,39 +0,0 @@ - -+++ -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 deleted file mode 100644 index 70b582fe..00000000 --- a/docs/content/integrations/LLMStack.md +++ /dev/null @@ -1,60 +0,0 @@ - -+++ -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 deleted file mode 100644 index 15ab1629..00000000 --- a/docs/content/integrations/LinGoose.md +++ /dev/null @@ -1,74 +0,0 @@ - -+++ -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 deleted file mode 100644 index 69ff1d23..00000000 --- a/docs/content/integrations/LocalAGI.md +++ /dev/null @@ -1,174 +0,0 @@ - -+++ -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 deleted file mode 100644 index db351918..00000000 --- a/docs/content/integrations/Mattermost-OpenOps.md +++ /dev/null @@ -1,84 +0,0 @@ - -+++ -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 deleted file mode 100644 index e1550e40..00000000 --- a/docs/content/integrations/Mods.md +++ /dev/null @@ -1,246 +0,0 @@ - -+++ -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 deleted file mode 100644 index e5518619..00000000 --- a/docs/content/integrations/Spark.md +++ /dev/null @@ -1,75 +0,0 @@ - -+++ -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 deleted file mode 100644 index 2ee5fa1b..00000000 --- a/docs/content/integrations/_index.md +++ /dev/null @@ -1,14 +0,0 @@ - -+++ -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 deleted file mode 100644 index 558061fb..00000000 --- a/docs/content/integrations/autogpt4all.md +++ /dev/null @@ -1,77 +0,0 @@ - -+++ -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/integrations/langchain4j.md b/docs/content/integrations/langchain4j.md deleted file mode 100644 index e7ff0114..00000000 --- a/docs/content/integrations/langchain4j.md +++ /dev/null @@ -1,399 +0,0 @@ -+++ -disableToc = false -title = "LangChain4j" -description="LangChain for Java: Supercharge your Java application with the power of LLMs" -weight = 2 -+++ - -Github: https://github.com/langchain4j/langchain4j - -[![](https://img.shields.io/twitter/follow/langchain4j)](https://twitter.com/intent/follow?screen_name=langchain4j) -[![](https://dcbadge.vercel.app/api/server/JzTFvyjG6R?compact=true&style=flat)](https://discord.gg/JzTFvyjG6R) - -## Project goals - -The goal of this project is to simplify the integration of AI/LLM capabilities into your Java application. - -This can be achieved thanks to: - -- **A simple and coherent layer of abstractions**, designed to ensure that your code does not depend on concrete implementations such as LLM providers, embedding store providers, etc. This allows for easy swapping of components. -- **Numerous implementations of the above-mentioned abstractions**, providing you with a variety of LLMs and embedding stores to choose from. -- **Range of in-demand features on top of LLMs, such as:** - - The capability to **ingest your own data** (documentation, codebase, etc.), allowing the LLM to act and respond based on your data. - - **Autonomous agents** for delegating tasks (defined on the fly) to the LLM, which will strive to complete them. - - **Prompt templates** to help you achieve the highest possible quality of LLM responses. - - **Memory** to provide context to the LLM for your current and past conversations. - - **Structured outputs** for receiving responses from the LLM with a desired structure as Java POJOs. - - **"AI Services"** for declaratively defining complex AI behavior behind a simple API. - - **Chains** to reduce the need for extensive boilerplate code in common use-cases. - - **Auto-moderation** to ensure that all inputs and outputs to/from the LLM are not harmful. - -## News - -12 November: -- Integration with [OpenSearch](https://opensearch.org/) by [@riferrei](https://github.com/riferrei) -- Add support for loading documents from S3 by [@jmgang](https://github.com/jmgang) -- Integration with [PGVector](https://github.com/pgvector/pgvector) by [@kevin-wu-os](https://github.com/kevin-wu-os) -- Integration with [Ollama](https://ollama.ai/) by [@Martin7-1](https://github.com/Martin7-1) -- Integration with [Amazon Bedrock](https://aws.amazon.com/bedrock/) by [@pascalconfluent](https://github.com/pascalconfluent) -- Adding Memory Id to Tool Method Call by [@benedictstrube](https://github.com/benedictstrube) -- [And more](https://github.com/langchain4j/langchain4j/releases/tag/0.24.0) - -29 September: -- Updates to models API: return `Response` instead of `T`. `Response` contains token usage and finish reason. -- All model and embedding store integrations now live in their own modules -- Integration with [Vespa](https://vespa.ai/) by [@Heezer](https://github.com/Heezer) -- Integration with [Elasticsearch](https://www.elastic.co/) by [@Martin7-1](https://github.com/Martin7-1) -- Integration with [Redis](https://redis.io/) by [@Martin7-1](https://github.com/Martin7-1) -- Integration with [Milvus](https://milvus.io/) by [@IuriiKoval](https://github.com/IuriiKoval) -- Integration with [Astra DB](https://www.datastax.com/products/datastax-astra) and [Cassandra](https://cassandra.apache.org/) by [@clun](https://github.com/clun) -- Added support for overlap in document splitters -- Some bugfixes and smaller improvements - -29 August: -- Offline [text classification with embeddings](https://github.com/langchain4j/langchain4j-examples/blob/main/other-examples/src/main/java/embedding/classification/EmbeddingModelTextClassifierExample.java) -- Integration with [Google Vertex AI](https://cloud.google.com/vertex-ai) by [@kuraleta](https://github.com/kuraleta) -- Reworked [document splitters](https://github.com/langchain4j/langchain4j/blob/main/langchain4j/src/main/java/dev/langchain4j/data/document/splitter/DocumentSplitters.java) -- In-memory embedding store can now be easily persisted -- [And more](https://github.com/langchain4j/langchain4j/releases/tag/0.22.0) - -19 August: -- Integration with [Azure OpenAI](https://learn.microsoft.com/en-us/azure/ai-services/openai/overview) by [@kuraleta](https://github.com/kuraleta) -- Integration with Qwen models (DashScope) by [@jiangsier-xyz](https://github.com/jiangsier-xyz) -- [Integration with Chroma](https://github.com/langchain4j/langchain4j-examples/blob/main/other-examples/src/main/java/embedding/store/ChromaEmbeddingStoreExample.java) by [@kuraleta](https://github.com/kuraleta) -- [Support for persistent ChatMemory](https://github.com/langchain4j/langchain4j-examples/blob/main/other-examples/src/main/java/ServiceWithPersistentMemoryForEachUserExample.java) - -10 August: -- [Integration with Weaviate](https://github.com/langchain4j/langchain4j-examples/blob/main/other-examples/src/main/java/embedding/store/WeaviateEmbeddingStoreExample.java) by [@Heezer](https://github.com/Heezer) -- [Support for DOC, XLS and PPT document types](https://github.com/langchain4j/langchain4j-examples/blob/main/other-examples/src/main/java/DocumentLoaderExamples.java) by [@oognuyh](https://github.com/oognuyh) -- [Separate chat memory for each user](https://github.com/langchain4j/langchain4j-examples/blob/main/other-examples/src/main/java/ServiceWithMemoryForEachUserExample.java) -- [Custom in-process embedding models](https://github.com/langchain4j/langchain4j-examples/blob/main/other-examples/src/main/java/embedding/model/InProcessEmbeddingModelExamples.java) -- Added lots of Javadoc -- [And more](https://github.com/langchain4j/langchain4j/releases/tag/0.19.0) - -26 July: -- We've added integration with [LocalAI](https://localai.io/). Now, you can use LLMs hosted locally! -- Added support for [response streaming in AI Services](https://github.com/langchain4j/langchain4j-examples/blob/main/other-examples/src/main/java/ServiceWithStreamingExample.java). - -21 July: -- Now, you can do [text embedding inside your JVM](https://github.com/langchain4j/langchain4j-examples/blob/main/other-examples/src/main/java/embedding/model/InProcessEmbeddingModelExamples.java). - -17 July: -- You can now try out OpenAI's `gpt-3.5-turbo` and `text-embedding-ada-002` models with LangChain4j for free, without needing an OpenAI account and keys! Simply use the API key "demo". - -15 July: -- Added EmbeddingStoreIngestor -- Redesigned document loaders (see FileSystemDocumentLoader) -- Simplified ConversationalRetrievalChain -- Renamed DocumentSegment into TextSegment -- Added output parsers for numeric types -- Added @UserName for AI Services -- Fixed [23](https://github.com/langchain4j/langchain4j/issues/23) and [24](https://github.com/langchain4j/langchain4j/issues/24) - -11 July: - -- Added ["Dynamic Tools"](https://github.com/langchain4j/langchain4j-examples/blob/main/other-examples/src/main/java/ServiceWithDynamicToolsExample.java): - Now, the LLM can generate code for tasks that require precise calculations, such as math and string manipulation. This will be dynamically executed in a style akin to GPT-4's code interpreter! - We use [Judge0, hosted by Rapid API](https://rapidapi.com/judge0-official/api/judge0-ce/pricing), for code execution. You can subscribe and receive 50 free executions per day. - -5 July: - -- Now you can [add your custom knowledge base to "AI Services"](https://github.com/langchain4j/langchain4j-examples/blob/main/spring-boot-example/src/test/java/dev/example/CustomerSupportApplicationTest.java). - Relevant information will be automatically retrieved and injected into the prompt. This way, the LLM will have a - context of your data and will answer based on it! -- The current date and time can now be automatically injected into the prompt using - special `{{current_date}}`, `{{current_time}}` and `{{current_date_time}}` placeholders. - -3 July: - -- Added support for Spring Boot 3 - -2 July: - -- [Added Spring Boot Starter](https://github.com/langchain4j/langchain4j-examples/blob/main/spring-boot-example/src/test/java/dev/example/CustomerSupportApplicationTest.java) -- Added support for HuggingFace models - -1 July: - -- [Added "Tools"](https://github.com/langchain4j/langchain4j-examples/blob/main/other-examples/src/main/java/ServiceWithToolsExample.java) (support for OpenAI functions) - -## Highlights - -You can declaratively define concise "AI Services" that are powered by LLMs: - -```java -interface Assistant { - - String chat(String userMessage); -} - -Assistant assistant = AiServices.create(Assistant.class, model); - -String answer = assistant.chat("Hello"); - -System.out.println(answer); -// Hello! How can I assist you today? -``` - -You can use LLM as a classifier: - -```java -enum Sentiment { - POSITIVE, NEUTRAL, NEGATIVE -} - -interface SentimentAnalyzer { - - @UserMessage("Analyze sentiment of {{it}}") - Sentiment analyzeSentimentOf(String text); - - @UserMessage("Does {{it}} have a positive sentiment?") - boolean isPositive(String text); -} - -SentimentAnalyzer sentimentAnalyzer = AiServices.create(SentimentAnalyzer.class, model); - -Sentiment sentiment = sentimentAnalyzer.analyzeSentimentOf("It is good!"); -// POSITIVE - -boolean positive = sentimentAnalyzer.isPositive("It is bad!"); -// false -``` - -You can easily extract structured information from unstructured data: - -```java -class Person { - - private String firstName; - private String lastName; - private LocalDate birthDate; - - public String toString() {...} -} - -interface PersonExtractor { - - @UserMessage("Extract information about a person from {{it}}") - Person extractPersonFrom(String text); -} - -PersonExtractor extractor = AiServices.create(PersonExtractor.class, model); - -String text = "In 1968, amidst the fading echoes of Independence Day, " - + "a child named John arrived under the calm evening sky. " - + "This newborn, bearing the surname Doe, marked the start of a new journey."; - -Person person = extractor.extractPersonFrom(text); -// Person { firstName = "John", lastName = "Doe", birthDate = 1968-07-04 } -``` - -You can define more sophisticated prompt templates using mustache syntax: - -```java -interface Translator { - - @SystemMessage("You are a professional translator into {{language}}") - @UserMessage("Translate the following text: {{text}}") - String translate(@V("text") String text, @V("language") String language); -} - -Translator translator = AiServices.create(Translator.class, model); - -String translation = translator.translate("Hello, how are you?", "Italian"); -// Ciao, come stai? -``` - -You can provide tools that LLMs can use! Can be anything: retrieve information from DB, call APIs, etc. -See example [here](https://github.com/langchain4j/langchain4j-examples/blob/main/other-examples/src/main/java/ServiceWithToolsExample.java). - -## Compatibility - -- Java: 8 or higher -- Spring Boot: 2 or 3 - -## Getting started - -1. Add LangChain4j OpenAI dependency to your project: - - Maven: - ``` - - dev.langchain4j - langchain4j-open-ai - 0.24.0 - - ``` - - Gradle: - ``` - implementation 'dev.langchain4j:langchain4j-open-ai:0.24.0' - ``` - -2. Import your OpenAI API key: - ```java - String apiKey = System.getenv("OPENAI_API_KEY"); - ``` - You can use the API key "demo" to test OpenAI, which we provide for free. - [How to gen an API key?](https://github.com/langchain4j/langchain4j#how-to-get-an-api-key) - - -3. Create an instance of a model and start interacting: - ```java - OpenAiChatModel model = OpenAiChatModel.withApiKey(apiKey); - - String answer = model.generate("Hello world!"); - - System.out.println(answer); // Hello! How can I assist you today? - ``` - -## Disclaimer - -Please note that the library is in active development and: - -- Many features are still missing. We are working hard on implementing them ASAP. -- API might change at any moment. At this point, we prioritize good design in the future over backward compatibility - now. We hope for your understanding. -- We need your input! Please [let us know](https://github.com/langchain4j/langchain4j/issues/new/choose) what features you need and your concerns about the current implementation. - -## Current capabilities: - -- AI Services: - - [Simple](https://github.com/langchain4j/langchain4j-examples/blob/main/other-examples/src/main/java/SimpleServiceExample.java) - - [With Memory](https://github.com/langchain4j/langchain4j-examples/blob/main/other-examples/src/main/java/ServiceWithMemoryExample.java) - - [With Tools](https://github.com/langchain4j/langchain4j-examples/blob/main/other-examples/src/main/java/ServiceWithToolsExample.java) - - [With Streaming](https://github.com/langchain4j/langchain4j-examples/blob/main/other-examples/src/main/java/ServiceWithStreamingExample.java) - - [With Retriever](https://github.com/langchain4j/langchain4j-examples/blob/main/other-examples/src/main/java/ServiceWithRetrieverExample.java) - - [With Auto-Moderation](https://github.com/langchain4j/langchain4j-examples/blob/main/other-examples/src/main/java/ServiceWithAutoModerationExample.java) - - [With Structured Outputs, Structured Prompts, etc](https://github.com/langchain4j/langchain4j-examples/blob/main/other-examples/src/main/java/OtherServiceExamples.java) -- Integration with [OpenAI](https://platform.openai.com/docs/introduction) and [Azure OpenAI](https://learn.microsoft.com/en-us/azure/ai-services/openai/overview) for: - - [Chats](https://platform.openai.com/docs/guides/chat) (sync + streaming + functions) - - [Completions](https://platform.openai.com/docs/guides/completion) (sync + streaming) - - [Embeddings](https://platform.openai.com/docs/guides/embeddings) -- Integration with [Google Vertex AI](https://cloud.google.com/vertex-ai) for: - - [Chats](https://cloud.google.com/vertex-ai/docs/generative-ai/chat/chat-prompts) - - [Completions](https://cloud.google.com/vertex-ai/docs/generative-ai/text/text-overview) - - [Embeddings](https://cloud.google.com/vertex-ai/docs/generative-ai/embeddings/get-text-embeddings) -- Integration with [HuggingFace Inference API](https://huggingface.co/docs/api-inference/index) for: - - [Chats](https://huggingface.co/docs/api-inference/detailed_parameters#text-generation-task) - - [Completions](https://huggingface.co/docs/api-inference/detailed_parameters#text-generation-task) - - [Embeddings](https://huggingface.co/docs/api-inference/detailed_parameters#feature-extraction-task) -- Integration with [LocalAI](https://localai.io/) for: - - Chats (sync + streaming + functions) - - Completions (sync + streaming) - - Embeddings -- Integration with [DashScope](https://dashscope.aliyun.com/) for: - - Chats (sync + streaming) - - Completions (sync + streaming) - - Embeddings -- [Chat memory](https://github.com/langchain4j/langchain4j-examples/blob/main/other-examples/src/main/java/ChatMemoryExamples.java) -- [Persistent chat memory](https://github.com/langchain4j/langchain4j-examples/blob/main/other-examples/src/main/java/ServiceWithPersistentMemoryForEachUserExample.java) -- [Chat with Documents](https://github.com/langchain4j/langchain4j-examples/blob/main/other-examples/src/main/java/ChatWithDocumentsExamples.java) -- Integration with [Astra DB](https://www.datastax.com/products/datastax-astra) and [Cassandra](https://cassandra.apache.org/) -- [Integration](https://github.com/langchain4j/langchain4j-examples/blob/main/chroma-example/src/main/java/ChromaEmbeddingStoreExample.java) with [Chroma](https://www.trychroma.com/) -- [Integration](https://github.com/langchain4j/langchain4j-examples/blob/main/elasticsearch-example/src/main/java/ElasticsearchEmbeddingStoreExample.java) with [Elasticsearch](https://www.elastic.co/) -- [Integration](https://github.com/langchain4j/langchain4j-examples/blob/main/milvus-example/src/main/java/MilvusEmbeddingStoreExample.java) with [Milvus](https://milvus.io/) -- [Integration](https://github.com/langchain4j/langchain4j-examples/blob/main/pinecone-example/src/main/java/PineconeEmbeddingStoreExample.java) with [Pinecone](https://www.pinecone.io/) -- [Integration](https://github.com/langchain4j/langchain4j-examples/blob/main/redis-example/src/main/java/RedisEmbeddingStoreExample.java) with [Redis](https://redis.io/) -- [Integration](https://github.com/langchain4j/langchain4j-examples/blob/main/vespa-example/src/main/java/VespaEmbeddingStoreExample.java) with [Vespa](https://vespa.ai/) -- [Integration](https://github.com/langchain4j/langchain4j-examples/blob/main/weaviate-example/src/main/java/WeaviateEmbeddingStoreExample.java) with [Weaviate](https://weaviate.io/) -- [In-memory embedding store](https://github.com/langchain4j/langchain4j-examples/blob/main/other-examples/src/main/java/embedding/store/InMemoryEmbeddingStoreExample.java) (can be persisted) -- [Structured outputs](https://github.com/langchain4j/langchain4j-examples/blob/main/other-examples/src/main/java/OtherServiceExamples.java) -- [Prompt templates](https://github.com/langchain4j/langchain4j-examples/blob/main/other-examples/src/main/java/PromptTemplateExamples.java) -- [Structured prompt templates](https://github.com/langchain4j/langchain4j-examples/blob/main/other-examples/src/main/java/StructuredPromptTemplateExamples.java) -- [Streaming of LLM responses](https://github.com/langchain4j/langchain4j-examples/blob/main/other-examples/src/main/java/StreamingExamples.java) -- [Loading txt, html, pdf, doc, xls and ppt documents from the file system and via URL](https://github.com/langchain4j/langchain4j-examples/blob/main/other-examples/src/main/java/DocumentLoaderExamples.java) -- [Splitting documents into segments](https://github.com/langchain4j/langchain4j-examples/blob/main/other-examples/src/main/java/ChatWithDocumentsExamples.java): - - by paragraphs, lines, sentences, words, etc - - recursively - - with overlap -- Token count estimation (so that you can predict how much you will pay) - -## Coming soon: - -- Extending "AI Service" features -- Integration with more LLM providers (commercial and free) -- Integrations with more embedding stores (commercial and free) -- Support for more document types -- Long-term memory for chatbots and agents -- Chain-of-Thought and Tree-of-Thought - -## Request features - -Please [let us know](https://github.com/langchain4j/langchain4j/issues/new/choose) what features you need! - -## Contribute - -Please help us make this open-source library better by contributing. - -Some guidelines: -1. Follow [Google's Best Practices for Java Libraries](https://jlbp.dev/). -2. Keep the code compatible with Java 8. -3. Avoid adding new dependencies as much as possible. If absolutely necessary, try to (re)use the same libraries which are already present. -4. Follow existing code styles present in the project. -5. Ensure to add Javadoc where necessary. -6. Provide unit and/or integration tests for your code. -7. Large features should be discussed with maintainers before implementation. - -## Use cases - -You might ask why would I need all of this? -Here are a couple of examples: - -- You want to implement a custom AI-powered chatbot that has access to your data and behaves the way you want it: - - Customer support chatbot that can: - - politely answer customer questions - - take /change/cancel orders - - Educational assistant that can: - - Teach various subjects - - Explain unclear parts - - Assess user's understanding/knowledge -- You want to process a lot of unstructured data (files, web pages, etc) and extract structured information from them. - For example: - - extract insights from customer reviews and support chat history - - extract interesting information from the websites of your competitors - - extract insights from CVs of job applicants -- You want to generate information, for example: - - Emails tailored for each of your customers - - Content for your app/website: - - Blog posts - - Stories -- You want to transform information, for example: - - Summarize - - Proofread and rewrite - - Translate - -## Best practices - -We highly recommend -watching [this amazing 90-minute tutorial](https://www.deeplearning.ai/short-courses/chatgpt-prompt-engineering-for-developers/) -on prompt engineering best practices, presented by Andrew Ng (DeepLearning.AI) and Isa Fulford (OpenAI). -This course will teach you how to use LLMs efficiently and achieve the best possible results. Good investment of your -time! - -Here are some best practices for using LLMs: - -- Be responsible. Use AI for Good. -- Be specific. The more specific your query, the best results you will get. -- Add a ["Let’s think step by step" instruction](https://arxiv.org/pdf/2205.11916.pdf) to your prompt. -- Specify steps to achieve the desired goal yourself. This will make the LLM do what you want it to do. -- Provide examples. Sometimes it is best to show LLM a few examples of what you want instead of trying to explain it. -- Ask LLM to provide structured output (JSON, XML, etc). This way you can parse response more easily and distinguish - different parts of it. -- Use unusual delimiters, such as \```triple backticks``` to help the LLM distinguish - data or input from instructions. - -## How to get an API key -You will need an API key from OpenAI (paid) or HuggingFace (free) to use LLMs hosted by them. - -We recommend using OpenAI LLMs (`gpt-3.5-turbo` and `gpt-4`) as they are by far the most capable and are reasonably priced. - -It will cost approximately $0.01 to generate 10 pages (A4 format) of text with `gpt-3.5-turbo`. With `gpt-4`, the cost will be $0.30 to generate the same amount of text. However, for some use cases, this higher cost may be justified. - -[How to get OpenAI API key](https://www.howtogeek.com/885918/how-to-get-an-openai-api-key/). - -For embeddings, we recommend using one of the models from the [HuggingFace MTEB leaderboard](https://huggingface.co/spaces/mteb/leaderboard). -You'll have to find the best one for your specific use case. - -Here's how to get a HuggingFace API key: -- Create an account on https://huggingface.co -- Go to https://huggingface.co/settings/tokens -- Generate a new access token diff --git a/docs/content/model-compatibility/autogptq.md b/docs/content/model-compatibility/autogptq.md deleted file mode 100644 index de173a30..00000000 --- a/docs/content/model-compatibility/autogptq.md +++ /dev/null @@ -1,38 +0,0 @@ - -+++ -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 deleted file mode 100644 index 2da88f32..00000000 --- a/docs/content/model-compatibility/bark.md +++ /dev/null @@ -1,39 +0,0 @@ - -+++ -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 deleted file mode 100644 index c7a84dc4..00000000 --- a/docs/content/model-compatibility/diffusers.md +++ /dev/null @@ -1,208 +0,0 @@ - -+++ -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 -cuda: true -f16: true -diffusers: - 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 -cuda: true -diffusers: - pipeline_type: StableDiffusionPipeline - 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 | `AutoPipelineForText2Image` | - -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 -cuda: true -f16: true -diffusers: - pipeline_type: StableDiffusionImg2ImgPipeline - enable_parameters: "negative_prompt,num_inference_steps,image" -``` - -```bash -IMAGE_PATH=/path/to/your/image -(echo -n '{"file": "'; 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 -cuda: true -diffusers: - pipeline_type: StableDiffusionDepth2ImgPipeline - enable_parameters: "negative_prompt,num_inference_steps,image" - cfg_scale: 6 -``` - -```bash -(echo -n '{"file": "'; 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 -``` - -## img2vid - - -```yaml -name: img2vid -parameters: - model: stabilityai/stable-video-diffusion-img2vid -backend: diffusers -step: 25 -# Force CPU usage -f16: true -cuda: true -diffusers: - pipeline_type: StableVideoDiffusionPipeline -``` - -```bash -(echo -n '{"file": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/svd/rocket.png?download=true","size": "512x512","model":"img2vid"}') | -curl -H "Content-Type: application/json" -X POST -d @- http://localhost:8080/v1/images/generations -``` - -## txt2vid - -```yaml -name: txt2vid -parameters: - model: damo-vilab/text-to-video-ms-1.7b -backend: diffusers -step: 25 -# Force CPU usage -f16: true -cuda: true -diffusers: - pipeline_type: VideoDiffusionPipeline - cuda: true -``` - -```bash -(echo -n '{"prompt": "spiderman surfing","size": "512x512","model":"txt2vid"}') | -curl -H "Content-Type: application/json" -X POST -d @- http://localhost:8080/v1/images/generations -``` \ No newline at end of file diff --git a/docs/content/model-compatibility/exllama.md b/docs/content/model-compatibility/exllama.md deleted file mode 100644 index 3aa97f47..00000000 --- a/docs/content/model-compatibility/exllama.md +++ /dev/null @@ -1,42 +0,0 @@ - -+++ -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 deleted file mode 100644 index ccea3b95..00000000 --- a/docs/content/model-compatibility/llama-cpp.md +++ /dev/null @@ -1,81 +0,0 @@ - -+++ -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-ggml` backend instead. If you are relying in automatic detection of the model, you should be fine. For `gguf` models, use the `llama` backend. The go backend is deprecated as well but still available as `go-llama`. The go backend supports still features not available in the mainline: speculative sampling and embeddings. - -{{% /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-ggml` backend for `ggml` models: - -```yaml -name: llama -backend: llama-ggml -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 deleted file mode 100644 index f9d61cca..00000000 --- a/docs/content/model-compatibility/rwkv.md +++ /dev/null @@ -1,15 +0,0 @@ - -+++ -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 deleted file mode 100644 index 5184efe6..00000000 --- a/docs/content/model-compatibility/vall-e-x.md +++ /dev/null @@ -1,50 +0,0 @@ - -+++ -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 deleted file mode 100644 index 56c876ee..00000000 --- a/docs/content/model-compatibility/vllm.md +++ /dev/null @@ -1,39 +0,0 @@ - -+++ -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/data/landing.yaml b/docs/data/landing.yaml new file mode 100644 index 00000000..76246c0e --- /dev/null +++ b/docs/data/landing.yaml @@ -0,0 +1,50 @@ +# Note: Template blocks require a 'weight' parameter so they're correctly ordered on the landing page + +# Hero +hero: + enable: false + weight: 10 + template: hero + +# Feature Grid +featureGrid: + enable: false + weight: 20 + template: feature grid + +imageText: + enable: true + weight: 25 + template: image text + + title: LocalAI + subtitle: The Free, Open Source OpenAI Alternative + + list: + - text: Optimized, fast inference + icon: speed + + - text: Comprensive support for many models architectures + icon: area_chart + + - text: Easy to deploy with Docker + icon: accessibility + + image: + path: "images/logos" + filename: "logo.png" + alt: "LocalAI logo" # Optional but recommended + + imgOrder: + desktop: 2 + mobile: 1 + + ctaButton: + text: Learn more + url: "/docs/" + +# Image compare +imageCompare: + enable: false + weight: 30 + template: image compare diff --git a/docs/go.mod b/docs/go.mod index 35b89dd1..0595d052 100644 --- a/docs/go.mod +++ b/docs/go.mod @@ -1,3 +1,5 @@ module github.com/McShelby/hugo-theme-relearn.git go 1.19 + +require github.com/gohugoio/hugo-mod-bootstrap-scss/v5 v5.20300.20200 // indirect diff --git a/docs/go.sum b/docs/go.sum index e69de29b..50366232 100644 --- a/docs/go.sum +++ b/docs/go.sum @@ -0,0 +1,4 @@ +github.com/gohugoio/hugo-mod-bootstrap-scss/v5 v5.20300.20200 h1:SmpwwN3DNzJWbV+IT8gaFu07ENUFpCvKou5BHYUKuVs= +github.com/gohugoio/hugo-mod-bootstrap-scss/v5 v5.20300.20200/go.mod h1:kx8MBj9T7SFR8ZClWvKZPmmUxBaltkoXvnWlZZcSnYA= +github.com/gohugoio/hugo-mod-jslibs-dist/popperjs/v2 v2.21100.20000/go.mod h1:mFberT6ZtcchrsDtfvJM7aAH2bDKLdOnruUHl0hlapI= +github.com/twbs/bootstrap v5.3.2+incompatible/go.mod h1:fZTSrkpSf0/HkL0IIJzvVspTt1r9zuf7XlZau8kpcY0= diff --git a/docs/layouts/index.html b/docs/layouts/index.html new file mode 100644 index 00000000..e69de29b diff --git a/docs/layouts/partials/docs/gitinfo.html b/docs/layouts/partials/docs/gitinfo.html new file mode 100644 index 00000000..98b80e76 --- /dev/null +++ b/docs/layouts/partials/docs/gitinfo.html @@ -0,0 +1,47 @@ +{{ $repoURL := slice .Site.Params.docs.repoURL }} +{{ $repoHostname := (urls.Parse (.Site.Params.docs.repoURL)).Hostname }} +{{ $filePath := replace .File.Path "\\" "/" }} +{{ $iconPath := "" }} + +{{ if strings.Contains ($repoHostname | lower) "github" }} + {{ $repoURL = $repoURL | append "blob" (.Site.Params.docs.repoBranch | default "main") }} + {{ $iconPath = "images/social/github_icon.svg" }} +{{ else if strings.Contains ($repoHostname | lower) "gitlab" }} + {{ $repoURL = $repoURL | append "-/blob" (.Site.Params.docs.repoBranch | default "main") }} + {{ $iconPath = "images/social/gitlab_icon.svg" }} +{{ else if strings.Contains ($repoHostname | lower) "bitbucket" }} + {{ $repoURL = $repoURL | append "src" (.Site.Params.docs.repoBranch | default "master") }} + {{ $iconPath = "images/social/bitbucket_icon.svg" }} +{{ end }} + +{{ $repoURL = $repoURL | append "docs/content" .Site.LanguagePrefix $filePath }} +{{ $repoURL = delimit $repoURL "/" }} +{{ $editPageURL := replaceRE "(https?://)|(/)+" "$1$2" $repoURL }} + +
+ {{ if .Site.Params.docs.editPage | default false -}} + + {{ end }} + {{ if .Site.Params.docs.lastMod | default false -}} +
+

Last updated + {{ dateFormat "02 Jan 2006, 15:04 MST" .GitInfo.AuthorDate }} + . history +

+
+ {{ end }} +
diff --git a/docs/layouts/partials/docs/sidebar.html b/docs/layouts/partials/docs/sidebar.html new file mode 100644 index 00000000..e28ac933 --- /dev/null +++ b/docs/layouts/partials/docs/sidebar.html @@ -0,0 +1,131 @@ + + + \ No newline at end of file diff --git a/docs/layouts/partials/head.html b/docs/layouts/partials/head.html new file mode 100644 index 00000000..1787c771 --- /dev/null +++ b/docs/layouts/partials/head.html @@ -0,0 +1,62 @@ + + + {{- .Site.Title }} + {{- if not hugo.IsProduction }} + + {{- end }} + + + + + + + + + {{ block "head/favicon" . }}{{ partialCached "head/favicon.html" . }}{{ end }} + + {{- partial "google-fonts" . }} + + {{- $options := dict "enableSourceMap" true }} + {{- if hugo.IsProduction}} + {{- $options := dict "enableSourceMap" false "outputStyle" "compressed" }} + {{- end }} + {{- $style := resources.Get "/scss/style.scss" }} + {{- $style = $style | resources.ExecuteAsTemplate "/scss/style.scss" . | resources.ToCSS $options }} + {{- if hugo.IsProduction }} + {{- $style = $style | minify | fingerprint "sha384" }} + {{- end -}} + + + {{ $js := resources.Get "js/bootstrap.js" }} + {{ $params := dict }} + {{ $sourceMap := cond hugo.IsProduction "" "inline" }} + {{ $opts := dict "sourceMap" $sourceMap "minify" hugo.IsProduction "target" "es2018" "params" $params }} + {{ $js = $js | js.Build $opts }} + {{ if hugo.IsProduction }} + {{ $js = $js | fingerprint "sha384" }} + {{ end }} + + + {{ if ($.Scratch.Get "image_compare_enabled") }} + {{ $imagecompare := resources.Get "js/image-compare-viewer.min.js" }} + {{- if not .Site.IsServer }} + {{- $js := (slice $imagecompare) | resources.Concat "/js/image-compare.js" | minify | fingerprint "sha384" }} + + {{- else }} + {{- $js := (slice $imagecompare) | resources.Concat "/js/image-compare.js" }} + + {{- end }} + {{- end }} + + {{- if not .Site.IsServer }} + {{ if and (.Site.Params.plausible.scriptURL) (.Site.Params.plausible.dataDomain) -}} + {{- partialCached "head/plausible" . }} + {{- end -}} + {{- end -}} + + {{- if not .Site.IsServer }} + {{- if .Site.GoogleAnalytics }} + {{- template "_internal/google_analytics.html" . -}} + {{- end -}} + {{- end -}} + \ No newline at end of file diff --git a/docs/netlify.toml b/docs/netlify.toml index e04cfd8a..8b97b7c7 100644 --- a/docs/netlify.toml +++ b/docs/netlify.toml @@ -1,4 +1,4 @@ [build] [build.environment] -HUGO_VERSION = "0.104.3" +HUGO_VERSION = "0.121.2" GO_VERSION = "1.19.2" diff --git a/docs/static/android-chrome-192x192.png b/docs/static/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..f83d7f009549c9b0e0887763070838d72aa2418f GIT binary patch literal 58772 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

QmdT@kF1svaF<*e#R!q9Ln{)_q@%IPuL2dIV5sQ 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 literal 0 HcmV?d00001 diff --git a/docs/static/android-chrome-512x512.png b/docs/static/android-chrome-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..c5a3be50050e02cb920de947290dbc43c26d8e4f GIT binary patch literal 367658 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 z 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 z

  • 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 LAb%}m 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⩔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 literal 0 HcmV?d00001 diff --git a/docs/static/favicon-32x32.png b/docs/static/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..9580f2039a62641c7e1afb3eb8ef0c24b12d9044 GIT binary patch literal 2331 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 eq .RoleName "assistant"}}assistant{{else if eq .RoleName "system"}}system{{else if eq .RoleName "user"}}user{{end}} + {{if .Content}}{{.Content}}{{end}}<|im_end|> + chat: | + {{.Input}} + <|im_start|>assistant + completion: | + {{.Input}} +context_size: 4096 +f16: true +stopwords: +- <|im_end|> +gpu_layers: 90 + +usage: | + curl http://localhost:8080/v1/chat/completions -H "Content-Type: application/json" -d '{ + "model": "dolphin-mixtral-8x7b", + "messages": [{"role": "user", "content": "How are you doing?", "temperature": 0.1}] + }' \ No newline at end of file diff --git a/embedded/models/mixtral-instruct.yaml b/embedded/models/mixtral-instruct.yaml new file mode 100644 index 00000000..c9c55869 --- /dev/null +++ b/embedded/models/mixtral-instruct.yaml @@ -0,0 +1,20 @@ +name: mixtral-instruct +mmap: true +parameters: + model: huggingface://TheBloke/Mixtral-8x7B-Instruct-v0.1-GGUF/mixtral-8x7b-instruct-v0.1.Q2_K.gguf + temperature: 0.2 + top_k: 40 + top_p: 0.95 +template: + chat: &chat | + [INST] {{.Input}} [/INST] + completion: *chat +context_size: 4096 +f16: true +gpu_layers: 90 + +usage: | + curl http://localhost:8080/v1/completions -H "Content-Type: application/json" -d '{ + "model": "mixtral-instruct", + "prompt": "How are you doing?" + }' \ No newline at end of file diff --git a/embedded/models/tinyllama-chat.yaml b/embedded/models/tinyllama-chat.yaml new file mode 100644 index 00000000..7c9a7579 --- /dev/null +++ b/embedded/models/tinyllama-chat.yaml @@ -0,0 +1,28 @@ +name: tinyllama-chat +mmap: true +parameters: + model: huggingface://TheBloke/TinyLlama-1.1B-Chat-v0.3-GGUF/tinyllama-1.1b-chat-v0.3.Q8_0.gguf + temperature: 0.2 + top_k: 40 + top_p: 0.95 +template: + chat_message: | + <|im_start|>{{if eq .RoleName "assistant"}}assistant{{else if eq .RoleName "system"}}system{{else if eq .RoleName "user"}}user{{end}} + {{if .Content}}{{.Content}}{{end}}<|im_end|> + chat: | + {{.Input}} + <|im_start|>assistant + + completion: | + {{.Input}} +context_size: 4096 +f16: true +stopwords: +- <|im_end|> +gpu_layers: 90 + +usage: | + curl http://localhost:8080/v1/chat/completions -H "Content-Type: application/json" -d '{ + "model": "tinyllama-chat", + "messages": [{"role": "user", "content": "How are you doing?", "temperature": 0.1}] + }' \ No newline at end of file diff --git a/main.go b/main.go index be4e4ed8..39e38686 100644 --- a/main.go +++ b/main.go @@ -99,7 +99,7 @@ func main() { Usage: "A List of models to apply in JSON at start", EnvVars: []string{"PRELOAD_MODELS"}, }, - &cli.StringFlag{ + &cli.StringSliceFlag{ Name: "models", Usage: "A List of models URLs configurations.", EnvVars: []string{"MODELS"},