Spaces:
Sleeping
Sleeping
File size: 3,641 Bytes
15504d3 | 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 111 112 | from __future__ import annotations
from langchain_core.output_parsers import PydanticOutputParser
from langchain_core.prompts import ChatPromptTemplate
from schemas import CodeAnalysis, FeedbackSignal, Spec, TestCaseList, TestPlan
def build_spec_agent(llm):
parser = PydanticOutputParser(pydantic_object=Spec)
prompt = ChatPromptTemplate.from_messages(
[
(
"system",
"You extract structured requirements from problem statements. "
"Return JSON only that matches the schema. No markdown.",
),
(
"human",
"Problem statement:\n{problem}\n\n"
"User-provided description:\n{description}\n\n"
"User-provided constraints:\n{constraints}\n\n"
"Language: {language}\n\n"
"{format_instructions}",
),
]
)
return prompt, parser
def build_code_analysis_agent(llm):
parser = PydanticOutputParser(pydantic_object=CodeAnalysis)
prompt = ChatPromptTemplate.from_messages(
[
(
"system",
"Analyze code behavior and risks. Return JSON only. No markdown.",
),
(
"human",
"Language: {language}\n\nCode:\n{code}\n\n{format_instructions}",
),
]
)
return prompt, parser
def build_test_plan_agent(llm):
parser = PydanticOutputParser(pydantic_object=TestPlan)
prompt = ChatPromptTemplate.from_messages(
[
(
"system",
"Create a structured testing plan with targets per category. "
"Return JSON only. No markdown.",
),
(
"human",
"Spec:\n{spec}\n\nCode analysis:\n{analysis}\n\n"
"Known issues from previous iteration:\n{issues}\n\n"
"Required categories: Basic cases, boundary cases, random cases, "
"stress cases, invalid/robustness cases, bug-targeted cases.\n"
"Desired per-category count: {per_category}\n\n"
"{format_instructions}",
),
]
)
return prompt, parser
def build_feedback_agent(llm):
parser = PydanticOutputParser(pydantic_object=FeedbackSignal)
prompt = ChatPromptTemplate.from_messages(
[
(
"system",
"Assess test plan quality. Return JSON only. No markdown.",
),
(
"human",
"Spec:\n{spec}\n\nPlan:\n{plan}\n\n"
"Detected issues so far:\n{issues}\n\n"
"{format_instructions}",
),
]
)
return prompt, parser
def build_test_generator_agent(llm):
parser = PydanticOutputParser(pydantic_object=TestCaseList)
prompt = ChatPromptTemplate.from_messages(
[
(
"system",
"Generate concrete test cases. Use plan.targets for counts. "
"Return JSON only. No markdown. "
"Do not use code, expressions, or functions. "
"All values must be literal JSON (strings, numbers, arrays, objects). "
"Do not use repeat or operators. "
"Keep any single string length <= 200 characters.",
),
(
"human",
"Spec:\n{spec}\n\nPlan:\n{plan}\n\n"
"Student index: {student_id}\n\n"
"{format_instructions}",
),
]
)
return prompt, parser
|