@unify.traced
def call_agent(
example_id,
system_msg,
sub_questions,
markscheme,
answer,
available_marks,
):
agents = {k: agent.copy() for k in markscheme.keys()}
response_formats = {
k: create_marks_and_reasoning_format(
[
itm[0]
for itm in parse_marks_from_markscheme(f"_{k}" if k != "_" else "", v)
],
)
for k, v in markscheme.items()
}
[
agnt.set_response_format(rf)
for agnt, rf in zip(
agents.values(),
response_formats.values(),
)
]
markscheme = {
k: update_markscheme(f"_{k}" if k != "_" else "", v)
for k, v in markscheme.items()
}
for k in markscheme.keys():
agents[k].set_system_message(
system_msg.replace(
"{question}",
textwrap.indent(sub_questions[k], " " * 4),
)
.replace(
"{markscheme}",
textwrap.indent(markscheme[k], " " * 4),
)
.replace(
"{answer}",
textwrap.indent(answer[k], " " * 4),
)
.replace(
"{available_marks}",
str(available_marks[k.replace("_", "total")]),
)
.replace(
"{output_response_explanation}",
output_response_explanation,
),
)
rets = unify.map(
lambda k, a: a.generate(tags=[k]),
list(agents.items()),
name=f"Evals[{example_id}]->SubQAgent",
)
rets = [
ret.split("```")[-2].lstrip("json") if "```" in ret else ret for ret in rets
]
rets = {
k: response_formats[k].model_validate_json(ret).model_dump()
for k, ret in zip(markscheme.keys(), rets)
}
return rets