Add relationship summary to synastry evidence

This commit is contained in:
732642856
2026-07-17 17:53:49 +08:00
parent f7674cca66
commit 618a01f65e
3 changed files with 40 additions and 1 deletions
+35
View File
@@ -68,6 +68,40 @@ function d9Summary(varga: Record<string, unknown>) {
};
}
function planetSign(point: unknown) {
return point && typeof point === "object" && "sign" in point
? String((point as Record<string, unknown>).sign || "unknown")
: "unknown";
}
function relationshipReport(synastry: Record<string, unknown>, selfD9: Record<string, unknown>, partnerD9: Record<string, unknown>) {
const total = Number(synastry.total_score ?? 0);
const max = Number(synastry.max_score ?? 36);
const ratio = max > 0 ? total / max : 0;
const band = ratio >= 0.72 ? "supportive" : ratio >= 0.5 ? "mixed" : "challenging";
const self = d9Summary(selfD9);
const partner = d9Summary(partnerD9);
return {
status: "evidence_summary",
scoreBand: band,
headline: band === "supportive"
? "基础匹配度偏支持,但仍需结合现实互动与长期运势。"
: band === "mixed"
? "基础匹配度中等,适合重点观察沟通节奏、价值观与关系承诺。"
: "基础匹配度偏谨慎,需要先处理冲突模式与现实条件。",
strengths: [
`Ashtakoot ${total}/${max}`,
`本人 D9 Moon${planetSign(self.moon)}`,
`对方 D9 Moon${planetSign(partner.moon)}`,
],
risks: [
"这不是完整婚恋结论;尚未纳入双方 Dasha、UL/DK 与长期时机。",
`D9 Venus/Mars 需要继续解释:本人 ${planetSign(self.venus)}/${planetSign(self.mars)},对方 ${planetSign(partner.venus)}/${planetSign(partner.mars)}`,
],
nextEvidence: ["双方 Dasha", "UL/DK", "D9 7宫/7主", "现实关系时间线"],
};
}
async function postPython(path: string, body: unknown) {
const response = await fetch(`${apiBase}${path}`, {
method: "POST",
@@ -113,6 +147,7 @@ export async function POST(request: Request) {
selfChart: { moon: moonSummary(selfChart), d9: d9Summary(selfD9) },
partnerChart: { moon: moonSummary(partnerChart), d9: d9Summary(partnerD9) },
synastry,
relationshipReport: relationshipReport(synastry, selfD9, partnerD9),
});
} catch (error) {
return NextResponse.json({
+2 -1
View File
@@ -1256,7 +1256,7 @@ export default function Home() {
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ selfProfile: profile, partnerProfile: record.profile }),
});
const payload = await response.json().catch(() => null) as { status?: string; evidenceLayers?: string[]; synastry?: { total_score?: number; max_score?: number; assessment?: string } } | null;
const payload = await response.json().catch(() => null) as { status?: string; evidenceLayers?: string[]; synastry?: { total_score?: number; max_score?: number; assessment?: string }; relationshipReport?: { headline?: string } } | null;
if (response.ok && payload?.status === "ok") {
const score = payload.synastry?.total_score;
const max = payload.synastry?.max_score;
@@ -1266,6 +1266,7 @@ export default function Home() {
baseQuestion,
"",
`已计算基础合盘证据:${layers}Ashtakoot ${score ?? "?"}/${max ?? "?"},初步评级:${assessment || "待解释"}。请基于这个证据包继续分析。`,
payload.relationshipReport?.headline ? `结构化摘要:${payload.relationshipReport.headline}` : "",
].join("\n"), "marriage");
} else {
chooseSuggestedQuestion(baseQuestion, "marriage");
@@ -168,6 +168,9 @@ def test_synastry_route_orchestrates_python_chart_and_ashtakoot() -> None:
"moonLongitude(selfChart)",
"moonSummary(selfChart)",
"d9Summary(selfD9)",
"relationshipReport",
"scoreBand",
"nextEvidence",
"ashtakoot_plus_moon_nakshatra_d9",
'evidenceLayers: ["ashtakoot", "moon_nakshatra", "d9_navamsa"]',
'status: "blocked"',