Spaces:
Paused
Paused
File size: 2,589 Bytes
ca32de3 1c1e102 ca32de3 1c1e102 de08591 ca32de3 1c1e102 91eb8de ca32de3 91eb8de 1c1e102 91eb8de ca32de3 1c1e102 273b0a2 1c1e102 273b0a2 1c1e102 273b0a2 1c1e102 273b0a2 1c1e102 273b0a2 1c1e102 ca32de3 273b0a2 1c1e102 273b0a2 1c1e102 273b0a2 1c1e102 91eb8de ca32de3 273b0a2 1c1e102 273b0a2 91eb8de ca32de3 91eb8de 5bea186 1c1e102 ca32de3 91eb8de 273b0a2 1c1e102 273b0a2 91eb8de 273b0a2 91eb8de 1c1e102 ca32de3 91eb8de 1c1e102 ca32de3 1c1e102 ca32de3 91eb8de ca32de3 91eb8de ca32de3 91eb8de ca32de3 91eb8de | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | import gradio as gr
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
# --------- Model Config ---------
MODEL_NAME = "google/gemma-7b-it"
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_compute_dtype=torch.float16
)
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
model = AutoModelForCausalLM.from_pretrained(
MODEL_NAME,
quantization_config=bnb_config,
device_map="auto"
)
# --------- General Prompt (Test-Case Based) ---------
def pre_processing(requirement, code):
return f"""
# ROLE
You are a strict Python code evaluator.
# TASK
Determine whether the code satisfies the requirement.
# INSTRUCTIONS
Step 1: Convert the requirement into 3 clear test cases (input β expected output).
Step 2: Analyze the code logic carefully.
Step 3: Simulate the code for each test case (DO NOT execute, reason mentally).
Step 4: Compare actual vs expected outputs.
# DECISION RULE
- If ALL test cases match β YES
- If ANY test case fails β NO
# RULES
- Be strict
- Do not assume missing logic
- Do not execute code
- Do not guess
- Include edge cases (if applicable)
# OUTPUT FORMAT
Test Cases:
1. Input β Expected Output
2. Input β Expected Output
3. Input β Expected Output
Evaluation:
1. PASS/FAIL
2. PASS/FAIL
3. PASS/FAIL
Final Answer: YES or NO
# INPUT
Requirement:
{requirement}
Code:
{code}
"""
# --------- Core Function ---------
def evaluate_code(requirement, code):
prompt = pre_processing(requirement, code)
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
outputs = model.generate(
**inputs,
max_new_tokens=60,
temperature=0.1,
do_sample=False,
repetition_penalty=1.2
)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
response_upper = response.upper()
# Extract final answer
if "FINAL ANSWER: YES" in response_upper:
return "β
YES"
elif "FINAL ANSWER: NO" in response_upper:
return "β NO"
else:
return "β οΈ Unable to determine\n\n" + response
# --------- UI ---------
with gr.Blocks() as app:
gr.Markdown("## π§ Code Requirement Validator (Gemma 7B - General)")
gr.Markdown("Evaluates code using test-case based reasoning (high accuracy).")
requirement = gr.Textbox(label="Requirement", lines=4)
code = gr.Textbox(label="Code", lines=10)
output = gr.Textbox(label="Result")
btn = gr.Button("Evaluate")
btn.click(fn=evaluate_code, inputs=[requirement, code], outputs=output)
app.launch() |