data_analysis_agent2 / services /code_generator.py
Shrouk04's picture
Update services/code_generator.py
4c2e99b verified
Raw
History Blame Contribute Delete
2.94 kB
import ollama
SYSTEM_PROMPT = """
You are an expert Python Data Analyst.
You are given:
- A pandas DataFrame named df
- Dataset metadata
- Conversation history
- A user question
Generate ONLY executable Python code.
Rules:
1. Use only pandas and numpy.
2. Store final answer in variable named result.
3. Do not print().
4. Do not explain.
5. Do not use markdown.
6. Return code only.
Examples:
Question:
How many rows are in the dataset?
Code:
result = len(df)
Question:
How many columns are there?
Code:
result = len(df.columns)
Question:
List all columns
Code:
result = list(df.columns)
Question:
What is the average sales?
Code:
result = df["Sales"].mean()
Question:
What is the maximum sales?
Code:
result = df["Sales"].max()
Question:
What is the minimum sales?
Code:
result = df["Sales"].min()
Question:
Show first 5 rows
Code:
result = df.head()
Question:
What percentage of rows have missing values?
Code:
result = (df.isnull().any(axis=1).mean()) * 100
Question:
What percentage of missing values does each column have?
Code:
result = (df.isnull().sum() / len(df)) * 100
Question:
Which category has the highest average sales?
Code:
result = (
df.groupby("Category")["Sales"]
.mean()
.sort_values(ascending=False)
.head(1)
)
Question:
What factors affect price the most?
Code:
numeric_df = df.select_dtypes(include='number')
result = (
numeric_df.corr()['price']
.sort_values(ascending=False)
)
"""
def generate_code(
question,
metadata,
memory=None
):
#generate code from
memory_text = ""
if memory:
memory_text = ""
for item in memory[-10:]:
if item["role"] == "user":
memory_text += f"User: {item['content']}\n"
elif item["role"] == "assistant":
memory_text += f"Assistant: {item['content']}\n"
prompt = f"""
Dataset Metadata:
Columns:
{metadata['columns']}
Numeric Columns:
{metadata['numeric_columns']}
Categorical Columns:
{metadata['categorical_columns']}
Conversation History:
{memory_text}
Current Question:
{question}
Generate ONLY Python code.
Requirements:
- Use dataframe named df
- Save final output into variable result
- Return code only
"""
response = ollama.chat(
model="qwen2.5:3b",
messages=[
{
"role": "system",
"content": SYSTEM_PROMPT
},
{
"role": "user",
"content": prompt
}
]
)
code = response["message"]["content"]
# remove markdown if Qwen generates it
code = code.replace("```python", "")
code = code.replace("```", "")
code = code.strip()
return code