54 Commits

Author SHA1 Message Date
cc2e9c5a50 docs: README端点选择章节改新约定——端点纯连接点可互换(主机根+region+timeout,protocol标签废止),profile.path承载完整相对路径(含版本段),endpoint_ids空=全部,inference删全URL覆盖分支,根治t2t间歇404 2026-09-12 15:21:34 +08:00
3ea03bedc4 refactor(gateway): 端点与模型解绑——删_pick_candidate协议过滤(端点=纯连接点对全模型可互换),endpoint_ids空=全部端点;inference删3处path全URL覆盖分支(模型profile禁把端点写进path);init.normalize_endpoints端点归一主机根+同主机去重+timeout取max。根治t2t间歇404(无profile被轮询到api/v1原生端点拼chat/completions)。2026-09-12用户定夺:模型和端点不能强绑定 2026-09-12 12:35:04 +08:00
0f0757d12b fix(models): llm_usage.project_id标题去内嵌单引号——json2ddl渲染comment不转义,含'0'的title生成CREATE TABLE直接1064语法错(测试机create_tables.py实抓,错误=1即此);哨兵值语义不变 2026-09-11 15:42:04 +08:00
6d0ecc5d21 feat(wallet): 账号钱包门禁+会话粘性轮询+出账后扣减+余额不足待办(2026-09-11用户定夺)——①门禁:balance<阈值(params缺省5元)从轮询集剔除,全剔除报可行动错误;②粘性:同会话同模型固定账号(Redis llm_sticky TTL1h滑动续期)省上游缓存钱,粘性失效自动重选,session_id经payload._session_id透传;③轮询:跨会话INCR取模替代余额加权;④扣减:产品记账成功后按流水account_id扣调用账号钱包(supplier_cost),与cost回填同事务原子,cost≠0幂等跳过防重置重跑重复扣,允许透支为负;⑤待办:状态派生provider(充值到账自动消失天然单发)给属主机构operator角色(params可配,按.后缀动态匹配)+详情弹窗内直接充值 2026-09-11 15:29:40 +08:00
69fe362dde feat(trace): 调用原文追踪「查看IO」前端闭环+按项目费用页(2026-09-10定夺落地)
- 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/生成目录不入库
2026-09-11 14:58:21 +08:00
427cd7cbc1 feat(usage): usages全量不截断为计费唯一事实源(m0021删token冗余列)+llm_call_trace上下行原文追踪+project_id按项目统计费用(2026-09-10) 2026-09-11 14:17:40 +08:00
d086c4f7d2 feat(govern): 能力降级规则i2i→t2i/r2v→t2v(2026-09-08用户定夺,与r2v→t2v同例)——selection加CAP_DEGRADE事实源+degrade_expand,models_catalog候选池含降级源模型,网关备链/owner容错链同能力铁律放行合法降级源,auto_select提示词补降级规则;单向降级反向永远非法 2026-09-08 17:20:39 +08:00
fba76a0cdc fix(inference): 同步路径注入prompt便利变量——两路径模板命名空间一致(2026-09-08实测根因)
提取生成器为DashScope生成类模型产的request_template用{{ prompt }}(messages末条
文本),此前只异步路径_build_async_body注入;同步生成路径复用_build_upstream_body
时StrictUndefined渲染崩"Object of type Undefined"(qwen-image-plus实测0.1s失败)。
2026-09-08 13:38:02 +08:00
eb6ca2f4bb feat(inference): 同步生成执行路径——交互形态第三种(2026-09-08用户定夺:stream/async之外,客户提交后模型即时给出产物)
- _sync_generation_inference:一次POST即时拿产物,复用异步路径的response模板渲染
  +downloadfile2url落地+usages记账;模板失效按DashScope实测形态搜索产物
  (output.choices[0].message.content[0].{image|video|audio})
- _post_upstream抽公共(require_choices参数:chat语义/生成语义);上游业务错误如实抛
- chat_inference同步分流三分支:CHAT_CAPS→chat;生成类(t2i/i2i/t2v/i2v/r2v/tts/asr)
  →同步生成;其余(embedding/rerank)如实报错禁静默
