From 6f6faa126ede5f787eb6201f2c84e99114f63404 Mon Sep 17 00:00:00 2001 From: Zain Hoda <7146154+zainhoda@users.noreply.github.com> Date: Fri, 1 Mar 2024 23:44:52 -0500 Subject: [PATCH 1/2] add chroma test --- docs/CNAME | 1 - docs/databases.md | 142 -- docs/index.md | 239 --- docs/intro-to-vanna.md | 64 - docs/onboarding.md | 30 - docs/reference.md | 4 - docs/sidebar.py | 130 -- docs/sidebar.yaml | 77 - docs/streamlit.md | 13 - docs/support.md | 5 - docs/vanna/types.html | 1717 ----------------- docs/workflow.md | 19 - nb-theme/conf.json | 12 - nb-theme/index.html.j2 | 189 -- nb-theme/static/custom_theme.css | 3 - notebooks/Chinook.sqlite | Bin 1067008 -> 0 bytes notebooks/app.ipynb | 48 - notebooks/bigquery-mistral-chromadb.ipynb | 1 - notebooks/bigquery-mistral-marqo.ipynb | 1 - .../bigquery-mistral-other-vectordb.ipynb | 1 - notebooks/bigquery-mistral-vannadb.ipynb | 1 - .../bigquery-openai-azure-chromadb.ipynb | 1 - notebooks/bigquery-openai-azure-marqo.ipynb | 1 - ...bigquery-openai-azure-other-vectordb.ipynb | 1 - notebooks/bigquery-openai-azure-vannadb.ipynb | 1 - .../bigquery-openai-standard-chromadb.ipynb | 1 - .../bigquery-openai-standard-marqo.ipynb | 1 - ...query-openai-standard-other-vectordb.ipynb | 1 - .../bigquery-openai-standard-vannadb.ipynb | 1 - .../bigquery-openai-vanna-chromadb.ipynb | 1 - notebooks/bigquery-openai-vanna-marqo.ipynb | 1 - ...bigquery-openai-vanna-other-vectordb.ipynb | 1 - notebooks/bigquery-openai-vanna-vannadb.ipynb | 1 - notebooks/bigquery-other-llm-chromadb.ipynb | 1 - notebooks/bigquery-other-llm-marqo.ipynb | 1 - .../bigquery-other-llm-other-vectordb.ipynb | 1 - notebooks/bigquery-other-llm-vannadb.ipynb | 1 - notebooks/configure.ipynb | 18 - notebooks/connect-to-bigquery.ipynb | 93 - notebooks/connect-to-postgres.ipynb | 52 - notebooks/connect-to-snowflake.ipynb | 48 - notebooks/databases.ipynb | 176 -- notebooks/getting-started.ipynb | 292 --- notebooks/index.ipynb | 63 - notebooks/local.ipynb | 374 ---- notebooks/manual-train.ipynb | 400 ---- .../other-database-mistral-chromadb.ipynb | 1 - notebooks/other-database-mistral-marqo.ipynb | 1 - ...ther-database-mistral-other-vectordb.ipynb | 1 - .../other-database-mistral-vannadb.ipynb | 1 - ...other-database-openai-azure-chromadb.ipynb | 1 - .../other-database-openai-azure-marqo.ipynb | 1 - ...database-openai-azure-other-vectordb.ipynb | 1 - .../other-database-openai-azure-vannadb.ipynb | 1 - ...er-database-openai-standard-chromadb.ipynb | 1 - ...other-database-openai-standard-marqo.ipynb | 1 - ...abase-openai-standard-other-vectordb.ipynb | 1 - ...her-database-openai-standard-vannadb.ipynb | 1 - ...other-database-openai-vanna-chromadb.ipynb | 1 - .../other-database-openai-vanna-marqo.ipynb | 1 - ...database-openai-vanna-other-vectordb.ipynb | 1 - .../other-database-openai-vanna-vannadb.ipynb | 1 - .../other-database-other-llm-chromadb.ipynb | 1 - .../other-database-other-llm-marqo.ipynb | 1 - ...er-database-other-llm-other-vectordb.ipynb | 1 - .../other-database-other-llm-vannadb.ipynb | 1 - notebooks/postgres-mistral-chromadb.ipynb | 1 - notebooks/postgres-mistral-marqo.ipynb | 1 - .../postgres-mistral-other-vectordb.ipynb | 1 - notebooks/postgres-mistral-vannadb.ipynb | 1 - .../postgres-openai-azure-chromadb.ipynb | 1 - notebooks/postgres-openai-azure-marqo.ipynb | 1 - ...postgres-openai-azure-other-vectordb.ipynb | 1 - notebooks/postgres-openai-azure-vannadb.ipynb | 1 - .../postgres-openai-standard-chromadb.ipynb | 1 - .../postgres-openai-standard-marqo.ipynb | 1 - ...tgres-openai-standard-other-vectordb.ipynb | 1 - .../postgres-openai-standard-vannadb.ipynb | 1 - .../postgres-openai-vanna-chromadb.ipynb | 1 - notebooks/postgres-openai-vanna-marqo.ipynb | 1 - ...postgres-openai-vanna-other-vectordb.ipynb | 1 - notebooks/postgres-openai-vanna-vannadb.ipynb | 1 - notebooks/postgres-other-llm-chromadb.ipynb | 1 - notebooks/postgres-other-llm-marqo.ipynb | 1 - .../postgres-other-llm-other-vectordb.ipynb | 1 - notebooks/postgres-other-llm-vannadb.ipynb | 1 - notebooks/slack.ipynb | 42 - notebooks/snowflake-mistral-chromadb.ipynb | 1 - notebooks/snowflake-mistral-marqo.ipynb | 1 - .../snowflake-mistral-other-vectordb.ipynb | 1 - notebooks/snowflake-mistral-vannadb.ipynb | 1 - .../snowflake-openai-azure-chromadb.ipynb | 1 - notebooks/snowflake-openai-azure-marqo.ipynb | 1 - ...nowflake-openai-azure-other-vectordb.ipynb | 1 - .../snowflake-openai-azure-vannadb.ipynb | 1 - .../snowflake-openai-standard-chromadb.ipynb | 1 - .../snowflake-openai-standard-marqo.ipynb | 1 - ...flake-openai-standard-other-vectordb.ipynb | 1 - .../snowflake-openai-standard-vannadb.ipynb | 1 - .../snowflake-openai-vanna-chromadb.ipynb | 1 - notebooks/snowflake-openai-vanna-marqo.ipynb | 1 - ...nowflake-openai-vanna-other-vectordb.ipynb | 1 - .../snowflake-openai-vanna-vannadb.ipynb | 1 - notebooks/snowflake-other-llm-chromadb.ipynb | 1 - notebooks/snowflake-other-llm-marqo.ipynb | 1 - .../snowflake-other-llm-other-vectordb.ipynb | 1 - notebooks/snowflake-other-llm-vannadb.ipynb | 1 - notebooks/sqlite-mistral-chromadb.ipynb | 1 - notebooks/sqlite-mistral-marqo.ipynb | 1 - notebooks/sqlite-mistral-other-vectordb.ipynb | 1 - notebooks/sqlite-mistral-vannadb.ipynb | 1 - notebooks/sqlite-openai-azure-chromadb.ipynb | 1 - notebooks/sqlite-openai-azure-marqo.ipynb | 1 - .../sqlite-openai-azure-other-vectordb.ipynb | 1 - notebooks/sqlite-openai-azure-vannadb.ipynb | 1 - .../sqlite-openai-standard-chromadb.ipynb | 1 - notebooks/sqlite-openai-standard-marqo.ipynb | 1 - ...qlite-openai-standard-other-vectordb.ipynb | 1 - .../sqlite-openai-standard-vannadb.ipynb | 1 - notebooks/sqlite-openai-vanna-chromadb.ipynb | 1 - notebooks/sqlite-openai-vanna-marqo.ipynb | 1 - .../sqlite-openai-vanna-other-vectordb.ipynb | 1 - notebooks/sqlite-openai-vanna-vannadb.ipynb | 1 - notebooks/sqlite-other-llm-chromadb.ipynb | 1 - notebooks/sqlite-other-llm-marqo.ipynb | 1 - .../sqlite-other-llm-other-vectordb.ipynb | 1 - notebooks/sqlite-other-llm-vannadb.ipynb | 1 - notebooks/streamlit.ipynb | 30 - notebooks/vn-ask.ipynb | 572 ------ notebooks/vn-connect-to-bigquery.ipynb | 532 ----- notebooks/vn-connect-to-postgres.ipynb | 1336 ------------- notebooks/vn-train.ipynb | 394 ---- pyproject.toml | 4 +- tests/test_vanna.py | 23 +- 134 files changed, 24 insertions(+), 7218 deletions(-) delete mode 100644 docs/CNAME delete mode 100644 docs/databases.md delete mode 100644 docs/index.md delete mode 100644 docs/intro-to-vanna.md delete mode 100644 docs/onboarding.md delete mode 100644 docs/reference.md delete mode 100644 docs/sidebar.py delete mode 100644 docs/sidebar.yaml delete mode 100644 docs/streamlit.md delete mode 100644 docs/support.md delete mode 100644 docs/vanna/types.html delete mode 100644 docs/workflow.md delete mode 100644 nb-theme/conf.json delete mode 100644 nb-theme/index.html.j2 delete mode 100644 nb-theme/static/custom_theme.css delete mode 100644 notebooks/Chinook.sqlite delete mode 100644 notebooks/app.ipynb delete mode 100644 notebooks/bigquery-mistral-chromadb.ipynb delete mode 100644 notebooks/bigquery-mistral-marqo.ipynb delete mode 100644 notebooks/bigquery-mistral-other-vectordb.ipynb delete mode 100644 notebooks/bigquery-mistral-vannadb.ipynb delete mode 100644 notebooks/bigquery-openai-azure-chromadb.ipynb delete mode 100644 notebooks/bigquery-openai-azure-marqo.ipynb delete mode 100644 notebooks/bigquery-openai-azure-other-vectordb.ipynb delete mode 100644 notebooks/bigquery-openai-azure-vannadb.ipynb delete mode 100644 notebooks/bigquery-openai-standard-chromadb.ipynb delete mode 100644 notebooks/bigquery-openai-standard-marqo.ipynb delete mode 100644 notebooks/bigquery-openai-standard-other-vectordb.ipynb delete mode 100644 notebooks/bigquery-openai-standard-vannadb.ipynb delete mode 100644 notebooks/bigquery-openai-vanna-chromadb.ipynb delete mode 100644 notebooks/bigquery-openai-vanna-marqo.ipynb delete mode 100644 notebooks/bigquery-openai-vanna-other-vectordb.ipynb delete mode 100644 notebooks/bigquery-openai-vanna-vannadb.ipynb delete mode 100644 notebooks/bigquery-other-llm-chromadb.ipynb delete mode 100644 notebooks/bigquery-other-llm-marqo.ipynb delete mode 100644 notebooks/bigquery-other-llm-other-vectordb.ipynb delete mode 100644 notebooks/bigquery-other-llm-vannadb.ipynb delete mode 100644 notebooks/configure.ipynb delete mode 100644 notebooks/connect-to-bigquery.ipynb delete mode 100644 notebooks/connect-to-postgres.ipynb delete mode 100644 notebooks/connect-to-snowflake.ipynb delete mode 100644 notebooks/databases.ipynb delete mode 100644 notebooks/getting-started.ipynb delete mode 100644 notebooks/index.ipynb delete mode 100644 notebooks/local.ipynb delete mode 100644 notebooks/manual-train.ipynb delete mode 100644 notebooks/other-database-mistral-chromadb.ipynb delete mode 100644 notebooks/other-database-mistral-marqo.ipynb delete mode 100644 notebooks/other-database-mistral-other-vectordb.ipynb delete mode 100644 notebooks/other-database-mistral-vannadb.ipynb delete mode 100644 notebooks/other-database-openai-azure-chromadb.ipynb delete mode 100644 notebooks/other-database-openai-azure-marqo.ipynb delete mode 100644 notebooks/other-database-openai-azure-other-vectordb.ipynb delete mode 100644 notebooks/other-database-openai-azure-vannadb.ipynb delete mode 100644 notebooks/other-database-openai-standard-chromadb.ipynb delete mode 100644 notebooks/other-database-openai-standard-marqo.ipynb delete mode 100644 notebooks/other-database-openai-standard-other-vectordb.ipynb delete mode 100644 notebooks/other-database-openai-standard-vannadb.ipynb delete mode 100644 notebooks/other-database-openai-vanna-chromadb.ipynb delete mode 100644 notebooks/other-database-openai-vanna-marqo.ipynb delete mode 100644 notebooks/other-database-openai-vanna-other-vectordb.ipynb delete mode 100644 notebooks/other-database-openai-vanna-vannadb.ipynb delete mode 100644 notebooks/other-database-other-llm-chromadb.ipynb delete mode 100644 notebooks/other-database-other-llm-marqo.ipynb delete mode 100644 notebooks/other-database-other-llm-other-vectordb.ipynb delete mode 100644 notebooks/other-database-other-llm-vannadb.ipynb delete mode 100644 notebooks/postgres-mistral-chromadb.ipynb delete mode 100644 notebooks/postgres-mistral-marqo.ipynb delete mode 100644 notebooks/postgres-mistral-other-vectordb.ipynb delete mode 100644 notebooks/postgres-mistral-vannadb.ipynb delete mode 100644 notebooks/postgres-openai-azure-chromadb.ipynb delete mode 100644 notebooks/postgres-openai-azure-marqo.ipynb delete mode 100644 notebooks/postgres-openai-azure-other-vectordb.ipynb delete mode 100644 notebooks/postgres-openai-azure-vannadb.ipynb delete mode 100644 notebooks/postgres-openai-standard-chromadb.ipynb delete mode 100644 notebooks/postgres-openai-standard-marqo.ipynb delete mode 100644 notebooks/postgres-openai-standard-other-vectordb.ipynb delete mode 100644 notebooks/postgres-openai-standard-vannadb.ipynb delete mode 100644 notebooks/postgres-openai-vanna-chromadb.ipynb delete mode 100644 notebooks/postgres-openai-vanna-marqo.ipynb delete mode 100644 notebooks/postgres-openai-vanna-other-vectordb.ipynb delete mode 100644 notebooks/postgres-openai-vanna-vannadb.ipynb delete mode 100644 notebooks/postgres-other-llm-chromadb.ipynb delete mode 100644 notebooks/postgres-other-llm-marqo.ipynb delete mode 100644 notebooks/postgres-other-llm-other-vectordb.ipynb delete mode 100644 notebooks/postgres-other-llm-vannadb.ipynb delete mode 100644 notebooks/slack.ipynb delete mode 100644 notebooks/snowflake-mistral-chromadb.ipynb delete mode 100644 notebooks/snowflake-mistral-marqo.ipynb delete mode 100644 notebooks/snowflake-mistral-other-vectordb.ipynb delete mode 100644 notebooks/snowflake-mistral-vannadb.ipynb delete mode 100644 notebooks/snowflake-openai-azure-chromadb.ipynb delete mode 100644 notebooks/snowflake-openai-azure-marqo.ipynb delete mode 100644 notebooks/snowflake-openai-azure-other-vectordb.ipynb delete mode 100644 notebooks/snowflake-openai-azure-vannadb.ipynb delete mode 100644 notebooks/snowflake-openai-standard-chromadb.ipynb delete mode 100644 notebooks/snowflake-openai-standard-marqo.ipynb delete mode 100644 notebooks/snowflake-openai-standard-other-vectordb.ipynb delete mode 100644 notebooks/snowflake-openai-standard-vannadb.ipynb delete mode 100644 notebooks/snowflake-openai-vanna-chromadb.ipynb delete mode 100644 notebooks/snowflake-openai-vanna-marqo.ipynb delete mode 100644 notebooks/snowflake-openai-vanna-other-vectordb.ipynb delete mode 100644 notebooks/snowflake-openai-vanna-vannadb.ipynb delete mode 100644 notebooks/snowflake-other-llm-chromadb.ipynb delete mode 100644 notebooks/snowflake-other-llm-marqo.ipynb delete mode 100644 notebooks/snowflake-other-llm-other-vectordb.ipynb delete mode 100644 notebooks/snowflake-other-llm-vannadb.ipynb delete mode 100644 notebooks/sqlite-mistral-chromadb.ipynb delete mode 100644 notebooks/sqlite-mistral-marqo.ipynb delete mode 100644 notebooks/sqlite-mistral-other-vectordb.ipynb delete mode 100644 notebooks/sqlite-mistral-vannadb.ipynb delete mode 100644 notebooks/sqlite-openai-azure-chromadb.ipynb delete mode 100644 notebooks/sqlite-openai-azure-marqo.ipynb delete mode 100644 notebooks/sqlite-openai-azure-other-vectordb.ipynb delete mode 100644 notebooks/sqlite-openai-azure-vannadb.ipynb delete mode 100644 notebooks/sqlite-openai-standard-chromadb.ipynb delete mode 100644 notebooks/sqlite-openai-standard-marqo.ipynb delete mode 100644 notebooks/sqlite-openai-standard-other-vectordb.ipynb delete mode 100644 notebooks/sqlite-openai-standard-vannadb.ipynb delete mode 100644 notebooks/sqlite-openai-vanna-chromadb.ipynb delete mode 100644 notebooks/sqlite-openai-vanna-marqo.ipynb delete mode 100644 notebooks/sqlite-openai-vanna-other-vectordb.ipynb delete mode 100644 notebooks/sqlite-openai-vanna-vannadb.ipynb delete mode 100644 notebooks/sqlite-other-llm-chromadb.ipynb delete mode 100644 notebooks/sqlite-other-llm-marqo.ipynb delete mode 100644 notebooks/sqlite-other-llm-other-vectordb.ipynb delete mode 100644 notebooks/sqlite-other-llm-vannadb.ipynb delete mode 100644 notebooks/streamlit.ipynb delete mode 100644 notebooks/vn-ask.ipynb delete mode 100644 notebooks/vn-connect-to-bigquery.ipynb delete mode 100644 notebooks/vn-connect-to-postgres.ipynb delete mode 100644 notebooks/vn-train.ipynb diff --git a/docs/CNAME b/docs/CNAME deleted file mode 100644 index ad1c2a23..00000000 --- a/docs/CNAME +++ /dev/null @@ -1 +0,0 @@ -docs.vanna.ai \ No newline at end of file diff --git a/docs/databases.md b/docs/databases.md deleted file mode 100644 index 6924d34c..00000000 --- a/docs/databases.md +++ /dev/null @@ -1,142 +0,0 @@ -# How to use Vanna with various databases - -You can use Vanna with any database that you can connect to via Python. Here are some examples of how to connect to various databases. - -All you have to do is provide Vanna with a function that takes in a SQL query and returns a Pandas DataFrame. Here are some examples of how to do that. - -## **PostgreSQL** - -```python -import pandas as pd -import psycopg2 - -conn_details = {...} # fill this with your connection details -conn_postgres = psycopg2.connect(**conn_details) - -def run_sql_postgres(sql: str) -> pd.DataFrame: - df = pd.read_sql_query(sql, conn_postgres) - return df - -vn.run_sql = run_sql_postgres -``` - -## **Snowflake** - -We have a built-in function for Snowflake, so you don't need to write your own. - -```python -vn.connect_to_snowflake(account='my-account', username='my-username', password='my-password', database='my-database') -``` - -```python -import pandas as pd -from snowflake.connector.pandas_tools import pd_read_sql -from snowflake.connector import connect - -conn_details = {...} # fill this with your connection details -conn_snowflake = connect(**conn_details) - -def run_sql_snowflake(sql: str) -> pd.DataFrame: - df = pd_read_sql(sql, conn_snowflake) - return df - -vn.run_sql = run_sql_snowflake -``` - -## **Google BigQuery** - -```python -from google.cloud import bigquery -import pandas as pd - -project_id = 'your-project-id' # replace with your Project ID -client_bigquery = bigquery.Client(project=project_id) - -def run_sql_bigquery(sql: str) -> pd.DataFrame: - df = client_bigquery.query(sql).to_dataframe() - return df - -vn.run_sql = run_sql_bigquery -``` - -## **Amazon Athena** - -```python -import pandas as pd -from pyathena import connect - -conn_details = {...} # fill this with your connection details -conn_athena = connect(**conn_details) - -def run_sql_athena(sql: str) -> pd.DataFrame: - df = pd.read_sql(sql, conn_athena) - return df - -vn.run_sql = run_sql_athena -``` - -## **Amazon Redshift** - -```python -import pandas as pd -import psycopg2 - -conn_details = {...} # fill this with your connection details -conn_redshift = psycopg2.connect(**conn_details) - -def run_sql_redshift(sql: str) -> pd.DataFrame: - df = pd.read_sql_query(sql, conn_redshift) - return df - -vn.run_sql = run_sql_redshift -``` - -Sure, here is an example for Google Cloud SQL using the MySQL connector: - -## **Google Cloud SQL (MySQL)** - -```python -import pandas as pd -import mysql.connector - -conn_details = {...} # fill this with your connection details -conn_google_cloud_sql = mysql.connector.connect(**conn_details) - -def run_sql_google_cloud_sql(sql: str) -> pd.DataFrame: - df = pd.read_sql(sql, conn_google_cloud_sql) - return df -``` - -Note: Google Cloud SQL supports MySQL, PostgreSQL, and SQL Server. The above example uses MySQL. If you are using PostgreSQL or SQL Server, you should use the appropriate connector. - -## **SQLite** - -```python -import sqlite3 -import pandas as pd - -db_path = 'path_to_your_db' # replace with your SQLite DB path -conn_sqlite = sqlite3.connect(db_path) - -def run_sql_sqlite(sql: str) -> pd.DataFrame: - df = pd.read_sql_query(sql, conn_sqlite) - return df - -vn.run_sql = run_sql_sqlite -``` - -## **Microsoft SQL Server** - -```python -import pandas as pd -import pyodbc - -conn_details = {...} # fill this with your connection details -conn_sql_server = pyodbc.connect(**conn_details) - -def run_sql_sql_server(sql: str) -> pd.DataFrame: - df = pd.read_sql(sql, conn_sql_server) - return df - -vn.run_sql = run_sql_sql_server -``` diff --git a/docs/index.md b/docs/index.md deleted file mode 100644 index 02d2fc63..00000000 --- a/docs/index.md +++ /dev/null @@ -1,239 +0,0 @@ -# Vanna.AI - Personalized AI SQL Agent - -**Let Vanna.AI write your nasty SQL for you**. Vanna is a Python based AI SQL agent trained on your schema that writes complex SQL in seconds. `pip install vanna` to get started now. - - - -## An example - -A business user asks you **"who are the top 2 customers in each region?"**. Right in the middle of lunch. And they need it for a presentation this afternoon. 😡😡😡 - -### The old way 😡 😫 💩 -Simple question to ask, not so fun to answer. You spend over an hour a) finding the tables, b) figuring out out the joins, c) look up the syntax for ranking, d) putting this into a CTE, e) filtering by rank, and f) choosing the correct metrics. Finally, you come up with this ugly mess - - -```sql -with ranked_customers as (SELECT c.c_name as customer_name, - r.r_name as region_name, - row_number() OVER (PARTITION BY r.r_name - ORDER BY sum(l.l_quantity * l.l_extendedprice) desc) as rank - FROM snowflake_sample_data.tpch_sf1.customer c join snowflake_sample_data.tpch_sf1.orders o - ON c.c_custkey = o.o_custkey join snowflake_sample_data.tpch_sf1.lineitem l - ON o.o_orderkey = l.l_orderkey join snowflake_sample_data.tpch_sf1.nation n - ON c.c_nationkey = n.n_nationkey join snowflake_sample_data.tpch_sf1.region r - ON n.n_regionkey = r.r_regionkey - GROUP BY customer_name, region_name) -SELECT region_name, - customer_name -FROM ranked_customers -WHERE rank <= 2; -``` - -And you had to skip your lunch. **HANGRY!** - -### The Vanna way 😍 🌟 🚀 -With Vanna, you train up a custom model on your data warehouse, and simply enter this in your Jupyter Notebook - - -```python -import vanna as vn -vn.set_model('your-model') -vn.ask('who are the top 2 customers in each region?') -``` - -Vanna generates that nasty SQL above for you, runs it (locally & securely) and gives you back a Dataframe in seconds: - -| region_name | customer_name | total_sales | -| ----------- | ------------- | ----------- | -| ASIA | Customer#000000001 | 68127.72 | -| ASIA | Customer#000000002 | 65898.69 | -... - -And you ate your lunch in peace. **YUMMY!** - -## How Vanna works -Vanna works in two easy steps - train a model on your data, and then ask questions. - -1. **Train a model on your data**. -2. **Ask questions**. - -When you ask a question, we utilize a custom model for your dataset to generate SQL, as seen below. Your model performance and accuracy depends on the quality and quantity of training data you use to train your model. -how-vanna-works - - - -## Why Vanna? - -1. **High accuracy on complex datasets.** - - Vanna’s capabilities are tied to the training data you give it - - More training data means better accuracy for large and complex datasets -2. **Secure and private.** - - Your database contents are never sent to Vanna’s servers - - We only see the bare minimum - schemas & queries. -3. **Isolated, custom model.** - - You train a custom model specific to your database and your schema. - - Nobody else can use your model or view your model’s training data unless you choose to add members to your model or make it public - - We use a combination of third-party foundational models (OpenAI, Google) and our own LLM. -4. **Self learning.** - - As you use Vanna more, your model continuously improves as we augment your training data -5. **Supports many databases.** - - We have out-of-the-box support Snowflake, BigQuery, Postgres - - You can easily make a connector for any [database](https://docs.vanna.ai/databases/) -6. **Pretrained models.** - - If you’re a data provider you can publish your models for anyone to use - - As part of our roadmap, we are in the process of pre-training models for common datasets (Google Ads, Facebook ads, etc) -7. **Choose your front end.** - - Start in a Jupyter Notebook. - - Expose to business users via Slackbot, web app, Streamlit app, or Excel plugin. - - Even integrate in your web app for customers. - -## Getting started -You can start by [automatically training Vanna (currently works for Snowflake)](https://docs.vanna.ai/notebooks/vn-train/) or add manual training data. - -### Train with DDL Statements -If you prefer to manually train, you do not need to connect to a database. You can use the train function with other parmaeters like ddl - - -```python -vn.train(ddl=""" - CREATE TABLE IF NOT EXISTS my-table ( - id INT PRIMARY KEY, - name VARCHAR(100), - age INT - ) -""") -``` - -### Train with Documentation -Sometimes you may want to add documentation about your business terminology or definitions. - -```python -vn.train(documentation="Our business defines OTIF score as the percentage of orders that are delivered on time and in full") -``` - -### Train with SQL -You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL. - -```python -vn.train(sql="SELECT * FROM my-table WHERE name = 'John Doe'") -``` - - - -## Asking questions -```python -vn.ask("What are the top 10 customers by sales?") -``` - - SELECT c.c_name as customer_name, - sum(l.l_extendedprice * (1 - l.l_discount)) as total_sales - FROM snowflake_sample_data.tpch_sf1.lineitem l join snowflake_sample_data.tpch_sf1.orders o - ON l.l_orderkey = o.o_orderkey join snowflake_sample_data.tpch_sf1.customer c - ON o.o_custkey = c.c_custkey - GROUP BY customer_name - ORDER BY total_sales desc limit 10; - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CUSTOMER_NAMETOTAL_SALES
0Customer#0001435006757566.0218
1Customer#0000952576294115.3340
2Customer#0000871156184649.5176
3Customer#0001311136080943.8305
4Customer#0001343806075141.9635
5Customer#0001038346059770.3232
6Customer#0000696826057779.0348
7Customer#0001020226039653.6335
8Customer#0000985876027021.5855
9Customer#0000646605905659.6159
-
- - - - -![png](notebooks/vn-ask_files/vn-ask_10_2.png) - - - - -AI-generated follow-up questions: - -* What is the country name for each of the top 10 customers by sales? -* How many orders does each of the top 10 customers by sales have? -* What is the total revenue for each of the top 10 customers by sales? -* What are the customer names and total sales for customers in the United States? -* Which customers in Africa have returned the most parts with a gross value? -* What are the total sales for the top 3 customers? -* What are the customer names and total sales for the top 5 customers? -* What are the total sales for customers in Europe? -* How many customers are there in each country? - -## More resources - - [Full Documentation](https://docs.vanna.ai) - - [Website](https://vanna.ai) - - [Slack channel for support](https://join.slack.com/t/vanna-ai/shared_invite/zt-1unu0ipog-iE33QCoimQiBDxf2o7h97w) - - [LinkedIn](https://www.linkedin.com/company/vanna-ai/) diff --git a/docs/intro-to-vanna.md b/docs/intro-to-vanna.md deleted file mode 100644 index d935082e..00000000 --- a/docs/intro-to-vanna.md +++ /dev/null @@ -1,64 +0,0 @@ -# Intro to Vanna: A Python-based AI SQL co-pilot - -**TLDR**: We help data people that know Python write SQL faster using AI. [See our starter notebook here](notebooks/vn-ask.md). - -## The deluge of data - -We are bathing in an ocean of data, sitting in Snowflake or BigQuery, that is brimming with potential insights. Yet only a small fraction of people in an enterprise have the two skills required to harness the data — - -1. A solid comprehension of advanced SQL, and -2. A comprehensive knowledge of the data structure & schema - -## The burden of being data-savvy - -Since you are reading this, chances are you are one of those fortunate few (data analysts, data scientists, data engineers, etc) with those abilities. It’s an invaluable skill, but you also get hit tons requests requiring you to write complex SQL queries. Annoying! - -## Introducing Vanna, the SQL co-pilot - -Vanna, at its core, is a co-pilot to Python & SQL savvy data people to to streamline the process of writing custom SQL on your company’s data warehouse using AI and LLMs. Most of our users use our Python package directly via Jupyter Notebooks ([starter notebook here](notebooks/vn-ask.md)) — - -```python -sql = vn.generate_sql(question='What are the top 10 customers by Sales?') -print(sql) -``` - -And here are the results — - -```sql -SELECT customer_name, - total_sales -FROM (SELECT c.c_name as customer_name, - sum(l.l_extendedprice * (1 - l.l_discount)) as total_sales, - row_number() OVER (ORDER BY sum(l.l_extendedprice * (1 - l.l_discount)) desc) as rank - FROM snowflake_sample_data.tpch_sf1.lineitem l join snowflake_sample_data.tpch_sf1.orders o - ON l.l_orderkey = o.o_orderkey join snowflake_sample_data.tpch_sf1.customer c - ON o.o_custkey = c.c_custkey - GROUP BY customer_name) -WHERE rank <= 10; -``` - -## Getting started with Vanna in a Notebook - -Vanna is super easy to get started with — - -1. **Grab an API key** directly through the notebook -2. **Train a custom model** on some past queries from your data warehouse -3. **Ask questions in plain English** and get back SQL that you can run in your workflow - -Check out the full starter notebook here. - -Vanna is built with a privacy-first and security-first design — **your data never leaves your environment**. - -## Using Vanna with a Streamlit front end - -[Streamlit](https://streamlit.io/) is an open source pure Python front end. We have built an UI for Vanna on top of Streamlit, that you can either use directly (eg our hosted version), and that you can clone, download, optionally modify, and self host. - -If you choose to self host it, you can run Vanna with a UI without any data leaving your environment. - -![Image](https://miro.medium.com/v2/resize:fit:640/format:webp/1*PmScp647UWIaxUatib_4SQ.png) - -[Check out the Streamlit UI here](https://github.com/vanna-ai/vanna-streamlit). - -## Conclusion - -Vanna is a powerful tool for data people that know Python to write SQL faster using AI. It's easy to get started with, and you can even use it with a Streamlit front end for a more interactive experience. Best of all, it's built with a privacy-first and security-first design, so your data never leaves your environment. Give it a try and see how it can streamline your SQL writing process. \ No newline at end of file diff --git a/docs/onboarding.md b/docs/onboarding.md deleted file mode 100644 index 8f15aa78..00000000 --- a/docs/onboarding.md +++ /dev/null @@ -1,30 +0,0 @@ -## What do I need to do to use **Vanna.AI**? -Vanna.AI uses a combination of documentation and historical question and SQL pairs to generate SQL from natural language. - -### Step 1: Train **Vanna.AI** -- Give **Vanna.AI** sample SQL -- **Vanna.AI** will try to guess the question -- Verify the question is correct -```mermaid -flowchart LR - Generate[vn.generate_question] - Question[Question] - Verify{Is the question correct?} - SQL --> Generate - Generate --> Question - Question --> Verify - Verify -- Yes --> Store[vn.store_sql] - Verify -- No --> Update[Update the Question] - Update --> Store - -``` - -### Step 2: Ask **Vanna.AI** a Question -```mermaid -flowchart LR - Question[Question] - Generate[vn.generate_sql] - SQL[SQL] - Question --> Generate - Generate --> SQL -``` diff --git a/docs/reference.md b/docs/reference.md deleted file mode 100644 index fc4459af..00000000 --- a/docs/reference.md +++ /dev/null @@ -1,4 +0,0 @@ -# Vanna Package Full Reference -::: vanna - options: - show_source: false \ No newline at end of file diff --git a/docs/sidebar.py b/docs/sidebar.py deleted file mode 100644 index f6923a38..00000000 --- a/docs/sidebar.py +++ /dev/null @@ -1,130 +0,0 @@ -import yaml -import sys -import nbformat -from nbconvert import HTMLExporter - -# Get the yaml file path from the command line -file_path = sys.argv[1] - -# Get the directory to search for the .ipynb files from the command line -notebook_dir = sys.argv[2] - -# Get the output directory from the command line -output_dir = sys.argv[3] - -def generate_html(sidebar_data, current_path: str): - html = '' - return html - -def generate_header(notebook_name: str) -> str: - return f""" - - - Run Using Colab - - - - Open in GitHub - -""" - -# Read YAML data from a file -def read_yaml_file(file_path): - with open(file_path, 'r') as file: - yaml_data = file.read() - return yaml_data - -yaml_data = read_yaml_file(file_path) - -# Parse YAML data -sidebar_data = yaml.safe_load(yaml_data) - -# Get a list of all .ipynb files in the directory -import os -notebook_files = [file for file in os.listdir(notebook_dir) if file.endswith('.ipynb')] - -def is_runnable(notebook_name: str, sidebar_data: dict) -> bool: - # Check if the notebook is runnable - for entry in sidebar_data: - if 'link' in entry: - if entry['link'] == f'{notebook_name}.html': - return entry.get('runnable', 'true') == 'true' - - if 'sub_entries' in entry: - for sub_entry in entry['sub_entries']: - if sub_entry['link'] == f'{notebook_name}.html': - return sub_entry.get('runnable', 'true') == 'true' - - return False - -def get_title_from_sidebar_data(notebook_name: str, sidebar_data: dict) -> str: - # Check if the notebook is runnable - for entry in sidebar_data: - if 'link' in entry: - if entry['link'] == f'{notebook_name}.html': - return entry['title'] - - if 'sub_entries' in entry: - for sub_entry in entry['sub_entries']: - if sub_entry['link'] == f'{notebook_name}.html': - return sub_entry['title'] - - return '' - -for notebook_file in notebook_files: - # Get just the file name without the extension - notebook_name = os.path.splitext(notebook_file)[0] - - # Get the full path to the notebook - notebook_file_path = os.path.join(notebook_dir, notebook_file) - - # Generate HTML code - html_code = generate_html(sidebar_data, f'{notebook_name}.html') - - # Read notebook file - current_notebook = nbformat.read(notebook_file_path, as_version=4) - - html_exporter = HTMLExporter(template_name='nb-theme') - - (body, resources) = html_exporter.from_notebook_node(current_notebook) - - notebook_title = get_title_from_sidebar_data(notebook_name, sidebar_data) - - # Write body to file - with open(os.path.join(output_dir, f'{notebook_name}.html'), 'w') as file: - # From sidebar_data, see if there is a matching entry for the current notebook - if is_runnable(notebook_name, sidebar_data): - file.write(body.replace('nb_title', f"Vanna Docs: {notebook_title}").replace('', html_code).replace('', generate_header(notebook_name))) - else: - file.write(body.replace('nb_title', f"Vanna Docs: {notebook_title}").replace('', html_code)) - - diff --git a/docs/sidebar.yaml b/docs/sidebar.yaml deleted file mode 100644 index 5c669302..00000000 --- a/docs/sidebar.yaml +++ /dev/null @@ -1,77 +0,0 @@ -- title: How It Works - link: index.html - runnable: false - svg_text: |- - - -- title: Getting Started - link: getting-started.html - svg_text: |- - - -- title: Train Vanna - svg_text: |- - - sub_entries: - - title: Snowflake - link: vn-train.html - svg_text: |- - - - - title: Other Databases - link: manual-train.html - svg_text: |- - - -- title: User Interfaces - svg_text: |- - - sub_entries: - - title: Streamlit - link: streamlit.html - runnable: false - svg_text: |- - - - - title: Slack - link: slack.html - runnable: false - svg_text: |- - - -- title: Databases - link: databases.html - svg_text: |- - - -- title: Running Locally - link: snowflake-openai-standard-chromadb.html - svg_text: |- - - -- title: API Reference - link: vanna.html - svg_text: |- - diff --git a/docs/streamlit.md b/docs/streamlit.md deleted file mode 100644 index 2b80b17a..00000000 --- a/docs/streamlit.md +++ /dev/null @@ -1,13 +0,0 @@ -# Use **Vanna.AI** with Streamlit - -## App - - -## Code -[https://github.com/vanna-ai/vanna-streamlit](https://github.com/vanna-ai/vanna-streamlit) - - \ No newline at end of file diff --git a/docs/support.md b/docs/support.md deleted file mode 100644 index 46599246..00000000 --- a/docs/support.md +++ /dev/null @@ -1,5 +0,0 @@ -# Getting Support - -E-mail us at [support@vanna.ai](mailto:support@vanna.ai) - -[Join our Slack](https://join.slack.com/t/vanna-ai/shared_invite/zt-1unu0ipog-iE33QCoimQiBDxf2o7h97w) \ No newline at end of file diff --git a/docs/vanna/types.html b/docs/vanna/types.html deleted file mode 100644 index e6772780..00000000 --- a/docs/vanna/types.html +++ /dev/null @@ -1,1717 +0,0 @@ - - - - - - - vanna.types API documentation - - - - - - - - - - -
-
-

-vanna.types

- - - - - -
-
-
-
@dataclass
- - class - Status: - - -
- - - - -
-
- - Status(success: bool, message: str) - - -
- - - - -
-
-
- success: bool - - -
- - - - -
-
-
- message: str - - -
- - - - -
-
-
-
-
@dataclass
- - class - QuestionList: - - -
- - - - -
-
- - QuestionList(questions: List[vanna.types.FullQuestionDocument]) - - -
- - - - -
-
-
- questions: List[vanna.types.FullQuestionDocument] - - -
- - - - -
-
-
-
-
@dataclass
- - class - FullQuestionDocument: - - -
- - - - -
-
- - FullQuestionDocument( id: vanna.types.QuestionId, question: vanna.types.Question, answer: vanna.types.SQLAnswer | None, data: vanna.types.DataResult | None, plotly: vanna.types.PlotlyResult | None) - - -
- - - - -
-
- - - - - -
-
-
- question: vanna.types.Question - - -
- - - - -
-
-
- answer: vanna.types.SQLAnswer | None - - -
- - - - -
-
-
- data: vanna.types.DataResult | None - - -
- - - - -
-
-
- plotly: vanna.types.PlotlyResult | None - - -
- - - - -
-
-
-
-
@dataclass
- - class - QuestionSQLPair: - - -
- - - - -
-
- - QuestionSQLPair(question: str, sql: str) - - -
- - - - -
-
-
- question: str - - -
- - - - -
-
-
- sql: str - - -
- - - - -
-
-
-
-
@dataclass
- - class - Organization: - - -
- - - - -
-
- - Organization( name: str, user: str | None, connection: vanna.types.Connection | None) - - -
- - - - -
-
-
- name: str - - -
- - - - -
-
-
- user: str | None - - -
- - - - -
-
-
- connection: vanna.types.Connection | None - - -
- - - - -
-
-
-
-
@dataclass
- - class - QuestionId: - - -
- - - - -
-
- - QuestionId(id: str) - - -
- - - - -
-
-
- id: str - - -
- - - - -
-
-
-
-
@dataclass
- - class - Question: - - -
- - - - -
-
- - Question(question: str) - - -
- - - - -
-
-
- question: str - - -
- - - - -
-
-
-
-
@dataclass
- - class - QuestionCategory: - - -
- - - - -
-
- - QuestionCategory(question: str, category: str) - - -
- - - - -
-
-
- question: str - - -
- - - - -
-
-
- category: str - - -
- - - - -
-
-
- NO_SQL_GENERATED = -'No SQL Generated' - - -
- - - - -
-
-
- SQL_UNABLE_TO_RUN = -'SQL Unable to Run' - - -
- - - - -
-
-
- BOOTSTRAP_TRAINING_QUERY = -'Bootstrap Training Query' - - -
- - - - -
-
-
- ASSUMED_CORRECT = -'Assumed Correct' - - -
- - - - -
-
-
- FLAGGED_FOR_REVIEW = -'Flagged for Review' - - -
- - - - -
-
-
- REVIEWED_AND_APPROVED = -'Reviewed and Approved' - - -
- - - - -
-
-
- REVIEWED_AND_REJECTED = -'Reviewed and Rejected' - - -
- - - - -
-
-
- REVIEWED_AND_UPDATED = -'Reviewed and Updated' - - -
- - - - -
-
-
-
-
@dataclass
- - class - AccuracyStats: - - -
- - - - -
-
- - AccuracyStats(num_questions: int, data: Dict[str, int]) - - -
- - - - -
-
-
- num_questions: int - - -
- - - - -
-
-
- data: Dict[str, int] - - -
- - - - -
-
-
-
-
@dataclass
- - class - Followup: - - -
- - - - -
-
- - Followup(followup: str) - - -
- - - - -
-
-
- followup: str - - -
- - - - -
-
-
-
-
@dataclass
- - class - QuestionEmbedding: - - -
- - - - -
-
- - QuestionEmbedding(question: vanna.types.Question, embedding: List[float]) - - -
- - - - -
-
-
- question: vanna.types.Question - - -
- - - - -
-
-
- embedding: List[float] - - -
- - - - -
-
-
-
-
@dataclass
- - class - Connection: - - -
- - - - -
-
-
-
@dataclass
- - class - SQLAnswer: - - -
- - - - -
-
- - SQLAnswer(raw_answer: str, prefix: str, postfix: str, sql: str) - - -
- - - - -
-
-
- raw_answer: str - - -
- - - - -
-
-
- prefix: str - - -
- - - - -
-
-
- postfix: str - - -
- - - - -
-
-
- sql: str - - -
- - - - -
-
-
-
-
@dataclass
- - class - Explanation: - - -
- - - - -
-
- - Explanation(explanation: str) - - -
- - - - -
-
-
- explanation: str - - -
- - - - -
-
-
-
-
@dataclass
- - class - DataResult: - - -
- - - - -
-
- - DataResult( question: str | None, sql: str | None, table_markdown: str, error: str | None, correction_attempts: int) - - -
- - - - -
-
-
- question: str | None - - -
- - - - -
-
-
- sql: str | None - - -
- - - - -
-
-
- table_markdown: str - - -
- - - - -
-
-
- error: str | None - - -
- - - - -
-
-
- correction_attempts: int - - -
- - - - -
-
-
-
-
@dataclass
- - class - PlotlyResult: - - -
- - - - -
-
- - PlotlyResult(plotly_code: str) - - -
- - - - -
-
-
- plotly_code: str - - -
- - - - -
-
-
-
-
@dataclass
- - class - WarehouseDefinition: - - -
- - - - -
-
- - WarehouseDefinition(name: str, tables: List[vanna.types.TableDefinition]) - - -
- - - - -
-
-
- name: str - - -
- - - - -
-
-
- tables: List[vanna.types.TableDefinition] - - -
- - - - -
-
-
-
-
@dataclass
- - class - TableDefinition: - - -
- - - - -
-
- - TableDefinition( schema_name: str, table_name: str, ddl: str | None, columns: List[vanna.types.ColumnDefinition]) - - -
- - - - -
-
-
- schema_name: str - - -
- - - - -
-
-
- table_name: str - - -
- - - - -
-
-
- ddl: str | None - - -
- - - - -
-
-
- columns: List[vanna.types.ColumnDefinition] - - -
- - - - -
-
-
-
-
@dataclass
- - class - ColumnDefinition: - - -
- - - - -
-
- - ColumnDefinition( name: str, type: str, is_primary_key: bool, is_foreign_key: bool, foreign_key_table: str, foreign_key_column: str) - - -
- - - - -
-
-
- name: str - - -
- - - - -
-
-
- type: str - - -
- - - - -
-
-
- is_primary_key: bool - - -
- - - - -
-
-
- is_foreign_key: bool - - -
- - - - -
-
-
- foreign_key_table: str - - -
- - - - -
-
-
- foreign_key_column: str - - -
- - - - -
-
-
-
-
@dataclass
- - class - Diagram: - - -
- - - - -
-
- - Diagram(raw: str, mermaid_code: str) - - -
- - - - -
-
-
- raw: str - - -
- - - - -
-
-
- mermaid_code: str - - -
- - - - -
-
-
- - \ No newline at end of file diff --git a/docs/workflow.md b/docs/workflow.md deleted file mode 100644 index af69ca5b..00000000 --- a/docs/workflow.md +++ /dev/null @@ -1,19 +0,0 @@ -# What's the Workflow? -```mermaid -flowchart TD - DB[(Known Correct Question-SQL)] - Try[Try to Use DDL/Documentation] - SQL(SQL) - Check{Is the SQL correct?} - Generate[fa:fa-circle-question Use Examples to Generate] - DB --> Find - Question[fa:fa-circle-question Question] --> Find{fa:fa-magnifying-glass Do we have similar questions?} - Find -- Yes --> Generate - Find -- No --> Try - Generate --> SQL - Try --> SQL - SQL --> Check - Check -- Yes --> DB - Check -- No --> Analyst[fa:fa-glasses Analyst Writes the SQL] - Analyst -- Adds --> DB -``` \ No newline at end of file diff --git a/nb-theme/conf.json b/nb-theme/conf.json deleted file mode 100644 index 68fdf836..00000000 --- a/nb-theme/conf.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "base_template": "lab", - "mimetypes": { - "text/html": true - }, - "preprocessors": { - "100-pygments": { - "type": "nbconvert.preprocessors.CSSHTMLHeaderPreprocessor", - "enabled": true - } - } -} diff --git a/nb-theme/index.html.j2 b/nb-theme/index.html.j2 deleted file mode 100644 index afe9c414..00000000 --- a/nb-theme/index.html.j2 +++ /dev/null @@ -1,189 +0,0 @@ -{%- extends 'lab/base.html.j2' -%} -{% from 'mathjax.html.j2' import mathjax %} -{% from 'jupyter_widgets.html.j2' import jupyter_widgets %} - -{%- block header -%} - - - -{%- block html_head -%} - - - - - - - - -{% set ga_id = "G-1YZ053XQJ4" %} - - -nb_title - - - -{%- block html_head_js -%} -{%- block html_head_js_requirejs -%} - -{%- endblock html_head_js_requirejs -%} -{%- endblock html_head_js -%} - -{% block jupyter_widgets %} - {%- if "widgets" in nb.metadata -%} - {{ jupyter_widgets(resources.jupyter_widgets_base_url, resources.html_manager_semver_range) }} - {%- endif -%} -{% endblock jupyter_widgets %} - -{% block extra_css %} -{% endblock extra_css %} - -{% for css in resources.inlining.css -%} - -{% endfor %} - -{% block notebook_css %} -{{ resources.include_css("static/index.css") }} -{% if resources.theme == 'dark' %} - {{ resources.include_css("static/theme-dark.css") }} -{% else %} - {{ resources.include_css("static/theme-light.css") }} -{% endif %} - - -{{ resources.include_css("static/custom_theme.css") }} -{% endblock notebook_css %} - -{{ mathjax() }} - -{%- block html_head_css -%} -{%- endblock html_head_css -%} - -{%- endblock html_head -%} - - - - - - - -{%- endblock header -%} - -{%- block body_header -%} -{% if resources.theme == 'dark' %} - -{% else %} - -{% endif %} - - - - - - -
- -{%- endblock body_header -%} - - -{% block body_footer %} -
- -{% endblock body_footer %} - -{% block footer %} -{% block footer_js %} -{% endblock footer_js %} - -{% endblock footer %} diff --git a/nb-theme/static/custom_theme.css b/nb-theme/static/custom_theme.css deleted file mode 100644 index 73b192a6..00000000 --- a/nb-theme/static/custom_theme.css +++ /dev/null @@ -1,3 +0,0 @@ -.jp-InputPrompt { - font-size: 0.7rem; -} diff --git a/notebooks/Chinook.sqlite b/notebooks/Chinook.sqlite deleted file mode 100644 index b559c7394abe5dedc1944483de9d715a7fcaa2e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1067008 zcmeFa349z!u|GaDz3M$AS%(kFc5IJt%eHRGvg|nV>acw1vLxH_?U6K=)?V$%d&rh^ zA?LnGurU}1au6T~353W*0qvR)k%KD<0g?a-IUpqD1_B8L$p2e4yDK{(c|7?2-{(C( zcG5Ma-kI*6ny%{V>gul6we`NRsqeIcJw{kBRUC?{D$8|UQT7)oiX&T56c^HiNXwBN zNQr-H0{QSO$|z{vk%AkX;%PwjCh@NLllYx@RlF#k=d2HZ_|z|_C~%4b{~iU@&yE4t z9Z3cF1o&9JN&;LChEy*R02gS)o2la4RLkl(Z@wa45YLF8i64s}iU-BFwNGg6TB9~k z%h43|yXxKQQS~CVSKXwZsm@j>KnOgo{6M)!xmGz(>G+3@ojB8>l&f_{(C9MtRe_EI zeO`?()S(yWl}w)DP%72xZlB-3M6U`O`+ffSk0p6>^7Ie;u{bX`TX!gP)oLRcF!~I? zUQ$$4JU(NZLz%8tS%EG~Ul9rR=S-jKP-@kxs%pK}4267FAf#`$tKO<_uJ`qsTPKX0 z;!qZ--hCst>QzR!&#+5MKh2>`Q5y}t*%t~M<8miElv1_Y*J*T`dZXDDH1vFZr7s*B zJ8=@do3~@+o1w6;!_pht*2ha8J8mMCTx00XLfK<;9ZH_+-5InxeC=ki z)Aaj{?6EnN+29Lw8z?puwt_w*YtjUVQlYk5`;l$wEoP5zACx42AWkoqAQIv$J2Xi}a(hl-~d>N3XVkb%a5XjPYX~ zN>OUc&M z{4xLh?ZsPDr=&ZSWhcKjUXxng-fi@Fa?|L`RiV{YCdRi`yh~>|h(Fy~sYJr22$QOI zpU-c)GCcIs-bkm<3i*vb(>2rWP*$nUexpC6H<)OzA4Jlt`t=o7B&b)Le!mrRj&;$; z+kl>E2KAD1-5an%GTliXXob;%@4GXck|P~TvAWvm>cYEYzzzFNbS=N%k)A^LRr$K~ zrhpj|;~fsA&|Pna>4OF7Q|c{N$L1+cgVpkk&yHa`hmS;YMRrg&NWTKrNx zDK?90Q7mSNF+$N^(|)0SL%T)$ly*Sdqcv!!Yg4o=$b;9^pQ{f+CfuYRR4-7w)h%k1 zx>TK~=Bh5`_sVn1W6HhCUCMRJ+qm_`4|trVaY64kMH` zS15TaOo$s|xn?UEwzB7NgXwR($G7;b)Y(FrQroFFSmChYnI)9TO?r#b+iOgmDU`}) zvomPv^^uV~Li!xti#H0Ioo4zBG`JDv5|{fz8Pn0=`iO5ox}4wYge1^Wb)(s@HyB~7 zD`!Uk~OmXXFTF&5EEA z*sX7(m&TpdMsL{g1@MHqv)eR+;fx9NdSHW1W^XUJBal5FWL!^Vj)Zh?Fbw$@${dHc zsrHZDNW7?Tvi!b`v3Tqx37jpII*c3;x~&~PGtgn8wnk&*W_r6#k)C#6W)>B~cT`1; z;GT$?m5KMSHo(aN>SN$uD=h=PDJdzl(bpGL1tTb|#@Dgi7YJE_^mKflDk~ugGt-Fl zC(6MIsX{5WbLtHucPnJO8Sc;UpvhGyNTXCYI!8hlrMpnZ zFZ1m4F2UPzRL!jQ|Uai2tQ{9#DPwMBN-2_}A_lql}-dSbb~*8BkiDk zaak!|udJjb!B@2U485|jyy!zJuQ;*t61^P%MjK=Q zy_4$-nY;Hc-(`l|xdLjHW1EA?T{vEuIDP>>Y1OWgdxC+LMj&Jc)`5rnM!x6|^_ifl zUR>4`@>`8oaIeu{R9sQKpsYeK!3&oWEGcQa>FSD@}CH{ML9UDlKabN5bJQNTWK8Ek>Zf0gYp<$k3PnJ4~ReKg`xYBg0Y6b@%o zKo7H~Y2ZC}M*J86@j+{h0GL*-&~jH>=oSI6XV3uQ^;N4}?r!A*<7;QW@s)A=pR4;y z{n4;T=|N$N5Y85>$Fy|lJgXyq$jz|1L~pbTbbN?>Dl%k(Y zd|f`B26O|O734&~5VucSe&5#P@``mBmZ+k^()Er&~MqwjhLKZ?{^e<<>_!_d@YQYiM)~cUygC zK(5-ctL{gM+B=T!LG3B1eL8Ay+e^J8uoFr{hzvG*Q?R3(T5T)=g;7m6v=Y6=hfan8 z*TB7)2Q(NR-M)aSmhwjl=-y7FCnSFLnD@cnL@mLiy{KgxYMG5%pip#>uD~_0ip%=0{A+cj3lkl+7#|Np-srJU`{nx%WX0Iy_mZgkuLO6(xWj0>j^n> zX4E|Wr9@!^@@NleQi0;=yEpqtVQ94iM%b|XW*LzI)5>lm*h>?z1Tjh~7V-@x3-uWd zmKE^(y1K(NP9#vs!c-{`0ey=8aTiE=`>Y+iKAC9A)}wxp5{c7k4L&_utG7mAvt#NP z+dZrb+851D=e3y-571qpI|d@)B`Z%Y#FsbmrmdK7`hAg*EPiv-+!qt&6aS|wn-p=Q z*dZoquWI*cTh%w!i`Ci6H<0~r{M&MLw@0zi@&(kZXqJv|hQ_zx8$$L441J64?Fa*| z3ScbkG57BWjeUWgkl!7aTA<~EL&K1W4N%gJu7FS6{pzyxza|>)JGu*BNJaT1kWT8g z_U9rQQbM0;#YrCs1S4jtH-cT=L?AU^%Uyxdr*q`ipsxdB#_IJ2TvtA>Tyg)wL|xmC z`aDV(s;Zz@NiYa1NR)42C|sylZCGDiRE8cv?0~n0uC6W|6^3Rz7!o~6hYHy3xN~7c zoi9;A*U@f|5<&$_@h+|4YRvwO{rI9biEq++I6%GWOJgbe7s9iGT~i{iB>hBHops` z7v{1vs{IBGCs0afEKIx-O*v@5vefxnZmWrT7-VVC+HLLhnSJ8f;^mIV6P2|e-D!6L zqFbBQ(Lww}v)2_7s8sR#Y~}&&^zudV_q6X+^FD-j+Q$5OR!gFixkpWpLK0d5?TADz zCN#!?@~)UL$+2(T`EwpR^SviL%X)8mV!_c)40Z84F@Of3(N#mOhDfKoCx5MO{Qkuo z5_eZ0?eHjG+)WZHE_YcdlC-b3dU`;H1|y)(({jBA#&qQMLZ9grDR&mV_gbQLXB=(! zC}*OSY1DO$AOt5gf(R;y)NX+T$sMPLBbCrYDu|)Bt z|EuC%f)9#!)kVt1{|3wd%a0D^r({BZD^*KNXHSOWn4ez(6@q48tzpRRRvMil^?G}0 zg!5uF2y4Zai^}thO7Xv5RJ4TuhY_$ezqlyB82WfTtD>T$q6#Xy?(H+H4H|~}y;Zi7 z*;ZPm7jLY9j#;s|C{JHpx+uT0a`DN3mzR}7TKAdDX%Mxn-5pl2m$c}CMUG5m{1j?$ zKDD>7a2e+EyPfAisF)8Xu<~?JWr#Z zG1ndM8HI%vwo(y-#iXO(rZm_Pw&h@PW%=U#Vl-`WvR&vB_!}f1ZR%pkwZ$La(vr55 z8}@;gmX?;3zzWpS|AD5KsF_O6#05%eY3UU16qT%Pd10I~_tu%1vBJWdZ0jO4tR%nq z{cXh?lqH)Fs$!10+6eVRDI(%FZm8{q;DH93?8fD5^peJ6qAvI2vXaI5m1T=dPRhVU zxB{XH%{ZaaVEG4#{psHWilULePbS1_q*X}Mk(MHzj#P!T5@|eA1=3<9vL!4*IumI* zk{5}LinT~9km`_DBWXy5NJU6xNE49A7@3cRHAbZv2@@2h6sa6(5fTVv?YNRyDTi+WLf&j# ze~$DEq!*EXhrG$SK7#Zp(vOfHL;5k&Pmq3!^f=NJNHCbHKSTN@(lbcUB0Y!nJkqa_ zevR}3(r=JnLV6kL6{J^@UPF2v=?$bek$#W#2c$nD{R!!9q<4`1jP`ht#sU8u(%(T! zd@l`o8rrGBfTLj&r%gq|x6triG~BD>_+Hw4B+y>NchMFgl_BBVY8#Lmky=rH z8q!?gDiXex=0XBJHPB4UK{^cy-$A2$@ZB_gFAd*FL*LNw?X_B@)ksZ9ZAfP!l^~%H zXzP%uUra%ogLilje*@Jd66)2mkj5iTM4E;)6KNh2`h|x6pe;sPhE#=Ahg6TW7HK^a z`jdvfsWl*#BQ>MoF-T~y`WK{kk^YK&^d+*BYfdEe1r7ZQHUkB6MbXA0O+d;;LSNC) zPEALej)eZCq0Ph>OuKwssZM$~s*mWs1c}-JzM=Qjs*&iuiS}!dsBLJM)`CQ|Ai8ft z+JdwV$w2Bv+KJSSv>T}hsTc1-G{g7h?*qE<-}HX?-keV~+mCcM(g4y$NJo%91@@tK z;;MZKIO-AIs~Ws58}&7{8+Co&X2_zTxvFz(o+mFIg-z6MQpDThb=duXD2Bz?#LeQf z;*;Vc(I+}Yt5_k5#2hg}XxbmOXSK(*?`y-_9eCu_zf%5r{!}a` zOuR^Muo6Yb(pDGH<;2gr>YPOjQ%lLFqpa0H2Sb&LyLx4STV?}HA1x1NppXw?de!D zz?uRXsv2RAO2?}ws5XWP+dpriUB2L+wXa+>^`5nJyzX!rO%wElR3Q zC0KP>Y3-vGK3kKnx3IbvSQmiVq*Gsm5724#G-8FIe&zD%KcW&_R(Yt%{E09nI}4IU zjw?nmIrz2>-gT|slH%ghM7LPuU^i|~UH$z5Xld%32cQS2ZybPzpuT5r{zCw%j>dObfit0-P z{eZt2fDWL(FaYg9{q+F!2K841(Aw1J2f(Q6a|6&o)Mp3g06sGStwsIi0Q3a)X9Li3 z)F<}=JmCj;dRSfjXl8784N1^hlkEGG~uR?8ApC?`R)W82Y z3OFvDES))%C##pHhmCf>xhl|SVd*%2@l?0edfRICHg8pZt-d*)yVWz#qvK!VZ>Wm; zs>Zh3y4n_9Z)^hhtgEkIXx~x|b1uf*;78pPFSf=An_Kl7)YrDEq4onM(NZ}?v$qrT z)KF-v-nib|QoYjKGOwa2FJ4*vmTLG7o$!0v`+vu>Fx8YS-~%_XPgC$C%V>s-G5pn7 z%s8Q-;$%&27JkJq>l$iXR#nd{E?S7ixA)Pex~Z|Xt;Gw<>6@F^Y)=qZZ*DnB8;|Fc zK5oC}il&y@RdtQ5tn zy0^M*6*BPux@MyOXr3pJ#{UxSaX>BdKL4M`#1F&+;$HDhaZG$g+#)`YS;42oHR5t{ zp*TQ+6j-BOHUP@-oPGlvQTe4=^SyK5;@~)Y7 zR*LduGHXU6>yc#E^hDMJ$t*pQm9*w&O-p1QOWrj#k@e+d)|5on=aX5dC9*z~%$l6Y zx+a-5DUp?2$IG0EEY;~wIWKWjW^OzulFZ48=lGL36XH1?$(-?aj$>0YXIwm|EtxYm zp3|7j$&Tl&Oy*=!4tjIw6ErXH{X`~U&owm1-hItt!0v0v?y&Rf9e|xzlRd<^+6B1n z<1{DV@^K81+NO_VB-J)tbr#^ds}=&bTtytxd?nd88m^oNxaNv;09Rho47lP7jHp`m z)PDUUYX6jrsQr^JBKt+|gU z$pcj)J2_G%GCpb;YBYLI66PfdY5qPzohWPT`z3Ya2NKnuybC=}XU@!->Lr^`99ZkI z+8&qagr=R`?h}4VHvNRWk81tsF!7;dF%$Qr%AgrgGnP4t3?DUeZN@4RT$N~){g840 zeIz^K9X>#{6MiGY{i88%^xaM#;^O%|zqskIgI=L#&rHV#>{^zUlZrB*!x)gkpO>KE0|s)y9e)d6*%YNf)CG`zxJl;0^Y zDbFa6D?dcT@lPI~Aymzk`XhOKIwOzD<2oac$m7!(c~~Bw%E%Ap@hOb_KpsDhk?+gn zlNtG*JU)q$VR?KaBj1$Aa~b)DJf6eIJ@WVjMuz0^@r>LpkB?*I>+<+mMvlqj*^CUz z<5`T{C68w^@-=xpgONMs@iB~iRUS`g}*CpCu92=`K*lfGjgqr?PKJqjO}IQGcwl4$PpQfF!E^`3p4U5 z84EFTSjK{kd{V~tF!Eg)>t*C28M7F9P{sm`JRoB|jNC6{en!3{W4jp{k+EHj+$Uo` zM!qd$-HhBTV_l4VOU8CGa$LqtMq)D7$w*YjIv6=5W9^I_lre*mPsrE~My`>u?TlP4 zW7`<{xQuOOLzG|9A7Ou z4w-T9wKWBBiZ6x_=ITf<<{?4yz+7Jd*HrBK(a8~!T=SM|xf?A1&Mx?%>)swX+hPAn zgS8*#_>{}OzO7_kqFV3Kb8Qzca*u6>BV%A8+y^_lgYeOYKR5K`JrToH&y0K6)>wPl z4eV)SdG*{x87q&T<5A4`>$O(5tnyZ^YFq-pIny7p{dKG08Ith4gOS>HBZdFg8ID}_ ziaVC9%t#a!IeIpzkP)XsjnBkh8`>+e(?4=Id4;YiSX5H9M4v%^v@1vM#>-*{5?l)P zH5N7<5SbcGOiX%o?5o;u&QOsRJ2!B@~*MsD3j%P1jQHBpzsMcCx6 zVJoob1Ma3Bv?_v4mg-OLo!-A9QKxZqpGP?tRg!C8J!XaQ7N%vt5P4{?#>SE!pV7UL zDuxGjD;%-NN43L;u7oNRcdJXZ+_rA32foW~=u*CrI%ajYm6@oc^5|ZVk{_>w9RJJ! z9RB*?S{(_RYGtCKSpV_uH^Z8N z5*_^-p2^q^*Eu&5F!cbwhu#^{L%c~-U99DZ3@k2nkCe1VvV@%;_$=NQ-T)UL&NzDL`Fal8b3|6J-H)L&xUKBiue z@j9aJz&O1~ovx-SZ!6DZT)s!SN%^?akAm?p`;z4nt|d;la+iC2qT=jJ&P-+|J45y* zXCyPzNAFyg%yf@to*vKqnmc7Qb7?YDjAkxLW~!r^m5EH(d!w0)ir^Q*2uk7kx9Gn0nM>`ThxnO||eJ$h$pJo66MZ$~prl9|trX2MR&q`SlQ#Aqfg zrSZ&%M>An7jc49Jnh9%ZJTp3)343Wgb8s{h7Snjqyl|?pQxrHwf&aG@Q2Xfo4|N}% z|DpD?W6`H}UCo4x+_NY4p{*kX3` zi3=MaHi{%YpA$F4pM}>bc2%3f6I?w?lBEIk+$n1a2|vWI=3mRe#tV{W)In zKfB=ezU4HVYVTiuOi=G1E}TlUz|am#P{4`QNMN#E*IM z8zq0C>XLu_H%Dd`$`5Q1I*R^nv7mvQnBo&EFwi|>#2sP;YWJKAyW z9_=pecI`{r4cbxdliJ6%OL3~uIa;6AtL@S{wQbs2T8mb%t-y!EM_JZrw_7%NBy0Hxt~n ziQvYK1kXB);D!wZ*RLnIZXLn4HiE6K1Y24Nu3by8xtU;76T!wtf(;D>>+1=wSwnF3 zYJ#g)5nQ>FU|k)-6)OnV))K6#Ay{2au&Ron*Gq8ua)M``N$`v_2rgSj@buFOE?r7+ z$r6H`?rCRkBHaM2=y<>ds+$_SR05-cepSX@l7sEA-;A;E$Ig8BIb7cL~YU;)AT z^9knV5u7)V;M}rV*SvmEe>q1W!AS;N-~! zCru(aaU#LoT!J|{1Sd=&IDS0AapMS%9ZN79=lrN@7FGyVH50!6s+y5OaLgEj>FEU1 z(g>!e67+Zoy4?g_E`m<%cv7mI*tmm!4lf|(bi!es`yp_q>7G5j8%w;545f_u-#+{6 z6#t*%|5N<`f1dwI3P?#Xg(mt%%>T!fW58J!8aP`3qCmSr5q|~ukDmSaKg9p2{M5fw z6!-`VP~SZ@{{O4v|B3uhxWhqE2!fg>gd1Dc6vZVT`vCuc#3woR(Wr?o%>-KWnVh?4`q~n>D)h% zQTC;Ce_sx>FP-~)a+rPT((aeT>`UkVt{i4xI`>0zn0@Ko56WTorE@D)tdn0@Kocgtb+rE`B>4zn+v`Wcqwf4zn+v`%XE`zI5)d%3=1UbALq+voD?d4mr%ebne^bF#FQE zzbuE@m(G2g9A;lS_pNf6ed*k{$YJ)SbKfk7*_Y1!B{|H#bnY+8VfLkSe?bnjFP-}) zIn2Iv?$66%_N8;*D2LgX&V7R%W?wq@^>Ubf>D<@JVfLkSe@+gwFP;0da+rPT+}Fxs z_N8+lmBZ{y=l+ZwW?wq@5jo7hbnZ{fVfLkSe@YIsFP;0a9A;lS_b25r`_j1&$>9}D zmV5N<^hnF&PsT^Ly$R%>Pl97w$@M1-+%E@$L`94;dyJw*{|CnZ|9bD=|5^cfs$r)n@V}A*Gy?z6+W)A=j~@R=?f>fUPTBv7UZ?E;r|kd# zIre|`MYjJhRl{p`4I56j0a=@cs=9eB<uo7JQg#4e#`!Wu0$)tH<95gGz)Kl#anO$a0>Z^R;vL}g7{5+j2Ye>uH3Dur+BCwo zmo+TYX%iX0M!N?1c*Ym;X^dHft52yvl}D9Pwq1D?8MSR!@5!ibyZXC~+P15|$*66+`m2oEwySq#)V5vyMMiDg)t_b5 zwq3m=qqgnpZ5g#~SAUXG+jjLw8MSR!Z^@`_yZVESvhB+Kdl_ZhmHT%xT0%{AzbT`| zjJzSEMU1>IqlJvTCZh$6yegyljJzVF3mJJ?Mi(&hTN$0t$V)Ps$HjKCnB!w3x06BvO(dORaANRML#2I;Ykd|yVh z8Tp=!W-;zmAsNje#QpRC2>bsrrkA``9%FjRTjVjOm%LdXV|vLi$zx0}c~~A} zddW}9V@xl3NFHN)$%FD3(@TCr9%FjRYveJem%LgYV|vMt%VT4RaPlg7ES-@n<*_tI zu8_x48M#~@^DuImJmzNPQhCh9$R+ZalaVjVW0H|C$YT)9DDWnE%)!X#=ebgDkJ*UOC9}TK367me(>O2U%XrupDH0 zEkkmU<+TjTL6+BYj~rxqEqmo4%WG-LL6+AtAO~4qYYXHc%WG}E9AtT|<;g*o*V;Te zxQQC3&6R^28JQyo&*G-`$iWSa_~qbwMs~}=b&TwigKdoX;gbL6+Cjkb^9*@>*_}gDkJ*HaW=hT5gqtEU)Dj zImq%_ZkB^AujM8=$nsill!Gj<UEqwOl6$SzgOF;{Qw>@h`q1 zBBEUT6MS-aYK8Ewy&b!Hy{cRJnR2rd<`@7U&_2o!&GIM$Sw5!=ghoJ<3dePB@!FIz?YK5ZvsfXT-M(&y6Ivk`^AC z;Zdf=t7^sO^)@pYG){WJQC+EA*?M-OlKex{J<61LC2bT$t<{X2^nkc$);W`8;{NhO z`smBl;UL^F&So|`uq)i~pY)jH$ui}Jj^qJ&#fPSOl-comHX%wIB77kvXs3D7L*k)> z=j+LX49X5orNb0#!qrAVID}5ry@-=_@+*nwGL(V#7ZXifc4!J6M1aRM;T*Y4U)Mu{ z%MdZM)6i?MJ3JCL+pYICwov)>=EU>M51r;w=HmHf_+B`A0B0f87(G7FMtRVVlZj&x z5Tl~-#82nmr(8I+BvC}!p~)U)EQ+W^5njJfc@SYZ;(<#~dhGVcm7}%E&sTA1l1CXI zuNh}-8y`{O+&twnck-mg)bp<#4;?oC;cq3rb?&)s$-Ua%LlY=uk=tFzM;?sa9PuLxA-=)~U+08RAs$iA zD^2d7uQ@c{CX5$lR8x#a>f?GzIn+IO&Yj5?*G3k zZvV4me^=PizY!1M>o^POR&f(f1NyZ11kMAxNSu!ofkHSXpi3Bt61+}SK3cSGA#wC`}`TF0&T0X9)dNeFUcwjHof3BlI=(%Q#8sdi66nOXw=~5}YPg4^~H+{zmOw(tgk zExZ9>OPKOE^9F!TLBcofVc5&iV#pf+Ht`04O}qhM6K??6#2WxM@dkiRya8ZS7vH~= zA#VWK)X8`UL*4+ei8laj+QB*78EzxEaVx>IwlLhxa1+5r8wqYWi{ND505F+108Hi$ z0PEW*e;scCXk!Q9wzZVg*37VpU@LC`XyFY2ExZAsg*O1S@CJajya8Y>Zve=vqx+jz zFysvYO*Mo!Ruf#p8vvH@27o2YIp<7_Q_ZvYt2 z8vs_6QGP9N09aB&cug_GB7(Eo>2)b@02t3304DGTfF-;EpprKLEanXW6}$mp5jy~v z&!K0_cmqJ`EW%4>5|q3FAeT1)jMphAXBxo?QwffrLU7z^1jkNh$QuB%Cla2WOE8N! z0A%t8fK1*1kTH(($M6P#^lZY@vKVF(OwC}(8vs1K0l>{009?EQz{MK?a1<-etshBCIh!pKT z?a$gD5CQzV+KBc=?RxQB@hkBo@qKZ>7(~>-%fz{2uQ0`S;T7egP~?a##0nqMz9#;N z7y?g-Z;3m^wc-M?TWl0{B2T1hFKW+eKh+-5V%nEc`Kf=WDDdGFpuQ}a`^6H%Q<(c5 z%>54L{uJhZ!Q3yH`%{?vQ<(c5%>60M{VB}-g1KKX_Y3BJ!Q3yH`%{?v9nAd>=6=E4 zFPQsNnEM^f{SM}S!QAg)?oVOv7tH;Fxj%)u-@)APVD3+0?ibAc4(5IbbAJkRzk|77 zF!u}Q{uJhZ2Xnt*?oVOvcQE%0=Kd7seg|{EgSp>fbH9@*CJ8!H7&-{r?!PG-rkif@ zA2I)r@mwgiPsVC#mX#WjF`f&hhGmTBLa8AcaK>8&BRJ!25hFO`t(=fl zO~%R?QDv-@5kX zJWtCQ+hROV$r#&WJim}Jw#9gUE@Nzq@%&82*cRh?QpVU8<9R~H*cRh?T*lZI|hBvmwcwl&ATZ{*WH@3xi9+XkG#dsc&QMSc+?w3)v#dy9Wqil=ujL2w&OTJG= z*%ssZwv4hZ#&fTXvMt8*Eg5B7j3-q_*%ssR$SB)lJZ>3fTa3pgqil=uz-Gy|7>|@u zw#9f5cZK}_e?sejZ;NNe?{E&-3*zU|FPOEa?C!6@9HdUm(A?_BFf$SAx5fS1RoW%$-_-rWi<3;x6sefKoUOhs zzJ)nV4CfnNCN98SCPF6wVAir!{heAO_G*7nhw+(-XtU2JIP*M$GtMPA?i_-tXA?}> zPgLtCbjdz~i}w<&=p&dHA*hE5P6`p65F|Km55eqSf>{;Ep+|I1nbU Z9M=D5u>P;J{y&xV|0%5hXR!V+S^rfcd-7yl=c5g*8eM5|6j!V|2)?Jr?LJ&k@f%atpAT?{XdKK|4i2ZHP-*jSpP3z z{eM2||M2xupC+AVx_Tkd-%=||aO4SM;c~N(_Z0n{rMyJ;zZ~rkfZ86||6YL(@Kc-s z{w;9x&6u}ejhXvi%-y$x6YF3RD1=QQ2XpxMv_B-Re@(FYRf}b!!nXC1r7vmcdl#0$ zH(&`Q%ia@g+q*w$-TR;gFk$c8_~8~m+qMY1-)sN2X)FQKSOTQ61W02Ekj4@qjU_-DOMo<%0BI}% zQdt6|o*)5ISpuZ81W08GkjfGul_fwbO8^f`01rz54@&?KO8|6rKN-T*t6UUrw~O&} zU1NZ^Grr6DHQ-wr-|VE2y=O7LM*aZ2y zX!irpAx;iz9YC`Q-OfRl(+ORpUW;5r3{|zI;CT zH^p~g1^grIej9NX@Jk{KcEB4D6(B`;5ewi^?avtXFV$Xy9q$~`DYhc+XA>fSc@Yz! zR4f#;;T@bKGKCv&{4Sz?y{7#}dq#T_eE&U+&{6H{+E-xrzd`$qc2K)QyAW3YKF!j) zHACA3j<45h5hI{ND}sf8hBjFnr=@EWD+%vloPJsT6?_|iinD$mM67^s;EeJwRxgExf4>@1{i>;MgMGhQU4@tdOVu)1_vfh7)Lb=7^&oD*UzI z#Fu-5d>Puqm%DrUa*M^6>jQlGR1aUS^7G}w-F!KF7hi%tzWBQNvZISH8+P)g(d0{Q zCtptQ;7e&cU*;QpnYDv2Q@8UacN<@_xAG-z3tzCrOU+d_(MA2sM!vjt7GK`nz?WCo z^W~*=eED@7U!HB{%Tq0U`T1JDJlV{b$D8=_lSaNg*1(rX>-qA?8ooTdnlJaR;>*xV zzI>&QFJD~2m(SMn}6JoD9OnpHt>wy!|`3Yd&IztAC?xWk`~zZY$wwuS=Y}r>!D9HIrh@ zYlVcnahxCU*@VlViygqH67IOjd9J`89x7Aw(W|6TzWM{l4}sV4vsXzHXv+zA)~kzv zR}!95AacP0+GKwAC+GY}*#CxhLae!51#-w_Bwr475|XaSp$^VjD2Lh^Ss;fDM&`?* z9gO73q3w*!lSAw);+iXm*jL0gM-H*Ch-2ipDMO@S5&^j)8svKfp5!Vzs#J(b~)8r8Qinu1rA@&t4wyhuA*q5^{*`qb^Mjv3=B~$|1Ioy6{ohKI(i=4zYdI`FAY#-G?I<}8$ARXIBHIR<&qv*mzY#-G?I<}8$ARXIBHIR<&qZk~A*gmR( zbZj5hKsvUMY9JlkM>UXc4!tsl&!O3jfOKphRWFl6Y#&YEActnqPtJGc&~!%rB8S*M z>in}DV*9A`9XZ7IQRmxoi0z}!Kgl7sk2?P-huA*qd`k|oebo5}ImGr+=kMhZ+ee+h zlS6DDb-pQw*goofLk_Wh)cLv`V*9A`H95rgQRl02i0z}!SL6`eN1ZRrA-0b?e=CRB zKI(i)4zYdI`Jx69ba)|At&KKkm+ee+hCjK9*Y*H}pUyeB5h1xra6Rsy{*Q^)1jAe;(^9~l- z?nKo7wGjmSj_gOVXk5rZ*%y9)-M5pGE*Bmw^eDygvfB_2U2lkxQ%&u@UO)ND+^daw zv-*XkOU%rJ1-A1Flg8*Z;Kx(C2n|rSb*xFA3qSi{{^*M}7@*5~AG~6EP+GpH?wX!N zL+2b^X!|cwY2FY*l2|*<4xbT1fmc?Cf0m5JT6l1QN2!RnvI*W)T|pC#tg&<)a*DVX zA<#g3^X45}k}(A;4$k)|b@3+<`DF#a6&_d%hZ%&=h4&HY(P6>s>0a&Y4{Xd##vUy{ znCDTv{G`L##ExaPJ$Q_qq}cO|{GO}`n)vs#lnYYsPQ1+AgY#?;CwiF%!yoCe5ck4w z?nez`;sfT4UnTA=J2;nV4ht0pb@5Z5M9ZozIIsDFmhvqJe2Neq#?m~$s2+b;;<5P$ z=df29KUQt*djHM4&ux4p`3V*roXsDKZ>}1-E#Jtm8o6<_Xz_zzoRe9fD7xYxyy?ne z&6*6Kq}oug6%3j_xS;6`2GJKpO18<-|5@eWcd8RlRvv^u-BNxM?*cC{ynqgRt+vP| zs2RbOtrH&B-u;X5srJOP#Q)=zGDSRynf^L48_~SJqg|u*Xs2u0u-aV*y?V7eS$S1? z0P#Gw;YR$Mdw2_XEmc8FS6IOwUzbgXXPn|Gc&v%15~b%K-fUBuz6bcyAQtfI33nys z8K?H>fi2hFk+{G7@FxE5C>d`OL_Z8!y0EsavK$XY}>x?T$m`l;P6_OiF{`x^)+xPx?YVh(9KMQqT8m`KNv|opdW6gAW!xO zNR~Nx^S*B+8(e(2$)i-pZ>ggg+riVUY?IGC({uhWlf7oa;YN0a<90N$m_UT8 zRXEZ)7&hqr)>p52D;fTz=x~Eg{we4y2p<%o5n?AXiSkQlo397_<}<|F!k(`O6Yb7F zT+jY`Dm_9md~|P@;R~F2e@0&CZ<1YM!QnM_cclC2Y-#$)C)}-l?%Z{+J)S7tdw4Z_ zgR0Bu?jVBX!ktiWyziTO37$ddAiou&w?Q}~_+}8=^ITW7($@1fXTO?vwYh1pKM9oKK;lx@+GxzFDR;*&G&@w(^tLxUgDnF zN4C-j7_Gkw?xD&HsQQi9rp#LVcH+LOBamd1(c9Lbo$JjY`|ZBNG)Er>*@;h#fKk|J z`a@PgZ;9*#>!*yHq}+OEO@f3qMfn0Ij3B}uuz>Ih^Z@tNJ| zUaQxnhC`n*_Td#Q{DEg1F#^@&r%>Sr9}@s^y{P5l_`&lQ+>&T{=m-SmDwK6Ts90^l zhnQpmy=e^w2NQ)h!6RC)H~XkeZ%4lmwFL2dsL&hq!&@4IbTG2Nuqp^84c@#}PyoEQj+Q4Lw(6>Wlq4L?41V2zoHC3_#3TTHVhAug0ZZZhY zx+9RtaAa3IP*k(gYx|;X!400&N$M!jb>N2$+3W3!K$qc0ccRf%$nGdyZS>Ncfg80roY?DE<_&U)b&u0Xf~iL8ve8bp-fxNLEfs&KxV#B=7LK*gX{y} zI&x$BLZM7w<3r?BxOI0M84H9m8!87PpwYNz^^BV@ltLWo9|k`+qDUVFbhF0f31wz2 zj`_#v-UazPW*+{=-UNtWpVeW6vgRUCD;PI`s=$L7S*+|i++g|}WbW9lxA?5o*+Q98 zi@>Z_IBa-k31xDV-eUCj8WU#V? z`!TifgVT*H9aT4){rJdX3xNwUQe{rVTUQzF{WNxkBDgPeDspV9fOs7~zm+uwk5!Rx zyI$w>BS2u-$~p~MwpN(P%9xDW5`WN*o=Ir5cYl9RB-}k^qENgaAQhTU#fGhnTs#X- z?tq|NPf-*0(E^m>S0yUFYYqxk~a<3Yyt zL}tWa^kO$dC>+WhhqtNrkKD*naW|pYW{kyS)!6BP&W>pszIL`y>TI5B?eLk1{)gHc z?OC3_DbmyK%gmxenCq${EN`+h@&46@36Tya1l2-TS_XPkRiv}C9}M1~jlRABvIvFM z_&Rp`0ucJ?>G(WV7H+7vB7tyb8j+sAcdOCfZiKrhqza|f&Z#$u+^rTG6zt#`f{aED!hU4$gu#l z&bSt^+G_XpWFuzq0_?p&BUc6V>TZxXG!8+73%y`=bYRG6+D{S=n`v0#pXP;17V3eH zh_!xYqPL^N>?R>>n+2UsU+MWvXi{T=J`-$Xp$ zk7-+BoiEU)!6yFLpq4^I zR{PO8t$@23bg9_|MKh4y1k%=+0U{#^+XJo%jcJ4=s4;h<4d~Lr&ddgsSUqwhX;av- z<2QrT>V;BU9W=qq)D5fs=;wP4v<0%Hk94m&YlPCe-WTw7_#%j6*#<3u25@v(Y?lg# zNw{IUR^2~owNRGgKFkJiqh6~wb<$_l>oM4zwn`{xp7`6^$O%tQScyJ3`fCkF1S@Em zq1kmpS^E$2iHE^T0Z6jF&`fex2&MdlW+k6UuSG9~28rmQ!AP$$rUtZtKrk^`Hu`*_ zDb)}VaUBV2jS()uKsZX-=~Y5m^}e5tF29*y+Yd5zLk;Sm;6=kvz6JB$ksI~pVDFRj zNsokeVi&?$>UDFfW}k^yJNb@!BNFTn=qtf zX<%m%g=9T>5F`FCQF;}e{rxOFYrc!f-#3dR;$p~vcF`=BixM#%tAHx(0*`Co*1oFU z1RdZCtlDkGdfhU_^PUP197TN-QM|u_2;MiS*QkA1iQ9r*HcQkz*bQIAZiAbYtCaIl z3I3%HKw3_rPgx!DhtmciBd76Spn3P$0Z7Pv`qLJt)j{;m(1HPo%B^Jf>Br8l{ri1T z5!p4NMq-I4x}jx0^5^_23)n z%@`xYp*aJPrmgfW;;Xh8{TRq1UEKy1TVqAqabFt@O}LI3fQX&hiXou03sS%gj2nP- zEo|*UyNRsLk)B=}FkAx=vpKE1F$ks)KrT*i^`W|ch=NY%fP&B15(#zZo)6)U9DSt~ z1|#_VKA34R975Whhgw>U2u2apx6cTrVWnqUi{a}b+gZqc4n$Q;L2W@pLC)D=SsRUW z-kO%y{HB0;+I|R%lYf9LLiw0eS%ESAC?E0cpvocua8GagJ~Xk}2RXaKZ}oSk@1;LY zl3i_9s5`9>wbPS+eYMe(5rO1vrnc40U1bCUR(hE3#=O!*{MleABgDTW6zv?Hst9KW zAu5~p@9)=}LhTkdrkRuWK*B+-BK4UhG#lMoG2TL{arffonxOJTdQvTPk|r|sVM5>u zfYTa%LC9w#vj-(MAkeWN`cQRnBx;WJ<8wFADA_@#GR%?Dut~d74Ro-PyMs_VI?`Ytqj^tUlS5CleC-5b_7Ajd3+ z#zO`e5A-x~dws+ou}vzW%uY109wSIUBqlgKyg#c0N=H4EO49t-1>5l!8SN-@HD)Yi zZuMc_kZIs4TQO^mkkPk4eFs{(nl_<=+e6`u?ev6&UXC#jujtFzMj5^yAHE`#U*A5t zRVZUu*S4i^p$D<8Gl)^f@QvAw_Tf)R>?&|mV9X}`y($RZ7iJFhV)Fmpq28w;g3bf# z55UDwBChYRvEKfs`X}|TICaQ{;NIi3Nt&+B0k@ZEi=hS7XsfkmZ9P^A+Oc{c(8Ah& z=m!^TS7KfNh<2U!1?@IO489vH{`YAQVLjm|h#~wed;wmC6nRJcJG>7)@Di9HPQ&bC z9^wp_!GB=6SRv{~3nCA1gJ;1m_#*Vd$KU|wA|Hq6!BKI8_!2x4?t*+ej_1aJ_@gkx5Qumy{Bmpq#Zd0E2IJ*c5rw|oR(sroMNA%=yX!PeY&!Jza4eOj=*9^ zW3eN%*il;Sh%NT%?RF#=JF1Hv;l+;jVn=?lqrlh^VeIHI_DPX;)EGO0j2%tJjx1wG znW2a?|94xis&?EQJBE%OPsfg}W5?OCWA51TckEa^_PKm^j2=5)j~%xIcCbAUhtA9UI7w6J*B>vf~HYv4rfnLUxQHd%K|>d%%uEWXB}3;}hAjitM;W zUN7~Esw#r^*=BZ}BRl4i9skIVg=EJ?vSTFK@sjM=Np>71JEoEyU&)TOWXD~yV=&qA znC!C|?Kn+#%qBa2lO4;+j_YK{c(UU?*|DGOI8b&>C_6rs9V==F%yf#n;N7cvSZS%bPlKQ&(miiYBr-*53TDF#p(S8!1uXA2iF&g#o+ms&@s-! zIfC8b_kH4H;Pz{vecT{!5qE;q?-dV$&!2>5@)GoucmA1slqZ#+BLex)$=BikWA8oS z<0`K9|G9V9D@*QjZ+MN1ENn}b+-+=7wPiIU$rTJ)ODkznS$kKqEz@$B;t;~h*pV?M zfT@9y03iw4gcM=|Nk}1$6hcA@B!PsN6hcDU?|WwU?#i}o%9}U;_kI7bJ_#dV-I+Ug z?#!8Up7WeD>IL)s?!uN?oPPeQKXB-=p56%d6GZ zx_qyCuP(1q*XZ(n>V3MrR$Z&hxQgqtSM}<0zuK?M>(q6+JfIHf@}N4X%lE7I>#|Sv z>GF^|q|58o^}0N)4(sv;b%T^Lzs#v$<^(Wv8kjj5%$yQtP7E`rhnbVa%&B7LgfVm4 zm^pdOWFa&sl9|)V%t>YD)G~8|nK{kOoNQ)JIWs4onbXhANoeL&G;>0lIW5hcoMy79 zUUr%8|GU+@b@{*KJE$Agjrx6VQa9=HW_7bJKcGIK%Ujefy1Z50s>|EdZMr<7j_C4s zb-OO_Pr0|Jo-BD8mJz~^8rjouuJj&v}Sa@K+)fjBp#V}?41Iv7mT>Knt6 z9VlzjQ4Us9u0i z+BPXiaTSffDzqay!~vn4x(>SzC@(tJ0h=rk`(?d&u0)4Nk8BJMbwDZ68Ns%C0^_}6}Vx2`$Nu9a85oo6PNw5M&IA@44I0u7;!O4-PLM^;NU8u2jq%)f_DcXg)3XHG|2sk*(nME~eorcYK2u^cm zf?irj4KSC z;&4wi&zbH~jVa_wzFkNXc3`q`6XRSLZ0>Fe;?8exXP_dOVSdc8l2+IIRfM4ovJ&t& zr|eeVsjR&@%K`eFT!d;1yffVa^{gnyA_tM685DL#NYFF?9KanAn#SBwj^LoB5itW? z$Z?nh5ISAHQ*CoI-)EEq3YvSYcV(C}iF-D+hOpl|18uzLMBWq7a2J*nxK5Z~B14@C zeAtbci)%6AJ2RZ|7NS^B)GH9XP*w#<=#Gz7&X6zS?2>wsPAxmOp)GGTsd zYd1Q~5&Y83Nx=+;bwZ1C*~QB zEI3xiVF&ZTP8~ckargrmf$VS#?D}5wX=~Ht+&$Rzzs}sHeeXn zV*|E}cM(s6cE-7n9pW@F+FQc&w*V6cMmhD&2%KK6!S)V+C5Ccy^LnR_9?Sw=3V=kc z4YY!_tP3_bM_34z0hUg19%}#$8)H}yvLt}$uZ=XeGCi5h$do_?^ne+}$G3$P5Pr zv%0La1@}cOh!P+q6=#E7Fip9c6&r4BTj>C9ULrCi~mpDKdTpe?vE*Kb333c<0TK`oXSRkPc#`I~pRD#Y{_B z{q5~zoGN605_#c4^8HK0EvGpkqa`&s#@Yh{cmmo)S_9w(fV<7S9Nz&*G`EOvg*6^- zZ(>MVra3^NWmVmflsb8OxO;B^$7+W#530Jii}P}r100&1^HJ>UVGc0pbViZksbrx} za>~I6)&{nRw)-o?EVg_7xOMm@9f796P^XLqQp8Z=QR)t7IAES*OSA+4?VJl#6bZ@{ zi3A#X{&)wBb1|L(Om%>dG9Y>U_g&px;h_%D<}{K{A;TeF&2r8LuLO`Q4Yz|rivuV< zF*J@yn|Sj^I^dc)$2c;EI$)R}=gEdM98k-#wOx3i96-vshAak)4kAf?e$faAWO9~F zL~)$q>4;8rRvhPiDoZ<`Si7Uudg1?Fi#9$6jr}J3EPF71y&KroJK52*)z8(p)P3qA zZhO<8IS%m3ru3W1q~co_F*f{K*4eI6`cCn=&2xZWE)WL|9&LYpPsff{LG{vgXZy<| z04PXX5dgCskePGXQCo0Ig9EpPn?u1}4C5AXO#$^n5kR-_uHg=d%?toSK5cjh12E44 zvAMv^p_1?p_A&v4*sYql=fuaJ;Q;BJTa3sa@Xu5QnY%FLuiYEi9hm2U_go;mnk=ef z{DVwktv%EPcl)=1C-q;ejbj|ZAbiF$b;Y5%i-}E6rcn-nP;MDJB3o;%e6*&X)lNX< z-2h@>9-0XR$95e25TinLXh5kj*8xJ>hL}TG0c2KIGO`j?#$Oyl8qOO~!pk#y+IQhqscx(Zgd%4+ zKw9U@W7h;(L9BFgf1T`YE1dJ_$oLax6QV65K9>{zkb3jvtMz+Efdgn3f--_6W`-n1 z(L8^JNYi3^!Ngz!1*4(@ktz;(-c{^u<@uRzt6<4T??p%G?n3SCSpR@{vE!?y>ZS}@88J|vEViOqWBgp}HJm4bf$m zm8Hu}D^r()t--p?;7Dev@3VZm9ApjBrPuQ6(qnmaXnV z4_*FUnOKs)slVxe|5g1}mv5*ybom$c7hV1tK8VzRUA?Z$KdC?I@-_9EF8`?hsLMa7 zKj`xJ>i4?*o%)?FUsbQ_@;}sn=<*fyiY|YveyhvhsNd-FW%aTyUs5mW^4IFuy8M;; zl`em&eyPiktB>pQ6Y3MXd_+B>%TKCL>N24cy8M*-lrBH5KCR0~)uX!njQWf&KdU~g z%g?FL>GJdH^SXRYJ*LYqs4wX9s5+|4$JOJy{G$4zE}u|O=<-SRq%OatzNE`9t1s*F zE9xt{d`dl~%de`h>XH+*b@_GmbzOc#eM6T|tEYAOP4!J(eoK8zm)}<3*5!B9cXat( z^<7R;cm0V_Gbx`} z&+GE1>ZiK=nfjS7f3AM6%U`Hp=+ec-UQ{oN{yz?Pz2`~t{9R2}zv-Ugp!V0ZR+rgc zm_4^xZPsFIiZxvQRs9w=&;8u|ulQLIQy$gQPs#;OkaEYH0Hd7C*e16GTM=i%yYI&F zc7}t)>|9ZX{FUvf=_qFrMBKpb4sk9)$1gzx+=I$F(!raSQ-pc4331peu)z@LB5q(? z#pI8)jdS+mG&Dvj$~g_!=G2MZyU@Xl)^Xg<#HQAbJ7%3o*a0`>1OFY-<;3{s6WRYbSvQyA z?Hg_Vnuy!a5NX?OZNZcOTWxUy8v@kLTx`J(m8R(k*8)KvR zyagqI6XM(zGDc{gzb1qU&uGh9^UoLM5k)=P*c}P4bZ1r)KS=#s8@gR)nl`p=@17U~ zuUTG(St?LkJziTNnIzq3VGQ`D19~6Sc2xdOzG(;HN*J)!-C$NAIuQ^>Q4(Eqy%IXz zh!_aZtTmuw?Lsibh#VUO+bNKR3*g|#R^I^#fnhKz2F8C0EW* z@ZnvDm%j#GeLPzFm(d7r1Q*z0Z3P*aWsO5FJO|eQNp%wpA94^3@H26SS1q=%aReZN z|Ci^VL&EDue?e~H1d|;w7zcp=T=VE{{&OYlaND>sQ@v`g zRkQ~Ps5l^!QMWW~idRjwYFLPTyTF(Ulf7!8bqxD-J}k4Y=;(=)x$WM#s86FwIadf zI=nqF>QFaKLxK0e$-|u^#*X%?`FsJIhkD9B-h?IEGJHg~8A_M+I&3ClveG(+_X;%G zp66fWpF`gQvh(K-%^oRV<(RvM&L81b+pMDY#xTe$-vvA{O(3z2ZJDEn$Pm_c>!Fei z^ufU+vgD=HoZP`PGQFz8lBEyi;Zp7V#XbIVJS}=@hoc#z2g}FX#7smM6fOq-4M%;$ z5Oq_n@<1csx4CQ3c%N4lSh$H=c=sxB1q2}cvv$&W%6;Olfw>j+jP-g|er6R=0Ur#^ zpcoth=ysfk%T^uV6iLHqka_NE$JD6)8c*Yl|77R~;>fRp~lvie^n7x(RU4_Ug(@cc`* z?Pu}!U1BwoVPl2*1NO#O@$ucJu2S1*f}dff@;VGEkqm*h+ME)vI>&-h*WR_l-;Y9z zA`4m^z_S7gjb&6bp;$hXp1j(bgNjB1cgAGJs3Q4H^(+YiqDA>#G5%~B%z9x>3)n7L zw#>fhitMvw_6Y@3VseQX4n$UrS}pa#tFRRaL&6KRqHNV5Fn6m`KylfWnHLNM$PUv2 zQ67%0(96YLMy0_NuhaEhEL)HhT`}xT{fU8gwln4{CajcK=znvC?4FHnD<-Va(gTE= zKsI`6T4%dlF=x3~)mz7KiCL=>*HHzti#uIuRb9But6EODlXV=_Va+GjDcn{)ZmG-; zHV$_A#&*DbydO_8w#WGYI!+RN46z}Tw#bakJ@~Ubp#RldZvULit_?T{% zk6h?gGpr3e_!>Fz=)xUk{z9)R(I2!Nnl`~_#wkJEx0b(!xhrxCWNyeOCx!(zg4i~Z zP&BQX#VLVMnzP`o+*q)!bYi~9Vm*muVhP+VdJ=&cvqt6VS=7yT4Qad^4Ql12`C7c< zE)WtTz39~8%v$_Uo99(U*80{SQN{?Lhy-vGVz9WMV_eQ$=~H#3zoMc-f6n9H(!FuT zm@{M(NK5vk4{s|NwjxHNLN5n{l1UkwqR0&SLbV`m_t(1$p-^gov z13?fc39Dww_}Q`$nA2ECylofNP+VKP7H7|r_ESqth{KD<&J;nPx+cqx-Y+!!e^BB5 zKT58?t6<%okJo>uXN3JXcKgZ0|`y2!9s3B6jBU-O6&+w{)a zj{1&{-W1(35ny_;wE;1#rA$S8J32llK}E&p3FnGr7~oHvr-CN0vWlPt<4g+rn-S%u zOll%iWY^w2dW*bV5yk}*l%{}pyOs>woZ55PB{t=4@`CJQabR;%w z{bQZXKIXlvLQS5&QIw?<@88I4nj8(2r)|(Lk5?}s=S_TE1O+Rn8-E~3b}%}5RD-ND zxEwkdOTsrc=GS{wz^Vph3G^H*SdR(gNUg06Q}MEz9Ubu|a#=*YEQ$J7)a`~5=g9c- zDP$j}XqdcS)I@}>9^SR#PR7ctzrt+|lWR}*$AWDQqiUqLrNXmj`J)y@>PJ`0z{=C~ zWM~j-cU?}Etad?Q*!by>5cK&?v>E+RnE{+i6093hsTBzE|Kd7~cGZnrC!!XwDN0vz za!PD#-S7&pnr3b2+|k}GD#1Au*SeyMFcOdg?#1+w;FNRxYebS_7`c&Y^N*7zxl_tT zNSFW?S3^WTYiVDwerlNv=fHnmP`KW#|BDnke;H)aUc<@Y^%C5@Puh2r zOEZEFFy9_!{ndJzlQupHRxM!Z8p znasBiuv@x&#kd>?MeNP*EXW-<%t0HQDw;8SN@H-`G$-R!qP%e1xUmkp8Da;;%%z8j zR3A6S86@lfxa;FaJE&;6$6X$m;h>?7vMM%?o8q98iOA+P2pni>)vqIJrf3%9#yf~i zWVV2f=r=}Qtqr&LjLUSCSBD}H>XGR zmHO@oQP3^^-4awKn@$mYuFkX>5Nyi5VB#Ka7oozkDkYH#l1e^E(^=;a+bv&cjc_2~ z25g(LOLT0r;^gcacTnngpgf~D?A{*kId5dQNd5Yr&NfkI_6D2IJFUyB&awnv!D-qk zl0b(X&}tdmVe5G#qq;_L50YBze&>#e$l@dkN*DNpe{;pwQ9EV%%ab?z(bQ2fw@%q1 zA5SjT5J70ZCC8*&BX0Q@UvY?&Y$<jaLVWb^{fF_xe-MBCCy@eQ!ax6g{Pe%VU;k$!0|w*2pMW2K z4*vXQ`1RM~-{1UiiwGDXN}wPA|KG$nm#_1Gym|c3ZxX-ozlk@m{pcT4AJgUkU_OKB z|L3X46{ml^;(39Hx^EL(_ZYD^4-jwn0V40NAqKC9$eR{$fel3Hl@O~}K>W@$;`fGm zyjTgpC%^aeWcU8M{Y4`F9wzqh2r)pt!~YT&HCVovH?VC7h+S!1oCmPfszey4tg z#qo^#8Xf1ym(XXbWO{uGeWpsL$CuD&s$|-}#BRyf$QcNUUHTVp?v`H$|I?SyXQ~YT zhcBVeR2lqtUm~La^fzB(r~c)yzJxwgW$+umL|9+>i!afsfBCa7q0dwq`Uzh`pQ$qV zbzh=Q|LIS@#D)5o*L;bP{^gIpM63Sg557c;{^j?+gvnX@J6|HGue|C@H0fXd!!ZFzss805U!p|+@}MtKtbcjH zmnhP|e8iW~IZLe%`w}{5sdc|Ep>vj6AMzzu>3i<;C3MbG>t0_%=Pb28=u7CFrPe*Z zgw9!N-R(>0oTb)XzQj^p>rP){iT>pdUt+QRGWf^7gw9zy_&Hxf=PVukBVVFW|LIv@ zqCo%hLtjGYEFJs=B1ix7v@fA^mJa@gFELAB`MNJLQ+^rxq%Sc;ei_ExI9>n3l$b8R zWVQGbI%jECvoE1@mSzQI|8KE2s*~>gw^(;_3dn=tevc9({3SAQe+L}!dFw^a2>v~+ zy?@wVaww0)7cs>?9W5ZwUSzL84=5);KpmRE`F4|iA?(6k_Qm$)_IvRr9wwIHZcg|7 znEh$+#V->f_&xi_L>c^sQwHCF0yo$*0@*SZ400~n2bL3wu*Oq^>^aZVNL=tv;sh@P zr@R)~bd%?H;*|!_0Zxn^R9a9UQnFWX*6Hxg(U|6#%&j_Q{#KnnKY5g<*15KBm;1Li z>i;(B|LQdSTXjnQPMyNv9Or3{z%<8Unxiq3$7Jf1`R4e{dYwwYL8sMk z&?)wl$8GA=`{o!>LU@%@u=pgRC8>qIY`wUs=ECWACt0CU1N&(NztUPl_IF(rs$QTS?!miMO`OF zt2!V>NF9{oLUo%I?dpgW9qM)|I@KMfxKoO-x=V^3>TW4^s(VcFK~vl-MMT|aiVvCM zep7td6d%!rrKE_e2c+my4@%Lk9+G00`lu-$HpRzG@o`gpLW(`)`=;nopOj*+`m_`m zt4B@o8B=^#ic8ezq_|XlUW&`qW2X3mDGZPC-ANu}EXiApC3%aNCwYsPCwYrkBzcQh zCi#k2CHac`l6=MYsHbKBKV4NR&)3QS!`VKpxbZyqOZL6w`Pj=@;9H6ITWC*20>5N^ z4=Hf3^?oa61+0Ab<1BLO|5ANdeMDWYBC2YJgWsgWB0DaWa}9x12b!Rs90LtS#yE2Y zcPeg|*gZ(|+(?Ru$mtHQk~J2znl|ysb%A4mpC4Curi16C(kdc(9By#3O2DB%F_Fa1 z5f09j>8aZ)Dt2Z&If9=Yu#&DDbML>w*;SOGtX%-|3 zLMeb;I`f?w0%w;;!W=;^UDTPQib?j7Li08eInowrO(Jrgr#Yt!QiUJNq^!U%aEueC zV}vtZI$Ij-2m=`A<>j?!JATty?YRI5YYIj$B=F6v#)~T{5Iy5G2WA6}9-qa`g@4Z& z>A-84AvXXs7D*0_(#Z~_hUFFy5I}t$@U&!*(g=2Yd*N^gj>9w@t$E<>cv%a_J5U=6 ztU8iJ=r`34DRJBs4sl>MOvD{s6%I5Nj&mjmgk^lN0^Y6f7OzFLFw+??fTq4_lrv7o zR-8EgoU#rH`zxI2j1`RVL|#Z?ZsAC0jC8+P$2)5Hyl{#GQ^8PBS@zw^T9pT1&XNXKsNsZY;u&uEF6%dxdn&2`GCt4B-N z+c8%QwyCS9J9u(R>~n#kmu^dD0MfG#s+#0B>mbyIe2l# z+R*QU>Z)N5{+r1*5Nmx`aEH1w+rf3iAOSQBVy(S_i-$Rta#PX#dggXiU2(dDm!{0F z!&591Y6r=IqAQMFr0Vh+4lbKDwn^Hu0J4&)tsQ@LB!lT9%uHQA*1?f8*RF+NA=xz7 zha1D4B;kyWa@H`P?fyr_bFEy~gbw}cge8P`bmde>du!Zl^ZiB9R5DcjT`Q+Mr7}cy zL86AEJA}f6BeO#0^U_5!pBLn+caL#OM81{;V4lc(HwMIIc-aUCjs@(f9=!~3#$7ha zDH5o^xSd&zSGffTYQ4tGTS9G@jdaeI71%Em(WTjr=2w)+yz-OCS|<12E}r77(r7ha*P{#<(>8H$3fAsTN2qpy)@jjU89`>*W0Ka40;Z9 zPj(iFoUSEft)@<-IZIK0LDv)~Uz&vGqq!@ZFMz8s(iUxkRT&-X(P^v57NmJk0W)O2eV3Ixxa{ zmq_N6hNTWnb6`-MWfQR(!g-%2HMwqGb=@?H9z5wC1-a_FJO?_(HXHhYBq5AwQN|3B zuMIDOWCOzVNv>4l;?@3ai36NvHxRHu(o0SHRK3F;h!#`rh5(ukv|80WTB7xGcmc9b zuqI&zwqSFNa-dbruvsnjLAc(K6IFbMvsvW6@w-gh^1H85Y#U3CrwKn3F1P% zSM2{P>o)b@7U6%JIfB&pjUW5!advLpog0Ve#^t$jdT!jF8^`Cy^|^6={|n;G{#Sg5Wc;NY zk7@Cv=b0O?>Beum@tkgaryK9-#(%o;pl*Dq8!zg{kGk=sZhWa5Z|cUMy78!Pe5xC- z>c+2*vBv0rjkU(=a-20zm*cJRx}0E5(B(vHqOAW)>x1gQsekWn=Llo{KPM7Ezuyq6 zPD=bzCJyybGA{K{GEVhSGH&%yGLH37GOqPdGS2l-GVb+IGVb>JWIXKQWPI%5WW4O* zWc=*mWIXK+$@tovl5w{;C*yE$PR8ZloQ%``Kr(LkmSi07t;x9Fht0fFA2V^l>Twev z49a5SN#C1{C%q;aPkK!Fe1O#Ha|x```S-!O6J>S+^q zPPtN#<2Ow_y84z`&+6M|J*)4S^{l>Y*0XxXtY`H-Yof0AeQS~~e_&14>f)r|I%JYntf)(^Q4<|Gq?a&09TJlKHLeh&!#Fza=E0Q-pgInS!H z&Lrx7B%HsWt1lDxa~DxR9Dl0DOCVjoD8XcB4*|M_q7sW6RNpu&29|P}UDO0~ybE

}!u2xj2PW9B#*bvYxTQh;9>MO%ySz>CC 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 grzB;5@8~SN>6umz{nAGl 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

OAd|_$vkCa4Ec|HVLn*h`sK5q9Axac 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%0AR!j88%wL_*C*oZ8>U;7EoFhBMqmWGZV^u-u$^Pl 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 z\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/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

joKWAmFxxo3zVV=JKn&r8^_i+j>tAv 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%0AuXPqn&JcN2Gg%V*wT@y*?AJPy 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 LLM do you want to use?\n

\n "}, {"id": "ab7feb46-14af-52ba-a67c-ed97203abb1b", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "604afb48-6829-54a6-b55b-447e57aad294", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[chromadb,mistralai,bigquery]'"}, {"id": "3a68caf5-fa2e-5ee9-9bbb-7b85ea07a5ea", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.chromadb.chromadb_vector import ChromaDB_VectorStore\nfrom vanna.mistral.mistral import Mistral\n"}, {"id": "0a4dc6a1-8cfc-53ae-a9fb-4eca76807451", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(ChromaDB_VectorStore, Mistral):\n def __init__(self, config=None):\n ChromaDB_VectorStore.__init__(self, config=config)\n Mistral.__init__(self, config={'api_key': MISTRAL_API_KEY, 'model': 'mistral-tiny'})\n\nvn = MyVanna()\n"}, {"id": "78dc2876-5e25-5595-8657-889186a4f19e", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "45b52fa3-74ea-5bb0-82e5-518731dbe674", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_bigquery(project_id='my-project')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/bigquery-mistral-marqo.ipynb b/notebooks/bigquery-mistral-marqo.ipynb deleted file mode 100644 index 942e6b23..00000000 --- a/notebooks/bigquery-mistral-marqo.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "fda9bc52-4501-5569-953e-0f1ebff8b5eb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for BigQuery using Mistral via Mistral API, Marqo\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "ba570f08-fcb8-5fa8-967b-7c3e400d610d", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "0ef5320d-f0cc-57b8-993e-f938ff50b6ba", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "fedb304d-43d5-5d20-9a58-9967908a4dc5", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[marqo,mistralai,bigquery]'"}, {"id": "696e9c9c-d724-56db-9a06-10a66dc15b0a", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.marqo.marqo import Marqo\nfrom vanna.mistral.mistral import Mistral\n"}, {"id": "de83d46a-6116-5978-8b9a-f0f586a583bd", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(Marqo, Mistral):\n def __init__(self, config=None):\n Marqo.__init__(self, config={'marqo_url': MARQO_URL, 'marqo_model': MARQO_MODEL})\n Mistral.__init__(self, config={'api_key': MISTRAL_API_KEY, 'model': 'mistral-tiny'})\n\nvn = MyVanna()\n"}, {"id": "52c90850-edce-5fb6-b8ba-2de30efc619c", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "45b52fa3-74ea-5bb0-82e5-518731dbe674", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_bigquery(project_id='my-project')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/bigquery-mistral-other-vectordb.ipynb b/notebooks/bigquery-mistral-other-vectordb.ipynb deleted file mode 100644 index 76f48f7a..00000000 --- a/notebooks/bigquery-mistral-other-vectordb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "95ac2fed-f042-5ddb-8a43-6055e0eb437b", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for BigQuery using Mistral via Mistral API, Other VectorDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "a90edad1-d1a3-5c7c-83fb-e4455e43ea8c", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "88901dbc-14f4-5279-a59f-268e126a26f9", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "81efadca-5a5f-5a99-8133-b7fa84f17803", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[mistralai,bigquery]'"}, {"id": "d54a05e2-de07-56c0-b57f-0bf2d42e559c", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.base import VannaBase\nfrom vanna.mistral.mistral import Mistral\n"}, {"id": "edc45a16-5782-5d88-9f4a-c405c1f79dea", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\nclass MyCustomVectorDB(VannaBase):\n def add_ddl(self, ddl: str, **kwargs) -> str:\n # Implement here\n\n def add_documentation(self, doc: str, **kwargs) -> str:\n # Implement here\n\n def add_question_sql(self, question: str, sql: str, **kwargs) -> str:\n # Implement here\n\n def get_related_ddl(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_related_documentation(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_similar_question_sql(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_training_data(self, **kwargs) -> pd.DataFrame:\n # Implement here\n\n def remove_training_data(id: str, **kwargs) -> bool:\n # Implement here\n\n\nclass MyVanna(MyCustomVectorDB, Mistral):\n def __init__(self, config=None):\n MyCustomVectorDB.__init__(self, config=config)\n Mistral.__init__(self, config={'api_key': MISTRAL_API_KEY, 'model': 'mistral-tiny'})\n\nvn = MyVanna()\n"}, {"id": "89b583a2-ac5f-50c9-8a61-e79820b496dc", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "45b52fa3-74ea-5bb0-82e5-518731dbe674", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_bigquery(project_id='my-project')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/bigquery-mistral-vannadb.ipynb b/notebooks/bigquery-mistral-vannadb.ipynb deleted file mode 100644 index 029371cf..00000000 --- a/notebooks/bigquery-mistral-vannadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "5320f104-0de6-5010-91da-eb74229e24f2", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for BigQuery using Mistral via Mistral API, Vanna Hosted Vector DB (Recommended)\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "c9785756-74dc-5b62-9326-f3fcab07ba39", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "bcf9504b-741a-5a51-9a38-9fced9141eb4", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "81efadca-5a5f-5a99-8133-b7fa84f17803", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[mistralai,bigquery]'"}, {"id": "88b7ebec-d4f9-53aa-8f06-7c27055d16b0", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.vannadb.vannadb_vector import VannaDB_VectorStore\nfrom vanna.mistral.mistral import Mistral\n"}, {"id": "2aa3c756-d1ad-5b3c-a161-5bad6f77d594", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(VannaDB_VectorStore, Mistral):\n def __init__(self, config=None):\n VannaDB_VectorStore.__init__(self, vanna_model=MY_VANNA_MODEL, vanna_api_key=MY_VANNA_API_KEY, config=config)\n Mistral.__init__(self, config={'api_key': MISTRAL_API_KEY, 'model': 'mistral-tiny'})\n\nvn = MyVanna()\n"}, {"id": "4f630912-bd43-5809-83f5-57ab755d866b", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "45b52fa3-74ea-5bb0-82e5-518731dbe674", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_bigquery(project_id='my-project')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/bigquery-openai-azure-chromadb.ipynb b/notebooks/bigquery-openai-azure-chromadb.ipynb deleted file mode 100644 index f3843e1b..00000000 --- a/notebooks/bigquery-openai-azure-chromadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "f439e467-8402-5423-9822-318c50b4831c", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for BigQuery using Azure OpenAI, ChromaDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "28490bf2-fdd2-54f5-985d-7de2b28c383e", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "6021c0fd-69f9-5099-8a33-221bb2265f9f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "290f762c-bf5d-5c45-b58c-a95a645231f8", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[chromadb,openai,bigquery]'"}, {"id": "f6088c74-bfc7-5808-bd52-b2468267a3aa", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.openai.openai_chat import OpenAI_Chat\nfrom openai import AzureOpenAI\nfrom vanna.chromadb.chromadb_vector import ChromaDB_VectorStore\n"}, {"id": "895d74e6-b5e9-58f3-b58b-07c8e9d28707", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(ChromaDB_VectorStore, OpenAI_Chat):\n def __init__(self, config=None):\n ChromaDB_VectorStore.__init__(self, config=config)\n OpenAI_Chat.__init__(self, client=AzureOpenAI(...), config=config) # Make sure to put your AzureOpenAI client here\n\nvn = MyVanna(config={'model': 'gpt-4-...'})\n"}, {"id": "ca6141ce-3c4f-5c8c-941e-b2317523c6d9", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "45b52fa3-74ea-5bb0-82e5-518731dbe674", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_bigquery(project_id='my-project')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/bigquery-openai-azure-marqo.ipynb b/notebooks/bigquery-openai-azure-marqo.ipynb deleted file mode 100644 index a2554e99..00000000 --- a/notebooks/bigquery-openai-azure-marqo.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "724c58f8-dd5b-5cb7-a57d-e5feb8a34241", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for BigQuery using Azure OpenAI, Marqo\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "a1de0c40-6cae-5533-b5da-d1c009288950", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "3b154ef8-82dd-5861-b2b4-ae900175e86c", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "e679caf9-0f53-5826-b5a3-d407c7b11d0a", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[marqo,openai,bigquery]'"}, {"id": "6873a728-88db-5cf5-8a57-6355069c8a61", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.openai.openai_chat import OpenAI_Chat\nfrom openai import AzureOpenAI\nfrom vanna.marqo.marqo import Marqo\n"}, {"id": "aa425412-56b4-5b29-8f25-d0bb982b7446", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(Marqo, OpenAI_Chat):\n def __init__(self, config=None):\n Marqo.__init__(self, config={'marqo_url': MARQO_URL, 'marqo_model': MARQO_MODEL})\n OpenAI_Chat.__init__(self, client=AzureOpenAI(...), config=config) # Make sure to put your AzureOpenAI client here\n\nvn = MyVanna(config={'model': 'gpt-4-...'})\n"}, {"id": "4a9f4b28-dd69-5b6e-a94e-31632801d4dd", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "45b52fa3-74ea-5bb0-82e5-518731dbe674", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_bigquery(project_id='my-project')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/bigquery-openai-azure-other-vectordb.ipynb b/notebooks/bigquery-openai-azure-other-vectordb.ipynb deleted file mode 100644 index dc6c26ce..00000000 --- a/notebooks/bigquery-openai-azure-other-vectordb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "35185a9e-35a3-56fe-b403-fe55f23a645e", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for BigQuery using Azure OpenAI, Other VectorDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "ae9f6a12-733a-59e3-8ea5-6e747247433c", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "4042d182-e243-5d76-a804-54a96b57e635", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "85007695-f172-57f7-8dd4-6f7db27f2633", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[openai,bigquery]'"}, {"id": "19782e02-3b88-533a-a9cd-f73a7d88e153", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.openai.openai_chat import OpenAI_Chat\nfrom openai import AzureOpenAI\nfrom vanna.base import VannaBase\n"}, {"id": "1a1f7fff-3055-51d2-a91d-bf03f4f94bc8", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\nclass MyCustomVectorDB(VannaBase):\n def add_ddl(self, ddl: str, **kwargs) -> str:\n # Implement here\n\n def add_documentation(self, doc: str, **kwargs) -> str:\n # Implement here\n\n def add_question_sql(self, question: str, sql: str, **kwargs) -> str:\n # Implement here\n\n def get_related_ddl(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_related_documentation(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_similar_question_sql(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_training_data(self, **kwargs) -> pd.DataFrame:\n # Implement here\n\n def remove_training_data(id: str, **kwargs) -> bool:\n # Implement here\n\n\nclass MyVanna(MyCustomVectorDB, OpenAI_Chat):\n def __init__(self, config=None):\n MyCustomVectorDB.__init__(self, config=config)\n OpenAI_Chat.__init__(self, client=AzureOpenAI(...), config=config) # Make sure to put your AzureOpenAI client here\n\nvn = MyVanna(config={'model': 'gpt-4-...'})\n"}, {"id": "e94317d7-0847-5b36-a5fe-98fce6b4cdf5", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "45b52fa3-74ea-5bb0-82e5-518731dbe674", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_bigquery(project_id='my-project')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/bigquery-openai-azure-vannadb.ipynb b/notebooks/bigquery-openai-azure-vannadb.ipynb deleted file mode 100644 index a427e62b..00000000 --- a/notebooks/bigquery-openai-azure-vannadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "fac5b46f-4116-58e0-889d-969818e7888b", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for BigQuery using Azure OpenAI, Vanna Hosted Vector DB (Recommended)\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "909723d5-4778-5fc6-a3c2-1a0753650a1f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "05520bfd-6608-5f27-bac1-90b3d0818583", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "85007695-f172-57f7-8dd4-6f7db27f2633", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[openai,bigquery]'"}, {"id": "031a7573-71e2-5c65-873c-124e3158003d", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.openai.openai_chat import OpenAI_Chat\nfrom openai import AzureOpenAI\nfrom vanna.vannadb.vannadb_vector import VannaDB_VectorStore\n"}, {"id": "9fd5a61a-c40c-5577-80bb-3c8fbf26dc21", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(VannaDB_VectorStore, OpenAI_Chat):\n def __init__(self, config=None):\n VannaDB_VectorStore.__init__(self, vanna_model=MY_VANNA_MODEL, vanna_api_key=MY_VANNA_API_KEY, config=config)\n OpenAI_Chat.__init__(self, client=AzureOpenAI(...), config=config) # Make sure to put your AzureOpenAI client here\n\nvn = MyVanna(config={'model': 'gpt-4-...'})\n"}, {"id": "0f88339d-d782-54b0-a52e-337e3b45025c", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "45b52fa3-74ea-5bb0-82e5-518731dbe674", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_bigquery(project_id='my-project')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/bigquery-openai-standard-chromadb.ipynb b/notebooks/bigquery-openai-standard-chromadb.ipynb deleted file mode 100644 index cfd6a89b..00000000 --- a/notebooks/bigquery-openai-standard-chromadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "774bf429-d57a-589e-a818-f746cfbd1333", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for BigQuery using OpenAI, ChromaDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "c034094a-80ae-5404-9716-f09b9c785fdd", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "bf62ded0-0c0b-5b96-b2e6-e7a773044ed7", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "290f762c-bf5d-5c45-b58c-a95a645231f8", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[chromadb,openai,bigquery]'"}, {"id": "93b5ab2b-834b-5b86-8d47-c9beda8b3544", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.openai.openai_chat import OpenAI_Chat\nfrom vanna.chromadb.chromadb_vector import ChromaDB_VectorStore\n"}, {"id": "28a8d8a1-669f-5f8b-82c4-73a0eb221d64", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(ChromaDB_VectorStore, OpenAI_Chat):\n def __init__(self, config=None):\n ChromaDB_VectorStore.__init__(self, config=config)\n OpenAI_Chat.__init__(self, config=config)\n\nvn = MyVanna(config={'api_key': 'sk-...', 'model': 'gpt-4-...'})\n"}, {"id": "cc68d0ec-288a-5204-ad57-4013e8a83d94", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "45b52fa3-74ea-5bb0-82e5-518731dbe674", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_bigquery(project_id='my-project')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/bigquery-openai-standard-marqo.ipynb b/notebooks/bigquery-openai-standard-marqo.ipynb deleted file mode 100644 index 164535aa..00000000 --- a/notebooks/bigquery-openai-standard-marqo.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "3e94b5c0-cfeb-5434-bfa1-23663e220b37", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for BigQuery using OpenAI, Marqo\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "64d7f2aa-9641-5fba-b399-5f39b8ce0499", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "6063fe15-d88f-5654-8712-20bb3bc48fc4", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "e679caf9-0f53-5826-b5a3-d407c7b11d0a", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[marqo,openai,bigquery]'"}, {"id": "dc8ae8d1-d08e-5a8c-a806-09ba465d7761", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.openai.openai_chat import OpenAI_Chat\nfrom vanna.marqo.marqo import Marqo\n"}, {"id": "3ce3c4db-08c1-5d0a-86df-2f7b35b82bc2", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(Marqo, OpenAI_Chat):\n def __init__(self, config=None):\n Marqo.__init__(self, config={'marqo_url': MARQO_URL, 'marqo_model': MARQO_MODEL})\n OpenAI_Chat.__init__(self, config=config)\n\nvn = MyVanna(config={'api_key': 'sk-...', 'model': 'gpt-4-...'})\n"}, {"id": "8d3a813e-4be9-501b-9b84-8f2a0573134b", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "45b52fa3-74ea-5bb0-82e5-518731dbe674", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_bigquery(project_id='my-project')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/bigquery-openai-standard-other-vectordb.ipynb b/notebooks/bigquery-openai-standard-other-vectordb.ipynb deleted file mode 100644 index fd15a798..00000000 --- a/notebooks/bigquery-openai-standard-other-vectordb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "e613d63a-b713-506f-8fb3-41b2c0a8e863", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for BigQuery using OpenAI, Other VectorDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "60917c76-36c7-55b7-b1c4-5c82915d0d08", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "2c95993b-0824-50f4-8d2e-2418fedfc8fc", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "85007695-f172-57f7-8dd4-6f7db27f2633", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[openai,bigquery]'"}, {"id": "fe1b5686-8226-53d5-b42b-a29cdb088cad", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.openai.openai_chat import OpenAI_Chat\nfrom vanna.base import VannaBase\n"}, {"id": "45f49779-04b9-574f-b573-4f0afb619e7e", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\nclass MyCustomVectorDB(VannaBase):\n def add_ddl(self, ddl: str, **kwargs) -> str:\n # Implement here\n\n def add_documentation(self, doc: str, **kwargs) -> str:\n # Implement here\n\n def add_question_sql(self, question: str, sql: str, **kwargs) -> str:\n # Implement here\n\n def get_related_ddl(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_related_documentation(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_similar_question_sql(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_training_data(self, **kwargs) -> pd.DataFrame:\n # Implement here\n\n def remove_training_data(id: str, **kwargs) -> bool:\n # Implement here\n\n\nclass MyVanna(MyCustomVectorDB, OpenAI_Chat):\n def __init__(self, config=None):\n MyCustomVectorDB.__init__(self, config=config)\n OpenAI_Chat.__init__(self, config=config)\n\nvn = MyVanna(config={'api_key': 'sk-...', 'model': 'gpt-4-...'})\n"}, {"id": "5cec3bae-2ed2-5067-b91a-a276222ed14c", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "45b52fa3-74ea-5bb0-82e5-518731dbe674", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_bigquery(project_id='my-project')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/bigquery-openai-standard-vannadb.ipynb b/notebooks/bigquery-openai-standard-vannadb.ipynb deleted file mode 100644 index 4fb536ad..00000000 --- a/notebooks/bigquery-openai-standard-vannadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "2475ecc1-295b-55a3-86b7-9b851bec073e", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for BigQuery using OpenAI, Vanna Hosted Vector DB (Recommended)\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "3229453a-a3f6-5835-bf6b-e921f8abddbc", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "09614309-a454-5268-911a-11f1690c25e6", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "85007695-f172-57f7-8dd4-6f7db27f2633", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[openai,bigquery]'"}, {"id": "4ff1aaee-1154-5859-b8c3-93ac3c31595d", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.openai.openai_chat import OpenAI_Chat\nfrom vanna.vannadb.vannadb_vector import VannaDB_VectorStore\n"}, {"id": "1fc13242-ce0f-53e5-832e-ff33197d2eef", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(VannaDB_VectorStore, OpenAI_Chat):\n def __init__(self, config=None):\n VannaDB_VectorStore.__init__(self, vanna_model=MY_VANNA_MODEL, vanna_api_key=MY_VANNA_API_KEY, config=config)\n OpenAI_Chat.__init__(self, config=config)\n\nvn = MyVanna(config={'api_key': 'sk-...', 'model': 'gpt-4-...'})\n"}, {"id": "2ee87b26-d9b8-5dfc-8d15-fefa0dfe9dd9", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "45b52fa3-74ea-5bb0-82e5-518731dbe674", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_bigquery(project_id='my-project')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/bigquery-openai-vanna-chromadb.ipynb b/notebooks/bigquery-openai-vanna-chromadb.ipynb deleted file mode 100644 index bae34f4f..00000000 --- a/notebooks/bigquery-openai-vanna-chromadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "525bec9c-32bd-5fc9-b211-7909d17a700e", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for BigQuery using OpenAI via Vanna.AI (Recommended), ChromaDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "93465ae8-5642-5cd8-abe5-20cce04e1c4f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "4990aff0-c5b5-569d-b61c-c0adb1bc5aa9", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "93b3d255-1a25-5088-af9e-25168efe4f8a", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[chromadb,bigquery]'"}, {"id": "c1e5ad61-57c7-5b64-920b-6f5b435df5e3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.chromadb.chromadb_vector import ChromaDB_VectorStore\n"}, {"id": "3225927e-ae19-5159-a112-8dac5a3cda22", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(ChromaDB_VectorStore):\n def __init__(self, config=None):\n ChromaDB_VectorStore.__init__(self, config=config)\n\nvn = MyVanna()\n"}, {"id": "4c98f876-a482-5f6a-bf47-0e3cd8a48576", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "45b52fa3-74ea-5bb0-82e5-518731dbe674", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_bigquery(project_id='my-project')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/bigquery-openai-vanna-marqo.ipynb b/notebooks/bigquery-openai-vanna-marqo.ipynb deleted file mode 100644 index 99a91e13..00000000 --- a/notebooks/bigquery-openai-vanna-marqo.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "8fadb025-65e0-5133-964e-2e7db62399c5", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for BigQuery using OpenAI via Vanna.AI (Recommended), Marqo\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "0a0afd1f-06be-5e48-b6ff-44530dec901d", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "fc5d67c6-97b4-5469-880b-8585e7b48226", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "3a44bfd8-bc08-51dd-a131-54b24aa974a2", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[marqo,bigquery]'"}, {"id": "a1877af9-e758-52a4-8f21-3d7b2e0c904f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.marqo.marqo import Marqo\n"}, {"id": "b0e1d67a-58fd-5bcd-b2a2-a13317fda343", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(Marqo):\n def __init__(self, config=None):\n Marqo.__init__(self, config={'marqo_url': MARQO_URL, 'marqo_model': MARQO_MODEL})\n\nvn = MyVanna()\n"}, {"id": "685bf2fd-182d-5ff3-a967-5448289b03f9", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "45b52fa3-74ea-5bb0-82e5-518731dbe674", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_bigquery(project_id='my-project')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/bigquery-openai-vanna-other-vectordb.ipynb b/notebooks/bigquery-openai-vanna-other-vectordb.ipynb deleted file mode 100644 index decdecf5..00000000 --- a/notebooks/bigquery-openai-vanna-other-vectordb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "987b3c74-035d-562b-9288-167f1a027019", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for BigQuery using OpenAI via Vanna.AI (Recommended), Other VectorDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "8468a145-ef33-5a52-b9dd-f0f5280b0e99", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "4d924c82-d069-5d4b-bc4a-8985f20e4507", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "c6271b0c-191a-5055-aa85-aadb291fd909", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[bigquery]'"}, {"id": "35e4b991-0e84-561d-8c1e-979bb4252ec9", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.base import VannaBase\n"}, {"id": "57fbc78c-6a54-5f06-98d8-69f315a380b4", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\nclass MyCustomVectorDB(VannaBase):\n def add_ddl(self, ddl: str, **kwargs) -> str:\n # Implement here\n\n def add_documentation(self, doc: str, **kwargs) -> str:\n # Implement here\n\n def add_question_sql(self, question: str, sql: str, **kwargs) -> str:\n # Implement here\n\n def get_related_ddl(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_related_documentation(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_similar_question_sql(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_training_data(self, **kwargs) -> pd.DataFrame:\n # Implement here\n\n def remove_training_data(id: str, **kwargs) -> bool:\n # Implement here\n\n\nclass MyVanna(MyCustomVectorDB):\n def __init__(self, config=None):\n MyCustomVectorDB.__init__(self, config=config)\n\nvn = MyVanna()\n"}, {"id": "440a5dca-cfbd-5324-9b0e-b5535f958261", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "45b52fa3-74ea-5bb0-82e5-518731dbe674", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_bigquery(project_id='my-project')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/bigquery-openai-vanna-vannadb.ipynb b/notebooks/bigquery-openai-vanna-vannadb.ipynb deleted file mode 100644 index 78ba400e..00000000 --- a/notebooks/bigquery-openai-vanna-vannadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "67a26e9c-c6fb-56bc-a8f2-fdcb5294e46e", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for BigQuery using OpenAI via Vanna.AI (Recommended), Vanna Hosted Vector DB (Recommended)\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "07242f18-8018-5856-96bd-02f96b0dd5cc", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "09614309-a454-5268-911a-11f1690c25e6", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "c6271b0c-191a-5055-aa85-aadb291fd909", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[bigquery]'"}, {"id": "6160c274-caf4-537e-9a02-f6a1d7022a2c", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "import vanna\nfrom vanna.remote import VannaDefault"}, {"id": "cc6152fc-02df-5490-9920-896b5565b3d0", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "api_key = vanna.get_api_key('my-email@example.com')\n\nvanna_model_name = # Put a unique name here\nvn = VannaDefault(model=vanna_model_name, api_key=api_key)\n"}, {"id": "e09c4dc9-c4e9-55a5-8a2d-2f8f547c5005", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "45b52fa3-74ea-5bb0-82e5-518731dbe674", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_bigquery(project_id='my-project')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/bigquery-other-llm-chromadb.ipynb b/notebooks/bigquery-other-llm-chromadb.ipynb deleted file mode 100644 index 0ec687f3..00000000 --- a/notebooks/bigquery-other-llm-chromadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "670a54ff-01bf-5be5-bbd3-b8f7b39b67c8", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for BigQuery using Other LLM, ChromaDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "94a97b34-d9b6-56f6-a3ba-3881ab640c9f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "c5ec0ab5-b97e-5327-93ed-1bcf19f4e280", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "93b3d255-1a25-5088-af9e-25168efe4f8a", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[chromadb,bigquery]'"}, {"id": "a70195e6-7c1f-519f-8413-4ad4e6b3570d", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.base import VannaBase\nfrom vanna.chromadb.chromadb_vector import ChromaDB_VectorStore\n"}, {"id": "ad2c6517-9727-56fb-befe-a4108859aa3b", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\nclass MyCustomLLM(VannaBase):\n def __init__(self, config=None):\n pass\n\n def generate_plotly_code(self, question: str = None, sql: str = None, df_metadata: str = None, **kwargs) -> str:\n # Implement here\n\n def generate_question(self, sql: str, **kwargs) -> str:\n # Implement here\n \n def get_followup_questions_prompt(self, question: str, question_sql_list: list, ddl_list: list, doc_list: list, **kwargs):\n # Implement here\n \n def get_sql_prompt(self, question: str, question_sql_list: list, ddl_list: list, doc_list: list, **kwargs):\n # Implement here\n\n def submit_prompt(self, prompt, **kwargs) -> str:\n # Implement here\n \n\nclass MyVanna(ChromaDB_VectorStore, MyCustomLLM):\n def __init__(self, config=None):\n ChromaDB_VectorStore.__init__(self, config=config)\n MyCustomLLM.__init__(self, config=config)\n\nvn = MyVanna()\n"}, {"id": "9a355699-8711-5dc4-9c9c-83cf70a2a5c8", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "45b52fa3-74ea-5bb0-82e5-518731dbe674", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_bigquery(project_id='my-project')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/bigquery-other-llm-marqo.ipynb b/notebooks/bigquery-other-llm-marqo.ipynb deleted file mode 100644 index 50a6355f..00000000 --- a/notebooks/bigquery-other-llm-marqo.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "317a612f-84c0-5133-85f1-83088d93d709", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for BigQuery using Other LLM, Marqo\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "0c856b13-a416-54c7-bee1-22b1644680c0", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "804cbc6a-08b9-562e-8376-7876ec24b3de", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "3a44bfd8-bc08-51dd-a131-54b24aa974a2", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[marqo,bigquery]'"}, {"id": "2e26545c-6029-5c62-b146-105086c10f6d", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.base import VannaBase\nfrom vanna.marqo.marqo import Marqo\n"}, {"id": "c1812db9-f2e2-5e21-98c1-d00397d25f65", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\nclass MyCustomLLM(VannaBase):\n def __init__(self, config=None):\n pass\n\n def generate_plotly_code(self, question: str = None, sql: str = None, df_metadata: str = None, **kwargs) -> str:\n # Implement here\n\n def generate_question(self, sql: str, **kwargs) -> str:\n # Implement here\n \n def get_followup_questions_prompt(self, question: str, question_sql_list: list, ddl_list: list, doc_list: list, **kwargs):\n # Implement here\n \n def get_sql_prompt(self, question: str, question_sql_list: list, ddl_list: list, doc_list: list, **kwargs):\n # Implement here\n\n def submit_prompt(self, prompt, **kwargs) -> str:\n # Implement here\n \n\nclass MyVanna(Marqo, MyCustomLLM):\n def __init__(self, config=None):\n Marqo.__init__(self, config={'marqo_url': MARQO_URL, 'marqo_model': MARQO_MODEL})\n MyCustomLLM.__init__(self, config=config)\n\nvn = MyVanna()\n"}, {"id": "03740443-3607-5a15-bc0b-13ab455d65c8", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "45b52fa3-74ea-5bb0-82e5-518731dbe674", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_bigquery(project_id='my-project')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/bigquery-other-llm-other-vectordb.ipynb b/notebooks/bigquery-other-llm-other-vectordb.ipynb deleted file mode 100644 index 3247f454..00000000 --- a/notebooks/bigquery-other-llm-other-vectordb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "329a34b6-ac61-5e7f-bd53-4dea75316751", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for BigQuery using Other LLM, Other VectorDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "46ab4cb5-529f-5357-b72a-b6d215937d54", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "075ce30c-1025-5b09-b870-888aca19466b", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "c6271b0c-191a-5055-aa85-aadb291fd909", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[bigquery]'"}, {"id": "35e4b991-0e84-561d-8c1e-979bb4252ec9", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.base import VannaBase\n"}, {"id": "2ff3ca97-cb35-56c7-9263-a3613e4ce005", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\nclass MyCustomVectorDB(VannaBase):\n def add_ddl(self, ddl: str, **kwargs) -> str:\n # Implement here\n\n def add_documentation(self, doc: str, **kwargs) -> str:\n # Implement here\n\n def add_question_sql(self, question: str, sql: str, **kwargs) -> str:\n # Implement here\n\n def get_related_ddl(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_related_documentation(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_similar_question_sql(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_training_data(self, **kwargs) -> pd.DataFrame:\n # Implement here\n\n def remove_training_data(id: str, **kwargs) -> bool:\n # Implement here\n\nclass MyCustomLLM(VannaBase):\n def __init__(self, config=None):\n pass\n\n def generate_plotly_code(self, question: str = None, sql: str = None, df_metadata: str = None, **kwargs) -> str:\n # Implement here\n\n def generate_question(self, sql: str, **kwargs) -> str:\n # Implement here\n \n def get_followup_questions_prompt(self, question: str, question_sql_list: list, ddl_list: list, doc_list: list, **kwargs):\n # Implement here\n \n def get_sql_prompt(self, question: str, question_sql_list: list, ddl_list: list, doc_list: list, **kwargs):\n # Implement here\n\n def submit_prompt(self, prompt, **kwargs) -> str:\n # Implement here\n \n\nclass MyVanna(MyCustomVectorDB, MyCustomLLM):\n def __init__(self, config=None):\n MyCustomVectorDB.__init__(self, config=config)\n MyCustomLLM.__init__(self, config=config)\n\nvn = MyVanna()\n"}, {"id": "c92861d0-6776-53eb-9a5d-ccb56d1b0218", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "45b52fa3-74ea-5bb0-82e5-518731dbe674", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_bigquery(project_id='my-project')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/bigquery-other-llm-vannadb.ipynb b/notebooks/bigquery-other-llm-vannadb.ipynb deleted file mode 100644 index 55255d39..00000000 --- a/notebooks/bigquery-other-llm-vannadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "dab5efa9-fc30-5f4d-ae12-aca6cf81438d", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for BigQuery using Other LLM, Vanna Hosted Vector DB (Recommended)\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "29381975-fd85-523b-9ede-7dd7b9b69cc0", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "e533ec83-bcaf-5683-b16f-788617340378", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "c6271b0c-191a-5055-aa85-aadb291fd909", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[bigquery]'"}, {"id": "bfe31937-16c5-5ecb-9aea-0cc1b2aec53c", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.vannadb.vannadb_vector import VannaDB_VectorStore\nfrom vanna.base import VannaBase\n"}, {"id": "8ac7e323-be70-5fee-9d96-69868af0ff99", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\nclass MyCustomLLM(VannaBase):\n def __init__(self, config=None):\n pass\n\n def generate_plotly_code(self, question: str = None, sql: str = None, df_metadata: str = None, **kwargs) -> str:\n # Implement here\n\n def generate_question(self, sql: str, **kwargs) -> str:\n # Implement here\n \n def get_followup_questions_prompt(self, question: str, question_sql_list: list, ddl_list: list, doc_list: list, **kwargs):\n # Implement here\n \n def get_sql_prompt(self, question: str, question_sql_list: list, ddl_list: list, doc_list: list, **kwargs):\n # Implement here\n\n def submit_prompt(self, prompt, **kwargs) -> str:\n # Implement here\n \n\nclass MyVanna(VannaDB_VectorStore, MyCustomLLM):\n def __init__(self, config=None):\n VannaDB_VectorStore.__init__(self, vanna_model=MY_VANNA_MODEL, vanna_api_key=MY_VANNA_API_KEY, config=config)\n MyCustomLLM.__init__(self, config=config)\n\nvn = MyVanna()\n"}, {"id": "908bbd2d-b1e8-5d98-bbc1-82d0d3c93cfa", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "45b52fa3-74ea-5bb0-82e5-518731dbe674", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_bigquery(project_id='my-project')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/configure.ipynb b/notebooks/configure.ipynb deleted file mode 100644 index 709d82cf..00000000 --- a/notebooks/configure.ipynb +++ /dev/null @@ -1,18 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/notebooks/connect-to-bigquery.ipynb b/notebooks/connect-to-bigquery.ipynb deleted file mode 100644 index 39463a2e..00000000 --- a/notebooks/connect-to-bigquery.ipynb +++ /dev/null @@ -1,93 +0,0 @@ -{ - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# How to use Vanna with BigQuery" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import vanna as vn" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## **When Running on GCP**\n", - "If you're running on a machine hosted on GCP, you likely already have credentials so you just have to specify the project" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "vn.connect_to_bigquery(\n", - " project_id=\"myprojectid\"\n", - ")" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## **When Running on Google Colab**\n", - "Use colab auth to authenticate with your google account and then specify the project" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from google.colab import auth\n", - "auth.authenticate_user()\n", - "\n", - "vn.connect_to_bigquery(\n", - " project_id=\"myprojectid\"\n", - ")" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Using a Credentials File\n", - "You should only do this if you're running on a local machine and not on GCP or Colab" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "vn.connect_to_bigquery(\n", - " project_id=\"myprojectid\",\n", - " cred_file_path=\"path/to/credentials.json\",\n", - ")" - ] - } - ], - "metadata": { - "language_info": { - "name": "python" - }, - "orig_nbformat": 4 - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/notebooks/connect-to-postgres.ipynb b/notebooks/connect-to-postgres.ipynb deleted file mode 100644 index cc4450ad..00000000 --- a/notebooks/connect-to-postgres.ipynb +++ /dev/null @@ -1,52 +0,0 @@ -{ - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# How to use Vanna with Postgres" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import vanna as vn" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## **PostgreSQL**" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "vn.connect_to_postgres(\n", - " host=\"hh-pgsql-public.ebi.ac.uk\",\n", - " dbname=\"pfmegrnargs\",\n", - " user=\"reader\",\n", - " password=\"abcd1234\",\n", - " port=5432\n", - ")" - ] - } - ], - "metadata": { - "language_info": { - "name": "python" - }, - "orig_nbformat": 4 - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/notebooks/connect-to-snowflake.ipynb b/notebooks/connect-to-snowflake.ipynb deleted file mode 100644 index 5657ccd5..00000000 --- a/notebooks/connect-to-snowflake.ipynb +++ /dev/null @@ -1,48 +0,0 @@ -{ - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# How to use Vanna with Snowflake" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import vanna as vn" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## **Snowflake**\n", - "\n", - "We have a built-in function for Snowflake, so you don't need to write your own.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "vn.connect_to_snowflake(account='my-account', username='my-username', password='my-password', database='my-database')\n" - ] - } - ], - "metadata": { - "language_info": { - "name": "python" - }, - "orig_nbformat": 4 - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/notebooks/databases.ipynb b/notebooks/databases.ipynb deleted file mode 100644 index 3f0c8fcb..00000000 --- a/notebooks/databases.ipynb +++ /dev/null @@ -1,176 +0,0 @@ -{ - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# How to use Vanna with various databases\n", - "\n", - "You can use Vanna with any database that you can connect to via Python. Here are some examples of how to connect to various databases.\n", - "\n", - "All you have to do is provide Vanna with a function that takes in a SQL query and returns a Pandas DataFrame. Here are some examples of how to do that." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import vanna as vn" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## **PostgreSQL**" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import psycopg2\n", - "\n", - "conn_details = {...} # fill this with your connection details\n", - "conn_postgres = psycopg2.connect(**conn_details)\n", - "\n", - "def run_sql_postgres(sql: str) -> pd.DataFrame:\n", - " df = pd.read_sql_query(sql, conn_postgres)\n", - " return df\n", - "\n", - "vn.run_sql = run_sql_postgres" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## **Snowflake**\n", - "\n", - "We have a built-in function for Snowflake, so you don't need to write your own.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "vn.connect_to_snowflake(account='my-account', username='my-username', password='my-password', database='my-database')\n" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## **Google BigQuery**" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from google.cloud import bigquery\n", - "import pandas as pd\n", - "\n", - "project_id = 'your-project-id' # replace with your Project ID\n", - "client_bigquery = bigquery.Client(project=project_id)\n", - "\n", - "def run_sql_bigquery(sql: str) -> pd.DataFrame:\n", - " df = client_bigquery.query(sql).to_dataframe()\n", - " return df\n", - "\n", - "vn.run_sql = run_sql_bigquery" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## **Amazon Athena**" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "from pyathena import connect\n", - "\n", - "conn_details = {...} # fill this with your connection details\n", - "conn_athena = connect(**conn_details)\n", - "\n", - "def run_sql_athena(sql: str) -> pd.DataFrame:\n", - " df = pd.read_sql(sql, conn_athena)\n", - " return df\n", - "\n", - "vn.run_sql = run_sql_athena" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## **Amazon Redshift**" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import psycopg2\n", - "\n", - "conn_details = {...} # fill this with your connection details\n", - "conn_redshift = psycopg2.connect(**conn_details)\n", - "\n", - "def run_sql_redshift(sql: str) -> pd.DataFrame:\n", - " df = pd.read_sql_query(sql, conn_redshift)\n", - " return df\n", - "\n", - "vn.run_sql = run_sql_redshift" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# **Others**\n", - "\n", - "You can follow a similar pattern to the others for your database. You just have to provide a `vn.run_sql` function that takes in a SQL query and returns a Pandas DataFrame." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [] - } - ], - "metadata": { - "language_info": { - "name": "python" - }, - "orig_nbformat": 4 - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/notebooks/getting-started.ipynb b/notebooks/getting-started.ipynb deleted file mode 100644 index e28a8276..00000000 --- a/notebooks/getting-started.ipynb +++ /dev/null @@ -1,292 +0,0 @@ -{ - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Getting Started with Vanna\n", - "This notebook shows how to use Vanna to ask questions from a database using sample data" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Install and Import Vanna" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%pip install vanna" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import vanna\n", - "from vanna.remote import VannaDefault" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Log In to Vanna\n", - "Vanna provides a function to get an API key. You'll get a code sent to your e-mail.\n", - "You can save your API key for future usage so that you don't have to log in every time." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "api_key = vanna.get_api_key('my-email@example.com')" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Set Model\n", - "`chinook` is a public model that refers to the [Chinook sample database](https://www.sqlitetutorial.net/sqlite-sample-database/)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "vanna_model_name = 'chinook' # This is the name of the RAG model. This is typically associated with a specific dataset.\n", - "vn = VannaDefault(model=vanna_model_name, api_key=api_key)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Connect to the Database\n", - "Here we're connecting to a SQLite database but you can connect to any SQL database." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "vn.connect_to_sqlite('https://vanna.ai/Chinook.sqlite')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Ask Questions\n", - "Now we're going to use `vn.ask` to ask questions and it'll generate SQL, run the SQL, show the table, and generate a chart" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "SELECT a.name,\n", - " sum(il.quantity) as totalsales\n", - "FROM artist a\n", - " INNER JOIN album al\n", - " ON a.artistid = al.artistid\n", - " INNER JOIN track t\n", - " ON al.albumid = t.albumid\n", - " INNER JOIN invoiceline il\n", - " ON t.trackid = il.trackid\n", - "GROUP BY a.name\n", - "ORDER BY totalsales desc limit 5;\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Nametotalsales
0Iron Maiden140
1U2107
2Metallica91
3Led Zeppelin87
4Os Paralamas Do Sucesso45
\n", - "
" - ], - "text/plain": [ - " Name totalsales\n", - "0 Iron Maiden 140\n", - "1 U2 107\n", - "2 Metallica 91\n", - "3 Led Zeppelin 87\n", - "4 Os Paralamas Do Sucesso 45" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABXgAAAPoCAYAAABkvZZOAAAgAElEQVR4XuzdC7h1V1kf+vcFuUi4REggXBSQgiGIgiAVBMSIRQpVERTr8QBVS70cpBdEaAH1gKhV2mKxaL1SpIUoSgHFEjWIYgkEL6gxagDhICkmXMKdgHnPM+JceWbWt/a35l63b665fvN5ePLtPeccc4zfO/b28b/HGjPDQYAAAQIECBAgQIAAAQIECBAgQIAAAQJ7KZB72WudJkCAAAECBAgQIECAAAECBAgQIECAAIEQ8JoEBAgQIECAAAECBAgQIECAAAECBAgQ2FMBAe+eFk63CRAgQIAAAQIECBAgQIAAAQIECBAgIOA1BwgQIECAAAECBAgQIECAAAECBAgQILCnAgLePS2cbhMgQIAAAQIECBAgQIAAAQIECBAgQEDAaw4QIECAAAECBAgQIECAAAECBAgQIEBgTwUEvHtaON0mQIAAAQIECBAgQIAAAQIECBAgQICAgNccIECAAAECBAgQIECAAAECBAgQIECAwJ4KCHj3tHC6TYAAAQIECBAgQIAAAQIECBAgQIAAAQGvOUCAAAECBAgQIECAAAECBAgQIECAAIE9FRDw7mnhdJsAAQIECBAgQIAAAQIECBAgQIAAAQICXnOAAAECBAgQIECAAAECBAgQIECAAAECeyog4N3Twuk2AQIECBAgQIAAAQIECBAgQIAAAQIEBLzmAAECBAgQIECAAAECBAgQIECAAAECBPZUQMC7p4XTbQIECBAgQIAAAQIECBAgQIAAAQIECAh4zQECBAgQIECAAAECBAgQIECAAAECBAjsqYCAd08Lp9sECBAgQIAAAQIECBAgQIAAAQIECBAQ8JoDBAgQIECAAAECBAgQIECAAAECBAgQ2FMBAe+eFk63CRAgQIAAAQIECBAgQIAAAQIECBAgIOA1BwgQIECAAAECBAgQIECAAAECBAgQILCnAgLePS2cbhMgQIAAAQIECBAgQIAAAQIECBAgQEDAaw4QIECAAAECBAgQIECAAAECBAgQIEBgTwUEvHtaON0mQIAAAQIECBAgQIAAAQIECBAgQICAgNccIECAAAECBAgQIECAAAECBAgQIECAwJ4KCHj3tHC6TYAAAQIECBAgQIAAAQIECBAgQIAAAQGvOUCAAAECBAgQIECAAAECBAgQIECAAIE9FRDw7mnhdJsAAQIECBAgQIAAAQIECBAgQIAAAQICXnOAAAECBAgQIECAAAECBAgQIECAAAECeyog4N3Twuk2AQIECBAgQIAAAQIECBAgQIAAAQIEBLzmAAECBAgQIECAAAECBAgQIECAAAECBPZUQMC7p4XTbQIECBAgQIAAAQIECBAgQIAAAQIECAh4zQECBAgQIECAAAECBAgQIECAAAECBAjsqYCAd08Lp9sECBAgQIAAAQIECBAgQIAAAQIECBAQ8JoDBAgQIECAAAECBAgQIECAAAECBAgQ2FMBAe+eFk63CRAgQIAAAQIECBAgQIAAAQIECBAgIOA1BwgQIECAAAECBAgQIECAAAECBAgQILCnAgLePS2cbhMgQIAAAQIECBAgQIAAAQIECBAgQEDAaw4QIECAAAECBAgQIECAAAECBAgQIEBgTwUEvHtaON0mQIAAAQIECBAgQIAAAQIECBAgQICAgNccIECAAAECBAgQIECAAAECBAgQIECAwJ4KCHj3tHC6TYAAAQIECBAgQIAAAQIECBAgQIAAAQGvOUCAAAECBAgQIECAAAECBAgQIECAAIE9FRDw7mnhdJsAAQIECBAgQIAAAQIECBAgQIAAAQICXnOAAAECBAgQIECAAAECBAgQIECAAAECeyog4N3Twuk2AQIECBAgQIAAAQIECBAgQIAAAQIEBLzmAAECBAgQIECAAAECBAgQIECAAAECBPZUQMC7p4XTbQIECBAgQIAAAQIECBAgQIAAAQIECAh4zQECBAgQIECAAAECBAgQIECAAAECBAjsqYCAd08Lp9sECBAgQIAAAQIECBAgQIAAAQIECBAQ8JoDBAgQIECAAAECBAgQIECAAAECBAgQ2FMBAe+eFk63CRAgQIAAAQIECBAgQIAAAQIECBAgIOA1BwgQIECAAAECBAgQIECAAAECBAgQILCnAgLePS2cbhMgQIAAAQIECBAgQIAAAQIECBAgQEDAaw4QIECAAAECBAgQIECAAAECBAgQIEBgTwUEvHtaON0mQIAAAQIECBAgQIAAAQIECBAgQICAgNccIECAAAECBAgQIECAAAECBAgQIECAwJ4KCHj3tHC6TYAAAQIECBAgQIAAAQIECBAgQIAAAQGvOUCAAAECBAgQIECAAAECBAgQIECAAIE9FRDw7mnhdJsAAQIECBAg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QIAAAQIECBAgQIAAAQIECBAgMDYBAe/YKqI/BAgQIECAAAECBAgQIECAAAECBAgQGCgg4B0I5TICBAgQIECAAAECBAgQIECAAAECBAiMTUDAO7aK6A8BAgQIECBAgAABAgQIECBAgAABAgQGCgh4B0K5jAABAgQIECBAgAABAgQIECBAgAABAmMTEPCOrSL6Q4AAAQIECBAgQIAAAQIECBAgQIAAgYECAt6BUC4jQIAAAQIECBAgQIAAAQIECBAgQIDA2AQEvGOriP4QIECAAAECBAgQIECAAAECBAgQIEBgoICAdyCUywgQIECAAAECBAgQIECAAAECBAgQIDA2AQHv2CqiPwQIECBAgAABAgQIECBAgAABAgQIEBgoIOAdCOUyAgQIECBAgAABAgQIECBAgAABAgQIjE1AwDu2iugPAQIECBAgQIAAAQIECBAgQIAAAQIEBgoIeAdCuYwAAQIECBAgQIAAAQIECBAgQIAAAQJjExDwjq0i+kOAAAECBAgQIECAAAECBAgQIECAAIGBAgLegVAuI0CAAAECBAgQIECAAAECBAgQIECAwNgEBLxjq4j+ECBAgAABAgQIECBAgAABAgQIECBAYKCAgHcglMsIECBAgAABAgQIECBAgAABAgQIECAwNgEB79gqoj8ECBAgQIAAAQIECBAgQIAAAQIECBAYKCDgHQjlMgIECBAgQIAAAQIECBAgQIAAAQIECIxNQMA7toroDwECBAgQIECAAAECBAgQIECAAAECBAYKCHgHQrmMAAECBAgQIECAAAECBAgQIECAAAECYxMQ8I6tIvpDgAABAgQIECBAgAABAgQIECBAgACBgQIC3oFQLiNAgAABAgQIECBAgAABAgQIECBAgMDYBAS8Y6uI/hAgQIAAAQIECBAgQIAAAQIECBAgQGCggIB3IJTLCBAgQIAAAQIECBAgQIAAAQIECBAgMDYBAe/YKqI/BAgQIECAAAECBAgQIECAAAECBAgQGCgg4B0I5TICBAgQIECAAAECBAgQIECAAAECBAiMTUDAO7aK6A8BAgQIECBAgAABAgQIECBAgAABAgQGCgh4B0K5jAABAgQIECBAgAABAgQIECBAgAABAmMTEPCOrSL6Q4AAAQIECBAgQIAAAQIECBAgQIAAgYECAt6BUC4jQIAAAQIECBAgQIAAAQIECBAgQIDA2AQEvGOriP4QIECAAAECBAgQIECAAAECBAgQIEBgoICAdyCUywgQIECAAAECBAgQIECAAAECBAgQIDA2AQHv2CqiPwQIECBAgAABAgQIECBAgAABAgQIEBgoIOAdCOUyAgQIECBAgAABAgQIECBAgAABAgQIjE1AwDu2iugPAQIECBAgQIAAAQIECBAgQIAAAQIEBgoIeAdCuYwAAQIECBAgQIAAAQIECBAgQIAAAQJjExDwjq0i+kOAAAECBAgQIECAAAECBAgQIECAAIGBAgLegVAuI0CAAAECBAgQIECAAAECBAgQIECAwNgEBLxjq4j+ECBAgAABAgQIECBAgAABAgQIECBAYKCAgHcglMsIECBAgAABAgQIECBAgAABAgQIECAwNgEB79gqoj8ECBAgQIAAAQIECBAgQIAAAQIECBAYKCDgHQjlMgIECBAgQIAAAQIECBAgQIAAAQIECIxNQMA7toroDwECBAgQIECAAAECBAgQIECAAAECBAYKCHgHQrmMAAECBAgQIECAAAECBAgQIECAAAECYxMQ8I6tIvpDgAABAgQIECBAgAABAgQIECBAgACBgQIC3oFQLiNAgAABAgQIECBAgAABAgQIECBAgMDYBAS8Y6uI/hAgQIAAAQIECBAgQIAAAQIECBAgQGCggIB3IJTLCBAgQIAAAQIECBAgQIAAAQIECBAgMDYBAe/YKqI/BAgQIECAAAECBAgQIECAAAECBAgQGCgg4B0I5TICBAgQIECAAAECBAgQIECAAAECBAiMTUDAO7aK6A8BAgQIECBAgAABAgQIECBAgAABAgQGCgh4B0K5jAABAgQIECBAgAABAgQIECBAgAABAmMTEPCOrSL6Q4AAAQIECBAgQIAAAQIECBAgQIAAgYECAt6BUC4jQIAAAQIECBAgQIAAAQIECBAgQIDA2AQEvGOriP4QIECAAAECBAgQIECAAAECBAgQIEBgoICAdyCUywgQIECAAAECBAgQIECAAAECBAgQIDA2AQHv2CqiPwQIECBAgAABAgQIECBAgAABAgQIEBgoIOAdCOUyAgQIECBAgAABAgQIECBAgAABAgQIjE1AwDu2iugPAQIECBAgQIAAAQIECBAgQIAAAQIEBgoIeAdCuYwAAQIECBAgQIAAAQIECBAgQIAAAQJjExDwjq0i+kOAAAECBAgQIECAAAECBAgQIECAAIGBAgLegVAuI0CAAAECBAgQIECAAAECBAgQIECAwNgEBLxjq4j+ECBAgAABAgQIECBAgAABAgQIECBAYKCAgHcglMsIECBAgAABAgQIECBAgAABAgQIECAwNgEB79gqoj8ECBAgQIAAAQIECBAgQIAAAQIECBAYKCDgHQjlMgIECBAgQIAAAQIECBAgQIAAAQIECIxNQMA7toroDwECBAgQIECAAAECBAgQIECAAAECBAYKCHgHQrmMAAECBAgQIECAAAECBAgQIECAAAECYxMQ8I6tIvpDgAABAgQIECBAgAABAgQIECBAgACBgQIC3oFQLiNAgAABAgQIECBAgAABAgQIECBAgMDYBAS8Y6uI/hAgQIAAAQIECBAgQIAAAQIECBAgQGCggIB3IJTLCBAgQIAAAQIECBAgQIAAAQIECBAgMDYBAe/YKqI/BAgQIECAAAECBAgQIECAAAECBAgQGCgg4B0I5TICBAgQIECAAAECBAgQIECAAAECBAiMTUDAO7aK6A8BAgQIECBAgAABAgQIECBAgAABAgQGCgh4B0K5jAABAgQIECBAgAABAgQIECBAgAABAmMTEPCOrSL6Q4AAAQIECBAgQIAAAQIECBAgQIAAgYECAt6BUC4jQIAAAQIECBAgQIAAAQIECBAgQIDA2AQEvGOriP4QIECAAAECBAgQIECAAAECBAgQIEBgoICAdyCUywgQIECAAAECBAgQIECAAAECBAgQIDA2AQHv2CqiPwQIECBAgAABAgQIECBAgAABAgQIEBgoIOAdCOUyAgQIECBAgAABAgQIECBAgAABAgQIjE1AwDu2iugPAQIECBAgQIAAAQIECBAgQIAAAQIEBgoIeAdCuYwAAQIECBAgQIAAAQIECBAgQIAAAQJjExDwjq0i+kOAAAECBAgQIECAAAECBAgQIECAAIGBAgLegVAuI0CAAAECBAgQIECAAAECBAgQIECAwNgEBLxjq4j+ECBAgAABAgQIECBAgAABAgQIECBAYKCAgHcglMsIECBAgAABAgQIECBAgAABAgQIECAwNgEB79gqoj8ECBAgQIAAAQIECBAgQIAAAQIECBAYKCDgHQjlMgIECBAgQIAAAQIECBAgQIAAAQIECIxNQMA7toroDwECBAgQIECAAAECBAgQIECAAAECBAYKCHgHQrmM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5ySfmop5WVU9e0+Fdff/STJaNXylqm57QBawh4cIeLdS37MJECBAgAABAgQIECBAgAABAgQIEJiFQHcfl+SCqZgnVdUZ6xXW3U9I8ubp2p9U1eO3cgEC3q3U92wCBAgQIECAAAECBAgQIECAAAECBGYhsOYE73Oq6oVrC+vumya5ZOnFbcdW1UVbuQAB71bqezYBAgQIECBAgAABAgQIECBAgAABArMR6O4R3o72DZcluX1VXbNcXHf/ZZJHTN+dX1X32OriBbxbvQOeT4AAAQIECBAgQIAAAQIECBAgQIDALAS6+5Qkr5yKuTTJ+PzWJLdL8hdJ7jldG31771BVIwje0iHg3VJ+DydAgAABAgQIECBAgAABAgQIECBAYE4C3f3SJL+xVFMnWc5Rr0vykKr6wBzqFvDOYRfUQIAAAQIECBAgQIAAAQIECBAgQIDAbAS6++Qkr0hyxJqiPpzkMVV18VyKFfDOZSfUQYAAAQIECBAgQIAAAQIECBAgQIDArAS6+6QkD0xyVZL3bPUL1dbDEfDO6k9GMQQIECBAgAABAgQIECBAgAABAgQIEFhdQMC7upWZBAgQIECAAAECBAgQIECAAAECBAgQmJWAgHdW26EYAgQIECBAgAABAgQIECBAgAABAgQIrC4g4F3dykwCBAgQIECAAAECBAgQIECAAAECBAjMSkDAO6vtUAwBAgQIECBAgAABAgQIECBAgAABAgRWFxDwrm5lJgECBAgQIECAAAECBAgQIECAAAECBGYlIOCd1XYohgABAgQIECBAgAABAgQIECBAgAABAqsLCHhXtzKTAAECBAgQIECAAAECBAgQIECAAAECsxIQ8M5qOxRDgAABAgQIECBAgAABAgQIECBAgACB1QUEvKtbmUmAAAECBAgQIECAAAECBAgQIECAAIFZCQh4Z7UdiiFAgAABAgQIECBAgAABAgQIECBAgMDqAgLe1a3MJECAAAECBAgQIECAAAECBAgQIECAwKwEBLyz2g7FECBAgAABAgQIECBAgAABAgQIECBAYHUBAe/qVmYSIECAAAECBAgQIECAAAECBAgQIEBgVgIC3llth2IIECBAgAABAgQIECBAgAABAgQIECCwuoCAd3UrMwkQIECAAAECBAgQIECAAAECBAgQIDArAQHvrLZDMQQIECBAgAABAgQIECBAgAABAgQIEFhdQMC7upWZBAgQIECAAAECBAgQIECAAAECBAgQmJWAgHdW26EYAgQIECBAgAABAgQIECBAgAABAgQIrC4g4F3dykwCBAgQIECAAAECBAgQIECAAAECBAjMSkDAO6vtUAwBAgQIECBAgAABAgQIECBAgAABAgRWFxDwrm5lJgECBAgQIECAAAECBAgQIECAAAECBGYlIOCd1XYohgABAgQIECBAgAABAgQIECBAgAABAqsLCHhXtzKTAAECBAgQIECAAAECBAgQIECAAAECsxIQ8M5qOxRDgAABAgQIECBAgAABAgQIECBAgACB1QUEvKtbmUmAAAECBAgQIECAAAECBAgQIECAAIFZCQh4Z7UdiiFAgAABAgQIECBAgAABAgQIECBAgMDqAgLe1a3MJECAAAECBAgQIECAAAECBAgQIECAwKwEBLyz2g7FECBAgAABAgQIECBAgAABAgQIECBAYHUBAe/qVmYSIECAAAECBAgQIECAAAECBAgQIEBgVgIC3llth2IIECBAgAABAgQIECBAgAABAgQIECCwuoCAd3UrMwkQIECAAAECBAgQIECAAAECBAgQIDArAQHvrLZDMQQIECBAgAABAgQIECBAgAABAgQIEFhdQMC7upWZBAgQIECAAAECBAgQIECAAAECBAgQmJWAgHdW26EYAgQIECBAgMC8BLr7kUletVTVlVV1wlZW2d0/l+QNUw3XVtWtt7IezyZAgAABAgQIECCwlQIC3q3U92wCBAgQIECAwMwFuvvcJPddU+YTq+pNm1l6d98+yReme44Q+ZZ7un93n5LklYvrVbVp/6bt7iuTfO9076Or6pLNXKd7ESBAgAABAgQIENhsgU37x/BmF+Z+BAgQIECAAAECWyvQ3YcmuSrJTdZUcl5VnbiZ1XX3nZJcNN3z6qr6ni0KeL+RZKx7jB+sqi9u5jrdiwABAgQIECBAgMBmCwh4N1vU/QgQIECAAAECO0Sgu09N8uJ1ltNJDquqazZrqRsMeMfp3vtPz/5GVb1/E+sQ8G4WpvsQIECAAAECBAgcEAEB7wFh9hACBAgQIECAwPYT6O5xonacrB3j95I8Nckh0+f/VFUv2qxVbSTg3axnrnef7hbw7k9g9yZAgAABAgQIENh0AQHvppO6IQECBAgQIEBg+wt09w8kWW5PcHSSNyb58Wl1n6uqRfi7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/+kXn0nyv6rqmtXu8P9mTS+OOzHJuNdo+TBeGvehqhptH/Y5unu0chhh762TjPYRH6iqcbrXIECAAAECBAgQIDAbAQHvbLZCIQQIECBAgAABAgQIECBAgAABAgQIENiYgIB3Y15mEyBAgAABAgQIECBAgAABAgQIECBAYDYCAt7ZbIVCCBAgQIAAAQIECBAgQIAAAQIECBAgsDEBAe/GvMwmQIAAAQIECBAgQIAAAQIECBAgQIDAbAQEvLPZCoUQIECAAAECBAgQIECAAAECBAgQIEBgYwIC3o15mU2AAAECBAgQIECAAAECBAgQIECAAIHZCAh4Z7MVCiFAgAABAgQIECBAgAABAgQIECBAgMDGBAS8G/MymwABAgQIECBAgAABAgQIECBAgAABArMREPDOZisUQoAAAQIECBAgQIAAAQIECBAgQIAAgY0JCHg35mU2AQIECBAgQIAAAQIECBAgQIAAAQIEZiMg4J3NViiEAAECBAgQIECAAAECBAgQIECAAAECGxMQ8G7My2wCBAgQIECAAAECBAgQIECAAAECBAjMRkDAO5utUAgBAgQIECBAgAABAgQIECBAgAABAgQ2JiDg3ZiX2QQIECBAgAABAgQIECBAgAABAgQIEJiNgIB3NluhEAIECBAgQIAAAQIECBAgQIAAAQIECGxMQMC7MS+zCRAgQIAAAQIECBAgQIAAAQIECBAgMBsBAe9stkIhBAgQIECAAAECBAgQIECAAAECBAgQ2JiAgHdjXmYTIECAAAECBAgQIECAAAECBAgQIEBgNgIC3tlshUIIECBAgAABAgQIECBAgAABAgQIECCwMQEB78a8zCZAgAABAgQIECBAgAABAgQIECBAgMBsBAS8s9kKhRAgQIAAAQIECBAgQIAAAQIECBAgQGBjAgLejXmZTYAAAQIECBAgQIAAAQIECBAgQIAAgdkICHhnsxUKIUCAAAECBAgQIECAAAECBAgQIECAwMYE/i+/XtiHNCgW7gAAAABJRU5ErkJggg==", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "AI-generated follow-up questions:\n", - "\n", - "* What is the total sales for each artist?\n", - "* What are the top-selling albums for each artist?\n", - "* Which genre has the highest sales?\n", - "* What is the total sales for each genre?\n", - "* What are the sales trends over the years?\n", - "* How many albums are there in the database?\n", - "* Who are the top-selling artists in each genre?\n", - "* What are the top-selling tracks?\n", - "* What is the average sales per artist?\n", - "* How does the sales distribution vary across different genres?\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "vn.ask(\"What are the top 5 artists by sales?\")" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Now try your own question\n", - "\n", - "For reference, these are the tables in the database\n", - "\n", - "\"\"" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "vn.ask()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Launch the User Interface\n", - "![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from vanna.flask import VannaFlaskApp\n", - "app = VannaFlaskApp(vn)\n", - "app.run()" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.2" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/notebooks/index.ipynb b/notebooks/index.ipynb deleted file mode 100644 index c7c9ea9f..00000000 --- a/notebooks/index.ipynb +++ /dev/null @@ -1,63 +0,0 @@ -{ - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## How Vanna works\n", - "Vanna works in two easy steps - train a RAG \"model\" on your data, and then ask questions which will return SQL queries that can be set up to automatically run on your database.\n", - "\n", - "1. `vn.train(...)`: Train a RAG \"model\" on your data. These methods add to the reference corpus below. \n", - "2. `vn.ask(...)`: Ask questions. This will use the reference corpus to generate SQL queries that can be run on your database.\n", - "\n", - "![](/blog/img/how-it-works.png)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Video Walkthrough\n", - "This video is slightly dated and we'll be updating it soon." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "base", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.9" - }, - "orig_nbformat": 4 - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/notebooks/local.ipynb b/notebooks/local.ipynb deleted file mode 100644 index 61d7f0af..00000000 --- a/notebooks/local.ipynb +++ /dev/null @@ -1,374 +0,0 @@ -{ - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Using Vanna with a Local Context Database\n", - "Generally it's a lot easier to get started with Vanna using our hosted service. However, if you want to run Vanna locally, you can do so by running a local context database using ChromaDB. This notebook will walk you through the steps to do so." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%pip install 'vanna[chromadb,snowflake,openai]'" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "from vanna.local import LocalContext_OpenAI" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Configure OpenAI API Key\n", - "If you're using Azure OpenAI there are some additional parameters to specify beyond the API Key" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "# Use the regular OpenAI API\n", - "vn = LocalContext_OpenAI({\"api_key\": \"sk-...\"})\n", - "\n", - "# Use the Azure OpenAI API\n", - "vn = LocalContext_OpenAI(config={\n", - " \"api_type\": \"azure\",\n", - " \"api_base\": \"https://...\",\n", - " \"api_version\": \"2023-05-15\",\n", - " \"engine\": \"YOUR_ENGINE_HERE\",\n", - " \"api_key\": \"sk-...\"\n", - "})" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Train using a Sample SQL Query\n", - "The easiest way to get started is to just paste in one SQL query and let Vanna train on it. This will create a new context database and train a model on it. You can then use that model to generate SQL queries." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Using model gpt-3.5-turbo for 147.5 tokens (approx)\n", - "Question generated with sql: What are the top 5 customers in terms of total sales? \n", - "Adding SQL...\n" - ] - } - ], - "source": [ - "vn.train(sql=\"\"\"\n", - "SELECT c.c_name as customer_name,\n", - " sum(l.l_extendedprice * (1 - l.l_discount)) as total_sales\n", - "FROM snowflake_sample_data.tpch_sf1.lineitem l join snowflake_sample_data.tpch_sf1.orders o\n", - " ON l.l_orderkey = o.o_orderkey join snowflake_sample_data.tpch_sf1.customer c\n", - " ON o.o_custkey = c.c_custkey\n", - "GROUP BY customer_name\n", - "ORDER BY total_sales desc limit 5;\n", - "\"\"\")" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Connect to the Database\n", - "This is the database that will be used to run the generated SQL queries against. Here we're connecting to Snowflake." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "vn.connect_to_snowflake(account='my-account', username='my-username', password='my-password', database='my-database')" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Begin Asking Questions\n", - "There is an automatic feedback loop here so when you ask a question that results in SQL that can execute, it will automatically be added to the context database and used to train the model." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Number of requested results 10 is greater than number of elements in index 1, updating n_results = 1\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Using model gpt-3.5-turbo for 167.0 tokens (approx)\n", - "SELECT c.c_name as customer_name,\n", - " sum(l.l_extendedprice * (1 - l.l_discount)) as total_sales\n", - "FROM snowflake_sample_data.tpch_sf1.lineitem l join snowflake_sample_data.tpch_sf1.orders o\n", - " ON l.l_orderkey = o.o_orderkey join snowflake_sample_data.tpch_sf1.customer c\n", - " ON o.o_custkey = c.c_custkey\n", - "GROUP BY customer_name\n", - "ORDER BY total_sales desc limit 10;\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CUSTOMER_NAMETOTAL_SALES
0Customer#0001435006757566.0218
1Customer#0000952576294115.3340
2Customer#0000871156184649.5176
3Customer#0001311136080943.8305
4Customer#0001343806075141.9635
5Customer#0001038346059770.3232
6Customer#0000696826057779.0348
7Customer#0001020226039653.6335
8Customer#0000985876027021.5855
9Customer#0000646605905659.6159
\n", - "
" - ], - "text/plain": [ - " CUSTOMER_NAME TOTAL_SALES\n", - "0 Customer#000143500 6757566.0218\n", - "1 Customer#000095257 6294115.3340\n", - "2 Customer#000087115 6184649.5176\n", - "3 Customer#000131113 6080943.8305\n", - "4 Customer#000134380 6075141.9635\n", - "5 Customer#000103834 6059770.3232\n", - "6 Customer#000069682 6057779.0348\n", - "7 Customer#000102022 6039653.6335\n", - "8 Customer#000098587 6027021.5855\n", - "9 Customer#000064660 5905659.6159" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Using model gpt-3.5-turbo for 259.25 tokens (approx)\n", - "huggingface/tokenizers: The current process just got forked, after parallelism has already been used. Disabling parallelism to avoid deadlocks...\n", - "To disable this warning, you can either:\n", - "\t- Avoid using `tokenizers` before the fork if possible\n", - "\t- Explicitly set the environment variable TOKENIZERS_PARALLELISM=(true | false)\n" - ] - }, - { - "data": { - "image/png": "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QAABBBBAAAEEEEAAAQQQQAABBBBAAAECXuYAAggggAACCCCAAAIIIIAAAggggAACCCBgUwECXpsOHN1GAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQIeJkDCCCAAAIIIIAAAggggAACCCCAAAIIIICATQUIeG06cHQbAQQQQAABBBBAAAEEEEAAAQQQQAABBBAg4GUOIIAAAggggAACCCCAAAIIIIAAAggggAACNhUg4LXpwNFtBBBAAAEEEEAAAQQQQAABBBBAAAEEEECAgJc5gAACCCCAAAIIIIAAAggggAACCCCAAAII2FSAgNemA0e3EUAAAQQQQAABBBBAAAEEEEAAAQQQQAABAl7mAAIIIIAAAggggAACCCCAAAIIIIAAAgggYFMBAl6bDhzdRgABBBBAAAEEEEAAAQQQQAABBBBAAAEECHiZAwgggAACCCCAAAIIIIAAAggggAACCCCAgE0FCHhtOnB0GwEEEEAAAQQQQAABBBBAAAEEEEAAAQQQIOBlDiCAAAIIIIAAAggggAACCCCAAAIIIIAAAjYVIOC16cDRbQQQQAABBBBAAAEEEEAAAQQQQAABBBBAgICXOYAAAggggAACCCCAAAIIIIAAAggggAACCNhUgIDXpgNHtxFAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQJe5gACCCCAAAIIIIAAAggggAACCCCAAAIIIGBTAQJemw4c3UYAAQTuh0DRosUkd548xqkvXbosS5csuh/diNPnrFq1ujyU9iHD4PDhw7J508Y47cHFI4AAAggggAACCCCAAAJxXYCA180MiBcvnhQsWCikc+P27duye/eukLZpp8YSJUok1arXNLp85cplWf37qhh1X0OmWo/VkfLlK0rChAnljz/WyaKFC+SP9evkzp07MWo7mIPLV6goderUkwwZM0natGmNPhw9ekT27dsre3bvkk0bN8jVq1eDaZpjEIgogUVLVkjefPmNPt26dUty58gSUf0LVWceSptWypQpJ0WKFpW8efNJunTp5fz5c3L0yBE5cuSwHDiwX3bu2C6XLl0K1Sn9bmfvgaOi36m6HTt2VCpXLOv3seyIAAIIIIAAAggggAACCCAQ+wQIeN2M6WN16sk3Y8aFfLSbNW0o69etDXm7dmiwVeuX5YO+/WIcCnV5+x3p+HoniR8/vtvL1mB13tzZ8mq7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eG06cHQbAQQQQAABBBBAAAEEEEAAAQQQQAABBBAg4GUOIIAAAggggAACCCCAAAIIIIAAAggggAACNhUg4LXpwNFtBBBAAAEEEEAAAQQQQAABBBBAAAEEEECAgJc5gAACCCCAAAIIIIAAAggggAACCCCAAAII2FSAgNemA0e3EUAAAQQQQAABBBBAAAEEEEAAAQQQQAABAl7mAAIIIIAAAggggAACCCCAAAIIIIAAAgggYFMBAl6bDhzdRgABBBBAAAEEEEAAAQQQQAABBBBAAAEECHiZAwgggAACCCCAAAIIIIAAAggggAACCCCAgE0FCHhtOnB0GwEEEEAAAQQQQAABBBBAAAEEEEAAAQQQIOBlDiCAAAIIIIAAAggggAACCCCAAAIIIIAAAjYVIOC16cDRbQQQQAABBBBAAAEEEEAAAQQQQAABBBBAgICXOYAAAggggAACCCCAAAIIIIAAAggggAACCNhUgIDXpgNHtxFAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQJe5gACCCCAAAIIIIAAAggggAACCCCAAAIIIGBTAQJemw4c3UYAAQQQQAABBBBAAAEEEEAAAQQQQAABBAh4mQMIIIAAAggggAACCCCAAAIIIIAAAggggIBNBQh4bTpwdBsBBBBAAAEEEEAAAQQQQAABBBBAAAEEECDgZQ4ggAACCCCAAAIIIIAAAggggAACCCCAAAI2FSDgtenA0W0EEEAAAQQQQAABBBBAAAEEEEAAAQQQQICAlzmAAAIIIIAAAggggAACCCCAAAIIIIAAAgjYVICA16YDR7cRQAABBBBAAAEEEEAAAQQQQAABBBBAAAECXuYAAggggAACCCCAAAIIIIAAAggggAACCCBgUwECXpsOHN1GAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQIeJkDCCCAAAIIIIAAAggggAACCCCAAAIIIICATQUIeG06cHQbAQQQQAABBBBAAAEEEEAAAQQQQAABBBAg4GUOIIAAAggggAACCCCAAAIIIIAAAggggAACNhUg4LXpwNFtBBBAAAEEEEAAAQQQQAABBBBAAAEEEECAgJc5gAACCCCAAAIIIIAAAggggAACCCCAAAII2FSAgNemA0e3EUAAAQQQQAABBBBAAAEEEEAAAQQQQAABAl7mAAIIIIAAAggggAACCCCAAAIIIIAAAggg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owAJ3mCcVcaEAAIIIIAAAggggAACCCCAAAIIIIAAArYQIMFri2lmkAgggAACCCCAAAIIIIAAAggggAACCCAQjAIkeINxVhkTAggggAACCCCAAAIIIIAAAggggAACCNhCgASvLaaZQSKAAAIIIIAAAggggAACCCCAAAIIIIBAMAqQ4A3GWWVMCCCAAAIIIIAAAggggAACCCCAAAIIIGALARK8tphmBokAAggggAACCCCAAAIIIIAAAggggAACwShAgjcYZ5UxIYAAAggggAACCCCAAAIIIIAAAggggIAtBEjw2mKaGSQCCCCAAAIIIIAAAggggAACCCCAAAIIBKMACd5gnFXGhAACCCCAAAIIIIAAAggggAACCCCAAAK2ECDBa4tpZpAIIIAAAggggAACCCCAAAIIIIAAAgggEIwCJHiDcVYZEwIIIIAAAggggAACCCCAAAIIIIAAAgjYQoAEry2mmUEigAACCCCAAAIIIIAAAggggAACCCCAQDAKkOANxlllTAgggAACCCCAAAIIIIAAAggggAACCCBgCwESvLaYZgaJAAIIIIAAAggggAACCCCAAAIIIIAAAsEoQII3GGeVMSGAAAIIIIAAAggggAACCCCAAAIIIICALQRI8NpimhkkAggggAACCCCAAAIIIIAAAggggAACCASjAAneYJxVxoQAAggggAACCCCAAAIIIIAAAggggAACthAgwWuLaWaQCCCAAAIIIIAAAggggAACCCCAAAIIIBCMAiR4g3FWGRMCCCCAAAIIIIAAAggggAACCCCAAAII2EKABK8tpplBIoAAAggggAACCCCAAAIIIIAAAggggEAwCvwPX4dIeV2zus4AAAAASUVORK5CYII=", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "vn.ask(\"What are the top 10 customers by sales?\")" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Training Plan\n", - "A training plan is a great way to extract metadata from your database to use for training. You specify which databases and schemas to filter on and it will attempt to retrieve past queries from the query history as well as the table and column names from the information schema." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Trying query history\n", - "Using model gpt-3.5-turbo for 147.25 tokens (approx)\n", - "Using model gpt-3.5-turbo for 168.25 tokens (approx)\n", - "Using model gpt-3.5-turbo for 147.0 tokens (approx)\n", - "Using model gpt-3.5-turbo for 147.25 tokens (approx)\n", - "Trying INFORMATION_SCHEMA.DATABASES\n", - "Trying INFORMATION_SCHEMA.COLUMNS for SNOWFLAKE_SAMPLE_DATA\n" - ] - }, - { - "data": { - "text/plain": [ - "Train on SQL: What are the top 10 customers based on their total sales?\n", - "Train on SQL: What are the top 10 countries with the highest total sales?\n", - "Train on SQL: What are the top 5 customers based on their total sales?\n", - "Train on SQL: What are the top 15 customers based on their total sales?\n", - "Train on Information Schema: SNOWFLAKE_SAMPLE_DATA.TPCH_SF1 CUSTOMER\n", - "Train on Information Schema: SNOWFLAKE_SAMPLE_DATA.TPCH_SF1 SUPPLIER\n", - "Train on Information Schema: SNOWFLAKE_SAMPLE_DATA.TPCH_SF1 LINEITEM\n", - "Train on Information Schema: SNOWFLAKE_SAMPLE_DATA.TPCH_SF1 PARTSUPP\n", - "Train on Information Schema: SNOWFLAKE_SAMPLE_DATA.TPCH_SF1 PART\n", - "Train on Information Schema: SNOWFLAKE_SAMPLE_DATA.TPCH_SF1 ORDERS\n", - "Train on Information Schema: SNOWFLAKE_SAMPLE_DATA.TPCH_SF1 REGION\n", - "Train on Information Schema: SNOWFLAKE_SAMPLE_DATA.TPCH_SF1 NATION" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "training_plan = vn.get_training_plan_snowflake(filter_databases=['SNOWFLAKE_SAMPLE_DATA'], filter_schemas=['TPCH_SF1'])\n", - "training_plan" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "vn.train(plan=training_plan)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Ask More Questions!\n", - "Now that you have a fuly trained model, you can continue asking questions and it will continue to learn and improve." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "vn.ask()" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "venv", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.2" - }, - "orig_nbformat": 4 - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/notebooks/manual-train.ipynb b/notebooks/manual-train.ipynb deleted file mode 100644 index cfbac36a..00000000 --- a/notebooks/manual-train.ipynb +++ /dev/null @@ -1,400 +0,0 @@ -{ - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Manually Training Vanna\n", - "This notebook shows how to manually train Vanna. If you prefer to automatically train Vanna, see [here](vn-train.html)\n", - "\n", - "# Install Vanna\n", - "First we install Vanna from [PyPI](https://pypi.org/project/vanna/) and import it.\n", - "Here, we'll also install the Snowflake connector. If you're using a different database, you'll need to install the appropriate connector." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%pip install vanna" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import vanna as vn" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Login\n", - "Creating a login and getting an API key is as easy as entering your email (after you run this cell) and entering the code we send to you. Check your Spam folder if you don't see the code." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "api_key = vn.get_api_key('my-email@example.com')\n", - "vn.set_api_key(api_key)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Set your Model\n", - "You need to choose a globally unique model name. Try using your company name or another unique string. All data from models are isolated - there's no leakage." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "vn.set_model('my-model') # Enter your model name here. This is a globally unique identifier for your model." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Train with DDL Statements\n", - "If you prefer to manually train, you do not need to connect to a database. You can use the train function with other parmaeters like ddl" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "vn.train(ddl=\"\"\"\n", - " CREATE TABLE IF NOT EXISTS my-table (\n", - " id INT PRIMARY KEY,\n", - " name VARCHAR(100),\n", - " age INT\n", - " )\n", - "\"\"\")" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Train with Documentation\n", - "Sometimes you may want to add documentation about your business terminology or definitions." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "vn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Train with SQL\n", - "You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "vn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# View Training Data\n", - "At any time you can see what training data is in your model" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idtraining_data_typequestioncontent
015-docdocumentationNoneThis is a table in the PARTSUPP table.\\n\\nThe ...
111-docdocumentationNoneThis is a table in the CUSTOMER table.\\n\\nThe ...
214-docdocumentationNoneThis is a table in the ORDERS table.\\n\\nThe fo...
31244-sqlsqlWhat are the names of the top 10 customers?SELECT c.c_name as customer_name\\nFROM snowf...
41242-sqlsqlWhat are the top 5 customers in terms of total...SELECT c.c_name AS customer_name, SUM(l.l_quan...
517-docdocumentationNoneThis is a table in the REGION table.\\n\\nThe fo...
616-docdocumentationNoneThis is a table in the PART table.\\n\\nThe foll...
71243-sqlsqlWhat are the top 10 customers with the highest...SELECT c.c_name as customer_name,\\n sum(...
81239-sqlsqlWhat are the top 100 customers based on their ...SELECT c.c_name as customer_name,\\n sum(...
913-docdocumentationNoneThis is a table in the SUPPLIER table.\\n\\nThe ...
101241-sqlsqlWhat are the top 10 customers in terms of tota...SELECT c.c_name as customer_name,\\n sum(...
1112-docdocumentationNoneThis is a table in the LINEITEM table.\\n\\nThe ...
1218-docdocumentationNoneThis is a table in the NATION table.\\n\\nThe fo...
131248-sqlsqlHow many customers are in each country?SELECT n.n_name as country,\\n count(*) a...
141240-sqlsqlWhat is the number of orders placed each week?SELECT date_trunc('week', o_orderdate) as week...
\n", - "
" - ], - "text/plain": [ - " id training_data_type \\\n", - "0 15-doc documentation \n", - "1 11-doc documentation \n", - "2 14-doc documentation \n", - "3 1244-sql sql \n", - "4 1242-sql sql \n", - "5 17-doc documentation \n", - "6 16-doc documentation \n", - "7 1243-sql sql \n", - "8 1239-sql sql \n", - "9 13-doc documentation \n", - "10 1241-sql sql \n", - "11 12-doc documentation \n", - "12 18-doc documentation \n", - "13 1248-sql sql \n", - "14 1240-sql sql \n", - "\n", - " question \\\n", - "0 None \n", - "1 None \n", - "2 None \n", - "3 What are the names of the top 10 customers? \n", - "4 What are the top 5 customers in terms of total... \n", - "5 None \n", - "6 None \n", - "7 What are the top 10 customers with the highest... \n", - "8 What are the top 100 customers based on their ... \n", - "9 None \n", - "10 What are the top 10 customers in terms of tota... \n", - "11 None \n", - "12 None \n", - "13 How many customers are in each country? \n", - "14 What is the number of orders placed each week? \n", - "\n", - " content \n", - "0 This is a table in the PARTSUPP table.\\n\\nThe ... \n", - "1 This is a table in the CUSTOMER table.\\n\\nThe ... \n", - "2 This is a table in the ORDERS table.\\n\\nThe fo... \n", - "3 SELECT c.c_name as customer_name\\nFROM snowf... \n", - "4 SELECT c.c_name AS customer_name, SUM(l.l_quan... \n", - "5 This is a table in the REGION table.\\n\\nThe fo... \n", - "6 This is a table in the PART table.\\n\\nThe foll... \n", - "7 SELECT c.c_name as customer_name,\\n sum(... \n", - "8 SELECT c.c_name as customer_name,\\n sum(... \n", - "9 This is a table in the SUPPLIER table.\\n\\nThe ... \n", - "10 SELECT c.c_name as customer_name,\\n sum(... \n", - "11 This is a table in the LINEITEM table.\\n\\nThe ... \n", - "12 This is a table in the NATION table.\\n\\nThe fo... \n", - "13 SELECT n.n_name as country,\\n count(*) a... \n", - "14 SELECT date_trunc('week', o_orderdate) as week... " - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "vn.get_training_data()" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Removing Training Data\n", - "If you added some training data by mistake, you can remove it. Model performance is directly linked to the quality of the training data." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "vn.remove_training_data(id='my-training-data-id')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Asking Questions" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "vn.ask()" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.2" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/notebooks/other-database-mistral-chromadb.ipynb b/notebooks/other-database-mistral-chromadb.ipynb deleted file mode 100644 index c63156fa..00000000 --- a/notebooks/other-database-mistral-chromadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "22323c93-597c-5855-a512-939a14abf9e5", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Other Database using Mistral via Mistral API, ChromaDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "6ae2763b-0004-5c7a-b3ac-a55a75770c34", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "e06c544b-8433-5bbd-b0cf-0b9130f134bf", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "30aef63a-a75b-52bd-8f9c-7fc096e0aba3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[chromadb,mistralai]'"}, {"id": "3a68caf5-fa2e-5ee9-9bbb-7b85ea07a5ea", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.chromadb.chromadb_vector import ChromaDB_VectorStore\nfrom vanna.mistral.mistral import Mistral\n"}, {"id": "0a4dc6a1-8cfc-53ae-a9fb-4eca76807451", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(ChromaDB_VectorStore, Mistral):\n def __init__(self, config=None):\n ChromaDB_VectorStore.__init__(self, config=config)\n Mistral.__init__(self, config={'api_key': MISTRAL_API_KEY, 'model': 'mistral-tiny'})\n\nvn = MyVanna()\n"}, {"id": "2d9f1da7-2bcd-5837-b39d-2a5a6c3182b9", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "9b30d7e1-f279-5b6a-a620-fc988020efcc", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\nimport pandas as pd\n\n# There's usually a library for connecting to your type of database. Any SQL database will work here -- you just have to use the right library.\nconn_details = {...} # fill this with your connection details\nconn = ... # fill this with your connection object\n\n# You define a function that takes in a SQL query as a string and returns a pandas dataframe\ndef run_sql(sql: str) -> pd.DataFrame:\n df = pd.read_sql_query(sql, conn)\n return df\n\n# This gives the package a function that it can use to run the SQL\nvn.run_sql = run_sql\nvn.run_sql_is_set = True\n"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/other-database-mistral-marqo.ipynb b/notebooks/other-database-mistral-marqo.ipynb deleted file mode 100644 index 17e95db8..00000000 --- a/notebooks/other-database-mistral-marqo.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "ca51d95b-179d-5082-896d-247b220d8713", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Other Database using Mistral via Mistral API, Marqo\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "8cd881d4-867e-522b-9d09-084e04c93f8a", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "75c9a403-0a59-57cb-9d7c-4c6ae11ede15", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "ec51e5b5-fc27-5c00-b1a8-6c9dd188e2f5", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[marqo,mistralai]'"}, {"id": "696e9c9c-d724-56db-9a06-10a66dc15b0a", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.marqo.marqo import Marqo\nfrom vanna.mistral.mistral import Mistral\n"}, {"id": "de83d46a-6116-5978-8b9a-f0f586a583bd", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(Marqo, Mistral):\n def __init__(self, config=None):\n Marqo.__init__(self, config={'marqo_url': MARQO_URL, 'marqo_model': MARQO_MODEL})\n Mistral.__init__(self, config={'api_key': MISTRAL_API_KEY, 'model': 'mistral-tiny'})\n\nvn = MyVanna()\n"}, {"id": "49d03c21-c228-5a4f-87ac-70555cfbb8f6", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "9b30d7e1-f279-5b6a-a620-fc988020efcc", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\nimport pandas as pd\n\n# There's usually a library for connecting to your type of database. Any SQL database will work here -- you just have to use the right library.\nconn_details = {...} # fill this with your connection details\nconn = ... # fill this with your connection object\n\n# You define a function that takes in a SQL query as a string and returns a pandas dataframe\ndef run_sql(sql: str) -> pd.DataFrame:\n df = pd.read_sql_query(sql, conn)\n return df\n\n# This gives the package a function that it can use to run the SQL\nvn.run_sql = run_sql\nvn.run_sql_is_set = True\n"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/other-database-mistral-other-vectordb.ipynb b/notebooks/other-database-mistral-other-vectordb.ipynb deleted file mode 100644 index c7587e4e..00000000 --- a/notebooks/other-database-mistral-other-vectordb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "924358e7-d53d-5554-baff-faa508826010", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Other Database using Mistral via Mistral API, Other VectorDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "69c22c46-b8d4-5ad1-a81a-f71314449d2a", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "94226258-345b-5cae-b6df-88c323f134d6", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "22d0fc58-9374-5bda-9414-d80b35fecb42", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[mistralai]'"}, {"id": "d54a05e2-de07-56c0-b57f-0bf2d42e559c", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.base import VannaBase\nfrom vanna.mistral.mistral import Mistral\n"}, {"id": "edc45a16-5782-5d88-9f4a-c405c1f79dea", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\nclass MyCustomVectorDB(VannaBase):\n def add_ddl(self, ddl: str, **kwargs) -> str:\n # Implement here\n\n def add_documentation(self, doc: str, **kwargs) -> str:\n # Implement here\n\n def add_question_sql(self, question: str, sql: str, **kwargs) -> str:\n # Implement here\n\n def get_related_ddl(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_related_documentation(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_similar_question_sql(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_training_data(self, **kwargs) -> pd.DataFrame:\n # Implement here\n\n def remove_training_data(id: str, **kwargs) -> bool:\n # Implement here\n\n\nclass MyVanna(MyCustomVectorDB, Mistral):\n def __init__(self, config=None):\n MyCustomVectorDB.__init__(self, config=config)\n Mistral.__init__(self, config={'api_key': MISTRAL_API_KEY, 'model': 'mistral-tiny'})\n\nvn = MyVanna()\n"}, {"id": "d8b7a1bc-c87f-5295-b5ea-80a34f34152f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "9b30d7e1-f279-5b6a-a620-fc988020efcc", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\nimport pandas as pd\n\n# There's usually a library for connecting to your type of database. Any SQL database will work here -- you just have to use the right library.\nconn_details = {...} # fill this with your connection details\nconn = ... # fill this with your connection object\n\n# You define a function that takes in a SQL query as a string and returns a pandas dataframe\ndef run_sql(sql: str) -> pd.DataFrame:\n df = pd.read_sql_query(sql, conn)\n return df\n\n# This gives the package a function that it can use to run the SQL\nvn.run_sql = run_sql\nvn.run_sql_is_set = True\n"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/other-database-mistral-vannadb.ipynb b/notebooks/other-database-mistral-vannadb.ipynb deleted file mode 100644 index c19e91d2..00000000 --- a/notebooks/other-database-mistral-vannadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "0e71bc98-8716-580a-b971-496b54f1af8e", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Other Database using Mistral via Mistral API, Vanna Hosted Vector DB (Recommended)\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "08388fc8-a2a0-51ff-a240-e9c7c1921808", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "3ea06d46-34b7-5339-b787-5c3e207a48f6", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "22d0fc58-9374-5bda-9414-d80b35fecb42", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[mistralai]'"}, {"id": "88b7ebec-d4f9-53aa-8f06-7c27055d16b0", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.vannadb.vannadb_vector import VannaDB_VectorStore\nfrom vanna.mistral.mistral import Mistral\n"}, {"id": "2aa3c756-d1ad-5b3c-a161-5bad6f77d594", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(VannaDB_VectorStore, Mistral):\n def __init__(self, config=None):\n VannaDB_VectorStore.__init__(self, vanna_model=MY_VANNA_MODEL, vanna_api_key=MY_VANNA_API_KEY, config=config)\n Mistral.__init__(self, config={'api_key': MISTRAL_API_KEY, 'model': 'mistral-tiny'})\n\nvn = MyVanna()\n"}, {"id": "fd4f6269-5ffc-59b5-809c-6b8f8737fae0", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "9b30d7e1-f279-5b6a-a620-fc988020efcc", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\nimport pandas as pd\n\n# There's usually a library for connecting to your type of database. Any SQL database will work here -- you just have to use the right library.\nconn_details = {...} # fill this with your connection details\nconn = ... # fill this with your connection object\n\n# You define a function that takes in a SQL query as a string and returns a pandas dataframe\ndef run_sql(sql: str) -> pd.DataFrame:\n df = pd.read_sql_query(sql, conn)\n return df\n\n# This gives the package a function that it can use to run the SQL\nvn.run_sql = run_sql\nvn.run_sql_is_set = True\n"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/other-database-openai-azure-chromadb.ipynb b/notebooks/other-database-openai-azure-chromadb.ipynb deleted file mode 100644 index 8f16606b..00000000 --- a/notebooks/other-database-openai-azure-chromadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "92ea27dc-5881-5eb6-93c3-455e04899d35", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Other Database using Azure OpenAI, ChromaDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "a30bd540-225c-5ca0-9f80-3628945e8366", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "598f1d53-90e9-5e9c-80c7-e375624cafae", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "d6e3ecc5-3c05-518b-8285-cf9dbf06ec58", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[chromadb,openai]'"}, {"id": "f6088c74-bfc7-5808-bd52-b2468267a3aa", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.openai.openai_chat import OpenAI_Chat\nfrom openai import AzureOpenAI\nfrom vanna.chromadb.chromadb_vector import ChromaDB_VectorStore\n"}, {"id": "895d74e6-b5e9-58f3-b58b-07c8e9d28707", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(ChromaDB_VectorStore, OpenAI_Chat):\n def __init__(self, config=None):\n ChromaDB_VectorStore.__init__(self, config=config)\n OpenAI_Chat.__init__(self, client=AzureOpenAI(...), config=config) # Make sure to put your AzureOpenAI client here\n\nvn = MyVanna(config={'model': 'gpt-4-...'})\n"}, {"id": "685e53b2-3f8c-5751-a7fe-1ecc1b20c51c", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "9b30d7e1-f279-5b6a-a620-fc988020efcc", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\nimport pandas as pd\n\n# There's usually a library for connecting to your type of database. Any SQL database will work here -- you just have to use the right library.\nconn_details = {...} # fill this with your connection details\nconn = ... # fill this with your connection object\n\n# You define a function that takes in a SQL query as a string and returns a pandas dataframe\ndef run_sql(sql: str) -> pd.DataFrame:\n df = pd.read_sql_query(sql, conn)\n return df\n\n# This gives the package a function that it can use to run the SQL\nvn.run_sql = run_sql\nvn.run_sql_is_set = True\n"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/other-database-openai-azure-marqo.ipynb b/notebooks/other-database-openai-azure-marqo.ipynb deleted file mode 100644 index 69f46341..00000000 --- a/notebooks/other-database-openai-azure-marqo.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "57d4a531-2711-5199-b845-0b545e6bd26a", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Other Database using Azure OpenAI, Marqo\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "403b36a4-dcbf-591a-8b34-2cee340d8ae4", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "1e2930f2-ae73-5c8c-8631-57cc399965a4", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "3d31b251-dcb5-5c7d-b5da-b692698ecdfa", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[marqo,openai]'"}, {"id": "6873a728-88db-5cf5-8a57-6355069c8a61", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.openai.openai_chat import OpenAI_Chat\nfrom openai import AzureOpenAI\nfrom vanna.marqo.marqo import Marqo\n"}, {"id": "aa425412-56b4-5b29-8f25-d0bb982b7446", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(Marqo, OpenAI_Chat):\n def __init__(self, config=None):\n Marqo.__init__(self, config={'marqo_url': MARQO_URL, 'marqo_model': MARQO_MODEL})\n OpenAI_Chat.__init__(self, client=AzureOpenAI(...), config=config) # Make sure to put your AzureOpenAI client here\n\nvn = MyVanna(config={'model': 'gpt-4-...'})\n"}, {"id": "c7fd1c2c-54a3-570b-b0ce-4d57801a780c", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "9b30d7e1-f279-5b6a-a620-fc988020efcc", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\nimport pandas as pd\n\n# There's usually a library for connecting to your type of database. Any SQL database will work here -- you just have to use the right library.\nconn_details = {...} # fill this with your connection details\nconn = ... # fill this with your connection object\n\n# You define a function that takes in a SQL query as a string and returns a pandas dataframe\ndef run_sql(sql: str) -> pd.DataFrame:\n df = pd.read_sql_query(sql, conn)\n return df\n\n# This gives the package a function that it can use to run the SQL\nvn.run_sql = run_sql\nvn.run_sql_is_set = True\n"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/other-database-openai-azure-other-vectordb.ipynb b/notebooks/other-database-openai-azure-other-vectordb.ipynb deleted file mode 100644 index 5c036129..00000000 --- a/notebooks/other-database-openai-azure-other-vectordb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "28e43ee2-89a3-5c6e-972c-18e14187ecbc", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Other Database using Azure OpenAI, Other VectorDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "98bd55a9-8534-57e0-bbf2-790053912d0d", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "5307d257-caf4-590b-90ed-98348d2066f1", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "925749d7-7c6c-5599-a063-ad2cad7b52ab", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[openai]'"}, {"id": "19782e02-3b88-533a-a9cd-f73a7d88e153", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.openai.openai_chat import OpenAI_Chat\nfrom openai import AzureOpenAI\nfrom vanna.base import VannaBase\n"}, {"id": "1a1f7fff-3055-51d2-a91d-bf03f4f94bc8", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\nclass MyCustomVectorDB(VannaBase):\n def add_ddl(self, ddl: str, **kwargs) -> str:\n # Implement here\n\n def add_documentation(self, doc: str, **kwargs) -> str:\n # Implement here\n\n def add_question_sql(self, question: str, sql: str, **kwargs) -> str:\n # Implement here\n\n def get_related_ddl(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_related_documentation(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_similar_question_sql(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_training_data(self, **kwargs) -> pd.DataFrame:\n # Implement here\n\n def remove_training_data(id: str, **kwargs) -> bool:\n # Implement here\n\n\nclass MyVanna(MyCustomVectorDB, OpenAI_Chat):\n def __init__(self, config=None):\n MyCustomVectorDB.__init__(self, config=config)\n OpenAI_Chat.__init__(self, client=AzureOpenAI(...), config=config) # Make sure to put your AzureOpenAI client here\n\nvn = MyVanna(config={'model': 'gpt-4-...'})\n"}, {"id": "ab217063-0367-50df-8dd8-d70857bfc184", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "9b30d7e1-f279-5b6a-a620-fc988020efcc", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\nimport pandas as pd\n\n# There's usually a library for connecting to your type of database. Any SQL database will work here -- you just have to use the right library.\nconn_details = {...} # fill this with your connection details\nconn = ... # fill this with your connection object\n\n# You define a function that takes in a SQL query as a string and returns a pandas dataframe\ndef run_sql(sql: str) -> pd.DataFrame:\n df = pd.read_sql_query(sql, conn)\n return df\n\n# This gives the package a function that it can use to run the SQL\nvn.run_sql = run_sql\nvn.run_sql_is_set = True\n"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/other-database-openai-azure-vannadb.ipynb b/notebooks/other-database-openai-azure-vannadb.ipynb deleted file mode 100644 index fc824ebc..00000000 --- a/notebooks/other-database-openai-azure-vannadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "c84b946c-c10e-5f4d-b0e9-1053cac2d9c0", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Other Database using Azure OpenAI, Vanna Hosted Vector DB (Recommended)\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "c08f1c4c-ba75-5ac2-882a-ca5ed62a8475", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "c9f0b7cb-f486-57ed-9445-45411e66eb77", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "925749d7-7c6c-5599-a063-ad2cad7b52ab", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[openai]'"}, {"id": "031a7573-71e2-5c65-873c-124e3158003d", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.openai.openai_chat import OpenAI_Chat\nfrom openai import AzureOpenAI\nfrom vanna.vannadb.vannadb_vector import VannaDB_VectorStore\n"}, {"id": "9fd5a61a-c40c-5577-80bb-3c8fbf26dc21", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(VannaDB_VectorStore, OpenAI_Chat):\n def __init__(self, config=None):\n VannaDB_VectorStore.__init__(self, vanna_model=MY_VANNA_MODEL, vanna_api_key=MY_VANNA_API_KEY, config=config)\n OpenAI_Chat.__init__(self, client=AzureOpenAI(...), config=config) # Make sure to put your AzureOpenAI client here\n\nvn = MyVanna(config={'model': 'gpt-4-...'})\n"}, {"id": "376806bd-ab6c-5770-a276-0581d8d9d4c6", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "9b30d7e1-f279-5b6a-a620-fc988020efcc", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\nimport pandas as pd\n\n# There's usually a library for connecting to your type of database. Any SQL database will work here -- you just have to use the right library.\nconn_details = {...} # fill this with your connection details\nconn = ... # fill this with your connection object\n\n# You define a function that takes in a SQL query as a string and returns a pandas dataframe\ndef run_sql(sql: str) -> pd.DataFrame:\n df = pd.read_sql_query(sql, conn)\n return df\n\n# This gives the package a function that it can use to run the SQL\nvn.run_sql = run_sql\nvn.run_sql_is_set = True\n"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/other-database-openai-standard-chromadb.ipynb b/notebooks/other-database-openai-standard-chromadb.ipynb deleted file mode 100644 index 42845d23..00000000 --- a/notebooks/other-database-openai-standard-chromadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "deeb1a83-b623-52c8-9e9c-8fde4842d65e", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Other Database using OpenAI, ChromaDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "b4e86bda-15bf-591d-88bb-fa94a50b50e0", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "4e1be90d-831a-592e-8f48-4d6d19b409be", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "d6e3ecc5-3c05-518b-8285-cf9dbf06ec58", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[chromadb,openai]'"}, {"id": "93b5ab2b-834b-5b86-8d47-c9beda8b3544", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.openai.openai_chat import OpenAI_Chat\nfrom vanna.chromadb.chromadb_vector import ChromaDB_VectorStore\n"}, {"id": "28a8d8a1-669f-5f8b-82c4-73a0eb221d64", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(ChromaDB_VectorStore, OpenAI_Chat):\n def __init__(self, config=None):\n ChromaDB_VectorStore.__init__(self, config=config)\n OpenAI_Chat.__init__(self, config=config)\n\nvn = MyVanna(config={'api_key': 'sk-...', 'model': 'gpt-4-...'})\n"}, {"id": "41c3b082-bb76-5031-ad58-b9b665824a64", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "9b30d7e1-f279-5b6a-a620-fc988020efcc", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\nimport pandas as pd\n\n# There's usually a library for connecting to your type of database. Any SQL database will work here -- you just have to use the right library.\nconn_details = {...} # fill this with your connection details\nconn = ... # fill this with your connection object\n\n# You define a function that takes in a SQL query as a string and returns a pandas dataframe\ndef run_sql(sql: str) -> pd.DataFrame:\n df = pd.read_sql_query(sql, conn)\n return df\n\n# This gives the package a function that it can use to run the SQL\nvn.run_sql = run_sql\nvn.run_sql_is_set = True\n"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/other-database-openai-standard-marqo.ipynb b/notebooks/other-database-openai-standard-marqo.ipynb deleted file mode 100644 index 3b3acb10..00000000 --- a/notebooks/other-database-openai-standard-marqo.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "4fc64584-bab8-5895-a16b-2d54274bc40b", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Other Database using OpenAI, Marqo\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "bb1d1e59-d6cf-5ab3-bcbf-8166b0d8f1c3", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "862a7b2b-d7ce-51aa-a02a-08ffe268f8a9", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "3d31b251-dcb5-5c7d-b5da-b692698ecdfa", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[marqo,openai]'"}, {"id": "dc8ae8d1-d08e-5a8c-a806-09ba465d7761", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.openai.openai_chat import OpenAI_Chat\nfrom vanna.marqo.marqo import Marqo\n"}, {"id": "3ce3c4db-08c1-5d0a-86df-2f7b35b82bc2", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(Marqo, OpenAI_Chat):\n def __init__(self, config=None):\n Marqo.__init__(self, config={'marqo_url': MARQO_URL, 'marqo_model': MARQO_MODEL})\n OpenAI_Chat.__init__(self, config=config)\n\nvn = MyVanna(config={'api_key': 'sk-...', 'model': 'gpt-4-...'})\n"}, {"id": "caa8d76c-8e2a-5dc2-8d91-8e7c688f68c4", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "9b30d7e1-f279-5b6a-a620-fc988020efcc", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\nimport pandas as pd\n\n# There's usually a library for connecting to your type of database. Any SQL database will work here -- you just have to use the right library.\nconn_details = {...} # fill this with your connection details\nconn = ... # fill this with your connection object\n\n# You define a function that takes in a SQL query as a string and returns a pandas dataframe\ndef run_sql(sql: str) -> pd.DataFrame:\n df = pd.read_sql_query(sql, conn)\n return df\n\n# This gives the package a function that it can use to run the SQL\nvn.run_sql = run_sql\nvn.run_sql_is_set = True\n"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/other-database-openai-standard-other-vectordb.ipynb b/notebooks/other-database-openai-standard-other-vectordb.ipynb deleted file mode 100644 index f676c5f7..00000000 --- a/notebooks/other-database-openai-standard-other-vectordb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "83e6caa0-808d-5e3f-a3bc-dd6055253309", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Other Database using OpenAI, Other VectorDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "0dc9e571-d346-5296-9c2b-6288e2e7fdfd", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "02a256fb-5c94-572c-aa70-8d52c604073b", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "925749d7-7c6c-5599-a063-ad2cad7b52ab", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[openai]'"}, {"id": "fe1b5686-8226-53d5-b42b-a29cdb088cad", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.openai.openai_chat import OpenAI_Chat\nfrom vanna.base import VannaBase\n"}, {"id": "45f49779-04b9-574f-b573-4f0afb619e7e", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\nclass MyCustomVectorDB(VannaBase):\n def add_ddl(self, ddl: str, **kwargs) -> str:\n # Implement here\n\n def add_documentation(self, doc: str, **kwargs) -> str:\n # Implement here\n\n def add_question_sql(self, question: str, sql: str, **kwargs) -> str:\n # Implement here\n\n def get_related_ddl(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_related_documentation(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_similar_question_sql(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_training_data(self, **kwargs) -> pd.DataFrame:\n # Implement here\n\n def remove_training_data(id: str, **kwargs) -> bool:\n # Implement here\n\n\nclass MyVanna(MyCustomVectorDB, OpenAI_Chat):\n def __init__(self, config=None):\n MyCustomVectorDB.__init__(self, config=config)\n OpenAI_Chat.__init__(self, config=config)\n\nvn = MyVanna(config={'api_key': 'sk-...', 'model': 'gpt-4-...'})\n"}, {"id": "bf2850f8-fecb-5049-9ba7-113308c4ed90", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "9b30d7e1-f279-5b6a-a620-fc988020efcc", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\nimport pandas as pd\n\n# There's usually a library for connecting to your type of database. Any SQL database will work here -- you just have to use the right library.\nconn_details = {...} # fill this with your connection details\nconn = ... # fill this with your connection object\n\n# You define a function that takes in a SQL query as a string and returns a pandas dataframe\ndef run_sql(sql: str) -> pd.DataFrame:\n df = pd.read_sql_query(sql, conn)\n return df\n\n# This gives the package a function that it can use to run the SQL\nvn.run_sql = run_sql\nvn.run_sql_is_set = True\n"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/other-database-openai-standard-vannadb.ipynb b/notebooks/other-database-openai-standard-vannadb.ipynb deleted file mode 100644 index e8dfbe01..00000000 --- a/notebooks/other-database-openai-standard-vannadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "46dcb449-a2c9-571d-a7ce-d6450eb19571", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Other Database using OpenAI, Vanna Hosted Vector DB (Recommended)\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "db8cee28-61fc-5750-bc66-8a3f8e312e9c", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "0c3b4092-39bd-5a07-a8de-4c443475c7b4", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "925749d7-7c6c-5599-a063-ad2cad7b52ab", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[openai]'"}, {"id": "4ff1aaee-1154-5859-b8c3-93ac3c31595d", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.openai.openai_chat import OpenAI_Chat\nfrom vanna.vannadb.vannadb_vector import VannaDB_VectorStore\n"}, {"id": "1fc13242-ce0f-53e5-832e-ff33197d2eef", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(VannaDB_VectorStore, OpenAI_Chat):\n def __init__(self, config=None):\n VannaDB_VectorStore.__init__(self, vanna_model=MY_VANNA_MODEL, vanna_api_key=MY_VANNA_API_KEY, config=config)\n OpenAI_Chat.__init__(self, config=config)\n\nvn = MyVanna(config={'api_key': 'sk-...', 'model': 'gpt-4-...'})\n"}, {"id": "a70bb5bf-f6c4-5dd5-b7db-0f572fd7e7e1", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "9b30d7e1-f279-5b6a-a620-fc988020efcc", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\nimport pandas as pd\n\n# There's usually a library for connecting to your type of database. Any SQL database will work here -- you just have to use the right library.\nconn_details = {...} # fill this with your connection details\nconn = ... # fill this with your connection object\n\n# You define a function that takes in a SQL query as a string and returns a pandas dataframe\ndef run_sql(sql: str) -> pd.DataFrame:\n df = pd.read_sql_query(sql, conn)\n return df\n\n# This gives the package a function that it can use to run the SQL\nvn.run_sql = run_sql\nvn.run_sql_is_set = True\n"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/other-database-openai-vanna-chromadb.ipynb b/notebooks/other-database-openai-vanna-chromadb.ipynb deleted file mode 100644 index c8669ca3..00000000 --- a/notebooks/other-database-openai-vanna-chromadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "0137feba-b7f4-52f8-985b-c86be0e0f5bb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Other Database using OpenAI via Vanna.AI (Recommended), ChromaDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "105b1b11-2b54-59ac-8b07-3fc3536824da", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "2ce897eb-059f-5ca9-bbd1-36aaed7c87cf", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "1a0086e2-0a57-5091-accd-456e4d3e4ad7", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[chromadb]'"}, {"id": "c1e5ad61-57c7-5b64-920b-6f5b435df5e3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.chromadb.chromadb_vector import ChromaDB_VectorStore\n"}, {"id": "3225927e-ae19-5159-a112-8dac5a3cda22", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(ChromaDB_VectorStore):\n def __init__(self, config=None):\n ChromaDB_VectorStore.__init__(self, config=config)\n\nvn = MyVanna()\n"}, {"id": "382f7e7b-7b6a-52ad-ba2c-ead3cd478532", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "9b30d7e1-f279-5b6a-a620-fc988020efcc", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\nimport pandas as pd\n\n# There's usually a library for connecting to your type of database. Any SQL database will work here -- you just have to use the right library.\nconn_details = {...} # fill this with your connection details\nconn = ... # fill this with your connection object\n\n# You define a function that takes in a SQL query as a string and returns a pandas dataframe\ndef run_sql(sql: str) -> pd.DataFrame:\n df = pd.read_sql_query(sql, conn)\n return df\n\n# This gives the package a function that it can use to run the SQL\nvn.run_sql = run_sql\nvn.run_sql_is_set = True\n"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/other-database-openai-vanna-marqo.ipynb b/notebooks/other-database-openai-vanna-marqo.ipynb deleted file mode 100644 index 58c2bbee..00000000 --- a/notebooks/other-database-openai-vanna-marqo.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "b3805a05-e5f3-5ea2-9c50-25a1c9a51a75", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Other Database using OpenAI via Vanna.AI (Recommended), Marqo\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "30b9ca1a-c459-53b6-ba57-d8a6bb5cb9fa", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "aa4a36b4-5201-5e6e-9f0f-89b2e2b8ffc5", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "30f0eccb-7684-5642-98ae-31bee8662133", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[marqo]'"}, {"id": "a1877af9-e758-52a4-8f21-3d7b2e0c904f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.marqo.marqo import Marqo\n"}, {"id": "b0e1d67a-58fd-5bcd-b2a2-a13317fda343", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(Marqo):\n def __init__(self, config=None):\n Marqo.__init__(self, config={'marqo_url': MARQO_URL, 'marqo_model': MARQO_MODEL})\n\nvn = MyVanna()\n"}, {"id": "fcb94e2b-5b7a-511c-a534-0d2101d835e8", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "9b30d7e1-f279-5b6a-a620-fc988020efcc", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\nimport pandas as pd\n\n# There's usually a library for connecting to your type of database. Any SQL database will work here -- you just have to use the right library.\nconn_details = {...} # fill this with your connection details\nconn = ... # fill this with your connection object\n\n# You define a function that takes in a SQL query as a string and returns a pandas dataframe\ndef run_sql(sql: str) -> pd.DataFrame:\n df = pd.read_sql_query(sql, conn)\n return df\n\n# This gives the package a function that it can use to run the SQL\nvn.run_sql = run_sql\nvn.run_sql_is_set = True\n"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/other-database-openai-vanna-other-vectordb.ipynb b/notebooks/other-database-openai-vanna-other-vectordb.ipynb deleted file mode 100644 index 7b14f392..00000000 --- a/notebooks/other-database-openai-vanna-other-vectordb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "dea72209-4768-5f52-ba75-ae7671cc46fe", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Other Database using OpenAI via Vanna.AI (Recommended), Other VectorDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "a35e6042-02e6-5934-b6c7-45abff11bcef", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "31e4174d-4d1d-51db-9a91-37d3ba8a2840", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "b9b77362-c049-5500-b502-08811fcd4dce", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install vanna"}, {"id": "35e4b991-0e84-561d-8c1e-979bb4252ec9", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.base import VannaBase\n"}, {"id": "57fbc78c-6a54-5f06-98d8-69f315a380b4", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\nclass MyCustomVectorDB(VannaBase):\n def add_ddl(self, ddl: str, **kwargs) -> str:\n # Implement here\n\n def add_documentation(self, doc: str, **kwargs) -> str:\n # Implement here\n\n def add_question_sql(self, question: str, sql: str, **kwargs) -> str:\n # Implement here\n\n def get_related_ddl(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_related_documentation(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_similar_question_sql(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_training_data(self, **kwargs) -> pd.DataFrame:\n # Implement here\n\n def remove_training_data(id: str, **kwargs) -> bool:\n # Implement here\n\n\nclass MyVanna(MyCustomVectorDB):\n def __init__(self, config=None):\n MyCustomVectorDB.__init__(self, config=config)\n\nvn = MyVanna()\n"}, {"id": "b7caa979-78ba-5079-872e-d52e3f5a1f98", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "9b30d7e1-f279-5b6a-a620-fc988020efcc", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\nimport pandas as pd\n\n# There's usually a library for connecting to your type of database. Any SQL database will work here -- you just have to use the right library.\nconn_details = {...} # fill this with your connection details\nconn = ... # fill this with your connection object\n\n# You define a function that takes in a SQL query as a string and returns a pandas dataframe\ndef run_sql(sql: str) -> pd.DataFrame:\n df = pd.read_sql_query(sql, conn)\n return df\n\n# This gives the package a function that it can use to run the SQL\nvn.run_sql = run_sql\nvn.run_sql_is_set = True\n"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/other-database-openai-vanna-vannadb.ipynb b/notebooks/other-database-openai-vanna-vannadb.ipynb deleted file mode 100644 index 14646105..00000000 --- a/notebooks/other-database-openai-vanna-vannadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "0f6a628d-5dca-58b1-b690-40302dab9bf2", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Other Database using OpenAI via Vanna.AI (Recommended), Vanna Hosted Vector DB (Recommended)\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "1a507369-8ade-5a6e-b349-9927657cb37f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "0c3b4092-39bd-5a07-a8de-4c443475c7b4", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "b9b77362-c049-5500-b502-08811fcd4dce", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install vanna"}, {"id": "6160c274-caf4-537e-9a02-f6a1d7022a2c", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "import vanna\nfrom vanna.remote import VannaDefault"}, {"id": "cc6152fc-02df-5490-9920-896b5565b3d0", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "api_key = vanna.get_api_key('my-email@example.com')\n\nvanna_model_name = # Put a unique name here\nvn = VannaDefault(model=vanna_model_name, api_key=api_key)\n"}, {"id": "ea19ce1f-4ffe-5c38-a41b-5dcca9db90dd", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "9b30d7e1-f279-5b6a-a620-fc988020efcc", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\nimport pandas as pd\n\n# There's usually a library for connecting to your type of database. Any SQL database will work here -- you just have to use the right library.\nconn_details = {...} # fill this with your connection details\nconn = ... # fill this with your connection object\n\n# You define a function that takes in a SQL query as a string and returns a pandas dataframe\ndef run_sql(sql: str) -> pd.DataFrame:\n df = pd.read_sql_query(sql, conn)\n return df\n\n# This gives the package a function that it can use to run the SQL\nvn.run_sql = run_sql\nvn.run_sql_is_set = True\n"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/other-database-other-llm-chromadb.ipynb b/notebooks/other-database-other-llm-chromadb.ipynb deleted file mode 100644 index e742a27a..00000000 --- a/notebooks/other-database-other-llm-chromadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "7b709983-57b5-5bc7-940a-bcbf832468c6", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Other Database using Other LLM, ChromaDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "b348bb01-4210-561c-bbd9-759bb6a11099", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "5cd05dbb-a269-5efa-baa4-1a292b9a4d8c", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "1a0086e2-0a57-5091-accd-456e4d3e4ad7", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[chromadb]'"}, {"id": "a70195e6-7c1f-519f-8413-4ad4e6b3570d", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.base import VannaBase\nfrom vanna.chromadb.chromadb_vector import ChromaDB_VectorStore\n"}, {"id": "ad2c6517-9727-56fb-befe-a4108859aa3b", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\nclass MyCustomLLM(VannaBase):\n def __init__(self, config=None):\n pass\n\n def generate_plotly_code(self, question: str = None, sql: str = None, df_metadata: str = None, **kwargs) -> str:\n # Implement here\n\n def generate_question(self, sql: str, **kwargs) -> str:\n # Implement here\n \n def get_followup_questions_prompt(self, question: str, question_sql_list: list, ddl_list: list, doc_list: list, **kwargs):\n # Implement here\n \n def get_sql_prompt(self, question: str, question_sql_list: list, ddl_list: list, doc_list: list, **kwargs):\n # Implement here\n\n def submit_prompt(self, prompt, **kwargs) -> str:\n # Implement here\n \n\nclass MyVanna(ChromaDB_VectorStore, MyCustomLLM):\n def __init__(self, config=None):\n ChromaDB_VectorStore.__init__(self, config=config)\n MyCustomLLM.__init__(self, config=config)\n\nvn = MyVanna()\n"}, {"id": "2ea1ac60-025d-586c-bfed-18040b53bf11", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "9b30d7e1-f279-5b6a-a620-fc988020efcc", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\nimport pandas as pd\n\n# There's usually a library for connecting to your type of database. Any SQL database will work here -- you just have to use the right library.\nconn_details = {...} # fill this with your connection details\nconn = ... # fill this with your connection object\n\n# You define a function that takes in a SQL query as a string and returns a pandas dataframe\ndef run_sql(sql: str) -> pd.DataFrame:\n df = pd.read_sql_query(sql, conn)\n return df\n\n# This gives the package a function that it can use to run the SQL\nvn.run_sql = run_sql\nvn.run_sql_is_set = True\n"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/other-database-other-llm-marqo.ipynb b/notebooks/other-database-other-llm-marqo.ipynb deleted file mode 100644 index 8a18d350..00000000 --- a/notebooks/other-database-other-llm-marqo.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "3a87478b-c54b-5bdd-b94f-e7ea9d43e69a", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Other Database using Other LLM, Marqo\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "f9acdcfc-f442-571b-9ff3-544bb5a2421e", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "cd409d49-fd96-5a72-80f4-ad705ec788b1", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "30f0eccb-7684-5642-98ae-31bee8662133", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[marqo]'"}, {"id": "2e26545c-6029-5c62-b146-105086c10f6d", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.base import VannaBase\nfrom vanna.marqo.marqo import Marqo\n"}, {"id": "c1812db9-f2e2-5e21-98c1-d00397d25f65", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\nclass MyCustomLLM(VannaBase):\n def __init__(self, config=None):\n pass\n\n def generate_plotly_code(self, question: str = None, sql: str = None, df_metadata: str = None, **kwargs) -> str:\n # Implement here\n\n def generate_question(self, sql: str, **kwargs) -> str:\n # Implement here\n \n def get_followup_questions_prompt(self, question: str, question_sql_list: list, ddl_list: list, doc_list: list, **kwargs):\n # Implement here\n \n def get_sql_prompt(self, question: str, question_sql_list: list, ddl_list: list, doc_list: list, **kwargs):\n # Implement here\n\n def submit_prompt(self, prompt, **kwargs) -> str:\n # Implement here\n \n\nclass MyVanna(Marqo, MyCustomLLM):\n def __init__(self, config=None):\n Marqo.__init__(self, config={'marqo_url': MARQO_URL, 'marqo_model': MARQO_MODEL})\n MyCustomLLM.__init__(self, config=config)\n\nvn = MyVanna()\n"}, {"id": "500dd444-e813-5de2-9237-67482765eb5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "9b30d7e1-f279-5b6a-a620-fc988020efcc", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\nimport pandas as pd\n\n# There's usually a library for connecting to your type of database. Any SQL database will work here -- you just have to use the right library.\nconn_details = {...} # fill this with your connection details\nconn = ... # fill this with your connection object\n\n# You define a function that takes in a SQL query as a string and returns a pandas dataframe\ndef run_sql(sql: str) -> pd.DataFrame:\n df = pd.read_sql_query(sql, conn)\n return df\n\n# This gives the package a function that it can use to run the SQL\nvn.run_sql = run_sql\nvn.run_sql_is_set = True\n"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/other-database-other-llm-other-vectordb.ipynb b/notebooks/other-database-other-llm-other-vectordb.ipynb deleted file mode 100644 index 207f31c8..00000000 --- a/notebooks/other-database-other-llm-other-vectordb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "d4a7bd4f-e238-5168-8c26-03ab7d9b6ceb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Other Database using Other LLM, Other VectorDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "6b7aad07-6701-5974-9b5a-c6ed21cc3eca", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "445e8689-7756-5dab-8e76-46f1601ed2b1", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "b9b77362-c049-5500-b502-08811fcd4dce", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install vanna"}, {"id": "35e4b991-0e84-561d-8c1e-979bb4252ec9", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.base import VannaBase\n"}, {"id": "2ff3ca97-cb35-56c7-9263-a3613e4ce005", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\nclass MyCustomVectorDB(VannaBase):\n def add_ddl(self, ddl: str, **kwargs) -> str:\n # Implement here\n\n def add_documentation(self, doc: str, **kwargs) -> str:\n # Implement here\n\n def add_question_sql(self, question: str, sql: str, **kwargs) -> str:\n # Implement here\n\n def get_related_ddl(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_related_documentation(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_similar_question_sql(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_training_data(self, **kwargs) -> pd.DataFrame:\n # Implement here\n\n def remove_training_data(id: str, **kwargs) -> bool:\n # Implement here\n\nclass MyCustomLLM(VannaBase):\n def __init__(self, config=None):\n pass\n\n def generate_plotly_code(self, question: str = None, sql: str = None, df_metadata: str = None, **kwargs) -> str:\n # Implement here\n\n def generate_question(self, sql: str, **kwargs) -> str:\n # Implement here\n \n def get_followup_questions_prompt(self, question: str, question_sql_list: list, ddl_list: list, doc_list: list, **kwargs):\n # Implement here\n \n def get_sql_prompt(self, question: str, question_sql_list: list, ddl_list: list, doc_list: list, **kwargs):\n # Implement here\n\n def submit_prompt(self, prompt, **kwargs) -> str:\n # Implement here\n \n\nclass MyVanna(MyCustomVectorDB, MyCustomLLM):\n def __init__(self, config=None):\n MyCustomVectorDB.__init__(self, config=config)\n MyCustomLLM.__init__(self, config=config)\n\nvn = MyVanna()\n"}, {"id": "856c5fd6-b9d5-5f13-a5c9-44afc99da099", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "9b30d7e1-f279-5b6a-a620-fc988020efcc", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\nimport pandas as pd\n\n# There's usually a library for connecting to your type of database. Any SQL database will work here -- you just have to use the right library.\nconn_details = {...} # fill this with your connection details\nconn = ... # fill this with your connection object\n\n# You define a function that takes in a SQL query as a string and returns a pandas dataframe\ndef run_sql(sql: str) -> pd.DataFrame:\n df = pd.read_sql_query(sql, conn)\n return df\n\n# This gives the package a function that it can use to run the SQL\nvn.run_sql = run_sql\nvn.run_sql_is_set = True\n"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/other-database-other-llm-vannadb.ipynb b/notebooks/other-database-other-llm-vannadb.ipynb deleted file mode 100644 index 99714187..00000000 --- a/notebooks/other-database-other-llm-vannadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "8b253300-a4e8-5b94-8ef5-958eefde2756", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Other Database using Other LLM, Vanna Hosted Vector DB (Recommended)\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "638a9f05-ed43-58ab-aa9b-2f88ddc6a370", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "cb07c322-cd04-54d6-9c9a-7d262dec914f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "b9b77362-c049-5500-b502-08811fcd4dce", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install vanna"}, {"id": "bfe31937-16c5-5ecb-9aea-0cc1b2aec53c", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.vannadb.vannadb_vector import VannaDB_VectorStore\nfrom vanna.base import VannaBase\n"}, {"id": "8ac7e323-be70-5fee-9d96-69868af0ff99", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\nclass MyCustomLLM(VannaBase):\n def __init__(self, config=None):\n pass\n\n def generate_plotly_code(self, question: str = None, sql: str = None, df_metadata: str = None, **kwargs) -> str:\n # Implement here\n\n def generate_question(self, sql: str, **kwargs) -> str:\n # Implement here\n \n def get_followup_questions_prompt(self, question: str, question_sql_list: list, ddl_list: list, doc_list: list, **kwargs):\n # Implement here\n \n def get_sql_prompt(self, question: str, question_sql_list: list, ddl_list: list, doc_list: list, **kwargs):\n # Implement here\n\n def submit_prompt(self, prompt, **kwargs) -> str:\n # Implement here\n \n\nclass MyVanna(VannaDB_VectorStore, MyCustomLLM):\n def __init__(self, config=None):\n VannaDB_VectorStore.__init__(self, vanna_model=MY_VANNA_MODEL, vanna_api_key=MY_VANNA_API_KEY, config=config)\n MyCustomLLM.__init__(self, config=config)\n\nvn = MyVanna()\n"}, {"id": "5a52b18e-95df-530d-b46e-6d39379cc2e6", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "9b30d7e1-f279-5b6a-a620-fc988020efcc", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\nimport pandas as pd\n\n# There's usually a library for connecting to your type of database. Any SQL database will work here -- you just have to use the right library.\nconn_details = {...} # fill this with your connection details\nconn = ... # fill this with your connection object\n\n# You define a function that takes in a SQL query as a string and returns a pandas dataframe\ndef run_sql(sql: str) -> pd.DataFrame:\n df = pd.read_sql_query(sql, conn)\n return df\n\n# This gives the package a function that it can use to run the SQL\nvn.run_sql = run_sql\nvn.run_sql_is_set = True\n"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/postgres-mistral-chromadb.ipynb b/notebooks/postgres-mistral-chromadb.ipynb deleted file mode 100644 index 9bcb6cf4..00000000 --- a/notebooks/postgres-mistral-chromadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "0f3048c8-acae-5ca8-b441-2e74e9190bc2", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Postgres using Mistral via Mistral API, ChromaDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "a03347e7-7aec-59e2-a48b-a8b757da02f7", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "b8762223-46dd-5535-be5b-16e5128ea5c0", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "8f8fcaac-414d-5dc4-9d96-2a42ce33b9db", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[chromadb,mistralai,postgres]'"}, {"id": "3a68caf5-fa2e-5ee9-9bbb-7b85ea07a5ea", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.chromadb.chromadb_vector import ChromaDB_VectorStore\nfrom vanna.mistral.mistral import Mistral\n"}, {"id": "0a4dc6a1-8cfc-53ae-a9fb-4eca76807451", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(ChromaDB_VectorStore, Mistral):\n def __init__(self, config=None):\n ChromaDB_VectorStore.__init__(self, config=config)\n Mistral.__init__(self, config={'api_key': MISTRAL_API_KEY, 'model': 'mistral-tiny'})\n\nvn = MyVanna()\n"}, {"id": "01a3df8b-cf52-5219-bc5d-dc5e88ebcfca", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "38707ef4-8063-5170-873a-45e63c1928a7", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_postgres(host='my-host', dbname='my-dbname', user='my-user', password='my-password', port='my-port')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/postgres-mistral-marqo.ipynb b/notebooks/postgres-mistral-marqo.ipynb deleted file mode 100644 index bacfa9b8..00000000 --- a/notebooks/postgres-mistral-marqo.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "aa811fa4-4d25-5b33-9da8-e68a69b87e0a", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Postgres using Mistral via Mistral API, Marqo\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "369fb3d9-2130-513d-af1f-aa2ac6672dc5", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "695d1031-2ae4-5061-a36d-23e81a133eb0", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "f3cf7c8f-f599-519b-8e2e-33106f15963a", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[marqo,mistralai,postgres]'"}, {"id": "696e9c9c-d724-56db-9a06-10a66dc15b0a", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.marqo.marqo import Marqo\nfrom vanna.mistral.mistral import Mistral\n"}, {"id": "de83d46a-6116-5978-8b9a-f0f586a583bd", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(Marqo, Mistral):\n def __init__(self, config=None):\n Marqo.__init__(self, config={'marqo_url': MARQO_URL, 'marqo_model': MARQO_MODEL})\n Mistral.__init__(self, config={'api_key': MISTRAL_API_KEY, 'model': 'mistral-tiny'})\n\nvn = MyVanna()\n"}, {"id": "0a11ad90-a111-5bc2-b51f-4f6dde012b88", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "38707ef4-8063-5170-873a-45e63c1928a7", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_postgres(host='my-host', dbname='my-dbname', user='my-user', password='my-password', port='my-port')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/postgres-mistral-other-vectordb.ipynb b/notebooks/postgres-mistral-other-vectordb.ipynb deleted file mode 100644 index a8070e9c..00000000 --- a/notebooks/postgres-mistral-other-vectordb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "1bf7ca05-0a4b-56c4-8958-79b30e5afc2e", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Postgres using Mistral via Mistral API, Other VectorDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "13f1c9f5-c46b-56da-a35a-83299b1735b6", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "e8abf792-ee0c-5975-95ff-67d2b0ddbaba", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "72ba7676-e2d8-5a7e-ac6e-f7578822efb5", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[mistralai,postgres]'"}, {"id": "d54a05e2-de07-56c0-b57f-0bf2d42e559c", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.base import VannaBase\nfrom vanna.mistral.mistral import Mistral\n"}, {"id": "edc45a16-5782-5d88-9f4a-c405c1f79dea", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\nclass MyCustomVectorDB(VannaBase):\n def add_ddl(self, ddl: str, **kwargs) -> str:\n # Implement here\n\n def add_documentation(self, doc: str, **kwargs) -> str:\n # Implement here\n\n def add_question_sql(self, question: str, sql: str, **kwargs) -> str:\n # Implement here\n\n def get_related_ddl(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_related_documentation(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_similar_question_sql(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_training_data(self, **kwargs) -> pd.DataFrame:\n # Implement here\n\n def remove_training_data(id: str, **kwargs) -> bool:\n # Implement here\n\n\nclass MyVanna(MyCustomVectorDB, Mistral):\n def __init__(self, config=None):\n MyCustomVectorDB.__init__(self, config=config)\n Mistral.__init__(self, config={'api_key': MISTRAL_API_KEY, 'model': 'mistral-tiny'})\n\nvn = MyVanna()\n"}, {"id": "aa447969-8b9a-549f-8d0a-40d583332bb3", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "38707ef4-8063-5170-873a-45e63c1928a7", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_postgres(host='my-host', dbname='my-dbname', user='my-user', password='my-password', port='my-port')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/postgres-mistral-vannadb.ipynb b/notebooks/postgres-mistral-vannadb.ipynb deleted file mode 100644 index d0ce0717..00000000 --- a/notebooks/postgres-mistral-vannadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "7eb3f36a-c79b-5c0c-8eb6-4601a6c3c634", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Postgres using Mistral via Mistral API, Vanna Hosted Vector DB (Recommended)\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "e0d82a7a-03af-5945-94b5-d9b71c024f01", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "eaaf2b90-2f4f-5c81-ae7b-590fd5be3358", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "72ba7676-e2d8-5a7e-ac6e-f7578822efb5", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[mistralai,postgres]'"}, {"id": "88b7ebec-d4f9-53aa-8f06-7c27055d16b0", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.vannadb.vannadb_vector import VannaDB_VectorStore\nfrom vanna.mistral.mistral import Mistral\n"}, {"id": "2aa3c756-d1ad-5b3c-a161-5bad6f77d594", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(VannaDB_VectorStore, Mistral):\n def __init__(self, config=None):\n VannaDB_VectorStore.__init__(self, vanna_model=MY_VANNA_MODEL, vanna_api_key=MY_VANNA_API_KEY, config=config)\n Mistral.__init__(self, config={'api_key': MISTRAL_API_KEY, 'model': 'mistral-tiny'})\n\nvn = MyVanna()\n"}, {"id": "566fdbc1-c1ef-533e-98bf-e01f51166dbb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "38707ef4-8063-5170-873a-45e63c1928a7", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_postgres(host='my-host', dbname='my-dbname', user='my-user', password='my-password', port='my-port')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/postgres-openai-azure-chromadb.ipynb b/notebooks/postgres-openai-azure-chromadb.ipynb deleted file mode 100644 index 7865e671..00000000 --- a/notebooks/postgres-openai-azure-chromadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "e7cd5976-e784-52c5-be86-b454ffa806c8", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Postgres using Azure OpenAI, ChromaDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "d69856a3-3ea7-5ca5-8159-040262aa4049", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "8eb5354c-d5fb-5b74-92a2-77b2ced899b0", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "30b351fd-e454-5983-b4aa-a522759a1dbe", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[chromadb,openai,postgres]'"}, {"id": "f6088c74-bfc7-5808-bd52-b2468267a3aa", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.openai.openai_chat import OpenAI_Chat\nfrom openai import AzureOpenAI\nfrom vanna.chromadb.chromadb_vector import ChromaDB_VectorStore\n"}, {"id": "895d74e6-b5e9-58f3-b58b-07c8e9d28707", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(ChromaDB_VectorStore, OpenAI_Chat):\n def __init__(self, config=None):\n ChromaDB_VectorStore.__init__(self, config=config)\n OpenAI_Chat.__init__(self, client=AzureOpenAI(...), config=config) # Make sure to put your AzureOpenAI client here\n\nvn = MyVanna(config={'model': 'gpt-4-...'})\n"}, {"id": "53a3f9ca-429d-5aae-9278-9041a8cfdc5b", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "38707ef4-8063-5170-873a-45e63c1928a7", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_postgres(host='my-host', dbname='my-dbname', user='my-user', password='my-password', port='my-port')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/postgres-openai-azure-marqo.ipynb b/notebooks/postgres-openai-azure-marqo.ipynb deleted file mode 100644 index 5433eab0..00000000 --- a/notebooks/postgres-openai-azure-marqo.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "bd301e2e-9b25-5c91-aebc-1f0c23d76aad", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Postgres using Azure OpenAI, Marqo\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "11a49ddb-4573-5a2d-8673-58f553dfdb70", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "24d05cd0-80cc-5664-8a9e-6248fc56ffaa", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "62983037-10e1-53ea-ac40-912d81a2c447", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[marqo,openai,postgres]'"}, {"id": "6873a728-88db-5cf5-8a57-6355069c8a61", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.openai.openai_chat import OpenAI_Chat\nfrom openai import AzureOpenAI\nfrom vanna.marqo.marqo import Marqo\n"}, {"id": "aa425412-56b4-5b29-8f25-d0bb982b7446", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(Marqo, OpenAI_Chat):\n def __init__(self, config=None):\n Marqo.__init__(self, config={'marqo_url': MARQO_URL, 'marqo_model': MARQO_MODEL})\n OpenAI_Chat.__init__(self, client=AzureOpenAI(...), config=config) # Make sure to put your AzureOpenAI client here\n\nvn = MyVanna(config={'model': 'gpt-4-...'})\n"}, {"id": "434c5705-542f-566e-8c40-93fa853bda26", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "38707ef4-8063-5170-873a-45e63c1928a7", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_postgres(host='my-host', dbname='my-dbname', user='my-user', password='my-password', port='my-port')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/postgres-openai-azure-other-vectordb.ipynb b/notebooks/postgres-openai-azure-other-vectordb.ipynb deleted file mode 100644 index b1dd2d46..00000000 --- a/notebooks/postgres-openai-azure-other-vectordb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "6c5bdd16-d84b-527f-a805-d01f53e7337c", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Postgres using Azure OpenAI, Other VectorDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "55d62c18-7f8e-53cf-8a60-fb5abd6efee4", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "4aafd94a-06eb-51e1-8df7-409c90675dc5", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "5629279e-c760-54d5-8a49-05e0838d3a07", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[openai,postgres]'"}, {"id": "19782e02-3b88-533a-a9cd-f73a7d88e153", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.openai.openai_chat import OpenAI_Chat\nfrom openai import AzureOpenAI\nfrom vanna.base import VannaBase\n"}, {"id": "1a1f7fff-3055-51d2-a91d-bf03f4f94bc8", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\nclass MyCustomVectorDB(VannaBase):\n def add_ddl(self, ddl: str, **kwargs) -> str:\n # Implement here\n\n def add_documentation(self, doc: str, **kwargs) -> str:\n # Implement here\n\n def add_question_sql(self, question: str, sql: str, **kwargs) -> str:\n # Implement here\n\n def get_related_ddl(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_related_documentation(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_similar_question_sql(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_training_data(self, **kwargs) -> pd.DataFrame:\n # Implement here\n\n def remove_training_data(id: str, **kwargs) -> bool:\n # Implement here\n\n\nclass MyVanna(MyCustomVectorDB, OpenAI_Chat):\n def __init__(self, config=None):\n MyCustomVectorDB.__init__(self, config=config)\n OpenAI_Chat.__init__(self, client=AzureOpenAI(...), config=config) # Make sure to put your AzureOpenAI client here\n\nvn = MyVanna(config={'model': 'gpt-4-...'})\n"}, {"id": "1cfc68ef-cda4-5bd3-94c4-b23c2ef2979c", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "38707ef4-8063-5170-873a-45e63c1928a7", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_postgres(host='my-host', dbname='my-dbname', user='my-user', password='my-password', port='my-port')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/postgres-openai-azure-vannadb.ipynb b/notebooks/postgres-openai-azure-vannadb.ipynb deleted file mode 100644 index 21b62613..00000000 --- a/notebooks/postgres-openai-azure-vannadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "778e258a-8586-5d24-bde4-0a1a6361f6a9", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Postgres using Azure OpenAI, Vanna Hosted Vector DB (Recommended)\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "b707bd2c-b6fa-517e-944f-1f316438c252", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "59f5454a-9c3a-5ea2-9d20-7a32ca5813b4", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "5629279e-c760-54d5-8a49-05e0838d3a07", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[openai,postgres]'"}, {"id": "031a7573-71e2-5c65-873c-124e3158003d", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.openai.openai_chat import OpenAI_Chat\nfrom openai import AzureOpenAI\nfrom vanna.vannadb.vannadb_vector import VannaDB_VectorStore\n"}, {"id": "9fd5a61a-c40c-5577-80bb-3c8fbf26dc21", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(VannaDB_VectorStore, OpenAI_Chat):\n def __init__(self, config=None):\n VannaDB_VectorStore.__init__(self, vanna_model=MY_VANNA_MODEL, vanna_api_key=MY_VANNA_API_KEY, config=config)\n OpenAI_Chat.__init__(self, client=AzureOpenAI(...), config=config) # Make sure to put your AzureOpenAI client here\n\nvn = MyVanna(config={'model': 'gpt-4-...'})\n"}, {"id": "c75ad4aa-7cff-5533-8867-a7628c0697c7", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "38707ef4-8063-5170-873a-45e63c1928a7", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_postgres(host='my-host', dbname='my-dbname', user='my-user', password='my-password', port='my-port')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/postgres-openai-standard-chromadb.ipynb b/notebooks/postgres-openai-standard-chromadb.ipynb deleted file mode 100644 index c94330e8..00000000 --- a/notebooks/postgres-openai-standard-chromadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "95b3f23b-49e5-5f79-bedc-f3e5dea0f14f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Postgres using OpenAI, ChromaDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "a552e618-fefd-5a0d-8005-c47323ee0a3a", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "65fe6254-dbf1-59dc-91c6-fad08e3b05ff", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "30b351fd-e454-5983-b4aa-a522759a1dbe", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[chromadb,openai,postgres]'"}, {"id": "93b5ab2b-834b-5b86-8d47-c9beda8b3544", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.openai.openai_chat import OpenAI_Chat\nfrom vanna.chromadb.chromadb_vector import ChromaDB_VectorStore\n"}, {"id": "28a8d8a1-669f-5f8b-82c4-73a0eb221d64", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(ChromaDB_VectorStore, OpenAI_Chat):\n def __init__(self, config=None):\n ChromaDB_VectorStore.__init__(self, config=config)\n OpenAI_Chat.__init__(self, config=config)\n\nvn = MyVanna(config={'api_key': 'sk-...', 'model': 'gpt-4-...'})\n"}, {"id": "a103cf57-1d4c-5e2b-a73b-72a6827a9281", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "38707ef4-8063-5170-873a-45e63c1928a7", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_postgres(host='my-host', dbname='my-dbname', user='my-user', password='my-password', port='my-port')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/postgres-openai-standard-marqo.ipynb b/notebooks/postgres-openai-standard-marqo.ipynb deleted file mode 100644 index 5e969bb7..00000000 --- a/notebooks/postgres-openai-standard-marqo.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "82494868-ca31-5a5b-aa10-f5ebf57091af", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Postgres using OpenAI, Marqo\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "095e6e97-1391-5e97-8901-e7cc282058c6", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "02dcf380-b5e4-518f-97e7-50dde2f89dca", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "62983037-10e1-53ea-ac40-912d81a2c447", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[marqo,openai,postgres]'"}, {"id": "dc8ae8d1-d08e-5a8c-a806-09ba465d7761", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.openai.openai_chat import OpenAI_Chat\nfrom vanna.marqo.marqo import Marqo\n"}, {"id": "3ce3c4db-08c1-5d0a-86df-2f7b35b82bc2", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(Marqo, OpenAI_Chat):\n def __init__(self, config=None):\n Marqo.__init__(self, config={'marqo_url': MARQO_URL, 'marqo_model': MARQO_MODEL})\n OpenAI_Chat.__init__(self, config=config)\n\nvn = MyVanna(config={'api_key': 'sk-...', 'model': 'gpt-4-...'})\n"}, {"id": "d49d158b-aea7-5bd6-b2ea-854067b49f9d", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "38707ef4-8063-5170-873a-45e63c1928a7", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_postgres(host='my-host', dbname='my-dbname', user='my-user', password='my-password', port='my-port')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/postgres-openai-standard-other-vectordb.ipynb b/notebooks/postgres-openai-standard-other-vectordb.ipynb deleted file mode 100644 index e60380bc..00000000 --- a/notebooks/postgres-openai-standard-other-vectordb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "ad6a7ca6-de11-5e6c-accf-b908b3b5f536", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Postgres using OpenAI, Other VectorDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "cc22b65c-c118-568d-95b5-320743ba50ce", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "3ce03f11-0930-5754-a09e-dd673300f806", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "5629279e-c760-54d5-8a49-05e0838d3a07", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[openai,postgres]'"}, {"id": "fe1b5686-8226-53d5-b42b-a29cdb088cad", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.openai.openai_chat import OpenAI_Chat\nfrom vanna.base import VannaBase\n"}, {"id": "45f49779-04b9-574f-b573-4f0afb619e7e", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\nclass MyCustomVectorDB(VannaBase):\n def add_ddl(self, ddl: str, **kwargs) -> str:\n # Implement here\n\n def add_documentation(self, doc: str, **kwargs) -> str:\n # Implement here\n\n def add_question_sql(self, question: str, sql: str, **kwargs) -> str:\n # Implement here\n\n def get_related_ddl(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_related_documentation(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_similar_question_sql(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_training_data(self, **kwargs) -> pd.DataFrame:\n # Implement here\n\n def remove_training_data(id: str, **kwargs) -> bool:\n # Implement here\n\n\nclass MyVanna(MyCustomVectorDB, OpenAI_Chat):\n def __init__(self, config=None):\n MyCustomVectorDB.__init__(self, config=config)\n OpenAI_Chat.__init__(self, config=config)\n\nvn = MyVanna(config={'api_key': 'sk-...', 'model': 'gpt-4-...'})\n"}, {"id": "0b5cbed2-eaf8-57d9-ba43-3fd4d4c7ce6d", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "38707ef4-8063-5170-873a-45e63c1928a7", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_postgres(host='my-host', dbname='my-dbname', user='my-user', password='my-password', port='my-port')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/postgres-openai-standard-vannadb.ipynb b/notebooks/postgres-openai-standard-vannadb.ipynb deleted file mode 100644 index 9fbe816a..00000000 --- a/notebooks/postgres-openai-standard-vannadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "bd885f8c-8938-5a71-826f-6c4000c70508", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Postgres using OpenAI, Vanna Hosted Vector DB (Recommended)\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "23336edb-af5c-5cee-a11a-da2a8355603f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "ea6ba7f8-b88b-5281-b2ff-3bf99ac5a721", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "5629279e-c760-54d5-8a49-05e0838d3a07", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[openai,postgres]'"}, {"id": "4ff1aaee-1154-5859-b8c3-93ac3c31595d", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.openai.openai_chat import OpenAI_Chat\nfrom vanna.vannadb.vannadb_vector import VannaDB_VectorStore\n"}, {"id": "1fc13242-ce0f-53e5-832e-ff33197d2eef", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(VannaDB_VectorStore, OpenAI_Chat):\n def __init__(self, config=None):\n VannaDB_VectorStore.__init__(self, vanna_model=MY_VANNA_MODEL, vanna_api_key=MY_VANNA_API_KEY, config=config)\n OpenAI_Chat.__init__(self, config=config)\n\nvn = MyVanna(config={'api_key': 'sk-...', 'model': 'gpt-4-...'})\n"}, {"id": "0dc7642e-3c68-5436-8510-390fd86789e0", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "38707ef4-8063-5170-873a-45e63c1928a7", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_postgres(host='my-host', dbname='my-dbname', user='my-user', password='my-password', port='my-port')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/postgres-openai-vanna-chromadb.ipynb b/notebooks/postgres-openai-vanna-chromadb.ipynb deleted file mode 100644 index 612aab84..00000000 --- a/notebooks/postgres-openai-vanna-chromadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "df07813d-72a1-5452-8dc9-f6894538a24b", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Postgres using OpenAI via Vanna.AI (Recommended), ChromaDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "75fcde7a-5d87-565f-81e2-8270d4b4be99", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "b013b6eb-ae18-5d49-995a-c462458c0904", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "3642397b-e00d-58d8-8500-e501ec0f7e4e", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[chromadb,postgres]'"}, {"id": "c1e5ad61-57c7-5b64-920b-6f5b435df5e3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.chromadb.chromadb_vector import ChromaDB_VectorStore\n"}, {"id": "3225927e-ae19-5159-a112-8dac5a3cda22", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(ChromaDB_VectorStore):\n def __init__(self, config=None):\n ChromaDB_VectorStore.__init__(self, config=config)\n\nvn = MyVanna()\n"}, {"id": "3652dfbf-c249-51b4-9dc3-f4c7c11326de", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "38707ef4-8063-5170-873a-45e63c1928a7", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_postgres(host='my-host', dbname='my-dbname', user='my-user', password='my-password', port='my-port')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/postgres-openai-vanna-marqo.ipynb b/notebooks/postgres-openai-vanna-marqo.ipynb deleted file mode 100644 index 449dd310..00000000 --- a/notebooks/postgres-openai-vanna-marqo.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "351a9c1a-ccd5-571d-8d48-cd42b3cfa2d3", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Postgres using OpenAI via Vanna.AI (Recommended), Marqo\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "c9208da9-f260-5e4f-9713-1f0f7f0ed03b", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "c4b953fc-fa5a-5907-8ed5-756efdb2e6ba", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "2f878a3b-afef-5bb3-9a04-195b941368dc", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[marqo,postgres]'"}, {"id": "a1877af9-e758-52a4-8f21-3d7b2e0c904f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.marqo.marqo import Marqo\n"}, {"id": "b0e1d67a-58fd-5bcd-b2a2-a13317fda343", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(Marqo):\n def __init__(self, config=None):\n Marqo.__init__(self, config={'marqo_url': MARQO_URL, 'marqo_model': MARQO_MODEL})\n\nvn = MyVanna()\n"}, {"id": "ee8dd1b9-a113-5bca-a151-66ae4844d037", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "38707ef4-8063-5170-873a-45e63c1928a7", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_postgres(host='my-host', dbname='my-dbname', user='my-user', password='my-password', port='my-port')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/postgres-openai-vanna-other-vectordb.ipynb b/notebooks/postgres-openai-vanna-other-vectordb.ipynb deleted file mode 100644 index fe6d158d..00000000 --- a/notebooks/postgres-openai-vanna-other-vectordb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "c6b9a340-0204-5267-b461-47450cdb8a2d", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Postgres using OpenAI via Vanna.AI (Recommended), Other VectorDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "502499f2-8200-5bdf-bc7d-4bd15b1e7f63", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "adec8661-7621-5bfe-a9aa-762ff25e5846", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "bdef8f4c-bd17-56af-8840-6452768ea0f3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[postgres]'"}, {"id": "35e4b991-0e84-561d-8c1e-979bb4252ec9", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.base import VannaBase\n"}, {"id": "57fbc78c-6a54-5f06-98d8-69f315a380b4", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\nclass MyCustomVectorDB(VannaBase):\n def add_ddl(self, ddl: str, **kwargs) -> str:\n # Implement here\n\n def add_documentation(self, doc: str, **kwargs) -> str:\n # Implement here\n\n def add_question_sql(self, question: str, sql: str, **kwargs) -> str:\n # Implement here\n\n def get_related_ddl(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_related_documentation(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_similar_question_sql(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_training_data(self, **kwargs) -> pd.DataFrame:\n # Implement here\n\n def remove_training_data(id: str, **kwargs) -> bool:\n # Implement here\n\n\nclass MyVanna(MyCustomVectorDB):\n def __init__(self, config=None):\n MyCustomVectorDB.__init__(self, config=config)\n\nvn = MyVanna()\n"}, {"id": "fbe025c2-7491-5831-93bf-24edd0a41f1d", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "38707ef4-8063-5170-873a-45e63c1928a7", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_postgres(host='my-host', dbname='my-dbname', user='my-user', password='my-password', port='my-port')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/postgres-openai-vanna-vannadb.ipynb b/notebooks/postgres-openai-vanna-vannadb.ipynb deleted file mode 100644 index 2080b769..00000000 --- a/notebooks/postgres-openai-vanna-vannadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "ff3e46c3-5735-53fe-86ba-dd1ca947e4ba", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Postgres using OpenAI via Vanna.AI (Recommended), Vanna Hosted Vector DB (Recommended)\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "c263c951-b756-57eb-a66a-ef636ff0a696", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "ea6ba7f8-b88b-5281-b2ff-3bf99ac5a721", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "bdef8f4c-bd17-56af-8840-6452768ea0f3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[postgres]'"}, {"id": "6160c274-caf4-537e-9a02-f6a1d7022a2c", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "import vanna\nfrom vanna.remote import VannaDefault"}, {"id": "cc6152fc-02df-5490-9920-896b5565b3d0", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "api_key = vanna.get_api_key('my-email@example.com')\n\nvanna_model_name = # Put a unique name here\nvn = VannaDefault(model=vanna_model_name, api_key=api_key)\n"}, {"id": "f4fe34ed-796a-5dc8-bd05-0e2013c73558", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "38707ef4-8063-5170-873a-45e63c1928a7", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_postgres(host='my-host', dbname='my-dbname', user='my-user', password='my-password', port='my-port')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/postgres-other-llm-chromadb.ipynb b/notebooks/postgres-other-llm-chromadb.ipynb deleted file mode 100644 index b4571ebb..00000000 --- a/notebooks/postgres-other-llm-chromadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "30e88248-26ea-53ad-93a6-9b3d5da41033", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Postgres using Other LLM, ChromaDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "0dc3de1e-d806-5f7c-86aa-f0a764bbb64c", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "58e05bbe-f915-5ff5-abb9-e039319e458e", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "3642397b-e00d-58d8-8500-e501ec0f7e4e", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[chromadb,postgres]'"}, {"id": "a70195e6-7c1f-519f-8413-4ad4e6b3570d", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.base import VannaBase\nfrom vanna.chromadb.chromadb_vector import ChromaDB_VectorStore\n"}, {"id": "ad2c6517-9727-56fb-befe-a4108859aa3b", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\nclass MyCustomLLM(VannaBase):\n def __init__(self, config=None):\n pass\n\n def generate_plotly_code(self, question: str = None, sql: str = None, df_metadata: str = None, **kwargs) -> str:\n # Implement here\n\n def generate_question(self, sql: str, **kwargs) -> str:\n # Implement here\n \n def get_followup_questions_prompt(self, question: str, question_sql_list: list, ddl_list: list, doc_list: list, **kwargs):\n # Implement here\n \n def get_sql_prompt(self, question: str, question_sql_list: list, ddl_list: list, doc_list: list, **kwargs):\n # Implement here\n\n def submit_prompt(self, prompt, **kwargs) -> str:\n # Implement here\n \n\nclass MyVanna(ChromaDB_VectorStore, MyCustomLLM):\n def __init__(self, config=None):\n ChromaDB_VectorStore.__init__(self, config=config)\n MyCustomLLM.__init__(self, config=config)\n\nvn = MyVanna()\n"}, {"id": "218818b3-2737-5f6a-a345-dd682b617c49", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "38707ef4-8063-5170-873a-45e63c1928a7", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_postgres(host='my-host', dbname='my-dbname', user='my-user', password='my-password', port='my-port')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/postgres-other-llm-marqo.ipynb b/notebooks/postgres-other-llm-marqo.ipynb deleted file mode 100644 index 9ab9303a..00000000 --- a/notebooks/postgres-other-llm-marqo.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "47e6700f-2fb1-5518-bd4f-d8f1ab43e77e", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Postgres using Other LLM, Marqo\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "bf373d88-64a8-5f57-9f12-1238aba1bdfc", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "dd109030-882d-50b1-a642-608c68e204d7", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "2f878a3b-afef-5bb3-9a04-195b941368dc", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[marqo,postgres]'"}, {"id": "2e26545c-6029-5c62-b146-105086c10f6d", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.base import VannaBase\nfrom vanna.marqo.marqo import Marqo\n"}, {"id": "c1812db9-f2e2-5e21-98c1-d00397d25f65", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\nclass MyCustomLLM(VannaBase):\n def __init__(self, config=None):\n pass\n\n def generate_plotly_code(self, question: str = None, sql: str = None, df_metadata: str = None, **kwargs) -> str:\n # Implement here\n\n def generate_question(self, sql: str, **kwargs) -> str:\n # Implement here\n \n def get_followup_questions_prompt(self, question: str, question_sql_list: list, ddl_list: list, doc_list: list, **kwargs):\n # Implement here\n \n def get_sql_prompt(self, question: str, question_sql_list: list, ddl_list: list, doc_list: list, **kwargs):\n # Implement here\n\n def submit_prompt(self, prompt, **kwargs) -> str:\n # Implement here\n \n\nclass MyVanna(Marqo, MyCustomLLM):\n def __init__(self, config=None):\n Marqo.__init__(self, config={'marqo_url': MARQO_URL, 'marqo_model': MARQO_MODEL})\n MyCustomLLM.__init__(self, config=config)\n\nvn = MyVanna()\n"}, {"id": "bc4b70b8-16d3-5ddb-a8d4-081b71fd4670", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "38707ef4-8063-5170-873a-45e63c1928a7", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_postgres(host='my-host', dbname='my-dbname', user='my-user', password='my-password', port='my-port')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/postgres-other-llm-other-vectordb.ipynb b/notebooks/postgres-other-llm-other-vectordb.ipynb deleted file mode 100644 index 93074de0..00000000 --- a/notebooks/postgres-other-llm-other-vectordb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "3a23b994-dde6-5290-a4ae-5c0fbc8143d0", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Postgres using Other LLM, Other VectorDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "1a323199-007a-5773-aab8-b6510f11824b", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "4ce94f6b-39db-5297-af88-8ae081327b78", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "bdef8f4c-bd17-56af-8840-6452768ea0f3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[postgres]'"}, {"id": "35e4b991-0e84-561d-8c1e-979bb4252ec9", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.base import VannaBase\n"}, {"id": "2ff3ca97-cb35-56c7-9263-a3613e4ce005", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\nclass MyCustomVectorDB(VannaBase):\n def add_ddl(self, ddl: str, **kwargs) -> str:\n # Implement here\n\n def add_documentation(self, doc: str, **kwargs) -> str:\n # Implement here\n\n def add_question_sql(self, question: str, sql: str, **kwargs) -> str:\n # Implement here\n\n def get_related_ddl(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_related_documentation(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_similar_question_sql(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_training_data(self, **kwargs) -> pd.DataFrame:\n # Implement here\n\n def remove_training_data(id: str, **kwargs) -> bool:\n # Implement here\n\nclass MyCustomLLM(VannaBase):\n def __init__(self, config=None):\n pass\n\n def generate_plotly_code(self, question: str = None, sql: str = None, df_metadata: str = None, **kwargs) -> str:\n # Implement here\n\n def generate_question(self, sql: str, **kwargs) -> str:\n # Implement here\n \n def get_followup_questions_prompt(self, question: str, question_sql_list: list, ddl_list: list, doc_list: list, **kwargs):\n # Implement here\n \n def get_sql_prompt(self, question: str, question_sql_list: list, ddl_list: list, doc_list: list, **kwargs):\n # Implement here\n\n def submit_prompt(self, prompt, **kwargs) -> str:\n # Implement here\n \n\nclass MyVanna(MyCustomVectorDB, MyCustomLLM):\n def __init__(self, config=None):\n MyCustomVectorDB.__init__(self, config=config)\n MyCustomLLM.__init__(self, config=config)\n\nvn = MyVanna()\n"}, {"id": "ede6c438-aa86-5587-96f5-f8cfebc39dae", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "38707ef4-8063-5170-873a-45e63c1928a7", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_postgres(host='my-host', dbname='my-dbname', user='my-user', password='my-password', port='my-port')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/postgres-other-llm-vannadb.ipynb b/notebooks/postgres-other-llm-vannadb.ipynb deleted file mode 100644 index e7c3c13c..00000000 --- a/notebooks/postgres-other-llm-vannadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "cd757483-4d52-5a68-94b5-0244087a9cdb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Postgres using Other LLM, Vanna Hosted Vector DB (Recommended)\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "2ba202ba-7325-523a-9717-cb7730ea4253", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "a34d3625-80b0-5424-a34e-81d174b7619e", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "bdef8f4c-bd17-56af-8840-6452768ea0f3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[postgres]'"}, {"id": "bfe31937-16c5-5ecb-9aea-0cc1b2aec53c", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.vannadb.vannadb_vector import VannaDB_VectorStore\nfrom vanna.base import VannaBase\n"}, {"id": "8ac7e323-be70-5fee-9d96-69868af0ff99", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\nclass MyCustomLLM(VannaBase):\n def __init__(self, config=None):\n pass\n\n def generate_plotly_code(self, question: str = None, sql: str = None, df_metadata: str = None, **kwargs) -> str:\n # Implement here\n\n def generate_question(self, sql: str, **kwargs) -> str:\n # Implement here\n \n def get_followup_questions_prompt(self, question: str, question_sql_list: list, ddl_list: list, doc_list: list, **kwargs):\n # Implement here\n \n def get_sql_prompt(self, question: str, question_sql_list: list, ddl_list: list, doc_list: list, **kwargs):\n # Implement here\n\n def submit_prompt(self, prompt, **kwargs) -> str:\n # Implement here\n \n\nclass MyVanna(VannaDB_VectorStore, MyCustomLLM):\n def __init__(self, config=None):\n VannaDB_VectorStore.__init__(self, vanna_model=MY_VANNA_MODEL, vanna_api_key=MY_VANNA_API_KEY, config=config)\n MyCustomLLM.__init__(self, config=config)\n\nvn = MyVanna()\n"}, {"id": "b7091121-9564-582b-bbc5-a131426fe27e", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "38707ef4-8063-5170-873a-45e63c1928a7", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_postgres(host='my-host', dbname='my-dbname', user='my-user', password='my-password', port='my-port')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/slack.ipynb b/notebooks/slack.ipynb deleted file mode 100644 index 4663122a..00000000 --- a/notebooks/slack.ipynb +++ /dev/null @@ -1,42 +0,0 @@ -{ - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Using Vanna with Slack" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\"\"" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Source Code\n", - "https://github.com/vanna-ai/vanna-slack" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [] - } - ], - "metadata": { - "language_info": { - "name": "python" - }, - "orig_nbformat": 4 - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/notebooks/snowflake-mistral-chromadb.ipynb b/notebooks/snowflake-mistral-chromadb.ipynb deleted file mode 100644 index bdf1360a..00000000 --- a/notebooks/snowflake-mistral-chromadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "581af781-64b0-5419-b34c-f423e998b939", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Snowflake using Mistral via Mistral API, ChromaDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "028bcaab-c1fe-57d7-ad3d-eae62574637b", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "cfd53a0e-d75a-504c-86d2-24e092fb7965", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "678cedb3-98fb-53c0-8cfd-c8663ea21113", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[chromadb,mistralai,snowflake]'"}, {"id": "3a68caf5-fa2e-5ee9-9bbb-7b85ea07a5ea", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.chromadb.chromadb_vector import ChromaDB_VectorStore\nfrom vanna.mistral.mistral import Mistral\n"}, {"id": "0a4dc6a1-8cfc-53ae-a9fb-4eca76807451", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(ChromaDB_VectorStore, Mistral):\n def __init__(self, config=None):\n ChromaDB_VectorStore.__init__(self, config=config)\n Mistral.__init__(self, config={'api_key': MISTRAL_API_KEY, 'model': 'mistral-tiny'})\n\nvn = MyVanna()\n"}, {"id": "2794e104-456a-59ff-9642-f076a5b322c0", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "392c4dd9-cfbd-5d5d-8346-78041426ee08", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\nvn.connect_to_snowflake(\n account=\"myaccount\",\n username=\"myusername\",\n password=\"mypassword\",\n database=\"mydatabase\",\n role=\"myrole\",\n)\n"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/snowflake-mistral-marqo.ipynb b/notebooks/snowflake-mistral-marqo.ipynb deleted file mode 100644 index 249b1caf..00000000 --- a/notebooks/snowflake-mistral-marqo.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "dc380e10-5a07-55b0-b4ff-4c3064aab9e0", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Snowflake using Mistral via Mistral API, Marqo\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "be9a2065-77c5-5ae6-90a4-d388c26f1808", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "85967ce2-512f-5941-8c76-457f873e62cd", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "784da0a2-a431-504f-ac94-72367ca7493e", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[marqo,mistralai,snowflake]'"}, {"id": "696e9c9c-d724-56db-9a06-10a66dc15b0a", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.marqo.marqo import Marqo\nfrom vanna.mistral.mistral import Mistral\n"}, {"id": "de83d46a-6116-5978-8b9a-f0f586a583bd", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(Marqo, Mistral):\n def __init__(self, config=None):\n Marqo.__init__(self, config={'marqo_url': MARQO_URL, 'marqo_model': MARQO_MODEL})\n Mistral.__init__(self, config={'api_key': MISTRAL_API_KEY, 'model': 'mistral-tiny'})\n\nvn = MyVanna()\n"}, {"id": "be6ebd32-b312-5ec1-b77e-a7691af20606", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "392c4dd9-cfbd-5d5d-8346-78041426ee08", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\nvn.connect_to_snowflake(\n account=\"myaccount\",\n username=\"myusername\",\n password=\"mypassword\",\n database=\"mydatabase\",\n role=\"myrole\",\n)\n"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/snowflake-mistral-other-vectordb.ipynb b/notebooks/snowflake-mistral-other-vectordb.ipynb deleted file mode 100644 index 8e77a2a7..00000000 --- a/notebooks/snowflake-mistral-other-vectordb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "bb27d995-aa3f-5004-9976-87e64a33a9d0", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Snowflake using Mistral via Mistral API, Other VectorDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "59581b59-5760-589b-b8b8-423389281910", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "ca149400-a8ed-56d7-9da0-833d08e8bbac", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "037d295c-00dd-5d10-9d2f-0e2b81de13d0", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[mistralai,snowflake]'"}, {"id": "d54a05e2-de07-56c0-b57f-0bf2d42e559c", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.base import VannaBase\nfrom vanna.mistral.mistral import Mistral\n"}, {"id": "edc45a16-5782-5d88-9f4a-c405c1f79dea", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\nclass MyCustomVectorDB(VannaBase):\n def add_ddl(self, ddl: str, **kwargs) -> str:\n # Implement here\n\n def add_documentation(self, doc: str, **kwargs) -> str:\n # Implement here\n\n def add_question_sql(self, question: str, sql: str, **kwargs) -> str:\n # Implement here\n\n def get_related_ddl(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_related_documentation(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_similar_question_sql(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_training_data(self, **kwargs) -> pd.DataFrame:\n # Implement here\n\n def remove_training_data(id: str, **kwargs) -> bool:\n # Implement here\n\n\nclass MyVanna(MyCustomVectorDB, Mistral):\n def __init__(self, config=None):\n MyCustomVectorDB.__init__(self, config=config)\n Mistral.__init__(self, config={'api_key': MISTRAL_API_KEY, 'model': 'mistral-tiny'})\n\nvn = MyVanna()\n"}, {"id": "a62badb0-91ba-56ee-ba75-78259258c42c", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "392c4dd9-cfbd-5d5d-8346-78041426ee08", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\nvn.connect_to_snowflake(\n account=\"myaccount\",\n username=\"myusername\",\n password=\"mypassword\",\n database=\"mydatabase\",\n role=\"myrole\",\n)\n"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/snowflake-mistral-vannadb.ipynb b/notebooks/snowflake-mistral-vannadb.ipynb deleted file mode 100644 index a6e39bee..00000000 --- a/notebooks/snowflake-mistral-vannadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "331570b7-be75-5d5f-8cff-7e4570addec8", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Snowflake using Mistral via Mistral API, Vanna Hosted Vector DB (Recommended)\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "30ca42f3-0e6c-5e60-a359-503a87213bf2", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "f705ed90-989d-59df-9927-e9d515b6f9f5", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "037d295c-00dd-5d10-9d2f-0e2b81de13d0", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[mistralai,snowflake]'"}, {"id": "88b7ebec-d4f9-53aa-8f06-7c27055d16b0", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.vannadb.vannadb_vector import VannaDB_VectorStore\nfrom vanna.mistral.mistral import Mistral\n"}, {"id": "2aa3c756-d1ad-5b3c-a161-5bad6f77d594", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(VannaDB_VectorStore, Mistral):\n def __init__(self, config=None):\n VannaDB_VectorStore.__init__(self, vanna_model=MY_VANNA_MODEL, vanna_api_key=MY_VANNA_API_KEY, config=config)\n Mistral.__init__(self, config={'api_key': MISTRAL_API_KEY, 'model': 'mistral-tiny'})\n\nvn = MyVanna()\n"}, {"id": "1c76a8a7-517a-59c9-83f4-13bd1c0dd817", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "392c4dd9-cfbd-5d5d-8346-78041426ee08", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\nvn.connect_to_snowflake(\n account=\"myaccount\",\n username=\"myusername\",\n password=\"mypassword\",\n database=\"mydatabase\",\n role=\"myrole\",\n)\n"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/snowflake-openai-azure-chromadb.ipynb b/notebooks/snowflake-openai-azure-chromadb.ipynb deleted file mode 100644 index 1b36a137..00000000 --- a/notebooks/snowflake-openai-azure-chromadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "6287c685-ff0c-5a75-a58f-fd9d47b14fc3", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Snowflake using Azure OpenAI, ChromaDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "7c603f36-8039-502a-983d-bf98a618b27a", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "4923d0fe-58f3-52de-8739-2a55b399f5f8", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "216dcd51-21ea-5740-a271-269aa81f38e3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[chromadb,openai,snowflake]'"}, {"id": "f6088c74-bfc7-5808-bd52-b2468267a3aa", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.openai.openai_chat import OpenAI_Chat\nfrom openai import AzureOpenAI\nfrom vanna.chromadb.chromadb_vector import ChromaDB_VectorStore\n"}, {"id": "895d74e6-b5e9-58f3-b58b-07c8e9d28707", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(ChromaDB_VectorStore, OpenAI_Chat):\n def __init__(self, config=None):\n ChromaDB_VectorStore.__init__(self, config=config)\n OpenAI_Chat.__init__(self, client=AzureOpenAI(...), config=config) # Make sure to put your AzureOpenAI client here\n\nvn = MyVanna(config={'model': 'gpt-4-...'})\n"}, {"id": "417fd988-6411-5519-8590-3ecf36dddcbf", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "392c4dd9-cfbd-5d5d-8346-78041426ee08", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\nvn.connect_to_snowflake(\n account=\"myaccount\",\n username=\"myusername\",\n password=\"mypassword\",\n database=\"mydatabase\",\n role=\"myrole\",\n)\n"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/snowflake-openai-azure-marqo.ipynb b/notebooks/snowflake-openai-azure-marqo.ipynb deleted file mode 100644 index 75ad2788..00000000 --- a/notebooks/snowflake-openai-azure-marqo.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "ea82563f-1e40-530f-b1c1-b49a1ac0f125", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Snowflake using Azure OpenAI, Marqo\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "4aa821af-2cc8-5a11-b109-361e5b3baf55", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "3702212c-6d62-527d-8717-bb696f9ec2ed", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "792a0a6f-671d-59b0-aed2-fd6606acef80", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[marqo,openai,snowflake]'"}, {"id": "6873a728-88db-5cf5-8a57-6355069c8a61", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.openai.openai_chat import OpenAI_Chat\nfrom openai import AzureOpenAI\nfrom vanna.marqo.marqo import Marqo\n"}, {"id": "aa425412-56b4-5b29-8f25-d0bb982b7446", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(Marqo, OpenAI_Chat):\n def __init__(self, config=None):\n Marqo.__init__(self, config={'marqo_url': MARQO_URL, 'marqo_model': MARQO_MODEL})\n OpenAI_Chat.__init__(self, client=AzureOpenAI(...), config=config) # Make sure to put your AzureOpenAI client here\n\nvn = MyVanna(config={'model': 'gpt-4-...'})\n"}, {"id": "74c50644-a49b-5433-8130-5041ffe24967", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "392c4dd9-cfbd-5d5d-8346-78041426ee08", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\nvn.connect_to_snowflake(\n account=\"myaccount\",\n username=\"myusername\",\n password=\"mypassword\",\n database=\"mydatabase\",\n role=\"myrole\",\n)\n"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/snowflake-openai-azure-other-vectordb.ipynb b/notebooks/snowflake-openai-azure-other-vectordb.ipynb deleted file mode 100644 index 81be22d3..00000000 --- a/notebooks/snowflake-openai-azure-other-vectordb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "6aac9f07-876b-5289-9f4e-7524132617ad", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Snowflake using Azure OpenAI, Other VectorDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "1124d018-1c19-5e7e-9bc5-0ef3f2d34a44", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "0952250a-a0b8-57bf-bf8c-09849612f91d", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "0f72722e-743a-5317-9c08-564f18d4f8ef", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[openai,snowflake]'"}, {"id": "19782e02-3b88-533a-a9cd-f73a7d88e153", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.openai.openai_chat import OpenAI_Chat\nfrom openai import AzureOpenAI\nfrom vanna.base import VannaBase\n"}, {"id": "1a1f7fff-3055-51d2-a91d-bf03f4f94bc8", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\nclass MyCustomVectorDB(VannaBase):\n def add_ddl(self, ddl: str, **kwargs) -> str:\n # Implement here\n\n def add_documentation(self, doc: str, **kwargs) -> str:\n # Implement here\n\n def add_question_sql(self, question: str, sql: str, **kwargs) -> str:\n # Implement here\n\n def get_related_ddl(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_related_documentation(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_similar_question_sql(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_training_data(self, **kwargs) -> pd.DataFrame:\n # Implement here\n\n def remove_training_data(id: str, **kwargs) -> bool:\n # Implement here\n\n\nclass MyVanna(MyCustomVectorDB, OpenAI_Chat):\n def __init__(self, config=None):\n MyCustomVectorDB.__init__(self, config=config)\n OpenAI_Chat.__init__(self, client=AzureOpenAI(...), config=config) # Make sure to put your AzureOpenAI client here\n\nvn = MyVanna(config={'model': 'gpt-4-...'})\n"}, {"id": "e4e214e3-26d6-542f-bc24-3331af9dcd0b", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "392c4dd9-cfbd-5d5d-8346-78041426ee08", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\nvn.connect_to_snowflake(\n account=\"myaccount\",\n username=\"myusername\",\n password=\"mypassword\",\n database=\"mydatabase\",\n role=\"myrole\",\n)\n"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/snowflake-openai-azure-vannadb.ipynb b/notebooks/snowflake-openai-azure-vannadb.ipynb deleted file mode 100644 index 879e02c3..00000000 --- a/notebooks/snowflake-openai-azure-vannadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "813e792b-6025-521d-acaf-cc20cbd83c99", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Snowflake using Azure OpenAI, Vanna Hosted Vector DB (Recommended)\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "2e6e05ce-2c8b-524e-9478-07968ff24fe5", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "d605113c-0491-54b5-aa59-f2e311dff1ec", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "0f72722e-743a-5317-9c08-564f18d4f8ef", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[openai,snowflake]'"}, {"id": "031a7573-71e2-5c65-873c-124e3158003d", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.openai.openai_chat import OpenAI_Chat\nfrom openai import AzureOpenAI\nfrom vanna.vannadb.vannadb_vector import VannaDB_VectorStore\n"}, {"id": "9fd5a61a-c40c-5577-80bb-3c8fbf26dc21", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(VannaDB_VectorStore, OpenAI_Chat):\n def __init__(self, config=None):\n VannaDB_VectorStore.__init__(self, vanna_model=MY_VANNA_MODEL, vanna_api_key=MY_VANNA_API_KEY, config=config)\n OpenAI_Chat.__init__(self, client=AzureOpenAI(...), config=config) # Make sure to put your AzureOpenAI client here\n\nvn = MyVanna(config={'model': 'gpt-4-...'})\n"}, {"id": "88718a8f-d88c-5f49-acc1-017db9623d5d", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "392c4dd9-cfbd-5d5d-8346-78041426ee08", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\nvn.connect_to_snowflake(\n account=\"myaccount\",\n username=\"myusername\",\n password=\"mypassword\",\n database=\"mydatabase\",\n role=\"myrole\",\n)\n"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/snowflake-openai-standard-chromadb.ipynb b/notebooks/snowflake-openai-standard-chromadb.ipynb deleted file mode 100644 index d6306dfa..00000000 --- a/notebooks/snowflake-openai-standard-chromadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "75481477-4412-582b-aba7-52183e26f37c", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Snowflake using OpenAI, ChromaDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "339703f1-d6cd-5c0f-8ac1-c221f0798512", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "b176ff21-c8d5-5333-abe1-50847ddd26b8", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "216dcd51-21ea-5740-a271-269aa81f38e3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[chromadb,openai,snowflake]'"}, {"id": "93b5ab2b-834b-5b86-8d47-c9beda8b3544", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.openai.openai_chat import OpenAI_Chat\nfrom vanna.chromadb.chromadb_vector import ChromaDB_VectorStore\n"}, {"id": "28a8d8a1-669f-5f8b-82c4-73a0eb221d64", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(ChromaDB_VectorStore, OpenAI_Chat):\n def __init__(self, config=None):\n ChromaDB_VectorStore.__init__(self, config=config)\n OpenAI_Chat.__init__(self, config=config)\n\nvn = MyVanna(config={'api_key': 'sk-...', 'model': 'gpt-4-...'})\n"}, {"id": "2365dba5-22ad-598b-9be6-259df26e2f09", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "392c4dd9-cfbd-5d5d-8346-78041426ee08", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\nvn.connect_to_snowflake(\n account=\"myaccount\",\n username=\"myusername\",\n password=\"mypassword\",\n database=\"mydatabase\",\n role=\"myrole\",\n)\n"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/snowflake-openai-standard-marqo.ipynb b/notebooks/snowflake-openai-standard-marqo.ipynb deleted file mode 100644 index 5db3df4c..00000000 --- a/notebooks/snowflake-openai-standard-marqo.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "66a6659a-5332-5d82-9036-3b8d8c3ff05c", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Snowflake using OpenAI, Marqo\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "65d93a64-34d2-53ad-9bcd-f50890404297", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "acf1fb3b-d375-55e9-b86b-4391f9ce7659", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "792a0a6f-671d-59b0-aed2-fd6606acef80", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[marqo,openai,snowflake]'"}, {"id": "dc8ae8d1-d08e-5a8c-a806-09ba465d7761", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.openai.openai_chat import OpenAI_Chat\nfrom vanna.marqo.marqo import Marqo\n"}, {"id": "3ce3c4db-08c1-5d0a-86df-2f7b35b82bc2", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(Marqo, OpenAI_Chat):\n def __init__(self, config=None):\n Marqo.__init__(self, config={'marqo_url': MARQO_URL, 'marqo_model': MARQO_MODEL})\n OpenAI_Chat.__init__(self, config=config)\n\nvn = MyVanna(config={'api_key': 'sk-...', 'model': 'gpt-4-...'})\n"}, {"id": "88e7ec95-c208-5973-9be7-cc666e48caa8", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "392c4dd9-cfbd-5d5d-8346-78041426ee08", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\nvn.connect_to_snowflake(\n account=\"myaccount\",\n username=\"myusername\",\n password=\"mypassword\",\n database=\"mydatabase\",\n role=\"myrole\",\n)\n"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/snowflake-openai-standard-other-vectordb.ipynb b/notebooks/snowflake-openai-standard-other-vectordb.ipynb deleted file mode 100644 index f8a6247f..00000000 --- a/notebooks/snowflake-openai-standard-other-vectordb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "a53aec8f-5a05-50f3-9209-7bbf1dca9e6f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Snowflake using OpenAI, Other VectorDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "4486c1b3-6c3e-530c-8386-50ca4b3f99e8", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "4854f259-7176-51d2-8b79-46b6f7bd61f4", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "0f72722e-743a-5317-9c08-564f18d4f8ef", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[openai,snowflake]'"}, {"id": "fe1b5686-8226-53d5-b42b-a29cdb088cad", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.openai.openai_chat import OpenAI_Chat\nfrom vanna.base import VannaBase\n"}, {"id": "45f49779-04b9-574f-b573-4f0afb619e7e", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\nclass MyCustomVectorDB(VannaBase):\n def add_ddl(self, ddl: str, **kwargs) -> str:\n # Implement here\n\n def add_documentation(self, doc: str, **kwargs) -> str:\n # Implement here\n\n def add_question_sql(self, question: str, sql: str, **kwargs) -> str:\n # Implement here\n\n def get_related_ddl(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_related_documentation(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_similar_question_sql(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_training_data(self, **kwargs) -> pd.DataFrame:\n # Implement here\n\n def remove_training_data(id: str, **kwargs) -> bool:\n # Implement here\n\n\nclass MyVanna(MyCustomVectorDB, OpenAI_Chat):\n def __init__(self, config=None):\n MyCustomVectorDB.__init__(self, config=config)\n OpenAI_Chat.__init__(self, config=config)\n\nvn = MyVanna(config={'api_key': 'sk-...', 'model': 'gpt-4-...'})\n"}, {"id": "01e305ed-7f1b-5f22-8459-ff7a200cb877", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "392c4dd9-cfbd-5d5d-8346-78041426ee08", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\nvn.connect_to_snowflake(\n account=\"myaccount\",\n username=\"myusername\",\n password=\"mypassword\",\n database=\"mydatabase\",\n role=\"myrole\",\n)\n"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/snowflake-openai-standard-vannadb.ipynb b/notebooks/snowflake-openai-standard-vannadb.ipynb deleted file mode 100644 index d6e70fe7..00000000 --- a/notebooks/snowflake-openai-standard-vannadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "f13605be-e49c-5be3-87bc-2a90efb57306", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Snowflake using OpenAI, Vanna Hosted Vector DB (Recommended)\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "e2b2b876-72a0-5854-9177-5ad9bcc29ef7", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "f95c3155-2705-5a3f-b76c-8a56037f9090", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "0f72722e-743a-5317-9c08-564f18d4f8ef", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[openai,snowflake]'"}, {"id": "4ff1aaee-1154-5859-b8c3-93ac3c31595d", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.openai.openai_chat import OpenAI_Chat\nfrom vanna.vannadb.vannadb_vector import VannaDB_VectorStore\n"}, {"id": "1fc13242-ce0f-53e5-832e-ff33197d2eef", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(VannaDB_VectorStore, OpenAI_Chat):\n def __init__(self, config=None):\n VannaDB_VectorStore.__init__(self, vanna_model=MY_VANNA_MODEL, vanna_api_key=MY_VANNA_API_KEY, config=config)\n OpenAI_Chat.__init__(self, config=config)\n\nvn = MyVanna(config={'api_key': 'sk-...', 'model': 'gpt-4-...'})\n"}, {"id": "efa4625c-5082-5bce-a2e0-ee025f74349f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "392c4dd9-cfbd-5d5d-8346-78041426ee08", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\nvn.connect_to_snowflake(\n account=\"myaccount\",\n username=\"myusername\",\n password=\"mypassword\",\n database=\"mydatabase\",\n role=\"myrole\",\n)\n"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/snowflake-openai-vanna-chromadb.ipynb b/notebooks/snowflake-openai-vanna-chromadb.ipynb deleted file mode 100644 index adb00201..00000000 --- a/notebooks/snowflake-openai-vanna-chromadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "e493593c-e8c4-5cdd-bdb8-e5d8bb39b0c6", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Snowflake using OpenAI via Vanna.AI (Recommended), ChromaDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "21979433-946d-5051-90ef-4b087189e318", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "21bab113-7c3d-5f1d-a64d-fe68315482f2", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "b20231ea-3913-5a89-8c43-2e14b2173112", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[chromadb,snowflake]'"}, {"id": "c1e5ad61-57c7-5b64-920b-6f5b435df5e3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.chromadb.chromadb_vector import ChromaDB_VectorStore\n"}, {"id": "3225927e-ae19-5159-a112-8dac5a3cda22", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(ChromaDB_VectorStore):\n def __init__(self, config=None):\n ChromaDB_VectorStore.__init__(self, config=config)\n\nvn = MyVanna()\n"}, {"id": "0400e80c-8ad9-5be8-9dc1-f7cce1f481c4", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "392c4dd9-cfbd-5d5d-8346-78041426ee08", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\nvn.connect_to_snowflake(\n account=\"myaccount\",\n username=\"myusername\",\n password=\"mypassword\",\n database=\"mydatabase\",\n role=\"myrole\",\n)\n"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/snowflake-openai-vanna-marqo.ipynb b/notebooks/snowflake-openai-vanna-marqo.ipynb deleted file mode 100644 index 9d67ea89..00000000 --- a/notebooks/snowflake-openai-vanna-marqo.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "89fd2ba0-45a4-5e18-b00c-20d30d963c5e", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Snowflake using OpenAI via Vanna.AI (Recommended), Marqo\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "ee4afbb6-cc60-578b-bba5-10f44e347353", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "d2174c43-def5-5e58-b9b6-2abbf9f9c1e5", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "19c92e55-83d0-5678-9b07-769285f5859f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[marqo,snowflake]'"}, {"id": "a1877af9-e758-52a4-8f21-3d7b2e0c904f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.marqo.marqo import Marqo\n"}, {"id": "b0e1d67a-58fd-5bcd-b2a2-a13317fda343", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(Marqo):\n def __init__(self, config=None):\n Marqo.__init__(self, config={'marqo_url': MARQO_URL, 'marqo_model': MARQO_MODEL})\n\nvn = MyVanna()\n"}, {"id": "b053dbc0-1213-50f7-b9d2-24553f8a2833", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "392c4dd9-cfbd-5d5d-8346-78041426ee08", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\nvn.connect_to_snowflake(\n account=\"myaccount\",\n username=\"myusername\",\n password=\"mypassword\",\n database=\"mydatabase\",\n role=\"myrole\",\n)\n"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/snowflake-openai-vanna-other-vectordb.ipynb b/notebooks/snowflake-openai-vanna-other-vectordb.ipynb deleted file mode 100644 index 15b02b8c..00000000 --- a/notebooks/snowflake-openai-vanna-other-vectordb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "42212054-35d6-56f3-be8e-47af265d9df9", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Snowflake using OpenAI via Vanna.AI (Recommended), Other VectorDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "c38dad5b-51c7-5b49-9e21-6dbace6b923c", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "4bd85a70-8b95-53e5-94c0-7d2bbbf45c58", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "188e4729-c712-598c-a264-482bcf0f552c", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[snowflake]'"}, {"id": "35e4b991-0e84-561d-8c1e-979bb4252ec9", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.base import VannaBase\n"}, {"id": "57fbc78c-6a54-5f06-98d8-69f315a380b4", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\nclass MyCustomVectorDB(VannaBase):\n def add_ddl(self, ddl: str, **kwargs) -> str:\n # Implement here\n\n def add_documentation(self, doc: str, **kwargs) -> str:\n # Implement here\n\n def add_question_sql(self, question: str, sql: str, **kwargs) -> str:\n # Implement here\n\n def get_related_ddl(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_related_documentation(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_similar_question_sql(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_training_data(self, **kwargs) -> pd.DataFrame:\n # Implement here\n\n def remove_training_data(id: str, **kwargs) -> bool:\n # Implement here\n\n\nclass MyVanna(MyCustomVectorDB):\n def __init__(self, config=None):\n MyCustomVectorDB.__init__(self, config=config)\n\nvn = MyVanna()\n"}, {"id": "d09181c1-38f7-55cf-bd4c-263547a53638", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "392c4dd9-cfbd-5d5d-8346-78041426ee08", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\nvn.connect_to_snowflake(\n account=\"myaccount\",\n username=\"myusername\",\n password=\"mypassword\",\n database=\"mydatabase\",\n role=\"myrole\",\n)\n"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/snowflake-openai-vanna-vannadb.ipynb b/notebooks/snowflake-openai-vanna-vannadb.ipynb deleted file mode 100644 index 5664727a..00000000 --- a/notebooks/snowflake-openai-vanna-vannadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "94653bec-534d-5627-9309-0f5d8df292eb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Snowflake using OpenAI via Vanna.AI (Recommended), Vanna Hosted Vector DB (Recommended)\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "e3e271b5-29aa-5174-b69e-2260293a6c0a", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "f95c3155-2705-5a3f-b76c-8a56037f9090", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "188e4729-c712-598c-a264-482bcf0f552c", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[snowflake]'"}, {"id": "6160c274-caf4-537e-9a02-f6a1d7022a2c", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "import vanna\nfrom vanna.remote import VannaDefault"}, {"id": "cc6152fc-02df-5490-9920-896b5565b3d0", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "api_key = vanna.get_api_key('my-email@example.com')\n\nvanna_model_name = # Put a unique name here\nvn = VannaDefault(model=vanna_model_name, api_key=api_key)\n"}, {"id": "d83aac74-4060-5941-a26a-82ee3dab3b68", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "392c4dd9-cfbd-5d5d-8346-78041426ee08", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\nvn.connect_to_snowflake(\n account=\"myaccount\",\n username=\"myusername\",\n password=\"mypassword\",\n database=\"mydatabase\",\n role=\"myrole\",\n)\n"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/snowflake-other-llm-chromadb.ipynb b/notebooks/snowflake-other-llm-chromadb.ipynb deleted file mode 100644 index 84a75034..00000000 --- a/notebooks/snowflake-other-llm-chromadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "f755ebca-fde7-5eb1-802d-2c830e0b6282", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Snowflake using Other LLM, ChromaDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "0ceeb6ff-3607-5b14-9238-000548eb8fcd", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "a6775d4d-7265-5e53-b5ae-3cfa855b66cb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "b20231ea-3913-5a89-8c43-2e14b2173112", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[chromadb,snowflake]'"}, {"id": "a70195e6-7c1f-519f-8413-4ad4e6b3570d", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.base import VannaBase\nfrom vanna.chromadb.chromadb_vector import ChromaDB_VectorStore\n"}, {"id": "ad2c6517-9727-56fb-befe-a4108859aa3b", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\nclass MyCustomLLM(VannaBase):\n def __init__(self, config=None):\n pass\n\n def generate_plotly_code(self, question: str = None, sql: str = None, df_metadata: str = None, **kwargs) -> str:\n # Implement here\n\n def generate_question(self, sql: str, **kwargs) -> str:\n # Implement here\n \n def get_followup_questions_prompt(self, question: str, question_sql_list: list, ddl_list: list, doc_list: list, **kwargs):\n # Implement here\n \n def get_sql_prompt(self, question: str, question_sql_list: list, ddl_list: list, doc_list: list, **kwargs):\n # Implement here\n\n def submit_prompt(self, prompt, **kwargs) -> str:\n # Implement here\n \n\nclass MyVanna(ChromaDB_VectorStore, MyCustomLLM):\n def __init__(self, config=None):\n ChromaDB_VectorStore.__init__(self, config=config)\n MyCustomLLM.__init__(self, config=config)\n\nvn = MyVanna()\n"}, {"id": "a28c2e35-58f8-5e33-abb4-78fdd8e3fea1", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "392c4dd9-cfbd-5d5d-8346-78041426ee08", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\nvn.connect_to_snowflake(\n account=\"myaccount\",\n username=\"myusername\",\n password=\"mypassword\",\n database=\"mydatabase\",\n role=\"myrole\",\n)\n"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/snowflake-other-llm-marqo.ipynb b/notebooks/snowflake-other-llm-marqo.ipynb deleted file mode 100644 index 76541921..00000000 --- a/notebooks/snowflake-other-llm-marqo.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "6b2a5e56-05a4-5866-ba96-3dd081faf78a", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Snowflake using Other LLM, Marqo\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "aef88a00-30a8-567a-8b2d-f6e2abdbca26", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "53b28366-9f79-5e70-bd2b-38bafaefff1c", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "19c92e55-83d0-5678-9b07-769285f5859f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[marqo,snowflake]'"}, {"id": "2e26545c-6029-5c62-b146-105086c10f6d", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.base import VannaBase\nfrom vanna.marqo.marqo import Marqo\n"}, {"id": "c1812db9-f2e2-5e21-98c1-d00397d25f65", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\nclass MyCustomLLM(VannaBase):\n def __init__(self, config=None):\n pass\n\n def generate_plotly_code(self, question: str = None, sql: str = None, df_metadata: str = None, **kwargs) -> str:\n # Implement here\n\n def generate_question(self, sql: str, **kwargs) -> str:\n # Implement here\n \n def get_followup_questions_prompt(self, question: str, question_sql_list: list, ddl_list: list, doc_list: list, **kwargs):\n # Implement here\n \n def get_sql_prompt(self, question: str, question_sql_list: list, ddl_list: list, doc_list: list, **kwargs):\n # Implement here\n\n def submit_prompt(self, prompt, **kwargs) -> str:\n # Implement here\n \n\nclass MyVanna(Marqo, MyCustomLLM):\n def __init__(self, config=None):\n Marqo.__init__(self, config={'marqo_url': MARQO_URL, 'marqo_model': MARQO_MODEL})\n MyCustomLLM.__init__(self, config=config)\n\nvn = MyVanna()\n"}, {"id": "748349d2-6d3d-5523-a80c-36abf0e61f7f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "392c4dd9-cfbd-5d5d-8346-78041426ee08", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\nvn.connect_to_snowflake(\n account=\"myaccount\",\n username=\"myusername\",\n password=\"mypassword\",\n database=\"mydatabase\",\n role=\"myrole\",\n)\n"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/snowflake-other-llm-other-vectordb.ipynb b/notebooks/snowflake-other-llm-other-vectordb.ipynb deleted file mode 100644 index e03ae6ae..00000000 --- a/notebooks/snowflake-other-llm-other-vectordb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "cb9146eb-a0a0-5e0f-82b7-59e92f069498", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Snowflake using Other LLM, Other VectorDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "dcd9d3c5-e561-5d70-a775-f0f40a772553", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "c3cda295-5709-5e62-a60a-842a5fbeea56", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "188e4729-c712-598c-a264-482bcf0f552c", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[snowflake]'"}, {"id": "35e4b991-0e84-561d-8c1e-979bb4252ec9", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.base import VannaBase\n"}, {"id": "2ff3ca97-cb35-56c7-9263-a3613e4ce005", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\nclass MyCustomVectorDB(VannaBase):\n def add_ddl(self, ddl: str, **kwargs) -> str:\n # Implement here\n\n def add_documentation(self, doc: str, **kwargs) -> str:\n # Implement here\n\n def add_question_sql(self, question: str, sql: str, **kwargs) -> str:\n # Implement here\n\n def get_related_ddl(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_related_documentation(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_similar_question_sql(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_training_data(self, **kwargs) -> pd.DataFrame:\n # Implement here\n\n def remove_training_data(id: str, **kwargs) -> bool:\n # Implement here\n\nclass MyCustomLLM(VannaBase):\n def __init__(self, config=None):\n pass\n\n def generate_plotly_code(self, question: str = None, sql: str = None, df_metadata: str = None, **kwargs) -> str:\n # Implement here\n\n def generate_question(self, sql: str, **kwargs) -> str:\n # Implement here\n \n def get_followup_questions_prompt(self, question: str, question_sql_list: list, ddl_list: list, doc_list: list, **kwargs):\n # Implement here\n \n def get_sql_prompt(self, question: str, question_sql_list: list, ddl_list: list, doc_list: list, **kwargs):\n # Implement here\n\n def submit_prompt(self, prompt, **kwargs) -> str:\n # Implement here\n \n\nclass MyVanna(MyCustomVectorDB, MyCustomLLM):\n def __init__(self, config=None):\n MyCustomVectorDB.__init__(self, config=config)\n MyCustomLLM.__init__(self, config=config)\n\nvn = MyVanna()\n"}, {"id": "7e889372-8d72-5f74-9e0c-450ae5729a63", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "392c4dd9-cfbd-5d5d-8346-78041426ee08", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\nvn.connect_to_snowflake(\n account=\"myaccount\",\n username=\"myusername\",\n password=\"mypassword\",\n database=\"mydatabase\",\n role=\"myrole\",\n)\n"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/snowflake-other-llm-vannadb.ipynb b/notebooks/snowflake-other-llm-vannadb.ipynb deleted file mode 100644 index bc0e3d28..00000000 --- a/notebooks/snowflake-other-llm-vannadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "5dcc604a-caa9-5f6d-ab0e-3f417516c076", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for Snowflake using Other LLM, Vanna Hosted Vector DB (Recommended)\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "aadb008e-18eb-5637-b13d-7a2626e8573d", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "f3f996e3-860c-5f39-99d0-d5be662724cf", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "188e4729-c712-598c-a264-482bcf0f552c", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[snowflake]'"}, {"id": "bfe31937-16c5-5ecb-9aea-0cc1b2aec53c", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.vannadb.vannadb_vector import VannaDB_VectorStore\nfrom vanna.base import VannaBase\n"}, {"id": "8ac7e323-be70-5fee-9d96-69868af0ff99", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\nclass MyCustomLLM(VannaBase):\n def __init__(self, config=None):\n pass\n\n def generate_plotly_code(self, question: str = None, sql: str = None, df_metadata: str = None, **kwargs) -> str:\n # Implement here\n\n def generate_question(self, sql: str, **kwargs) -> str:\n # Implement here\n \n def get_followup_questions_prompt(self, question: str, question_sql_list: list, ddl_list: list, doc_list: list, **kwargs):\n # Implement here\n \n def get_sql_prompt(self, question: str, question_sql_list: list, ddl_list: list, doc_list: list, **kwargs):\n # Implement here\n\n def submit_prompt(self, prompt, **kwargs) -> str:\n # Implement here\n \n\nclass MyVanna(VannaDB_VectorStore, MyCustomLLM):\n def __init__(self, config=None):\n VannaDB_VectorStore.__init__(self, vanna_model=MY_VANNA_MODEL, vanna_api_key=MY_VANNA_API_KEY, config=config)\n MyCustomLLM.__init__(self, config=config)\n\nvn = MyVanna()\n"}, {"id": "8d110f9d-8947-5327-ac52-fa41a141f9d8", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "392c4dd9-cfbd-5d5d-8346-78041426ee08", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\nvn.connect_to_snowflake(\n account=\"myaccount\",\n username=\"myusername\",\n password=\"mypassword\",\n database=\"mydatabase\",\n role=\"myrole\",\n)\n"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "5d321d01-d66f-5c5e-a3f3-e2d3d4330344", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The information schema query may need some tweaking depending on your database. This is a good starting point.\ndf_information_schema = vn.run_sql(\"SELECT * FROM INFORMATION_SCHEMA.COLUMNS\")\n\n# This will break up the information schema into bite-sized chunks that can be referenced by the LLM\nplan = vn.get_training_plan_generic(df_information_schema)\nplan\n\n# If you like the plan, then uncomment this and run it to train\n# vn.train(plan=plan)\n\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/sqlite-mistral-chromadb.ipynb b/notebooks/sqlite-mistral-chromadb.ipynb deleted file mode 100644 index 3344b4b8..00000000 --- a/notebooks/sqlite-mistral-chromadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "b901f917-7d1d-5429-b7f3-628b1f239f8d", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for SQLite using Mistral via Mistral API, ChromaDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "540b0186-561a-5cfa-817b-86688e213f3e", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "7e4a551e-f854-5476-90ae-bece9174dda0", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "30aef63a-a75b-52bd-8f9c-7fc096e0aba3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[chromadb,mistralai]'"}, {"id": "3a68caf5-fa2e-5ee9-9bbb-7b85ea07a5ea", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.chromadb.chromadb_vector import ChromaDB_VectorStore\nfrom vanna.mistral.mistral import Mistral\n"}, {"id": "0a4dc6a1-8cfc-53ae-a9fb-4eca76807451", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(ChromaDB_VectorStore, Mistral):\n def __init__(self, config=None):\n ChromaDB_VectorStore.__init__(self, config=config)\n Mistral.__init__(self, config={'api_key': MISTRAL_API_KEY, 'model': 'mistral-tiny'})\n\nvn = MyVanna()\n"}, {"id": "39a0c40c-1efe-5648-91f8-37b92d2c7857", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "4bb60e4c-1036-5c5d-84c6-11c9f2e9c8d1", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_sqlite('my-database.sqlite')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "068a891d-bbab-5462-9767-ebf7211fe423", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\ndf_ddl = vn.run_sql(\"SELECT type, sql FROM sqlite_master WHERE sql is not null\")\n\nfor ddl in df_ddl['sql'].to_list():\n vn.train(ddl=ddl)\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/sqlite-mistral-marqo.ipynb b/notebooks/sqlite-mistral-marqo.ipynb deleted file mode 100644 index a6f265b1..00000000 --- a/notebooks/sqlite-mistral-marqo.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "a6943a3f-7b29-5bf1-b38e-0435de3c1f13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for SQLite using Mistral via Mistral API, Marqo\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "13c67deb-266d-5e80-a282-f743005fe2e0", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "d76f2144-03ef-5dfa-a0bf-58440ac7799c", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "ec51e5b5-fc27-5c00-b1a8-6c9dd188e2f5", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[marqo,mistralai]'"}, {"id": "696e9c9c-d724-56db-9a06-10a66dc15b0a", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.marqo.marqo import Marqo\nfrom vanna.mistral.mistral import Mistral\n"}, {"id": "de83d46a-6116-5978-8b9a-f0f586a583bd", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(Marqo, Mistral):\n def __init__(self, config=None):\n Marqo.__init__(self, config={'marqo_url': MARQO_URL, 'marqo_model': MARQO_MODEL})\n Mistral.__init__(self, config={'api_key': MISTRAL_API_KEY, 'model': 'mistral-tiny'})\n\nvn = MyVanna()\n"}, {"id": "406dbb57-1a5d-5576-9767-c950b0d9e066", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "4bb60e4c-1036-5c5d-84c6-11c9f2e9c8d1", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_sqlite('my-database.sqlite')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "068a891d-bbab-5462-9767-ebf7211fe423", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\ndf_ddl = vn.run_sql(\"SELECT type, sql FROM sqlite_master WHERE sql is not null\")\n\nfor ddl in df_ddl['sql'].to_list():\n vn.train(ddl=ddl)\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/sqlite-mistral-other-vectordb.ipynb b/notebooks/sqlite-mistral-other-vectordb.ipynb deleted file mode 100644 index 92baa9e7..00000000 --- a/notebooks/sqlite-mistral-other-vectordb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "0aeab80e-f7e9-5ae8-967e-72d92129951d", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for SQLite using Mistral via Mistral API, Other VectorDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "2ece6ad9-270f-59ff-a4aa-db2654c5eafd", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "a390e116-d2ef-5b0a-b9bf-2453b1edc365", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "22d0fc58-9374-5bda-9414-d80b35fecb42", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[mistralai]'"}, {"id": "d54a05e2-de07-56c0-b57f-0bf2d42e559c", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.base import VannaBase\nfrom vanna.mistral.mistral import Mistral\n"}, {"id": "edc45a16-5782-5d88-9f4a-c405c1f79dea", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\nclass MyCustomVectorDB(VannaBase):\n def add_ddl(self, ddl: str, **kwargs) -> str:\n # Implement here\n\n def add_documentation(self, doc: str, **kwargs) -> str:\n # Implement here\n\n def add_question_sql(self, question: str, sql: str, **kwargs) -> str:\n # Implement here\n\n def get_related_ddl(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_related_documentation(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_similar_question_sql(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_training_data(self, **kwargs) -> pd.DataFrame:\n # Implement here\n\n def remove_training_data(id: str, **kwargs) -> bool:\n # Implement here\n\n\nclass MyVanna(MyCustomVectorDB, Mistral):\n def __init__(self, config=None):\n MyCustomVectorDB.__init__(self, config=config)\n Mistral.__init__(self, config={'api_key': MISTRAL_API_KEY, 'model': 'mistral-tiny'})\n\nvn = MyVanna()\n"}, {"id": "f2cc6c08-6215-5e88-9856-e88a96dbe9b3", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "4bb60e4c-1036-5c5d-84c6-11c9f2e9c8d1", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_sqlite('my-database.sqlite')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "068a891d-bbab-5462-9767-ebf7211fe423", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\ndf_ddl = vn.run_sql(\"SELECT type, sql FROM sqlite_master WHERE sql is not null\")\n\nfor ddl in df_ddl['sql'].to_list():\n vn.train(ddl=ddl)\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/sqlite-mistral-vannadb.ipynb b/notebooks/sqlite-mistral-vannadb.ipynb deleted file mode 100644 index fc65a432..00000000 --- a/notebooks/sqlite-mistral-vannadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "5c6445ea-8f7a-5824-b2df-adc2e1e7f405", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for SQLite using Mistral via Mistral API, Vanna Hosted Vector DB (Recommended)\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "cd81f971-231c-5588-ade6-ba27ec4cbd26", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "2aa4d769-b9da-5d9c-94b4-7e045e627441", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "22d0fc58-9374-5bda-9414-d80b35fecb42", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[mistralai]'"}, {"id": "88b7ebec-d4f9-53aa-8f06-7c27055d16b0", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.vannadb.vannadb_vector import VannaDB_VectorStore\nfrom vanna.mistral.mistral import Mistral\n"}, {"id": "2aa3c756-d1ad-5b3c-a161-5bad6f77d594", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(VannaDB_VectorStore, Mistral):\n def __init__(self, config=None):\n VannaDB_VectorStore.__init__(self, vanna_model=MY_VANNA_MODEL, vanna_api_key=MY_VANNA_API_KEY, config=config)\n Mistral.__init__(self, config={'api_key': MISTRAL_API_KEY, 'model': 'mistral-tiny'})\n\nvn = MyVanna()\n"}, {"id": "91cf6eb7-16d4-5547-bb3d-62f6a7c8aaf8", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "4bb60e4c-1036-5c5d-84c6-11c9f2e9c8d1", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_sqlite('my-database.sqlite')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "068a891d-bbab-5462-9767-ebf7211fe423", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\ndf_ddl = vn.run_sql(\"SELECT type, sql FROM sqlite_master WHERE sql is not null\")\n\nfor ddl in df_ddl['sql'].to_list():\n vn.train(ddl=ddl)\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/sqlite-openai-azure-chromadb.ipynb b/notebooks/sqlite-openai-azure-chromadb.ipynb deleted file mode 100644 index 5cf30d01..00000000 --- a/notebooks/sqlite-openai-azure-chromadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "262d99dc-b1f5-52a2-b3dd-c959896d40d0", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for SQLite using Azure OpenAI, ChromaDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "b988d8ae-969c-5d2d-9548-d79ab9566238", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "5fda8cf1-1b74-59c8-beb9-14efb0907167", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "d6e3ecc5-3c05-518b-8285-cf9dbf06ec58", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[chromadb,openai]'"}, {"id": "f6088c74-bfc7-5808-bd52-b2468267a3aa", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.openai.openai_chat import OpenAI_Chat\nfrom openai import AzureOpenAI\nfrom vanna.chromadb.chromadb_vector import ChromaDB_VectorStore\n"}, {"id": "895d74e6-b5e9-58f3-b58b-07c8e9d28707", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(ChromaDB_VectorStore, OpenAI_Chat):\n def __init__(self, config=None):\n ChromaDB_VectorStore.__init__(self, config=config)\n OpenAI_Chat.__init__(self, client=AzureOpenAI(...), config=config) # Make sure to put your AzureOpenAI client here\n\nvn = MyVanna(config={'model': 'gpt-4-...'})\n"}, {"id": "41fdf81c-3098-56bb-bd9d-8dec18b5936f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "4bb60e4c-1036-5c5d-84c6-11c9f2e9c8d1", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_sqlite('my-database.sqlite')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "068a891d-bbab-5462-9767-ebf7211fe423", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\ndf_ddl = vn.run_sql(\"SELECT type, sql FROM sqlite_master WHERE sql is not null\")\n\nfor ddl in df_ddl['sql'].to_list():\n vn.train(ddl=ddl)\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/sqlite-openai-azure-marqo.ipynb b/notebooks/sqlite-openai-azure-marqo.ipynb deleted file mode 100644 index 125c89b4..00000000 --- a/notebooks/sqlite-openai-azure-marqo.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "831c5414-60d7-548f-933c-a363ff7d1031", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for SQLite using Azure OpenAI, Marqo\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "2a2e13d1-9783-58bc-94aa-71e814b971a8", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "0245269a-3f34-545b-b7a1-adaa2bdb5d7e", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "3d31b251-dcb5-5c7d-b5da-b692698ecdfa", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[marqo,openai]'"}, {"id": "6873a728-88db-5cf5-8a57-6355069c8a61", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.openai.openai_chat import OpenAI_Chat\nfrom openai import AzureOpenAI\nfrom vanna.marqo.marqo import Marqo\n"}, {"id": "aa425412-56b4-5b29-8f25-d0bb982b7446", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(Marqo, OpenAI_Chat):\n def __init__(self, config=None):\n Marqo.__init__(self, config={'marqo_url': MARQO_URL, 'marqo_model': MARQO_MODEL})\n OpenAI_Chat.__init__(self, client=AzureOpenAI(...), config=config) # Make sure to put your AzureOpenAI client here\n\nvn = MyVanna(config={'model': 'gpt-4-...'})\n"}, {"id": "7c8437de-3e81-5f19-b8f8-792bfd142d84", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "4bb60e4c-1036-5c5d-84c6-11c9f2e9c8d1", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_sqlite('my-database.sqlite')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "068a891d-bbab-5462-9767-ebf7211fe423", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\ndf_ddl = vn.run_sql(\"SELECT type, sql FROM sqlite_master WHERE sql is not null\")\n\nfor ddl in df_ddl['sql'].to_list():\n vn.train(ddl=ddl)\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/sqlite-openai-azure-other-vectordb.ipynb b/notebooks/sqlite-openai-azure-other-vectordb.ipynb deleted file mode 100644 index bf86de41..00000000 --- a/notebooks/sqlite-openai-azure-other-vectordb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "48659c68-dbb3-5f89-a750-75a3bd1d4872", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for SQLite using Azure OpenAI, Other VectorDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "ab32bcb2-1993-56d5-886f-8262fde1de35", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "1f1b6446-b752-5a49-b398-ea551f8dd52b", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "925749d7-7c6c-5599-a063-ad2cad7b52ab", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[openai]'"}, {"id": "19782e02-3b88-533a-a9cd-f73a7d88e153", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.openai.openai_chat import OpenAI_Chat\nfrom openai import AzureOpenAI\nfrom vanna.base import VannaBase\n"}, {"id": "1a1f7fff-3055-51d2-a91d-bf03f4f94bc8", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\nclass MyCustomVectorDB(VannaBase):\n def add_ddl(self, ddl: str, **kwargs) -> str:\n # Implement here\n\n def add_documentation(self, doc: str, **kwargs) -> str:\n # Implement here\n\n def add_question_sql(self, question: str, sql: str, **kwargs) -> str:\n # Implement here\n\n def get_related_ddl(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_related_documentation(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_similar_question_sql(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_training_data(self, **kwargs) -> pd.DataFrame:\n # Implement here\n\n def remove_training_data(id: str, **kwargs) -> bool:\n # Implement here\n\n\nclass MyVanna(MyCustomVectorDB, OpenAI_Chat):\n def __init__(self, config=None):\n MyCustomVectorDB.__init__(self, config=config)\n OpenAI_Chat.__init__(self, client=AzureOpenAI(...), config=config) # Make sure to put your AzureOpenAI client here\n\nvn = MyVanna(config={'model': 'gpt-4-...'})\n"}, {"id": "09caf694-5f8f-5e79-be3a-391b8e3e2720", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "4bb60e4c-1036-5c5d-84c6-11c9f2e9c8d1", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_sqlite('my-database.sqlite')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "068a891d-bbab-5462-9767-ebf7211fe423", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\ndf_ddl = vn.run_sql(\"SELECT type, sql FROM sqlite_master WHERE sql is not null\")\n\nfor ddl in df_ddl['sql'].to_list():\n vn.train(ddl=ddl)\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/sqlite-openai-azure-vannadb.ipynb b/notebooks/sqlite-openai-azure-vannadb.ipynb deleted file mode 100644 index 13ca5244..00000000 --- a/notebooks/sqlite-openai-azure-vannadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "79b5f2a1-f4ac-5c48-9451-4d4c5e9bbb4d", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for SQLite using Azure OpenAI, Vanna Hosted Vector DB (Recommended)\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "09f17b31-ae67-5c56-a75e-86914502d751", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "fd291717-1477-5963-92eb-38f3d22c33c4", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "925749d7-7c6c-5599-a063-ad2cad7b52ab", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[openai]'"}, {"id": "031a7573-71e2-5c65-873c-124e3158003d", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.openai.openai_chat import OpenAI_Chat\nfrom openai import AzureOpenAI\nfrom vanna.vannadb.vannadb_vector import VannaDB_VectorStore\n"}, {"id": "9fd5a61a-c40c-5577-80bb-3c8fbf26dc21", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(VannaDB_VectorStore, OpenAI_Chat):\n def __init__(self, config=None):\n VannaDB_VectorStore.__init__(self, vanna_model=MY_VANNA_MODEL, vanna_api_key=MY_VANNA_API_KEY, config=config)\n OpenAI_Chat.__init__(self, client=AzureOpenAI(...), config=config) # Make sure to put your AzureOpenAI client here\n\nvn = MyVanna(config={'model': 'gpt-4-...'})\n"}, {"id": "e0faff99-18ff-52b9-9433-a131c19f9316", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "4bb60e4c-1036-5c5d-84c6-11c9f2e9c8d1", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_sqlite('my-database.sqlite')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "068a891d-bbab-5462-9767-ebf7211fe423", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\ndf_ddl = vn.run_sql(\"SELECT type, sql FROM sqlite_master WHERE sql is not null\")\n\nfor ddl in df_ddl['sql'].to_list():\n vn.train(ddl=ddl)\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/sqlite-openai-standard-chromadb.ipynb b/notebooks/sqlite-openai-standard-chromadb.ipynb deleted file mode 100644 index 960f8a7d..00000000 --- a/notebooks/sqlite-openai-standard-chromadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "af8cd30a-415d-5ac9-9511-853d099fca5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for SQLite using OpenAI, ChromaDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "110b678c-bd21-5651-9f10-6049f62e5edc", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "9de4d57f-8434-54b0-a7c1-93d21e068296", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "d6e3ecc5-3c05-518b-8285-cf9dbf06ec58", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[chromadb,openai]'"}, {"id": "93b5ab2b-834b-5b86-8d47-c9beda8b3544", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.openai.openai_chat import OpenAI_Chat\nfrom vanna.chromadb.chromadb_vector import ChromaDB_VectorStore\n"}, {"id": "28a8d8a1-669f-5f8b-82c4-73a0eb221d64", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(ChromaDB_VectorStore, OpenAI_Chat):\n def __init__(self, config=None):\n ChromaDB_VectorStore.__init__(self, config=config)\n OpenAI_Chat.__init__(self, config=config)\n\nvn = MyVanna(config={'api_key': 'sk-...', 'model': 'gpt-4-...'})\n"}, {"id": "52ed5f6d-9aac-5fb1-aab6-6c072216e984", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "4bb60e4c-1036-5c5d-84c6-11c9f2e9c8d1", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_sqlite('my-database.sqlite')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "068a891d-bbab-5462-9767-ebf7211fe423", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\ndf_ddl = vn.run_sql(\"SELECT type, sql FROM sqlite_master WHERE sql is not null\")\n\nfor ddl in df_ddl['sql'].to_list():\n vn.train(ddl=ddl)\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/sqlite-openai-standard-marqo.ipynb b/notebooks/sqlite-openai-standard-marqo.ipynb deleted file mode 100644 index f1c57684..00000000 --- a/notebooks/sqlite-openai-standard-marqo.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "1eaacb62-b6c9-5f78-9feb-8444240b5cbe", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for SQLite using OpenAI, Marqo\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "5d155d07-2d90-5dfc-b869-1ca6ba2259b9", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "08ce4bc7-9011-5067-b634-ae6f1ef24d7c", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "3d31b251-dcb5-5c7d-b5da-b692698ecdfa", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[marqo,openai]'"}, {"id": "dc8ae8d1-d08e-5a8c-a806-09ba465d7761", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.openai.openai_chat import OpenAI_Chat\nfrom vanna.marqo.marqo import Marqo\n"}, {"id": "3ce3c4db-08c1-5d0a-86df-2f7b35b82bc2", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(Marqo, OpenAI_Chat):\n def __init__(self, config=None):\n Marqo.__init__(self, config={'marqo_url': MARQO_URL, 'marqo_model': MARQO_MODEL})\n OpenAI_Chat.__init__(self, config=config)\n\nvn = MyVanna(config={'api_key': 'sk-...', 'model': 'gpt-4-...'})\n"}, {"id": "9298db71-48be-5778-a8d7-87c1859c5464", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "4bb60e4c-1036-5c5d-84c6-11c9f2e9c8d1", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_sqlite('my-database.sqlite')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "068a891d-bbab-5462-9767-ebf7211fe423", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\ndf_ddl = vn.run_sql(\"SELECT type, sql FROM sqlite_master WHERE sql is not null\")\n\nfor ddl in df_ddl['sql'].to_list():\n vn.train(ddl=ddl)\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/sqlite-openai-standard-other-vectordb.ipynb b/notebooks/sqlite-openai-standard-other-vectordb.ipynb deleted file mode 100644 index dedd0971..00000000 --- a/notebooks/sqlite-openai-standard-other-vectordb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "8fedd282-2590-569a-93ce-ab6c6a4fa48a", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for SQLite using OpenAI, Other VectorDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "2218e0a1-fa4e-56e9-9926-933c4a92043b", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "d90017bc-4501-5f30-8c57-142ae218be4e", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "925749d7-7c6c-5599-a063-ad2cad7b52ab", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[openai]'"}, {"id": "fe1b5686-8226-53d5-b42b-a29cdb088cad", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.openai.openai_chat import OpenAI_Chat\nfrom vanna.base import VannaBase\n"}, {"id": "45f49779-04b9-574f-b573-4f0afb619e7e", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\nclass MyCustomVectorDB(VannaBase):\n def add_ddl(self, ddl: str, **kwargs) -> str:\n # Implement here\n\n def add_documentation(self, doc: str, **kwargs) -> str:\n # Implement here\n\n def add_question_sql(self, question: str, sql: str, **kwargs) -> str:\n # Implement here\n\n def get_related_ddl(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_related_documentation(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_similar_question_sql(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_training_data(self, **kwargs) -> pd.DataFrame:\n # Implement here\n\n def remove_training_data(id: str, **kwargs) -> bool:\n # Implement here\n\n\nclass MyVanna(MyCustomVectorDB, OpenAI_Chat):\n def __init__(self, config=None):\n MyCustomVectorDB.__init__(self, config=config)\n OpenAI_Chat.__init__(self, config=config)\n\nvn = MyVanna(config={'api_key': 'sk-...', 'model': 'gpt-4-...'})\n"}, {"id": "4661f143-cd1e-54de-9ac6-c00cce1716fb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "4bb60e4c-1036-5c5d-84c6-11c9f2e9c8d1", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_sqlite('my-database.sqlite')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "068a891d-bbab-5462-9767-ebf7211fe423", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\ndf_ddl = vn.run_sql(\"SELECT type, sql FROM sqlite_master WHERE sql is not null\")\n\nfor ddl in df_ddl['sql'].to_list():\n vn.train(ddl=ddl)\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/sqlite-openai-standard-vannadb.ipynb b/notebooks/sqlite-openai-standard-vannadb.ipynb deleted file mode 100644 index 880163d8..00000000 --- a/notebooks/sqlite-openai-standard-vannadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "078f7efe-c23e-5d4c-98ee-a1d3e014992f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for SQLite using OpenAI, Vanna Hosted Vector DB (Recommended)\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "3b9fc8e7-75e3-5625-b12b-40759de02591", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "fdaba019-3968-51d4-89c1-cdb4d809ea77", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "925749d7-7c6c-5599-a063-ad2cad7b52ab", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[openai]'"}, {"id": "4ff1aaee-1154-5859-b8c3-93ac3c31595d", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.openai.openai_chat import OpenAI_Chat\nfrom vanna.vannadb.vannadb_vector import VannaDB_VectorStore\n"}, {"id": "1fc13242-ce0f-53e5-832e-ff33197d2eef", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(VannaDB_VectorStore, OpenAI_Chat):\n def __init__(self, config=None):\n VannaDB_VectorStore.__init__(self, vanna_model=MY_VANNA_MODEL, vanna_api_key=MY_VANNA_API_KEY, config=config)\n OpenAI_Chat.__init__(self, config=config)\n\nvn = MyVanna(config={'api_key': 'sk-...', 'model': 'gpt-4-...'})\n"}, {"id": "e3fe733c-d731-5482-b8ec-b63bc608929f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "4bb60e4c-1036-5c5d-84c6-11c9f2e9c8d1", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_sqlite('my-database.sqlite')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "068a891d-bbab-5462-9767-ebf7211fe423", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\ndf_ddl = vn.run_sql(\"SELECT type, sql FROM sqlite_master WHERE sql is not null\")\n\nfor ddl in df_ddl['sql'].to_list():\n vn.train(ddl=ddl)\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/sqlite-openai-vanna-chromadb.ipynb b/notebooks/sqlite-openai-vanna-chromadb.ipynb deleted file mode 100644 index 025282b4..00000000 --- a/notebooks/sqlite-openai-vanna-chromadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "9d6519a8-e544-5523-82ce-97784be01264", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for SQLite using OpenAI via Vanna.AI (Recommended), ChromaDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "96bb2afc-e019-52bb-b5ae-575a74d42bd3", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "f96244dc-c42f-5cb8-becc-d03958136056", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "1a0086e2-0a57-5091-accd-456e4d3e4ad7", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[chromadb]'"}, {"id": "c1e5ad61-57c7-5b64-920b-6f5b435df5e3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.chromadb.chromadb_vector import ChromaDB_VectorStore\n"}, {"id": "3225927e-ae19-5159-a112-8dac5a3cda22", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(ChromaDB_VectorStore):\n def __init__(self, config=None):\n ChromaDB_VectorStore.__init__(self, config=config)\n\nvn = MyVanna()\n"}, {"id": "fa16f45e-5782-53b8-9ed7-77dc6b8d7776", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "4bb60e4c-1036-5c5d-84c6-11c9f2e9c8d1", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_sqlite('my-database.sqlite')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "068a891d-bbab-5462-9767-ebf7211fe423", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\ndf_ddl = vn.run_sql(\"SELECT type, sql FROM sqlite_master WHERE sql is not null\")\n\nfor ddl in df_ddl['sql'].to_list():\n vn.train(ddl=ddl)\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/sqlite-openai-vanna-marqo.ipynb b/notebooks/sqlite-openai-vanna-marqo.ipynb deleted file mode 100644 index e2614c8e..00000000 --- a/notebooks/sqlite-openai-vanna-marqo.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "859cb351-0751-5448-a269-505618a2bc89", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for SQLite using OpenAI via Vanna.AI (Recommended), Marqo\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "af96ca79-ccab-57c3-a8ef-d222d781d4c1", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "d1ab7307-853f-5bf8-a832-452bba751f14", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "30f0eccb-7684-5642-98ae-31bee8662133", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[marqo]'"}, {"id": "a1877af9-e758-52a4-8f21-3d7b2e0c904f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.marqo.marqo import Marqo\n"}, {"id": "b0e1d67a-58fd-5bcd-b2a2-a13317fda343", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\n\nclass MyVanna(Marqo):\n def __init__(self, config=None):\n Marqo.__init__(self, config={'marqo_url': MARQO_URL, 'marqo_model': MARQO_MODEL})\n\nvn = MyVanna()\n"}, {"id": "81bacbdb-dc39-5ae8-9ae2-1fc2b2e2380a", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "4bb60e4c-1036-5c5d-84c6-11c9f2e9c8d1", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_sqlite('my-database.sqlite')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "068a891d-bbab-5462-9767-ebf7211fe423", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\ndf_ddl = vn.run_sql(\"SELECT type, sql FROM sqlite_master WHERE sql is not null\")\n\nfor ddl in df_ddl['sql'].to_list():\n vn.train(ddl=ddl)\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/sqlite-openai-vanna-other-vectordb.ipynb b/notebooks/sqlite-openai-vanna-other-vectordb.ipynb deleted file mode 100644 index 8183cd3b..00000000 --- a/notebooks/sqlite-openai-vanna-other-vectordb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "506bdbf0-9097-5ea8-a3ac-fbbee8ce189c", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for SQLite using OpenAI via Vanna.AI (Recommended), Other VectorDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "d0d5c54c-adbb-572b-a2e5-bd708e7d6392", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "5d5bf8e6-1051-5524-a72a-ed51f635cd9a", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "b9b77362-c049-5500-b502-08811fcd4dce", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install vanna"}, {"id": "35e4b991-0e84-561d-8c1e-979bb4252ec9", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.base import VannaBase\n"}, {"id": "57fbc78c-6a54-5f06-98d8-69f315a380b4", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\nclass MyCustomVectorDB(VannaBase):\n def add_ddl(self, ddl: str, **kwargs) -> str:\n # Implement here\n\n def add_documentation(self, doc: str, **kwargs) -> str:\n # Implement here\n\n def add_question_sql(self, question: str, sql: str, **kwargs) -> str:\n # Implement here\n\n def get_related_ddl(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_related_documentation(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_similar_question_sql(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_training_data(self, **kwargs) -> pd.DataFrame:\n # Implement here\n\n def remove_training_data(id: str, **kwargs) -> bool:\n # Implement here\n\n\nclass MyVanna(MyCustomVectorDB):\n def __init__(self, config=None):\n MyCustomVectorDB.__init__(self, config=config)\n\nvn = MyVanna()\n"}, {"id": "98da58c3-ed58-51f7-ad99-5c33335bf1bf", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "4bb60e4c-1036-5c5d-84c6-11c9f2e9c8d1", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_sqlite('my-database.sqlite')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "068a891d-bbab-5462-9767-ebf7211fe423", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\ndf_ddl = vn.run_sql(\"SELECT type, sql FROM sqlite_master WHERE sql is not null\")\n\nfor ddl in df_ddl['sql'].to_list():\n vn.train(ddl=ddl)\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/sqlite-openai-vanna-vannadb.ipynb b/notebooks/sqlite-openai-vanna-vannadb.ipynb deleted file mode 100644 index 75641d28..00000000 --- a/notebooks/sqlite-openai-vanna-vannadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "3b9016b5-2bfd-5bd2-98e7-8ba4a9dec1be", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for SQLite using OpenAI via Vanna.AI (Recommended), Vanna Hosted Vector DB (Recommended)\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "e5b1e80e-8db4-5085-8d4f-6e34ca21d45e", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "fdaba019-3968-51d4-89c1-cdb4d809ea77", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "b9b77362-c049-5500-b502-08811fcd4dce", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install vanna"}, {"id": "6160c274-caf4-537e-9a02-f6a1d7022a2c", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "import vanna\nfrom vanna.remote import VannaDefault"}, {"id": "cc6152fc-02df-5490-9920-896b5565b3d0", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "api_key = vanna.get_api_key('my-email@example.com')\n\nvanna_model_name = # Put a unique name here\nvn = VannaDefault(model=vanna_model_name, api_key=api_key)\n"}, {"id": "1dc0b92f-ba37-55af-87a1-82e88fb6f8b9", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "4bb60e4c-1036-5c5d-84c6-11c9f2e9c8d1", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_sqlite('my-database.sqlite')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "068a891d-bbab-5462-9767-ebf7211fe423", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\ndf_ddl = vn.run_sql(\"SELECT type, sql FROM sqlite_master WHERE sql is not null\")\n\nfor ddl in df_ddl['sql'].to_list():\n vn.train(ddl=ddl)\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/sqlite-other-llm-chromadb.ipynb b/notebooks/sqlite-other-llm-chromadb.ipynb deleted file mode 100644 index 2a98dc90..00000000 --- a/notebooks/sqlite-other-llm-chromadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "d3c0d01c-97e4-50e9-8e05-32bbed37f5d3", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for SQLite using Other LLM, ChromaDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "a3b250e1-ea89-548a-ac9d-73350818add5", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "8e191684-d134-527f-b286-03f67c8f961a", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "1a0086e2-0a57-5091-accd-456e4d3e4ad7", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[chromadb]'"}, {"id": "a70195e6-7c1f-519f-8413-4ad4e6b3570d", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.base import VannaBase\nfrom vanna.chromadb.chromadb_vector import ChromaDB_VectorStore\n"}, {"id": "ad2c6517-9727-56fb-befe-a4108859aa3b", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\nclass MyCustomLLM(VannaBase):\n def __init__(self, config=None):\n pass\n\n def generate_plotly_code(self, question: str = None, sql: str = None, df_metadata: str = None, **kwargs) -> str:\n # Implement here\n\n def generate_question(self, sql: str, **kwargs) -> str:\n # Implement here\n \n def get_followup_questions_prompt(self, question: str, question_sql_list: list, ddl_list: list, doc_list: list, **kwargs):\n # Implement here\n \n def get_sql_prompt(self, question: str, question_sql_list: list, ddl_list: list, doc_list: list, **kwargs):\n # Implement here\n\n def submit_prompt(self, prompt, **kwargs) -> str:\n # Implement here\n \n\nclass MyVanna(ChromaDB_VectorStore, MyCustomLLM):\n def __init__(self, config=None):\n ChromaDB_VectorStore.__init__(self, config=config)\n MyCustomLLM.__init__(self, config=config)\n\nvn = MyVanna()\n"}, {"id": "3b731d8f-2b1e-5467-bedf-f49e867a5675", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "4bb60e4c-1036-5c5d-84c6-11c9f2e9c8d1", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_sqlite('my-database.sqlite')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "068a891d-bbab-5462-9767-ebf7211fe423", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\ndf_ddl = vn.run_sql(\"SELECT type, sql FROM sqlite_master WHERE sql is not null\")\n\nfor ddl in df_ddl['sql'].to_list():\n vn.train(ddl=ddl)\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/sqlite-other-llm-marqo.ipynb b/notebooks/sqlite-other-llm-marqo.ipynb deleted file mode 100644 index 4bdcfd90..00000000 --- a/notebooks/sqlite-other-llm-marqo.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "5a3d07b2-2583-51d2-a8c1-c0321bfc439b", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for SQLite using Other LLM, Marqo\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "98059112-2f3f-5c56-b579-836d1282aaec", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "7e07cffc-16a2-53f0-933d-44332ed398d2", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "30f0eccb-7684-5642-98ae-31bee8662133", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install 'vanna[marqo]'"}, {"id": "2e26545c-6029-5c62-b146-105086c10f6d", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.base import VannaBase\nfrom vanna.marqo.marqo import Marqo\n"}, {"id": "c1812db9-f2e2-5e21-98c1-d00397d25f65", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\nclass MyCustomLLM(VannaBase):\n def __init__(self, config=None):\n pass\n\n def generate_plotly_code(self, question: str = None, sql: str = None, df_metadata: str = None, **kwargs) -> str:\n # Implement here\n\n def generate_question(self, sql: str, **kwargs) -> str:\n # Implement here\n \n def get_followup_questions_prompt(self, question: str, question_sql_list: list, ddl_list: list, doc_list: list, **kwargs):\n # Implement here\n \n def get_sql_prompt(self, question: str, question_sql_list: list, ddl_list: list, doc_list: list, **kwargs):\n # Implement here\n\n def submit_prompt(self, prompt, **kwargs) -> str:\n # Implement here\n \n\nclass MyVanna(Marqo, MyCustomLLM):\n def __init__(self, config=None):\n Marqo.__init__(self, config={'marqo_url': MARQO_URL, 'marqo_model': MARQO_MODEL})\n MyCustomLLM.__init__(self, config=config)\n\nvn = MyVanna()\n"}, {"id": "e3f0e55b-d01b-503f-86ac-8584cc694ce2", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "4bb60e4c-1036-5c5d-84c6-11c9f2e9c8d1", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_sqlite('my-database.sqlite')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "068a891d-bbab-5462-9767-ebf7211fe423", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\ndf_ddl = vn.run_sql(\"SELECT type, sql FROM sqlite_master WHERE sql is not null\")\n\nfor ddl in df_ddl['sql'].to_list():\n vn.train(ddl=ddl)\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/sqlite-other-llm-other-vectordb.ipynb b/notebooks/sqlite-other-llm-other-vectordb.ipynb deleted file mode 100644 index 7253864c..00000000 --- a/notebooks/sqlite-other-llm-other-vectordb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "e7a07123-59ae-5e9d-9fc4-8606541246e6", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for SQLite using Other LLM, Other VectorDB\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "f8bf2a61-7dfe-598e-8f6b-d29dc7b440ea", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "51147f2e-bdf1-5d9e-acf5-f079a111d323", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "b9b77362-c049-5500-b502-08811fcd4dce", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install vanna"}, {"id": "35e4b991-0e84-561d-8c1e-979bb4252ec9", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.base import VannaBase\n"}, {"id": "2ff3ca97-cb35-56c7-9263-a3613e4ce005", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\nclass MyCustomVectorDB(VannaBase):\n def add_ddl(self, ddl: str, **kwargs) -> str:\n # Implement here\n\n def add_documentation(self, doc: str, **kwargs) -> str:\n # Implement here\n\n def add_question_sql(self, question: str, sql: str, **kwargs) -> str:\n # Implement here\n\n def get_related_ddl(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_related_documentation(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_similar_question_sql(self, question: str, **kwargs) -> list:\n # Implement here\n\n def get_training_data(self, **kwargs) -> pd.DataFrame:\n # Implement here\n\n def remove_training_data(id: str, **kwargs) -> bool:\n # Implement here\n\nclass MyCustomLLM(VannaBase):\n def __init__(self, config=None):\n pass\n\n def generate_plotly_code(self, question: str = None, sql: str = None, df_metadata: str = None, **kwargs) -> str:\n # Implement here\n\n def generate_question(self, sql: str, **kwargs) -> str:\n # Implement here\n \n def get_followup_questions_prompt(self, question: str, question_sql_list: list, ddl_list: list, doc_list: list, **kwargs):\n # Implement here\n \n def get_sql_prompt(self, question: str, question_sql_list: list, ddl_list: list, doc_list: list, **kwargs):\n # Implement here\n\n def submit_prompt(self, prompt, **kwargs) -> str:\n # Implement here\n \n\nclass MyVanna(MyCustomVectorDB, MyCustomLLM):\n def __init__(self, config=None):\n MyCustomVectorDB.__init__(self, config=config)\n MyCustomLLM.__init__(self, config=config)\n\nvn = MyVanna()\n"}, {"id": "516f3824-ef08-5d81-9c2f-2234f4de4451", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "4bb60e4c-1036-5c5d-84c6-11c9f2e9c8d1", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_sqlite('my-database.sqlite')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "068a891d-bbab-5462-9767-ebf7211fe423", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\ndf_ddl = vn.run_sql(\"SELECT type, sql FROM sqlite_master WHERE sql is not null\")\n\nfor ddl in df_ddl['sql'].to_list():\n vn.train(ddl=ddl)\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/sqlite-other-llm-vannadb.ipynb b/notebooks/sqlite-other-llm-vannadb.ipynb deleted file mode 100644 index 7857555a..00000000 --- a/notebooks/sqlite-other-llm-vannadb.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"cells": [{"id": "22fc9194-d307-554e-84c7-5c61665bd738", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generating SQL for SQLite using Other LLM, Vanna Hosted Vector DB (Recommended)\nThis notebook runs through the process of using the `vanna` Python package to generate SQL using AI (RAG + LLMs) including connecting to a database and training. If you're not ready to train on your own database, you can still try it using a sample [SQLite database](getting-started.html)."}, {"id": "ba3c203c-27c0-589c-82e4-c1411f3af28d", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which LLM do you want to use?

\n\n "}, {"id": "1d2cf467-7d3c-5bd4-838e-9d462a6e64cb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Where do you want to store the 'training' data?

\n\n "}, {"id": "ee059407-58ac-50fa-843a-7b876328df13", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Setup"}, {"id": "b9b77362-c049-5500-b502-08811fcd4dce", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%pip install vanna"}, {"id": "bfe31937-16c5-5ecb-9aea-0cc1b2aec53c", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.vannadb.vannadb_vector import VannaDB_VectorStore\nfrom vanna.base import VannaBase\n"}, {"id": "8ac7e323-be70-5fee-9d96-69868af0ff99", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n\nclass MyCustomLLM(VannaBase):\n def __init__(self, config=None):\n pass\n\n def generate_plotly_code(self, question: str = None, sql: str = None, df_metadata: str = None, **kwargs) -> str:\n # Implement here\n\n def generate_question(self, sql: str, **kwargs) -> str:\n # Implement here\n \n def get_followup_questions_prompt(self, question: str, question_sql_list: list, ddl_list: list, doc_list: list, **kwargs):\n # Implement here\n \n def get_sql_prompt(self, question: str, question_sql_list: list, ddl_list: list, doc_list: list, **kwargs):\n # Implement here\n\n def submit_prompt(self, prompt, **kwargs) -> str:\n # Implement here\n \n\nclass MyVanna(VannaDB_VectorStore, MyCustomLLM):\n def __init__(self, config=None):\n VannaDB_VectorStore.__init__(self, vanna_model=MY_VANNA_MODEL, vanna_api_key=MY_VANNA_API_KEY, config=config)\n MyCustomLLM.__init__(self, config=config)\n\nvn = MyVanna()\n"}, {"id": "6eeb848a-6db9-5077-b922-cb4b00b10e0f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n

Which database do you want to query?

\n\n "}, {"id": "4bb60e4c-1036-5c5d-84c6-11c9f2e9c8d1", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.connect_to_sqlite('my-database.sqlite')"}, {"id": "f06c0e89-83f7-5ad1-8f6e-a64cf5bd8e60", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Training\nYou only need to train once. Do not train again unless you want to add more training data."}, {"id": "068a891d-bbab-5462-9767-ebf7211fe423", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\ndf_ddl = vn.run_sql(\"SELECT type, sql FROM sqlite_master WHERE sql is not null\")\n\nfor ddl in df_ddl['sql'].to_list():\n vn.train(ddl=ddl)\n"}, {"id": "7c421f88-42ea-567c-8581-3dcac96c36a3", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "\n# The following are methods for adding training data. Make sure you modify the examples to match your database.\n\n# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships\nvn.train(ddl=\"\"\"\n CREATE TABLE IF NOT EXISTS my-table (\n id INT PRIMARY KEY,\n name VARCHAR(100),\n age INT\n )\n\"\"\")\n\n# Sometimes you may want to add documentation about your business terminology or definitions.\nvn.train(documentation=\"Our business defines OTIF score as the percentage of orders that are delivered on time and in full\")\n\n# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.\nvn.train(sql=\"SELECT * FROM my-table WHERE name = 'John Doe'\")\n"}, {"id": "59fcb3b1-4434-583d-82be-ed8e9b04d699", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# At any time you can inspect what training data the package is able to reference\ntraining_data = vn.get_training_data()\ntraining_data"}, {"id": "0dd237e6-ab36-5dd4-9234-e2d25168d50f", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# You can remove training data if there's obsolete/incorrect information. \nvn.remove_training_data(id='1-ddl')"}, {"id": "bf2fc121-a3ab-5a2e-95b0-383271e82d5f", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Asking the AI\nWhenever you ask a new question, it will find the 10 most relevant pieces of training data and use it as part of the LLM prompt to generate the SQL."}, {"id": "edb6679e-a102-5efc-b890-81babca8f500", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "vn.ask(question=...)"}, {"id": "8c49dd68-3bc6-5098-93f1-2d4d8617badb", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Launch the User Interface\n![vanna-flask](https://vanna.ai/blog/img/vanna-flask.gif)"}, {"id": "b87d140b-ef56-5795-b489-46bb11d01459", "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from vanna.flask import VannaFlaskApp\napp = VannaFlaskApp(vn)\napp.run()"}, {"id": "29793859-c3c8-50da-994a-c8f6348d6730", "cell_type": "markdown", "execution_count": null, "metadata": {}, "outputs": [], "source": "## Next Steps\nUsing Vanna via Jupyter notebooks is great for getting started but check out additional customizable interfaces like the \n- [Streamlit app](https://github.com/vanna-ai/vanna-streamlit)\n- [Flask app](https://github.com/vanna-ai/vanna-flask)\n- [Slackbot](https://github.com/vanna-ai/vanna-slack)\n"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/notebooks/streamlit.ipynb b/notebooks/streamlit.ipynb deleted file mode 100644 index 5f6dc409..00000000 --- a/notebooks/streamlit.ipynb +++ /dev/null @@ -1,30 +0,0 @@ -{ - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [] - } - ], - "metadata": { - "language_info": { - "name": "python" - }, - "orig_nbformat": 4 - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/notebooks/vn-ask.ipynb b/notebooks/vn-ask.ipynb deleted file mode 100644 index 618aa3b6..00000000 --- a/notebooks/vn-ask.ipynb +++ /dev/null @@ -1,572 +0,0 @@ -{ - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "![Vanna AI](https://img.vanna.ai/vanna-ask.svg)\n", - "\n", - "The following notebook goes through the process of asking questions from your data using Vanna AI. Here we use a demo model that is pre-trained on the [TPC-H dataset](https://docs.snowflake.com/en/user-guide/sample-data-tpch.html) that is available in Snowflake.\n", - "\n", - "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/vanna-ai/vanna-py/blob/main/notebooks/vn-ask.ipynb)\n", - "\n", - "[![Open in GitHub](https://img.vanna.ai/github.svg)](https://github.com/vanna-ai/vanna-py/blob/main/notebooks/vn-ask.ipynb)\n", - "\n", - "# Install Vanna\n", - "First we install Vanna from [PyPI](https://pypi.org/project/vanna/) and import it.\n", - "Here, we'll also install the Snowflake connector. If you're using a different database, you'll need to install the appropriate connector." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%pip install vanna\n", - "%pip install snowflake-connector-python" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import vanna as vn\n", - "import snowflake.connector" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Login\n", - "Creating a login and getting an API key is as easy as entering your email (after you run this cell) and entering the code we send to you. Check your Spam folder if you don't see the code." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "api_key = vn.get_api_key('my-email@example.com')\n", - "vn.set_api_key(api_key)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Set your Model\n", - "You need to choose a globally unique model name. Try using your company name or another unique string. All data from models are isolated - there's no leakage." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "vn.set_model('tpc') # Enter your model name here. This is a globally unique identifier for your model." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Set Database Connection\n", - "These details are only referenced within your notebook. These database credentials are never sent to Vanna's severs." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "vn.connect_to_snowflake(account='my-account', username='my-username', password='my-password', database='my-database')" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Get Results\n", - "This gets the SQL, gets the dataframe, and prints them both. Note that we use your connection string to execute the SQL on your warehouse from your local instance. Your connection nor your data gets sent to Vanna's servers. For more info on how Vanna works, [see this post](https://medium.com/vanna-ai/how-vanna-works-how-to-train-it-data-security-8d8f2008042)." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "SELECT c.c_name as customer_name,\n", - " sum(l.l_extendedprice * (1 - l.l_discount)) as total_sales\n", - "FROM snowflake_sample_data.tpch_sf1.lineitem l join snowflake_sample_data.tpch_sf1.orders o\n", - " ON l.l_orderkey = o.o_orderkey join snowflake_sample_data.tpch_sf1.customer c\n", - " ON o.o_custkey = c.c_custkey\n", - "GROUP BY customer_name\n", - "ORDER BY total_sales desc limit 10;\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CUSTOMER_NAMETOTAL_SALES
0Customer#0001435006757566.0218
1Customer#0000952576294115.3340
2Customer#0000871156184649.5176
3Customer#0001311136080943.8305
4Customer#0001343806075141.9635
5Customer#0001038346059770.3232
6Customer#0000696826057779.0348
7Customer#0001020226039653.6335
8Customer#0000985876027021.5855
9Customer#0000646605905659.6159
\n", - "
" - ], - "text/plain": [ - " CUSTOMER_NAME TOTAL_SALES\n", - "0 Customer#000143500 6757566.0218\n", - "1 Customer#000095257 6294115.3340\n", - "2 Customer#000087115 6184649.5176\n", - "3 Customer#000131113 6080943.8305\n", - "4 Customer#000134380 6075141.9635\n", - "5 Customer#000103834 6059770.3232\n", - "6 Customer#000069682 6057779.0348\n", - "7 Customer#000102022 6039653.6335\n", - "8 Customer#000098587 6027021.5855\n", - "9 Customer#000064660 5905659.6159" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABXgAAAPoCAYAAABkvZZOAAAgAElEQVR4XuzdCbhdZXU38PeGhCkBjFQwhEEkYDDMkwIODIKzMn1O/epsxaEtKKKCUkBwaPtZAcU64QBUxRapiopigCLzDEUjg4wqSqGEECQkJN9zjuVK4ObeG961cve++5fn6fPQe/f5n3f/1sblWj09GZg6deqS4g8BAgQIECBAgAABAgQIECBAgAABAgQItE5gwIK3dTVzYAIECBAgQIAAAQIECBAgQIAAAQIECPQFLHg9CAQIECBAgAABAgQIECBAgAABAgQIEGipgAVvSwvn2AQIECBAgAABAgQIECBAgAABAgQIELDg9QwQIECAAAECBAgQIECAAAECBAgQIECgpQIWvC0tnGMTIECAAAECBAgQIECAAAECBAgQIEDAgtczQIAAAQIECBAgQIAAAQIECBAgQIAAgZYKWPC2tHCOTYAAAQIECBAgQIAAAQIECBAgQIAAAQtezwABAgQIECBAgAABAgQIECBAgAABAgRaKmDB29LCOTYBAgQIECBAgAABAgQIECBAgAABAgQseD0DBAgQIECAAAECBAgQIECAAAECBAgQaKmABW9LC+fYBAgQIECAAAECBAgQIECAAAECBAgQsOD1DBAgQIAAAQIECBAgQIAAAQIECBAgQKClAha8LS2cYxMgQIAAAQIECBAgQIAAAQIECBAgQMCC1zNAgAABAgQIECBAgAABAgQIECBAgACBlgpY8La0cI5NgAABAgQIECBAgAABAgQIECBAgAABC17PAAECBAgQIECAAAECBAgQIECAAAECBFoqYMHb0sI5NgECBAgQIECAAAECBAgQIECAAAECBCx4PQMECBAgQIAAAQIECBAgQIAAAQIECBBoqYAFb0sL59gECBAgQIAAAQIECBAgQIAAAQIECBCw4PUMECBAgAABAgQIECBAgAABAgQIECBAoKUCFrwtLZxjEyBAgAABAgQIECBAgAABAgQIECBAwILXM0CAAAECBAgQIECAAAECBAgQIECAAIGWCljwtrRwjk2AAAECBAgQIECAAAECBAgQIECAAAELXs8AAQIECBAgQIAAAQIECBAgQIAAAQIEWipgwdvSwjk2AQIECBAgQIAAAQIECBAgQIAAAQIELHg9AwQIECBAgAABAgQIECBAgAABAgQIEGipgAVvSwvn2AQIECBAgAABAgQIECBAgAABAgQIELDg9QwQIECAAAECBAgQIECAAAECBAgQIECgpQIWvC0tnGMTIECAAAECBAgQIECAAAECBAgQIEDAgtczQIAAAQIECBAgQIAAAQIECBAgQIAAgZYKWPC2tHCOTYAAAQIECBAgQIAAAQIECBAgQIAAAQtezwABAgQIECBAgAABAgQIECBAgAABAgRaKmDB29LCOTYBAgQIECBAgAABAgQIECBAgAABAgQseD0DBAgQIECAAAECBAgQIECAAAECBAgQaKmABW9LC+fYBAgQIECAAAECBAgQIECAAAECBAgQsOD1DBAgQIAAAQIECBAgQIAAAQIECBAgQKClAha8LS2cYxMgQIAAAQIECBAgQIAAAQIECBAgQMCC1zNAgAABAgQIECBAgAABAgQIECBAgACBlgpY8La0cI5NgAABAgQIECBAgAABAgQIECBAgAABC17PAAECBAgQIECAAAECBAgQIECAAAECBFoqYMHb0sI5NgECBAgQIECAAAECBAgQIECAAAECBCx4PQMECBAgQIAAAQIECBAgQIAAAQIECBBoqYAFb0sL59gECBAgQIAAAQIECBAgQIAAAQIECBCw4PUMECBAgAABAgQIECBAgAABAgQIECBAoKUCFrwtLZxjEyBAgAABAgQIECBAgAABAgQIECBAwILXM0CAAAECBAgQIECAAAECBAgQIECAAIGWCljwtrRwjk2AAAECBAgQIECAAAECBAgQIECAAAELXs8AAQIECBAgQIAAAQIECBAgQIAAAQIEWipgwdvSwjk2AQIECBAgQIAAAQIECBAgQIAAAQIELHg9AwQIECBAgAABAgQIECBAgAABAgQIEGipgAVvSwvn2AQIECBAgAABAgQIECBAgAABAgQIELDg9QwQIECAAAECBAgQIECAAAECBAgQIECgpQIWvC0tnGMTIECAAAECBAgQIECAAAECBAgQIEDAgtczQIAAAQIECBAgQIAAAQIECBAgQIAAgZYKWPC2tHCOTYAAAQIECBAgQIAAAQIECBAgQIAAAQtezwABAgQIECBAgAABAgQIECBAgAABAgRaKmDB29LCOTYBAgQIECBAgAABAgQIECBAgAABAgQseD0DBAgQIECAAAECBAgQIECAAAECBAgQaKmABW9LC+fYBAgQIECAAAECBAgQIECAAAECBAgQsOD1DBAgQIAAAQIECBAgQIAAAQIECBAgQKClAha8LS2cYxMgQIAAAQIECBAgQIAAAQIECBAgQMCC1zNAgAABAgQIECBAgAABAgQIECBAgACBlgpY8La0cI5NgAABAgQIECBAgAABAgQIECBAgAABC17PAAECBAgQIECAAAECBAgQIECAAAECBFoqYMHb0sI5NgECBAgQIECAAAECBAgQIECAAAECBCx4PQMECBAgQIAAAQIECBAgQIAAAQIECBBoqYAFb0sL59gECBAgQIAAAQIECBAgQIAAAQIECBCw4PUMECBAgAABAgQIECBAgAABAgQIECBAoKUCFrwtLZxjEyBAgAABAgQIECBAgAABAgQIECBAwILXM0CAAAECBAgQIECAAAECBAgQIECAAIGWCljwtrRwjk2AAAECBAgQIECAAAECBAgQIECAAAELXs8AAQIECBAgQIAAAQIECBAgQIAAAQIEWipgwdvSwjk2AQIECBAgQIAAAQIECBAgQIAAAQIELHg9AwQIECBAgAABAgQIECBAgAABAgQIEGipgAVvSwvn2AQIECBAgAABAgQIECBAgAABAgQIELDg9QwQIECAAAECBAgQIECAAAECBAgQIECgpQIWvC0tnGMTIECAAAECBAgQIECAAAECBAgQIEDAgtczQIAAAQIECBAgQIAAAQIECBAgQIAAgZYKWPC2tHCOTYAAAQIECBAgQIAAAQIECBAgQIAAAQtezwABAgQIECBAgAABAgQIECBAgAABAgRaKmDB29LCOTYBAgQIECBAgAABAgQIECBAgAABAgQseD0DBAgQIECAAAECBAgQIECAAAECBAgQaKmABW9LC+fYBAgQIECAAAECBAgQIECAAAECBAgQsOD1DBAgQIAAAQIECBAgQIAAAQIECBAgQKClAha8LS2cYxMgQIAAAQIECBAgQIAAAQIECBAgQMCC1zNAgAABAgQIECBAgAABAgQIECBAgACBlgpY8La0cI5NgAABAgQIECBAgAABAgQIECBAgAABC17PAAECBAgQIECAAAECBAgQIECAAAECBFoqYMHb0sI5NgECBAgQIECAAAECBAgQIECAAAECBCx4PQMECBAgQIAAAQIECBAgQIAAAQIECBBoqYAFb0sL59gECBAgQIAAAQIECBAgQIAAAQIECBCw4PUMECBAgAABAgQIECBAgAABAgQIECBAoKUCFrwtLZxjEyBAgAABAgQIECBAgAABAgQIECBAwILXM0CAAAECBAgQIECAAAECBAgQIECAAIGWCljwtrRwjk2AAAECBAgQIECAAAECBAgQIECAAAELXs8AAQIECBAgQIAAAQIECBAgQIAAAQIEWipgwdvSwjk2AQIECBAgQIAAAQIECBAgQIAAAQIELHg9AwQIECBAgAABAgQIECBAgAABAgQIEGipgAVvSwvn2AQIECBAgAABAgQIECBAgAABAgQIELDg9QwQIECAAAECBAgQIECAAAECBAgQIECgpQIWvC0tnGMTIECAAAECBAgQIECAAAECBAgQIEDAgtczQIAAAQIECBAgQIAAAQIECBAgQIAAgZYKWPC2tHCOTYAAAQIECBAgQIAAAQIECBAgQIAAAQtezwABAgQIECBAgAABAgQIECBAgAABAgRaKmDB29LCOTYBAgQIECBAgAABAgQIECBAgAABAgQseD0DBAgQIECAAAECBAgQIECAAAECBAgQaKmABW9LC+fYBAgQIECAAAECBAgQIECAAAECBAgQsOD1DBAgQIAAAQIECBAgQIAAAQIECBAgQKClAha8LS2cYxMgQIAAAQIECBAgQIAAAQIECBAgQMCC1zNAgAABAgQIECBAgAABAgQIECBAgACBlgpY8La0cI5NgAABAgQIECBAgAABAgQIECBAgAABC17PAAECBAgQIECAAAECBAgQIECAAAECBFoqYMHb0sI5NgECBAgQIECAAAECBAgQIECAAAECBCx4PQMECBAgQIAAAQIECBAgQIAAAQIECBBoqYAFb0sL59gECBAgQIAAAQIECBAgQIAAAQIECBCw4PUMECBAgAABAgQIECBAgAABAgQIECBAoKUCFrwtLZxjEyBAgAABAgQIECBAgAABAgQIECBAwILXM0CAAAECBAgQIECAAAECBAgQIECAAIGWCljwtrRwjk2AAAECBAgQIECAAAECBAgQIECAAAELXs8AAQIECBAgQIAAAQIECBAgQIAAAQIEWipgwdvSwj3ZY//wrJ+VdZ62zqhffsLx/1y+/rWT+tdPnjy5nHf+xYOvnT377HLoIQcvM2tgYKCcc94FZcqUNfrX3HrrLeWA/V416vd2IQECBAgQIECAAAECBAgQIECAAAECwwtY8HbsCfnVTbeVVVddddR3/bWvfqX8/UcP61//lKlTyzXXzRl87ZIlS8p228wq995zz5B57zzwPeWwjxwx+Lu5c+eWrWZtNur3diEBAgQIECBAgAABAgQIECBAgAABAha8noHHCHz166eUdZ8+bViTNdZYo2y44Ub9a4Zb8PZ+f+YPvlfefeA7hsy7+ro5ZerUqRa8nkACBAgQIECAAAECBAgQIECAAAECSQI+wZsE2+bYb3/nu+W5O+/Sv4V3vuOt5cc/OrP/z4//BG/vZ4sXL+5/KnfevHlL3fI+++5Xjjvh80v9zCd42/xUODsBAgQIECBAgAABAgQIECBAgEATBSx4m1iVMTzTrFlblN739Pb+3HHH7eV5O+84eJrHLnivvOLyst32O/R/d9q3v1k+8P6Dljr1hZdcUaZPX7/c/Yc/lMlTppTVV1+9WPCOYWG9NQECBAgQIECAAAECBAgQIECAwLgUsOAdl2V98jd19uz/LJtu9qx+wGsO2KdccvFFQy54Tzn562X3PfbsL3EXLlxYZs3cpCxYsKB/7c677Fq+ddrp/X/u/SVsRx59rAXvky+JVxIgQIAAAQIECBAgQIAAAQIECBBYpoAFr4djUGCPPfcqve/o7f355S9+UV6y9+5L6Tz2E7y9Be/FF11QPnviF/vXfPWkL5cjjzi8/89n/fTcMnPzzQc/sfvLG26x4PWcESBAgAABAgQIECBAgAABAgQIEEgQsOBNQG1r5GVXXlvWWWfd/vFf/KLdypw5vxx2wXv4hw8tV13zi/LUtdfuf3p35qbPKJvMmFHOnn1+/3Wf/Pgx5fMnnlAseNv6RDg3AQIECBAgQIAAAQIECBAgQIBA0wUseJteoRV0vje+6S3lY8d+sv9ul15ycfk/+7/6Ce/8+E/w9ha8b3rzW8vRx3yif+3xx3267LTTc/t/QduDDz5Ynv2sZ5YlS5YMu+Cdut6MFXSH3oYAAQIECBAgQIAAAQIECBAYK4H/+e1NY/XW3pfAuBew4B33JR75BgcGBsr1c24ukydP7i9kd33uDuU3v7lzVAve3kW9106ZMqX/XbwTJ04svbwTP3d8+dQnju1nDPcJ3nU32XbkA7qCAAECBAgQIECAAAECBAgQaLXA72++qtXnd3gCTRaw4G1ydVbQ2T58+EfLge96b//dfnLWj8o73vbmId95qE/w9i486H2HlIPf94HB1zz88MNl8802LosWLRpxwbvyalNW0F16GwIECBAgQIAAAQIECBAgQGCsBB7+4wNj9dbel8C4F7DgHfclHv4Ge5/avea/flUmTZpUFi9eXLbZcmb/L0cb6s+yFrwTJkwoc268tayyyir9l516yjfKYR/688LXd/B2/CFz+wQIECBAgAABAgQIECBAgAABAmkCFrxptO0IPuFzXyivevU+/cN++1v/Wg495OBlHnxZC97eC3rf39v7Ht/ekniLzWeU+fPnD+ZY8LbjWXBKAgQIECBAgAABAgQIECBAgACB9glY8LavZmEnnjZtvXLRpVf2vzO397UKvcXsggULntSCt/fp3Rfutke563e/Lddee81SGRa8YSUTRIAAAQIECBAgQIAAAQIECBAgQGApAQveDj8Q3/7Od8tzd96lL/DYvxRtWSTDfYJ3OEYL3g4/ZG6dAAECBAgQIECAAAECBAgQIEAgVcCCN5W3ueGzZm1RfnjWz/oH7H2dwqyZm5QlS5YMe2AL3ubW08kIECBAgAABAgQIECBAgAABAgS6KWDB2826l5+dc36Zselm/bs/+qgjyle+9IURJSx4RyRyAQECBAgQIECAAAECBAgQIECAAIEVKmDBu0K5m/FmO+70nPJvp3+vf5j/uffess1Wm4/qYGuttVa59vob+tee/I2vlY8c9sFRve7Rr2i47777ytZbPGtUr3ERAQIECBAgQIAAAQIECBAgQIAAAQIjC1jwjmzkCgIECBAgQIAAAQIECBAgQIAAAQIECDRSwIK3kWVxKAIECBAgQIAAAQIECBAgQIAAAQIECIwsYME7spErCBAgQIAAAQIECBAgQIAAAQIECBAg0EgBC95GlsWhCBAgQIAAAQIECBAgQIAAAQIECBAgMLKABe/IRq4gQIAAAQIECBAgQIAAAQIECBAgQIBAIwUseBtZFociQIAAAQIECBAgQIAAAQIECBAgQIDAyAIWvCMbuYIAAQIECBAgQIAAAQIECBAgQIAAAQKNFLDgbWRZHIoAAQIECBAgQIAAAQIECBAgQIAAAQIjC1jwjmzkCgIECBAgQIAAAQIECBAgQIAAAQIECDRSwIK3kWVxKAIECBAgQIAAAQIECBAgQIAAAQIECIwsYME7spErCBAgQIAAAQIECBAgQIAAAQIECBAg0EgBC95GlsWhCBAgQIAAAQIECBAgQIAAAQIECBAgMLKABe/IRq5oiMCSJUsacpL2HmNgYKC9h3dyAgQIECBAgAABAgQIECBAgACBJwhY8HooWiEwecozyjrTXtCKszb1kPMfuKPcc/fl5ZFF85p6ROciQIAAAQIECBAgQIAAAQIECBBYTgEL3uUEc/mKF+h9cnfq2tuUPV7+kxX/5uPoHe+45Yxy5cXvL48semAc3ZVbIUCAAAECBAgQIECAAAECBAh0W8CCt9v1b8XdW/DGlMmCN8ZRCgECBAgQIECAAAECBAgQIECgSQIWvE2qhrMMKWDBG/NgWPDGOEohQIAAAQIECBAgQIAAAQIECDRJwIK3SdVwFgvexGfAgjcRVzQBAgQIECBAgAABAgQIECBAYIwELHjHCN7bjl7AJ3hHbzXclRa8MY5SCBAgQIAAAQIECBAgQIAAAQJNErDgbVI1nGVIAQvemAfDgjfGUQoBAgQIECBAgAABAgQIECBAoEkCFrxNqoazWPAmPgMWvIm4ogkQIECAAAECBAgQIECAAAECYyRgwTtG8N529AI+wTt6q+GutOCNcZRCgAABAgQIECBAgAABAgQIEGiSgAVvk6rhLEMKWPDGPBgWvDGOUggQIECAAAECBAgQIECAAAECTRKw4G1SNZzFgjfxGbDgTcQVTYAAAQIECBAgQIAAAQIECBAYIwEL3jGC97ajF/AJ3tFbDXelBW+MoxQCBAgQIECAAAECBAgQIECAQJMELHibVA1nGVLAgjfmwbDgjXGUQoAAAQIECBAgQIAAAQIECBBokoAFb5Oq4SwWvInPgAVvIq5oAgQIECBAgAABAgQIECBAgMAYCVjwjhG8tx29gE/wjt5quCsteGMcpRAgQIAAAQIECBAgQIAAAQIEmiRgwdukajjLkAIWvDEPhgVvjKMUAgQIECBAgAABAgQIECBAgECTBCx4m1QNZ7HgTXwGLHgTcUUTIECAAAECBAgQIECAAAECBMZIwIJ3jOC97egFfIJ39FbDXWnBG+MohQABAgQIECBAgAABAgQIECDQJAEL3iZVw1mGFLDgjXkwLHhjHKUQIECAAAECBAgQIECAAAECBJokYMHbpGo4iwVv4jNgwZuIK5oAAQIECBAgQIAAAQIECBAgMEYCFrxjBO9tRy/gE7yjtxruSgveGEcpBAgQIECAAAECBAgQIECAAIEmCVjwNqkazjKkgAVvzINhwRvjKIUAAQIECBAgQIAAAQIECBAg0CQBC94mVcNZLHgTnwEL3kRc0QQIECBAgAABAgQIECBAgACBMRKw4B0jeG87egGf4B291XBXWvDGOEohQIAAAQIECBAgQIAAAQIECDRJwIK3SdVwliEFLHhjHgwL3hhHKQQIECBAgAABAgQIECBAgACBJglY8DapGs5iwZv4DFjwJuKKJkCAAAECBAgQIECAAAECBAiMkYAF7xjBe9vRC/gE7+ithrvSgjfGUQoBAgQIECBAgAABAgQIECBAoEkCFrxNqoazDClgwRvzYFjwxjhKIUCAAAECBAgQIECAAAECBAg0ScCCt0nVcBYL3sRnwII3EVc0AQIECBAgQIAAAQIECBAgQGCMBCx4xwje245ewCd4R2813JUWvDGOUggQIECAAAECBAgQIECAAAECTRKw4G1SNZxlSAEL3pgHw4I3xlEKAQIECBAgQIAAAQIECBAgQKBJAha8TaqGs1jwJj4DFryJuKIJECBAgAABAgQIECBAgAABAmMkYME7RvDedvQCPsE7eqvhrrTgjXGUQoAAAQIECBAgQIAAAQIECBBokoAFb5Oq4SxDCljwxjwYFrwxjlIIECBAgAABAgQIECBAgAABAk0SsOBtUjWcxYI38Rmw4E3EFU2AAAECBAgQIECAAAECBAgQGCMBC94xgve2oxfwCd7RWw13pQVvjKMUAgQIECBAgAABAgQIECBAgECTBCx4m1QNZxlSwII35sGw4I1xlEKAAAECBAgQIECAAAECBAgQaJKABW+TquEsFryJz4AFbyKuaAIECBAgQIAAAQIECBAgQIDAGAlY8I4RvLcdvYBP8I7eargrLXhjHKUQIECAAAECBAgQIECAAAECBJokYMHbpGo4y5ACFrwxD4YFb4yjFAIECBAgQIAAAQIECBAgQIBAkwQseJtUDWex4E18Bix4E3FFEyBAgAABAgQIECBAgAABAgTGSMCCd4zgve3oBXyCd/RWw12ZseDt1WZgYCDmgFIIECBAgAABAgQIECBAgAABAgSWW8CCd7nJvGBFC1jwxohnLHgHJqxaZm55UFlllakxh+xoyjWXHV4WL15oWd7R+rttAgQIECBAgAABAgQIECBQI2DBW6PntStEwII3hjljwTthpdXLXq86r0yesmHMITuacsap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2bRxA+cliSwJhAdYvHS55MyVS4UwQSgTWuITQHiMacGzpFr1mrrX6JMnTyRfbt/E75yX9wD3/+nBs1SIJs3GjhkpC+fP83IyHD4JxCTgSfd/CrxcwSRAAiRAAiRAAiRAAiRAAiRAAh5NIG/efCr2Oy1pEUDOhJB5C9XuBMR+7dalQ9LqoBf3Bl7W3br3ktdee00K+udRcZNpJEACnkuAAq/nzh17TgIkQAIkQAIkQAIkQAIkQAIkQAJJngC8Ro8dPSzPnj1L8n31pg6mSJFCChYsLJGR0WFOaCRAAp5LgAKv584de04CJEACJEACJEACJEACJEACJEACJEACJEACJODlBCjwevkC4PBJgARIgARIgARIgARIgARIgARIgARIgARIgAQ8lwAFXs+dO/acBEiABEiABEiABEiABEiABEiABEiABEiABEjAywlQ4PXyBcDhkwAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJeC4BCryeO3fsOQmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQgJcToMDr5QuAwycBEiABEiABEiABEiABEiABEiABEiABEiABEvBcAhR4PXfu2HMSIAESIAESIAESIAESIAESIAESIAESIAESIAEvJ0CB18sXAIdPAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiTguQQo8Hru3LHnJEACJEACJEACJEACJEACJEACJEACJEACJEACXk6AAq+XLwAOnwRIgARIgARIgARIgARIgARIgARIgARIgARIwHMJUOD13Lljz0mABEiABEiABEiABEiABEiABEiABEiABEiABLycAAVeL18AHD4JkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkIDnEqDA67lzx56TAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAl4OQEKvF6+ADh8EiABEiABEiABEiABEiABEiABEiABEiABEiABzyVAgddz5449JwESIAESIAESIAESIAESIAESIAESIAESIAES8HICFHi9fAFw+CRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAp5LgAKv584de04CJEACJEACJEACJEACJEACJEACJEACJEACJODlBCjwevkC4PBJgARIgARIgARIgARIgARIgARIgARIgARIgAQ8lwAFXs+dO/acBEiABEiABEiABEiABEiABEiABEiABEiABEjAywlQ4PXyBcDhkwAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJeC4BCryeO3fsOQmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQgJcToMDr5QuAwycBEiABEiABEiABEiABEiABEiABEiABEiABEvBcAhR4PXfu2HMSIAESIAESIAESIAESIAESIAESIAESIAESIAEvJ0CB18sXAIdPAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiTguQQo8Hru3LHnJEACJEACJEACJEACJEACJEACJEACJEACJEACXk6AAq+XLwAOnwRIgARIgARIgARIgARIgARIgARIgARIgARIwHMJUOD13Lljz0mABEiABEiABEiABEiABEiABEiABEiABEiABLycAAVeL18AHD4JkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkIDnEqDA67lzx56TAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAl4OQEKvF6+ADh8EiABEiABEiABEiABEiABEiABEiABEiABEiABzyVAgddz5449JwESIAESIAESIAESIAESIAESIAESIAESIAES8HICFHi9fAFw+CRAAiRAAiSQlAmkSJFCfv/99yTXxffee09+++23JNWvN954Q1Kl+kju3bubpPrFzpAACZAACZAACZAACZAACcQvAQq88cuXrZMACZAACZAACbhIIG3adNK7b3/JmSu34L8hov7jH/+Q//3vf/Kf//xHHj36RbZv3SJzZs+IIa52695LmjZvoc6EMuPGjnJ61mHDR0nVatVVuVUrlsvcOTNt1kEfunbrKc1atBQfnw/k7bffVuXQr+fPn8sfT5/Kwx8eypZNG2X5sqW6IJ3N11fClq1y2g9nBRaEhkh42JIYxVL6+MjIkWMlT9688mmatPLOO++oMn///bf88vPPcuvWTdm8aYMsXxbm8BTZc+SQJWEr9DIvXryQ6lUryh9//OGw3r///W/ZtWe//PuNN/Ryg4P6y4ED+y3qzZ47XwoULOhsmDGOV61UzkLc37UnUt5N8W6Mci+eP5dff/1VHj9+JCdPnJCFC+bJX3/9Zfp8salgPTawq12jqjx58sRuc7PmhErBQoXU8cCAFnLl8mWnp169Zr2kz5BBL7d40QJZsmiB03pt2raXdu076uVu3rghLZs3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", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "AI-generated follow-up questions:\n", - "\n", - "* What is the country name for each of the top 10 customers by sales?\n", - "* How many orders does each of the top 10 customers by sales have?\n", - "* What is the total revenue for each of the top 10 customers by sales?\n", - "* What are the customer names and total sales for customers in the United States?\n", - "* Which customers in Africa have returned the most parts with a gross value?\n", - "* What are the total sales for the top 3 customers?\n", - "* What are the customer names and total sales for the top 5 customers?\n", - "* What are the total sales for customers in Europe?\n", - "* How many customers are there in each country?\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "vn.ask(\"What are the top 10 customers by sales?\")" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "SELECT n.n_name as country_name,\n", - " sum(l.l_extendedprice * (1 - l.l_discount)) as total_sales\n", - "FROM snowflake_sample_data.tpch_sf1.nation n join snowflake_sample_data.tpch_sf1.customer c\n", - " ON n.n_nationkey = c.c_nationkey join snowflake_sample_data.tpch_sf1.orders o\n", - " ON c.c_custkey = o.o_custkey join snowflake_sample_data.tpch_sf1.lineitem l\n", - " ON o.o_orderkey = l.l_orderkey\n", - "GROUP BY country_name\n", - "ORDER BY total_sales desc limit 5;\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
COUNTRY_NAMETOTAL_SALES
0FRANCE8960205391.8314
1INDONESIA8942575217.6237
2RUSSIA8925318302.0710
3MOZAMBIQUE8892984086.0088
4JORDAN8873862546.7864
\n", - "
" - ], - "text/plain": [ - " COUNTRY_NAME TOTAL_SALES\n", - "0 FRANCE 8960205391.8314\n", - "1 INDONESIA 8942575217.6237\n", - "2 RUSSIA 8925318302.0710\n", - "3 MOZAMBIQUE 8892984086.0088\n", - "4 JORDAN 8873862546.7864" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABXgAAAPoCAYAAABkvZZOAAAgAElEQVR4XuzdB5QkVdUA4LeIgIFkAFEk5yg5SZSoIKCICUWCqAgKmEUUcwZBgR9FgmBCMkgGCUaQJDmJKEowIEnSL/zn9f7TOzM7u1NdO2+7b9XX53iO7Lx6dd93392uvV1TPWneeed9NnkRIECAAAECBAgQIECAAAECBAgQIECAQDiBSRq84XImYAIECBAgQIAAAQIECBAgQIAAAQIECHQENHhtBAIECBAgQIAAAQIECBAgQIAAAQIECAQV0OANmjhhEyBAgAABAgQIECBAgAABAgQIECBAQIPXHiBAgAABAgQIECBAgAABAgQIECBAgEBQAQ3eoIkTNgECBAgQIECAAAECBAgQIECAAAECBDR47QECBAgQIECAAAECBAgQIECAAAECBAgEFdDgDZo4YRMgQIAAAQIECBAgQIAAAQIECBAgQECD1x4gQIAAAQIECBAgQIAAAQIECBAgQIBAUAEN3qCJEzYBAgQIECBAgAABAgQIECBAgAABAgQ0eO0BAgQIECBAgAABAgQIECBAgAABAgQIBBXQ4A2aOGETIECAAAECBAgQIECAAAECBAgQIEBAg9ceIECAAAECBAgQIECAAAECBAgQIECAQFABDd6giRM2AQIECBAgQIAAAQIECBAgQIAAAQIENHjtAQIECBAgQIAAAQIECBAgQIAAAQIECAQV0OANmjhhEyBAgAABAgQIECBAgAABAgQIECBAQIPXHiBAgAABAgQIECBAgAABAgQIECBAgEBQAQ3eoIkTNgECBAgQIECAAAECBAgQIECAAAECBDR47QECBAgQIECAAAECBAgQIECAAAECBAgEFdDgDZo4YRMgQIAAAQIECBAgQIAAAQIECBAgQECD1x4gQIAAAQIECBAgQIAAAQIECBAgQIBAUAEN3qCJEzYBAgQIECBAgAABAgQIECBAgAABAgQ0eO0BAgQIECBAgAABAgQIECBAgAABAgQIBBXQ4A2aOGETIECAAAECBAgQIECAAAECBAgQIEBAg9ceIECAAAECBAgQIECAAAECBAgQIECAQFABDd6giRM2AQIECBAgQIAAAQIECBAgQIAAAQIENHjtAQIECBAgQIAAAQIECBAgQIAAAQIECAQV0OANmjhhEyBAgAABAgQIECBAgAABAgQIECBAQIPXHiBAgAABAgQIECBAgAABAgQIECBAgEBQAQ3eoIkTNgECBAgQIECAAAECBAgQIECAAAECBDR47QECBAgQIECAAAECBAgQIECAAAECBAgEFdDgDZo4YRMgQIAAAQIECBAgQIAAAQIECBAgQECD1x4gQIAAAQIECBAgQIAAAQIECBAgQIBAUAEN3qCJEzYBAgQIECBAgAABAgQIECBAgAABAgQ0eO0BAgQIECBAgAABAgQIECBAgAABAgQIBBXQ4A2aOGETIECAAAECBAgQIECAAAECBAgQIEBAg9ceIECAAAECBAgQIECAAAECBAgQIECAQFABDd6giRM2AQIECBAgQIAAAQIECBAgQIAAAQIENHjtAQIECBAgQIAAAQIECBAgQIAAAQIECAQV0OANmjhhEyBAgAABAgQIECBAgAABAgQIECBAQIPXHiBAgAABAgQIECBAgAABAgQIECBAgEBQAQ3eoIkTNgECBAgQIECAAAECBAgQIECAAAECBDR47QECBAgQIECAAAECBAgQIECAAAECBAgEFdDgDZo4YRMgQIAAAQIECBAgQIAAAQIECBAgQECD1x4gQIAAAQIECBAgQIAAAQIECBAgQIBAUAEN3qCJEzYBAgQIECBAgAABAgQIECBAgAABAgQ0eO0BAgQIECBAgAABAgQIECBAgAABAgQIBBXQ4A2aOGETIECAAAECBAgQIECAAAECBAgQIEBAg9ceIECAAAECBAgQIECAAAECBAgQIECAQFABDd6giRM2AQIECBAgQIAAAQIECBAgQIAAAQIENHjtAQIECBAgQIAAAQIECBAgQIAAAQIECAQV0OANmjhhEyBAgAABAgQIECBAgAABAgQIECBAQIPXHiBAgAABAgQIECBAgAABAgQIECBAgEBQAQ3eoIkTNgECBAgQIECAAAECBAgQIECAAAECBDR47QECBAgQIECAAAECBAgQIECAAAECBAgEFdDgDZo4YRMgQIAAAQIECBAgQIAAAQIECBAgQECD1x4gQIAAAQIECBAgQIAAAQIECBAgQIBAUAEN3qCJEzYBAgQIECBAgAABAgQIECBAgAABAgQ0eO0BAgQIECBAgAABAgQIECBAgAABAgQIBBXQ4A2aOGETIECAAAECBAgQIECAAAECBAgQIEBAg9ceIECAAAECBAgQIECAAAECBAgQIECAQFABDd6giRM2AQIECBAgQIAAAQIECBAgQIAAAQIENHjtAQIECBAgQIAAAQIECBAgQIAAAQIECAQV0OANmjhhEyBAgAABAgQIECBAgAABAgQIECBAQIPXHiBAgAABAgQIECBAgAABAgQIECBAgEBQAQ3eoIkTNgECBAgQIECAAAECBAgQIECAAAECBDR47QECBAgQIECAAAECBAgQIECAAAECBAgEFdDgDZo4YRMgQIAAAQIECBAgQIAAAQIECBAgQECD1x4gQIAAAQIECBAgQIAAAQIECBAgQIBAUAEN3qCJEzYBAgQIECBAgAABAgQIECBAgAABAgQ0eO0BAgQIECBAgAABAgQIECBAgAABAgQIBBXQ4A2aOGETIECAAAECBAgQIECAAAECBAgQIEBAg9ceIECAAAECBAgQIECAAAECBAgQIECAQFABDd6giRM2AQLNEnjZyxZIa6+zTndRZ515Rvrf//3fZi1ywFcz33zzp3XXW68b5Tln/zw9+eSTAx618AgQIECAAAECBAgQIECg7QIavGPsgEmTJqVll11uQvfGM888k2655eYJnXMQJ5ttttnSEkssWSu0J596Kt15x+21jq160KKLLZ623W77tMjCi6YXv+QlaY455kh//etfO+e99dZb0rXXXJ0eeOD+qtMZV1hgy61elxZ4+cu7Z/nh8celp556qvBZ+zP9gZ/9Qtplt3d3T779tq9LV1/1+/4EU/Css88+e1pjzbXS8suvmJZZZtm04CtfmR599JFOHd511x/TH++8M91y803p3nv/VjCKsaf+8Ec/nvb+wL7dH77z7W9Jl176i5kehxMSIECAAAECBAgQIECAAIFeBDR4x9DabPMt01FHH9eLY6WxO7zh9enKK35XaWzUQe/adff02c99sXb4Cy84f+1jp3fgXnvvk/bc6wPpBS94wbjz33PPX9Jxxxydjv7+d91BOUor32W6+RZbdv/0tFNPTg8//PC4pnUH3HDzHWnOOefsHr71Vpul66//Q93pBvq4pjd4cx4P/NwX03bbvzHNOuus4+bikUceSb/65WXpqO8dOdP+3tTgHTctBhAgQIAAAQIECBAgQIDAAApo8I6RlM232Cp97/vHTni62tDgzXcg5kZV3ddEN3jzHbs/OOHHaaGFFu45pPzr8RddeH7aY/ddej62qQe8f68Ppo9+/JPd5b13j93SOWefVWy5GrzNuIN3t3e/J31y/09XauyOtZlOO/WU9MG931dsnw1NrMFbnNgJCBAgQIAAAQIECBAgQKCAgAavBu+EbqtBavB+7BP7p/ftuXfKj9wY/Xr22Wc7d57mR2fMM888Y47Jx+THASy52Csn1CjyZBq85bLX1Dt4p3VXf67Bxx9/PP3nscfSnHPNlfKjG6b1uvCC89Juu7yzHP7/z6zBW5zYCQgQIECAAAECBAgQIECggIAG7xioudGw8SabTpf77Tu9M22w4UbdMeede3Y65eSTpntMblI0/UuTRjd4f37WGemkn51Yaes+9dST6ZeXX1Zp7HiDNthgo3T8j3461bDLLr0kffMbX03XXXtNyg2moddyyy2f1t9go/T67bZPK6ywYvfPNXhHEs7sBu9O79g5vWLBBbtBHPqtgzpNwSa+mtjgnfdFL0rXXHfTiA9Q8peWHXfM99NB3/zaiFzmx6estfa6aY0110ybbLJZWmbZZbtp1uBt4o63JgIECBAgQIAAAQIECBCYKAEN3pqS+3/qM2mP9+7ZPfobX/tK+vahB9ecrTmHjW7w9sMl37F7zR9uTvPOO++IRu1HPrxPOu2Uk8fFzs3eI486pvNYBw3e/jZ4x01WgwY0scH7jYMOSW/a8S3dLP3nP/9Jm268fvrrX+8ZN3MLLvjK9M2DD01rr7Nu0uAdl8sAAgQIECBAgAABAgQIEGixgAZvzeRPdIN3lllmSautvkbnruAFX/HKdO21V6dfXHxR+vOf764Z4ZTD8p1xm7xm0/Tq9TdM//znP9L5552brr3m6hmed6wJBqHB+5kDP5923X2Pbnj5Tt311l69UlNp+Jo+/8WvpK23fn1aZeXlpmtVMndFkpRSmmfeedMWW2yV1lxr7XT//fel3/3mN+mKK3477t2xM/sO3hlZf24Q5npadbXV04P/+le66qrfp9/8+pfpoYce6mna/IHB0ksvk1ZZdbW0xBJLpn/+85/plltuTjfdeEO67757e5preoOn1+DNe2z99TdMG2/ymjTrc5+bLr7ownTZpb8Y+N8IuOKq69L887+su+wD9v94+sFxx/Rk9rqtt0lPP/2/6fzzzpnmcbPNNltaZpll08KLLJIWXHChNP/886enn346/etf/0o33nB9uvLK3427t/PkM/KIhmj7rackGEyAAAECBAgQIECAAAECAy2gwVszPRPV4M1fAnbCj36acnNgrFd+pMM5Z/887f3+94x4pMDosaedcXZ61Sqrdv443yW33NKLpbe9/R3p4588IM0999xTTZ2fPXvcsUenAz+9f02BsQ/rd4P3ZS9bIP3miqtTbogNvX524k/Sh/f74ISuM082Ubk77Ijvptdt/fpOfLkZvdjCL59urpdcaql0wUVTHmVxxOHfTl/98henWt+Nt9yZcnM/v6677tq07dZbpne/531p3/0+0v3z4QflPZHvuD7sO4dMNVdumufcTut5xqMPuOGG69PWW23W+ePR8R5+2KHpa1/5Unre856XPrDPfmnd9dZPiy++RHrhC1/YWfc99/wlrb/ump1jf3LiKZ07OPMr30291OILTTePs846a/ruUcekDTfaZJpf6JWbvbvvtnP6/ZVXTHeuHPfXvn5wp7E71rrzwbmJeOUVv0tHHnFYuuSSi2doj43V4M37+DuHH5kWWODlY86dz73jDtt1niU9/JX/Pvnlb67s/lFe83gfVAwN/uGPf5bWe/X63WN3fdc70sUXXVBrbTfd+scRe237bV+Xrr5q4r44Lj9ne6d3vCvNNddc040v76tf/+qX6bMHfirdesst0xzba4M38n6rlVAHESBAgAABAgQIECBAgMBACmjw1kzLRDR4c8Ps05/53Ihm5LTC+fsDD6Q37bBduuuPd4455MKLL0tLLrV092e333briP+e1ry56fG2t+ww3YZiL0T9bvDmhs+e7/9AN+Qnnngirbjckp3m4ES+JjJ3P/jhT9KGG27cDW+RV75suvlYccWV0lnnTGm4Hf+DY9OnPvmxqZZ3x133pOc+97mdP//XP/+ZHn3s0c5jJ8Z7nXvOz9N73r3riGFf/+a30o5vfut4h3Z//sc770gbb7he579XWmnldObZ53d/lu/g/Muf/5w+8rFPpHzn5ehXfkbrUCP35+de2H0mcm7SZZtpvVZfY810zHE/HLfZN3T8j390Qvr4Rz805nS7vfs9ndrs5ZX3Wf7ivrqv0Q3eW26+ecRzaKc1b74De8vNN+nkePjr2vyYkhe9qPtHu++6c7rg/HOnG15ulP7hxtu6De2ci6WXWLj23w+/v/r69NL55uue88Sf/jh95EP71CWa6rjTzjwnrfL/H2xVnXR6Dr00eKPvt6pexhEgQIAAAQIE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AAECBAgQIECAAIE6Ahq8ddQcQ4AAAQIECBAgQIAAAQIECBAgQIAAgQEQ0OAdgCQIgQABAgQIECBAgAABAgQIECBAgAABAnUENHjrqDmGAAECBAgQIECAAAECBAgQIECAAAECAyCgwTsASRACAQIECBAgQIAAAQIECBAgQIAAAQIE6gho8NZRcwwBAgQIECBAgAABAgQIECBAgAABAgQGQECDdwCSIAQCBAgQIECAAAECBAgQIECAAAECBAjUEdDgraPmGAIECBAgQIAAAQIECBAgQIAAAQIECAyAgAbvACRBCAQIECBAgAABAgQIECBAgAABAgQIEKgjoMFbR80xBAgQIECAAAECBAgQIECAAAECBAgQGAABDd4BSIIQCBAgQIAAAQIECBAgQIAAAQIECBAgUEdAg7eOmmMIECBAgAABAgQIECBAgAABAgQIECAwAAIavAOQBCEQIECAAAECBAgQIECAAAECBAgQIECgjoAGbx01xxAgQIAAAQIECBAgQIAAAQIECBAgQGAABDR4ByAJQiBAgAABAgQIECBAgAABAgQIECBAgEAdAQ3eOmqOIUCAAAECBAgQIECAAAECBAgQIECAwAAIaPAOQBKEQIAAAQIECBAgQIAAAQIECBAgQIAAgToCGrx11BxDgAABAgQIECBAgAABAgQIECBAgACBARDQ4B2AJAiBAAECBAgQIECAAAECBAgQIECAAAECdQQ0eOuoOYYAAQIECBAgQIAAAQIECBAgQIAAAQIDIKDBOwBJEAIBAgQIECBAgAABAgQIECBAgAABAgTqCGjw1lFzDAECBAgQIECAAAECBAgQIECAAAECBAZAQIN3AJIgBAIECBAgQIAAAQIECBAgQIAAAQIECNQR0OCto+YYAgQIECBAgAABAgQIECBAgAABAgQIDICABu8AJEEIBAgQIECAAAECBAgQIECAAAECBAgQqCOgwVtHzTEECBAgQIAAAQIECBAgQIAAAQIECBAYAAEN3gFIghAIECBAgAABAgQIECBAgAABAgQIECBQR0CDt46aYwgQIECAAAECBAgQIECAAAECBAgQIDAAAhq8A5AEIRAgQIAAAQIECBAgQIAAAQIECBAgQKCOgAZvHTXHECBAgAABAgQIECBAgAABAgQIECBAYAAENHgHIAlCIECAAAECBAgQIECAAAECBAgQIECAQB0BDd46ao4hQIAAAQIECBAgQIAAAQIECBAgQIDAAAho8A5AEoRAgAABAgQIECBAgAABAgQIECBAgACBOgIavHXUHEOAAAECBAgQIECAAAECBAgQIECAAIEBENDgHYAkCIEAAQIECBAgQIAAAQIECBAgQIAAAQJ1BDR466g5hgABAgQIECBAgAABAgQIECBAgAABAgMgoME7AEkQAgECBAgQIECAAAECBAgQIECAAAECBOoIaPDWUXMMAQIECBAgQIAAAQIECBAgQIAAAQIEBkBAg3cAkiAEAgQIECBAgAABAgQIECBAgAABAgQI1BHQ4K2j5hgCBAgQIECAAAECBAgQIECAAAECBAgMgIAG7wAkQQgECBAgQIAAAQIECBAgQIAAAQIECBCoI6DBW0fNMQQIECBAgAABAgQIECBAgAABAgQIEBgAAQ3eAUiCEAgQIECAAAECBAgQIECAAAECBAgQIFBHQIO3jppjCBAgQIAAAQIECBAgQIAAAQIECBAgMAACGrwDkAQhECBAgAABAgQIECBAgAABAgQIECBAoI6ABm8dNccQIECAAAECBAgQIECAAAECBAgQIEBgAAQ0eAcgCUIgQIAAAQIECBAgQIAAAQIECBAgQIBAHQEN3jpqjiFAgAABAgQIECBAgAABAgQIECBAgMAACGjwDkAShECAAAECBAgQIECAAAECBAgQIECAAIE6Ahq8ddQcQ4AAAQIECBAgQIAAAQIECBAgQIAAgQEQ0OAdgCQIgQABAgQIECBAgAABAgQIECBAgAABAnUENHjrqDmGAAECBAgQIECAAAECBAgQIECAAAECAyCgwTsASRACAQIECBAgQIAAAQIECBAgQIAAAQIE6gho8NZRcwwBAgQIECBAgAABAgQIECBAgAABAgQGQECDdwCSIAQCBAgQIECAAAECBAgQIECAAAECBAjUEdDgraPmGAIECBAgQIAAAQIECBAgQIAAAQIECAyAgAbvACRBCAQIECBAgAABAgQIECBAgAABAgQIEKgjoMFbR80xBAgQIECAAAECBAgQIECAAAECBAgQGAABDd4BSIIQCBAgQIAAAQIECBAgQIAAAQIECBAgUEdAg7eOmmMIECBAgAABAgQIECBAgAABAgQIECAwAAIavAOQBCEQIECAAAECBAgQIECAAAECBAgQIECgjoAGbx01xxAgQIAAAQIECBAgQIAAAQIECBAgQGAABDR4ByAJQiBAgAABAgQIECBAgAABAgQIECBAgEAdAQ3eOmqOIUCAAAECBAgQIECAAAECBAgQIECAwAAIaPAOQBKEQIAAAQIECBAgQIAAAQIECBAgQIAAgToCGrx11BxDgAABAgQIECBAgAABAgQIECBAgACBARDQ4B2AJAiBAAECBAgQIECAAAECBAgQIECAAAECdQQ0eOuoOYYAAQIECBAgQIAAAQIECBAgQIAAAQIDIKDBOwBJEAIBAgQIECBAgAABAgQIECBAgAABAgTqCGjw1lFzDAECBAgQIECAAAECBAgQIECAAAECBAZAQIN3AJIgBAIECBAgQIAAAQIECBAgQIAAAQIECNQR0OCto+YYAgQIECBAgAABAgQIECBAgAABAgQIDICABu8AJEEIBAgQIECAAAECBAgQIECAAAECBAgQqCOgwVtHzTEECBAgQIAAAQIECBAgQIAAAQIECBAYAAEN3gFIghAIECBAgAABAgQIECBAgAABAgQIECBQR0CDt46aYwgQIECAAAECBAgQIECAAAECBAgQIDAAAhq8A5AEIRAgQIAAAQIECBAgQIAAAQIECBAgQKCOgAZvHTXHECBAgAABAgQIECBAgAABAgQIECBAYAAENHgHIAlCIECAAAECBAgQIECAAAECBAgQIECAQB0BDd46ao4hQIAAAQIECBAgQIAAAQIECBAgQIDAAAho8A5AEoRAgAABAgQIECBAgAABAgQIECBAgACBOgIavHXUHEOAAAECBAgQIECAAAECBAgQIECAAIEBENDgHYAkCIEAAQIECBAgQIAAAQIECBAgQIAAAQJ1BDR466g5hgABAgQIECBAgAABAgQIECBAgAABAgMgoME7AEkQAgECBAgQIECAAAECBAgQIECAAAECBOoIaPDWUXMMAQIECBAgQIAAAQIECBAgQIAAAQIEBkBAg3cAkiAEAgQIECBAgAABAgQIECBAgAABAgQI1BHQ4K2j5hgCBAgQIECAAAECBAgQIECAAAECBAgMgIAG7wAkQQgECBAgQIAAAQIECBAgQIAAAQIECBCoI6DBW0fNMQQIECBAgAABAgQIECBAgAABAgQIEBgAAQ3eAUiCEAgQIECAAAECBAgQIECAAAECBAgQIFBHQIO3jppjCBAgQIAAAQIECBAgQIAAAQIECBAgMAACGrwDkAQhECBAgAABAgQIECBAgAABAgQIECBAoI6ABm8dNccQIECAAAECBAgQIECAAAECBAgQIEBgAAQ0eAcgCUIgQIAAAQIECBAgQIAAAQIECBAgQIBAHQEN3jpqjiFAgAABAgQIECBAgAABAgQIECBAgMAACGjwDkAShECAAAECBAgQIECAAAECBAgQIECAAIE6Ahq8ddQcQ4AAAQIECBAgQIAAAQIECBAgQIAAgQEQ0OAdgCQIgQABAgQIECBAgAABAgQIECBAgAABAnUENHjrqDmGAAECBAgQIECAAAECBAgQIECAAAECAyCgwTsASRACAQIECBAgQIAAAQIECBAgQIAAAQIE6gho8NZRcwwBAgQIECBAgAABAgQIECBAgAABAgQGQECDdwCSIAQCBAgQIECAAAECBAgQIECAAAECBAjUEdDgraPmGAIECBAgQIAAAQIECBAgQIAAAQIECAyAgAbvACRBCAQIECBAgAABAgQIECBAgAABAgQIEKgjoMFbR80xBAgQIECAAAECBAgQIECAAAECBAgQGAABDd4BSIIQCBAgQIAAAQIECBAgQIAAAQIECBAgUEdAg7eOmmMIECBAgAABAgQIECBAgAABAgQIECAwAAIavAOQBCEQIECAAAECBAgQIECAAAECBAgQIECgjoAGbx01xxAgQIAAAQIECBAgQIAAAQIECBAgQGAABDR4ByAJQiBAgAABAgQIECBAgAABAgQIECBAgEAdAQ3eOmqOIUCAAAECBAgQIECAAAECBAgQIECAwAAIaPAOQBKEQIAAAQIECBAgQIAAAQIECBAgQIAAgToCGrx11BxDgAABAgQIECBAgAABAgQIECBAgACBARDQ4B2AJAiBAAECBAgQIECAAAECBAgQIECAAAECdQQ0eOuoOYYAAQIECBAgQIAAAQIECBAgQIAAAQIDIKDBOwBJEAIBAgQIECBAgAABAgQIECBAgAABAgTqCGjw1lFzzEALPPPM7OnJJ3dLKb1woOMUHIHJAg+nOeY4Nk2a9AQQAgQIECBAgAABAgQIECBAgEDPAhq8PZM5YNAFnnnmeenhh69Ozz47/6CHKj4CadKkv6a5514rTZr0nxAazzzzwvTf/y6VUpo1RLyCbLvA02nWWe9MkyY9HALi2WefTZMmTQoRqyAJZAF71j4gQIAAAQIECAyGgAbv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AggggAACCCCAAAIIIIAAAggggIDTAgR4nW4+Co8AAggggAACCCCAAAIIIIAAAggggAACYRYgwBvm1qfuCCCAAAIIIIAAAggggAACCCCAAAIIIOC0AAFep5uPwiOAAAIIIIAAAggggAACCCCAAAIIIIBAmAUI8Ia59ak7AggggAACCCCAAAIIIIAAAggggAACCDgtQIDX6eaj8AgggAACCCCAAAIIIIAAAggggAACCCAQZgECvGFufeqOAAIIIIAAAggggAACCCCAAAIIIIAAAk4LEOB1uvkoPAIIIIAAAggggAACCCCAAAIIIIAAAgiEWYAAb5hbn7ojgAACCCCAAAIIIIAAAggggAACCCCAgNMCBHidbj4KjwACCCCAAAIIIIAAAggggAACCCCAAAJhFiDAG+bWp+4IIIAAAggggAACCCCAAAIIIIAAAggg4LQAAV6nm4/CI4AAAggggAACCCCAAAIIIIAAAggggECYBQjwhrn1qTsCCCCAAAIIIIAAAggggAACCCCAAAIIOC1AgNfp5qPwCCCAAAIIIIAAAggggAACCCCAAAIIIBBmAQK8YW596o4AAggggAACCCCAAAIIIIAAAggggAACTgsQ4HW6+Sg8AggggAACCCCAAAIIIIAAAggggAACCIRZgABvmFufuiOAAAIIIIAAAggggAACCCCAAAIIIICA0wIEeJ1uPgqPAAIIIIAAAggggAACCCCAAAIIIIAAAmEWIMAb5tan7ggggAACCCCAAAIIIIAAAggggAACCCDgtAABXqebj8IjgAACCCCAAAJFK7DPPvvIb7/9Jn/99VfRHpijIYAAAggggAACCCCAQFwBArx0DAQQQAABBBBAAIGEAhd1u0RatzlZKlWuLKVLHyL/+Mc/zLa///67/PTjj7Jjx3YZNnSwLFgwD0UEEEAAAQQQQAABBBAoBgECvMWAziERQAABBBBAAIFsF6hU+SgZO36ilCtXPlBRf/zxR3nx+Uly5x23BtrexY2u6tVH+t94syn6iuXL5OyO7V2sBmVGAAEEEEAAAQQQyDEBArw51qBUBwEEEEAAAQQQKKzANdf1l959rpHddtstT1b/+c9/5Ntvv5GSJQ+UAw44IN/nf/zxh1SueERhD5+1+/e95jrpd831pnxr16yWDu1Oy9qyUjAEEEAAAQQQQACB8AgQ4A1PW1NTBBBA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", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "AI-generated follow-up questions:\n", - "\n", - "* What are the total sales for each country in descending order?\n", - "* Which country has the highest number of customers?\n", - "* What are the total sales for each customer in descending order?\n", - "* Which customers in the United States have the highest total sales?\n", - "* What are the total sales and number of orders for each customer in each country?\n", - "* What are the total sales for customers in Europe?\n", - "* What are the top 10 countries with the highest total order amount?\n", - "* Which country has the highest number of failed orders?\n", - "* Which customers have the highest total sales?\n", - "* \n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "vn.ask(\"Which 5 countries have the highest sales?\")" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "with ranked_customers as (SELECT c.c_name as customer_name,\n", - " r.r_name as region_name,\n", - " row_number() OVER (PARTITION BY r.r_name\n", - " ORDER BY sum(l.l_quantity * l.l_extendedprice) desc) as rank\n", - " FROM snowflake_sample_data.tpch_sf1.customer c join snowflake_sample_data.tpch_sf1.orders o\n", - " ON c.c_custkey = o.o_custkey join snowflake_sample_data.tpch_sf1.lineitem l\n", - " ON o.o_orderkey = l.l_orderkey join snowflake_sample_data.tpch_sf1.nation n\n", - " ON c.c_nationkey = n.n_nationkey join snowflake_sample_data.tpch_sf1.region r\n", - " ON n.n_regionkey = r.r_regionkey\n", - " GROUP BY customer_name, region_name)\n", - "SELECT region_name,\n", - " customer_name\n", - "FROM ranked_customers\n", - "WHERE rank <= 2;\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
REGION_NAMECUSTOMER_NAME
0ASIACustomer#000102022
1ASIACustomer#000148750
2AMERICACustomer#000095257
3AMERICACustomer#000091630
4EUROPECustomer#000028180
5EUROPECustomer#000053809
6MIDDLE EASTCustomer#000143500
7MIDDLE EASTCustomer#000103834
8AFRICACustomer#000131113
9AFRICACustomer#000134380
\n", - "
" - ], - "text/plain": [ - " REGION_NAME CUSTOMER_NAME\n", - "0 ASIA Customer#000102022\n", - "1 ASIA Customer#000148750\n", - "2 AMERICA Customer#000095257\n", - "3 AMERICA Customer#000091630\n", - "4 EUROPE Customer#000028180\n", - "5 EUROPE Customer#000053809\n", - "6 MIDDLE EAST Customer#000143500\n", - "7 MIDDLE EAST Customer#000103834\n", - "8 AFRICA Customer#000131113\n", - "9 AFRICA Customer#000134380" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABXgAAAPoCAYAAABkvZZOAAAgAElEQVR4XuzdebyM5f/H8Q+JlF22rMe+Z9/3ZKkQkexLSJQobSiVVJasUZJs2couspN9y87h2LeoSBItfPk9Prff3GbmzH7PmDPnvK7H4/v4Zuba7ud1z/zxPtdcd6K0adPeFgoCCCCAAAIIIIAAAggggAACCCCAAAIIIIBAxAkkIuCNuDVjwggggAACCCCAAAIIIIAAAggggAACCCCAgCFAwMuNgAACCCCAAAIIIIAAAggggAACCCCAAAIIRKgAAW+ELhzTRgABBBBAAAEEEEAAAQQQQAABBBBAAAEECHi5BxBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgQgVIOCN0IVj2ggggAACCCCAAAIIIIAAAggggAACCCCAAAEv9wACCCCAAAIIIIAAAggggAACCCCAAAIIIBChAgS8EbpwTBsBBBBAAAEEEEAAAQQQQAABBBBAAAEEECDg5R5AAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQiVICAN0IXjmkjgAACCCCAAAIIIIAAAggggAACCCCAAAIEvNwDCCCAAAIIIIAAAggggAACCCCAAAIIIIBAhAoQ8EbowjFtBBBAAAEEEEAAAQQQQAABBBBAAAEEEECAgJd7AAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQiFABAt4IXTimjQACCCCAAAIIIIAAAggggAACCCCAAAIIEPByDyCAAAIIIIAAAggggAACCCCAAAIIIIAAAhEqQMAboQvHtBFAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQJe7gEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQCBCBQh4I3ThmDYCCCCAAAIIIIAAAggggAACCCCAAAIIIEDAyz2AAAIIIIAAAggggAACCCCAAAIIIIAAAghEqAABb4QuHNNGAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQIeLkHEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBCBUg4I3QhWPaCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAS/3AAIIIIAAAggggAACCCCAAAIIIIAAAgggEKECBLwRunBMGwEEEEAAAQQQQAABBBBAAAEEEEAAAQQQIODlHkAAAQQQQAABBBBAAAEEEEAAAQQQQAABBCJUgIA3QheOaSOAAAIIIIAAAggggAACCCCAAAIIIIAAAgS83AMIIIAAAggggAACCCCAAAIIIIAAAggggECEChDwRujCMW0EEEAAAQQQQAABBBBAAAEEEEAAAQQQQICAl3sAAQQQQAABBBBAAAEEEEAAAQQQQAABBBCIUAEC3ghdOKaNAAIIIIAAAggggAACCCCAAAIIIIAAAggQ8HIPIIAAAggggAACCCCAAAIIIIAAAggggAACESpAwBuhC8e0EUAAAQQQQAABBBBAAAEEEEAAAQQQQAABAl7uAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAIEIFCHgjdOGYNgIIIIAAAggggAACCCCAAAIIIIAAAgggQMDLPYAAAggggAACCCCAAAIIIIAAAggggAACCESoAAFvhC4c00YAAQQQQAABBBBAAAEEEEAAAQQQQAABBAh4uQcQQAABBBBAAAEEEEAAAQQQQAABBBBAAIEIFSDgjdCFY9oIIIAAAggggAACCCCAAAIIIIAAAggggAABL/cAAggggAACCCCAAAIIIIAAAggggAACCCAQoQIEvBG6cEwbAQQQQAABBBBAAAEEEEAAAQQQQAABBBAg4OUeQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEIlSAgDdCF45pI4AAAggggAACCCCAAAIIIIAAAggggAACBLzcAwgggAACCCCAAAIIIIAAAggggAACCCCAQIQKEPBG6MIxbQQQQAABBBBAAAEEEEAAAQQQQAABBBBAgICXewABBBBAAAEEEEAAAQQQQAABBBBAAAEEEIhQAQLeCF04po0AAggggAACCCCAAAIIIIAAAggggAACCBDwcg8ggAACCCCAAAIIIIAAAggggAACCCCAAAIRKkDAG6ELx7QRQAABBBBAAAEEEEAAAQQQQAABBBBAAAECXu4BBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAgQgUIeCN04Zg2AggggAACCCCAAAIIIIAAAggggAACCCBAwMs9gAACCCCAAAIIIIAAAggggAACCCCAAAIIRKgAAW+ELhzTRgABBBBAAAEEEEAAAQQQQAABBBBAAAEECHi5BxBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgQgVIOCN0IVj2ggggAACCCCAAAIIIIAAAggggAACCCCAAAEv9wACCCCAAAIIIIAAAggggAACCCCAAAII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AggggAACCCAQCwEC3lio0yYCCCCAAAIIIIAAAggggAACCCCAAAIIIOCBAAGvB4hUgQACCCCAAAIIIIAAAggggAACCCCAAAIIxEKAgDcW6rSJAAIIIIAAAggggAACCCCAAAIIIIAAAgh4IEDA6wEiVSCAAAIIIIAAAggggAACCCCAAAIIIIAAArEQIOCNhTptIoAAAggggAACCCCAAAIIIIAAAggggAACHggQ8HqASBUIIIAAAggggAACCCCAAAIIIIAAAggggEAsBAh4Y6FOmwgggAACCCCAAAIIIIAAAggggAACCCCAgAcCBLweIFIFAggggAACCCCAAAIIIIAAAggggAACCCAQCwEC3lio0yYCCCCAAAIIIIAAAggggAACCCCAAAIIIOCBAAGvB4hUgQACCCCAAAIIIIAAAggggAACCCCAAAIIxEKAgDcW6rSJAAIIIIAAAggggAACCCCAAAIIIIAAAgh4IEDA6wEiVSCAAAIIIIAAAggggAACCCCAAAIIIIAAArEQIOCNhTptIoAAAggggAACCCCAAAIIIIAAAggggAACHggQ8HqASBUIIIAAAggggAACCCCAAAIIIIAAAggggEAsBAh4Y6FOmwgggAACCCCAAAIIIIAAAggggAACCCCAgAcCBLweIFIFAggggAACCCCAAAIIIIAAAggggAACCCAQCwEC3lio0yYCCCCAAAIIIIAAAggggAACCCCAAAIIIOCBAAGvB4hUgQACCCCAAAIIIIAAAggggAACCCCAAAIIxEKAgDcW6rSJAAIIIIAAAggggAACCCCAAAIIIIAAAgh4IEDA6wEiVSCAAAIIIIAAAggggAACCCCAAAIIIIAAArEQIOCNhTptIoAAAggggAACCCCAAAIIIIAAAggggAACHggQ8HqASBUIIIAAAggggAACCCCAAAIIIIAAAggggEAsBAh4Y6FOmwgggAACCCCAAAIIIIAAAggggAACCCCAgAcCBLweIFIFAggggAACCCCAAAIIIIAAAggggAACCCAQCwEC3lio0yYCCCCAAAIIIIAAAggggAACCCCAAAIIIOCBAAGvB4hUgQACCCCAAAIIIIAAAggggAACCCCAAAIIxEKAgDcW6rSJAAIIIIAAAggggAACCCCAAAIIIIAAAgh4IEDA6wEiVSCAAAIIIIAAAggggAACCCCAAAIIIIAAArEQIOCNhTptIoAAAggggAACCCCAAAIIIIAAAggggAACHggQ8HqASBUIIIAAAggggAACCCCAAAIIIIAAAggggEAsBAh4Y6FOmwgggAACCCCAAAIIIIAAAggggAACCCCAgAcCBLweIFIFAggggAACCCCAAAIIIIAAAggggAACCCAQCwEC3lio0yYCCCCAAAIIIIAAAggggAACCCCAAAIIIOCBAAGvB4hUgQACCCCAAAIIIIAAAggggAACCCCAAAIIxEKAgDcW6rSJAAIIIIAAAggggAACCCCAAAIIIIAAAgh4IEDA6wEiVSCAAAIIIIAAAggggAACCCCAAAIIIIAAArEQIOCNhTptIoAAAggggAACCCCAAAIIIIAAAggggAACHggQ8HqASBUIIIAAAggggAACCCCAAAIIIIAAAggggEAsBAh4Y6FOmwgggAACCCCAAAIIIIAAAggggAACCCCAgAcCBLweIFIFAggggAACCCCAAAIIIIAAAggggAACCCAQCwEC3lio0yYCCCCAAAIIIIAAAggggAACCCCAAAIIIOCBAAGvB4hUgQACCCCAAAIIIIAAAggggAACCCCAAAIIxEKAgDcW6rSJAAIIIIAAAggggAACCCCAAAIIIIAAAgh4IEDA6wEiVSCAAAIIIIAAAggggAACCCCAAAIIIIAAArEQIOCNhTptIoAAAggggAACCCCAAAIIIIAAAggggAACHggQ8HqASBUIIIAAAggggAACCCCAAAIIIIAAAggggEAsBAh4Y6FOmwgggAACCCCAAAIIIIAAAggggAACCCCAgAcCBLweIFIFAggggAACCCCAAAIIIIAAAggggAACCCAQCwEC3lio0yYCCCCAAAIIIIAAAggggAACCCCAAAIIIOCBAAGvB4hUgQACCCCAAAIIIIAAAggggAACCCCAAAIIxEKAgDcW6rSJAAIIIIAAAggggAACCCCAAAIIIIAAAgh4IEDA6wEiVSCAAAIIIIAAAggggAACCCCAAAIIIIAAArEQIOCNhTptIoAAAggggAACCCCAAAIIIIAAAggggAACHggQ8HqASBUIIIAAAggggAACCCCAAAIIIIAAAggggEAsBAh4Y6FOmwgggAACCCCAAAIIIIAAAggggAACCCCAgAcCBLweIFIFAggggAACCCCAAAIIIIAAAggggAACCCAQCwEC3lio0yYCCCCAAAIIIIAAAggggAACCCCAAAIIIOCBAAGvB4hUgQACCCCAAAIIIIAAAggggAACCCCAAAIIxEKAgDcW6rSJAAIIIIAAAggggAACCCCAAAIIIIAAAgh4IEDA6wEiVSCAAAIIIIAAAggggAACCCCAAAIIIIAAArEQIOCNhTptIoAAAggggAACCCCAAAIIIIAAAggggAACHggQ8HqASBUIIIAAAggggAACCCCAAAIIIIAAAggggEAsBP4PEDnN3qu3FrEAAAAASUVORK5CYII=", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "AI-generated follow-up questions:\n", - "\n", - "* - What are the total sales for each customer in the Asia region?\n", - "* - How many orders does each customer in the Americas region have?\n", - "* - Who are the top 5 customers with the highest total sales?\n", - "* - What is the total revenue for each customer in the Europe region?\n", - "* - Can you provide a breakdown of the number of customers in each country?\n", - "* - Which customers in the United States have the highest total sales?\n", - "* - What are the total sales for each customer in the Asia region?\n", - "* - What are the top 10 customers with the highest returned parts gross value in Africa?\n", - "* - What are the top 3 customers with the highest total sales overall?\n", - "* - Can you provide a list of the first 10 customers in the database?\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "vn.ask(\"Who are the top 2 biggest customers in each region?\")" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Run as a Web App\n", - "If you would like to use this functionality in a web app, you can deploy the Vanna Streamlit app and use your own secrets. See [this repo](https://github.com/vanna-ai/vanna-streamlit)." - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.2" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/notebooks/vn-connect-to-bigquery.ipynb b/notebooks/vn-connect-to-bigquery.ipynb deleted file mode 100644 index 5ca96996..00000000 --- a/notebooks/vn-connect-to-bigquery.ipynb +++ /dev/null @@ -1,532 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "![Vanna AI](https://img.vanna.ai/vanna-ask.svg)\n", - "\n", - "The following notebook goes through the process of connecting to your gcs using bigquery connector and running sql queries usig Vanna AI. For demo purpose we are using one the google's example queries.\n", - "\n", - "# Install Vanna\n", - "First we install Vanna from [PyPI](https://pypi.org/project/vanna/) and import it.\n", - "Here, we'll install vanna with extra postgres. If you're using a different database, you'll need to install the appropriate extras." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "%pip install vanna[bigquery]" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import vanna as vn" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Set Database Connection\n", - "These details are only referenced within your notebook. These database credentials are never sent to Vanna's severs.\n", - "You need to set:\n", - "`PROJECT_ID`.\n", - "in your environment. By default vanna will look for the pre-set google ADC but if it is not pre-set, you'll also need to provide service account credentials json file path. we can also provide parameters `cred_file_path` `project_id` to the method." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Not using Google Colab.\n" - ] - } - ], - "source": [ - "vn.connect_to_bigquery()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "or if you are using service account you can provide credentials json file path:" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "cred_file_path = \"provide/creds/path.json\"\n", - "vn.connect_to_bigquery(cred_file_path=cred_file_path)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Note: \n", - "You need to add `PROJECT_ID` to your environment or you can pass it as `project_id` in above method as a parameter" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Get Results\n", - "This gets the SQL run it and prints it's result as a dataframe. Note that we use your provided credentials to execute the SQL on your warehouse from your local instance. Your connection nor your data gets sent to Vanna's servers. For more info on how Vanna works, [see this post](https://medium.com/vanna-ai/how-vanna-works-how-to-train-it-data-security-8d8f2008042). We will be using google demo sql below. Note that below SQL only works for the google demo data." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
submitter_idcase_iddiag__treat__countprimary_sitedisease_typeproj__nameproj__project_iddemo__demographic_iddemo__genderdemo__race...exp__bmiexp__years_smokedexp__pack_years_smokedexp__cigarettes_per_dayexp__alcohol_historyexp__stateexp__created_datetimeexp__updated_datetimestateupdated_datetime
0TCGA-CN-5363291b069c-9dde-4e1e-8430-85146bc943382LarynxSquamous Cell NeoplasmsHead and Neck Squamous Cell CarcinomaTCGA-HNSC2611cb61-6d05-5286-b94a-ce6cac2ba37bmaleblack or african american...NaNNaN15.00.821918YesreleasedNone2019-07-31T18:43:25.167078-05:00released2019-08-06T14:25:25.511101-05:00
1TCGA-CN-53654cffea0b-90a7-4c86-a73f-bb8feca3ada72TonsilSquamous Cell NeoplasmsHead and Neck Squamous Cell CarcinomaTCGA-HNSC97a7f69b-0f40-5450-bbeb-92084a100a9dmalewhite...NaNNaN26.01.424658YesreleasedNone2019-07-31T19:39:51.442671-05:00released2019-08-06T14:25:25.511101-05:00
2TCGA-CN-A642a1ded1e8-eb28-49dd-8f3d-1ce8f40eed8f2Other and unspecified parts of tongueSquamous Cell NeoplasmsHead and Neck Squamous Cell CarcinomaTCGA-HNSC4bc58619-47fc-5c2d-aaec-9d9e562e049bmalewhite...NaNNaN5.00.273973YesreleasedNone2019-07-31T19:30:27.901248-05:00released2019-08-06T14:25:39.854271-05:00
3TCGA-CR-738053b254b7-021f-43df-af9b-3fc01b87479e2Other and ill-defined sites in lip, oral cavit...Squamous Cell NeoplasmsHead and Neck Squamous Cell CarcinomaTCGA-HNSCbe41a712-ebee-52e1-907c-80b1917daa45malewhite...NaNNaNNaNNaNYesreleasedNone2019-07-31T19:40:20.032260-05:00released2019-08-06T14:26:05.315718-05:00
4TCGA-CV-5978e16e9535-b20f-4c9a-8b5b-82df80c994482LarynxSquamous Cell NeoplasmsHead and Neck Squamous Cell CarcinomaTCGA-HNSC92d1d967-c8a0-52cb-a62d-1d11bdf85068femaleblack or african american...NaNNaNNaNNaNYesreleasedNone2019-07-31T19:52:06.976359-05:00released2019-08-06T14:26:05.315718-05:00
5TCGA-CV-6948fcf0dc48-b889-4593-a15b-aa715aae7bf52Floor of mouthSquamous Cell NeoplasmsHead and Neck Squamous Cell CarcinomaTCGA-HNSC2fd1a926-7584-50d5-b6b7-9b9d02710f47femalewhite...NaNNaNNaNNaNNoreleasedNone2019-07-31T19:55:16.152855-05:00released2019-08-06T14:26:16.536997-05:00
6TCGA-CV-7409acd98e20-d2da-4256-99a5-13e261bc88e62Other and ill-defined sites in lip, oral cavit...Squamous Cell NeoplasmsHead and Neck Squamous Cell CarcinomaTCGA-HNSC2a3f5bb4-3606-5549-8d85-ec413eadd7abmaleblack or african american...NaNNaNNaNNaNNoreleasedNone2019-07-31T19:48:25.311492-05:00released2019-08-06T14:26:28.608672-05:00
7TCGA-CV-A6JUb1b3983d-37d2-4bef-bd17-708e3e6001462Other and unspecified parts of tongueSquamous Cell NeoplasmsHead and Neck Squamous Cell CarcinomaTCGA-HNSC604e3dac-30be-589d-b622-df0b41cd9a7ffemalewhite...NaNNaN81.04.438356YesreleasedNone2019-07-31T19:48:40.594893-05:00released2019-08-06T14:26:39.780396-05:00
8TCGA-QK-A6IHc1f286f6-d4a1-494a-88c8-ff8e2a3df2ce2GumSquamous Cell NeoplasmsHead and Neck Squamous Cell CarcinomaTCGA-HNSC83e5c705-bd2e-5516-9700-ed3803dde268femalewhite...NaNNaNNaNNaNYesreleasedNone2019-07-31T19:49:42.057478-05:00released2019-08-06T14:27:02.392779-05:00
9TCGA-QK-A8Z8ac511727-185b-4ac0-b6c0-dc3a79657be62LarynxSquamous Cell NeoplasmsHead and Neck Squamous Cell CarcinomaTCGA-HNSCfd1e46fb-43bb-54ae-b713-a579ba857ed4femaleblack or african american...NaNNaN80.04.383562YesreleasedNone2019-07-31T19:48:22.125112-05:00released2019-08-06T14:27:02.392779-05:00
\n", - "

10 rows × 70 columns

\n", - "
" - ], - "text/plain": [ - " submitter_id case_id diag__treat__count \\\n", - "0 TCGA-CN-5363 291b069c-9dde-4e1e-8430-85146bc94338 2 \n", - "1 TCGA-CN-5365 4cffea0b-90a7-4c86-a73f-bb8feca3ada7 2 \n", - "2 TCGA-CN-A642 a1ded1e8-eb28-49dd-8f3d-1ce8f40eed8f 2 \n", - "3 TCGA-CR-7380 53b254b7-021f-43df-af9b-3fc01b87479e 2 \n", - "4 TCGA-CV-5978 e16e9535-b20f-4c9a-8b5b-82df80c99448 2 \n", - "5 TCGA-CV-6948 fcf0dc48-b889-4593-a15b-aa715aae7bf5 2 \n", - "6 TCGA-CV-7409 acd98e20-d2da-4256-99a5-13e261bc88e6 2 \n", - "7 TCGA-CV-A6JU b1b3983d-37d2-4bef-bd17-708e3e600146 2 \n", - "8 TCGA-QK-A6IH c1f286f6-d4a1-494a-88c8-ff8e2a3df2ce 2 \n", - "9 TCGA-QK-A8Z8 ac511727-185b-4ac0-b6c0-dc3a79657be6 2 \n", - "\n", - " primary_site disease_type \\\n", - "0 Larynx Squamous Cell Neoplasms \n", - "1 Tonsil Squamous Cell Neoplasms \n", - "2 Other and unspecified parts of tongue Squamous Cell Neoplasms \n", - "3 Other and ill-defined sites in lip, oral cavit... Squamous Cell Neoplasms \n", - "4 Larynx Squamous Cell Neoplasms \n", - "5 Floor of mouth Squamous Cell Neoplasms \n", - "6 Other and ill-defined sites in lip, oral cavit... Squamous Cell Neoplasms \n", - "7 Other and unspecified parts of tongue Squamous Cell Neoplasms \n", - "8 Gum Squamous Cell Neoplasms \n", - "9 Larynx Squamous Cell Neoplasms \n", - "\n", - " proj__name proj__project_id \\\n", - "0 Head and Neck Squamous Cell Carcinoma TCGA-HNSC \n", - "1 Head and Neck Squamous Cell Carcinoma TCGA-HNSC \n", - "2 Head and Neck Squamous Cell Carcinoma TCGA-HNSC \n", - "3 Head and Neck Squamous Cell Carcinoma TCGA-HNSC \n", - "4 Head and Neck Squamous Cell Carcinoma TCGA-HNSC \n", - "5 Head and Neck Squamous Cell Carcinoma TCGA-HNSC \n", - "6 Head and Neck Squamous Cell Carcinoma TCGA-HNSC \n", - "7 Head and Neck Squamous Cell Carcinoma TCGA-HNSC \n", - "8 Head and Neck Squamous Cell Carcinoma TCGA-HNSC \n", - "9 Head and Neck Squamous Cell Carcinoma TCGA-HNSC \n", - "\n", - " demo__demographic_id demo__gender \\\n", - "0 2611cb61-6d05-5286-b94a-ce6cac2ba37b male \n", - "1 97a7f69b-0f40-5450-bbeb-92084a100a9d male \n", - "2 4bc58619-47fc-5c2d-aaec-9d9e562e049b male \n", - "3 be41a712-ebee-52e1-907c-80b1917daa45 male \n", - "4 92d1d967-c8a0-52cb-a62d-1d11bdf85068 female \n", - "5 2fd1a926-7584-50d5-b6b7-9b9d02710f47 female \n", - "6 2a3f5bb4-3606-5549-8d85-ec413eadd7ab male \n", - "7 604e3dac-30be-589d-b622-df0b41cd9a7f female \n", - "8 83e5c705-bd2e-5516-9700-ed3803dde268 female \n", - "9 fd1e46fb-43bb-54ae-b713-a579ba857ed4 female \n", - "\n", - " demo__race ... exp__bmi exp__years_smoked \\\n", - "0 black or african american ... NaN NaN \n", - "1 white ... NaN NaN \n", - "2 white ... NaN NaN \n", - "3 white ... NaN NaN \n", - "4 black or african american ... NaN NaN \n", - "5 white ... NaN NaN \n", - "6 black or african american ... NaN NaN \n", - "7 white ... NaN NaN \n", - "8 white ... NaN NaN \n", - "9 black or african american ... NaN NaN \n", - "\n", - " exp__pack_years_smoked exp__cigarettes_per_day exp__alcohol_history \\\n", - "0 15.0 0.821918 Yes \n", - "1 26.0 1.424658 Yes \n", - "2 5.0 0.273973 Yes \n", - "3 NaN NaN Yes \n", - "4 NaN NaN Yes \n", - "5 NaN NaN No \n", - "6 NaN NaN No \n", - "7 81.0 4.438356 Yes \n", - "8 NaN NaN Yes \n", - "9 80.0 4.383562 Yes \n", - "\n", - " exp__state exp__created_datetime exp__updated_datetime \\\n", - "0 released None 2019-07-31T18:43:25.167078-05:00 \n", - "1 released None 2019-07-31T19:39:51.442671-05:00 \n", - "2 released None 2019-07-31T19:30:27.901248-05:00 \n", - "3 released None 2019-07-31T19:40:20.032260-05:00 \n", - "4 released None 2019-07-31T19:52:06.976359-05:00 \n", - "5 released None 2019-07-31T19:55:16.152855-05:00 \n", - "6 released None 2019-07-31T19:48:25.311492-05:00 \n", - "7 released None 2019-07-31T19:48:40.594893-05:00 \n", - "8 released None 2019-07-31T19:49:42.057478-05:00 \n", - "9 released None 2019-07-31T19:48:22.125112-05:00 \n", - "\n", - " state updated_datetime \n", - "0 released 2019-08-06T14:25:25.511101-05:00 \n", - "1 released 2019-08-06T14:25:25.511101-05:00 \n", - "2 released 2019-08-06T14:25:39.854271-05:00 \n", - "3 released 2019-08-06T14:26:05.315718-05:00 \n", - "4 released 2019-08-06T14:26:05.315718-05:00 \n", - "5 released 2019-08-06T14:26:16.536997-05:00 \n", - "6 released 2019-08-06T14:26:28.608672-05:00 \n", - "7 released 2019-08-06T14:26:39.780396-05:00 \n", - "8 released 2019-08-06T14:27:02.392779-05:00 \n", - "9 released 2019-08-06T14:27:02.392779-05:00 \n", - "\n", - "[10 rows x 70 columns]" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sql=\"\"\"SELECT *\n", - "FROM `isb-cgc-bq.TCGA_versioned.clinical_gdc_r24`\n", - "LIMIT 10\"\"\"\n", - "vn.run_sql(sql=sql)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Run as a Web App\n", - "If you would like to use this functionality in a web app, you can deploy the Vanna Streamlit app and use your own secrets. See [this repo](https://github.com/vanna-ai/vanna-streamlit)." - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.12" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/notebooks/vn-connect-to-postgres.ipynb b/notebooks/vn-connect-to-postgres.ipynb deleted file mode 100644 index 64eae9b0..00000000 --- a/notebooks/vn-connect-to-postgres.ipynb +++ /dev/null @@ -1,1336 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "![Vanna AI](https://img.vanna.ai/vanna-ask.svg)\n", - "\n", - "The following notebook goes through the process of connecting to your postgres database and running sql queries usig Vanna AI. Here we use a demo connection(https://rnacentral.org/help/public-database)\n", - "\n", - "# Install Vanna\n", - "First we install Vanna from [PyPI](https://pypi.org/project/vanna/) and import it.\n", - "Here, we'll install vanna with extra postgres. If you're using a different database, you'll need to install the appropriate extras." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "%pip install vanna[postgres]" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import vanna as vn" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Set Database Connection\n", - "These details are only referenced within your notebook. These database credentials are never sent to Vanna's severs.\n", - "You need to set:\n", - "`Host`\n", - "`DATABASE`\n", - "`PG_USER`\n", - "`PASSWORD`\n", - "`PORT`\n", - "in your environment. Example connection you can use: `HOST=hh-pgsql-public.ebi.ac.uk` `DATABASE=pfmegrnargs` `PG_USER=reader` `PASSWORD=NWDMCE5xdipIjRrp` `PORT=5432`" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "vn.connect_to_postgres()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Or we can provide credentials as parameters `host` `dbname` `user` `password` `port` in above method." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Get Results\n", - "This gets the SQL run it and prints it's result as a dataframe. Note that we use your connection string to execute the SQL on your warehouse from your local instance. Your connection nor your data gets sent to Vanna's servers. For more info on how Vanna works, [see this post](https://medium.com/vanna-ai/how-vanna-works-how-to-train-it-data-security-8d8f2008042). We will be using example sql below. Note: below SQL only works for the above demo connection." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idtimestampuserstampdescrcurrent_releasefull_descralivefor_releasedisplay_nameproject_idavg_lengthmin_lengthmax_lengthnum_sequencesnum_organisms
052017-05-17 00:00:00.000000RNACENVEGA98VEGANNoneVEGAPRJEB4568NaNNaNNaN00
112017-05-01 00:00:00.000000RNACENENA731ENAYNoneENANone412.010.0900074.012086180814855
2262017-05-01 00:00:00.000000RNACENGENCODE450GENCODENNoneGENCODENone889.032.0205012.0476772
332017-05-01 00:00:00.000000RNACENSRPDB732SRPDBYNoneSRPDBPRJEB4384173.030.0533.0503684
4152017-05-02 00:00:00.000000RNACENWORMBASE735WormBaseYNoneWormBasePRJNA13758174.017.084141.0261161
5242017-05-02 00:00:00.000000RNACENFLYBASE739FlyBaseYNoneFlyBasePRJ_FLY765.018.021216.042101
6142017-05-01 00:00:00.000000RNACENTAIR720TAIRYNoneTAIRPRJ_TAIR384.019.06227.044061
722017-05-01 00:00:00.000000RNACENRFAM635RFAMYNoneRfamNone135.024.011047.0187208114735
8252017-05-11 00:00:00.000000RNACENENSEMBL721EnsemblYNoneEnsemblNone908.020.0347561.01294678264
9522022-12-21 11:20:36.071013RNACENRIBOCENTRE729RibocentreYNoneRibocentreNone67.028.01619.01517705536
10532023-01-24 11:56:51.648817RNACENEVLNCRNAS730EVLncRNAsYNoneEVLncRNAsNone2311.0199.0205012.09333
1162017-05-01 00:00:00.000000RNACENTMRNA_WEB414tmRNA WebsiteYNonetmRNA WebsitePRJEB4570335.023.0644.028577560
12512022-09-22 15:14:59.500143RNACENEXPRESSION_ATLAS636Expression AtlasYNoneExpression AtlasNone953.072.032709.0110303
13352017-05-01 00:00:00.000000RNACENENSEMBL_PROTISTS724Ensembl ProtistsYNoneEnsembl ProtistsNone212.011.07940.0526132
14362017-05-01 00:00:00.000000RNACENENSEMBL_FUNGI725Ensembl FungiYNoneEnsembl FungiNone210.019.016569.01581762
15222017-05-01 00:00:00.000000RNACENMODOMICS92ModomicsYNoneModomicsNone140.054.05025.031960
16202017-05-01 00:00:00.000000RNACENLNCIPEDIA612LNCipediaYNoneLNCipediaNone1534.0200.0152544.01268761
17282017-05-01 00:00:00.000000RNACENRGD194Rat Genome DatabaseYNoneRGDNone2340.049.027956.0111241
18272017-10-23 00:00:00.000000RNACENMGI174Mouse Genome DatabaseYNoneMGINone851.021.084395.0167191
19502022-08-16 15:52:33.990145RNACENPLNCDB606PLncDBYNonePLncDBNone6659.0199.0985945.093692680
20492017-05-01 00:00:00.000000RNACENRIBOVISION560RiboVisionYNoneRiboVisionNone1676.030.05070.03615
21422017-05-01 00:00:00.000000RNACENINTACT740IntActYNoneIntActNone705.018.093092.03869
22482017-05-01 00:00:00.000000RNACENPSICQUIC632PSICQUICYNonePSICQUICNone2251.021.084395.0958
23342017-05-01 00:00:00.000000RNACENENSEMBL_METAZOA723Ensembl MetazoaYNoneEnsembl MetazoaNone712.018.046956.0285241152
24402017-05-01 00:00:00.000000RNACENMALACARDS726MalaCardsYNoneMalaCardsNone1861.016.0220253.0571291
25412017-05-01 00:00:00.000000RNACENGENECARDS727MalaCardsYNoneGeneCardsNone1301.016.0347561.05153651
26472017-05-01 00:00:00.000000RNACENENSEMBL_GENCODE728ENSEMBL_GENCODEYNoneEnsembl/GENCODENone1274.032.0347561.0760952
27192017-05-01 00:00:00.000000RNACENDICTYBASE86dictyBaseYNonedictyBasePRJ_DICTY82.032.01060.01491
28122017-05-01 00:00:00.000000RNACENSNOPY511snOPYYNonesnOPYPRJEB8122117.042.01004.025017
29462017-05-01 00:00:00.000000RNACENPIRBASE485piRBaseYNonepiRBaseNone28.015.040.020082717
30452017-05-01 00:00:00.000000RNACENCRW593CRWYNoneCRWNone1365.0107.04381.0934685
3182017-05-01 00:00:00.000000RNACENGTRNADB733GtRNAdbYNoneGtRNAdbPRJEB517376.053.0356.0930984337
3292017-05-01 00:00:00.000000RNACENREFSEQ719RefSeqYNoneRefSeqNone637.015.091671.010797622247
33312017-05-01 00:00:00.000000RNACENENSEMBL_PLANTS722Ensembl PlantsYNoneEnsembl PlantsNone279.015.079788.07642859
34432017-05-01 00:00:00.000000RNACENSNORNADB446snoRNA DatabaseYNonesnoRNA DatabaseNone50.045.074.068010
35102017-05-01 00:00:00.000000RNACENRDP85RDPYNoneRDPNone1536.01337.01600.047792487
3672017-05-01 00:00:00.000000RNACENLNCRNADB464lncRNAdbYNonelncRNAdbPRJEB62383086.061.032753.06210
37392017-05-01 00:00:00.000000RNACENMIRGENEDB559MirGeneDBYNoneMirGeneDBNone41.020.0282.01890175
38172017-05-01 00:00:00.000000RNACENSILVA610SILVAYNoneSILVANone1080.0300.04997.08193988665540
39302017-05-01 00:00:00.000000RNACENZWD615ZWDYNoneZWDNone86.021.0951.0443326763
40332017-05-01 00:00:00.000000RNACENLNCBOOK616LncBookYNoneLncBookNone1686.054.0205012.03225521
41112017-05-01 00:00:00.000000RNACENPDBE734PDBeYNonePDBeNone591.010.019000.03760382
42162017-05-01 00:00:00.000000RNACENSGD736SGDYNoneSGDPRJ_SGD243.058.06858.02121
43182017-05-01 00:00:00.000000RNACENPOMBASE737PomBaseYNonePomBasePRJNA13836179.047.03485.02001
44232017-05-01 00:00:00.000000RNACENHGNC738HUGO Gene Nomenclature CommitteeYNoneHGNCNone1058.033.0205012.084381
45442017-05-01 00:00:00.000000RNACENZFIN741ZFINYNoneZFINNone907.083.013525.010251
46372017-05-01 00:00:00.000000RNACENSNODB444snoDBYNonesnoDBNone117.033.0791.019701
47132017-05-01 00:00:00.000000RNACENGREENGENES71GreengenesYNoneGreengenesNone1403.01253.02368.0100489292684
48382017-05-01 00:00:00.000000RNACEN5SRRNADB3875SrRNAdbYNone5SrRNAdbNone120.095.0180.094877158
49322017-05-01 00:00:00.000000RNACENLNCBASE248LncBaseYNoneLncBaseNone22.017.026.011512
50292017-05-01 00:00:00.000000RNACENTARBASE223TarBaseYNoneTarBaseNone22.016.027.012912
5142017-05-01 00:00:00.000000RNACENMIRBASE435MIRBASEYNonemiRBasePRJEB445155.015.02354.065389271
52212017-05-02 00:00:00.000000RNACENNONCODE146NONCODEYNoneNONCODENone1130.0201.0244296.02346697
\n", - "
" - ], - "text/plain": [ - " id timestamp userstamp descr \\\n", - "0 5 2017-05-17 00:00:00.000000 RNACEN VEGA \n", - "1 1 2017-05-01 00:00:00.000000 RNACEN ENA \n", - "2 26 2017-05-01 00:00:00.000000 RNACEN GENCODE \n", - "3 3 2017-05-01 00:00:00.000000 RNACEN SRPDB \n", - "4 15 2017-05-02 00:00:00.000000 RNACEN WORMBASE \n", - "5 24 2017-05-02 00:00:00.000000 RNACEN FLYBASE \n", - "6 14 2017-05-01 00:00:00.000000 RNACEN TAIR \n", - "7 2 2017-05-01 00:00:00.000000 RNACEN RFAM \n", - "8 25 2017-05-11 00:00:00.000000 RNACEN ENSEMBL \n", - "9 52 2022-12-21 11:20:36.071013 RNACEN RIBOCENTRE \n", - "10 53 2023-01-24 11:56:51.648817 RNACEN EVLNCRNAS \n", - "11 6 2017-05-01 00:00:00.000000 RNACEN TMRNA_WEB \n", - "12 51 2022-09-22 15:14:59.500143 RNACEN EXPRESSION_ATLAS \n", - "13 35 2017-05-01 00:00:00.000000 RNACEN ENSEMBL_PROTISTS \n", - "14 36 2017-05-01 00:00:00.000000 RNACEN ENSEMBL_FUNGI \n", - "15 22 2017-05-01 00:00:00.000000 RNACEN MODOMICS \n", - "16 20 2017-05-01 00:00:00.000000 RNACEN LNCIPEDIA \n", - "17 28 2017-05-01 00:00:00.000000 RNACEN RGD \n", - "18 27 2017-10-23 00:00:00.000000 RNACEN MGI \n", - "19 50 2022-08-16 15:52:33.990145 RNACEN PLNCDB \n", - "20 49 2017-05-01 00:00:00.000000 RNACEN RIBOVISION \n", - "21 42 2017-05-01 00:00:00.000000 RNACEN INTACT \n", - "22 48 2017-05-01 00:00:00.000000 RNACEN PSICQUIC \n", - "23 34 2017-05-01 00:00:00.000000 RNACEN ENSEMBL_METAZOA \n", - "24 40 2017-05-01 00:00:00.000000 RNACEN MALACARDS \n", - "25 41 2017-05-01 00:00:00.000000 RNACEN GENECARDS \n", - "26 47 2017-05-01 00:00:00.000000 RNACEN ENSEMBL_GENCODE \n", - "27 19 2017-05-01 00:00:00.000000 RNACEN DICTYBASE \n", - "28 12 2017-05-01 00:00:00.000000 RNACEN SNOPY \n", - "29 46 2017-05-01 00:00:00.000000 RNACEN PIRBASE \n", - "30 45 2017-05-01 00:00:00.000000 RNACEN CRW \n", - "31 8 2017-05-01 00:00:00.000000 RNACEN GTRNADB \n", - "32 9 2017-05-01 00:00:00.000000 RNACEN REFSEQ \n", - "33 31 2017-05-01 00:00:00.000000 RNACEN ENSEMBL_PLANTS \n", - "34 43 2017-05-01 00:00:00.000000 RNACEN SNORNADB \n", - "35 10 2017-05-01 00:00:00.000000 RNACEN RDP \n", - "36 7 2017-05-01 00:00:00.000000 RNACEN LNCRNADB \n", - "37 39 2017-05-01 00:00:00.000000 RNACEN MIRGENEDB \n", - "38 17 2017-05-01 00:00:00.000000 RNACEN SILVA \n", - "39 30 2017-05-01 00:00:00.000000 RNACEN ZWD \n", - "40 33 2017-05-01 00:00:00.000000 RNACEN LNCBOOK \n", - "41 11 2017-05-01 00:00:00.000000 RNACEN PDBE \n", - "42 16 2017-05-01 00:00:00.000000 RNACEN SGD \n", - "43 18 2017-05-01 00:00:00.000000 RNACEN POMBASE \n", - "44 23 2017-05-01 00:00:00.000000 RNACEN HGNC \n", - "45 44 2017-05-01 00:00:00.000000 RNACEN ZFIN \n", - "46 37 2017-05-01 00:00:00.000000 RNACEN SNODB \n", - "47 13 2017-05-01 00:00:00.000000 RNACEN GREENGENES \n", - "48 38 2017-05-01 00:00:00.000000 RNACEN 5SRRNADB \n", - "49 32 2017-05-01 00:00:00.000000 RNACEN LNCBASE \n", - "50 29 2017-05-01 00:00:00.000000 RNACEN TARBASE \n", - "51 4 2017-05-01 00:00:00.000000 RNACEN MIRBASE \n", - "52 21 2017-05-02 00:00:00.000000 RNACEN NONCODE \n", - "\n", - " current_release full_descr alive for_release \\\n", - "0 98 VEGA N None \n", - "1 731 ENA Y None \n", - "2 450 GENCODE N None \n", - "3 732 SRPDB Y None \n", - "4 735 WormBase Y None \n", - "5 739 FlyBase Y None \n", - "6 720 TAIR Y None \n", - "7 635 RFAM Y None \n", - "8 721 Ensembl Y None \n", - "9 729 Ribocentre Y None \n", - "10 730 EVLncRNAs Y None \n", - "11 414 tmRNA Website Y None \n", - "12 636 Expression Atlas Y None \n", - "13 724 Ensembl Protists Y None \n", - "14 725 Ensembl Fungi Y None \n", - "15 92 Modomics Y None \n", - "16 612 LNCipedia Y None \n", - "17 194 Rat Genome Database Y None \n", - "18 174 Mouse Genome Database Y None \n", - "19 606 PLncDB Y None \n", - "20 560 RiboVision Y None \n", - "21 740 IntAct Y None \n", - "22 632 PSICQUIC Y None \n", - "23 723 Ensembl Metazoa Y None \n", - "24 726 MalaCards Y None \n", - "25 727 MalaCards Y None \n", - "26 728 ENSEMBL_GENCODE Y None \n", - "27 86 dictyBase Y None \n", - "28 511 snOPY Y None \n", - "29 485 piRBase Y None \n", - "30 593 CRW Y None \n", - "31 733 GtRNAdb Y None \n", - "32 719 RefSeq Y None \n", - "33 722 Ensembl Plants Y None \n", - "34 446 snoRNA Database Y None \n", - "35 85 RDP Y None \n", - "36 464 lncRNAdb Y None \n", - "37 559 MirGeneDB Y None \n", - "38 610 SILVA Y None \n", - "39 615 ZWD Y None \n", - "40 616 LncBook Y None \n", - "41 734 PDBe Y None \n", - "42 736 SGD Y None \n", - "43 737 PomBase Y None \n", - "44 738 HUGO Gene Nomenclature Committee Y None \n", - "45 741 ZFIN Y None \n", - "46 444 snoDB Y None \n", - "47 71 Greengenes Y None \n", - "48 387 5SrRNAdb Y None \n", - "49 248 LncBase Y None \n", - "50 223 TarBase Y None \n", - "51 435 MIRBASE Y None \n", - "52 146 NONCODE Y None \n", - "\n", - " display_name project_id avg_length min_length max_length \\\n", - "0 VEGA PRJEB4568 NaN NaN NaN \n", - "1 ENA None 412.0 10.0 900074.0 \n", - "2 GENCODE None 889.0 32.0 205012.0 \n", - "3 SRPDB PRJEB4384 173.0 30.0 533.0 \n", - "4 WormBase PRJNA13758 174.0 17.0 84141.0 \n", - "5 FlyBase PRJ_FLY 765.0 18.0 21216.0 \n", - "6 TAIR PRJ_TAIR 384.0 19.0 6227.0 \n", - "7 Rfam None 135.0 24.0 11047.0 \n", - "8 Ensembl None 908.0 20.0 347561.0 \n", - "9 Ribocentre None 67.0 28.0 1619.0 \n", - "10 EVLncRNAs None 2311.0 199.0 205012.0 \n", - "11 tmRNA Website PRJEB4570 335.0 23.0 644.0 \n", - "12 Expression Atlas None 953.0 72.0 32709.0 \n", - "13 Ensembl Protists None 212.0 11.0 7940.0 \n", - "14 Ensembl Fungi None 210.0 19.0 16569.0 \n", - "15 Modomics None 140.0 54.0 5025.0 \n", - "16 LNCipedia None 1534.0 200.0 152544.0 \n", - "17 RGD None 2340.0 49.0 27956.0 \n", - "18 MGI None 851.0 21.0 84395.0 \n", - "19 PLncDB None 6659.0 199.0 985945.0 \n", - "20 RiboVision None 1676.0 30.0 5070.0 \n", - "21 IntAct None 705.0 18.0 93092.0 \n", - "22 PSICQUIC None 2251.0 21.0 84395.0 \n", - "23 Ensembl Metazoa None 712.0 18.0 46956.0 \n", - "24 MalaCards None 1861.0 16.0 220253.0 \n", - "25 GeneCards None 1301.0 16.0 347561.0 \n", - "26 Ensembl/GENCODE None 1274.0 32.0 347561.0 \n", - "27 dictyBase PRJ_DICTY 82.0 32.0 1060.0 \n", - "28 snOPY PRJEB8122 117.0 42.0 1004.0 \n", - "29 piRBase None 28.0 15.0 40.0 \n", - "30 CRW None 1365.0 107.0 4381.0 \n", - "31 GtRNAdb PRJEB5173 76.0 53.0 356.0 \n", - "32 RefSeq None 637.0 15.0 91671.0 \n", - "33 Ensembl Plants None 279.0 15.0 79788.0 \n", - "34 snoRNA Database None 50.0 45.0 74.0 \n", - "35 RDP None 1536.0 1337.0 1600.0 \n", - "36 lncRNAdb PRJEB6238 3086.0 61.0 32753.0 \n", - "37 MirGeneDB None 41.0 20.0 282.0 \n", - "38 SILVA None 1080.0 300.0 4997.0 \n", - "39 ZWD None 86.0 21.0 951.0 \n", - "40 LncBook None 1686.0 54.0 205012.0 \n", - "41 PDBe None 591.0 10.0 19000.0 \n", - "42 SGD PRJ_SGD 243.0 58.0 6858.0 \n", - "43 PomBase PRJNA13836 179.0 47.0 3485.0 \n", - "44 HGNC None 1058.0 33.0 205012.0 \n", - "45 ZFIN None 907.0 83.0 13525.0 \n", - "46 snoDB None 117.0 33.0 791.0 \n", - "47 Greengenes None 1403.0 1253.0 2368.0 \n", - "48 5SrRNAdb None 120.0 95.0 180.0 \n", - "49 LncBase None 22.0 17.0 26.0 \n", - "50 TarBase None 22.0 16.0 27.0 \n", - "51 miRBase PRJEB4451 55.0 15.0 2354.0 \n", - "52 NONCODE None 1130.0 201.0 244296.0 \n", - "\n", - " num_sequences num_organisms \n", - "0 0 0 \n", - "1 12086180 814855 \n", - "2 47677 2 \n", - "3 503 684 \n", - "4 26116 1 \n", - "5 4210 1 \n", - "6 4406 1 \n", - "7 1872081 14735 \n", - "8 1294678 264 \n", - "9 151770 5536 \n", - "10 933 3 \n", - "11 2857 7560 \n", - "12 11030 3 \n", - "13 5261 32 \n", - "14 15817 62 \n", - "15 319 60 \n", - "16 126876 1 \n", - "17 11124 1 \n", - "18 16719 1 \n", - "19 936926 80 \n", - "20 36 15 \n", - "21 386 9 \n", - "22 95 8 \n", - "23 285241 152 \n", - "24 57129 1 \n", - "25 515365 1 \n", - "26 76095 2 \n", - "27 149 1 \n", - "28 2501 7 \n", - "29 200827 17 \n", - "30 934 685 \n", - "31 93098 4337 \n", - "32 107976 22247 \n", - "33 76428 59 \n", - "34 680 10 \n", - "35 4779 2487 \n", - "36 62 10 \n", - "37 18901 75 \n", - "38 8193988 665540 \n", - "39 44332 6763 \n", - "40 322552 1 \n", - "41 3760 382 \n", - "42 212 1 \n", - "43 200 1 \n", - "44 8438 1 \n", - "45 1025 1 \n", - "46 1970 1 \n", - "47 1004892 92684 \n", - "48 9487 7158 \n", - "49 1151 2 \n", - "50 1291 2 \n", - "51 65389 271 \n", - "52 234669 7 " - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "vn.run_sql(sql=\"SELECT * FROM rnc_database\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Run as a Web App\n", - "If you would like to use this functionality in a web app, you can deploy the Vanna Streamlit app and use your own secrets. See [this repo](https://github.com/vanna-ai/vanna-streamlit)." - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.12" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/notebooks/vn-train.ipynb b/notebooks/vn-train.ipynb deleted file mode 100644 index 56428bf9..00000000 --- a/notebooks/vn-train.ipynb +++ /dev/null @@ -1,394 +0,0 @@ -{ - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "# Install Vanna\n", - "First we install Vanna from [PyPI](https://pypi.org/project/vanna/) and import it.\n", - "Here, we'll also install the Snowflake connector. If you're using a different database, you'll need to install the appropriate connector." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%pip install vanna\n", - "%pip install snowflake-connector-python" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import vanna as vn\n", - "import snowflake.connector" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Login\n", - "Creating a login and getting an API key is as easy as entering your email (after you run this cell) and entering the code we send to you. Check your Spam folder if you don't see the code." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "api_key = vn.get_api_key('my-email@example.com')\n", - "vn.set_api_key(api_key)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Set your Model\n", - "You need to choose a globally unique model name. Try using your company name or another unique string. All data from models are isolated - there's no leakage." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "vn.set_model('my-model') # Enter your model name here. This is a globally unique identifier for your model." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Automatic Training\n", - "If you'd like to use automatic training, the Vanna package can crawl your database to fetch metadata to train your model. You can put in your Snowflake credentials here. These details are only referenced within your notebook. These database credentials are never sent to Vanna's severs." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "vn.connect_to_snowflake(account='my-account', username='my-username', password='my-password', database='my-database')" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Trying query history\n", - "Trying INFORMATION_SCHEMA.COLUMNS for SNOWFLAKE_SAMPLE_DATA\n" - ] - }, - { - "data": { - "text/plain": [ - "Train on SQL: What are the top 10 customers ranked by total sales?\n", - "Train on SQL: What are the top 10 customers in terms of total sales?\n", - "Train on SQL: What are the top two customers with the highest total sales for each region?\n", - "Train on SQL: What are the top 5 customers with the highest total sales?\n", - "Train on SQL: What is the total quantity of each product sold in each region, ordered by region name and total quantity in descending order?\n", - "Train on SQL: What is the number of orders for each week, starting from the most recent week?\n", - "Train on SQL: What countries are in the region 'EUROPE'?\n", - "Train on Information Schema: SNOWFLAKE_SAMPLE_DATA.TPCH_SF1 SUPPLIER\n", - "Train on Information Schema: SNOWFLAKE_SAMPLE_DATA.TPCH_SF1 LINEITEM\n", - "Train on Information Schema: SNOWFLAKE_SAMPLE_DATA.TPCH_SF1 CUSTOMER\n", - "Train on Information Schema: SNOWFLAKE_SAMPLE_DATA.TPCH_SF1 PARTSUPP\n", - "Train on Information Schema: SNOWFLAKE_SAMPLE_DATA.TPCH_SF1 PART\n", - "Train on Information Schema: SNOWFLAKE_SAMPLE_DATA.TPCH_SF1 ORDERS\n", - "Train on Information Schema: SNOWFLAKE_SAMPLE_DATA.TPCH_SF1 REGION\n", - "Train on Information Schema: SNOWFLAKE_SAMPLE_DATA.TPCH_SF1 NATION" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "training_plan = vn.get_training_plan_experimental(filter_databases=['SNOWFLAKE_SAMPLE_DATA'], filter_schemas=['TPCH_SF1'])\n", - "training_plan" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "vn.train(plan=training_plan)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# View Training Data\n", - "At any time you can see what training data is in your model" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idtraining_data_typequestioncontent
015-docdocumentationNoneThis is a table in the PARTSUPP table.\\n\\nThe ...
111-docdocumentationNoneThis is a table in the CUSTOMER table.\\n\\nThe ...
214-docdocumentationNoneThis is a table in the ORDERS table.\\n\\nThe fo...
31244-sqlsqlWhat are the names of the top 10 customers?SELECT c.c_name as customer_name\\nFROM snowf...
41242-sqlsqlWhat are the top 5 customers in terms of total...SELECT c.c_name AS customer_name, SUM(l.l_quan...
517-docdocumentationNoneThis is a table in the REGION table.\\n\\nThe fo...
616-docdocumentationNoneThis is a table in the PART table.\\n\\nThe foll...
71243-sqlsqlWhat are the top 10 customers with the highest...SELECT c.c_name as customer_name,\\n sum(...
81239-sqlsqlWhat are the top 100 customers based on their ...SELECT c.c_name as customer_name,\\n sum(...
913-docdocumentationNoneThis is a table in the SUPPLIER table.\\n\\nThe ...
101241-sqlsqlWhat are the top 10 customers in terms of tota...SELECT c.c_name as customer_name,\\n sum(...
1112-docdocumentationNoneThis is a table in the LINEITEM table.\\n\\nThe ...
1218-docdocumentationNoneThis is a table in the NATION table.\\n\\nThe fo...
131248-sqlsqlHow many customers are in each country?SELECT n.n_name as country,\\n count(*) a...
141240-sqlsqlWhat is the number of orders placed each week?SELECT date_trunc('week', o_orderdate) as week...
\n", - "
" - ], - "text/plain": [ - " id training_data_type \\\n", - "0 15-doc documentation \n", - "1 11-doc documentation \n", - "2 14-doc documentation \n", - "3 1244-sql sql \n", - "4 1242-sql sql \n", - "5 17-doc documentation \n", - "6 16-doc documentation \n", - "7 1243-sql sql \n", - "8 1239-sql sql \n", - "9 13-doc documentation \n", - "10 1241-sql sql \n", - "11 12-doc documentation \n", - "12 18-doc documentation \n", - "13 1248-sql sql \n", - "14 1240-sql sql \n", - "\n", - " question \\\n", - "0 None \n", - "1 None \n", - "2 None \n", - "3 What are the names of the top 10 customers? \n", - "4 What are the top 5 customers in terms of total... \n", - "5 None \n", - "6 None \n", - "7 What are the top 10 customers with the highest... \n", - "8 What are the top 100 customers based on their ... \n", - "9 None \n", - "10 What are the top 10 customers in terms of tota... \n", - "11 None \n", - "12 None \n", - "13 How many customers are in each country? \n", - "14 What is the number of orders placed each week? \n", - "\n", - " content \n", - "0 This is a table in the PARTSUPP table.\\n\\nThe ... \n", - "1 This is a table in the CUSTOMER table.\\n\\nThe ... \n", - "2 This is a table in the ORDERS table.\\n\\nThe fo... \n", - "3 SELECT c.c_name as customer_name\\nFROM snowf... \n", - "4 SELECT c.c_name AS customer_name, SUM(l.l_quan... \n", - "5 This is a table in the REGION table.\\n\\nThe fo... \n", - "6 This is a table in the PART table.\\n\\nThe foll... \n", - "7 SELECT c.c_name as customer_name,\\n sum(... \n", - "8 SELECT c.c_name as customer_name,\\n sum(... \n", - "9 This is a table in the SUPPLIER table.\\n\\nThe ... \n", - "10 SELECT c.c_name as customer_name,\\n sum(... \n", - "11 This is a table in the LINEITEM table.\\n\\nThe ... \n", - "12 This is a table in the NATION table.\\n\\nThe fo... \n", - "13 SELECT n.n_name as country,\\n count(*) a... \n", - "14 SELECT date_trunc('week', o_orderdate) as week... " - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "vn.get_training_data()" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Removing Training Data\n", - "If you added some training data by mistake, you can remove it. Model performance is directly linked to the quality of the training data." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "vn.remove_training_data(id='my-training-data-id')" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.2" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/pyproject.toml b/pyproject.toml index 6c84fa76..19dd85a0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "flit_core.buildapi" [project] name = "vanna" -version = "0.1.1" +version = "0.2.1" authors = [ { name="Zain Hoda", email="zain@vanna.ai" }, ] @@ -30,7 +30,7 @@ postgres = ["psycopg2-binary", "db-dtypes"] bigquery = ["google-cloud-bigquery"] snowflake = ["snowflake-connector-python"] duckdb = ["duckdb"] -all = ["psycopg2-binary", "db-dtypes", "google-cloud-bigquery", "snowflake-connector-python", "duckdb", "openai", "mistralai"] +all = ["psycopg2-binary", "db-dtypes", "google-cloud-bigquery", "snowflake-connector-python", "duckdb", "openai", "mistralai", "chromadb"] test = ["tox"] chromadb = ["chromadb"] openai = ["openai"] diff --git a/tests/test_vanna.py b/tests/test_vanna.py index c70aae4f..1bf0e40a 100644 --- a/tests/test_vanna.py +++ b/tests/test_vanna.py @@ -51,4 +51,25 @@ def test_vn_mistral(): def test_vn_default(): sql = vn_default.generate_sql("What are the top 6 customers by sales?") df = vn_default.run_sql(sql) - assert len(df) == 6 \ No newline at end of file + assert len(df) == 6 + +from vanna.openai.openai_chat import OpenAI_Chat +from vanna.chromadb.chromadb_vector import ChromaDB_VectorStore + +class MyVanna(ChromaDB_VectorStore, OpenAI_Chat): + def __init__(self, config=None): + ChromaDB_VectorStore.__init__(self, config=config) + OpenAI_Chat.__init__(self, config=config) + +vn_chroma = MyVanna(config={'api_key': OPENAI_API_KEY, 'model': 'gpt-3.5-turbo'}) +vn_chroma.connect_to_sqlite('https://vanna.ai/Chinook.sqlite') + +def test_vn_chroma(): + df_ddl = vn_chroma.run_sql("SELECT type, sql FROM sqlite_master WHERE sql is not null") + + for ddl in df_ddl['sql'].to_list(): + vn_chroma.train(ddl=ddl) + + sql = vn_chroma.generate_sql("What are the top 7 customers by sales?") + df = vn_chroma.run_sql(sql) + assert len(df) == 7 \ No newline at end of file From 4c46ee1a15651e75a9ef73361fdefeb4c86fef24 Mon Sep 17 00:00:00 2001 From: Zain Hoda <7146154+zainhoda@users.noreply.github.com> Date: Fri, 1 Mar 2024 23:45:57 -0500 Subject: [PATCH 2/2] version fix --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 19dd85a0..892047b8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "flit_core.buildapi" [project] name = "vanna" -version = "0.2.1" +version = "0.2.0" authors = [ { name="Zain Hoda", email="zain@vanna.ai" }, ]