diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c5f65aed0..a9a19a9ae 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -52,7 +52,7 @@ jobs: run: | curl https://sh.rustup.rs -sSf | sh -s -- -y source ~/.cargo/env - cargo install cargo-pgrx --version "0.10.0" --locked + cargo install cargo-pgrx --version "0.11.0" --locked if [[ ! -d ~/.pgrx ]]; then cargo pgrx init diff --git a/.github/workflows/ubuntu-packages-and-docker-image.yml b/.github/workflows/ubuntu-packages-and-docker-image.yml index 681c084ee..339f356cf 100644 --- a/.github/workflows/ubuntu-packages-and-docker-image.yml +++ b/.github/workflows/ubuntu-packages-and-docker-image.yml @@ -4,7 +4,7 @@ on: workflow_dispatch: inputs: packageVersion: - default: "2.7.10" + default: "2.7.12" jobs: # # PostgresML extension. @@ -72,16 +72,16 @@ jobs: libpq-dev \ libclang-dev \ wget \ + postgresql-16 \ postgresql-15 \ postgresql-14 \ postgresql-13 \ postgresql-12 \ - postgresql-11 \ + postgresql-server-dev-16 \ postgresql-server-dev-15 \ postgresql-server-dev-14 \ postgresql-server-dev-13 \ postgresql-server-dev-12 \ - postgresql-server-dev-11 \ lsb-release \ python3.10 \ python3-pip \ @@ -98,7 +98,7 @@ jobs: with: working-directory: pgml-extension command: install - args: cargo-pgrx --version "0.10.0" --locked + args: cargo-pgrx --version "0.11.0" --locked - name: pgrx init uses: postgresml/gh-actions-cargo@master with: @@ -135,6 +135,12 @@ jobs: working-directory: pgml-extension command: pgrx args: package --pg-config /usr/lib/postgresql/15/bin/pg_config + - name: Build Postgres 16 + uses: postgresml/gh-actions-cargo@master + with: + working-directory: pgml-extension + command: pgrx + args: package --pg-config /usr/lib/postgresql/16/bin/pg_config - name: Build debs env: AWS_ACCESS_KEY_ID: ${{ vars.AWS_ACCESS_KEY_ID }} diff --git a/.github/workflows/ubuntu-postgresml-python-package.yaml b/.github/workflows/ubuntu-postgresml-python-package.yaml index 895ad8aef..ede7a100a 100644 --- a/.github/workflows/ubuntu-postgresml-python-package.yaml +++ b/.github/workflows/ubuntu-postgresml-python-package.yaml @@ -4,7 +4,7 @@ on: workflow_dispatch: inputs: packageVersion: - default: "2.7.10" + default: "2.7.12" jobs: postgresml-python: diff --git a/README.md b/README.md index 3a34cb672..5c2bf25b9 100644 --- a/README.md +++ b/README.md @@ -150,7 +150,7 @@ docker run \ -v postgresml_data:/var/lib/postgresql \ -p 5433:5432 \ -p 8000:8000 \ - ghcr.io/postgresml/postgresml:2.7.4 \ + ghcr.io/postgresml/postgresml:2.7.12 \ sudo -u postgresml psql -d postgresml ``` diff --git a/packages/cargo-pgml-components/Cargo.lock b/packages/cargo-pgml-components/Cargo.lock index d9e3aec63..92f4118dc 100644 --- a/packages/cargo-pgml-components/Cargo.lock +++ b/packages/cargo-pgml-components/Cargo.lock @@ -126,7 +126,7 @@ dependencies = [ [[package]] name = "cargo-pgml-components" -version = "0.1.18-alpha.2" +version = "0.1.20" dependencies = [ "anyhow", "assert_cmd", @@ -134,6 +134,7 @@ dependencies = [ "clap", "convert_case", "env_logger", + "file-lock", "glob", "log", "md5", @@ -142,6 +143,7 @@ dependencies = [ "regex", "sailfish", "serde", + "serde_json", "toml", ] @@ -280,6 +282,16 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764" +[[package]] +name = "file-lock" +version = "2.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec788ff423b138c9c5faf201347926573b605c517fb1c5a56aa632b218bf47bb" +dependencies = [ + "cc", + "libc", +] + [[package]] name = "filetime" version = "0.2.22" @@ -417,6 +429,12 @@ dependencies = [ "either", ] +[[package]] +name = "itoa" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" + [[package]] name = "itoap" version = "1.0.1" @@ -437,9 +455,9 @@ checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" [[package]] name = "linux-raw-sys" -version = "0.4.5" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503" +checksum = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f" [[package]] name = "log" @@ -575,9 +593,9 @@ checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" [[package]] name = "rustix" -version = "0.38.10" +version = "0.38.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed6248e1caa625eb708e266e06159f135e8c26f2bb7ceb72dc4b2766d0340964" +checksum = "d7db8590df6dfcd144d22afd1b83b36c21a18d7cbc1dc4bb5295a8712e9eb662" dependencies = [ "bitflags 2.4.0", "errno", @@ -659,6 +677,17 @@ dependencies = [ "syn", ] +[[package]] +name = "serde_json" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65" +dependencies = [ + "itoa", + "ryu", + "serde", +] + [[package]] name = "serde_spanned" version = "0.6.3" diff --git a/packages/cargo-pgml-components/Cargo.toml b/packages/cargo-pgml-components/Cargo.toml index 6b006482f..55fff6533 100644 --- a/packages/cargo-pgml-components/Cargo.toml +++ b/packages/cargo-pgml-components/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cargo-pgml-components" -version = "0.1.18-alpha.2" +version = "0.1.20" edition = "2021" authors = ["PostgresML "] license = "MIT" @@ -21,6 +21,8 @@ sailfish = "0.8" regex = "1" toml = "0.7" serde = { version = "1", features = ["derive"] } +file-lock = "2" +serde_json = "1" [dev-dependencies] assert_cmd = "2" diff --git a/packages/cargo-pgml-components/src/frontend/javascript.rs b/packages/cargo-pgml-components/src/frontend/javascript.rs index 8784d2a98..5b00a9e11 100644 --- a/packages/cargo-pgml-components/src/frontend/javascript.rs +++ b/packages/cargo-pgml-components/src/frontend/javascript.rs @@ -1,13 +1,14 @@ //! Javascript bundling. use glob::glob; -use std::collections::HashSet; +use std::collections::{HashMap, HashSet}; use std::fs::{copy, read_to_string, remove_file, File}; use std::io::Write; -use std::path::PathBuf; +use std::path::{Path, PathBuf}; use std::process::{exit, Command}; use convert_case::{Case, Casing}; +use serde::{Deserialize, Serialize}; use crate::config::Config; use crate::frontend::tools::execute_with_nvm; @@ -32,6 +33,11 @@ static OLD_BUNLDES_GLOB: &'static str = "static/js/*.*.js"; /// JS compiler static JS_COMPILER: &'static str = "rollup"; +#[derive(Serialize, Deserialize, Debug)] +struct Packages { + dependencies: HashMap, +} + /// Delete old bundles we may have created. fn cleanup_old_bundles() { // Clean up old bundles @@ -146,6 +152,16 @@ pub fn bundle(config: Config, minify: bool) { cleanup_old_bundles(); assemble_modules(config.clone()); + let package_json = Path::new("package.json"); + + let packages: Packages = if package_json.is_file() { + let packages = unwrap_or_exit!(read_to_string(package_json)); + unwrap_or_exit!(serde_json::from_str(&packages)) + } else { + warn("package.json not found, can't validate rollup output"); + serde_json::from_str(r#"{"dependencies": {}}"#).unwrap() + }; + let mut command = Command::new(JS_COMPILER); command @@ -163,7 +179,17 @@ pub fn bundle(config: Config, minify: bool) { // Bundle JavaScript. info("bundling javascript with rollup"); - unwrap_or_exit!(execute_with_nvm(&mut command)); + let output = unwrap_or_exit!(execute_with_nvm(&mut command)); + + let lines = output.split("\n"); + for line in lines { + for (package, _version) in &packages.dependencies { + if line.contains(package) { + error(&format!("unresolved import: {}", package)); + exit(1); + } + } + } info(&format!("written {}", JS_FILE)); diff --git a/packages/cargo-pgml-components/src/frontend/sass.rs b/packages/cargo-pgml-components/src/frontend/sass.rs index d07517113..259feb584 100644 --- a/packages/cargo-pgml-components/src/frontend/sass.rs +++ b/packages/cargo-pgml-components/src/frontend/sass.rs @@ -72,8 +72,6 @@ fn cleanup_old_bundles() { /// Entrypoint. pub fn bundle() { - crate::frontend::tools::install(); - assemble_modules(); cleanup_old_bundles(); diff --git a/packages/cargo-pgml-components/src/frontend/tools.rs b/packages/cargo-pgml-components/src/frontend/tools.rs index 9b91a172f..0017fdb1a 100644 --- a/packages/cargo-pgml-components/src/frontend/tools.rs +++ b/packages/cargo-pgml-components/src/frontend/tools.rs @@ -116,3 +116,13 @@ fn install_node() { warn("installed node") } } + +pub fn debug() { + let node = unwrap_or_exit!(execute_with_nvm(Command::new("which").arg("node"))); + println!("node: {}", node.trim()); + + for tool in TOOLS { + let output = unwrap_or_exit!(execute_with_nvm(Command::new("which").arg(tool))); + println!("{}: {}", tool, output.trim()); + } +} diff --git a/packages/cargo-pgml-components/src/main.rs b/packages/cargo-pgml-components/src/main.rs index e879d2bd1..0e978fc45 100644 --- a/packages/cargo-pgml-components/src/main.rs +++ b/packages/cargo-pgml-components/src/main.rs @@ -1,8 +1,10 @@ //! A tool to assemble and bundle our frontend components. use clap::{Args, Parser, Subcommand}; +use file_lock::{FileLock, FileOptions}; use std::env::{current_dir, set_current_dir}; -use std::fs::create_dir_all; +use std::fs::{create_dir_all, File}; +use std::io::Write; use std::path::Path; #[macro_use] @@ -58,6 +60,12 @@ enum Commands { Bundle { #[arg(short, long, default_value = "false")] minify: bool, + + #[arg(short, long, default_value = "false")] + debug: bool, + + #[arg(short, long, default_value = "false")] + lock: bool, }, /// Add new elements to the project. @@ -91,7 +99,11 @@ fn main() { CargoSubcommands::PgmlComponents(pgml_commands) => { validate_project(pgml_commands.project_path); match pgml_commands.command { - Commands::Bundle { minify } => bundle(config, minify), + Commands::Bundle { + minify, + debug, + lock, + } => bundle(config, minify, debug, lock), Commands::Add(command) => match command { AddCommands::Component { name } => { crate::frontend::components::add(&Path::new(&name), pgml_commands.overwrite) @@ -131,10 +143,45 @@ fn validate_project(project_path: Option) { } /// Bundle SASS and JavaScript into neat bundle files. -fn bundle(config: Config, minify: bool) { +fn bundle(config: Config, minify: bool, debug: bool, lock: bool) { + let lock = if lock { Some(acquire_lock()) } else { None }; + + if debug { + frontend::tools::debug(); + } + + frontend::tools::install(); + + if debug { + frontend::tools::debug(); + } + frontend::sass::bundle(); frontend::javascript::bundle(config, minify); frontend::components::update_modules(); info("bundle complete"); + + if let Some(lock) = lock { + unwrap_or_exit!(lock.unlock()); + } +} + +fn acquire_lock() -> FileLock { + print!("acquiring lock..."); + unwrap_or_exit!(std::io::stdout().flush()); + + let file = "/tmp/pgml-components-lock"; + + // Create file if not exists + if !Path::new(file).exists() { + unwrap_or_exit!(File::create(file)); + } + + let options = FileOptions::new().write(true).create(true).append(true); + + let lock = unwrap_or_exit!(FileLock::lock(file, true, options)); + + info("ok"); + lock } diff --git a/packages/cargo-pgml-components/src/util.rs b/packages/cargo-pgml-components/src/util.rs index b2f8c4e82..fcf31ad49 100644 --- a/packages/cargo-pgml-components/src/util.rs +++ b/packages/cargo-pgml-components/src/util.rs @@ -69,7 +69,7 @@ pub fn execute_command(command: &mut Command) -> std::io::Result { info!("{}", stdout); } - Ok(stdout) + Ok(stdout.clone() + &stderr) } pub fn write_to_file(path: &Path, content: &str) -> std::io::Result<()> { diff --git a/packages/postgresml-dashboard/build.sh b/packages/postgresml-dashboard/build.sh index 97d944227..c5b524031 100644 --- a/packages/postgresml-dashboard/build.sh +++ b/packages/postgresml-dashboard/build.sh @@ -5,7 +5,7 @@ dir="/tmp/postgresml-dashboard" deb_dir="$dir/deb-build" source_dir="$dir/source" SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) -export PACKAGE_VERSION=${1:-"2.7.4"} +export PACKAGE_VERSION=${1:-"2.7.12"} export GITHUB_STARS=$(curl -s "https://api.github.com/repos/postgresml/postgresml" | grep stargazers_count | cut -d : -f 2 | tr -d " " | tr -d ",") if [[ $(arch) == "x86_64" ]]; then export ARCH=amd64 diff --git a/packages/postgresml-dashboard/release.sh b/packages/postgresml-dashboard/release.sh index d530dcae0..7252068dd 100644 --- a/packages/postgresml-dashboard/release.sh +++ b/packages/postgresml-dashboard/release.sh @@ -5,7 +5,7 @@ SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) package_version="$1" if [[ -z "$package_version" ]]; then - echo "Usage: $0 " + echo "Usage: $0 " exit 1 fi diff --git a/packages/postgresml-python/build.sh b/packages/postgresml-python/build.sh index cf60c3717..5b60ceaac 100644 --- a/packages/postgresml-python/build.sh +++ b/packages/postgresml-python/build.sh @@ -7,7 +7,7 @@ SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) deb_dir="/tmp/postgresml-python/deb-build" major=${1:-"14"} -export PACKAGE_VERSION=${1:-"2.7.10"} +export PACKAGE_VERSION=${1:-"2.7.12"} export PYTHON_VERSION=${2:-"3.10"} if [[ $(arch) == "x86_64" ]]; then @@ -29,12 +29,19 @@ rm "$deb_dir/release.sh" (cat ${SCRIPT_DIR}/DEBIAN/postrm | envsubst '${PGVERSION}') > "$deb_dir/DEBIAN/postrm" cp ${SCRIPT_DIR}/../../pgml-extension/requirements.txt "$deb_dir/etc/postgresml-python/requirements.txt" +cp ${SCRIPT_DIR}/../../pgml-extension/requirements-autogptq.txt "$deb_dir/etc/postgresml-python/requirements-autogptq.txt" cp ${SCRIPT_DIR}/../../pgml-extension/requirements-xformers.txt "$deb_dir/etc/postgresml-python/requirements-xformers.txt" virtualenv --python="python$PYTHON_VERSION" "$deb_dir/var/lib/postgresml-python/pgml-venv" source "$deb_dir/var/lib/postgresml-python/pgml-venv/bin/activate" python -m pip install -r "${deb_dir}/etc/postgresml-python/requirements.txt" + +# No source included, can't build on non x86 platforms +set +e +python -m pip install -r "${deb_dir}/etc/postgresml-python/requirements-autogptq.txt" +set -e + python -m pip install -r "${deb_dir}/etc/postgresml-python/requirements-xformers.txt" --no-dependencies deactivate diff --git a/packages/postgresml-python/release.sh b/packages/postgresml-python/release.sh index 8409d158a..a7c2ad95d 100644 --- a/packages/postgresml-python/release.sh +++ b/packages/postgresml-python/release.sh @@ -12,7 +12,7 @@ fi if [[ -z "$package_version" ]]; then echo "postgresml-python package build and release script" - echo "usage: $0 " + echo "usage: $0 " exit 1 fi diff --git a/packages/postgresml/DEBIAN/control b/packages/postgresml/DEBIAN/control index 86bbdf2ef..7e7daff92 100644 --- a/packages/postgresml/DEBIAN/control +++ b/packages/postgresml/DEBIAN/control @@ -3,7 +3,7 @@ Version: ${PACKAGE_VERSION} Section: database Priority: optional Architecture: all -Depends: postgresml-python (>= 2.7.10), postgresql-pgml-${PGVERSION} (>= ${PACKAGE_VERSION}) +Depends: postgresml-python (>= 2.7.12), postgresql-pgml-${PGVERSION} (>= ${PACKAGE_VERSION}) Maintainer: PostgresML Homepage: https://postgresml.org Description: PostgresML - Generative AI and Simple ML inside PostgreSQL diff --git a/packages/postgresml/build.sh b/packages/postgresml/build.sh index c52538f1b..5bef341ee 100644 --- a/packages/postgresml/build.sh +++ b/packages/postgresml/build.sh @@ -3,7 +3,7 @@ set -e SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) -export PACKAGE_VERSION=${1:-"2.7.10"} +export PACKAGE_VERSION=${1:-"2.7.12"} export PGVERSION=${2:-"14"} deb_dir="/tmp/postgresml/deb-build" diff --git a/packages/postgresml/release.sh b/packages/postgresml/release.sh index 2b0b2a31f..9e1775cec 100644 --- a/packages/postgresml/release.sh +++ b/packages/postgresml/release.sh @@ -6,7 +6,7 @@ package_version="$1" if [[ -z "$package_version" ]]; then echo "postgresml package build and release script" - echo "usage: $0 " + echo "usage: $0 " exit 1 fi diff --git a/packages/postgresql-pgml/release.sh b/packages/postgresql-pgml/release.sh index 8e3118d24..7f945a79c 100644 --- a/packages/postgresql-pgml/release.sh +++ b/packages/postgresql-pgml/release.sh @@ -4,7 +4,7 @@ set -e SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) if [[ -z "${1}" ]]; then - echo "Usage: $0 " + echo "Usage: $0 " exit 1 fi diff --git a/pgml-dashboard/Cargo.lock b/pgml-dashboard/Cargo.lock index 8830f565a..0c605a37d 100644 --- a/pgml-dashboard/Cargo.lock +++ b/pgml-dashboard/Cargo.lock @@ -86,9 +86,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.0.2" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" dependencies = [ "memchr", ] @@ -165,9 +165,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.72" +version = "1.0.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b13c32d80ecc7ab747b80c3784bce54ee8a7a0cc4fbda9bf4cda2cf6fe90854" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" dependencies = [ "backtrace", ] @@ -300,9 +300,9 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" -version = "0.21.2" +version = "0.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" +checksum = "9ba43ea6f343b788c8764558649e08df62f86c6ef251fdaeb1ffd010a9ae50a2" [[package]] name = "bigdecimal" @@ -382,7 +382,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6798148dccfbff0fae41c7574d2fa8f1ef3492fba0face179de5d8d447d67b05" dependencies = [ "memchr", - "regex-automata 0.3.3", + "regex-automata 0.3.7", "serde", ] @@ -424,17 +424,16 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.26" +version = "0.4.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5" +checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" dependencies = [ "android-tzdata", "iana-time-zone", "js-sys", "num-traits", - "time 0.1.45", "wasm-bindgen", - "winapi", + "windows-targets 0.48.1", ] [[package]] @@ -538,10 +537,11 @@ dependencies = [ [[package]] name = "console-api" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2895653b4d9f1538a83970077cb01dfc77a4810524e51a110944688e916b18e" +checksum = "fd326812b3fd01da5bb1af7d340d0d555fd3d4b641e7f1dfcf5962a902952787" dependencies = [ + "futures-core", "prost", "prost-types", "tonic", @@ -550,14 +550,14 @@ dependencies = [ [[package]] name = "console-subscriber" -version = "0.1.10" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4cf42660ac07fcebed809cfe561dd8730bcd35b075215e6479c516bcd0d11cb" +checksum = "7481d4c57092cd1c19dd541b92bdce883de840df30aa5d03fd48a3935c01842e" dependencies = [ "console-api", "crossbeam-channel", "crossbeam-utils", - "futures", + "futures-task", "hdrhistogram", "humantime", "prost-types", @@ -583,18 +583,18 @@ dependencies = [ [[package]] name = "cookie" -version = "0.17.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7efb37c3e1ccb1ff97164ad95ac1606e8ccd35b3fa0a7d99a304c7f4a428cc24" +checksum = "3cd91cf61412820176e137621345ee43b3f4423e589e7ae4e50d601d93e35ef8" dependencies = [ "aes-gcm", - "base64 0.21.2", + "base64 0.21.4", "hkdf", "percent-encoding", "rand", "sha2", "subtle", - "time 0.3.23", + "time", "version_check", ] @@ -818,6 +818,16 @@ dependencies = [ "uuid", ] +[[package]] +name = "deranged" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3" +dependencies = [ + "powerfmt", + "serde", +] + [[package]] name = "derive_more" version = "0.99.17" @@ -1314,7 +1324,7 @@ checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" dependencies = [ "cfg-if", "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi", ] [[package]] @@ -1614,7 +1624,6 @@ checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", "hashbrown 0.12.3", - "serde", ] [[package]] @@ -1625,6 +1634,7 @@ checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" dependencies = [ "equivalent", "hashbrown 0.14.0", + "serde", ] [[package]] @@ -1803,9 +1813,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.19" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" [[package]] name = "loom" @@ -1838,7 +1848,7 @@ dependencies = [ "md5", "nom", "rayon", - "time 0.3.23", + "time", "weezl", ] @@ -1865,9 +1875,9 @@ checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" [[package]] name = "markdown" -version = "1.0.0-alpha.13" +version = "1.0.0-alpha.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92e9ce98969bb1391c8d6fdac320897ea7e86c4d356e8f220a5abd28b142e512" +checksum = "d2a51befc5a2b4a052c473ffbc9ad462e358de59dcc2fde4997fd2a16403dcbd" dependencies = [ "unicode-id", ] @@ -1984,7 +1994,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" dependencies = [ "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi", "windows-sys 0.48.0", ] @@ -2125,9 +2135,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.15" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" dependencies = [ "autocfg", ] @@ -2399,11 +2409,11 @@ dependencies = [ [[package]] name = "pgml-dashboard" -version = "2.7.6" +version = "2.7.12" dependencies = [ "aho-corasick 0.7.20", "anyhow", - "base64 0.21.2", + "base64 0.21.4", "chrono", "comrak", "console-subscriber", @@ -2435,7 +2445,7 @@ dependencies = [ "serde_json", "sqlx", "tantivy", - "time 0.3.23", + "time", "tokio", "url", "yaml-rust", @@ -2578,12 +2588,12 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bdc0001cfea3db57a2e24bc0d818e9e20e554b5f97fabb9bc231dc240269ae06" dependencies = [ - "base64 0.21.2", + "base64 0.21.4", "indexmap 1.9.3", "line-wrap", "quick-xml", "serde", - "time 0.3.23", + "time", ] [[package]] @@ -2624,7 +2634,7 @@ version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78b7fa9f396f51dffd61546fd8573ee20592287996568e6175ceb0f8699ad75d" dependencies = [ - "base64 0.21.2", + "base64 0.21.4", "byteorder", "bytes", "fallible-iterator", @@ -2647,6 +2657,12 @@ dependencies = [ "postgres-protocol", ] +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -2683,9 +2699,9 @@ dependencies = [ [[package]] name = "prost" -version = "0.11.9" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" +checksum = "f4fdd22f3b9c31b53c060df4a0613a1c7f062d4115a2b984dd15b1858f7e340d" dependencies = [ "bytes", "prost-derive", @@ -2693,22 +2709,22 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.11.9" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" +checksum = "265baba7fabd416cf5078179f7d2cbeca4ce7a9041111900675ea7c4cb8a4c32" dependencies = [ "anyhow", "itertools", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.32", ] [[package]] name = "prost-types" -version = "0.11.9" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13" +checksum = "e081b29f63d83a4bc75cfc9f3fe424f9156cf92d8a4f0c9407cce9a1b67327cf" dependencies = [ "prost", ] @@ -2834,14 +2850,14 @@ dependencies = [ [[package]] name = "regex" -version = "1.9.1" +version = "1.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2eae68fc220f7cf2532e4494aded17545fce192d59cd996e0fe7887f4ceb575" +checksum = "12de2eff854e5fa4b1295edd650e227e9d8fb0c9e90b12e7f36d6a6811791a29" dependencies = [ - "aho-corasick 1.0.2", + "aho-corasick 1.1.2", "memchr", - "regex-automata 0.3.3", - "regex-syntax 0.7.4", + "regex-automata 0.3.7", + "regex-syntax 0.7.5", ] [[package]] @@ -2855,13 +2871,13 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.3.3" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39354c10dd07468c2e73926b23bb9c2caca74c5501e38a35da70406f1d923310" +checksum = "49530408a136e16e5b486e883fbb6ba058e8e4e8ae6621a77b048b314336e629" dependencies = [ - "aho-corasick 1.0.2", + "aho-corasick 1.1.2", "memchr", - "regex-syntax 0.7.4", + "regex-syntax 0.7.5", ] [[package]] @@ -2872,17 +2888,17 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2" +checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" [[package]] name = "reqwest" -version = "0.11.20" +version = "0.11.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e9ad3fe7488d7e34558a2033d45a0c90b72d97b4f80705666fea71472e2e6a1" +checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b" dependencies = [ - "base64 0.21.2", + "base64 0.21.4", "bytes", "encoding_rs", "futures-core", @@ -2903,6 +2919,7 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", + "system-configuration", "tokio", "tokio-native-tls", "tower-service", @@ -2931,7 +2948,7 @@ dependencies = [ [[package]] name = "rocket" version = "0.5.0-rc.3" -source = "git+https://github.com/SergioBenitez/Rocket#ddeac5ddcf252d081d69f1b1cec8467ab9ec4d26" +source = "git+https://github.com/SergioBenitez/Rocket#07fe79796f058ab12683ff9e344558bece263274" dependencies = [ "async-stream", "async-trait", @@ -2941,7 +2958,7 @@ dependencies = [ "either", "figment", "futures", - "indexmap 1.9.3", + "indexmap 2.0.0", "log", "memchr", "multer", @@ -2956,7 +2973,7 @@ dependencies = [ "serde_json", "state", "tempfile", - "time 0.3.23", + "time", "tokio", "tokio-stream", "tokio-util", @@ -2968,29 +2985,30 @@ dependencies = [ [[package]] name = "rocket_codegen" version = "0.5.0-rc.3" -source = "git+https://github.com/SergioBenitez/Rocket#ddeac5ddcf252d081d69f1b1cec8467ab9ec4d26" +source = "git+https://github.com/SergioBenitez/Rocket#07fe79796f058ab12683ff9e344558bece263274" dependencies = [ "devise", "glob", - "indexmap 1.9.3", + "indexmap 2.0.0", "proc-macro2", "quote", "rocket_http", "syn 2.0.32", "unicode-xid", + "version_check", ] [[package]] name = "rocket_http" version = "0.5.0-rc.3" -source = "git+https://github.com/SergioBenitez/Rocket#ddeac5ddcf252d081d69f1b1cec8467ab9ec4d26" +source = "git+https://github.com/SergioBenitez/Rocket#07fe79796f058ab12683ff9e344558bece263274" dependencies = [ "cookie", "either", "futures", "http", "hyper", - "indexmap 1.9.3", + "indexmap 2.0.0", "log", "memchr", "pear", @@ -3001,7 +3019,7 @@ dependencies = [ "smallvec", "stable-pattern", "state", - "time 0.3.23", + "time", "tokio", "uncased", ] @@ -3107,7 +3125,7 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2" dependencies = [ - "base64 0.21.2", + "base64 0.21.4", ] [[package]] @@ -3458,25 +3476,25 @@ dependencies = [ "serde", "serde_json", "thiserror", - "time 0.3.23", + "time", "url", "uuid", ] [[package]] name = "serde" -version = "1.0.188" +version = "1.0.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e" +checksum = "8e422a44e74ad4001bdc8eede9a4570ab52f71190e9c076d14369f38b9200537" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.188" +version = "1.0.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2" +checksum = "1e48d1f918009ce3145511378cf68d613e3b3d9137d67272562080d68a2b32d5" dependencies = [ "proc-macro2", "quote", @@ -3485,9 +3503,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.103" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d03b412469450d4404fe8499a268edd7f8b79fecb074b0d812ad64ca21f4031b" +checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65" dependencies = [ "itoa", "ryu", @@ -3702,7 +3720,7 @@ dependencies = [ "sqlx-rt", "stringprep", "thiserror", - "time 0.3.23", + "time", "tokio-stream", "url", "uuid", @@ -3878,6 +3896,27 @@ dependencies = [ "yaml-rust", ] +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "tantivy" version = "0.19.2" @@ -3925,7 +3964,7 @@ dependencies = [ "tantivy-query-grammar", "tempfile", "thiserror", - "time 0.3.23", + "time", "uuid", "winapi", ] @@ -4043,22 +4082,13 @@ dependencies = [ [[package]] name = "time" -version = "0.1.45" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" -dependencies = [ - "libc", - "wasi 0.10.0+wasi-snapshot-preview1", - "winapi", -] - -[[package]] -name = "time" -version = "0.3.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59e399c068f43a5d116fedaf73b203fa4f9c519f17e2b34f63221d3792f81446" +checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5" dependencies = [ + "deranged", "itoa", + "powerfmt", "serde", "time-core", "time-macros", @@ -4066,15 +4096,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.10" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96ba15a897f3c86766b757e5ac7221554c6750054d74d5b28844fce5fb36a6c4" +checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20" dependencies = [ "time-core", ] @@ -4242,16 +4272,15 @@ dependencies = [ [[package]] name = "tonic" -version = "0.9.2" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3082666a3a6433f7f511c7192923fa1fe07c69332d3c6a2e6bb040b569199d5a" +checksum = "d560933a0de61cf715926b9cac824d4c883c2c43142f787595e48280c40a1d0e" dependencies = [ + "async-stream", "async-trait", "axum", - "base64 0.21.2", + "base64 0.21.4", "bytes", - "futures-core", - "futures-util", "h2", "http", "http-body", @@ -4494,7 +4523,7 @@ version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b11c96ac7ee530603dcdf68ed1557050f374ce55a5a07193ebf8cbc9f8927e9" dependencies = [ - "base64 0.21.2", + "base64 0.21.4", "log", "native-tls", "once_cell", @@ -4503,9 +4532,9 @@ dependencies = [ [[package]] name = "url" -version = "2.4.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb" +checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" dependencies = [ "form_urlencoded", "idna", @@ -4578,12 +4607,6 @@ dependencies = [ "try-lock", ] -[[package]] -name = "wasi" -version = "0.10.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" - [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" diff --git a/pgml-dashboard/Cargo.toml b/pgml-dashboard/Cargo.toml index 2eeea9f99..fc6c2b2ee 100644 --- a/pgml-dashboard/Cargo.toml +++ b/pgml-dashboard/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pgml-dashboard" -version = "2.7.6" +version = "2.7.12" edition = "2021" authors = ["PostgresML "] license = "MIT" @@ -17,20 +17,26 @@ base64 = "0.21" comrak = "0.17" chrono = "0.4" csv-async = "1" +console-subscriber = "*" convert_case = "0.6" dotenv = "0.15" env_logger = "0.10" +glob = "*" itertools = "0.10" parking_lot = "0.12" lazy_static = "1.4" log = "0.4" -markdown = "1.0.0-alpha.13" +markdown = "1.0.0-alpha.14" num-traits = "0.2" once_cell = "1.18" +pgml = { version = "0.9.4", path = "../pgml-sdks/pgml/" } +pgml-components = { path = "../packages/pgml-components" } +pgvector = { version = "0.2.2", features = [ "sqlx", "postgres" ] } rand = "0.8" regex = "1.9" +reqwest = { version = "0.11", features = ["json"] } rocket = { git = "https://github.com/SergioBenitez/Rocket", features = ["secrets", "json"] } -sailfish = "0.8" +sailfish = "0.8.0" # 0.8.1 has breaking changes scraper = "0.17" serde = "1" sentry = "0.31" @@ -44,9 +50,3 @@ tokio = { version = "1", features = ["full"] } url = "2.4" yaml-rust = "0.4" zoomies = { git="https://github.com/HyperparamAI/zoomies.git", branch="master" } -pgvector = { version = "0.2.2", features = [ "sqlx", "postgres" ] } -console-subscriber = "*" -glob = "*" -pgml-components = { path = "../packages/pgml-components" } -reqwest = { version = "0.11.20", features = ["json"] } -pgml = { version = "0.9.2", path = "../pgml-sdks/pgml/" } diff --git a/pgml-dashboard/build.rs b/pgml-dashboard/build.rs index 0c9604dee..8017afafb 100644 --- a/pgml-dashboard/build.rs +++ b/pgml-dashboard/build.rs @@ -14,6 +14,7 @@ fn main() { let status = Command::new("cargo") .arg("pgml-components") .arg("bundle") + .arg("--lock") .status() .expect("failed to run 'cargo pgml-bundle'"); diff --git a/pgml-dashboard/content/docs/guides/setup/developers.md b/pgml-dashboard/content/docs/guides/setup/developers.md index 659e81424..af2085299 100644 --- a/pgml-dashboard/content/docs/guides/setup/developers.md +++ b/pgml-dashboard/content/docs/guides/setup/developers.md @@ -70,7 +70,7 @@ Once there, you can initialize `pgrx` and get going: #### Pgrx command line and environments ```commandline -cargo install cargo-pgrx --version "0.10.0" --locked && \ +cargo install cargo-pgrx --version "0.11.0" --locked && \ cargo pgrx init # This will take a few minutes ``` @@ -127,7 +127,7 @@ SELECT pgml.version(); postgres=# select pgml.version(); version ------------------- - 2.7.4 + 2.7.12 (1 row) ``` diff --git a/pgml-dashboard/content/docs/guides/setup/quick_start_with_docker.md b/pgml-dashboard/content/docs/guides/setup/quick_start_with_docker.md index aa2aba667..6a8b29d76 100644 --- a/pgml-dashboard/content/docs/guides/setup/quick_start_with_docker.md +++ b/pgml-dashboard/content/docs/guides/setup/quick_start_with_docker.md @@ -18,7 +18,7 @@ docker run \ -v postgresml_data:/var/lib/postgresql \ -p 5433:5432 \ -p 8000:8000 \ - ghcr.io/postgresml/postgresml:2.7.3 \ + ghcr.io/postgresml/postgresml:2.7.12 \ sudo -u postgresml psql -d postgresml ``` @@ -44,7 +44,7 @@ docker run \ --gpus all \ -p 5433:5432 \ -p 8000:8000 \ - ghcr.io/postgresml/postgresml:2.7.3 \ + ghcr.io/postgresml/postgresml:2.7.12 \ sudo -u postgresml psql -d postgresml ``` @@ -82,7 +82,7 @@ Time: 41.520 ms postgresml=# SELECT pgml.version(); version --------- - 2.7.3 + 2.7.12 (1 row) ``` diff --git a/pgml-dashboard/content/docs/guides/setup/v2/installation.md b/pgml-dashboard/content/docs/guides/setup/v2/installation.md index 3dd865f33..f5df06ef6 100644 --- a/pgml-dashboard/content/docs/guides/setup/v2/installation.md +++ b/pgml-dashboard/content/docs/guides/setup/v2/installation.md @@ -36,7 +36,7 @@ brew bundle PostgresML is written in Rust, so you'll need to install the latest compiler from [rust-lang.org](https://rust-lang.org). Additionally, we use the Rust PostgreSQL extension framework `pgrx`, which requires some initialization steps: ```bash -cargo install cargo-pgrx --version 0.10.0 && \ +cargo install cargo-pgrx --version 0.11.0 && \ cargo pgrx init ``` @@ -65,6 +65,7 @@ To install the necessary Python packages into a virtual environment, use the `vi virtualenv pgml-venv && \ source pgml-venv/bin/activate && \ pip install -r requirements.txt && \ +pip install -r requirements-autogptq.txt && \ pip install -r requirements-xformers.txt --no-dependencies ``` @@ -134,7 +135,7 @@ CREATE EXTENSION pgml_test=# SELECT pgml.version(); version --------- - 2.7.4 + 2.7.12 (1 row) ``` @@ -293,7 +294,7 @@ We use the `pgrx` Postgres Rust extension framework, which comes with its own in ```bash cd pgml-extension && \ -cargo install cargo-pgrx --version 0.10.0 && \ +cargo install cargo-pgrx --version 0.11.0 && \ cargo pgrx init ``` diff --git a/pgml-dashboard/src/components/chatbot/chatbot.scss b/pgml-dashboard/src/components/chatbot/chatbot.scss index bdfe9630b..ded625965 100644 --- a/pgml-dashboard/src/components/chatbot/chatbot.scss +++ b/pgml-dashboard/src/components/chatbot/chatbot.scss @@ -23,6 +23,7 @@ div[data-controller="chatbot"] { padding-top: 0.85rem; margin-bottom: 1rem; display: none; + white-space: nowrap; } #chatbot-change-the-brain-spacer { @@ -33,6 +34,11 @@ div[data-controller="chatbot"] { .chatbot-knowledge-base-option-label { cursor: pointer; padding: 0.5rem; + transition: all 0.1s; + } + + .chatbot-brain-option-label:hover { + background-color: #{$gray-800}; } .chatbot-brain-provider { @@ -106,6 +112,7 @@ div[data-controller="chatbot"] { #chatbot-question-input-button-wrapper { background-color: #{$gray-600}; + cursor: pointer; } #chatbot-question-input-button { @@ -236,15 +243,19 @@ div[data-controller="chatbot"] { } } - #chatbot-alerts-wrapper { - position: fixed; - top: 105px; - right: 15px; - max-width: 500px; - z-index: 100; + #chatbot-expand-contract-image-wrapper { + background-color: #444444; + cursor: pointer; + transition: all 0.1s; + } + + #chatbot-expand-contract-image-wrapper:hover { + background-color: #2b2b2b; } } + + div[data-controller="chatbot"].chatbot-expanded { position: fixed; top: 100px; diff --git a/pgml-dashboard/src/components/chatbot/template.html b/pgml-dashboard/src/components/chatbot/template.html index 48d44c163..cd37f4ad5 100644 --- a/pgml-dashboard/src/components/chatbot/template.html +++ b/pgml-dashboard/src/components/chatbot/template.html @@ -21,7 +21,7 @@
Knowledge Base:
<% } %> />