vanna 0.6.3__tar.gz → 0.6.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. {vanna-0.6.3 → vanna-0.6.5}/PKG-INFO +5 -1
  2. {vanna-0.6.3 → vanna-0.6.5}/pyproject.toml +4 -3
  3. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/anthropic/anthropic_chat.py +9 -9
  4. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/base/base.py +82 -53
  5. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/flask/__init__.py +603 -133
  6. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/openai/openai_chat.py +0 -9
  7. vanna-0.6.5/src/vanna/qianfan/Qianfan_Chat.py +165 -0
  8. vanna-0.6.5/src/vanna/qianfan/Qianfan_embeddings.py +36 -0
  9. vanna-0.6.5/src/vanna/qianfan/__init__.py +2 -0
  10. {vanna-0.6.3 → vanna-0.6.5}/README.md +0 -0
  11. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/ZhipuAI/ZhipuAI_Chat.py +0 -0
  12. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/ZhipuAI/ZhipuAI_embeddings.py +0 -0
  13. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/ZhipuAI/__init__.py +0 -0
  14. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/__init__.py +0 -0
  15. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/advanced/__init__.py +0 -0
  16. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/anthropic/__init__.py +0 -0
  17. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/base/__init__.py +0 -0
  18. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/bedrock/__init__.py +0 -0
  19. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/bedrock/bedrock_converse.py +0 -0
  20. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/chromadb/__init__.py +0 -0
  21. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/chromadb/chromadb_vector.py +0 -0
  22. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/exceptions/__init__.py +0 -0
  23. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/flask/assets.py +0 -0
  24. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/flask/auth.py +0 -0
  25. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/google/__init__.py +0 -0
  26. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/google/gemini_chat.py +0 -0
  27. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/hf/__init__.py +0 -0
  28. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/hf/hf.py +0 -0
  29. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/local.py +0 -0
  30. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/marqo/__init__.py +0 -0
  31. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/marqo/marqo.py +0 -0
  32. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/milvus/__init__.py +0 -0
  33. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/milvus/milvus_vector.py +0 -0
  34. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/mistral/__init__.py +0 -0
  35. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/mistral/mistral.py +0 -0
  36. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/mock/__init__.py +0 -0
  37. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/mock/embedding.py +0 -0
  38. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/mock/llm.py +0 -0
  39. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/mock/vectordb.py +0 -0
  40. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/ollama/__init__.py +0 -0
  41. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/ollama/ollama.py +0 -0
  42. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/openai/__init__.py +0 -0
  43. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/openai/openai_embeddings.py +0 -0
  44. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/opensearch/__init__.py +0 -0
  45. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/opensearch/opensearch_vector.py +0 -0
  46. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/pinecone/__init__.py +0 -0
  47. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/pinecone/pinecone_vector.py +0 -0
  48. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/qdrant/__init__.py +0 -0
  49. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/qdrant/qdrant.py +0 -0
  50. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/remote.py +0 -0
  51. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/types/__init__.py +0 -0
  52. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/utils.py +0 -0
  53. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/vannadb/__init__.py +0 -0
  54. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/vannadb/vannadb_vector.py +0 -0
  55. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/vllm/__init__.py +0 -0
  56. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/vllm/vllm.py +0 -0
  57. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/weaviate/__init__.py +0 -0
  58. {vanna-0.6.3 → vanna-0.6.5}/src/vanna/weaviate/weaviate_vector.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: vanna
3
- Version: 0.6.3
3
+ Version: 0.6.5
4
4
  Summary: Generate SQL queries from natural language
5
5
  Author-email: Zain Hoda <zain@vanna.ai>
6
6
  Requires-Python: >=3.9
@@ -16,6 +16,7 @@ Requires-Dist: sqlparse
16
16
  Requires-Dist: kaleido
17
17
  Requires-Dist: flask
18
18
  Requires-Dist: flask-sock
19
+ Requires-Dist: flasgger
19
20
  Requires-Dist: sqlalchemy
20
21
  Requires-Dist: psycopg2-binary ; extra == "all"
21
22
  Requires-Dist: db-dtypes ; extra == "all"
@@ -24,6 +25,7 @@ Requires-Dist: google-cloud-bigquery ; extra == "all"
24
25
  Requires-Dist: snowflake-connector-python ; extra == "all"
