Skip to content

Commit 8ccec5c

Browse files
Merge branch 'sinaptik-ai:main' into template_improvements
2 parents 7073946 + b119213 commit 8ccec5c

File tree

5 files changed

+19
-10
lines changed

5 files changed

+19
-10
lines changed

pandasai/agent/base.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,10 @@ def chat(self, query: str, output_type: Optional[str] = None):
8585
Start a new chat interaction with the assistant on Dataframe.
8686
"""
8787
if self._state.config.llm is None:
88-
raise ValueError("No LLM provided. Please provide an LLM to the agent.")
88+
raise ValueError(
89+
"PandasAI API key does not include LLM credits. Please configure an OpenAI or LiteLLM key. "
90+
"Learn more at: https://docs.pandas-ai.com/v3/large-language-models#how-to-set-up-any-llm%3F"
91+
)
8992

9093
self.start_new_conversation()
9194
return self._process_query(query, output_type)

pandasai/core/code_generation/code_cleaning.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,8 @@ def _clean_sql_query(self, sql_query: str) -> str:
5555
Clean the SQL query by trimming semicolons and validating table names.
5656
"""
5757
sql_query = sql_query.rstrip(";")
58-
table_names = SQLParser.extract_table_names(sql_query)
58+
dialect = self.context.dfs[0].get_dialect()
59+
table_names = SQLParser.extract_table_names(sql_query, dialect)
5960
allowed_table_names = {
6061
df.schema.name: df.schema.name for df in self.context.dfs
6162
} | {f'"{df.schema.name}"': df.schema.name for df in self.context.dfs}

pandasai/dataframe/base.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -132,20 +132,23 @@ def rows_count(self) -> int:
132132
def columns_count(self) -> int:
133133
return len(self.columns)
134134

135+
def get_dialect(self):
136+
source = self.schema.source or None
137+
if source:
138+
dialect = "duckdb" if source.type in LOCAL_SOURCE_TYPES else source.type
139+
else:
140+
dialect = "postgres"
141+
142+
return dialect
143+
135144
def serialize_dataframe(self) -> str:
136145
"""
137146
Serialize DataFrame to string representation.
138147
139148
Returns:
140149
str: Serialized string representation of the DataFrame
141150
"""
142-
source = self.schema.source or None
143-
144-
if source:
145-
dialect = "duckdb" if source.type in LOCAL_SOURCE_TYPES else source.type
146-
else:
147-
dialect = "postgres"
148-
151+
dialect = self.get_dialect()
149152
return DataframeSerializer.serialize(self, dialect)
150153

151154
def get_head(self):

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "pandasai"
3-
version = "3.0.0-beta.18"
3+
version = "3.0.0-beta.19"
44
description = "Chat with your database (SQL, CSV, pandas, mongodb, noSQL, etc). PandasAI makes data analysis conversational using LLMs (GPT 3.5 / 4, Anthropic, VertexAI) and RAG."
55
authors = ["Gabriele Venturi"]
66
license = "MIT"

tests/unit_tests/core/code_generation/test_code_cleaning.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ def test_clean_sql_query(self):
7272
mock_dataframe.schema = MagicMock()
7373
mock_dataframe.schema.name = "my_table"
7474
self.cleaner.context.dfs = [mock_dataframe]
75+
mock_dataframe.get_dialect = MagicMock(return_value="duckdb")
7576
result = self.cleaner._clean_sql_query(sql_query)
7677
self.assertEqual(result, "SELECT * FROM my_table")
7778

@@ -85,6 +86,7 @@ def test_validate_and_make_table_name_case_sensitive(self):
8586
self.cleaner.context.dfs = [mock_dataframe]
8687
mock_dataframe.schema = MagicMock()
8788
mock_dataframe.schema.name = "my_table"
89+
mock_dataframe.get_dialect = MagicMock(return_value="duckdb")
8890
updated_node = self.cleaner._validate_and_make_table_name_case_sensitive(node)
8991
self.assertEqual(updated_node.value.value, "SELECT * FROM my_table")
9092

0 commit comments

Comments
 (0)