极速成片页面和提炼提示词

This commit is contained in:
Azmat@qq.com
2026-08-24 15:52:05 +08:00
parent 2f5b7304b0
commit 00fc454db7
29 changed files with 1424 additions and 483 deletions
+22
View File
@@ -33,6 +33,8 @@ _CONFIG_TTL = 60
# 实扣会比消费页公示价低一半(review 确认的三方不一致)。
FLAT_FALLBACK_POINTS = Decimal("10")
FLAT_FALLBACK_POINTS_IMAGE = Decimal("20")
# 提炼提示词 / 上传视频提炼:功能挂牌价,不跟 Gemini unit_price(那是普通文本 10 积分/次)。
VIDEO_DIGEST_POINTS = Decimal("30")
def get_billing_config() -> BillingConfig:
@@ -114,6 +116,26 @@ def quote_flat(model_config, *, units: int = 1, team=None) -> Quote:
)
def quote_video_digest(*, team=None, model_config=None) -> Quote:
"""提炼提示词:固定 30 积分/次。失败退还。team 传入则乘团队价格系数。"""
multiplier = team_price_multiplier(team)
points = apply_team_price(VIDEO_DIGEST_POINTS, multiplier)
base_cost = Decimal("0")
if model_config is not None:
base_cost = Decimal(str(_pricing_meta(model_config).get("base_cost_yuan") or 0))
return Quote(
points=points,
base_cost_yuan=base_cost,
meta={
"rule": "video_digest_flat",
"units": 1,
"unit_points": str(VIDEO_DIGEST_POINTS),
"price_multiplier": str(multiplier),
"rate": str(get_billing_config().points_per_yuan),
},
)
def quote_voiceover(model_config, *, char_count: int, team=None) -> Quote:
"""配音字符阶梯:ceil(chars / chars_per_unit) × points_per_unit,最低 min_units 档。team 传入则乘系数。"""
pricing = _pricing_meta(model_config)
+17
View File
@@ -231,6 +231,15 @@ class PricingEngineTests(TestCase):
# 多单位(单图批量按张)
self.assertEqual(quote_flat(self.text_model, units=3).points, Decimal("30"))
def test_video_digest_is_fixed_thirty_not_model_unit_price(self):
from apps.billing.pricing import VIDEO_DIGEST_POINTS, quote_video_digest
self.assertEqual(VIDEO_DIGEST_POINTS, Decimal("30"))
quote = quote_video_digest(model_config=self.text_model)
self.assertEqual(quote.points, Decimal("30"))
self.assertEqual(quote.meta["rule"], "video_digest_flat")
self.assertEqual(quote.meta["unit_points"], "30")
def test_flat_fallback_when_unit_price_unset(self):
from apps.billing.pricing import FLAT_FALLBACK_POINTS, quote_flat
@@ -414,6 +423,14 @@ class TeamPriceMultiplierTests(TestCase):
# meta.rate 是汇率快照契约:create_ai_task 落 payload.points_per_yuan_snapshot,毛利报表用它防汇率漂移
self.assertEqual(Decimal(quote.meta["rate"]), Decimal("10"))
def test_video_digest_applies_multiplier_to_feature_price(self):
from apps.billing.pricing import quote_video_digest
# 30 × 0.8 = 24;不跟模型 unit_price=20
quote = quote_video_digest(team=self.team, model_config=self.image_model)
self.assertEqual(quote.points, Decimal("24"))
self.assertEqual(quote_video_digest().points, Decimal("30"))
def test_two_step_rounding(self):
from apps.billing.pricing import quote_video_from_cost