This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass
What I Built
EcoTrace AI is a nature guide on Telegram, designed to help people spend less time looking at their screens and more time noticing the world around them.
When you spot an unfamiliar plant, animal, or track outdoors, you can describe it or send a photo. EcoTrace AI returns a concise field guide with a likely identification, an explanation of its uncertainty, and practical safety advice.
The experience is intentionally simple: ask a question, get a useful starting point, then put your phone away and keep exploring. It is for curious hikers, families, students, and anyone who wants to learn more about a nature encounter without treating AI as an authority.
For photo questions, EcoTrace AI uses a two-step vision-to-text workflow: Moondream describes visible details, then Gemma uses that description and your question to create the guide. Text-only questions go directly to Gemma.
Safety is part of the design. The guide is instructed not to overstate species-level identifications or recommend touching or eating unfamiliar wild organisms. Its answers are suggestions—not a substitute for a local expert.
Demo
(refresh first)
A good demo could show both paths: asking about a nature observation in text, then sending a photo with a question.
Code
EcoTrace AI
EcoTrace AI is a Telegram nature guide for people who are already outdoors. Describe something you found or send a photo, get a cautious identification with practical safety advice, and get back to exploring. It can help with plants, animals, tracks and other nature observations.
Touch Grass challenge
The goal is to make the screen the shortest part of a nature encounter: ask a question or take a photo, read a concise field guide, then put the phone away. EcoTrace AI supports both quick text descriptions and photo-based observations. It asks the model to explain uncertainty, avoid unsupported species-level claims, and never suggest touching or eating an unfamiliar wild organism.
Why open AI
The core inference runs locally through Ollama using open-weight models. For a photo, Moondream describes visible details and Gemma uses that description and the user's question to produce the guide. For text-only questions, Gemma responds…
How I Built It
EcoTrace AI is built in Python as an asynchronous Telegram bot using python-telegram-bot. The bot handles /start, menu navigation, text questions, and photo messages.
The AI inference runs locally through Ollama:
Text: Gemma (gemma2:2b by default) generates a concise nature guide from the user’s description.
Photos: Moondream describes visible features without naming the subject; Gemma then uses those observations and the user’s question to write the final answer.
This separation gives each model a focused role: one describes what is visible, while the other turns that description into a cautious, useful response. The text model can be changed through the DEFAULT_MODEL environment variable.
Photo files are downloaded temporarily for analysis and removed afterward. Local inference does not mean the entire app works offline: Telegram still needs an internet connection to deliver messages. Sentry can also be enabled for error reporting and tracing.
Why Does Open Innovation Matter?
Open innovation makes this project’s most important choice possible: running AI inference on a machine the user controls instead of sending prompts and photos to an external AI inference API.
With open-weight models and Ollama, the model setup and guiding instructions can be inspected, changed, and adapted. The two-model workflow is also easy to experiment with: developers can swap the text model or vision model and see how those choices affect the experience.
That flexibility matters for a nature guide. Its job is not just to produce a confident-sounding answer; it should communicate uncertainty and encourage safer decisions outdoors. Open tools make those behaviors easier to examine and improve.
Prize Categories
Best Use of Gemma
Best Use of Sentry Agent Tracing

Top comments (0)