25
26
  Requires-Dist: duckdb ; extra == "all"
26
27
  Requires-Dist: openai ; extra == "all"
28
+ Requires-Dist: qianfan ; extra == "all"
27
29
  Requires-Dist: mistralai ; extra == "all"
28
30
  Requires-Dist: chromadb ; extra == "all"
29
31
  Requires-Dist: anthropic ; extra == "all"
@@ -67,6 +69,7 @@ Requires-Dist: psycopg2-binary ; extra == "postgres"
67
69
  Requires-Dist: db-dtypes ; extra == "postgres"
68
70
  Requires-Dist: qdrant-client ; extra == "qdrant"
69
71
  Requires-Dist: fastembed ; extra == "qdrant"
72
+ Requires-Dist: qianfan ; extra == "qianfan"
70
73
  Requires-Dist: snowflake-connector-python ; extra == "snowflake"
71
74
  Requires-Dist: tox ; extra == "test"
72
75
  Requires-Dist: vllm ; extra == "vllm"
@@ -94,6 +97,7 @@ Provides-Extra: opensearch
94
97
  Provides-Extra: pinecone
95
98
  Provides-Extra: postgres
96
99
  Provides-Extra: qdrant
100
+ Provides-Extra: qianfan
97
101
  Provides-Extra: snowflake
98
102
  Provides-Extra: test
99
103
  Provides-Extra: vllm
@@ -4,7 +4,7 @@ build-backend = "flit_core.buildapi"
4
4
 
5
5
  [project]
6
6
  name = "vanna"
7
- version = "0.6.3"
7
+ version = "0.6.5"
8
8
  authors = [
9
9
  { name="Zain Hoda", email="zain@vanna.ai" },
10
10
  ]
@@ -18,7 +18,7 @@ classifiers = [
18
18
  "Operating System :: OS Independent",
19
19
  ]
20
20
  dependencies = [
21
- "requests", "tabulate", "plotly", "pandas", "sqlparse", "kaleido", "flask", "flask-sock", "sqlalchemy"
21
+ "requests", "tabulate", "plotly", "pandas", "sqlparse", "kaleido", "flask", "flask-sock", "flasgger", "sqlalchemy"
22
22
  ]
23
23
 
24
24
  [project.urls]
@@ -33,10 +33,11 @@ bigquery = ["google-cloud-bigquery"]
33
33
  snowflake = ["snowflake-connector-python"]
34
34
  duckdb = ["duckdb"]
35
35
  google = ["google-generativeai", "google-cloud-aiplatform"]
36
- all = ["psycopg2-binary", "db-dtypes", "PyMySQL", "google-cloud-bigquery", "snowflake-connector-python", "duckdb", "openai", "mistralai", "chromadb", "anthropic", "zhipuai", "marqo", "google-generativeai", "google-cloud-aiplatform", "qdrant-client", "fastembed", "ollama", "httpx", "opensearch-py", "opensearch-dsl", "transformers", "pinecone-client", "pymilvus[model]","weaviate-client"]
36
+ all = ["psycopg2-binary", "db-dtypes", "PyMySQL", "google-cloud-bigquery", "snowflake-connector-python", "duckdb", "openai", "qianfan", "mistralai", "chromadb", "anthropic", "zhipuai", "marqo", "google-generativeai", "google-cloud-aiplatform", "qdrant-client", "fastembed", "ollama", "httpx", "opensearch-py", "opensearch-dsl", "transformers", "pinecone-client", "pymilvus[model]","weaviate-client"]
37
37
  test = ["tox"]
38
38
  chromadb = ["chromadb"]
39
39
  openai = ["openai"]
40
+ qianfan = ["qianfan"]
40
41
  mistralai = ["mistralai"]
41
42
  anthropic = ["anthropic"]
42
43
  gemini = ["google-generativeai"]
@@ -8,15 +8,7 @@ from ..base import VannaBase
8
8
  class Anthropic_Chat(VannaBase):
9
9
  def __init__(self, client=None, config=None):
10
10
  VannaBase.__init__(self, config=config)
11
-
12
- if client is not None:
13
- self.client = client
14
- return
15
-
16
- if config is None and client is None:
17
- self.client = anthropic.Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY"))
18
- return
19
-
11
+
20
12
  # default parameters - can be overrided using config
