fix: restore chat citations and tool details
This commit is contained in:
@@ -64,11 +64,16 @@ class BatchId(Args):
|
||||
batch_id: int = Field(gt=0)
|
||||
|
||||
|
||||
class ScoresArgs(BatchId):
|
||||
class ScoresFilterArgs(BatchId):
|
||||
project_id: int | None = Field(default=None, gt=0)
|
||||
status: Literal["pending", "scored", "reviewed", "failed", "unscorable"] | None = None
|
||||
|
||||
|
||||
class ScoresArgs(ScoresFilterArgs):
|
||||
project_offset: int = Field(default=0, ge=0)
|
||||
criterion_offset: int = Field(default=0, ge=0)
|
||||
|
||||
|
||||
class CreateBatch(VersionId):
|
||||
rubric_version_id: int = Field(gt=0)
|
||||
|
||||
@@ -254,30 +259,39 @@ def scores(db, convo, args, _user):
|
||||
if convo.project_id:
|
||||
selected = [p for p in selected if p.id == convo.project_id]
|
||||
results = []
|
||||
citations = []
|
||||
for item in selected:
|
||||
result = project_result(db, batch, item)
|
||||
if args.status:
|
||||
result["rows"] = [row for row in result["rows"] if row["status"] == args.status]
|
||||
if result["rows"]:
|
||||
result["url"] = f"/?page=scores&batch_id={batch.id}&project_id={item.id}"
|
||||
results.append({"project_id": item.id, "student_no": result["student_no"], "name": result["name"],
|
||||
"totals": result["totals"], "url": result["url"],
|
||||
"rows": [{"criterion_id": row["criterion"]["criterion_id"],
|
||||
"criterion_name": row["criterion"]["name"],
|
||||
"max_score": row["criterion"]["max_score"], "score_id": row["score_id"],
|
||||
"model_score": row["model_score"], "teacher_score": row["teacher_score"],
|
||||
"final_score": row["final_score"], "status": row["status"],
|
||||
"error": row["error"], "evidence": [{"page": ev["page"],
|
||||
"quote": ev["quote"][:240], "document": ev["document"]}
|
||||
for ev in row["evidence"][:2]]} for row in result["rows"]]})
|
||||
for row in result["rows"]:
|
||||
for evidence in row["evidence"][:2]:
|
||||
citations.append({"title": evidence["document"], "page": evidence["page"],
|
||||
"quote": evidence["quote"][:500],
|
||||
"url": evidence["image_url"] or result["url"]})
|
||||
results.append((item, result))
|
||||
page = results[args.project_offset:args.project_offset + 1]
|
||||
output = []
|
||||
citations = []
|
||||
for item, result in page:
|
||||
url = f"/?page=scores&batch_id={batch.id}&project_id={item.id}"
|
||||
rows = result["rows"][args.criterion_offset:args.criterion_offset + 6]
|
||||
output.append({"project_id": item.id, "student_no": str(result["student_no"])[:50], "name": str(result["name"])[:100],
|
||||
"totals": result["totals"], "url": url, "total_rows": len(result["rows"]),
|
||||
"rows": [{"criterion_id": str(row["criterion"]["criterion_id"])[:100],
|
||||
"criterion_name": str(row["criterion"]["name"])[:150],
|
||||
"max_score": row["criterion"]["max_score"], "score_id": row["score_id"],
|
||||
"model_score": row["model_score"], "teacher_score": row["teacher_score"],
|
||||
"final_score": row["final_score"], "status": row["status"],
|
||||
"error": str(row["error"] or "")[:300], "evidence": [{"page": ev["page"],
|
||||
"quote": ev["quote"][:160], "document": str(ev["document"])[:200]}
|
||||
for ev in row["evidence"][:2]]} for row in rows]})
|
||||
for row in rows:
|
||||
for evidence in row["evidence"][:2]:
|
||||
citations.append({"title": str(evidence["document"])[:200], "page": evidence["page"],
|
||||
"quote": evidence["quote"][:320],
|
||||
"url": evidence["image_url"] or url})
|
||||
next_criterion_offset = args.criterion_offset + 6 if page and args.criterion_offset + 6 < len(page[0][1]["rows"]) else None
|
||||
next_project_offset = args.project_offset + 1 if args.project_offset + 1 < len(results) else None
|
||||
return {"batch_id": batch.id, "status_filter": args.status, "count": len(results),
|
||||
"results": results[:2], "citations": citations[:12], "truncated": len(results) > 2}
|
||||
"project_offset": args.project_offset, "criterion_offset": args.criterion_offset,
|
||||
"next_project_offset": next_project_offset, "next_criterion_offset": next_criterion_offset,
|
||||
"results": output, "citations": citations}
|
||||
|
||||
|
||||
def summary(db, convo, args, _user):
|
||||
@@ -411,8 +425,8 @@ TOOLS: dict[str, Tool] = {
|
||||
"search_project_material": Tool("只检索指定学生项目报告,返回原文片段和引用。", SearchProject, search_project),
|
||||
"list_batches": Tool("列出可访问的评分批次。", Empty, batch_list),
|
||||
"get_batch_progress": Tool("查询评分批次进度、状态和固定项目范围。", BatchId, progress),
|
||||
"get_scores": Tool("查询单学生或单批次评分详情,可按评分项状态筛选。", ScoresArgs, scores),
|
||||
"summarize_batch": Tool("用数据库计算批次或单学生完成数、未完成数和最终分布,可按评分项状态筛选,不补零。", ScoresArgs, summary),
|
||||
"get_scores": Tool("分页查询单学生或单批次评分详情,可按状态筛选。每次返回一个项目、最多六项评分;如需其余评分项,用 next_criterion_offset 作为 criterion_offset 再查;如需下个项目,用 next_project_offset 作为 project_offset,并将 criterion_offset 设为 0。", ScoresArgs, scores),
|
||||
"summarize_batch": Tool("用数据库计算批次或单学生完成数、未完成数和最终分布,可按评分项状态筛选,不补零。", ScoresFilterArgs, summary),
|
||||
"list_index_tasks": Tool("查询课程版本的材料解析与索引任务进度。", VersionId, index_tasks),
|
||||
"prepare_import": Tool("从只读扫描结果准备导入确认卡片;每页最多20个项目,文件有歧义时要求教师在卡片中修正。", PrepareImport, prepare_import),
|
||||
"prepare_course_ingest": Tool("准备课程资料入库确认卡片。", VersionId, prepare_kind("course_ingest")),
|
||||
|
||||
Reference in New Issue
Block a user