<?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: DHIRAJ BHAVIKATTI</title>
    <description>The latest articles on DEV Community by DHIRAJ BHAVIKATTI (@dhirajb05).</description>
    <link>https://dev.to/dhirajb05</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%2F4163531%2Fe4570b6e-cba4-4aa4-af20-2b2e6414c377.png</url>
      <title>DEV Community: DHIRAJ BHAVIKATTI</title>
      <link>https://dev.to/dhirajb05</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dhirajb05"/>
    <language>en</language>
    <item>
      <title>Sloth-Sorter: Command Line Tool.</title>
      <dc:creator>DHIRAJ BHAVIKATTI</dc:creator>
      <pubDate>Sun, 25 Oct 2026 07:19:01 +0000</pubDate>
      <link>https://dev.to/dhirajb05/sloth-sorter-command-line-tool-1e75</link>
      <guid>https://dev.to/dhirajb05/sloth-sorter-command-line-tool-1e75</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;h3&gt;
  
  
  What I Built
&lt;/h3&gt;

&lt;p&gt;Sloth Sorter is a command-line tool. It sorts and renames the files in your Downloads folder. A small AI model on your own computer does the work. No file leaves your machine.&lt;/p&gt;

&lt;p&gt;Example: &lt;code&gt;bill_oct.pdf&lt;/code&gt; becomes &lt;code&gt;Documents/Bills/2026-10_Electricity-Bill.pdf&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Many AI organizers upload your bank statements, IDs, and resumes to a server you do not control. Sloth does not. Anyone with a messy Downloads folder can set it up once and stop sorting by hand.&lt;/p&gt;




&lt;h3&gt;
  
  
  Demo
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ sloth plan --folder ~/Downloads
Plan: 14 files
  bill_oct.pdf  -&amp;gt;  Documents/Bills/2026-10_Electricity-Bill.pdf
  setup.exe     -&amp;gt;  Installers/setup.exe
2 files need review. Nothing has changed yet.

$ sloth run --folder ~/Downloads --yes
14 files tidied. 2 need review.

$ sloth undo --last 3
Put 3 files back.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Code
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/DhirajB05/sloth-sorter" rel="noopener noreferrer"&gt;github.com/DhirajB05/sloth-sorter&lt;/a&gt;&lt;/p&gt;




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

&lt;h4&gt;
  
  
  Open-source parts
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ollama&lt;/strong&gt; runs the model on my computer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Qwen2.5 3B&lt;/strong&gt; is the default model. It runs on CPU. You can swap it for Llama 3.2 3B or another model with one line in &lt;code&gt;sloth.toml&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Python tools:&lt;/strong&gt; watchdog, typer, pydantic, pypdf, python-docx, SQLite.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  How it works
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Watch the folder for new files.&lt;/li&gt;
&lt;li&gt;Wait until the file is fully downloaded (size and time stay the same for 3 seconds).&lt;/li&gt;
&lt;li&gt;Read the first 1,500 characters of the file.&lt;/li&gt;
&lt;li&gt;Ask the model for a category and a clean name. Ollama must reply in a fixed JSON format. Pydantic checks the reply.&lt;/li&gt;
&lt;li&gt;Make sure the new path stays inside the folder.&lt;/li&gt;
&lt;li&gt;Move the file. Save the move in a SQLite log.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Fallbacks
&lt;/h4&gt;