21
13
  self.temperature = 0.7
22
14
  self.max_tokens = 500
@@ -27,6 +19,14 @@ class Anthropic_Chat(VannaBase):
27
19
  if "max_tokens" in config:
28
20
  self.max_tokens = config["max_tokens"]
29
21
 
22
+ if client is not None:
23
+ self.client = client
24
+ return
25
+
26
+ if config is None and client is None:
27
+ self.client = anthropic.Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY"))
28
+ return
29
+
30
30
  if "api_key" in config:
31
31
  self.client = anthropic.Anthropic(api_key=config["api_key"])
32
32
 
@@ -577,6 +577,7 @@ class VannaBase(ABC):
577
577
  "3. If the provided context is insufficient, please explain why it can't be generated. \n"
578
578
  "4. Please use the most relevant table(s). \n"
579
579
  "5. If the question has been asked and answered before, please repeat the answer exactly as it was given before. \n"
580
+ f"6. Ensure that the output SQL is {self.dialect}-compliant and executable, and free of syntax errors. \n"
580
581
  )
581
582
 
582
583
  message_log = [self.system_message(initial_prompt)]
@@ -718,6 +719,7 @@ class VannaBase(ABC):
718
719
  database: str,
719
720
  role: Union[str, None] = None,
720
721
  warehouse: Union[str, None] = None,
722
+ **kwargs
721
723
  ):
722
724
  try:
723
725
  snowflake = __import__("snowflake.connector")
@@ -735,7 +737,7 @@ class VannaBase(ABC):
735
737
  else:
736
738
  raise ImproperlyConfigured("Please set your Snowflake username.")
737
739
 
738
- if password == "my-password":
740
+ if password == "mypassword":
739
741
  password_env = os.getenv("SNOWFLAKE_PASSWORD")
740
742
 
741
743
  if password_env is not None:
@@ -764,7 +766,8 @@ class VannaBase(ABC):
764
766
  password=password,
765
767
  account=account,
766
768
  database=database,
767
- client_session_keep_alive=True
769
+ client_session_keep_alive=True,
770
+ **kwargs
768
771
  )
769
772
 
770
773
  def run_sql_snowflake(sql: str) -> pd.DataFrame:
@@ -790,13 +793,13 @@ class VannaBase(ABC):
790
793
  self.run_sql = run_sql_snowflake
791
794
  self.run_sql_is_set = True
792
795
 
793
- def connect_to_sqlite(self, url: str):
796
+ def connect_to_sqlite(self, url: str, check_same_thread: bool = False, **kwargs):
794
797
  """
795
798
  Connect to a SQLite database. This is just a helper function to set [`vn.run_sql`][vanna.base.base.VannaBase.run_sql]
796
799
 
797
800
  Args:
798
801
  url (str): The URL of the database to connect to.
799
-
802
+ check_same_thread (str): Allow the connection may be accessed in multiple threads.
800
803
  Returns:
801
804
  None
802
805
  """
@@ -815,7 +818,11 @@ class VannaBase(ABC):
815
818
  url = path
816
819
 
817
820
  # Connect to the database
818
- conn = sqlite3.connect(url, check_same_thread=False)
821
+ conn = sqlite3.connect(
822
+ url,
823
+ check_same_thread=check_same_thread,
824
+ **kwargs
825
+ )
819
826
 
820
827
  def run_sql_sqlite(sql: str):
821
828
  return pd.read_sql_query(sql, conn)
@@ -831,6 +838,7 @@ class VannaBase(ABC):
831
838
  user: str = None,
832
839
  password: str = None,
833
840
  port: int = None,
841
+ **kwargs
834
842
  ):
