import requests import gradio as gr import os # ----------- Helper Functions ----------- def test_openai_key(key: str): try: headers = {"Authorization": f"Bearer {key}"} resp = requests.get("https://api.openai.com/v1/models", headers=headers) if resp.status_code == 200: return True, [m.get("id") for m in resp.json().get("data", [])] return False, resp.text except Exception as e: return False, str(e) def test_gemini_key(key: str): try: url = f"https://generativelanguage.googleapis.com/v1beta/models?key={key}" resp = requests.get(url) if resp.status_code == 200: models = [m.get("name") for m in resp.json().get("models", [])] return True, models return False, resp.text except Exception as e: return False, str(e) # ----------- Gradio Interface ----------- def validate_keys(openai_key: str, gemini_key: str): parts = ["## Results"] openai_models = None gemini_models = None if openai_key: valid, data = test_openai_key(openai_key) if valid: parts.append("### OpenAI Key: â Valid") openai_models = data else: parts.append("### OpenAI Key: â Invalid") parts.append(f"```\n{str(data)}\n```") if gemini_key: valid, data = test_gemini_key(gemini_key) if valid: parts.append("### Gemini Key: â Valid") gemini_models = data else: parts.append("### Gemini Key: â Invalid") parts.append(f"```\n{str(data)}\n```") if not openai_key and not gemini_key: parts.append("Enter at least one key to test.") summary_md = "\n\n".join(parts) return summary_md, (openai_models or []), (gemini_models or []) custom_css = """ :root { --brand1: #2b6cb0; --brand2: #38b2ac; } .header {text-align:center; padding: 1rem 0;} .subtitle {text-align:center; color: #555; margin-bottom: 1rem;} .card {border: 1px solid #e6e6e6; border-radius: 12px; padding: 16px; background: #fafafa;} .btn-primary {background: var(--brand1) !important; color: white !important} .models {min-height: 280px} """ with gr.Blocks(title="API Key Validator for OpenAI & Gemini", css=custom_css, theme=gr.themes.Soft(primary_hue=gr.themes.colors.blue, secondary_hue=gr.themes.colors.teal)) as demo: gr.Markdown("""