&lt;p&gt;If Ollama is off, Sloth sorts by file extension. If the model is not sure, the file goes to &lt;code&gt;Needs Review&lt;/code&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Safety rules
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Sloth never deletes or overwrites a file. A name clash gets a number: &lt;code&gt;file (2).pdf&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Sloth ignores partial downloads (&lt;code&gt;.crdownload&lt;/code&gt;, &lt;code&gt;.part&lt;/code&gt;, &lt;code&gt;.tmp&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Sloth only talks to &lt;code&gt;localhost&lt;/code&gt;. A test fails if any other network call happens.&lt;/li&gt;
&lt;li&gt;Every move can be undone with &lt;code&gt;sloth undo&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Limits
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;The model makes mistakes. Example: [one real wrong result].&lt;/li&gt;
&lt;li&gt;Sloth does not read images. It uses only the file name.&lt;/li&gt;
&lt;li&gt;Scanned PDFs have no text, so the model has little to read.&lt;/li&gt;
&lt;/ul&gt;




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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Privacy:&lt;/strong&gt; your files stay on your disk. A closed API needs an upload for each file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offline:&lt;/strong&gt; it works with no internet. [I tested with Wi-Fi off: result.]&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost:&lt;/strong&gt; it costs nothing to run after install. A closed API charges for each call.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Swap models:&lt;/strong&gt; I compared two models by changing one config line. A closed API gives you the model the vendor chooses.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Control:&lt;/strong&gt; I set my own folders and naming rules in a config file.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>TrailEar: Offline Birding Companion for Hacktoberfest Touch Grass Challenge</title>
      <dc:creator>DHIRAJ BHAVIKATTI</dc:creator>
      <pubDate>Sun, 11 Oct 2026 18:34:30 +0000</pubDate>
      <link>https://dev.to/dhirajb05/trailear-offline-birding-companion-for-hacktoberfest-touch-grass-challenge-5dao</link>
      <guid>https://dev.to/dhirajb05/trailear-offline-birding-companion-for-hacktoberfest-touch-grass-challenge-5dao</guid>
      <description>&lt;p&gt;This is a submission for the** Hacktoberfest** Open-Source AI Challenge Week 1: Touch Grass&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I Built:&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;TrailEar&lt;/strong&gt; is an offline birding companion that keeps your eyes on the trail. Most bird-ID apps need signal, hold your attention on a screen, and send your audio and location to a server. TrailEar listens through the mic, gives a quiet cue when it detects a bird, and saves the details for a summary after the walk.&lt;/p&gt;

&lt;p&gt;It’s for beginner and casual birders who want to learn calls without staring at a phone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Demo:&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Run locally:&lt;/strong&gt;&lt;br&gt;
uvicorn trailear.backend.api:app --host 127.0.0.1 --port 8000&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Code:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://github.com/DhirajB05/HacktoberFest_C2.git" rel="noopener noreferrer"&gt;https://github.com/DhirajB05/HacktoberFest_C2.git&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;FastAPI backend, SQLite storage, and a static HTML/JS frontend with six views (Home, Setup, Live, Summary, History, About).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How I Built It&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Detection:&lt;/strong&gt; BirdNET-Analyzer on 3-second mic windows (sounddevice, 48 kHz mono), with a confidence threshold and a 60-second cooldown per species so cues stay rare. &lt;br&gt;
&lt;a href="https://dev.tourl"&gt;Summaries:&lt;/a&gt; a small local LLM through Ollama or llama.cpp. It only summarizes the detection list plus a static species file, and is told not to add facts.&lt;br&gt;
Live cues: server-sent events, so there is no extra infrastructure.&lt;br&gt;
Privacy by design: the server binds to localhost, there is no telemetry, and there are no runtime network calls.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Does Open Innovation Matter?&lt;/strong&gt;&lt;br&gt;
Works with no signal. A cloud API fails exactly where trails are.&lt;br&gt;
Your data stays yours. Audio and GPS history never leave the device.&lt;br&gt;
Costs nothing to run. There are no per-call fees.&lt;br&gt;
Swappable parts. The LLM or the detection model can be replaced without touching the rest.&lt;br&gt;
Honest limits. Small local models are weaker than closed ones, which is why the LLM only does constrained summaries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My Agent Session&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Built with the opencode agent framework: backend scaffolding, audio capture, the frontend, and end-to-end testing.&lt;br&gt;
&lt;strong&gt;Session link:&lt;/strong&gt;&lt;a href="https://opncd.ai/share/STkDsk70" rel="noopener noreferrer"&gt;https://opncd.ai/share/STkDsk70&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>gemmachallenge</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Hi there!, i'm new to DEV community....</title>
      <dc:creator>DHIRAJ BHAVIKATTI</dc:creator>
      <pubDate>Mon, 05 Oct 2026 10:00:52 +0000</pubDate>
      <link>https://dev.to/dhirajb05/hi-there-im-new-to-dev-community-m3e</link>
      <guid>https://dev.to/dhirajb05/hi-there-im-new-to-dev-community-m3e</guid>
      <description></description>
    </item>
  </channel>
</rss>