835
843
  """
836
844
  Connect to postgres using the psycopg2 connector. This is just a helper function to set [`vn.run_sql`][vanna.base.base.VannaBase.run_sql]
@@ -900,6 +908,7 @@ class VannaBase(ABC):
900
908
  user=user,
901
909
  password=password,
902
910
  port=port,
911
+ **kwargs
903
912
  )
904
913
  except psycopg2.Error as e:
905
914
  raise ValidationError(e)
@@ -931,12 +940,13 @@ class VannaBase(ABC):
931
940
 
932
941
 
933
942
  def connect_to_mysql(
934
- self,
935
- host: str = None,
936
- dbname: str = None,
937
- user: str = None,
938
- password: str = None,
939
- port: int = None,
943
+ self,
944
+ host: str = None,
945
+ dbname: str = None,
946
+ user: str = None,
947
+ password: str = None,
948
+ port: int = None,
949
+ **kwargs
940
950
  ):
941
951
 
942
952
  try:
@@ -980,12 +990,15 @@ class VannaBase(ABC):
980
990
  conn = None
981
991
 
982
992
  try:
983
- conn = pymysql.connect(host=host,
984
- user=user,
985
- password=password,
986
- database=dbname,
987
- port=port,
988
- cursorclass=pymysql.cursors.DictCursor)
993
+ conn = pymysql.connect(
994
+ host=host,
995
+ user=user,
996
+ password=password,
997
+ database=dbname,
998
+ port=port,
999
+ cursorclass=pymysql.cursors.DictCursor,
1000
+ **kwargs
1001
+ )
989
1002
  except pymysql.Error as e:
990
1003
  raise ValidationError(e)
991
1004
 
@@ -1015,12 +1028,13 @@ class VannaBase(ABC):
1015
1028
  self.run_sql = run_sql_mysql
1016
1029
 
1017
1030
  def connect_to_clickhouse(
1018
- self,
1019
- host: str = None,
1020
- dbname: str = None,
1021
- user: str = None,
1022
- password: str = None,
1023
- port: int = None,
1031
+ self,
1032
+ host: str = None,
1033
+ dbname: str = None,
1034
+ user: str = None,
1035
+ password: str = None,
1036
+ port: int = None,
1037
+ **kwargs
1024
1038
  ):
1025
1039
 
1026
1040
  try:
@@ -1070,6 +1084,7 @@ class VannaBase(ABC):
1070
1084
  username=user,
1071
1085
  password=password,
1072
1086
  database=dbname,
1087
+ **kwargs
1073
1088
  )
1074
1089
  print(conn)
1075
1090
  except Exception as e:
@@ -1087,15 +1102,16 @@ class VannaBase(ABC):
1087
1102
 
1088
1103
  except Exception as e:
1089
1104
  raise e
1090
-
1105
+
1091
1106
  self.run_sql_is_set = True
1092
1107
  self.run_sql = run_sql_clickhouse
1093
1108
 
1094
1109
  def connect_to_oracle(
1095
- self,
1096
- user: str = None,
1097
- password: str = None,
1098
- dsn: str = None,
1110
+ self,
1111
+ user: str = None,
1112
+ password: str = None,
1113
+ dsn: str = None,
1114
+ **kwargs
1099
1115
  ):
1100
1116
 
1101
1117
  """
@@ -1148,7 +1164,8 @@ class VannaBase(ABC):
1148
1164
  user=user,
1149
1165
  password=password,
1150
1166
  dsn=dsn,
1151
- )
1167
+ **kwargs
1168
+ )
1152
1169
  except oracledb.Error as e:
1153
1170
  raise ValidationError(e)
1154
1171
 
@@ -1180,7 +1197,12 @@ class VannaBase(ABC):
1180
1197
  self.run_sql_is_set = True
1181
1198
  self.run_sql = run_sql_oracle
1182
1199
 
1183
- def connect_to_bigquery(self, cred_file_path: str = None, project_id: str = None):
1200
+ def connect_to_bigquery(
1201
+ self,
1202
+ cred_file_path: str = None,
1203
+ project_id: str = None,
1204
+ **kwargs
1205
+ ):
1184
1206
  """
1185
1207
  Connect to gcs using the bigquery connector. This is just a helper function to set [`vn.run_sql`][vanna.base.base.VannaBase.run_sql]
1186
1208
  **Example:**
@@ -1242,7 +1264,11 @@ class VannaBase(ABC):
1242
1264
  )
1243
1265
 
1244
1266
  try:
1245
- conn = bigquery.Client(project=project_id, credentials=credentials)
1267
+ conn = bigquery.Client(
1268
+ project=project_id,
1269
+ credentials=credentials,
1270
+ **kwargs
1271
+ )
1246
1272
  except:
1247
1273
  raise ImproperlyConfigured(
1248
1274
  "Could not connect to bigquery please correct credentials"
@@ -1265,7 +1291,7 @@ class VannaBase(ABC):
1265
1291
  self.run_sql_is_set = True
1266
1292
  self.run_sql = run_sql_bigquery
1267
1293
 
1268
- def connect_to_duckdb(self, url: str, init_sql: str = None):
1294
+ def connect_to_duckdb(self, url: str, init_sql: str = None, **kwargs):
1269
1295
  """