- 协议字典加dashscope_sync种子(同步生成,不带X-DashScope-Async头)
- 根治qwen-image-plus:文档MultiModalConversation.call(stream=False)被误配async
  +异步头→密钥不支持异步403;sync路径原先只认chat,t2i无执行路径
2026-09-08 13:33:26 +08:00
5a1a567720 fix(gateway): 同能力备链铁律——显式指定模型不可用时禁止跨能力静默顺延(2026-09-07 qwen-image-plus实测:指定t2i模型无key账号→旧逻辑补t2t备链→静默返回deepseek文字还报ok:true,要图得文当成功);_model_chain指定模型只补同能力备链+owner容错链同能力过滤,无同能力替代则报可行动错误(违反禁止静默回退铁律,且毒害invoke_model自动选型) 2026-09-07 18:38:25 +08:00
681b4c46b7 chore(scripts): 存档删除5个老MiniMax模型脚本(M2/M2.1/M2.1-highspeed/M2.5/M2.5-highspeed,用户定夺老模型删除;走模块守卫函数+产品映射一并清+共享模板保留,已备份可回滚) 2026-09-07 18:05:55 +08:00
9cb6b5abdf chore(scripts): 存档MiniMax定价落库(M3分档五折/M2.7/M2.7-highspeed,不配缓存写入因子-无usage证据)与4模型下线脚本(上游下架,disabled+产品下架,幂等) 2026-09-07 17:57:49 +08:00
bfaa8c70c8 docs(readme): 记账derived计费双保险(usage原文落库+hour/prompt_tokens_details归一)与定价YAML铁律(备选模式维度不入YAML) 2026-09-07 17:32:49 +08:00
bf6c752a50 chore(scripts): 存档2026-09-07价目表定价重建脚本(14:08四表被清空后按用户价目表重建9模型定价+改名text-embedding-flash+happyhorse三模型共享ppid+悬空ppid清理,幂等,引擎试算全过) 2026-09-07 17:21:41 +08:00
e9e57cf825 fix(记账): 同步调用usage原文落usages+出账补prompt_tokens_details/hour维度——根治derived缓存变量求值失败(uncache_tokens=0输入不计费)与忙闲时分档计价缺失(2026-09-07实测qwen3.8-max记账failed根因) 2026-09-07 16:57:43 +08:00
08cf9272cd feat(selection): 任务自适应自动选型auto_select_model+models_catalog(本机构+owner机构候选,utility语义匹配,owner硬校验双保险);治理链govern_resolve加模型归属校验——他机构模型剔除顺延替代,显式指定越权模型报可行动错误(2026-09-07用户需求) 2026-09-07 16:47:21 +08:00
c9806aed6b docs(readme): 宿主接入清单入口名更新为规范名 load_pipeline_llm(旧名 load_llm 为别名) 2026-09-07 14:59:26 +08:00
23ebc7fc17 refactor: load_llm 规范化为 load_pipeline_llm(load_<模块名>约定)+保留旧名别名(accounting_worker 零改动) 2026-09-07 13:57:42 +08:00
bd732bf35f feat(ui): 模型治理卡片全部弹窗化(card_popup白名单)+模型注册弹窗加自动配置(auto_config_popup:API/定价链接或正文→内部助手全链)与上线检查(online_check_popup:选模型→真实调用+记账检查+状态复核→告知结果);删下方llm_content展示容器(2026-09-07用户定夺) 2026-09-07 13:24:31 +08:00
34ef256fe6 feat(llm): 供应商账号改为供应商CRUD子表(llm_account_by_vendor)——弹窗进入只显示/处理选定供应商账号;账号归属服务端守卫(vendor_id不可改/跨供应商禁删);删独立账号列表页(index.ui卡片同步移除) 2026-09-06 21:51:05 +08:00
c16bdb4a28 docs(readme): llm_api_profile复用键改协议×能力×形态指纹 2026-09-06 19:51:58 +08:00
8e32cb85f3 feat(llm): 会话agent可选模型收窄为对话能力t2t/i2t/m2t+能力字典加m2t(2026-09-06用户定夺)
- selection.CHAT_CAPS=('t2t','i2t','m2t') 作为会话形态能力白名单唯一事实源
- model_options/resolve_model_name 加 capabilities 参数('chat'哨兵),
  IN 列表展开占位符(sqlor传list会崩),capability 空串按 t2t 归一(COALESCE+NULLIF)
