botbottingbot's picture
Create App.py
dea14e3 verified
raw
history blame
3.57 kB
import json
from functools import partial
import gradio as gr
from transformers import pipeline
with open("modules.json", "r", encoding="utf-8") as f:
MODULES = json.load(f)["modules"]
GENERATORS = [m for m in MODULES if m["type"] == "generator"]
CHECKERS = {m["id"]: m for m in MODULES if m["type"] == "checker"}
GEN_BY_ID = {m["id"]: m for m in GENERATORS}
llm = pipeline("text-generation", model="gpt2", max_new_tokens=512)
def call_llm(prompt):
out = llm(prompt, max_new_tokens=512, do_sample=False)[0]["generated_text"]
return out[len(prompt):].strip() if out.startswith(prompt) else out
def generator_prompt(module_id, *inputs):
m = GEN_BY_ID[module_id]
keys = list(m["input_placeholders"].keys())
inputs = {k: inputs[i] if i < len(inputs) else "" for i, k in enumerate(keys)}
sections = m["output_sections"]
p = []
p.append("You are a structured reasoning module.")
p.append(f"MODULE: {m['label']}")
p.append("INPUTS:")
for k, v in inputs.items():
p.append(f"{k.upper()}: {v}")
p.append("")
p.append("Produce the following sections:")
for s in sections:
p.append(f"- {s}")
p.append("")
for s in sections:
p.append(f"{s}:")
p.append("[content]")
p.append("")
return "\n".join(p)
def checker_prompt(checker_id, *vals):
c = CHECKERS[checker_id]
secs = c["output_sections"]
if len(vals) == 0:
orig, draft = "", ""
elif len(vals) == 1:
orig, draft = "", vals[0]
else:
*orig_parts, draft = vals
orig = "\n\n".join(orig_parts)
p = []
p.append("You are a strict evaluator.")
p.append(f"CHECKER: {c['label']}")
p.append("ORIGINAL TASK:")
p.append(orig)
p.append("")
p.append("DRAFT OUTPUT:")
p.append(draft)
p.append("")
p.append("Respond with sections:")
for s in secs:
p.append(f"- {s}")
p.append("")
for s in secs:
p.append(f"{s}:")
p.append("[content]")
p.append("")
return "\n".join(p)
def run_generator(mid, *inputs):
return call_llm(generator_prompt(mid, *inputs))
def run_checker(cid, *inputs):
return call_llm(checker_prompt(cid, *inputs))
def build_ui():
with gr.Blocks(title="Modular Intelligence") as demo:
gr.Markdown("# Modular Intelligence\nSelect a module and generate output.")
for m in GENERATORS:
with gr.Tab(m["label"]):
gr.Markdown(m["description"])
input_boxes = []
for key, ph in m["input_placeholders"].items():
tb = gr.Textbox(label=key, placeholder=ph, lines=4)
input_boxes.append(tb)
output_box = gr.Textbox(label="Module output", lines=18)
gr.Button("Run module").click(
fn=partial(run_generator, m["id"]),
inputs=input_boxes,
outputs=output_box
)
if m.get("has_checker"):
cid = m.get("checker_id")
if cid in CHECKERS:
gr.Markdown("### Checker")
checker_out = gr.Textbox(label="Checker output", lines=14)
gr.Button("Run checker").click(
fn=partial(run_checker, cid),
inputs=input_boxes + [output_box],
outputs=checker_out
)
return demo
if __name__ == "__main__":
app = build_ui()
app.launch()