|
import os |
|
|
|
import geopandas as gpd |
|
import pandas as pd |
|
import streamlit as st |
|
from llama_index.core import load_index_from_storage, StorageContext |
|
from llama_index.core.retrievers import BaseRetriever |
|
from llama_index.embeddings.voyageai import VoyageEmbedding |
|
from llama_index.vector_stores.faiss import FaissVectorStore |
|
|
|
from .config import PROJECT_ROOT |
|
|
|
|
|
@st.cache_data(show_spinner=":blue[Loading the database..] Please wait...", persist=True) |
|
def prepare_indian_geojson(): |
|
url = "https://raw.githubusercontent.com/Subhash9325/GeoJson-Data-of-Indian-States/master/Indian_States" |
|
|
|
gdf = gpd.read_file(url) |
|
gdf["geometry"] = gdf.to_crs(gdf.estimate_utm_crs()).simplify(1000).to_crs(gdf.crs) |
|
india_states = gdf.rename(columns={"NAME_1": "ST_NM"}).__geo_interface__ |
|
return india_states |
|
|
|
|
|
@st.cache_data() |
|
def prepare_indian_languages(): |
|
path = PROJECT_ROOT / "data" / "languages.csv" |
|
df = pd.read_csv(path) |
|
return df |
|
|
|
@st.cache_data() |
|
def prepare_unit_data(path: str, drop_col: str = "type") -> pd.DataFrame: |
|
df = pd.read_csv(path) |
|
if drop_col: |
|
df.drop("type", axis=1, inplace=True) |
|
return df |
|
|
|
def generate_color_range(start_rgb, end_rgb, steps): |
|
""" |
|
Generate a color range between two RGB colors. |
|
|
|
:param start_rgb: Tuple representing the starting RGB color. |
|
:param end_rgb: Tuple representing the ending RGB color. |
|
:param steps: Number of steps in the color range. |
|
:return: List of interpolated RGB colors. |
|
""" |
|
color_range = [] |
|
for t in range(steps + 1): |
|
r = int(start_rgb[0] * (1 - t/steps) + end_rgb[0] * (t/steps)) |
|
g = int(start_rgb[1] * (1 - t/steps) + end_rgb[1] * (t/steps)) |
|
b = int(start_rgb[2] * (1 - t/steps) + end_rgb[2] * (t/steps)) |
|
color_range.append(f"rgb({r} {g} {b})") |
|
return color_range |
|
|
|
@st.cache_resource |
|
def load_retriever(persist_dir: str, top_k: int = 5) -> BaseRetriever: |
|
embed_model = VoyageEmbedding(model_name="voyage-large-2", voyage_api_key=os.environ["VOYAGE_API_KEY"]) |
|
storage_context = StorageContext.from_defaults( |
|
vector_store=FaissVectorStore.from_persist_dir(persist_dir), |
|
persist_dir=persist_dir, |
|
) |
|
loaded_index = load_index_from_storage(storage_context, embed_model=embed_model, show_progress=True) |
|
return loaded_index.as_retriever(similarity_top_k=top_k, vector_store_query_mode="semantic_hybrid", vector_store_kwargs={"alpha": 0.1}) |
|
|
|
@st.cache_data |
|
def load_bubble_data(df_path: str ): |
|
df = pd.read_csv(df_path) |
|
query = lambda x: st.session_state["_conn"].storage.from_('indian_food').get_public_url(f'food-classes/{x.capitalize()}.jpg') |
|
df["url"] = df["grup"].apply(query) |
|
return df |
|
|
|
|