bookfinder takes your Goodreads history and runs it through a series of interactive LLM prompts to determine your core reading preferences. It then automatically cross-references these patterns with the SFPL catalog to find available books at your local branches, allowing you to iterate on the results until you find something you actually want to read.
i made up a bro in my mind who thinks we should replace librarians with the LLM
i thought about how one would do this, and made bookfinder over a weekend.
librarians do amazing work, and they're good at it! however, this problem is decently well suited to an LLM.
LLMs have been trained on every published novel as well as much of our discussion around these novels. you can also throw your entire goodreads history at an LLM, and it will do a decent job at identifying the patterns in your ratings.
ideally, this software gets more people to go to their libraries! support your public services!
- create a
.envfile and add yourAPI_KEY(Gemini API) - provide
goodreads_library_export.csvin the root directory. you can obtain this file from Goodreads' history export tool. - configure
user_settings.jsonwith your preferred library branch codes (e.g.,["G4", "E9"]).
setup and run:
linux/macOS:
# create and activate virtual environment
python3 -m venv venv
source venv/bin/activate
# install dependencies
pip install -r requirements.txt
# start
python3 main.pywindows:
# create and activate virtual environment
python -m venv venv
.\venv\Scripts\activate
# install dependencies
pip install -r requirements.txt
# start
python main.pyworkflow:
- analysis: the agent analyzes your Goodreads history
- survey: you answer 3-5 questions to clarify your preferences
- search: the agent performs a "wide net" search of 15 books' availability at your local SFPL branch(es)
- feedback: critique the results until you find a few books you like
search_session.json will be created in the root directory to cache your preferences. delete this file if you wish to start a completely fresh session.
- provide support for searching for books in other languages or translations
- implement more cities' public library systems
- implement support for LLM providers with better privacy