Files
yuxuanhui 394438e753
Deploy production / deploy (push) Successful in 53s
refactor: unify data preparations and research input snapshots
2026-09-12 01:24:02 +08:00

76 lines
3.5 KiB
Python

"""Domain-owned AI capabilities; caller owns authorization and transactions."""
from pydantic import Field
from ..ai.alpha_tools import AlphaArgs
from ..ai.capabilities import Capability
from ..preparations.service import Preparations
from ..schemas import Contract
from .contracts import ChatboxResearchInput, InputPageArgs, ResearchInputSelection, ResearchPreviewInput
class AlphaSourcesArgs(AlphaArgs):
limit: int = Field(default=25, ge=1, le=100)
offset: int = Field(default=0, ge=0)
async def prepare(ctx, args):
return await ctx.business.research_builder.prepare(ResearchPreviewInput(**args.model_dump()))
INSTRUCTIONS = "研究先用 search_data_preparations 查询可编辑集合,读取集合 ID 与 version 后使用 prepare_research_input 固定输入。已有快照使用 get_research_input。所有研究来源保留独立快照,删除集合不影响已有研究。构建回测需明确假设、字段绑定和范围;VECTOR 必须显式处理,不能当作 MATRIX。直接表达式回测不声明数据准备来源。"
class PreparationSearch(Contract):
q: str = Field(default="", max_length=300)
scope_key: str | None = None
limit: int = Field(default=25, ge=1, le=100)
offset: int = Field(default=0, ge=0)
CAPABILITIES = (
Capability(name="search_data_preparations", schema=PreparationSearch,
description="分页搜索数据准备集合,返回 ID、version、范围与字段数;非空集合可固定为研究输入。",
label="查询数据准备", renderer="catalog", effect="query",
handler=lambda ctx, args: Preparations(ctx.business.db).list(**args.model_dump())),
Capability(
name="prepare_research_input",
schema=ResearchInputSelection,
description="将数据准备集合的明确 ID 和 version 固定为研究快照,保留完整字段与数据集归属。已有快照直接读取。",
label="固定研究输入",
renderer="catalog",
effect="prepare",
handler=lambda ctx, args: ctx.business.research_builder.select_input(args),
refresh=("datasets",),
),
Capability(
name="get_research_input",
schema=InputPageArgs,
description="分页读取不可变研究输入及原版本字段说明。q 仅搜索字段 ID,类型筛选不改变输入。field_count 是输入总数,total 是筛选匹配数。",
label="读取固定研究输入",
renderer="catalog",
effect="query",
handler=lambda ctx, args: ctx.business.research_builder.input_page(**args.model_dump()),
),
Capability(
name="prepare_research_backtest",
schema=ChatboxResearchInput,
description="从研究输入快照构建固定回测预览:提供假设、候选模板(如 rank({price}))、具名字段绑定及真实类型、明确模拟参数。服务端校验归属/类型/范围并替换占位符;不验证算子语义、不自动聚合 VECTOR。来源由服务端标记为当前 chatbox 研究。",
label="构建研究候选与预览",
renderer="backtest",
effect="prepare",
handler=prepare,
refresh=("backtests",),
),
Capability(
name="get_alpha_sources",
schema=AlphaSourcesArgs,
description="分页读取 Alpha 的全部已保存研究来源、关联回测、聊天会话和输入快照。没有记录不推断来源。",
label="查询 Alpha 研究来源",
renderer="catalog",
effect="query",
handler=lambda ctx, args: ctx.business.get_alpha_sources(**args.model_dump()),
),
)