This is a submission for the Hacktoberfest Open-Source AI Challenge, Week 3: Slow and Steady.

What I Built

The least glamorous part of debugging a container incident is often the first five minutes: staring at a log stream and reading the same error dozens of times. I wanted the next operator to receive a small, readable handoff instead.

QuietOps is a local-first Python CLI that turns a bounded Docker/Linux log file into grouped symptoms and a cautious briefing generated by Gemma 3 1B running locally through Ollama.

The workflow is intentionally simple:

  1. Scan the file for errors and warnings, with explicit limits on input size and line count.
  2. Remove common secrets, IP addresses and email addresses on a best-effort basis; group repetitive messages and assign evidence IDs such as E01–E05.
  3. Send only a small set of redacted examples to a loopback-only Ollama endpoint.
  4. Ask the local model for an overview, possible explanations and read-only follow-up checks.
  5. Validate the JSON structure and discard notes that reference non-existent evidence IDs.
  6. Create Markdown, JSON and a standalone HTML handoff.

This is not an auto-remediation agent. It cannot connect to a production server, execute shell commands, edit configuration or restart containers. The human operator remains in control.

Demo

New repository: infraopsx/quietops

Verified real-Gemma run: GitHub Actions: Real Gemma inference smoke test — successful

Actual model-generated reports: Read the public real-Gemma audit and verbatim excerpts or open the successful workflow run and download its quietops-real-gemma-report artifact (HTML, Markdown, JSON). The repository also has a deterministic preview, explicitly labeled AI not run. These are different artifacts; I did not pass the preview off as an AI result.

Try the deterministic preview with no AI setup:

python3 examples/make_demo.py python3 -m quietops preview examples/docker-incident.log --output-dir out/ ~~~{% endraw %} For a real model-backed run after installing Ollama:{% raw %} ~~~bash ollama pull gemma3:1b # Make sure the local Ollama service is running. python3 -m quietops scan examples/docker-incident.log --model gemma3:1b --output-dir out/ ~~~{% endraw %} The example is synthetic. It contains 240 Docker-style lines covering a database authentication error, query timeouts, worker queue retries, and an Nginx upstream returning 502. There are **no real customer logs** in the repository or public CI. Here is the reproducible first-pass result: | Measure | Value | |---|---:| | Raw log lines | 240 | | Error/warning lines | 110 | | Grouped signatures | 5 | | Redaction/ANSI-cleanup affected lines | 68 | | Initial review entries (240 → 5) | 97.9% fewer | **That 97.9% measures reading items, not time saved or diagnostic accuracy.** It would take an operator study to claim a productivity gain. ## Code The project uses only Python's standard library, and keeps Ollama as a separately installed local inference server. The core is broken into small inspectable stages:{% raw %} ~~~text input log → byte/line limits → best-effort secret redaction → error/warning filtering → repeated-signature grouping → E01–E05 evidence IDs → Ollama API on 127.0.0.1 → Gemma 3 1B JSON response → ID and structure validation → self-contained HTML + Markdown + JSON ~~~ There is no signup, managed cloud database, background collector, hosted model or remote log upload. The network request is restricted to localhost, with HTTP proxies disabled for it. The parser checks the size before reading the entire file and does not process unbounded streams. The project includes **14 automated tests**, including a fake local Ollama HTTP server, redaction tests and tests that reject invented evidence IDs. A separate GitHub Actions workflow downloads the *actual* Gemma model and verifies a real model-generated artifact. These are deliberately separate levels of evidence. ## How I Built It I started from a real operational annoyance rather than a dashboard: an incident handoff should explain the most common failure signatures without replacing the operator's judgment. The first version passed the fake-Ollama tests but **failed with the real model**. Gemma did not produce a JSON object that the program could parse. This was a useful failure: passing an HTTP integration test is not the same thing as passing inference in production. I changed the request to use Ollama's documented **JSON Schema structured-output mode** instead of loosely requesting JSON text. I also bounded the generation context and token count, and added tests to prevent the request contract from silently regressing. The [next real-model CI run passed](https://github.com/infraopsx/quietops/actions/runs/39359492617). The important lesson was not that the small model became infallible. It was that **model integration needs its own acceptance test**. And there is another limitation worth showing honestly: even in a schema-valid report, the model can associate an existing evidence ID with an explanation that the underlying log does not prove. In the real output, for example, one suggested database-related cause referenced a worker queue retry group. The ID was real, but the causal inference was **not validated**. QuietOps checks *reference existence*, not semantic entailment. That is why every finding stays labeled as a hypothesis and every suggested command must be reviewed by a human. The tool's current safety boundary is narrower than automated root-cause analysis. ## Why Does Open Innovation Matter? Operational logs may contain internal hostnames, usernames, network details and credentials. Running inference on-device means the analysis does not require shipping those logs to a third-party API. This was my primary reason for using a locally runnable open-weight model. The other benefit is **control**. I can inspect the preprocessing rules, change the prompt, replace the model and reproduce the test environment without paying per-token API fees. Once the model weights are downloaded, local inference can run without an external model service. QuietOps's own code is MIT-licensed. **Gemma model weights have their own Google Gemma terms** and are not redistributed with the project. Secret redaction is best-effort, so users must still inspect logs before processing or sharing them. ## The Lazy Payoff Instead of requiring a tired operator to scroll 240 synthetic lines to find five recurring patterns, QuietOps turns the first pass into **five reviewable groups**, supplemented by an optional local-AI briefing. It is a small, reproducible convenience, not an AI that claims to fix outages. The best possible result is that the next person can **start asking better questions sooner**—and can see exactly where the model might be wrong. ## Prize Categories - **Best Use of Gemma** — actual Gemma 3 1B inference is demonstrated in the successful GitHub Actions run linked above. --- **Development disclosure:** AI-assisted coding and English drafting were used in this project. The synthetic examples, CI outcomes and limitations are described as they actually occurred. No paid customers, real production diagnoses, measured human time savings or contest winnings are claimed.