- json/llm_call_trace_list.json: noedit只读列表;exclouded隐藏id/req_path/resp_path/org_id;
url/note加宽;kind/method内联枚举(含gen同步生成,此前草稿引用的get_llm_kind_options.dspy不存在);
删color_mapping(bricks全库0消费的死配置);toolbar查看IO+binds urlwidget→PopupWindow(85%)
url不带?id=${id}$——生成期ArgsConvert会eval成<built-in function id>垃圾串,
行数据id经_add_event_data自动并入params(dapi/llmage生产同款)
- api/llm_call_trace_io.dspy: 薄代理(get_user门禁+get_userorgid机构隔离)→env.llm_call_trace_io;
修草稿4处实锤bug:get_user未await/user.get当dict/sor块外使用/返回PopupWindow套娃
- init.py: llm_call_trace_io读表+同批次+llm_usage上下文(块内读全拷dict)→读文件
(trace.trace_root realpath前缀校验防穿越)→TabPanel三tab(摘要Html+pre escape防注入/
请求/响应CodeEditor readonly mode=null);单侧150K截断提示盘上路径;env注册
- api/llm_project_cost_query.dspy: 改{total,rows}契约接Tabular data_url(PageDataLoader);
wwwroot/llm_project_cost/index.ui: InlineForm(date_from/date_to/status)+Tabular;
script内getWidgetById起点bricks.app(弹窗DOM挂body下,app.root搜不到)
- card_popup.dspy: titles加llm_call_trace;新增page_targets白名单挂按项目费用页;
index.ui挂两张卡片(调用原文追踪/按项目费用)
- accounting.py: _maybe_cleanup_traces每日一次接cleanup_expired(trace.py铁律3
文档承诺worker每日调但循环没接,补齐);放抢锁前(清理幂等多进程同日无害)
- scripts/load_path.py: 注释说明/**通配已覆盖新页面(rbac check_roles_path前缀匹配)
- models/mysql.ddl/README/design-spec: 9张表同步(kind补gen枚举;3.9节;F19/F20)
- scripts/test_llm_call_trace_io.py: stub harness 22断言全过(隔离/穿越/转义/截断/每日门控)
- .gitignore: wwwroot/llm_call_trace/生成目录不入库
52 lines
1.7 KiB
Python
52 lines
1.7 KiB
Python
#!/usr/bin/env python3
|
||
"""pipeline_llm module RBAC permission registration.
|
||
|
||
Run from app root: py3/bin/python pkgs/pipeline-llm/scripts/load_path.py
|
||
Requires app-root wrapper set_role_perm.py.
|
||
|
||
v1 推理端点(/pipeline-llm/api/v1/*)授权给 any:运行环境/外部客户端用短期
|
||
Bearer token 鉴权,没有登录会话。端点文件内含 verify_llm_token(security_check
|
||
AUTH_PATTERNS 认可)。其余管理页/CRUD 全部 logined。
|
||
"""
|
||
import subprocess
|
||
|
||
MOD = "pipeline-llm"
|
||
|
||
PATHS_ANY = [
|
||
# 推理 API:Bearer 短期 token 鉴权,无登录会话
|
||
f"/{MOD}/api/v1/chat/completions",
|
||
f"/{MOD}/api/v1/models",
|
||
# API 文档端点:公开文档(照 sage /bricks/docs any 先例),外部开发者调 API 前可查;
|
||
# index.ui 按 _lang 分发四语言 md,md 由 ApiDoc 组件拉取——都需匿名可读
|
||
f"/{MOD}/api/v1/docs",
|
||
f"/{MOD}/api/v1/docs/",
|
||
f"/{MOD}/api/v1/docs/**",
|
||
]
|
||
|
||
PATHS_LOGINED = [
|
||
f"/{MOD}/",
|
||
f"/{MOD}/index.ui",
|
||
]
|
||
|
||
# api/(管理)与生成的 CRUD 目录用通配符一次覆盖
|
||
# (含 llm_call_trace 生成页、llm_project_cost/index.ui、api/*.dspy——
|
||
# rbac check_roles_path 支持 ** 后缀前缀匹配,新页面无需逐条注册)
|
||
PATHS_WILDCARD_LOGINED = [
|
||
f"/{MOD}/**",
|
||
]
|
||
|
||
|
||
def register_paths():
|
||
for path in PATHS_ANY:
|
||
subprocess.run(["py3/bin/python", "set_role_perm.py", "any", path])
|
||
print(f" any: {path}")
|
||
for path in PATHS_LOGINED + PATHS_WILDCARD_LOGINED:
|
||
subprocess.run(["py3/bin/python", "set_role_perm.py", "logined", path])
|
||
print(f" logined: {path}")
|
||
|
||
|
||
if __name__ == "__main__":
|
||
print(f"=== {MOD} (pipeline_llm) RBAC registration ===")
|
||
register_paths()
|
||
print("Done.")
|