Files
worldquant-alpha-system/backend/app/catalog/ai_tools.py
T

71 lines
2.2 KiB
Python

"""Domain-owned AI capabilities; caller owns authorization and transactions."""
from pydantic import Field
from ..ai.capabilities import Capability, EmptyArgs
from ..schemas import Contract
from .contracts import CatalogFilters, Scope
from .platform import platform_options
class CatalogSearchArgs(Contract):
filters: CatalogFilters
dataset_id: str | None = Field(default=None, min_length=1, max_length=200)
class CatalogDetailArgs(Contract):
scope: Scope
dataset_id: str = Field(min_length=1, max_length=200)
field_id: str = Field(default="", max_length=200)
async def search(ctx, args):
data = await ctx.business.catalog.search(args.filters, args.dataset_id)
return {
**data,
"scope": args.filters.model_dump(include=set(Scope.model_fields)),
"dataset_id": args.dataset_id,
}
async def detail(ctx, args):
data = await ctx.business.catalog.detail(args.scope, args.dataset_id, args.field_id)
# Saved notes are unnecessary for selection; unsaved drafts never enter this interface.
data.pop("research", None)
return data
INSTRUCTIONS = ""
CAPABILITIES = (
Capability(
name="get_catalog_scopes",
schema=EmptyArgs,
description="从平台读取当前账户可用的研究范围组合。",
label="读取研究范围",
renderer="catalog",
effect="query",
handler=lambda ctx, args: platform_options(ctx.platform_client),
source="worldquant_platform",
),
Capability(
name="search_catalog",
schema=CatalogSearchArgs,
description="分页查询本地目录。省略 dataset_id 查询数据集;提供 dataset_id 查询其字段、类型和完整集合版本。无缓存时说明需在数据集页同步,不编造字段。",
label="查询数据集与字段",
renderer="catalog",
effect="query",
handler=search,
),
Capability(
name="get_catalog_detail",
schema=CatalogDetailArgs,
description="读取指定范围的数据集或字段详情;field_id 为空表示数据集。",
label="读取数据详情",
renderer="catalog",
effect="query",
handler=detail,
),
)