DEV Community

Cover image for Dobara: the repair counter where Gemma reads the fault and the graph sets the rupees
Ashwin Temkar
Ashwin Temkar

Posted on

Dobara: the repair counter where Gemma reads the fault and the graph sets the rupees

Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle Submission đź’¸

This is a submission for the Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle

What I Built

A phone comes back to the counter and the customer says it is the same problem. The person at the desk has to decide, while the customer is still standing there, whether the repair is free, whether only the labor is charged, or whether this customer still owes the last job and should not get a new one.

Dobara is that counter for a small repair shop. The sample shop is Screenwala, Karve Nagar, Pune: one owner, two technicians, and a book of phones, parts, and unpaid jobs. You type what the customer said, including the Hinglish a real counter hears. A local open-weight model reads the fault. A graph decides the money.

The shop’s promise and the supplier’s warranty are different clocks. Screenwala gives a free comeback for 30 days. The display supplier warrants the part for 90 days. The battery supplier warrants it for 60. The model may name the fault. It may not set the rupees.

The person who would pay is the shop owner, or someone running two or three counters under one name. A free screen given to someone who should have paid, or a paid job given to someone inside the promise, costs the part. On this book that is Rs 1,800 to Rs 4,500. A small monthly fee is cheaper than one wrong comeback. Nobody has paid it yet. That price is a hypothesis.

Three walk-ins are the product.

Rahul Deshmukh says the touch is back. His iPhone 13 had a paid display job, J-104, closed 12 days ago. Imran Shaikh did it. The panel came from Shree Displays. Twelve days is inside thirty. The slip says free comeback, Rs 0, and sends it back to Imran.

Neha Kulkarni says the battery died again. Her Redmi Note 12 was repaired 40 days ago, job J-088, by Sagar Patil. The shop promise is over. CellHouse’s battery warranty is 60 days, so 20 days remain. The slip charges labor only, Rs 400, and leaves the part on the supplier. Sagar takes it.

Amit Joshi wants a screen on the other phone. Job J-091 is still open: a charging port on his Samsung M14, Rs 1,800, six days old, Imran’s job. The slip refuses the new work. Collect J-091 first.

If Rahul says “battery” instead of “touch,” the old display job does not count. That is a new paid battery job, Rs 1,800, assigned to Sagar. The customer’s “same problem” is not evidence. The fault has to match a job in the graph.

The phones, IMEIs, and invoices are invented.

Dobara counter before a decision

Demo

Pick a walk-in, then Decide from the graph. The slip shows the outcome, the amount, the technician, and the path: customer, device, earlier job, part and supplier, and the 30-day rule. End this conversation clears the slip. Ask the book, with “What did we decide about Rahul?”, reads the decision back. Closing the page does not delete it.

Replace the two slips below with screenshots from the running app, and put the video or live URL here.

dobara.ashwintemkar.com

Rahul, free comeback, Rs 0

Neha, labor only, Rs 400

Code

DOBARA

docker compose up -d
py -m pip install -r requirements.txt
py server.py
Enter fullscreen mode Exit fullscreen mode

Open http://127.0.0.1:8080. The graph name is screenwala. FalkorDB Browser is on port 3000. py check.py checks the four outcomes: free comeback, labor only, collect first, and a new paid job when the fault does not match.

How I Built It

The open piece that decides is a Cypher CASE in FalkorDB, not the language model.

CASE
  WHEN unpaid IS NOT NULL THEN 'collect_first'
  WHEN last IS NULL THEN 'new_paid'
  WHEN age <= pol.comeback_days THEN 'free_comeback'
  WHEN last.warranty_days IS NOT NULL AND age <= last.warranty_days THEN 'labor_only'
  ELSE 'new_paid'
END
Enter fullscreen mode Exit fullscreen mode

age is today’s day-number minus the day the matching job was closed. Unpaid work wins first. Then a matching paid repair inside the shop promise. Then the same fault still inside the part warranty, which bills labor only. Otherwise it is a new paid job, priced from the skill: touch Rs 4,500, battery Rs 1,800, charging Rs 1,200. The technician is the person who did the earlier repair, or, for a new job, the available person skilled in that fault.

Gemma 3 4B runs locally through Ollama. It returns JSON: phone, customer, fault. The fault is kept only when the complaint says touch, screen, display, battery, or charging. A fault the model invents is dropped. Amounts never come from the model.

The app is Python, FastAPI, and one HTML page. The graph holds the shop, the policy, people, skills, customers, devices, parts, suppliers, jobs, and decisions. A decision points at the customer, the jobs it used, the policy, and the technician. The next session reads those nodes. There is no second database.

Why Does Open Innovation Matter?

A repair book is phone numbers, IMEIs, and what people still owe. Sending that to a closed API on every walk-in means another company sees the book, and a per-call price sits under whatever fee the shop can charge.

Gemma on the shop machine makes the reading cost electricity. FalkorDB on the same machine makes the rule a query the owner can change: comeback days and labor rupees are properties, not a prompt. The slip can show the path from Neha to J-088 to CellHouse. A closed model can be told to be careful with warranties. It cannot be required to stop at an empty path.

Prize Categories

  • Best Use of Gemma. Gemma 3 4B, through Ollama, reads every complaint on the shop machine. The graph still sets the outcome.

Top comments (0)