fix: openrouter usage calculator (#1725)

This commit is contained in:
Daniel Salazar
2025-10-09 17:12:48 -07:00
committed by GitHub
parent 0c06040e6c
commit c0d96c7e97
3 changed files with 8 additions and 9 deletions

View File

@@ -22,7 +22,6 @@ const APIError = require("../../api/APIError");
const BaseService = require("../../services/BaseService");
const OpenAIUtil = require("./lib/OpenAIUtil");
const { Context } = require("../../util/context");
const { default: ml } = require("../../../../gui/src/i18n/translations/ml");
/**
* XAIService class - Provides integration with X.AI's API for chat completions
@@ -39,9 +38,6 @@ class OpenRouterService extends BaseService {
axios: require('axios'),
};
/** @type {import('../../services/abuse-prevention/MeteringService/MeteringService').MeteringAndBillingService} */
meteringAndBillingService;
/**
* Gets the system prompt used for AI interactions
* @returns {string} The base system prompt that identifies the AI as running on Puter
@@ -50,6 +46,9 @@ class OpenRouterService extends BaseService {
return model;
}
/** @type {import('../../services/abuse-prevention/MeteringService/MeteringService').MeteringAndBillingService} */
meteringAndBillingService;
/**
* Initializes the XAI service by setting up the OpenAI client and registering with the AI chat provider
* @private
@@ -142,7 +141,7 @@ class OpenRouterService extends BaseService {
const modelDetails = (await this.models_()).find(m => m.id === 'openrouter:' + model);
return OpenAIUtil.handle_completion_output({
usage_calculator: async ({ usage }) => {
usage_calculator: ({ usage }) => {
const trackedUsage = OpenAIUtil.extractMeteredUsage(usage);
this.meteringAndBillingService.utilRecordUsageObject(trackedUsage, actor, modelDetails.id);
const legacyCostCalculator = OpenAIUtil.create_usage_calculator({

View File

@@ -92,6 +92,7 @@ const create_chat_stream_handler = ({
deviations,
completion,
usage_calculator,
usage_promise,
}) => async ({ chatStream }) => {
deviations = Object.assign({
// affected by: Groq
@@ -153,6 +154,9 @@ const create_chat_stream_handler = ({
}
}
}
usage_promise.resolve(last_usage);
if ( mode === 'text' ) textblock.end();
if ( mode === 'tool' ) toolblock.end();
message.end();

View File

@@ -39,10 +39,6 @@ const METRICS_PREFIX = 'metering';
const POLICY_PREFIX = 'policy';
const PERIOD_ESCAPE = '_dot_'; // to replace dots in usage types for kvstore paths
type AllPrefixes<T extends string, P extends string = ''> =
T extends `${infer C}${infer R}`
? `${P}${C}` | AllPrefixes<R, `${P}${C}`>
: P;
/**
* Handles usage metering and supports stubbs for billing methods for current scoped actor
*/