1270
1296
  Connect to a DuckDB database. This is just a helper function to set [`vn.run_sql`][vanna.base.base.VannaBase.run_sql]
1271
1297
 
@@ -1303,7 +1329,7 @@ class VannaBase(ABC):
1303
1329
  f.write(response.content)
1304
1330
 
1305
1331
  # Connect to the database
1306
- conn = duckdb.connect(path)
1332
+ conn = duckdb.connect(path, **kwargs)
1307
1333
  if init_sql:
1308
1334
  conn.query(init_sql)
1309
1335
 
@@ -1314,7 +1340,7 @@ class VannaBase(ABC):
1314
1340
  self.run_sql = run_sql_duckdb
1315
1341
  self.run_sql_is_set = True
1316
1342
 
1317
- def connect_to_mssql(self, odbc_conn_str: str):
1343
+ def connect_to_mssql(self, odbc_conn_str: str, **kwargs):
1318
1344
  """
1319
1345
  Connect to a Microsoft SQL Server database. This is just a helper function to set [`vn.run_sql`][vanna.base.base.VannaBase.run_sql]
1320
1346
 
@@ -1347,7 +1373,7 @@ class VannaBase(ABC):
1347
1373
 
1348
1374
  from sqlalchemy import create_engine
1349
1375
 
1350
- engine = create_engine(connection_url)
1376
+ engine = create_engine(connection_url, **kwargs)
1351
1377
 
1352
1378
  def run_sql_mssql(sql: str):
1353
1379
  # Execute the SQL statement and return the result as a pandas DataFrame
@@ -1362,16 +1388,17 @@ class VannaBase(ABC):
1362
1388
  self.run_sql = run_sql_mssql
1363
1389
  self.run_sql_is_set = True
1364
1390
  def connect_to_presto(
1365
- self,
1366
- host: str,
1367
- catalog: str = 'hive',
1368
- schema: str = 'default',
1369
- user: str = None,
1370
- password: str = None,
1371
- port: int = None,
1372
- combined_pem_path: str = None,
1373
- protocol: str = 'https',
1374
- requests_kwargs: dict = None
1391
+ self,
1392
+ host: str,
1393
+ catalog: str = 'hive',
1394
+ schema: str = 'default',
1395
+ user: str = None,
1396
+ password: str = None,
1397
+ port: int = None,
1398
+ combined_pem_path: str = None,
1399
+ protocol: str = 'https',
1400
+ requests_kwargs: dict = None,
1401
+ **kwargs
1375
1402
  ):
1376
1403
  """
1377
1404
  Connect to a Presto database using the specified parameters.
@@ -1444,7 +1471,8 @@ class VannaBase(ABC):
1444
1471
  schema=schema,
1445
1472
  port=port,
1446
1473
  protocol=protocol,
1447
- requests_kwargs=requests_kwargs)
1474
+ requests_kwargs=requests_kwargs,
1475
+ **kwargs)
1448
1476
  except presto.Error as e:
1449
1477
  raise ValidationError(e)
1450
1478
 
@@ -1477,13 +1505,14 @@ class VannaBase(ABC):
1477
1505
  self.run_sql = run_sql_presto
1478
1506
 
1479
1507
  def connect_to_hive(
1480
- self,
1481
- host: str = None,
1482
- dbname: str = 'default',
1483
- user: str = None,
1484
- password: str = None,
1485
- port: int = None,
1486
- auth: str = 'CUSTOM'
1508
+ self,
1509
+ host: str = None,
1510
+ dbname: str = 'default',
1511
+ user: str = None,
1512
+ password: str = None,
1513
+ port: int = None,
1514
+ auth: str = 'CUSTOM',
1515
+ **kwargs
1487
1516
  ):
1488
1517
  """
1489
1518
  Connect to a Hive database. This is just a helper function to set [`vn.run_sql`][vanna.base.base.VannaBase.run_sql]