76 lines
3.5 KiB
Python
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()),
|
|
),
|
|
)
|