About My Herodotus

App thumbnail image

Herodotus, often considered the “Father of Historians,” was also a prolific travel journalist. His Histories act as one of the very first travel guides of the Ancient Mediterranean.

This project demonstrates how to create your own travel guide using Gemini hosted on Google Cloud–in effect, your very own Herodotus.

See the app

About

In 2024, my team in Google Cloud Developer Relations decided to set goals for individual up-skilling. One of the projects discussed was to create an AI-powered travel guide. I decided to pursue this project and I themed my web app after Herodotus, the ancient Greek historian.

The My Herodotus app demonstrates many fundamentals of generative AI and ML engineering. The app itself is written in Go with Gin as the web platform. The frontend is built using plain HTML and some light JavaScript; Bulma.io is used for the styling. Additional features are implemented as microservices: evaluation, monitoring, embeddings/vector database, and even a Reddit tool using agent.

Attributions

  • Gemini is a product published by Google.
  • Bulma.io is a free, open-source framework for CSS. It is available under the MIT license.

Details

  • Current version: v1.7.0
  • Compatible with all browsers
  • Requires log-in with a Google account. (Why? It costs money to use Gemini and the other features of Google Cloud. I want to restrict access to serious inquiries only.)

Features

  • Provides a session-aware, back-and-forth conversation with an AI chatbot

  • Gives travel recommendations based upon the user’s input

  • Provides multiple AI features, configurable by the user:

    • Use out-of-the-box Gemini model
    • Use a tuned Gemini model
    • Use a tuned Gemma model
    • Use a Gemini model assisted by an agent (using a Reddit tool)
  • Hosted on Google Cloud Run

  • Uses Eventarc and BigQuery for analytics

  • Uses Cloud Logging for monitoring

  • Uses Firebase for authentication and login

  • Uses Firestore for storing embeddings

Known issues

  • The Gemma model doesn’t provide very good responses :/.
  • The vector database doesn’t retrieve tokenized content correctly.