model-settlement-port.js 934 Bytes
import { createBilling } from './billing.js'
import { createBillingRepo } from './repo/index.js'

/**
 * 把模型积分流水与能力自己的调用日志结算结果写入同一个数据库事务。
 * 能力包只提供 recordSettlement,不需要 billing 认识 LLM、图片或视频表。
 *
 * @param {object} deps
 * @param {import('knex').Knex} deps.db
 * @param {(trx:import('knex').Knex.Transaction,input:object,settlement:object)=>Promise<void>} deps.recordSettlement
 */
export function createModelSettlementPort({ db, recordSettlement }) {
  const repo = createBillingRepo(db)

  return {
    async settle(input) {
      return db.transaction(async (trx) => {
        const billing = createBilling({ billingRepo: repo.forTransaction(trx) })
        const settlement = await billing.settleModelBilling(input)
        await recordSettlement(trx, input.call_id, settlement)
        return settlement
      })
    },
  }
}