- chat_inference 同步门禁从「只认 t2t」放宽到 CHAT_CAPS——
  实测根因:测试库 6 个机构策略主模型全是 qwen3.8-max(i2t),
  16:28 已产生 FAILED「capability mismatch: i2t != t2t」,会话agent选它必挂
- m2t 入字典四处同步:种子 init/data.json + 端点注释 models.dspy
  + design-spec §6 能力表(+ 提取提示词在 pipeline-platform)
2026-09-06 19:32:59 +08:00
671d320d59 feat(llm): status统一枚举SUCCEEDED/FAILED/PENDING/RUNNING+非SUCCEEDED记账状态NULL;llm_api_profile加method独立列(2026-09-06用户定夺)
- llm_usage.status 各家归一枚举(其他=recharge对账行);accounting_status仅SUCCEEDED行写created,其余NULL不冒充待记账
- govern_settle失败行不再挂created;充值行不写accounting_status
- 出账循环拾取条件 status='SUCCEEDED';面板/概览统计同步改
- llm_api_profile.method GET/POST独立列(默认POST),运行时读列决定动词;查询步骤存量兼容回退解析request_template.$.method
- 字典llm_usage_status更新五枚举;README同步
2026-09-06 17:15:40 +08:00
825dd2e130 feat(llm): 运行时媒体别名归一升级为三数组契约——xxx_file/xxx_url→xxx_files,media数组按type分组进image_files/video_files/audio_files 2026-09-06 10:23:01 +08:00
c3cf1a3a4f feat(llm): 能力字典加r2v(参考生视频)/i2i(图生图)——种子+models.dspy端点注释两处同步 2026-09-06 09:30:12 +08:00
852814678a fix(llm): _join_url拼接去重base_url已有路径前缀(模板path带/api/v1+端点/api/v1双前缀404) 2026-09-05 23:28:16 +08:00
9f0691f0b7 fix(llm): 协议匹配端点存在时只选匹配项(排除未标注)——防同账号多端点按序选到compatible-mode再404(自查发现) 2026-09-05 23:11:56 +08:00
51d1e4ccdd fix(llm): _pick_candidate协议感知选端点(404根因)——按模型profile.protocol过滤端点标签,不匹配报真实可行动错误;无标签端点视为通用(向后兼容) 2026-09-05 23:08:17 +08:00
7b6b74646d docs(readme): 记账三态语义(created/accounted/failed)+出账前置(产品映射+ppid)+worker依赖appbase 2026-09-05 18:53:51 +08:00
0a5974e935 refactor(usage): accounting_status三态语义(created待记账/accounted成功/failed失败,用户定夺)——去na/pending分流,所有成功调用统一created进出账队列,自用vs跨机构由产品层is_self_use分流,成本账不遗漏 2026-09-05 18:13:50 +08:00
5ec2ca8fa4 docs(readme): 同步2026-09-05全部变更——供应商去协议/记账分流usages/媒体转换铁律/异步执行器/API文档端点 2026-09-05 16:10:47 +08:00
1ccb58c5a7 feat(rbac): API文档端点授权any(照sage /bricks/docs先例)——外部开发者调API前可匿名查文档;docs目录+index.ui+四语言md 2026-09-05 16:00:23 +08:00
2ee4b7893c feat(docs): /v1/docs端点——四语言API文档(中英日韩)+index.ui按_lang分发ApiDoc(照sage docs同款逻辑) 2026-09-05 15:43:20 +08:00
8da377fc81 feat(inference): 媒体文件转换双函数接入模板命名空间(对齐uapi铁律)——data模板b64media2url上传转公网URL/response模板downloadfile2url生成物落地;同类接口参数统一xxx_file契约;异步结果经response模板渲染出media字段 2026-09-05 15:19:27 +08:00
7576ffd6f8 feat(gateway): 模型account_id生效——候选账号池收窄为模型绑定账号(视频模型用百炼账号,防供应商级轮转串号) 2026-09-05 13:11:57 +08:00
c819faef2d feat(async): 异步模型执行器(提交→轮询query_profile_ids→取结果)+usages用量因子记账;供应商去protocol字段(模式归模型适配模板);修_model_chain漏取profile_id等字段致适配模板从未加载的存量bug 2026-09-05 13:07:08 +08:00
beef2d81a2 feat(capability): 能力枚举补i2v图生视频——字典种子+模型列表注释;修复LLM提取时图生视频被迫塞进t2v的静默错分类 2026-09-05 10:55:13 +08:00
5e9dee1eb7 docs(readme): llm_model说明同步——2026-09起不存单价,定价走ppid 2026-09-05 10:48:52 +08:00
f9b5b60c68 fix(inference): 超时根因双修——报错用repr(TimeoutError空str)+重试print进应用日志;chat_inference支持_timeout单次超时覆盖(上限900秒,长文档提取用) 2026-09-05 10:24:44 +08:00
f965e4b4d6 refactor(llm_model): 删除价格/成本四字段(price/cost input/output)——定价统一走ppid定价平台,记账改路后为死库存;结算cost恒0,展示/列表/迁移同步清理 2026-09-04 21:02:58 +08:00
6feacaf51c feat(inference): 接purpose透传——_resolve_call/chat_inference支持用途标记,辅助任务(分类/选择/摘要)走辅助模型链,_purpose转发上游前剥离 2026-09-04 19:32:34 +08:00
9fb020b11e fix(inference): 401真根因——headers模板的api_key占位符被脱敏工具替换成字面***致渲染出***当key;改拼接构造占位符 2026-09-04 18:28:02 +08:00
31a5c73225 fix(inference): 模板渲染兜底修正——原生jinja2.Environment无renders方法(独立脚本环境崩溃);诊断改print(模块logger未接应用日志管道) 2026-09-04 18:26:17 +08:00
26d083bdd2 refactor(inference): 组包借鉴uapi模板渲染——path/headers/body全Jinja2(tmpl_engine.renders+json.loads),api_key走模板命名空间注入;废弃土制字符串替换(401根因方向);内置openai-chat缺省模板,新形态只加profile不改代码 2026-09-04 18:21:10 +08:00
e0c1dc751d fix(llm): _row_to_dict根因修复——sqlor行是DictObject(dict子类),数据在dict本体,vars()取到空实例__dict__致治理链模型字段全空(策略首次激活时暴露);init.py用量查询同修 2026-09-04 17:25:29 +08:00
611008cb38 feat(llm): 统一推理API(v1/chat/completions+v1/models按能力分类照llmage)+模型选择收敛层selection(下拉/引用解析唯一入口)+旧表迁移脚本;agent调用经llm_bridge HTTP自调用收敛至此 2026-09-04 17:03:48 +08:00
d5dd9f4be2 feat(llm): profile表补path/headers自含字段;model表补query_profile_ids后续步骤模板链(异步模型提交→查询→[下载]);CRUD接helper+placeholder说明 2026-09-04 14:00:15 +08:00
4b6b4a2c95 fix(llm): 供应商CRUD editable接api薄封装(原指向生成目录直写库,端点归一化未生效) 2026-09-03 17:41:26 +08:00
3c3d6a35d3 feat(llm): 端点目录支持一行一URL输入(归一化+中文校验提示);账号APIKEY可配置(加密存储/掩码守卫/空=不改)+机构自动注入+endpoint_ids逗号兼容;CRUD接模块helper薄封装 2026-09-03 17:36:57 +08:00
82470ae7ab feat(vendor): 所属机构改logined_userorgid自动注入——表单不再手输;org_id移出编辑表单;endpoints字段加格式示例placeholder 2026-09-03 16:21:31 +08:00