<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Aditya Bhaskar</title>
    <description>The latest articles on DEV Community by Aditya Bhaskar (@adityabhaskarme).</description>
    <link>https://dev.to/adityabhaskarme</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4162150%2F2d5fcba1-e6f6-48c1-98d5-de4d9a95b85d.png</url>
      <title>DEV Community: Aditya Bhaskar</title>
      <link>https://dev.to/adityabhaskarme</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/adityabhaskarme"/>
    <language>en</language>
    <item>
      <title>Latex OCR</title>
      <dc:creator>Aditya Bhaskar</dc:creator>
      <pubDate>Fri, 23 Oct 2026 15:25:50 +0000</pubDate>
      <link>https://dev.to/adityabhaskarme/latex-ocr-2h7n</link>
      <guid>https://dev.to/adityabhaskarme/latex-ocr-2h7n</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week3-2026-10-19"&gt;Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr0hq0quxd3da93e620sd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr0hq0quxd3da93e620sd.png" alt=" " width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Built Latex OCR which converts Maths formula image into latex code &lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title># LocalLead AI: Finding Business Opportunities with Open-Weight AI</title>
      <dc:creator>Aditya Bhaskar</dc:creator>
      <pubDate>Wed, 14 Oct 2026 13:04:16 +0000</pubDate>
      <link>https://dev.to/adityabhaskarme/-locallead-ai-finding-business-opportunities-with-open-weight-ai-4ngg</link>
      <guid>https://dev.to/adityabhaskarme/-locallead-ai-finding-business-opportunities-with-open-weight-ai-4ngg</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftbgrz20bhlafy7fxzrew.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftbgrz20bhlafy7fxzrew.png" alt=" " width="800" height="456"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp7t0oblkqea1dyy6zvgt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp7t0oblkqea1dyy6zvgt.png" alt=" " width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week2-2026-10-12"&gt;Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;Finding potential clients is one of the most time-consuming activities for freelancers and small software development agencies.&lt;/p&gt;

&lt;p&gt;Before approaching a business, we often need to understand what it does, which services it offers, and whether there are opportunities to help improve its digital operations.&lt;/p&gt;

&lt;p&gt;Normally, this means opening a website, navigating through several pages, reading the content, and manually preparing research notes.&lt;/p&gt;

&lt;p&gt;I wanted to simplify that process using open-weight AI.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;LocalLead AI&lt;/strong&gt;, a lightweight business research assistant that transforms public business websites into structured business intelligence and potential software development opportunities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How it works:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Enter a business website URL.&lt;/li&gt;
&lt;li&gt;The application crawls relevant pages, including links discovered through navigation menus and footers.&lt;/li&gt;
&lt;li&gt;It extracts and cleans website content.&lt;/li&gt;
&lt;li&gt;Qwen3-4B summarizes the business information.&lt;/li&gt;
&lt;li&gt;The model identifies possible software and automation opportunities.&lt;/li&gt;
&lt;li&gt;The application generates a structured lead report with supporting source URLs.&lt;/li&gt;
&lt;li&gt;Users can download the extracted information, summaries, and final report as JSON files.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For example, if a clinic's website states that appointments are handled over the phone, LocalLead AI might suggest an online appointment management system.&lt;/p&gt;

&lt;p&gt;These recommendations are treated as &lt;strong&gt;potential opportunities, not confirmed customer requirements&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Who would pay for it?
&lt;/h3&gt;

&lt;p&gt;LocalLead AI is designed for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Freelancers looking for potential clients.&lt;/li&gt;
&lt;li&gt;Software development agencies researching businesses.&lt;/li&gt;
&lt;li&gt;Consultants identifying possible automation opportunities.&lt;/li&gt;
&lt;li&gt;Small sales teams performing initial prospect research.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The potential business model is simple: offer affordable research reports or a subscription that helps users reduce repetitive manual research.&lt;/p&gt;

