Skip to content

Commit 1f37e8e

Browse files
committed
前端增加对应参数显示与调节
1 parent 603951b commit 1f37e8e

File tree

2 files changed

+27
-4
lines changed

2 files changed

+27
-4
lines changed

frontend/src/pages/RecommendationPage.test.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,12 @@ describe("RecommendationPage", () => {
2323
if (url.endsWith("/admin/api/settings") && init?.method === "PUT") {
2424
const body = init.body ? JSON.parse(String(init.body)) : {};
2525
expect(body.settings.random.strategy).toBe("quality");
26-
expect(body.settings.random.quality_samples).toBe(5);
26+
expect(body.settings.random.quality_samples).toBe(12);
2727
expect(body.settings.random.recommendation.pick_mode).toBe("weighted");
2828
expect(body.settings.random.recommendation.temperature).toBe(1);
2929
expect(body.settings.random.recommendation.score_weights.bookmark).toBe(4);
30+
expect(body.settings.random.recommendation.score_weights.freshness).toBe(1);
31+
expect(body.settings.random.recommendation.score_weights.bookmark_velocity).toBe(1.2);
3032
expect(body.settings.random.recommendation.multipliers.ai).toBe(0.5);
3133
expect(body.settings.random.recommendation.multipliers.manga).toBe(0);
3234
return new Response(JSON.stringify({ ok: true, updated: 3, request_id: "req_save" }), {
@@ -41,11 +43,11 @@ describe("RecommendationPage", () => {
4143
settings: {
4244
random: {
4345
strategy: "quality",
44-
quality_samples: 5,
46+
quality_samples: 12,
4547
recommendation: {
4648
pick_mode: "weighted",
4749
temperature: 1,
48-
score_weights: { bookmark: 4, view: 0.5, comment: 2, pixels: 1, bookmark_rate: 3 },
50+
score_weights: { bookmark: 4, view: 0.5, comment: 2, pixels: 1, bookmark_rate: 3, freshness: 1, bookmark_velocity: 1.2 },
4951
multipliers: {
5052
ai: 1,
5153
non_ai: 1,

frontend/src/pages/RecommendationPage.tsx

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ type FormValues = {
3333
w_comment: number;
3434
w_pixels: number;
3535
w_bookmark_rate: number;
36+
w_freshness: number;
37+
w_bookmark_velocity: number;
3638

3739
m_ai: number;
3840
m_non_ai: number;
@@ -50,14 +52,16 @@ const PICK_MODE_VALUES = new Set<FormValues["pick_mode"]>(["weighted", "best"]);
5052

5153
const DEFAULTS: Omit<FormValues, "preview_seed"> = {
5254
random_strategy: "quality",
53-
random_quality_samples: 5,
55+
random_quality_samples: 12,
5456
pick_mode: "weighted",
5557
temperature: 1.0,
5658
w_bookmark: 4.0,
5759
w_view: 0.5,
5860
w_comment: 2.0,
5961
w_pixels: 1.0,
6062
w_bookmark_rate: 3.0,
63+
w_freshness: 1.0,
64+
w_bookmark_velocity: 1.2,
6165
m_ai: 1.0,
6266
m_non_ai: 1.0,
6367
m_unknown_ai: 1.0,
@@ -147,6 +151,8 @@ export function RecommendationPage() {
147151
w_comment: asFloat(scoreWeights.comment, DEFAULTS.w_comment),
148152
w_pixels: asFloat(scoreWeights.pixels, DEFAULTS.w_pixels),
149153
w_bookmark_rate: asFloat(scoreWeights.bookmark_rate, DEFAULTS.w_bookmark_rate),
154+
w_freshness: asFloat(scoreWeights.freshness, DEFAULTS.w_freshness),
155+
w_bookmark_velocity: asFloat(scoreWeights.bookmark_velocity, DEFAULTS.w_bookmark_velocity),
150156
m_ai: asFloat(multipliers.ai, DEFAULTS.m_ai),
151157
m_non_ai: asFloat(multipliers.non_ai, DEFAULTS.m_non_ai),
152158
m_unknown_ai: asFloat(multipliers.unknown_ai, DEFAULTS.m_unknown_ai),
@@ -166,7 +172,10 @@ export function RecommendationPage() {
166172
"+ w_comment * ln(1 + comment_count)",
167173
"+ w_pixels * ln(1 + (width*height)/1_000_000)",
168174
"+ w_bookmark_rate * ln(1 + (bookmark_count/view_count)*1000)",
175+
"+ w_freshness * exp(-age_days / 21)",
176+
"+ w_bookmark_velocity * ln(1 + bookmark_count / (age_days + 2))",
169177
"",
178+
"说明:有 seed 时,为保证可复现,会自动关闭 freshness/bookmark_velocity 两项。",
170179
"最终得分会再乘以“类别倍率”(AI/插画/漫画/动图等)。",
171180
"倍率=0 表示彻底不返回该类别。",
172181
].join("\n");
@@ -190,6 +199,8 @@ export function RecommendationPage() {
190199
comment: values.w_comment,
191200
pixels: values.w_pixels,
192201
bookmark_rate: values.w_bookmark_rate,
202+
freshness: values.w_freshness,
203+
bookmark_velocity: values.w_bookmark_velocity,
193204
},
194205
multipliers: {
195206
ai: values.m_ai,
@@ -385,6 +396,16 @@ export function RecommendationPage() {
385396
<Form.Item label="收藏率权重(bookmark_rate)" name="w_bookmark_rate">
386397
<InputNumber min={-100} max={100} step={0.1} style={{ width: 240 }} />
387398
</Form.Item>
399+
<Form.Item label="新鲜度权重(freshness)" name="w_freshness" extra="指数衰减:exp(-age_days/21),越新越加分。">
400+
<InputNumber min={-100} max={100} step={0.1} style={{ width: 240 }} />
401+
</Form.Item>
402+
<Form.Item
403+
label="收藏增长率权重(bookmark_velocity)"
404+
name="w_bookmark_velocity"
405+
extra="ln(1 + bookmark_count/(age_days+2)),帮助“好看的新图”被选中。"
406+
>
407+
<InputNumber min={-100} max={100} step={0.1} style={{ width: 240 }} />
408+
</Form.Item>
388409
</Space>
389410

390411
<Typography.Title level={5} style={{ marginTop: 12 }}>

0 commit comments

Comments
 (0)