Drive Faster Analytics with AI Code Generation
A business user wants to see the top-10 sales by category for the last week. The traditional path requires a request to an analyst, refinement, and waiting in queue. The answer comes back a couple of days later. Text-to-Code does it differently. An LLM turns the question into Python or SQL code. Then it executes the code and returns the result with visualization. All this takes seconds. According to Gartner, the share of NLQ queries will grow to 60% in the coming years. Our AI data analysis solution also provides LLM dashboards and NLP data queries for seamless interaction.
Recently, we deployed Text-to-Code for a retail chain with 500 stores. Previously, a request like 'show the average check by region for the past month' took 2 days. Now the answer comes in 15 seconds. Analysts shifted to complex tasks, and business users got self-service. With over 5 years of experience and 50+ AI analytics projects delivered, we ensure reliable implementation. Our solution handles up to 1000 queries per day with average latency under 2 seconds. Implementation costs start at $15,000 and can save up to $100,000 annually in analyst time. Our free audit is valued at $2,000.
How Text-to-Code Accelerates Data Work
Classical BI requires pre-designed dashboards. Each new question takes 1–3 days for approval and development. Text-to-Code cuts this to 10–30 seconds. Analysts spend 70% less time on routine tasks. Business users get self-service for 80% of standard queries. Text-to-Code is 10–50 times faster than traditional BI queries. Typical daily query volume is 500-1000, with peak loads up to 2000.
| Criteria | Classical BI | Text-to-Code (our system) |
|---|---|---|
| Time for a new query | 1–3 days | 10–30 seconds |
| Need for SQL/Python | Yes | No (natural language question) |
| Adaptation to data changes | Manual dashboard rebuild | Automatic via schema retrieval |
| Scalability (100+ queries/day) | Limited by analyst headcount | Virtually unlimited (sandbox) |
Why Code Security Is the Main Risk?
The main risk of Text-to-Code is malicious or incorrect code. Our isolation builds on three levels:
- Sandbox container: execution in an isolated environment with restricted file system and network access. We use Docker or gVisor.
- Module whitelist: only pandas, numpy, plotly, and built-in Python functions are allowed. Import requests for third-party libraries are blocked.
- Result validation: output data types are checked, code is logged for audit.
Example Docker container configuration for code isolation:
version: '3.8'
services:
sandbox:
image: python:3.11-slim
command: tail -f /dev/null
security_opt:
- no-new-privileges:true
cap_drop:
- ALL
volumes:
- ./data:/data:ro
environment:
- PYTHONDONTWRITEBYTECODE=1
deploy:
resources:
limits:
cpus: '1'
memory: 2G
Implementation Using AIDataAnalyst
from anthropic import Anthropic
import pandas as pd
import io
class AIDataAnalyst:
def __init__(self, dataframes: dict[str, pd.DataFrame]):
self.dfs = dataframes
self.llm = Anthropic()
self.schema = self._build_schema()
def _build_schema(self) -> str:
schema_parts = []
for name, df in self.dfs.items():
schema_parts.append(f"Table: {name}")
schema_parts.append(f"Shape: {df.shape[0]} rows x {df.shape[1]} columns")
schema_parts.append("Columns:")
for col in df.columns:
dtype = str(df[col].dtype)
n_unique = df[col].nunique()
sample = str(df[col].dropna().head(3).tolist())
schema_parts.append(f" - {col} ({dtype}, {n_unique} unique): {sample}")
schema_parts.append("")
return '\n'.join(schema_parts)
def analyze(self, question: str) -> dict:
"""Analyze data based on a natural language question"""
system_prompt = f"""You are a data analyst. You have access to these dataframes:
{self.schema}
Write Python code using pandas to answer the user's question.
The dataframes are available as: {list(self.dfs.keys())}
Return ONLY the Python code, no explanations. Use variable 'result' for the final result."""
response = self.llm.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=1000,
system=system_prompt,
messages=[{"role": "user", "content": question}]
)
code = response.content[0].text.strip()
if code.startswith("```python"):
code = code[9:-3].strip()
result = self._execute_safely(code)
# Generate explanation
explanation = self._generate_explanation(question, result, code)
return {
'question': question,
'code': code,
'result': result,
'explanation': explanation
}
def _execute_safely(self, code: str) -> any:
"""Safe execution of generated code"""
import builtins
# Allowed functions
safe_globals = {
'__builtins__': {
'len': builtins.len, 'range': builtins.range,
'list': builtins.list, 'dict': builtins.dict,
'str': builtins.str, 'int': builtins.int,
'float': builtins.float, 'print': builtins.print,
'sorted': builtins.sorted, 'sum': builtins.sum,
'min': builtins.min, 'max': builtins.max,
'round': builtins.round, 'abs': builtins.abs,
},
'pd': pd,
'np': __import__('numpy'),
}
# Add dataframes
safe_globals.update(self.dfs)
local_vars = {}
exec(code, safe_globals, local_vars)
return local_vars.get('result')
def _generate_explanation(self, question: str, result, code: str) -> str:
result_str = str(result)[:2000] if result is not None else "No result"
response = self.llm.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=300,
messages=[{
"role": "user",
"content": f"""Question: {question}
Analysis result: {result_str}
Provide a clear 2-3 sentence business explanation of this result."""
}]
)
return response.content[0].text
How Automatic Visualization Chooses a Chart?
class AutoVisualizer:
def create_chart(self, data, question: str) -> str:
"""Automatic chart selection and creation"""
chart_type = self._suggest_chart_type(data, question)
import plotly.express as px
if isinstance(data, pd.DataFrame):
if chart_type == 'bar':
fig = px.bar(data, x=data.columns[0], y=data.columns[1],
title=question[:80])
elif chart_type == 'line':
fig = px.line(data, x=data.columns[0], y=data.columns[1:],
title=question[:80])
elif chart_type == 'scatter':
fig = px.scatter(data, x=data.columns[0], y=data.columns[1],
title=question[:80])
elif chart_type == 'pie':
fig = px.pie(data, names=data.columns[0], values=data.columns[1],
title=question[:80])
return fig.to_html(include_plotlyjs='cdn', full_html=False)
return None
What's Included in Developing an AI System?
We provide a complete set of documentation and artifacts:
- Model card: specification of the selected LLM, inference parameters, library versions;
- Configuration files: Docker Compose, environment variables, deployment scripts;
- Interactive Playbook: description of all components and setup instructions;
- Load testing: report with p50/p99 latency, FLOPS, GPU utilization under peak loads;
- Team training: 2–3 sessions on operation and model fine-tuning;
- Post-release support: 30 days of incident management and improvements.
Model comparison for Text-to-Code:
| Model | Latency (p99) | Tokens per query | Russian support |
|---|---|---|---|
| Claude 3.5 Sonnet | 1.2 s | 150-300 | Excellent |
| GPT-4o | 1.5 s | 200-400 | Good |
| LLaMA 3 70B | 2.0 s | 180-350 | Fair |
| Qwen 2.5 72B | 1.8 s | 160-320 | Excellent |
Work Stages and Estimated Timing
- Analytics (2–3 days): we examine your data, identify typical queries, select LLM and architecture.
- Design (3–5 days): RAG schema, sandbox, code-generation pipeline.
- Implementation (7–10 days): integrate LLM, write components, visualizations.
- Testing (3–5 days): unit tests, load testing, security checks.
- Deployment (2–3 days): deploy on your infrastructure or cloud, handover documentation.
Estimated timeline: 17 to 26 days. Cost is calculated individually after auditing your data and requirements. We guarantee code execution safety and data confidentiality. Our LLM analytics platform enables natural language queries. It turns NLP data queries into executable code. The AI BI system integrates seamlessly with existing databases. For MLOps deployment, we use Docker and Kubernetes. We ensure secure code generation through sandbox isolation. This AI BI system supports MLOps deployment. Get a consultation for a project evaluation. Order a free audit of your data.