&lt;p&gt;The prototype has not yet been commercially validated, but it targets a real and recurring workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;I built an interactive Gradio interface with a minimal dark theme.&lt;/p&gt;

&lt;p&gt;Users enter a website URL and receive a structured analysis containing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Business overview&lt;/li&gt;
&lt;li&gt;Business category&lt;/li&gt;
&lt;li&gt;Potential software opportunities&lt;/li&gt;
&lt;li&gt;Supporting sources&lt;/li&gt;
&lt;li&gt;Confidence indicators&lt;/li&gt;
&lt;li&gt;Lead priority&lt;/li&gt;
&lt;li&gt;Downloadable JSON reports&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Demo:&lt;/strong&gt; [Add Gradio demo URL or recorded walkthrough]&lt;/p&gt;

&lt;p&gt;The application currently runs inside a Kaggle Notebook using an NVIDIA Tesla T4 GPU.&lt;/p&gt;

&lt;p&gt;Because Kaggle sessions are temporary, I recommend watching the recorded demo if the live application is unavailable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitHub Repository:&lt;/strong&gt; [&lt;a href="https://github.com/adityagit-creator/AIWebSearch" rel="noopener noreferrer"&gt;https://github.com/adityagit-creator/AIWebSearch&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;The implementation uses Python and standard open-source libraries.&lt;/p&gt;

&lt;p&gt;One of my goals was to avoid unnecessary infrastructure and keep the project easy to understand and modify.&lt;/p&gt;

&lt;p&gt;The application does not require a separate vector database, autonomous browser framework, or complex agent orchestration layer.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Starting with a browser agent idea
&lt;/h3&gt;

&lt;p&gt;My initial inspiration came from the &lt;a href="https://github.com/Shubhamsaboo/awesome-llm-apps/tree/main/mcp_ai_agents/browser_mcp_agent" rel="noopener noreferrer"&gt;Browser MCP Agent&lt;/a&gt; in the Awesome LLM Apps repository.&lt;/p&gt;

&lt;p&gt;A general-purpose browser agent is powerful, but I realized that this specific use case did not require a fully autonomous browsing environment.&lt;/p&gt;

&lt;p&gt;For an initial business research workflow, a lightweight crawler could handle much of the information collection.&lt;/p&gt;

&lt;p&gt;I therefore built a specialized pipeline instead of copying the original agent architecture.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Extracting website information
&lt;/h3&gt;

&lt;p&gt;I used Python Requests and BeautifulSoup to retrieve and parse public webpages.&lt;/p&gt;

&lt;p&gt;The crawler starts from a business website and discovers additional internal pages.&lt;/p&gt;

&lt;p&gt;Navigation menus and footer links are included because useful information may be found on About, Services, Products, and Contact pages.&lt;/p&gt;

&lt;p&gt;The application removes unnecessary HTML elements, extracts readable text, and saves the collected information.&lt;/p&gt;

&lt;p&gt;The initial version limits extraction to ten pages per website.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Choosing an AI model
&lt;/h3&gt;

&lt;p&gt;Initially, I experimented with the Hugging Face Inference API.&lt;/p&gt;

&lt;p&gt;However, several models were unavailable through my enabled inference providers, and I eventually exhausted my free inference credits.&lt;/p&gt;

&lt;p&gt;Instead of relying on a paid API, I decided to run an open-weight model directly.&lt;/p&gt;

&lt;p&gt;I selected &lt;strong&gt;Qwen3-4B&lt;/strong&gt; and loaded it through Hugging Face Transformers and PyTorch in Kaggle.&lt;/p&gt;

&lt;p&gt;My development environment provided two NVIDIA Tesla T4 GPUs, but the model was small enough to run on a single GPU.&lt;/p&gt;

&lt;p&gt;This removed the need to pay a hosted LLM provider for individual inference requests during development.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Summarizing the website
&lt;/h3&gt;

&lt;p&gt;Rather than passing all extracted pages into one large prompt, I created a two-stage analysis process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stage A — Page summarization&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Qwen3-4B analyzes individual pages to identify:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Business identity&lt;/li&gt;
&lt;li&gt;Products and services&lt;/li&gt;
&lt;li&gt;Target customers&lt;/li&gt;
&lt;li&gt;Existing digital features&lt;/li&gt;
&lt;li&gt;Booking and contact methods&lt;/li&gt;
&lt;li&gt;Operational information&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The individual summaries are saved for later review.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stage B — Opportunity generation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The model analyzes the collected summaries and produces a structured JSON report with possible software solutions, reasons for suggesting them, source URLs, and confidence labels.&lt;/p&gt;

&lt;p&gt;This separation keeps the research process easier to inspect and debug.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Building the interface
&lt;/h3&gt;

&lt;p&gt;I used Gradio to create an interactive web application without building a separate frontend.&lt;/p&gt;

&lt;p&gt;The interface includes three primary sections:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Overview &amp;amp; Leads:&lt;/strong&gt; A readable business research report.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Structured Data:&lt;/strong&gt; The complete JSON analysis.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Export:&lt;/strong&gt; Downloadable lead reports, page summaries, and extracted website content.&lt;/p&gt;

&lt;p&gt;I also customized the UI with a near-black theme, subtle borders, and high-contrast typography.&lt;/p&gt;

&lt;h3&gt;
  
  
  Technology Stack
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Programming language&lt;/td&gt;
&lt;td&gt;Python&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI model&lt;/td&gt;
&lt;td&gt;Qwen3-4B&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Model inference&lt;/td&gt;
&lt;td&gt;PyTorch + Transformers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Compute&lt;/td&gt;
&lt;td&gt;Kaggle GPU&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Website crawling&lt;/td&gt;
&lt;td&gt;Requests&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HTML processing&lt;/td&gt;
&lt;td&gt;BeautifulSoup&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;User interface&lt;/td&gt;
&lt;td&gt;Gradio&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Storage and export&lt;/td&gt;
&lt;td&gt;JSON&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;Open-weight AI is not just an optional component of LocalLead AI. It is the core technology that makes the application useful.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Avoiding dependency on proprietary inference APIs
&lt;/h3&gt;

&lt;p&gt;During development, I encountered restrictions with hosted model availability and inference credits.&lt;/p&gt;

&lt;p&gt;By switching to Qwen3-4B, I could continue building without purchasing additional API credits.&lt;/p&gt;

&lt;p&gt;The model runs directly within my allocated Kaggle environment.&lt;/p&gt;

&lt;p&gt;This doesn't make computation universally free, since Kaggle has usage limits and production infrastructure has costs. But it makes experimentation more accessible.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Control over the model
&lt;/h3&gt;

&lt;p&gt;Using an open-weight model gives me more control over inference behavior.&lt;/p&gt;

&lt;p&gt;I can adjust generation settings, modify prompts, inspect model outputs, and experiment with alternative model architectures.&lt;/p&gt;

&lt;p&gt;For example, I can configure temperature and top-p to balance output consistency against variation in suggested business opportunities.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Model portability
&lt;/h3&gt;

&lt;p&gt;The application is not permanently tied to one model provider.&lt;/p&gt;

&lt;p&gt;The Qwen3-4B inference layer can be replaced with another compatible open-weight model without redesigning the entire website research workflow.&lt;/p&gt;

&lt;p&gt;This creates flexibility for future deployment and experimentation.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Inspectable research
&lt;/h3&gt;

&lt;p&gt;Rather than returning only a final AI answer, LocalLead AI saves the extracted website content, intermediate summaries, and structured report.&lt;/p&gt;

&lt;p&gt;This gives users an opportunity to review the evidence behind the AI-generated recommendations.&lt;/p&gt;

&lt;p&gt;A model can still make mistakes, and summaries can omit relevant details. Preserving the source content makes verification easier.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. A practical path toward a side hustle
&lt;/h3&gt;

&lt;p&gt;A small agency or freelancer may not need an expensive enterprise sales intelligence platform.&lt;/p&gt;

&lt;p&gt;A narrowly focused tool that automates the repetitive first stage of prospect research could provide useful value at a lower operating cost.&lt;/p&gt;

&lt;p&gt;Open-weight AI makes it possible to experiment with such a business without depending entirely on proprietary model pricing and availability.&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenges and Lessons Learned
&lt;/h2&gt;

&lt;p&gt;During development, I encountered several issues:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hugging Face model availability:&lt;/strong&gt; Some models listed in the catalog were not available through my configured inference providers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inference credits:&lt;/strong&gt; I exhausted my hosted API allowance and moved to Kaggle-hosted model inference.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Transformers generation:&lt;/strong&gt; I initially encountered an error when passing a BatchEncoding object directly to &lt;code&gt;model.generate()&lt;/code&gt;. Passing the token tensors as named arguments fixed the issue.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GPU memory:&lt;/strong&gt; I configured Qwen3-4B to run on a single Tesla T4 rather than unnecessarily distributing it across two GPUs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Structured output:&lt;/strong&gt; Generating valid JSON consistently requires careful prompts and output handling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;UI readability:&lt;/strong&gt; I redesigned the Gradio export interface after discovering contrast issues with the default file component.&lt;/p&gt;

&lt;p&gt;These experiences reinforced an important lesson: a useful AI application doesn't always need the biggest model or the most complicated framework.&lt;/p&gt;

&lt;p&gt;Sometimes a focused workflow with a smaller model is enough.&lt;/p&gt;

&lt;h2&gt;
  
  
  Future Improvements
&lt;/h2&gt;

&lt;p&gt;I plan to improve LocalLead AI by adding:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prioritized crawling of About, Services, and Contact pages&lt;/li&gt;
&lt;li&gt;Better handling of JavaScript-rendered websites&lt;/li&gt;
&lt;li&gt;Stronger source verification&lt;/li&gt;
&lt;li&gt;JSON schema validation&lt;/li&gt;
&lt;li&gt;Batch analysis of multiple business websites&lt;/li&gt;
&lt;li&gt;CSV export&lt;/li&gt;
&lt;li&gt;More transparent lead ranking&lt;/li&gt;
&lt;li&gt;Support for interchangeable open-weight models&lt;/li&gt;
&lt;li&gt;Persistent lead history&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Before broader public deployment, I also plan to strengthen URL validation, crawling safeguards, and protections against requests to internal network addresses.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;LocalLead AI started with a simple question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can a lightweight open-weight AI application reduce the repetitive work involved in finding potential software clients?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The prototype demonstrates a practical approach: crawl public business information, summarize it using Qwen3-4B, and convert the results into structured research with potential software opportunities.&lt;/p&gt;

&lt;p&gt;For me, the biggest benefit of open innovation is having the flexibility to keep building, experimenting, and improving the product without being locked into a single proprietary inference provider.&lt;/p&gt;

&lt;p&gt;That's what makes LocalLead AI an interesting foundation for a potential side hustle.&lt;/p&gt;




&lt;p&gt;Built with Python, Qwen3-4B, Kaggle, BeautifulSoup, and Gradio.&lt;/p&gt;

&lt;h1&gt;
  
  
  Hacktoberfest #OpenSource #AI #SideHustle
&lt;/h1&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>LLM sql bot for friend</title>
      <dc:creator>Aditya Bhaskar</dc:creator>
      <pubDate>Mon, 05 Oct 2026 07:00:40 +0000</pubDate>
      <link>https://dev.to/adityabhaskarme/llm-sql-bot-for-friend-25bp</link>
      <guid>https://dev.to/adityabhaskarme/llm-sql-bot-for-friend-25bp</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-weekend-2026-10-01"&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I built an &lt;strong&gt;LLM-powered Natural Language to SQL API&lt;/strong&gt; using &lt;strong&gt;Google Gemma through Hugging Face&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The idea is simple: instead of requiring someone to know SQL, they can ask a database question using normal language.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Show me all female customers from Mumbai
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The application converts that request into:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;customers&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;gender&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'Female'&lt;/span&gt;
&lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="k"&gt;location&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'Mumbai'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I built this with a friend or teammate in mind who may need to retrieve information from a database but does not necessarily know SQL syntax.&lt;/p&gt;

&lt;p&gt;The goal is to make database interaction easier by allowing users to communicate with structured data using the same language they use every day.&lt;/p&gt;

&lt;p&gt;The overall flow is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Natural Language Question
        ↓
      FastAPI
        ↓
Gemma via Hugging Face
        ↓
   Generated SQL
        ↓
   SQL Validation
        ↓
      SQLite
        ↓
      Results
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One important part of the project is that the generated SQL is &lt;strong&gt;not executed blindly&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Before executing a query, the backend validates it and only allows safe read operations.&lt;/p&gt;

&lt;p&gt;Currently, operations such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;INSERT
UPDATE
DELETE
DROP
ALTER
CREATE
TRUNCATE
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;are rejected.&lt;/p&gt;

&lt;p&gt;Only &lt;code&gt;SELECT&lt;/code&gt; queries are allowed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;The API accepts requests through:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;POST /query
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"query"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"show me all female customers from Mumbai"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Gemma generates SQL such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;customers&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;gender&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'Female'&lt;/span&gt;
&lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="k"&gt;location&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'Mumbai'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The SQL is validated and executed against the SQLite database.&lt;/p&gt;

&lt;p&gt;A response looks similar to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"sql_query"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SELECT * FROM customers WHERE gender = 'Female' AND location = 'Mumbai'"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"results"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"customer_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Jane Smith"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"gender"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Female"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"location"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Mumbai"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"customer_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Diana Evans"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"gender"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Female"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"location"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Mumbai"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"message"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Found 2 results"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"execution_time"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.82&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Demo Link:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Add your deployed API or video demo here.&lt;/p&gt;
&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;The backend is built with Python and FastAPI.&lt;/p&gt;

&lt;p&gt;The main LLM call uses Hugging Face's inference client with Gemma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;huggingface_hub&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;InferenceClient&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_hf_client&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;hf_token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;HF_TOKEN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;hf_token&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;ValueError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;HF_TOKEN not configured&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;InferenceClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;hf_token&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;provider&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;auto&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The natural-language query is then sent to Gemma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;chat_completion&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;google/gemma-3-27b-it&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;temperature&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;512&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The model's response is extracted and validated before anything reaches the database.&lt;/p&gt;

&lt;p&gt;For example, I maintain a list of forbidden SQL operations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;forbidden_keywords&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;insert&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;update&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;delete&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;drop&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;alter&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;create&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;truncate&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;replace&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;attach&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;detach&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The API also checks that the generated statement starts with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;WITH&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This creates a safety layer between the LLM and the database.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub Repository:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/adityabhaskarme/LLM-Sql" rel="noopener noreferrer"&gt;https://github.com/adityabhaskarme/LLM-Sql&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;The project uses the following stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Google Gemma&lt;/strong&gt; — generates SQL from natural-language requests&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hugging Face Inference&lt;/strong&gt; — provides access to the Gemma model&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FastAPI&lt;/strong&gt; — exposes the backend API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SQLite&lt;/strong&gt; — stores and queries the sample customer database&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pydantic&lt;/strong&gt; — validates API requests and responses&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Python&lt;/strong&gt; — powers the complete backend&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The database currently contains a simple &lt;code&gt;customers&lt;/code&gt; table:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;customers

customer_id
name
gender
location
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When a user submits a question, the application first gives Gemma information about the database schema.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Table: customers

Columns:
- customer_id
- name
- gender
- location
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The prompt then instructs Gemma to return only a valid SQLite query.&lt;/p&gt;

&lt;p&gt;After receiving the response, the application:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Extracts the generated SQL
2. Checks for forbidden operations
3. Rejects multiple SQL statements
4. Ensures it is a SELECT query
5. Executes the query against SQLite
6. Returns the results through FastAPI
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This was also an interesting part of the project because using an LLM for SQL generation is not only about getting the model to generate correct SQL.&lt;/p&gt;

&lt;p&gt;You also have to think about what happens when that generated output interacts with an actual database.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;Open innovation made this project much easier to experiment with.&lt;/p&gt;

&lt;p&gt;Using an open-weight model like &lt;strong&gt;Gemma&lt;/strong&gt; gives developers more flexibility in how AI is integrated into applications.&lt;/p&gt;

&lt;p&gt;Instead of designing the entire project around one closed API, I can build the architecture around the model itself and choose how I want to run or serve it.&lt;/p&gt;

&lt;p&gt;For example, the same project architecture could eventually use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hugging Face hosted inference

        or

Self-hosted Gemma

        or

Local inference
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;without redesigning the complete application.&lt;/p&gt;

&lt;p&gt;Open models also make it easier to understand, experiment with, customize, and potentially fine-tune the model for a specific use case such as SQL generation.&lt;/p&gt;

&lt;p&gt;For a project like this, I could eventually train or adapt the model specifically around:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A company's database schema&lt;/li&gt;
&lt;li&gt;Internal terminology&lt;/li&gt;
&lt;li&gt;Complex SQL queries&lt;/li&gt;
&lt;li&gt;Domain-specific tables&lt;/li&gt;
&lt;li&gt;Query examples&lt;/li&gt;
&lt;li&gt;Database-specific syntax&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That flexibility is one of the things I find most interesting about building with open AI models.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;I haven't added an agent session yet.&lt;/p&gt;

&lt;p&gt;If I continue developing this project using DevRelay, I can add the session here later.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;p&gt;I am entering this project for categories related to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open-source AI&lt;/li&gt;
&lt;li&gt;Hugging Face / open-weight models&lt;/li&gt;
&lt;li&gt;AI-powered developer tools&lt;/li&gt;
&lt;li&gt;Hacktoberfest Weekend Challenge&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;The current version works with a simple single-table database, but there are several improvements I want to explore.&lt;/p&gt;

&lt;p&gt;Next, I want to add:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multiple-table support&lt;/li&gt;
&lt;li&gt;Automatic schema discovery&lt;/li&gt;
&lt;li&gt;SQL &lt;code&gt;JOIN&lt;/code&gt; generation&lt;/li&gt;
&lt;li&gt;More advanced SQL parsing&lt;/li&gt;
&lt;li&gt;Stronger query validation&lt;/li&gt;
&lt;li&gt;Better handling of ambiguous questions&lt;/li&gt;
&lt;li&gt;Query explanation&lt;/li&gt;
&lt;li&gt;Support for larger databases&lt;/li&gt;
&lt;li&gt;Database-specific SQL generation&lt;/li&gt;
&lt;li&gt;Self-hosted Gemma inference&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Eventually, I would also like to move from:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User → LLM → SQL
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;toward a more intelligent database agent:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User
 ↓
Gemma
 ↓
Understand Database Schema
 ↓
Generate SQL
 ↓
Validate Query
 ↓
Execute Query
 ↓
Inspect Result
 ↓
Explain Result to User
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This project started as a simple Natural Language to SQL experiment, but it has been a useful way to explore how open LLMs like Gemma can become practical interfaces between humans and structured data.&lt;/p&gt;

&lt;p&gt;Thanks for reading! 🚀&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
    </item>
  </channel>
</rss>
