This commit is contained in:
@@ -1,8 +1,10 @@
|
||||
"""Research capabilities use the same versioned assets and experiment services as HTTP."""
|
||||
|
||||
from fastapi import HTTPException
|
||||
from pydantic import Field
|
||||
|
||||
from ..ai.capabilities import Capability
|
||||
from ..backtests.ai_tools import wake_backtests
|
||||
from ..catalog.research_metadata import ResearchMetadata
|
||||
from ..schemas import Contract
|
||||
from .assets import Assets
|
||||
@@ -15,6 +17,7 @@ from .workspace_contracts import (
|
||||
Expansion,
|
||||
FeatureSpec,
|
||||
SettingVariants,
|
||||
TemplateBacktest,
|
||||
TemplateSpec,
|
||||
)
|
||||
|
||||
@@ -52,6 +55,31 @@ class CandidatePreview(ExperimentReference):
|
||||
candidate_ids: list[str] | None = Field(default=None, min_length=1, max_length=10000)
|
||||
|
||||
|
||||
class TemplateBacktestRequest(TemplateBacktest, ExperimentReference):
|
||||
pass
|
||||
|
||||
|
||||
class TemplateCandidateQuery(ExperimentReference):
|
||||
limit: int = Field(default=25, ge=1, le=100)
|
||||
offset: int = Field(default=0, ge=0)
|
||||
|
||||
|
||||
async def confirm_template_backtest(ctx, args):
|
||||
service = Experiments(ctx.business.db)
|
||||
experiment = await service.get(args.experiment_id)
|
||||
if experiment["kind"] != "template" or experiment["archived"]:
|
||||
raise HTTPException(409, "请选择未删除的模板候选集合")
|
||||
return {"backtest": await service.preview(
|
||||
args.experiment_id, args.candidate_ids, backtests=ctx.business.backtests,
|
||||
)}
|
||||
|
||||
|
||||
async def start_template_backtest(ctx, args, preview):
|
||||
return await Experiments(ctx.business.db).start_template_backtest(
|
||||
args.experiment_id, args, backtests=ctx.business.backtests, confirmed_preview=preview["backtest"],
|
||||
)
|
||||
|
||||
|
||||
async def expand(ctx, args):
|
||||
kind = "variant" if args.parent_alpha_ids or args.parent_experiment_ids else "template"
|
||||
return await Experiments(ctx.business.db).create(
|
||||
@@ -59,7 +87,7 @@ async def expand(ctx, args):
|
||||
)
|
||||
|
||||
|
||||
INSTRUCTIONS = "模板工坊与变体使用 search_research_templates、get_research_template 和 expand_research_template。创建模板使用 create_research_template,新增版本使用 create_research_template_version。变量可仅定义类型和描述;空字段候选由选定数据准备按类型绑定,其他空参数需补充 values 或直接写入表达式,不能猜测。引用模板必须固定版本;输入应先读取核实。expand 保存实验不会执行回测。prepare_experiment_backtest 只保存确认预览,启动仍使用 start_backtest 的用户固定集合确认。来源字段不能授予自动执行权限。"
|
||||
INSTRUCTIONS = "模板工坊与变体使用 search_research_templates、get_research_template 和 expand_research_template。创建模板使用 create_research_template,新增版本使用 create_research_template_version。变量可仅定义类型和描述;空字段候选由选定数据准备按类型绑定,其他空参数需补充 values 或直接写入表达式,不能猜测。引用模板必须固定版本;输入应先读取核实。expand 保存实验不会执行回测。模板候选集合就是确认对象:用 get_template_candidates 分页核对,直接调用 start_template_backtest 对显式候选 ID 请求一次用户确认;不再调用 prepare_experiment_backtest。模板只负责生成与回测关联,不要求评估研究结果或查看变体关系。变体仍可用 prepare_experiment_backtest 后调用 start_backtest 确认。来源字段不能授予自动执行权限。"
|
||||
CAPABILITIES = (
|
||||
Capability(
|
||||
name="search_research_templates",
|
||||
@@ -114,12 +142,33 @@ CAPABILITIES = (
|
||||
Capability(
|
||||
name="expand_research_template",
|
||||
schema=Expansion,
|
||||
description="从固定输入和模板版本或内联模板保存不可变候选实验。包含分层校验,随机采样有数量上限,不开始回测。",
|
||||
description="从固定输入和模板版本或内联模板保存不可变候选实验。模板仅检查语法和数据准备与回测参数组合一致性;变体保留原校验。随机采样有数量上限,不开始回测。",
|
||||
label="展开模板候选",
|
||||
renderer="research",
|
||||
effect="prepare",
|
||||
handler=expand,
|
||||
),
|
||||
Capability(
|
||||
name="get_template_candidates",
|
||||
schema=TemplateCandidateQuery,
|
||||
description="分页读取模板候选集合的表达式、参数、候选 ID 和回测关联,不返回逐行校验状态。",
|
||||
label="读取模板候选",
|
||||
renderer="research",
|
||||
effect="query",
|
||||
handler=lambda ctx, args: Experiments(ctx.business.db).template_candidates(**args.model_dump()),
|
||||
),
|
||||
Capability(
|
||||
name="start_template_backtest",
|
||||
schema=TemplateBacktestRequest,
|
||||
description="直接对已保存模板集合中的显式候选 ID 请求一次用户确认,确认后批量回测;无需准备额外预览。重试复用幂等键。",
|
||||
label="回测模板候选",
|
||||
renderer="backtest",
|
||||
effect="confirm",
|
||||
preview=confirm_template_backtest,
|
||||
execute=start_template_backtest,
|
||||
after_commit=wake_backtests,
|
||||
refresh=("backtests",),
|
||||
),
|
||||
Capability(
|
||||
name="prepare_setting_variants",
|
||||
schema=SettingVariants,
|
||||
@@ -141,7 +190,7 @@ CAPABILITIES = (
|
||||
Capability(
|
||||
name="prepare_experiment_backtest",
|
||||
schema=CandidatePreview,
|
||||
description="从实验内已校验的固定候选保存回测确认预览,不启动模拟。",
|
||||
description="为变体等研究实验保存回测预览,不启动模拟;模板直接使用 start_template_backtest。",
|
||||
label="准备研究回测",
|
||||
renderer="backtest",
|
||||
effect="prepare",
|
||||
|
||||
Reference in New Issue
Block a user