Spaces:
Running
Running
# app.py | |
import gradio as gr | |
from openai import OpenAI | |
# ----------------------- CONSTANTS ----------------------- # | |
SYSTEM_PROMPT = """ | |
Given the research context, design an ablation study for the specified module or process. | |
Begin the design with a clear statement of the research objective, followed by a detailed description of the experiment setup. | |
Do not include the discussion of results or conclusions in the response, as the focus is solely on the experimental design. | |
The response should be within 300 words. Present the response in **Markdown** format (use headings, bold text, and bullet or numbered lists where appropriate). | |
""".strip() | |
# ----------------------- HELPERS ------------------------- # | |
def prepare_user_prompt( | |
research_background: str, | |
method: str, | |
experiment_setup: str, | |
experiment_results: str, | |
module_name: str, | |
) -> str: | |
"""Craft the ‘user’ portion of the OpenAI chat based on form inputs.""" | |
research_background_block = f"### Research Background\n{research_background}\n" | |
method_block = f"### Method Section\n{method}\n" | |
experiment_block = ( | |
"### Main Experiment Setup\n" | |
f"{experiment_setup}\n\n" | |
"### Main Experiment Results\n" | |
f"{experiment_results}\n" | |
) | |
return ( | |
"## Research Context\n" | |
f"{research_background_block}{method_block}{experiment_block}\n\n" | |
f"Design an **ablation study** about **{module_name}** based on the research context above." | |
) | |
def generate_ablation_design( | |
research_background, | |
method, | |
experiment_setup, | |
experiment_results, | |
module_name, | |
api_key, | |
): | |
"""Combine inputs ➜ call OpenAI ➜ return the ablation‑study design text (Markdown).""" | |
# 1) Validate the API key format. | |
if not api_key or not api_key.startswith("sk-"): | |
return "❌ **Please enter a valid OpenAI API key in the textbox above.**" | |
# 2) Build the chat conversation payload. | |
messages = [ | |
{"role": "system", "content": SYSTEM_PROMPT}, | |
{ | |
"role": "user", | |
"content": prepare_user_prompt( | |
research_background, | |
method, | |
experiment_setup, | |
experiment_results, | |
module_name, | |
), | |
}, | |
] | |
# 3) Call the model and return the assistant response. | |
client = OpenAI(api_key=api_key) | |
try: | |
response = client.chat.completions.create( | |
model="gpt-4.1", | |
messages=messages, | |
max_tokens=2048, | |
temperature=1, | |
) | |
return response.choices[0].message.content.strip() | |
except Exception as e: | |
return f"⚠️ **OpenAI error:** {e}" | |
# ----------------------- UI LAYOUT ----------------------- # | |
with gr.Blocks(title="Ablation Study Designer") as demo: | |
# Main two‑column layout. | |
with gr.Row(): | |
# ---------- LEFT COLUMN: INPUTS ---------- | |
with gr.Column(scale=1): | |
gr.Markdown( | |
""" | |
# 🧪 Ablation Study Designer | |
This is a demo for a feature in SciMentor, generating actionable plans for ablation studies. Fill in the study details below, then click **Generate** to receive a tailored ablation‑study design rendered in Markdown. | |
""", | |
elem_id="header", | |
) | |
# API‑key field (required) | |
api_key = gr.Textbox( | |
label="🔑 OpenAI API Key (required)", | |
type="password", | |
placeholder="sk-...", | |
) | |
research_background = gr.Textbox( | |
label="Research Background", lines=6, placeholder="Describe the broader research context…" | |
) | |
method = gr.Textbox( | |
label="Method Description", lines=6, placeholder="Summarize the method section…" | |
) | |
experiment_setup = gr.Textbox( | |
label="Main Experiment – Setup", lines=6, placeholder="Datasets, hyper‑parameters, etc." | |
) | |
experiment_results = gr.Textbox( | |
label="Main Experiment – Results", lines=6, placeholder="Key quantitative or qualitative findings…" | |
) | |
module_name = gr.Textbox( | |
label="Module / Process for Ablation", placeholder="e.g., Attention mechanism" | |
) | |
generate_btn = gr.Button("Generate Ablation Study Design") | |
# ---------- RIGHT COLUMN: OUTPUT ---------- | |
with gr.Column(scale=1): | |
output_md = gr.Markdown(value="", label="Ablation Study Design") | |
# Button click: trigger generation with a loading indicator. | |
generate_btn.click( | |
fn=generate_ablation_design, | |
inputs=[ | |
research_background, | |
method, | |
experiment_setup, | |
experiment_results, | |
module_name, | |
api_key, | |
], | |
outputs=output_md, | |
show_progress="full", # Display a full‑screen progress bar. | |
) | |
# ----------------------- LAUNCH -------------------------- # | |
if __name__ == "__main__": | |
demo.launch() | |