""" Settings & Health tab — API key management, health checks, and version info. """ import gradio as gr from core import config, runner from core.formatter import format_result def create_settings_tab(session_keys): """Build the Settings & Health tab.""" with gr.Tab("⚙️ Settings & Health"): gr.Markdown("## API Key Configuration\nKeys are stored in session only — never written to disk.") key_inputs = {} with gr.Row(): with gr.Column(): for key_name, meta in list(config.API_KEYS.items())[:4]: key_inputs[key_name] = gr.Textbox( label=f"{meta['label']}", info=f"{meta['description']} — [Get key]({meta['url']})", type="password", value="", placeholder="Paste key here...", ) with gr.Column(): for key_name, meta in list(config.API_KEYS.items())[4:]: key_inputs[key_name] = gr.Textbox( label=f"{meta['label']}", info=f"{meta['description']} — [Get key]({meta['url']})", type="password", value="", placeholder="Paste key here...", ) gr.Markdown("### Additional Configuration") config_inputs = {} for var_name, meta in config.CONFIG_VARS.items(): config_inputs[var_name] = gr.Textbox( label=meta["label"], info=meta["description"], value="", placeholder="Leave blank for default", ) save_btn = gr.Button("💾 Save Keys to Session", variant="primary") save_status = gr.Markdown("") gr.Markdown("---") gr.Markdown("## System Checks") with gr.Row(): health_btn = gr.Button("🏥 Health Check", variant="secondary") version_btn = gr.Button("ℹ️ Version Info", variant="secondary") check_output_md = gr.Markdown("") with gr.Accordion("Raw JSON", open=False): check_output_json = gr.Code(language="json") def save_keys(*values): all_keys = list(config.API_KEYS.keys()) + list(config.CONFIG_VARS.keys()) keys = {} for name, val in zip(all_keys, values): keys[name] = val.strip() if val else "" filled = sum(1 for v in keys.values() if v) return keys, f"**Saved {filled} key(s) to session.** These will be used for all commands." all_key_components = list(key_inputs.values()) + list(config_inputs.values()) save_btn.click( fn=save_keys, inputs=all_key_components, outputs=[session_keys, save_status], ) def run_health(keys): env = config.build_env_overrides(keys) result = runner.run_markdown(["health", "--apis-only"], env_overrides=env, timeout=30) md, js = format_result(result) return md, js health_btn.click( fn=run_health, inputs=[session_keys], outputs=[check_output_md, check_output_json], ) def run_version(keys): env = config.build_env_overrides(keys) result = runner.run_markdown(["version"], env_overrides=env, timeout=10) md, js = format_result(result) return md, js version_btn.click( fn=run_version, inputs=[session_keys], outputs=[check_output_md, check_output_json], )