# ============================================================================== # SYSTEM: SADIM AI RADAR 77M - ADVANCED TACTICAL EXPERT INTERFACE # VERSION: 4.8.0 (THE BEAST: ONE-CLICK, LOCKED UI, ESA FALLBACK, AUTO-CLEAN) # ============================================================================== import streamlit as st import streamlit.components.v1 as components import pandas as pd import numpy as np import math import duckdb import torch import torch.nn as nn from huggingface_hub import hf_hub_download import os import gc import requests # ------------------------------------------------------------------------------ # 1. GLOBAL PAGE CONFIGURATION # ------------------------------------------------------------------------------ st.set_page_config( page_title="SADIM AI RADAR", layout="wide", initial_sidebar_state="collapsed" ) # ------------------------------------------------------------------------------ # 2. ADVANCED CSS STYLING (LOCKED ALIGNMENT & CENTER LOADER) # ------------------------------------------------------------------------------ st.markdown(""" """, unsafe_allow_html=True) # ------------------------------------------------------------------------------ # 3. AI ARCHITECTURE (RESIDUAL BLOCKS) # ------------------------------------------------------------------------------ class ResidualBlock(nn.Module): def __init__(self, dim): super(ResidualBlock, self).__init__() self.ln = nn.LayerNorm(dim) self.fc = nn.Sequential( nn.Linear(dim, dim), nn.GELU(), nn.Linear(dim, dim) ) def forward(self, x): return x + self.fc(self.ln(x)) class SADIM_V2_54M_Expert(nn.Module): def __init__(self, input_dim=12, latent_dim=64): super(SADIM_V2_54M_Expert, self).__init__() h = 3584 self.encoder = nn.Sequential( nn.Linear(input_dim, h), nn.LayerNorm(h), nn.GELU(), nn.Linear(h, h), nn.LayerNorm(h), nn.GELU(), ResidualBlock(h), ResidualBlock(h), ResidualBlock(h) ) self.fc_mu = nn.Linear(h, latent_dim) self.fc_logvar = nn.Linear(h, latent_dim) self.decoder = nn.Sequential( nn.Linear(latent_dim, h), nn.GELU(), nn.Linear(h, h), nn.LayerNorm(h), nn.GELU(), ResidualBlock(h), ResidualBlock(h), nn.Linear(h, input_dim) ) def forward(self, x): hidden = self.encoder(x) mu = self.fc_mu(hidden) logvar = torch.clamp(self.fc_logvar(hidden), -10, 10) std = torch.exp(0.5 * logvar) z = mu + torch.randn_like(std) * std return self.decoder(z), mu, logvar @st.cache_resource def initialize_deep_ai(): device = torch.device("cpu") model = SADIM_V2_54M_Expert().to(device) try: hf_token = os.environ.get("HF_TOKEN") model_path = hf_hub_download(repo_id="KilmaAI/Sadim-77M", filename="pytorch_model.bin", token=hf_token) model.load_state_dict(torch.load(model_path, map_location=device)) except Exception: pass model.eval() return model, device model, device = initialize_deep_ai() # ------------------------------------------------------------------------------ # 4. STELLAR DATA ENGINE (HYBRID ESA-FUSION, FALLBACK & GC CLEANUP) # ------------------------------------------------------------------------------ def execute_stellar_scan(source_id): # FORCE MEMORY CLEANUP BEFORE STARTING gc.collect() token = os.environ.get("HF_TOKEN") if not token: return {"error": "SYSTEM_FATAL: HF_TOKEN NOT FOUND IN SECRETS"} esa_url = "https://gea.esac.esa.int/tap-server/tap/sync" # 4.0 ESA API FETCH (The Sniping API Call) api_data = {"parallax": None, "parallax_error": None, "ruwe": None, "radial_velocity": None, "parallax_over_error": None} try: adql_query = f"SELECT parallax, parallax_error, ruwe, radial_velocity, parallax_over_error FROM gaiadr3.gaia_source WHERE source_id = {source_id}" payload = {"REQUEST": "doQuery", "LANG": "ADQL", "FORMAT": "json", "QUERY": adql_query} response = requests.get(esa_url, params=payload, timeout=5) if response.status_code == 200: res_json = response.json() if "data" in res_json and len(res_json["data"]) > 0: api_data["parallax"] = res_json["data"][0][0] api_data["parallax_error"] = res_json["data"][0][1] api_data["ruwe"] = res_json["data"][0][2] api_data["radial_velocity"] = res_json["data"][0][3] api_data["parallax_over_error"] = res_json["data"][0][4] except Exception: pass # 4.1 LOCAL DUCKDB SEARCH try: db = duckdb.connect(database=':memory:') db.execute("INSTALL httpfs; LOAD httpfs;") db.execute(f"CREATE SECRET IF NOT EXISTS tac_sec (TYPE HUGGINGFACE, TOKEN '{token}');") index_path = "hf://datasets/samfatnassi/sadim-gaia-index/master_index.parquet" index_query = f"SELECT filename FROM '{index_path}' WHERE source_id = {source_id} LIMIT 1" index_df = db.query(index_query).df() # ====================================================================== # 4.1.1 EMERGENCY ESA FALLBACK (If Target Not in HF Local DB) # ====================================================================== if index_df.empty: db.close() fb_query = f"SELECT ra, dec, parallax, parallax_error, ruwe, radial_velocity, pmra, pmdec FROM gaiadr3.gaia_source WHERE source_id = {source_id}" try: # Increased timeout to 15s for heavy ESA queries fb_res = requests.get(esa_url, params={"REQUEST": "doQuery", "LANG": "ADQL", "FORMAT": "json", "QUERY": fb_query}, timeout=15) if fb_res.status_code == 200 and len(fb_res.json().get("data", [])) > 0: fb_data = fb_res.json()["data"][0] fb_ra, fb_dec, fb_plx, fb_plx_err, fb_ruwe, fb_rv, fb_pmra, fb_pmdec = fb_data # Manual Physics Calculation for ESA Fallback fb_dist_pc = 1000.0 / fb_plx if fb_plx is not None and fb_plx > 0 else -1.0 fb_dist_ly = fb_dist_pc * 3.26156 if fb_dist_pc > 0 else "N/A" fb_pm_total = math.sqrt((fb_pmra or 0)**2 + (fb_pmdec or 0)**2) fb_v_tan = 4.74 * 1e-3 * fb_pm_total * fb_dist_pc if fb_dist_pc > 0 else "N/A" fb_plx_display = f"{round(fb_plx, 3)} ± {round(fb_plx_err, 3)} mas" if fb_plx is not None and fb_plx_err is not None else "N/A" vel_color = "#ff3333" if isinstance(fb_v_tan, float) and fb_v_tan > 600.0 else "#ffffff" ruwe_color = "#ffaa00" if isinstance(fb_ruwe, float) and fb_ruwe > 1.4 else "#ffffff" # FORCE MEMORY CLEANUP gc.collect() return { 'id': source_id, 'ra': fb_ra, 'dec': fb_dec, 'dist': round(fb_dist_ly, 1) if isinstance(fb_dist_ly, float) else "N/A", 'plx_display': fb_plx_display, 'vel': round(fb_v_tan, 2) if isinstance(fb_v_tan, float) else "N/A", 'vel_color': vel_color, 'ruwe': round(fb_ruwe, 2) if fb_ruwe is not None else "N/A", 'ruwe_color': ruwe_color, 'rad_vel': round(fb_rv, 2) if fb_rv is not None else "N/A", 'mse': "N/A", 'kl': "N/A", 'status': "ESA DIRECT LINK (AI OFFLINE - MISSING LOCAL DATA)", 'color': "#888888", 'neighbors_js': "", 'neighbor_count': 0 } except Exception: return {"error": "NO SIGNAL: TARGET NOT FOUND IN LOCAL OR ESA DATABASES. ESA API MIGHT BE DOWN."} return {"error": "NO SIGNAL: TARGET ID DOES NOT EXIST IN GAIA DR3 ARCHIVES."} exact_file_path = index_df.iloc[0]['filename'] if not exact_file_path.startswith("hf://"): exact_file_path = "hf://" + exact_file_path coord_query = f"SELECT ra, dec FROM '{exact_file_path}' WHERE source_id = {source_id} LIMIT 1" coord_df = db.query(coord_query).df() if coord_df.empty: db.close() return {"error": "COORDINATES EXTRACTION FAILED"} t_ra = coord_df.iloc[0]['ra'] t_dec = coord_df.iloc[0]['dec'] # 4.2 TRUE CONE SEARCH (Pythagorean Theorem) - Radius 0.05 deg, Limit 150 cone_query = f""" SELECT source_id, ra, dec, pmra, pmdec, d_pc, abs_m, bp_rp, l, b, x, y, z FROM '{exact_file_path}' WHERE (ra - {t_ra})*(ra - {t_ra}) + (dec - {t_dec})*(dec - {t_dec}) <= 0.0025 LIMIT 150 """ neighborhood_df = db.query(cone_query).df() db.close() except Exception as e: return {"error": f"IO_FAILURE: {str(e)}"} if neighborhood_df.empty: return {"error": "DATASET RETURNED EMPTY BATCH"} target_row = neighborhood_df[neighborhood_df['source_id'] == int(source_id)] if target_row.empty: return {"error": "TARGET LOST IN CONE SEARCH"} row = target_row.iloc[0] # 4.3 KINEMATICS & MATH dist_pc = row['d_pc'] if pd.notna(row['d_pc']) else -1.0 dist_ly = dist_pc * 3.26156 if dist_pc > 0 else 0.0 pm_total = math.sqrt(row['pmra']**2 + row['pmdec']**2) v_tangential = 4.74 * 1e-3 * pm_total * dist_pc if dist_pc > 0 else 0.0 # Format Values for Display vel_val = round(v_tangential, 2) if dist_pc > 0 else "N/A" vel_color = "#ff3333" if isinstance(vel_val, float) and vel_val > 600.0 else "#ffffff" ruwe_val = round(api_data["ruwe"], 2) if api_data["ruwe"] is not None else "N/A" ruwe_color = "#ffaa00" if isinstance(ruwe_val, float) and ruwe_val > 1.4 else "#ffffff" rad_vel_val = round(api_data["radial_velocity"], 2) if api_data["radial_velocity"] is not None else "N/A" plx_val = round(api_data["parallax"], 3) if api_data["parallax"] is not None else "N/A" plx_err_val = round(api_data["parallax_error"], 3) if api_data["parallax_error"] is not None else "" plx_display = f"{plx_val} ± {plx_err_val} mas" if plx_err_val != "" else f"{plx_val} mas" if plx_val != "N/A" else "N/A" # 4.4 LOCAL STATISTICAL STABILITY (Min 15 Stars) neighborhood_df['pm_tot'] = np.sqrt(neighborhood_df['pmra']**2 + neighborhood_df['pmdec']**2) local_pm_mean = neighborhood_df['pm_tot'].mean() local_pm_std = neighborhood_df['pm_tot'].std() is_local_outlier = False if len(neighborhood_df) >= 15 and local_pm_std > 0: if pm_total > (local_pm_mean + (3 * local_pm_std)): is_local_outlier = True # 4.5 AI INFERENCE try: raw_vector = np.array([ row['ra'], row['dec'], row['l'], row['b'], row['pmra'], row['pmdec'], row['d_pc'], row['x'], row['y'], row['z'], row['abs_m'], row['bp_rp'] ], dtype=np.float32) norm_v = raw_vector.copy() norm_v[0] /= 360.0; norm_v[1] /= 90.0; norm_v[2] /= 360.0; norm_v[3] /= 90.0 norm_v[4] /= 500.0; norm_v[5] /= 500.0; norm_v[6] /= 10000.0 norm_v[7] /= 15000.0; norm_v[8] /= 15000.0; norm_v[9] /= 15000.0 input_tensor = torch.tensor(np.nan_to_num(norm_v)).unsqueeze(0).to(device) with torch.no_grad(): reconstructed, mu, logvar = model(input_tensor) mse_val = torch.mean((reconstructed - input_tensor)**2).item() kl_val = -0.5 * torch.sum(1 + logvar - mu.pow(2) - logvar.exp()).item() hybrid_total = mse_val + (0.1 * kl_val) except Exception: mse_val, kl_val, hybrid_total = 0.0, 0.0, 0.0 # 4.6 STRICT FILTER HIERARCHY final_status = "NOMINAL (NORMAL)" final_color = "#888888" if api_data["ruwe"] is not None and api_data["ruwe"] > 1.4: final_status = "DATA ARTIFACT: BAD ASTROMETRY (RUWE)" final_color = "#ffaa00" elif api_data["parallax_over_error"] is not None and api_data["parallax_over_error"] < 3.0: final_status = "DATA ARTIFACT: LOW DISTANCE CONFIDENCE" final_color = "#ffaa00" elif dist_pc < 0 or dist_pc > 50000: final_status = "DATA ARTIFACT: UNRELIABLE DISTANCE" final_color = "#ffaa00" elif isinstance(vel_val, float) and vel_val > 600.0: final_status = "PHYSICAL ANOMALY: HYPERVELOCITY" final_color = "#ff3333" elif is_local_outlier: final_status = "KINEMATIC OUTLIER (LOCAL)" final_color = "#aa33ff" elif hybrid_total > 5.0: final_status = "AI GLOBAL ANOMALY" final_color = "#00ffff" # Export map data neighbors_list = [] for _, n_row in neighborhood_df.iterrows(): if int(n_row['source_id']) != int(source_id): neighbors_list.append(f"A.source({n_row['ra']}, {n_row['dec']})") js_neighbors_array = ",\n".join(neighbors_list) result_dict = { 'id': source_id, 'ra': row['ra'], 'dec': row['dec'], 'dist': round(dist_ly, 1) if dist_ly > 0 else "N/A", 'plx_display': plx_display, 'vel': vel_val, 'vel_color': vel_color, 'ruwe': ruwe_val, 'ruwe_color': ruwe_color, 'rad_vel': rad_vel_val, 'mse': round(mse_val, 6), 'kl': round(kl_val, 6), 'status': final_status, 'color': final_color, 'neighbors_js': js_neighbors_array, 'neighbor_count': len(neighbors_list) } # FORCE AGGRESSIVE MEMORY CLEANUP AFTER SUCCESS del neighborhood_df del index_df del coord_df gc.collect() return result_dict # ------------------------------------------------------------------------------ # 5. SESSION MANAGEMENT & INTERFACE BUILDER (SINGLE CLICK & FIXED UI) # ------------------------------------------------------------------------------ if 'session' not in st.session_state: st.session_state.session = { 'data': None, 'is_active': False, 'has_error': False, 'error_text': "", 'ra': 269.4485, 'dec': 4.7394 } # 1. UI Elements (Outside of Spinner) search_col_1, search_col_2 = st.columns([2, 1]) with search_col_1: target_sid = st.text_input("ID_SEARCH", placeholder="ENTER SOURCE_ID", label_visibility="collapsed") with search_col_2: scan_clicked = st.button("SCAN") # 2. Logic execution directly updating session state if scan_clicked and target_sid and target_sid.isdigit(): # Spinner is completely separate from UI columns! with st.spinner(""): scan_res = execute_stellar_scan(target_sid) if "error" in scan_res: st.session_state.session['has_error'] = True st.session_state.session['error_text'] = scan_res['error'] st.session_state.session['is_active'] = True else: st.session_state.session['data'] = scan_res st.session_state.session['ra'] = scan_res['ra'] st.session_state.session['dec'] = scan_res['dec'] st.session_state.session['has_error'] = False st.session_state.session['is_active'] = True popup_html_component = "" if st.session_state.session['is_active']: state = st.session_state.session if state['has_error']: popup_html_component = f"""