fasthtml-vespa / README.md
thomasht86's picture
deploy at 2024-08-22 13:23:49.666417
557ba5e verified
|
raw
history blame
5.03 kB
metadata
title: thomasht86/fasthtml-vespa
emoji: πŸš€
colorFrom: purple
colorTo: red
sdk: docker
app_file: app.py
pinned: false
termination_grace_period: 2m

FastHTML Vespa-frontend

This is a simple frontend for Vespa search engine. It is built using FastHTML and written in pure Python.

Search page Login page Query logs
search admin-login query-log

Features

  • Simple search interface, with links to search results.
  • Accordion with full JSON-response from Vespa.
  • SQLite DB for storing queries.
  • Admin authentication for viewing and downloading queries.
  • Deployment options - Docker + Huggingface spaces.

Why?

We have recognized the need, both for ourselves and others, to be able to set up a simple frontend for Vespa, without having to navigate the frontend framework jungle.

This sample-app can serve as an example of how you can build and deploy a simple frontend for Vespa, using FastHTML.

How to use

1. Clone this folder to your local machine πŸ“‚

The command below will clone the repository and only fetch the fasthtml-frontend folder.

git clone --depth 1 --filter=blob:none --sparse https://github.com/vespa-engine/sample-apps.git temp-sample-apps && cd temp-sample-apps && git sparse-checkout set fasthtml-frontend && mkdir -p ../fasthtml-frontend && mv fasthtml-frontend/* ../fasthtml-frontend/ && cd .. && rm -rf temp-sample-apps

2. Install dependencies πŸ”§

pip install -r requirements.txt

3. Run the app locally πŸ’»

python main.py

At this point, you should be able to access the app at http://localhost:5001.

But, you will not be able to search for anything, as your environment variables are not set up.

4. Deploy and feed your Vespa application ▢️

By running the deploy_app.ipynb notebook, you will deploy a Vespa application to the Vespa Cloud. The application is just a sample hybrid search application using the BEIR/nfcorpus dataset. Feel free to replace the dataset and application with your own.

Make sure to replace these variables at the top of the notebook with your own values:

# Replace with your tenant name from the Vespa Cloud Console
tenant_name = "mytenant"
# Replace with your application name (does not need to exist yet)
application = "fasthtml"
# Token id (from Vespa Cloud Console)
token_id = "fasthtmltoken"

5. Set up environment variables πŸ”

Make sure to add the output of the token_endpoint from the deploy_app.ipynb- notebook to your .env.example file. This value should be placed in the VESPA_APP_URL environment variable.

At the same time, you should rename the .env.example file to .env. This is added to the .gitignore file.

6. Run the app locally πŸš€

Now, you should be able to run the app locally and search for queries.

python main.py

Open your browser and navigate to http://localhost:5001.

Deployment

If you want to deploy the app, you set the DEV_MODE=False in main.py. This will disable loading of environment variables from the .env file, and instead use the environment variables set in the deployment environment.

Docker 🐳

You can build and run the app using Docker.

Note that there are two Dockerfiles in the repo:

  • Dockerfile is for building the image for Huggingface Spaces.
  • Dockerfile.nonhf is for building an image that can be run locally or on any other platform.

Build the image:

docker build -t fhtdemoimg . -f Dockerfile.nonhf 

Run the container:

  • Makes the environment variables in the .env file available to the container.
  • Will mount the db/ folder to the container, so that the SQLite database is persisted between runs.
  • Sets the hostname to dockerhost, so that we can know use that to enable hot-reloading in the FastHTML app.
  • Maps the default Starlette port 5001 to 8000 on the host.
docker run --name fhtdemo --rm --env-file .env -p 8000:5001 -h dockerhost -v $(pwd)/db:/code/db fhtdemoimg

Huggingface πŸ€— Spaces

This deployment option is free. The deployment script is shamelessly copied from the fasthtml-hf repo. Check it out for details on cli-options, configuration and DB-backup options.

  1. Get a huggingface token with write permissions. You can do this by going to your Huggingface profile and create a new token.
  2. Set the HF_TOKEN environment variable to the token you just created.
  3. Run python deploy_hf.py <your-space-name> [--private true] to deploy the app to Huggingface Spaces.

Go build and show us some cool Vespa apps! πŸš€