Spaces:
Runtime error
Runtime error
ConstCorrectness Claude Sonnet 4.6 commited on
Commit Β·
50dcddc
1
Parent(s): 304503d
Add vector visualization tab, /vectors + /embed endpoints, HF Spaces config
Browse files- Fix README.md with proper HF Spaces docker sdk frontmatter
- Add GET /vectors and POST /embed endpoints to backend
- Add get_all_vectors() to vectordb.py (scroll with_vectors=True)
- Add Visualize tab to Streamlit frontend: PCA 2D scatter via Plotly,
query trajectory trail, top-k highlights with similarity colorscale
- Add scikit-learn and plotly to requirements.txt
- Add websummit_lisbon2025_companies.csv (74 Web Summit Lisbon 2025 companies)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- README.md +31 -1
- backend/main.py +19 -1
- backend/vectordb.py +20 -0
- frontend/app.py +318 -1
- requirements.txt +2 -0
- start.sh +0 -0
- websummit_lisbon2025_companies.csv +75 -0
README.md
CHANGED
|
@@ -1 +1,31 @@
|
|
| 1 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
title: DistanceMetrics
|
| 3 |
+
emoji: π
|
| 4 |
+
colorFrom: blue
|
| 5 |
+
colorTo: indigo
|
| 6 |
+
sdk: docker
|
| 7 |
+
app_port: 7860
|
| 8 |
+
pinned: false
|
| 9 |
+
---
|
| 10 |
+
|
| 11 |
+
# DistanceMetrics
|
| 12 |
+
|
| 13 |
+
Semantic search over structured data with live vector-space visualization.
|
| 14 |
+
|
| 15 |
+
Upload a CSV/XLSX/JSON file, embed it via OpenAI `text-embedding-3-small`, store in Qdrant, then search and watch your query move through the embedding space in real time.
|
| 16 |
+
|
| 17 |
+
## Stack
|
| 18 |
+
|
| 19 |
+
- **Backend** β FastAPI + OpenAI Embeddings + Qdrant
|
| 20 |
+
- **Frontend** β Streamlit with interactive Plotly PCA scatter
|
| 21 |
+
|
| 22 |
+
## Required secrets
|
| 23 |
+
|
| 24 |
+
Set these in the Space **Settings β Variables and secrets**:
|
| 25 |
+
|
| 26 |
+
| Secret | Description |
|
| 27 |
+
|---|---|
|
| 28 |
+
| `OPENAI_API_KEY` | OpenAI API key |
|
| 29 |
+
| `QDRANT_URL` | Qdrant cluster URL |
|
| 30 |
+
| `QDRANT_API_KEY` | Qdrant API key |
|
| 31 |
+
| `QDRANT_COLLECTION` | Collection name (default: `documents`) |
|
backend/main.py
CHANGED
|
@@ -8,7 +8,7 @@ from dotenv import load_dotenv
|
|
| 8 |
from backend.jobs import create_job, get_job, update_job
|
| 9 |
from backend.parser import parse_file, row_to_text, SUPPORTED_EXTENSIONS
|
| 10 |
from backend.embedder import embed_texts, BATCH_SIZE
|
| 11 |
-
from backend.vectordb import ensure_collection, upsert_points, search, list_source_files
|
| 12 |
|
| 13 |
load_dotenv()
|
| 14 |
|
|
@@ -114,6 +114,24 @@ def get_collections():
|
|
| 114 |
return {"files": list_source_files()}
|
| 115 |
|
| 116 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 117 |
@app.get("/health")
|
| 118 |
def health():
|
| 119 |
return {"status": "ok"}
|
|
|
|
| 8 |
from backend.jobs import create_job, get_job, update_job
|
| 9 |
from backend.parser import parse_file, row_to_text, SUPPORTED_EXTENSIONS
|
| 10 |
from backend.embedder import embed_texts, BATCH_SIZE
|
| 11 |
+
from backend.vectordb import ensure_collection, upsert_points, search, list_source_files, get_all_vectors
|
| 12 |
|
| 13 |
load_dotenv()
|
| 14 |
|
|
|
|
| 114 |
return {"files": list_source_files()}
|
| 115 |
|
| 116 |
|
| 117 |
+
@app.get("/vectors")
|
| 118 |
+
def all_vectors():
|
| 119 |
+
points = get_all_vectors()
|
| 120 |
+
return {"points": points, "count": len(points)}
|
| 121 |
+
|
| 122 |
+
|
| 123 |
+
class EmbedRequest(BaseModel):
|
| 124 |
+
query: str
|
| 125 |
+
|
| 126 |
+
|
| 127 |
+
@app.post("/embed")
|
| 128 |
+
def embed_query(req: EmbedRequest):
|
| 129 |
+
if not req.query.strip():
|
| 130 |
+
raise HTTPException(status_code=400, detail="Query cannot be empty")
|
| 131 |
+
vectors = embed_texts([req.query])
|
| 132 |
+
return {"vector": vectors[0]}
|
| 133 |
+
|
| 134 |
+
|
| 135 |
@app.get("/health")
|
| 136 |
def health():
|
| 137 |
return {"status": "ok"}
|
backend/vectordb.py
CHANGED
|
@@ -71,6 +71,26 @@ def search(query_vector: list[float], top_k: int = 10) -> list[dict]:
|
|
| 71 |
]
|
| 72 |
|
| 73 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 74 |
def list_source_files() -> list[str]:
|
| 75 |
client = _get_client()
|
| 76 |
seen: set[str] = set()
|
|
|
|
| 71 |
]
|
| 72 |
|
| 73 |
|
| 74 |
+
def get_all_vectors() -> list[dict]:
|
| 75 |
+
client = _get_client()
|
| 76 |
+
results = []
|
| 77 |
+
offset = None
|
| 78 |
+
while True:
|
| 79 |
+
records, offset = client.scroll(
|
| 80 |
+
collection_name=_collection(),
|
| 81 |
+
with_vectors=True,
|
| 82 |
+
with_payload=True,
|
| 83 |
+
limit=256,
|
| 84 |
+
offset=offset,
|
| 85 |
+
)
|
| 86 |
+
for r in records:
|
| 87 |
+
if r.vector is not None:
|
| 88 |
+
results.append({"vector": r.vector, "payload": r.payload or {}})
|
| 89 |
+
if offset is None:
|
| 90 |
+
break
|
| 91 |
+
return results
|
| 92 |
+
|
| 93 |
+
|
| 94 |
def list_source_files() -> list[str]:
|
| 95 |
client = _get_client()
|
| 96 |
seen: set[str] = set()
|
frontend/app.py
CHANGED
|
@@ -1,13 +1,18 @@
|
|
| 1 |
import time
|
|
|
|
| 2 |
import httpx
|
| 3 |
import streamlit as st
|
|
|
|
|
|
|
| 4 |
|
| 5 |
API_BASE = "http://localhost:8000"
|
| 6 |
|
| 7 |
st.set_page_config(page_title="Semantic Search", page_icon="π", layout="wide")
|
| 8 |
st.title("π Semantic Search")
|
| 9 |
|
| 10 |
-
tab_upload, tab_search, tab_files = st.tabs(
|
|
|
|
|
|
|
| 11 |
|
| 12 |
|
| 13 |
# ---------------------------------------------------------------------------
|
|
@@ -100,6 +105,318 @@ with tab_search:
|
|
| 100 |
st.json(r)
|
| 101 |
|
| 102 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 103 |
# ---------------------------------------------------------------------------
|
| 104 |
# Files tab
|
| 105 |
# ---------------------------------------------------------------------------
|
|
|
|
| 1 |
import time
|
| 2 |
+
import numpy as np
|
| 3 |
import httpx
|
| 4 |
import streamlit as st
|
| 5 |
+
from sklearn.decomposition import PCA
|
| 6 |
+
import plotly.graph_objects as go
|
| 7 |
|
| 8 |
API_BASE = "http://localhost:8000"
|
| 9 |
|
| 10 |
st.set_page_config(page_title="Semantic Search", page_icon="π", layout="wide")
|
| 11 |
st.title("π Semantic Search")
|
| 12 |
|
| 13 |
+
tab_upload, tab_search, tab_viz, tab_files = st.tabs(
|
| 14 |
+
["Upload", "Search", "Visualize", "Indexed Files"]
|
| 15 |
+
)
|
| 16 |
|
| 17 |
|
| 18 |
# ---------------------------------------------------------------------------
|
|
|
|
| 105 |
st.json(r)
|
| 106 |
|
| 107 |
|
| 108 |
+
# ---------------------------------------------------------------------------
|
| 109 |
+
# Visualize tab
|
| 110 |
+
# ---------------------------------------------------------------------------
|
| 111 |
+
with tab_viz:
|
| 112 |
+
# --- Controls row ---
|
| 113 |
+
q_col, k_col, btn_col = st.columns([4, 1, 1])
|
| 114 |
+
with q_col:
|
| 115 |
+
viz_query = st.text_input(
|
| 116 |
+
"Query",
|
| 117 |
+
placeholder="Type a query and press Enter to see where it landsβ¦",
|
| 118 |
+
key="viz_query",
|
| 119 |
+
label_visibility="collapsed",
|
| 120 |
+
)
|
| 121 |
+
with k_col:
|
| 122 |
+
top_k_viz = st.slider("Top K", 3, 20, 8, key="viz_topk", label_visibility="collapsed")
|
| 123 |
+
with btn_col:
|
| 124 |
+
b1, b2 = st.columns(2)
|
| 125 |
+
refresh_btn = b1.button("βΊ", help="Reload vector index & refit PCA", use_container_width=True)
|
| 126 |
+
clear_btn = b2.button("β", help="Clear query history", use_container_width=True)
|
| 127 |
+
|
| 128 |
+
if clear_btn:
|
| 129 |
+
for k in ("query_trajectory", "viz_results", "viz_last_query", "viz_last_topk"):
|
| 130 |
+
st.session_state.pop(k, None)
|
| 131 |
+
|
| 132 |
+
# --- Load / refit PCA ---
|
| 133 |
+
need_init = refresh_btn or "pca_coords" not in st.session_state
|
| 134 |
+
if need_init:
|
| 135 |
+
with st.spinner("Fetching vectors and fitting PCAβ¦"):
|
| 136 |
+
try:
|
| 137 |
+
resp = httpx.get(f"{API_BASE}/vectors", timeout=30)
|
| 138 |
+
resp.raise_for_status()
|
| 139 |
+
raw_points = resp.json()["points"]
|
| 140 |
+
|
| 141 |
+
vecs = np.array([p["vector"] for p in raw_points], dtype=np.float32)
|
| 142 |
+
payloads = [p["payload"] for p in raw_points]
|
| 143 |
+
|
| 144 |
+
pca = PCA(n_components=2, random_state=42)
|
| 145 |
+
coords = pca.fit_transform(vecs)
|
| 146 |
+
|
| 147 |
+
st.session_state.pca_coords = coords
|
| 148 |
+
st.session_state.pca_model = pca
|
| 149 |
+
st.session_state.pca_payloads = payloads
|
| 150 |
+
# reset history when index changes
|
| 151 |
+
st.session_state.query_trajectory = []
|
| 152 |
+
st.session_state.viz_last_query = ""
|
| 153 |
+
except Exception as exc:
|
| 154 |
+
st.error(f"Failed to load vector index: {exc}")
|
| 155 |
+
st.stop()
|
| 156 |
+
|
| 157 |
+
coords = st.session_state.get("pca_coords")
|
| 158 |
+
payloads = st.session_state.get("pca_payloads", [])
|
| 159 |
+
pca = st.session_state.get("pca_model")
|
| 160 |
+
|
| 161 |
+
if coords is None:
|
| 162 |
+
st.info("Click βΊ to load the vector index.")
|
| 163 |
+
st.stop()
|
| 164 |
+
|
| 165 |
+
# --- Embed & search if query changed ---
|
| 166 |
+
prev_query = st.session_state.get("viz_last_query", "")
|
| 167 |
+
prev_topk = st.session_state.get("viz_last_topk", None)
|
| 168 |
+
q_coord = None
|
| 169 |
+
result_scores = {}
|
| 170 |
+
results_list = st.session_state.get("viz_results", [])
|
| 171 |
+
|
| 172 |
+
query_changed = viz_query.strip() and (viz_query != prev_query or top_k_viz != prev_topk)
|
| 173 |
+
|
| 174 |
+
if query_changed:
|
| 175 |
+
try:
|
| 176 |
+
embed_resp = httpx.post(
|
| 177 |
+
f"{API_BASE}/embed", json={"query": viz_query}, timeout=15
|
| 178 |
+
)
|
| 179 |
+
embed_resp.raise_for_status()
|
| 180 |
+
qvec = np.array(embed_resp.json()["vector"], dtype=np.float32)
|
| 181 |
+
q_coord = pca.transform(qvec.reshape(1, -1))[0]
|
| 182 |
+
|
| 183 |
+
search_resp = httpx.post(
|
| 184 |
+
f"{API_BASE}/search",
|
| 185 |
+
json={"query": viz_query, "top_k": top_k_viz},
|
| 186 |
+
timeout=15,
|
| 187 |
+
)
|
| 188 |
+
search_resp.raise_for_status()
|
| 189 |
+
results_list = search_resp.json()["results"]
|
| 190 |
+
result_scores = {r["company_name"]: r["score"] for r in results_list}
|
| 191 |
+
|
| 192 |
+
traj = st.session_state.get("query_trajectory", [])
|
| 193 |
+
traj.append({"text": viz_query, "x": float(q_coord[0]), "y": float(q_coord[1])})
|
| 194 |
+
st.session_state.query_trajectory = traj[-12:]
|
| 195 |
+
st.session_state.viz_results = results_list
|
| 196 |
+
st.session_state.viz_last_query = viz_query
|
| 197 |
+
st.session_state.viz_last_topk = top_k_viz
|
| 198 |
+
|
| 199 |
+
except Exception as exc:
|
| 200 |
+
st.error(f"Query failed: {exc}")
|
| 201 |
+
|
| 202 |
+
elif viz_query.strip() and viz_query == prev_query:
|
| 203 |
+
results_list = st.session_state.get("viz_results", [])
|
| 204 |
+
result_scores = {r["company_name"]: r["score"] for r in results_list}
|
| 205 |
+
traj = st.session_state.get("query_trajectory", [])
|
| 206 |
+
if traj and traj[-1]["text"] == viz_query:
|
| 207 |
+
q_coord = np.array([traj[-1]["x"], traj[-1]["y"]])
|
| 208 |
+
|
| 209 |
+
# --- Build Plotly figure ---
|
| 210 |
+
company_names = [p.get("company_name", "?") for p in payloads]
|
| 211 |
+
industries = [p.get("mapped_industry", "Other") for p in payloads]
|
| 212 |
+
short_descs = [p.get("short_description", "") for p in payloads]
|
| 213 |
+
websites = [p.get("website", "") for p in payloads]
|
| 214 |
+
|
| 215 |
+
unique_inds = list(dict.fromkeys(industries))
|
| 216 |
+
palette = [
|
| 217 |
+
"#60a5fa", "#34d399", "#f59e0b", "#f87171", "#a78bfa",
|
| 218 |
+
"#38bdf8", "#fb923c", "#4ade80", "#e879f9", "#22d3ee",
|
| 219 |
+
"#fb7185", "#86efac", "#fcd34d", "#c4b5fd", "#67e8f9",
|
| 220 |
+
"#fdba74", "#6ee7b7", "#93c5fd",
|
| 221 |
+
]
|
| 222 |
+
ind_color = {ind: palette[i % len(palette)] for i, ind in enumerate(unique_inds)}
|
| 223 |
+
|
| 224 |
+
result_set = set(result_scores.keys())
|
| 225 |
+
other_idx = [i for i, n in enumerate(company_names) if n not in result_set]
|
| 226 |
+
result_idx = [i for i, n in enumerate(company_names) if n in result_set]
|
| 227 |
+
|
| 228 |
+
fig = go.Figure()
|
| 229 |
+
|
| 230 |
+
# 1. Background dots β colored by industry
|
| 231 |
+
for ind in unique_inds:
|
| 232 |
+
idx = [i for i in other_idx if industries[i] == ind]
|
| 233 |
+
if not idx:
|
| 234 |
+
continue
|
| 235 |
+
hex_c = ind_color[ind]
|
| 236 |
+
r, g, b = int(hex_c[1:3], 16), int(hex_c[3:5], 16), int(hex_c[5:7], 16)
|
| 237 |
+
fig.add_trace(go.Scatter(
|
| 238 |
+
x=coords[idx, 0], y=coords[idx, 1],
|
| 239 |
+
mode="markers",
|
| 240 |
+
name=ind,
|
| 241 |
+
legendgroup=ind,
|
| 242 |
+
marker=dict(
|
| 243 |
+
color=f"rgba({r},{g},{b},0.50)",
|
| 244 |
+
size=9,
|
| 245 |
+
line=dict(width=0),
|
| 246 |
+
),
|
| 247 |
+
text=[company_names[i] for i in idx],
|
| 248 |
+
customdata=[[short_descs[i], websites[i]] for i in idx],
|
| 249 |
+
hovertemplate=(
|
| 250 |
+
"<b>%{text}</b><br>"
|
| 251 |
+
"<i>%{customdata[0]}</i><br>"
|
| 252 |
+
"<extra></extra>"
|
| 253 |
+
),
|
| 254 |
+
))
|
| 255 |
+
|
| 256 |
+
# 2. Query trajectory (faded history trail)
|
| 257 |
+
traj = st.session_state.get("query_trajectory", [])
|
| 258 |
+
if len(traj) > 1:
|
| 259 |
+
tx = [t["x"] for t in traj]
|
| 260 |
+
ty = [t["y"] for t in traj]
|
| 261 |
+
tt = [t["text"] for t in traj]
|
| 262 |
+
# opacity fades from oldest (0.15) to newest (0.6)
|
| 263 |
+
n = len(traj)
|
| 264 |
+
for j in range(len(traj) - 1):
|
| 265 |
+
alpha_line = 0.12 + 0.5 * (j / max(n - 2, 1))
|
| 266 |
+
alpha_dot = 0.20 + 0.55 * (j / max(n - 2, 1))
|
| 267 |
+
fig.add_trace(go.Scatter(
|
| 268 |
+
x=[tx[j], tx[j + 1]], y=[ty[j], ty[j + 1]],
|
| 269 |
+
mode="lines",
|
| 270 |
+
line=dict(color=f"rgba(255,140,90,{alpha_line:.2f})", width=1.5, dash="dot"),
|
| 271 |
+
showlegend=False,
|
| 272 |
+
hoverinfo="skip",
|
| 273 |
+
))
|
| 274 |
+
fig.add_trace(go.Scatter(
|
| 275 |
+
x=[tx[j]], y=[ty[j]],
|
| 276 |
+
mode="markers",
|
| 277 |
+
marker=dict(symbol="circle", size=8,
|
| 278 |
+
color=f"rgba(255,140,90,{alpha_dot:.2f})"),
|
| 279 |
+
text=[f'"{tt[j]}"'],
|
| 280 |
+
hovertemplate='<b>Past:</b> %{text}<extra></extra>',
|
| 281 |
+
showlegend=False,
|
| 282 |
+
))
|
| 283 |
+
|
| 284 |
+
# 3. Connector lines β query β each top-k result
|
| 285 |
+
if q_coord is not None:
|
| 286 |
+
for i in result_idx:
|
| 287 |
+
fig.add_trace(go.Scatter(
|
| 288 |
+
x=[q_coord[0], coords[i, 0]],
|
| 289 |
+
y=[q_coord[1], coords[i, 1]],
|
| 290 |
+
mode="lines",
|
| 291 |
+
line=dict(color="rgba(255,80,50,0.20)", width=1.2, dash="dot"),
|
| 292 |
+
showlegend=False,
|
| 293 |
+
hoverinfo="skip",
|
| 294 |
+
))
|
| 295 |
+
|
| 296 |
+
# 4. Top-k results β colored by similarity score
|
| 297 |
+
if result_idx:
|
| 298 |
+
scores = [result_scores[company_names[i]] for i in result_idx]
|
| 299 |
+
sorted_ri = sorted(result_idx, key=lambda i: result_scores[company_names[i]], reverse=True)
|
| 300 |
+
rank_of = {i: r + 1 for r, i in enumerate(sorted_ri)}
|
| 301 |
+
|
| 302 |
+
fig.add_trace(go.Scatter(
|
| 303 |
+
x=coords[result_idx, 0], y=coords[result_idx, 1],
|
| 304 |
+
mode="markers+text",
|
| 305 |
+
name="Top-k matches",
|
| 306 |
+
text=[f"#{rank_of[i]} {company_names[i]}" for i in result_idx],
|
| 307 |
+
textposition="top center",
|
| 308 |
+
textfont=dict(size=10, color="#ffffff"),
|
| 309 |
+
marker=dict(
|
| 310 |
+
color=scores,
|
| 311 |
+
colorscale="YlOrRd",
|
| 312 |
+
size=15,
|
| 313 |
+
opacity=0.95,
|
| 314 |
+
line=dict(width=2, color="white"),
|
| 315 |
+
showscale=True,
|
| 316 |
+
colorbar=dict(
|
| 317 |
+
title=dict(text="Similarity", font=dict(size=11)),
|
| 318 |
+
thickness=14, len=0.45, x=1.02,
|
| 319 |
+
tickfont=dict(size=10),
|
| 320 |
+
),
|
| 321 |
+
),
|
| 322 |
+
customdata=[[short_descs[i], result_scores[company_names[i]], websites[i]]
|
| 323 |
+
for i in result_idx],
|
| 324 |
+
hovertemplate=(
|
| 325 |
+
"<b>%{text}</b><br>"
|
| 326 |
+
"<i>%{customdata[0]}</i><br>"
|
| 327 |
+
"Score: <b>%{customdata[1]:.4f}</b>"
|
| 328 |
+
"<extra></extra>"
|
| 329 |
+
),
|
| 330 |
+
))
|
| 331 |
+
|
| 332 |
+
# 5. Current query β red star
|
| 333 |
+
if q_coord is not None:
|
| 334 |
+
fig.add_trace(go.Scatter(
|
| 335 |
+
x=[q_coord[0]], y=[q_coord[1]],
|
| 336 |
+
mode="markers+text",
|
| 337 |
+
name="Query",
|
| 338 |
+
text=[f'"{viz_query}"'],
|
| 339 |
+
textposition="bottom right",
|
| 340 |
+
textfont=dict(size=11, color="#ff6b6b"),
|
| 341 |
+
marker=dict(
|
| 342 |
+
symbol="star",
|
| 343 |
+
size=22,
|
| 344 |
+
color="#ff3333",
|
| 345 |
+
line=dict(width=2, color="white"),
|
| 346 |
+
),
|
| 347 |
+
hovertemplate=f'<b>Query:</b> "{viz_query}"<extra></extra>',
|
| 348 |
+
))
|
| 349 |
+
|
| 350 |
+
var = pca.explained_variance_ratio_
|
| 351 |
+
fig.update_layout(
|
| 352 |
+
height=640,
|
| 353 |
+
template="plotly_dark",
|
| 354 |
+
paper_bgcolor="rgba(0,0,0,0)",
|
| 355 |
+
plot_bgcolor="rgba(12,14,21,1)",
|
| 356 |
+
title=dict(
|
| 357 |
+
text=(
|
| 358 |
+
f"Embedding space β PCA 2D "
|
| 359 |
+
f"<span style='font-size:11px;color:#888'>"
|
| 360 |
+
f"(PC1 {var[0]:.1%} + PC2 {var[1]:.1%} variance explained)</span>"
|
| 361 |
+
),
|
| 362 |
+
font=dict(size=14),
|
| 363 |
+
x=0.01,
|
| 364 |
+
),
|
| 365 |
+
xaxis=dict(
|
| 366 |
+
title="Principal Component 1",
|
| 367 |
+
showgrid=True, gridcolor="rgba(255,255,255,0.06)",
|
| 368 |
+
zeroline=False, showticklabels=False,
|
| 369 |
+
),
|
| 370 |
+
yaxis=dict(
|
| 371 |
+
title="Principal Component 2",
|
| 372 |
+
showgrid=True, gridcolor="rgba(255,255,255,0.06)",
|
| 373 |
+
zeroline=False, showticklabels=False,
|
| 374 |
+
),
|
| 375 |
+
legend=dict(
|
| 376 |
+
font=dict(size=10),
|
| 377 |
+
bgcolor="rgba(0,0,0,0.45)",
|
| 378 |
+
bordercolor="rgba(255,255,255,0.1)",
|
| 379 |
+
borderwidth=1,
|
| 380 |
+
tracegroupgap=4,
|
| 381 |
+
),
|
| 382 |
+
margin=dict(l=40, r=90, t=60, b=40),
|
| 383 |
+
hovermode="closest",
|
| 384 |
+
)
|
| 385 |
+
|
| 386 |
+
# --- Layout: chart left, results right ---
|
| 387 |
+
chart_col, results_col = st.columns([5, 2])
|
| 388 |
+
|
| 389 |
+
with chart_col:
|
| 390 |
+
st.plotly_chart(fig, use_container_width=True)
|
| 391 |
+
if not viz_query.strip():
|
| 392 |
+
st.caption("π‘ Type a query above and press **Enter** β the β
will appear where your query lands in vector space. Keep refining it to see the trajectory.")
|
| 393 |
+
|
| 394 |
+
with results_col:
|
| 395 |
+
if results_list:
|
| 396 |
+
st.markdown(f"**Top {len(results_list)} Β· _{viz_query}_**")
|
| 397 |
+
st.divider()
|
| 398 |
+
for i, r in enumerate(results_list, 1):
|
| 399 |
+
score = r.get("score", 0)
|
| 400 |
+
name = r.get("company_name", "?")
|
| 401 |
+
short = r.get("short_description", "")
|
| 402 |
+
url = r.get("website", "#")
|
| 403 |
+
ind = r.get("mapped_industry", "")
|
| 404 |
+
bar_filled = round(score * 16)
|
| 405 |
+
bar = "β" * bar_filled + "β" * (16 - bar_filled)
|
| 406 |
+
st.markdown(
|
| 407 |
+
f"**{i}. [{name}]({url})** \n"
|
| 408 |
+
f"`{bar}` `{score:.3f}` \n"
|
| 409 |
+
f"<small style='color:#aaa'>{ind}</small> \n"
|
| 410 |
+
f"<small>{short}</small>",
|
| 411 |
+
unsafe_allow_html=True,
|
| 412 |
+
)
|
| 413 |
+
if i < len(results_list):
|
| 414 |
+
st.divider()
|
| 415 |
+
else:
|
| 416 |
+
st.markdown("### Results")
|
| 417 |
+
st.caption("Will populate once you run a query.")
|
| 418 |
+
|
| 419 |
+
|
| 420 |
# ---------------------------------------------------------------------------
|
| 421 |
# Files tab
|
| 422 |
# ---------------------------------------------------------------------------
|
requirements.txt
CHANGED
|
@@ -8,3 +8,5 @@ pandas==2.2.3
|
|
| 8 |
openpyxl==3.1.5
|
| 9 |
python-dotenv==1.0.1
|
| 10 |
httpx==0.27.2
|
|
|
|
|
|
|
|
|
| 8 |
openpyxl==3.1.5
|
| 9 |
python-dotenv==1.0.1
|
| 10 |
httpx==0.27.2
|
| 11 |
+
scikit-learn>=1.5.0
|
| 12 |
+
plotly>=5.24.0
|
start.sh
CHANGED
|
File without changes
|
websummit_lisbon2025_companies.csv
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
company_name,website,short_description,product_description,mapped_function,mapped_industry,match_keywords,aliases,active,priority,source
|
| 2 |
+
Lovable,https://lovable.dev,AI-powered full-stack app builder for non-engineers,"Lovable lets users build and deploy full-stack web applications by chatting with AI. It generates React code, connects to Supabase backends, and deploys instantly β no coding required. Backed by Y Combinator and used by founders and product teams for rapid prototyping.",App Development,AI Development Tools,"lovable, ai app builder, no-code, react, web app, full stack, supabase, vibe coding, gpt engineer",Lovable AI,true,8,websummit-lisbon2025
|
| 3 |
+
Runway,https://runwayml.com,AI-powered video generation and creative tools platform,"Runway provides generative AI tools for video creation including text-to-video, image-to-video, and advanced video editing. Used by filmmakers, marketers, and creative teams for AI-generated media production at scale.",Video Creation,Creative AI Tools,"runway, ai video, generative video, text to video, video editing, creative ai, media generation, gen-2, gen-3",RunwayML,true,8,websummit-lisbon2025
|
| 4 |
+
Replit,https://replit.com,AI-powered collaborative coding environment and cloud IDE,"Replit is an online IDE with AI coding assistance allowing developers to write, run, and deploy code from any browser. Replit Agent builds full applications from natural language. Used for education, prototyping, and production deployment.",Software Development,Developer Tools,"replit, online ide, ai coding, collaborative coding, deployment, replit agent, browser ide, code editor, cloud ide",Replit IDE,true,7,websummit-lisbon2025
|
| 5 |
+
Decagon AI,https://decagon.ai,AI customer support agents for enterprise companies,"Decagon builds AI-powered customer support agents that handle complex queries end-to-end, integrate with existing helpdesk tools, and escalate to humans when needed. Used by companies like Rippling, Duolingo, and Notion to deflect support volume.",Customer Support,AI SaaS,"decagon, ai customer support, ai agents, helpdesk, customer service automation, support bot, ai chat, deflection",Decagon,true,7,websummit-lisbon2025
|
| 6 |
+
Cloudflare,https://cloudflare.com,"Global network platform for security, performance, and edge computing","Cloudflare provides CDN, DDoS protection, zero trust security, DNS management, and edge computing through its global network spanning 300+ cities. Also offers Workers for serverless edge computing and R2 for object storage.",Network Security & Infrastructure,Cybersecurity,"cloudflare, cdn, ddos protection, zero trust, dns, edge computing, workers, security, network, waf, firewall",CF,true,9,websummit-lisbon2025
|
| 7 |
+
Manus AI,https://manus.im,Autonomous AI agent platform for complex multi-step tasks,"Manus is a general-purpose AI agent that can autonomously browse the web, write and execute code, manage files, and complete multi-step research and data tasks without human intervention. Designed for knowledge work automation.",AI Automation,AI SaaS,"manus, ai agent, autonomous agent, agentic ai, task automation, web browsing agent, ai assistant, computer use",Manus,true,8,websummit-lisbon2025
|
| 8 |
+
Jasper,https://jasper.ai,AI content platform for marketing teams and enterprises,"Jasper provides AI writing tools for marketing content including blog posts, social copy, ad creative, and email campaigns. Supports brand voice customization, content templates, and team collaboration for scalable content production across channels.",Content Creation,Marketing SaaS,"jasper, ai writing, content creation, marketing copy, blog posts, ad creative, brand voice, ai content, copywriting",Jasper AI,true,6,websummit-lisbon2025
|
| 9 |
+
Glean,https://glean.com,AI-powered enterprise search and knowledge discovery platform,"Glean connects to all company apps and data sources to provide unified AI search across the enterprise. Surfaces relevant documents, answers questions using company knowledge, and integrates with Slack, Google Workspace, Salesforce, and 100+ tools.",Enterprise Search,AI SaaS,"glean, enterprise search, ai search, knowledge management, semantic search, workplace ai, company knowledge, rag",Glean AI,true,7,websummit-lisbon2025
|
| 10 |
+
Intercom,https://intercom.com,AI-first customer service platform with live chat and automation,"Intercom provides customer messaging tools including Fin AI chatbot, live chat, help center, and support ticketing. Integrates across web, mobile, and email to handle customer queries, onboarding flows, and proactive customer engagement.",Customer Support,Customer Success SaaS,"intercom, live chat, customer support, chatbot, fin ai, help desk, customer messaging, onboarding, customer engagement",Intercom Messenger,true,7,websummit-lisbon2025
|
| 11 |
+
Linear,https://linear.app,Fast and opinionated project management tool for software teams,"Linear is a project management and issue tracking tool built for engineering teams. Offers speed-optimized workflows, Git integration, roadmapping, and cycle planning. Known for its minimalist design and keyboard-first navigation.",Project Management,Developer Tools,"linear, project management, issue tracking, engineering workflow, sprint planning, roadmap, git integration, cycles",Linear App,true,6,websummit-lisbon2025
|
| 12 |
+
Miro,https://miro.com,Visual collaboration platform for brainstorming and product planning,"Miro is an online whiteboard and collaboration platform used by teams for brainstorming, wireframing, sprint retrospectives, and product roadmapping. Offers templates, sticky notes, diagramming tools, and integrations with Jira, Slack, and Figma.",Visual Collaboration,Productivity SaaS,"miro, whiteboard, visual collaboration, brainstorming, diagramming, wireframing, sprint retro, product planning, online board",RealtimeBoard,true,7,websummit-lisbon2025
|
| 13 |
+
Remote,https://remote.com,Global HR platform for hiring and managing international employees,"Remote handles global payroll, benefits, compliance, and contractor management for distributed teams. Companies use it to hire in 180+ countries without setting up local legal entities. Covers employer of record (EOR), PEO, and contractor payments.",Global HR & Payroll,Human Resources and Recruiting,"remote, global payroll, employer of record, eor, international hiring, contractor management, hr compliance, peo, distributed teams",Remote.com,true,7,websummit-lisbon2025
|
| 14 |
+
Nerdio,https://nerdio.com,Microsoft cloud management platform for MSPs and enterprise IT,"Nerdio helps managed service providers and enterprises deploy and optimize Azure Virtual Desktop and Windows 365. Provides cost management, auto-scaling, multi-tenant management, and Microsoft 365 administration β reducing cloud spend by up to 60%.",IT Management,Enterprise IT SaaS,"nerdio, azure virtual desktop, avd, windows 365, msp, microsoft cloud, it management, virtual desktop, azure",Nerdio Manager,true,5,websummit-lisbon2025
|
| 15 |
+
Parloa,https://parloa.com,AI voice agents for enterprise contact centers,"Parloa builds AI-powered voice and chat agents for contact centers. The platform handles inbound phone calls, automates customer service workflows, and integrates with CRM and telephony systems. Deployed by insurers, retailers, and telcos at scale.",Contact Center AI,Customer Support SaaS,"parloa, ai voice agent, contact center, phone ai, ivr, voice automation, conversational ai, customer service, telephony",Parloa AI,true,6,websummit-lisbon2025
|
| 16 |
+
Superhuman,https://superhuman.com,AI-powered email client built for speed and productivity,"Superhuman is a premium email client layered on top of Gmail and Outlook with AI features including email summarization, reply drafting, and smart follow-up reminders. Built for professionals who need to manage high email volume and reach inbox zero.",Email Productivity,Productivity SaaS,"superhuman, email client, ai email, inbox zero, gmail, productivity, email speed, follow-up reminders, email management",Superhuman Email,true,6,websummit-lisbon2025
|
| 17 |
+
TestGorilla,https://testgorilla.com,Pre-employment skills testing platform for data-driven hiring,"TestGorilla provides a library of 400+ skills assessments covering coding, cognitive ability, personality, and role-specific tests. HR teams use it to screen candidates before interviews, reduce bias, and make evidence-based hiring decisions.",Pre-Employment Testing,Human Resources and Recruiting,"testgorilla, pre-employment testing, skills assessment, hiring, screening, cognitive tests, coding tests, recruitment, talent assessment",Test Gorilla,true,6,websummit-lisbon2025
|
| 18 |
+
Hootsuite,https://hootsuite.com,Social media management platform for scheduling and analytics,"Hootsuite lets teams manage multiple social media accounts from one dashboard. Features include post scheduling, social listening, analytics, team collaboration, and paid ad management across Instagram, LinkedIn, Twitter/X, Facebook, and TikTok.",Social Media Management,Marketing SaaS,"hootsuite, social media, scheduling, social listening, analytics, instagram, linkedin, content calendar, engagement, social publishing",Hootsuite Dashboard,true,6,websummit-lisbon2025
|
| 19 |
+
Oura,https://ouraring.com,Smart ring for sleep tracking and personal health monitoring,"Oura Ring is a wearable health tracker worn on the finger that measures sleep stages, heart rate variability, body temperature, and activity levels. Provides readiness, sleep, and activity scores via its companion app. Used by athletes and health-conscious consumers.",Health Monitoring,HealthTech,"oura, smart ring, sleep tracking, hrv, health monitoring, wearable, readiness score, body temperature, oura ring",Oura Ring,true,7,websummit-lisbon2025
|
| 20 |
+
Picsart,https://picsart.com,AI-powered creative platform for photo and video editing,"Picsart offers a suite of AI creative tools including background removal, image generation, photo filters, and video editing. Used by content creators, social media managers, and small businesses for rapid visual content production without design skills.",Visual Content Creation,Creative AI Tools,"picsart, photo editing, ai image, background removal, video editing, creative tools, content creator, visual design, image generation",PicsArt,true,6,websummit-lisbon2025
|
| 21 |
+
Vinted,https://vinted.com,Peer-to-peer marketplace for buying and selling secondhand fashion,"Vinted is a consumer-to-consumer marketplace for pre-owned clothing, accessories, and electronics. Sellers list items for free while buyers pay a buyer protection fee. Operates across 20+ European countries with over 80 million members.",Marketplace,eCommerce,"vinted, secondhand, fashion marketplace, p2p, pre-owned, resale, vintage clothing, circular fashion, recommerce",Vinted Marketplace,true,5,websummit-lisbon2025
|
| 22 |
+
Toloka,https://toloka.ai,AI data labeling and human-in-the-loop annotation platform,"Toloka provides a platform for large-scale data labeling, annotation, and AI model evaluation using a global crowd of human workers. Used by AI teams to generate training data, run RLHF pipelines, and perform human-in-the-loop quality checks.",Data Labeling,AI Infrastructure,"toloka, data labeling, annotation, rlhf, human in the loop, crowdsourcing, ai training data, model evaluation, data annotation",Toloka AI,true,6,websummit-lisbon2025
|
| 23 |
+
Alice & Bob,https://alice-bob.com,Quantum computing company building fault-tolerant cat qubit processors,"Alice & Bob develops superconducting quantum processors based on cat qubits β a hardware approach designed to dramatically reduce error rates and accelerate the path to fault-tolerant quantum computers. Targets pharmaceutical, finance, and logistics optimization.",Quantum Computing,Deep Tech,"alice and bob, quantum computing, cat qubit, fault tolerant, superconducting, quantum processor, error correction, quantum hardware",Alice&Bob,true,6,websummit-lisbon2025
|
| 24 |
+
Profluent Bio,https://profluent.bio,AI-first protein design company creating novel biological medicines,Profluent uses large language models trained on protein sequences to design novel proteins and gene editors. Released OpenCRISPR β the first AI-designed gene editor β as open source. Targets therapeutic and industrial biotech applications.,AI Drug Discovery,BioTech,"profluent, protein design, ai biotech, gene editing, crispr, opencrispr, protein language model, drug discovery, computational biology",Profluent,true,7,websummit-lisbon2025
|
| 25 |
+
Absci,https://absci.com,Generative AI drug creation company combining AI with wet lab validation,"Absci uses generative AI to design antibodies and biologics, integrating computational protein design with high-throughput lab screening. Partners with pharma companies to accelerate drug discovery programs from concept to validated lead candidate.",AI Drug Discovery,BioTech,"absci, generative ai, drug discovery, antibody design, biologics, ai pharma, wet lab, drug creation, de novo protein",Absci Corporation,true,6,websummit-lisbon2025
|
| 26 |
+
Lyft,https://lyft.com,Ride-sharing and mobility platform across the US and Canada,"Lyft connects riders with drivers for on-demand transportation via its mobile app. Offers rideshare, bike and scooter rentals, and corporate travel programs. Operates in 644+ cities across the United States and Canada. Competes directly with Uber.",Mobility & Transportation,Transportation Tech,"lyft, rideshare, ride-hailing, mobility, transportation, bike rental, scooter, corporate travel, on-demand",Lyft Rideshare,true,7,websummit-lisbon2025
|
| 27 |
+
Acast,https://acast.com,Open podcast hosting and monetization platform for creators,"Acast provides podcast creators with hosting, analytics, dynamic ad insertion, and monetization tools. Connects podcasters with advertisers through its marketplace and supports listener subscription models. Distributes to all major podcast platforms.",Podcast Monetization,Media Tech,"acast, podcast, hosting, monetization, dynamic ads, podcast distribution, podcast analytics, creator monetization, podcast advertising",Acast Podcast,true,5,websummit-lisbon2025
|
| 28 |
+
FieldAI,https://field.ai,AI platform for autonomous robot deployment in unstructured environments,"FieldAI provides autonomy software for robots operating in GPS-denied and unstructured environments such as construction sites, disaster zones, and industrial facilities. Its software enables real-time perception, navigation, and multi-robot coordination.",Robotics Autonomy,Robotics & AI,"field ai, robot autonomy, autonomous robots, industrial robotics, construction robots, multi-robot, gps denied, robot software",Field AI,true,6,websummit-lisbon2025
|
| 29 |
+
Twelve,https://twelve.co,Carbon transformation company converting CO2 into fuels and materials,"Twelve uses electrochemistry to convert CO2 captured from industrial processes into sustainable fuels, chemicals, and materials β replacing fossil-derived feedstocks. Products include sustainable aviation fuel (SAF) and CO2-derived polymers.",Carbon Capture & Utilization,Climate Tech,"twelve, carbon transformation, co2 utilization, sustainable aviation fuel, saf, electrochemistry, carbon capture, decarbonization, e-fuel",Twelve CO2,true,7,websummit-lisbon2025
|
| 30 |
+
SurveyMonkey,https://surveymonkey.com,Online survey platform for market research and customer feedback,"SurveyMonkey provides tools to create, distribute, and analyze surveys. Used by market researchers, HR teams, and product managers for customer satisfaction, NPS measurement, employee engagement, and academic research. Part of Momentive.",Surveys & Research,Marketing SaaS,"surveymonkey, surveys, online surveys, nps, customer feedback, market research, employee engagement, questionnaire, survey builder",Survey Monkey,true,6,websummit-lisbon2025
|
| 31 |
+
Boston Dynamics,https://bostondynamics.com,Advanced robotics company building agile mobile robots for real-world tasks,"Boston Dynamics creates robots including Spot (quadruped inspection robot), Atlas (humanoid), and Stretch (warehouse logistics robot). Deployed in manufacturing, construction, public safety, and logistics for inspection, data collection, and material handling.",Industrial Robotics,Robotics,"boston dynamics, spot robot, atlas, robotics, quadruped, humanoid robot, industrial automation, inspection robot, warehouse robot",Boston Dynamics Spot,true,8,websummit-lisbon2025
|
| 32 |
+
Atlassian,https://atlassian.com,Enterprise software for team collaboration and project tracking,"Atlassian provides Jira for project tracking, Confluence for documentation, Trello for kanban boards, and Bitbucket for code collaboration. Used by software teams and enterprises worldwide for agile planning, issue tracking, and releasing software.",Project Management,Productivity SaaS,"atlassian, jira, confluence, trello, bitbucket, project management, agile, scrum, team collaboration, issue tracking",Atlassian Software,true,8,websummit-lisbon2025
|
| 33 |
+
Lattice,https://lattice.com,People management platform for performance reviews and employee growth,"Lattice helps HR and people teams run performance reviews, set OKRs, gather continuous feedback, and measure employee engagement. Provides manager tools for 1-on-1s, growth plans, and compensation management across the employee lifecycle.",HR & Performance Management,Human Resources and Recruiting,"lattice, performance reviews, okr, employee engagement, people management, 1on1, feedback, compensation management, hr software",Lattice HQ,true,6,websummit-lisbon2025
|
| 34 |
+
Vercel,https://vercel.com,Frontend cloud platform for deploying and scaling web applications,"Vercel provides infrastructure for frontend teams to deploy, preview, and ship web applications. Built for Next.js and other frameworks with instant global CDN, CI/CD preview deployments, and serverless functions. Used by Airbnb and HashiCorp.",Cloud Deployment,Developer Tools,"vercel, frontend deployment, nextjs, cdn, ci/cd, serverless, web hosting, jamstack, preview deployments, frontend cloud",Vercel Platform,true,7,websummit-lisbon2025
|
| 35 |
+
Yanolja,https://yanolja.com,AI-powered global travel and hospitality cloud platform,"Yanolja offers cloud SaaS for hospitality businesses covering property management systems, booking engines, channel management, and revenue optimization. Dominant in South Korea and expanding globally through its Yanolja Cloud division.",Hospitality Tech,Travel & Hospitality SaaS,"yanolja, hospitality cloud, hotel management, pms, booking engine, channel manager, travel tech, revenue management, hotel saas",Yanolja Cloud,true,5,websummit-lisbon2025
|
| 36 |
+
ServiceNow,https://servicenow.com,Enterprise workflow automation and IT service management platform,"ServiceNow digitizes and automates enterprise workflows across IT, HR, customer service, and operations. Its Now Platform integrates with existing systems to streamline incident management, asset tracking, and employee onboarding via AI-powered workflows.",IT Service Management,Enterprise SaaS,"servicenow, itsm, workflow automation, it service management, incident management, enterprise workflow, now platform, itom, helpdesk",ServiceNow Platform,true,8,websummit-lisbon2025
|
| 37 |
+
Zoho,https://zoho.com,Comprehensive business software suite covering CRM to HR to finance,"Zoho offers 55+ integrated applications covering CRM, email, project management, accounting, HR, and marketing automation. Privacy-focused and competitively priced against Microsoft 365 and Salesforce. Bootstrapped and profitable with 100M+ users.",Business Software Suite,Enterprise SaaS,"zoho, crm, zoho crm, business software, email, project management, accounting, hr, marketing automation, smb software",Zoho Corporation,true,7,websummit-lisbon2025
|
| 38 |
+
Clay,https://clay.com,Data enrichment and sales intelligence platform for outbound teams,"Clay aggregates data from 100+ sources including LinkedIn, Apollo, and Clearbit to build highly enriched prospect lists. Teams use AI-powered workflows to research leads, personalize outreach at scale, and automate GTM operations.",Sales Intelligence,Sales & Marketing SaaS,"clay, data enrichment, sales intelligence, lead enrichment, outbound, prospecting, gtm, crm data, linkedin enrichment, waterfall enrichment",Clay HQ,true,8,websummit-lisbon2025
|
| 39 |
+
Cohere,https://cohere.com,Enterprise LLM platform for building AI-powered business applications,"Cohere provides large language models (Command, Embed, Rerank) optimized for enterprise use cases including RAG, search, classification, and summarization. Offers cloud-agnostic deployment with private cloud and on-premise options for regulated industries.",Enterprise AI,AI Infrastructure,"cohere, llm, enterprise ai, command, embed, rerank, rag, natural language processing, private cloud, on-premise ai",Cohere AI,true,7,websummit-lisbon2025
|
| 40 |
+
Reka,https://reka.ai,Multimodal AI models for enterprise intelligence and complex reasoning,"Reka builds frontier multimodal AI models capable of processing text, images, video, and audio. Models are deployed via API and private cloud for enterprise search, document understanding, and complex reasoning tasks across industries.",AI Models,AI Infrastructure,"reka, multimodal ai, llm, enterprise ai, image understanding, video ai, document processing, reasoning, frontier model",Reka AI,true,6,websummit-lisbon2025
|
| 41 |
+
Groq,https://groq.com,AI inference hardware and cloud delivering ultra-fast LLM token generation,Groq builds the Language Processing Unit (LPU) β custom silicon for AI inference β delivering dramatically faster token generation than GPU-based systems. Its GroqCloud API gives developers access to open-source models at high throughput and low latency.,AI Infrastructure,AI Infrastructure,"groq, lpu, ai inference, fast llm, groqcloud, language processing unit, ai hardware, llama inference, low latency ai",GroqCloud,true,7,websummit-lisbon2025
|
| 42 |
+
Read AI,https://read.ai,AI meeting assistant for transcription summaries and action items,"Read AI joins video meetings on Zoom, Teams, and Google Meet to transcribe in real time, generate meeting summaries, extract action items, and score meeting engagement. Integrates with CRMs and project tools to push notes automatically.",Meeting Intelligence,Productivity SaaS,"read ai, meeting assistant, transcription, meeting summary, action items, zoom, teams, google meet, meeting notes, ai notetaker",Read.ai,true,6,websummit-lisbon2025
|
| 43 |
+
TensorWave,https://tensorwave.com,AI cloud infrastructure platform built on AMD GPUs for training and inference,TensorWave provides cloud computing infrastructure powered by AMD Instinct GPUs targeting AI training and inference workloads. Offers an alternative to NVIDIA-dominated cloud providers with competitive pricing for large-scale AI model training.,AI Cloud Infrastructure,AI Infrastructure,"tensorwave, amd gpu, ai cloud, ai training, inference, gpu cloud, instinct, ai infrastructure, compute, cloud ai",TensorWave AI,true,6,websummit-lisbon2025
|
| 44 |
+
Arm,https://arm.com,Semiconductor IP company powering mobile automotive and AI computing worldwide,"Arm designs CPU and GPU architectures used in virtually all smartphones, tablets, and increasingly in AI accelerators and data center chips. Licenses its architecture to Apple, Qualcomm, and NVIDIA. Over 280 billion Arm-based chips shipped.",Semiconductor IP,Hardware & Semiconductors,"arm, semiconductor, cpu, mobile chip, arm architecture, ai chip, qualcomm, apple silicon, risc, processor design",Arm Ltd,true,9,websummit-lisbon2025
|
| 45 |
+
NVIDIA,https://nvidia.com,AI computing company powering GPU infrastructure for training and inference,"NVIDIA designs GPUs and the CUDA ecosystem that powers the majority of AI training workloads globally. Products include H100/H200 data center GPUs, the NIM inference microservices platform, and Omniverse for simulation and digital twins.",AI Hardware & Computing,Hardware & Semiconductors,"nvidia, gpu, cuda, h100, ai training, inference, omniverse, digital twin, ai computing, data center, h200",NVIDIA Corporation,true,10,websummit-lisbon2025
|
| 46 |
+
Amazon Robotics,https://amazon.com/robotics,Warehouse automation division of Amazon deploying robots at scale across fulfillment,"Amazon Robotics designs and deploys robotic systems across Amazon's fulfillment network including autonomous mobile robots (AMRs), robotic arms, and AI-powered sorting systems. Handles billions of items annually and licenses technology externally.",Warehouse Robotics,Robotics,"amazon robotics, warehouse automation, amr, fulfillment, logistics robots, robotic arm, sorting, autonomous mobile robot, amazon",Amazon Robotics Division,true,7,websummit-lisbon2025
|
| 47 |
+
Wandercraft,https://wandercraft.eu,Exoskeleton technology company enabling walking rehabilitation for paralyzed patients,Wandercraft builds medical exoskeletons for rehabilitation clinics allowing paraplegic and spinal injury patients to walk again. Its Atalante exoskeleton is FDA-cleared and CE-marked for use in hospitals for physiotherapy and clinical trials.,Medical Robotics,HealthTech,"wandercraft, exoskeleton, rehabilitation, paraplegic, walking robot, atalante, spinal injury, physiotherapy, medical device, wearable robot",Wandercraft Exoskeleton,true,6,websummit-lisbon2025
|
| 48 |
+
planqc,https://planqc.eu,Quantum computing startup building neutral atom array processors,"planqc develops quantum computers based on neutral atom arrays enabling high qubit counts and long coherence times. Targets optimization, simulation, and cryptography use cases. Spun out of the Max-Planck Institute and Ludwig Maximilian University Munich.",Quantum Computing,Deep Tech,"planqc, quantum computing, neutral atom, qubit, quantum processor, quantum hardware, optimization, quantum simulation, atom array",planQc,true,6,websummit-lisbon2025
|
| 49 |
+
IonQ,https://ionq.com,Trapped ion quantum computing company with cloud-accessible quantum hardware,"IonQ builds quantum computers using trapped ion technology offering high gate fidelity and low error rates. Accessible via AWS, Azure, and Google Cloud. Targets enterprise use cases in drug discovery, financial optimization, and logistics.",Quantum Computing,Deep Tech,"ionq, quantum computing, trapped ion, quantum hardware, cloud quantum, qubit, quantum gate, drug discovery, oxford ionics",IonQ Quantum,true,7,websummit-lisbon2025
|
| 50 |
+
Samphire Neuroscience,https://samphireneuroscience.com,Neurostimulation wearable for menstrual pain and mental health conditions,Samphire Neuroscience develops neurostimulation devices targeting pain management and mental health. Its first product addresses menstrual pain and anxiety using transcranial electrical stimulation as a drug-free alternative for chronic sufferers.,Neurostimulation,HealthTech,"samphire, neurostimulation, menstrual pain, mental health, tacs, wearable, brain stimulation, pain management, drug free",Samphire,true,5,websummit-lisbon2025
|
| 51 |
+
Science Inc,https://science-inc.com,Biotech company developing next-generation brain-computer interface technologies,Science Inc (founded by Neuralink co-founder Max Hodak) develops next-generation neuroscience and BCI technologies focused on long-term brain-computer interface hardware and biological computing paradigms beyond current neural implant approaches.,Brain-Computer Interface,BioTech,"science inc, bci, brain computer interface, neuroscience, neuralink, max hodak, neural interface, biotech, implant, bci hardware",Science,true,7,websummit-lisbon2025
|
| 52 |
+
Prenuvo,https://prenuvo.com,Preventive full-body MRI scanning service for proactive disease detection,"Prenuvo offers full-body MRI scans completed in under an hour designed to detect early-stage cancers, aneurysms, and other conditions before symptoms appear. Positioned as proactive preventive healthcare with clinics across North America.",Preventive Health,HealthTech,"prenuvo, full body mri, preventive health, cancer screening, early detection, mri scan, whole body scan, preventive medicine",Prenuvo Health,true,6,websummit-lisbon2025
|
| 53 |
+
Fay,https://fay.com,AI-powered platform connecting patients with insurance-covered registered dietitians,"Fay matches patients with registered dietitians covered by insurance for personalized nutrition counseling. Uses AI to streamline scheduling, progress tracking, and billing. Addresses chronic conditions including diabetes, GI disorders, and eating disorders.",Nutrition & Dietitian Platform,HealthTech,"fay, dietitian, nutrition, insurance covered, registered dietitian, chronic disease, diabetes, eating disorder, telehealth nutrition",Fay Health,true,5,websummit-lisbon2025
|
| 54 |
+
Clue,https://helloclue.com,Menstrual health and fertility tracking app with scientific foundation,"Clue is a period and fertility tracking app used by 13 million people in 190 countries. Tracks menstrual cycles, ovulation, symptoms, and mood using algorithm-based predictions. Partnered with reproductive health researchers and fully GDPR-compliant.",Women's Health,HealthTech,"clue, period tracking, fertility, menstrual health, ovulation, women's health, reproductive health, cycle tracking, contraception",Clue App,true,6,websummit-lisbon2025
|
| 55 |
+
Omniscope,https://omniscope.ai,AI-powered retinal diagnostics platform for systemic disease detection,"Omniscope uses AI to analyze retinal images and detect biomarkers for systemic conditions including cardiovascular disease, diabetes, and neurological disorders from a non-invasive eye scan. Deployed in clinics and optometry chains.",AI Diagnostics,HealthTech,"omniscope, retinal imaging, ai diagnostics, eye scan, cardiovascular, diabetes detection, ophthalmology, biomarkers, disease detection",Omniscope AI,true,6,websummit-lisbon2025
|
| 56 |
+
Cradle,https://cradle.bio,AI platform for engineering proteins with improved functional properties,"Cradle provides a platform for protein engineers to design and optimize proteins using generative AI models. Scientists use it to improve enzyme stability, binding affinity, and expression yield β reducing wet lab iteration cycles from months to weeks.",Protein Engineering,BioTech,"cradle, protein engineering, ai biotech, enzyme design, generative ai, protein optimization, directed evolution, wet lab, biotech ai",Cradle Bio,true,6,websummit-lisbon2025
|
| 57 |
+
Commonwealth Fusion Systems,https://cfs.energy,Fusion energy company building compact high-field superconducting tokamak reactors,CFS is developing SPARC β a compact fusion reactor using high-temperature superconducting magnets to achieve net energy gain. Spun out of MIT's PSFC with over $1.8B raised. Targeting commercial fusion power plants in the 2030s.,Fusion Energy,Climate Tech,"commonwealth fusion, cfs, sparc, fusion reactor, fusion energy, hts magnets, tokamak, net energy, clean energy, nuclear fusion",CFS Energy,true,8,websummit-lisbon2025
|
| 58 |
+
Octopus Energy,https://octopusenergy.com,Technology-driven green energy retailer and smart grid software platform,"Octopus Energy supplies renewable electricity and gas to consumers across the UK, US, Germany, Japan, and Australia. Its Kraken platform powers smart energy management and is licensed to other utilities. Uses AI to optimize grid balancing and EV charging.",Green Energy Retail,Climate Tech,"octopus energy, green energy, renewable electricity, kraken platform, smart energy, ev charging, grid balancing, clean energy, energy retail",Octopus,true,7,websummit-lisbon2025
|
| 59 |
+
Marvel Fusion,https://marvelfusion.com,Laser-driven inertial confinement fusion energy startup,Marvel Fusion is developing a laser-based approach to nuclear fusion using short-pulse high-intensity lasers to ignite fuel targets. Partnered with Colorado State University for laser facility access. Based in Munich targeting commercial fusion power.,Fusion Energy,Climate Tech,"marvel fusion, laser fusion, inertial confinement, nuclear fusion, fusion energy, clean energy, laser ignition, fusion power",Marvel Fusion Energy,true,6,websummit-lisbon2025
|
| 60 |
+
1KOMMA5Β°,https://1komma5grad.com,Home energy management platform integrating solar storage heat pump and EV charging,"1KOMMA5Β° installs and connects solar panels, home battery systems, heat pumps, and EV chargers through its Heartbeat AI platform that optimizes energy flows in real time. Operates across Germany, Sweden, Australia, and expanding internationally.",Home Energy Management,Climate Tech,"1komma5, home energy, solar, battery storage, heat pump, ev charging, heartbeat, energy management, prosumer, smart home energy",1.5 Degrees,true,6,websummit-lisbon2025
|
| 61 |
+
CorPower Ocean,https://corpowerocean.com,Wave energy technology company building offshore wave power converters,CorPower Ocean develops wave energy converters (WECs) that harness ocean wave motion to generate clean electricity. Its C4 device uses a resonance-based design for high energy capture. Deployed in commercial pilot projects off the Portuguese coast.,Wave Energy,Climate Tech,"corpower, wave energy, offshore energy, renewable energy, wave power, ocean energy, wec, marine energy, clean electricity",CorPower,true,6,websummit-lisbon2025
|
| 62 |
+
Ascend Elements,https://ascendelements.com,Battery materials company upcycling lithium-ion batteries into new cathode materials,Ascend Elements recovers critical battery materials from spent EV and consumer lithium-ion batteries and reprocesses them into cathode active materials for battery manufacturers. Proprietary Hydro-to-Cathode process reduces cost and carbon vs. virgin materials.,Battery Recycling,Climate Tech,"ascend elements, battery recycling, lithium ion, cathode materials, ev battery, circular economy, critical minerals, battery upcycling",Ascend,true,6,websummit-lisbon2025
|
| 63 |
+
Transmutex,https://transmutex.com,Nuclear technology company eliminating long-lived radioactive waste via transmutation,Transmutex is developing a subcritical nuclear reactor driven by a particle accelerator (ADS) that can transmute long-lived nuclear waste into shorter-lived isotopes while generating clean energy. Based in Geneva with backing from leading nuclear institutions.,Nuclear Innovation,Climate Tech,"transmutex, nuclear waste, transmutation, accelerator driven system, ads, subcritical reactor, clean energy, nuclear, radioactive waste",Transmutex SA,true,5,websummit-lisbon2025
|
| 64 |
+
Pinterest,https://pinterest.com,Visual discovery platform for finding ideas and shoppable products,"Pinterest is a visual bookmarking and discovery platform where users find inspiration for fashion, home decor, recipes, and travel. Features shoppable pins, creator tools, and AI-powered recommendations. Monetized through advertising and shopping integrations.",Visual Discovery,eCommerce,"pinterest, visual discovery, pins, inspiration, shopping, home decor, fashion, recipes, mood board, visual search",Pinterest Platform,true,7,websummit-lisbon2025
|
| 65 |
+
Wolff Olins,https://wolffolins.com,Global brand design consultancy for transformative brand strategy and identity,"Wolff Olins is a London and New York-based brand consultancy designing brand strategies and visual identities for major organizations. Clients include Google, Tata, and the London 2012 Olympics. Known for bold purpose-driven brand transformations.",Brand Strategy,Design & Marketing,"wolff olins, branding, brand strategy, brand identity, design consultancy, corporate identity, brand transformation, rebranding",Wolff Olins Brand,true,4,websummit-lisbon2025
|
| 66 |
+
Mozilla,https://mozilla.org,Open-source web organization behind Firefox and internet privacy advocacy,"Mozilla builds Firefox β a privacy-focused browser used by hundreds of millions globally. Also develops Pocket (read-later app), MDN Web Docs, and advocates for an open and healthy internet. Operates as a non-profit foundation.",Open Web & Privacy,Developer Tools,"mozilla, firefox, browser, privacy, open source, web standards, pocket, mdn, internet health, privacy browser",Mozilla Foundation,true,7,websummit-lisbon2025
|
| 67 |
+
R/GA,https://rga.com,Global digital transformation consultancy and creative innovation agency,"R/GA is a digital creative agency and transformation consultancy that designs products, services, and brand experiences. Known for creating Nike+. Operates venture studios and helps companies build new digital business models and innovation practices.",Digital Transformation,Design & Marketing,"rga, digital agency, brand experience, product design, innovation consultancy, transformation, nike plus, digital marketing, creative agency",R/GA Agency,true,5,websummit-lisbon2025
|
| 68 |
+
Adidas,https://adidas.com,Global sportswear brand and athletic performance innovation company,"Adidas is one of the world's largest sportswear manufacturers producing footwear, apparel, and equipment for sport and lifestyle. Investing heavily in digital commerce, sustainability, and direct-to-consumer channels through its own app and stores.",Sportswear & Retail,Consumer Goods,"adidas, sportswear, sneakers, athletic apparel, footwear, sport performance, lifestyle, direct to consumer, sustainability, fashion",Adidas AG,true,7,websummit-lisbon2025
|
| 69 |
+
Cerebras Systems,https://cerebras.net,AI chip company building wafer-scale processors for frontier model training,Cerebras builds the Wafer Scale Engine (WSE) β the world's largest chip β for AI training and inference. A single WSE-3 has 4 trillion transistors. Cerebras Inference is publicly available for fast open-source model serving.,AI Hardware,AI Infrastructure,"cerebras, wafer scale engine, ai chip, ai training, inference, wse, large chip, ai hardware, frontier models, fast inference",Cerebras,true,7,websummit-lisbon2025
|
| 70 |
+
JCDecaux,https://jcdecaux.com,Global leader in out-of-home advertising and digital street furniture,"JCDecaux is the world's largest outdoor advertising company operating billboards, bus shelters, airport advertising, and urban street furniture in 80 countries. Increasingly leveraging programmatic digital out-of-home (DOOH) and AI-driven audience targeting.",Out-of-Home Advertising,Advertising & Media,"jcdecaux, outdoor advertising, ooh, dooh, billboard, digital signage, airport advertising, programmatic, street furniture",JCDecaux OOH,true,5,websummit-lisbon2025
|
| 71 |
+
Whalar,https://whalar.com,Creator economy platform connecting brands with influencers for social campaigns,"Whalar is a creator commerce platform that matches brands with influencers and content creators for social media campaigns across TikTok, Instagram, and YouTube. Also operates a talent management division and immersive live experiences.",Creator Marketing,Marketing SaaS,"whalar, influencer marketing, creator economy, tiktok, instagram, brand partnerships, content creator, social commerce, ugc",Whalar Group,true,6,websummit-lisbon2025
|
| 72 |
+
bunq,https://bunq.com,European digital bank built for location-independent professionals and travelers,"bunq is a Netherlands-based mobile bank offering multi-currency accounts, instant international transfers, budgeting tools, and a green banking pledge. Popular with digital nomads, freelancers, and expats across the EU.",Digital Banking,FinTech,"bunq, digital bank, neobank, mobile banking, multi-currency, eu banking, freelancer banking, fintech, digital nomad, green banking",bunq Bank,true,6,websummit-lisbon2025
|
| 73 |
+
Qualcomm,https://qualcomm.com,Semiconductor company powering mobile automotive and on-device AI computing,"Qualcomm designs the Snapdragon SoC found in Android smartphones, PCs, cars, and IoT devices. Its AI Engine enables on-device AI inference at the edge. Also provides 5G modem technology and licenses wireless IP to device manufacturers.",Mobile Semiconductors,Hardware & Semiconductors,"qualcomm, snapdragon, mobile chip, 5g, soc, on-device ai, automotive, iot, wireless, modem, arm chip",Qualcomm Technologies,true,9,websummit-lisbon2025
|
| 74 |
+
OnlyFans,https://onlyfans.com,Subscription content platform for creators across entertainment and fitness,"OnlyFans is a subscription-based platform where creators monetize exclusive content directly from fans. Originally known for adult content, it now hosts fitness coaches, musicians, chefs, and educators. Processes billions in creator payouts annually.",Creator Monetization,Creator Economy,"onlyfans, creator platform, subscription, content creator, fan monetization, creator economy, exclusive content, direct to fan",OnlyFans Platform,true,6,websummit-lisbon2025
|
| 75 |
+
Code and Theory,https://codeandtheory.com,Digital product and brand transformation agency combining strategy with engineering,"Code and Theory builds products, platforms, and brand experiences for media, healthcare, and consumer companies. Known for work with Forbes, ESPN, and Gannett. Combines brand strategy with full-stack product engineering execution.",Digital Agency,Design & Marketing,"code and theory, digital agency, product design, brand transformation, engineering, media, ux, digital product, strategy",Code & Theory,true,4,websummit-lisbon2025
|