|
11 | 11 | import os |
12 | 12 | import re |
13 | 13 | import time |
| 14 | +from pathlib import Path |
14 | 15 |
|
15 | 16 | import numpy as np |
16 | 17 | import pandas as pd |
17 | 18 | import streamlit as st |
18 | 19 |
|
19 | | -from evident import config |
20 | | -from evident.data import load_beir |
21 | | -from evident.ingest import list_corpora, load_corpus |
22 | | -from evident.llm import LLM, PROVIDERS |
23 | | -from evident.rag import RAG |
24 | | -from evident.retriever import MODES, Retriever |
| 20 | +# Streamlit Community Cloud checks the repo out under /mount/src. The hosted settings must be in |
| 21 | +# the environment before evident.config is imported. |
| 22 | +ON_STREAMLIT_CLOUD = Path(__file__).resolve().as_posix().startswith("/mount/src/") |
| 23 | +HOSTED = os.environ.get("EVIDENT_HOSTED") == "1" or ON_STREAMLIT_CLOUD |
| 24 | +DEMO_DATA_REPO = "vividh111/evident-demo-data" # precomputed embeddings (Hugging Face dataset) |
| 25 | +if HOSTED: |
| 26 | + os.environ.setdefault("EVIDENT_DATA", str(Path.home() / ".cache" / "evident-demo")) |
| 27 | + os.environ.setdefault("EVIDENT_LLM_PROVIDER", "groq") |
| 28 | + os.environ.setdefault("EVIDENT_LLM_MODEL", "llama-3.1-8b-instant") |
| 29 | + try: # Streamlit secrets -> environment, for the LLM client |
| 30 | + for key in ("GROQ_API_KEY", "GEMINI_API_KEY", "OPENAI_API_KEY"): |
| 31 | + if key in st.secrets and not os.environ.get(key): |
| 32 | + os.environ[key] = str(st.secrets[key]) |
| 33 | + except Exception: # no secrets configured |
| 34 | + pass |
| 35 | + |
| 36 | +from evident import config # noqa: E402 |
| 37 | +from evident.data import load_beir # noqa: E402 |
| 38 | +from evident.ingest import list_corpora, load_corpus # noqa: E402 |
| 39 | +from evident.llm import LLM, PROVIDERS # noqa: E402 |
| 40 | +from evident.rag import RAG # noqa: E402 |
| 41 | +from evident.retriever import MODES, Retriever # noqa: E402 |
25 | 42 |
|
26 | 43 | HOSTED = os.environ.get("EVIDENT_HOSTED") == "1" |
27 | 44 | QUESTION_LIMIT = 20 # per browser session on the hosted demo (protects the free API quota) |
|
32 | 49 | st.set_page_config(page_title="Evident + Strata demo", layout="wide") |
33 | 50 |
|
34 | 51 |
|
| 52 | +@st.cache_resource(show_spinner="Downloading precomputed embeddings (first start only)...") |
| 53 | +def ensure_demo_data() -> None: |
| 54 | + """On the hosted demo, fetch document embeddings instead of recomputing them on a small CPU. |
| 55 | + The BEIR corpora themselves are downloaded from their original source on first use.""" |
| 56 | + if not HOSTED or any((config.CACHE_DIR / "embeddings").glob("*.npy")): |
| 57 | + return |
| 58 | + from huggingface_hub import snapshot_download |
| 59 | + |
| 60 | + snapshot_download(DEMO_DATA_REPO, repo_type="dataset", local_dir=str(config.DATA_DIR), |
| 61 | + allow_patterns=["cache/*", "indexes/*"]) |
| 62 | + |
| 63 | + |
| 64 | +ensure_demo_data() |
| 65 | + |
| 66 | + |
35 | 67 | # --------------------------------------------------------------------------------------------- |
36 | 68 | # Cached resources |
37 | 69 | # --------------------------------------------------------------------------------------------- |
|
0 commit comments