354f556099
feat: 新增 llm_metrics 和 user_llm_policy 两张表
...
llm_metrics: 从 llmusage 抽取的轻量指标表
- userid, llmid, use_date, input/output/total tokens
- amount, responsed_seconds, finish_seconds
user_llm_policy: 用户模型策略(customer.admin 管理)
- 每个用户每个模型可单独设限
- daily/monthly_call_limit, spending_alert/ceiling, max_concurrency
- 缺省空=不限
- orgid+userid+llmid 唯一约束
菜单新增: 用户模型策略、模型使用指标
2026-07-02 13:16:18 +08:00
76673bf251
fix: catelog tab target should be app.llm_dialog_root (self container), not app.sage_main_content (main area)
2026-07-02 12:08:15 +08:00
f85913a235
fix: catelog tabs use urlwidget bind instead of invalid actiontype:link — Button does not handle actiontype in opts, only in binds
2026-07-02 11:23:17 +08:00
70b5502a18
fix: always use llm.model (vendor model name) instead of user-passed model param
2026-07-01 17:24:40 +08:00
99b292fd17
Revert "feat: 复制API功能-工具栏按钮+弹窗选源/目标+后台复制"
...
This reverts commit d57b8dbc73f3ee1797586e84fafe83793e112859.
2026-07-01 15:28:22 +08:00
d57b8dbc73
feat: 复制API功能-工具栏按钮+弹窗选源/目标+后台复制
2026-07-01 15:02:33 +08:00
27f3ee9c78
feat: llm.name唯一索引; v1端点全部改用name查找llm
2026-07-01 13:48:05 +08:00
0dd5a67a2a
bugfix
2026-07-01 13:18:37 +08:00
6890af7638
fix: 清理所有 dspy 文件的 import 语句
...
删除已在 ahserver/ServerEnv 预加载的模块:
json, datetime, getID, debug, curDateString, timestampstr,
get_sor_context, time, DictObject, partial, FileStorage, os
删除模块内部 import:
from llmage.utils import get_llmusage_by_id, read_ioinfo_content
同步将 get_llmusage_by_id, read_ioinfo_content 加入 load_llmage() 导出,
dspy 中通过 ServerEnv 全局调用。
2026-06-30 17:38:37 +08:00
59587a8c31
bugfix
2026-06-30 16:10:20 +08:00
dd304972b5
fix: 所有v1端点补充params_kw.llmcatelogid,确保llmclient正确路由
2026-06-30 16:00:26 +08:00
dd78e647da
bugfix
2026-06-30 15:56:47 +08:00
3e386ed86f
debug: backend_accounting 加 info 级别日志追踪记账循环
...
- info 替代 debug 确保启动日志必定输出
- 每轮循环后打印 got N records
- exception 消息加前缀便于搜索
用于排查 receive 1166 条记录但循环不处理的根因
2026-06-30 11:53:33 +08:00
f6d4462ed8
fix: 后台任务引用保持+异常处理
...
- 保存asyncio.create_task引用防止GC回收
- query_task_status添加try/except和CancelledError处理
- 确保连接在任务异常时正确释放
2026-06-27 12:54:10 +08:00
0fccc895ce
优化 llmusage_list.dspy:简化查询逻辑,提升性能
2026-06-26 18:57:41 +08:00
d58b86a704
优化 llmusage CRUD 查询性能
...
- 新建 api/llmusage_list.dspy 替代自动生成的 get_llmusage.dspy
- 排除 usages/ioinfo 大 TEXT 字段过滤,避免 LIKE 全表扫描
- 分离 count/data 查询,避免 sqlPaging 子查询包装
- 更新 json/llmusage.json get_data_url 指向新脚本
- 更新 scripts/load_path.py 注册新路径
2026-06-26 18:48:28 +08:00
3d1032c73b
优化文本输出排版:添加左右5px内边距
2026-06-26 18:42:26 +08:00
6c2ccda2c7
修复llmusage展示脚本500错误并优化CRUD性能
...
- 将llmusage_ioinfo_display.ui和llmusage_usages_display.ui从Jinja模板改为.dspy脚本
- 在utils.py中添加get_llmusage_by_id和read_ioinfo_content两个函数
- 重写get_llmusage.dspy,避免sqlPaging子查询包装,分离count和data查询
- 为llmusage表添加use_time索引提升排序性能
- 更新load_path.py和json/llmusage.json引用新的.dspy文件
2026-06-26 17:55:52 +08:00
a6efef56e9
perf: 记账失败列表优化
...
- 去掉跨库JOIN,改用内存批量ID映射
- 不查failed_reason大TEXT字段
- handled状态直接后台转文本,前端不依赖data映射
2026-06-26 17:08:58 +08:00
329260435c
bugfix
2026-06-26 17:02:39 +08:00
75126d5b1f
bugfix
2026-06-26 17:00:02 +08:00
ysh
c613e8c85d
fix: 记账失败列表显示模型/用户/机构名称而非ID
...
- 为 llmid/userid/userorgid 的 alters 添加 uitype: code
- Tabular 现在使用 textField 显示可读名称
- 同步更新 CRUD 源配置 json/llmusage_accounting_failed.json
2026-06-26 16:32:27 +08:00
c2c0f93001
llmage: hide usages/ioinfo columns, add toolbar buttons with popup windows
2026-06-26 11:30:05 +08:00
dcb0cd5cba
bugfix
2026-06-26 11:06:52 +08:00
13c123c967
refactor: 重命名llmusage字段标题为orgname/username/model
2026-06-25 18:21:32 +08:00
a32249375d
perf: 优化llmusage查询-移除大文本字段+添加userorgid索引
2026-06-25 18:04:02 +08:00
9b84e4c664
fix: 更新记账失败记录CRUD配置添加alters字段映射
2026-06-25 15:28:59 +08:00
89ad8ddbc9
fix: 记账失败记录直接显示名称字段
...
将llmid/userid/userorgid字段改为直接指向llmid_text/userid_text/userorgid_text,
绕过alters映射问题,确保表格正确显示模型名、用户名、机构名
2026-06-25 14:38:12 +08:00
7e62b34b72
fix: 记账失败记录字段添加uitype:code以显示名称
...
为llmid/userid/userorgid字段添加uitype:'code',使alter配置生效,
正确显示模型名称、用户名、机构名称而非ID
2026-06-25 14:30:28 +08:00
b174247328
fix: 记账失败记录显示模型/用户/机构名称而非ID
...
移除llmid/userid/userorgid字段的uitype:'str',让alters中的textField配置生效,
使表格显示llm.model、users.username、organization.orgname而非原始ID
2026-06-25 14:21:58 +08:00
e08445b56b
优化记账失败记录页面
...
- Title2添加border-bottom样式,使标题更明显
- 查询SQL从select *改为指定字段,减少数据传输量
2026-06-25 14:17:27 +08:00
Hermes Agent
9d2f8edc51
fix: load_product_category_product SQL移除不存在的sort_order字段
2026-06-23 18:01:56 +08:00
Hermes Agent
64f10e177b
refactor: load_product_category_product returns data only, no DB writes
...
- Returns standardized {categories, products} format
- product_management handles dedup/update logic
- Categories: source_id, name, description, product_type, sort_order
- Products: source_category_id, resource_ref_id, product_code, product_name, etc.
2026-06-23 16:06:09 +08:00
Hermes Agent
a060dd1405
refactor: use resource_ref_id (llm.id) instead of product_code
...
- product_interface: all functions take resource_ref_id as primary param
- _resolve_llm: lookup by llm.id directly instead of model name
- load_product_category_product: write llm.id as resource_ref_id in product table
- No more code→id mapping needed in resource module
2026-06-23 15:38:34 +08:00
Hermes Agent
8910019528
feat: implement product module standard interface (product_interface.py)
...
- get_product_display: pricing display text + extra info
- check_product_availability: ppid + pricing data validation
- check_product_consumable: full pre-check (availability + balance + pricing)
- execute_product_service: non-streaming inference (no HTTP request dependency)
- execute_product_service_stream: streaming inference as async generator
- calculate_product_cost: buffered_charging with customer discount
- sync_uapi_request_product: sync inference product wrapper
- async_uapi_request_product: async task submission product wrapper
- Register product_interface dict on ServerEnv in load_llmage()
2026-06-23 15:09:00 +08:00
Hermes Agent
510122a282
refactor: replace import_products_from_llmage with load_product_category_product
...
- New function: load_product_category_product(parent_category_id)
- Reads llmage catalogs + published models, writes sub-categories + products
into product_management DB directly
- Removed env registration (called via importlib, not ServerEnv)
2026-06-23 14:47:15 +08:00
Hermes Agent
df41478170
feat: register import_products_from_llmage for product_management import
...
- Add import_products_from_llmage() function that exports llmage catalogs
and published models as product categories and products
- Register on ServerEnv so product_management can call it when
resource_module='llmage'
2026-06-23 13:47:15 +08:00
Hermes Agent
1357eabce7
feat: check ppid has today pricing data before allowing inference
2026-06-22 17:55:29 +08:00
Hermes Agent
6a3cace0e8
fix: 记账成功后自动清理llmusage_accounting_failed记录
2026-06-22 17:02:23 +08:00
Hermes Agent
9b9e2a22d6
refactor: use Tabular built-in search_form for failed_accounting filter - Remove standalone InlineForm + custom toggle scripts - Use search_form config (framework handles create/hide/toggle/submit) - Toolbar button name 'filter' triggers built-in toggle_search_form()
2026-06-22 13:50:04 +08:00
Hermes Agent
e99e7774f2
fix: 记账失败记录三个问题修复
...
1) show_failed_reason.dspy: 增加llm表JOIN,弹窗显示llmID/model/ppid/用户/机构/金额等详情+失败原因
2) failed_accounting_list.dspy: page参数-Infinity崩溃,加try/except+最小值校验
3) failed_accounting.ui: alters去掉params/dataurl(dspy已JOIN返回_text字段,dataurl会覆盖)
2026-06-22 11:56:58 +08:00
Hermes Agent
211b9d7663
fix: failed_accounting查询按钮无响应 — target解析根因修复
...
根因: InlineForm binds的target='failed_table',getWidgetById从
InlineForm向下搜索(querySelector),但failed_table是兄弟控件
(同为VBox子控件),向下搜索永远找不到→buildEventHandler返回
null→script根本不执行→无报错无请求。
修复: target改为'app.failed_table'(根→向下搜索),与sidebar
菜单模式一致。多次修改未果的根因都在这里。
2026-06-22 11:32:33 +08:00
Hermes Agent
e2e3eab580
bugfix
2026-06-22 11:02:23 +08:00
Hermes Agent
30c429ad0c
feat: add i18n translations (zh/en/jp/ko) for all modules
2026-06-19 15:01:28 +08:00
Hermes Agent
71ccf230e9
fix: 按钮使用id属性替代name,确保binds能正确绑定事件
2026-06-18 16:35:44 +08:00
Hermes Agent
2efb1268b7
refactor: 模型上线检查UI改为VScrollPanel+HBox按钮布局
...
- UI: 检查结果区域改为VScrollPanel(filler),两个按钮用HBox并排
- check_pricing_program.dspy: 优先显示display_text字段,回退到name字段
2026-06-18 16:26:51 +08:00
Hermes Agent
5ab8171552
refactor: failed_accounting.ui布局优化 - 移除外层HBox包装,InlineForm直接作为VBox子控件 - 重试记账按钮移至Tabular toolbar
2026-06-18 14:21:10 +08:00
Hermes Agent
c0c9973e23
fix: failed_accounting_list.dspy JOIN条件修正 - users表主键是id不是userid - filter模糊搜索改用JOIN后的表别名(u.username, l.name)
2026-06-18 14:19:14 +08:00
Hermes Agent
4abd553302
fix: failed_accounting.ui显示优化 + dspy跨库JOIN返回_text字段 - failed_accounting.ui: userid→username, userorgid→orgname, llmid→llm.name - 移除cost/use_date列, InlineForm紧凑布局 - failed_accounting_list.dspy: 跨库JOIN users/organization/llm获取名称 - handled保持原始值, 由UI的code控件显示
2026-06-18 14:15:28 +08:00
Hermes Agent
6f977450c9
refactor: 记账失败记录优化显示 - userid/userorgid/llmid显示名称 - 移除cost/use_date字段 - InlineForm紧凑布局
2026-06-18 13:58:05 +08:00