--- title: "Interact with Databricks foundation models" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Interact with Databricks foundation models} %\VignetteEncoding{UTF-8} %\VignetteEngine{knitr::rmarkdown} editor_options: markdown: wrap: 72 --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` ## Intro [Databricks](https://docs.databricks.com/en/introduction/index.html) customers have access to [foundation model APIs](https://docs.databricks.com/en/machine-learning/foundation-models/index.html) like DBRX, Meta Llama 3 70B, and Mixtral 8x7B. Databricks also provides the ability to train and [deploy custom models](https://docs.databricks.com/en/machine-learning/foundation-models/deploy-prov-throughput-foundation-model-apis.html). `chattr` supports the following models on Databricks by default: | Model | Databricks Model Name | `chattr` Name | |---------------------|------------------------------|---------------------| | DBRX Instruct | `databricks-dbrx-instruct` | `databricks-dbrx` | | Meta-Llama-3-70B-Instruct | `databricks-meta-llama-3-70b-instruct` | `databricks-meta-llama3-70b` | | Mixtral-8x7B Instruct | `databricks-mixtral-8x7b-instruct` | `databricks-mixtral8x7b` | : [Supported Databricks pay-per-token foundation models](https://docs.databricks.com/en/machine-learning/foundation-models/index.html#pay-per-token-foundation-model-apis) ## Authentication Databricks requires a [**host**](https://docs.databricks.com/en/workspace/workspace-details.html#workspace-instance-names-urls-and-ids) (workspace URL) and [**token**](https://docs.databricks.com/en/dev-tools/auth/pat.html#databricks-personal-access-tokens-for-workspace-users) to authenticate. Both are required for any non-Databricks application, such as `chattr`, to interact with the models in the Databricks workspace. The token can be generated by the user in the workspace under the developer settings ([docs](https://docs.databricks.com/en/dev-tools/auth/pat.html#databricks-personal-access-tokens-for-workspace-users)) and the host can be found in the workspaces URL ([docs](https://docs.databricks.com/en/workspace/workspace-details.html#workspace-instance-names-urls-and-ids)). By default, `chattr` will look for the credentials in environment variables: - `DATABRICKS_HOST` - `DATABRICKS_TOKEN` Use `Sys.setenv()` to set the variable. The downside of using this method is that the variable will only be available during the current R session: ``` r Sys.setenv("DATABRICKS_HOST" = "https://xxxxx.cloud.databricks.com") Sys.setenv("DATABRICKS_TOKEN" = "####################") ``` A preferred method is to save the secret key to the `.Renviron` file. This way, there is no need to load the environment variable every time you start a new R session. The `.Renviron` file is available in your home directory. Here is an example of the entry: ``` DATABRICKS_HOST = https://xxxxx.cloud.databricks.com DATABRICKS_TOKEN = #################### ``` ## Change the model ### Supported Models By default, `chattr` is setup to interact with GPT 4 (`gpt-4`). To switch to Meta Llama 3 70B you can run: ```{r} library(chattr) chattr_use("databricks-meta-llama3-70b") ``` #### Custom Models If a model doesn't appear in the supported table but is deployed on [Databricks model serving](https://docs.databricks.com/en/machine-learning/model-serving/index.html) as OpenAI-compatible ([configured with `llm/v1/chat` in mlflow](https://mlflow.org/docs/latest/llms/deployments/index.html#general-configuration-parameters)) then you can specify the model name explicitly with `chattr_use()` For example if you have deployed a fine-tuned version LLM with an endpoint name of `"CustomLLM"`: ```{r} library(chattr) # use any existing databricks foundation model name (e.g. datarbicks-dbrx) # then adjust the default model name to 'CustomMixtral' chattr_use(x = "databricks-dbrx", model = "CustomLLM") ``` ## Data files and data frames Because it is information about your environment and work space, by default `chattr` avoids sending any data files, and data frame information to Databricks. Sending this information is convenient because it creates a shorthand for your requests. If you wish to submit this information as part of your prompts, use `chattr_defaults()`, for example: - `chattr_defaults(max_data_files = 10)` - `chattr_defaults(max_data_frames = 10)` These two commands will send 10 data frames, and 10 data files as part of your prompt. You can decide the number to limit this by. The more you send, the larger your prompt. If any of these is set to anything but 0, a warning will show up every time you start the Shiny app: ``` • Provider: Databricks • Path/URL: serving-endpoints • Model: databricks-dbrx-instruct • Label: DBRX (Databricks) ! A list of the top 10 files will be sent externally to Databricks with every request To avoid this, set the number of files to be sent to 0 using chattr::chattr_defaults(max_data_files = 0)Î ```