# -*- coding: utf-8 -*- """预测器层(PREDICTORS)。 只做模型推理和模型后处理,不直接读写 Redis/PG,模型路径从配置读取。 按 ARCHITECTURE.md §6.2 Predictor 接口约束: - Predictor 不直接读写 Redis/PG。 - 模型路径从配置读取,不拼接代码目录。 - load() 与 predict() 分离,便于启动预热和测试 mock。 - Predictor 之间不互相 import,通过 Pipeline 编排顺序传递结果。 Phase 5 已填充模块(从 interface/predictor.py 迁出): _common.py <- sess_config / agency_set / header_set / is_agency / get_td_companys / get_role codename.py <- CodeNamePredict prem.py <- PREMPredict / EPCPredict form.py <- FormPredictor role.py <- RoleRulePredictor / RoleRuleFinalAdd / TendereeRuleRecall(Phase E 起薄委托 role_recall_engine)/ RoleGrade / role_special_predictor role_context.py <- RoleContext / build_role_contexts(Phase A 上下文预计算,prem/roleRule/tendereeRuleRecall 共享) role_recall_engine.py <- RoleRecallEngine(Phase E 召回规则统一引擎,消费 role_context.yaml / role_fallback.yaml) role_rule_engine.py <- RoleRuleEngine(Phase C 模型后修正引擎,消费 role_context_fix.yaml / role_money_fix.yaml) money.py <- MoneyGrade / DepositPaymentWay / TotalUnitMoney time.py <- TimePredictor product.py <- ProductPredictor product_attrs.py <- TableResult / ProductAttributesPredictor channel.py <- DocChannel label.py <- ProjectLabel / IndustryLabel / PropertyLabel / BiddingScore industry.py <- IndustryPredictor district.py <- DistrictPredictor table_prem.py <- TableTag2List / TablePremExtractor / CandidateExtractor / is_head_line / get_header_line websource.py <- WebsourceTenderee approval.py <- ApprovalPredictor entity_type.py <- EntityTypeRulePredictor / get_package_moneys Phase 2 已建立: base.py <- BasePredictor 抽象基类 registry.py <- PredictorRegistry(替代 dict_predictor) 依赖方向(§4.3): - predictors 可引用 common / infra / interface.Entitys / interface.modelFactory / model_runtime - predictors 不反向依赖 pipeline / assembly / rules - predictors 之间不互相 import(通过 Pipeline 编排) - predictors._common 提供共享状态(sess_config / agency_set / header_set / 辅助函数) """