diff --git a/Application.cfc b/Application.cfc
index a7d5e2f..e76a952 100644
--- a/Application.cfc
+++ b/Application.cfc
@@ -89,7 +89,7 @@
-
+
diff --git a/payg.cfm b/payg.cfm
index 9ebfc4e..375f69a 100644
--- a/payg.cfm
+++ b/payg.cfm
@@ -390,7 +390,7 @@ select
qS3OpsTrfAge:#getTickCount()-request.startTickCount#
-
+
WITH current_state AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY instance_uid ORDER BY version DESC) as rn
FROM instance_state
@@ -410,7 +410,7 @@ select
-
+
WITH card (model, cluster, code) as (VALUES
('A100', 'msk1-pub02-i31', 'iaas.ngc.i31.gpu80'),
('H100', 'msk1-pub07-a40', 'iaas.ngc.a40.gpuh100'), -- h200 нет в отчете
@@ -443,6 +443,7 @@ select
qGpu:#getTickCount()-request.startTickCount#
+
@@ -454,13 +455,66 @@ select
qGpuAge:#getTickCount()-request.startTickCount#
+
+
+ WITH cred as (
+ SELECT
+ column1::varchar(255) as model_name,
+ column2::decimal(10,6) as weight_in,
+ column3::decimal(10,6) as weight_out,
+ column4::decimal(10,6) as weight_cached,
+ column5::decimal(10,6) as weight_audio_sec
+ FROM
+ (VALUES
+ ('qwen3.8-27b-fp8', 0.329400, 2.196000, null, null),
+ ('gpt-oss-120b', 0.242000, 0.980000, null, null),
+ ('user-bge-m3', 0.006000, null, null, null),
+ ('bge-reranker-v2-m3', 0.002400, null, null, null),
+ ('whisper-large-v3-turbo', null, null, null, 0.006500)
+ )
+ )
+ SELECT m.organization_name, m.model_name
+ ,SUM(m.prompt_tokens) as tokens_in
+ ,SUM(m.completion_tokens) as tokens_out
+ ,SUM(m.cached_tokens) as tokens_cached
+ ,SUM(m.audio_seconds) as audio_seconds
+ ,SUM(m.prompt_tokens)*c.weight_in/1e6 as cred_in
+ ,SUM(m.completion_tokens)*c.weight_out/1e6 as cred_out
+ ,SUM(m.cached_tokens)*c.weight_cached/1e6 as cred_cached
+ ,SUM(m.audio_seconds)*c.weight_audio_sec/60e6 as cred_audio_minutes
+ FROM aillm.usage_metric m join cred c on (m.model_name=c.model_name)
+ WHERE 1=1
+ AND m.interval_start >=
+ AND m.interval_start <
+
+ AND m.organization_name ilike
+
+ GROUP BY m.organization_id, m.organization_name, m.model_name, c.weight_in, c.weight_out, c.weight_cached, c.weight_audio_sec
+ ORDER BY m.organization_id, m.organization_name, m.model_name;
+
+
+qLlm:#getTickCount()-request.startTickCount#
+
+
+
+
+
+
+ select max(ts) as dt_load from aillm.usage_metric
+
+
+qLlmAge:#getTickCount()-request.startTickCount#
+
+
+
-
+
+
select wz, code || '.vcpu' as code, core_h as raw_metric, core_h as metric, 'core-h' as unit, vdc as dimension1
@@ -521,6 +575,34 @@ select
where code like
+
+ union all
+ select organization_name as wz, 'tokens_in', tokens_in as raw_metric, cred_in as metric, 'cred' as unit, model_name as dimension1
+ from qLlm
+
+ where 'tokens_in' like
+
+
+ union all
+ select organization_name as wz, 'tokens_out', tokens_out as raw_metric, cred_out as metric, 'cred' as unit, model_name as dimension1
+ from qLlm
+
+ where 'tokens_out' like
+
+
+ union all
+ select organization_name as wz, 'tokens_cached', tokens_cached as raw_metric, cred_cached as metric, 'cred' as unit, model_name as dimension1
+ from qLlm
+
+ where 'tokens_cached' like
+
+
+ union all
+ select organization_name as wz, 'audio_minutes', audio_seconds as raw_metric, cred_audio_minutes as metric, 'cred' as unit, model_name as dimension1
+ from qLlm
+
+ where 'audio_minutes' like
+
order by wz, code
@@ -753,14 +835,14 @@ WZ по вхождению, с рег
Часов в периоде: #hours# Строк в отчете: #qCharge.recordCount#
Актуальность данных:
-VCD Computing: class="err">#dateFormat(qComputingAge.dt_load,'YYYY-MM-DD')# #timeFormat(qComputingAge.dt_load,'HH:mm:ss.lXX')#
-VCD Storage: class="err">#dateFormat(qStorageAge.dt_load,'YYYY-MM-DD')# #timeFormat(qStorageAge.dt_load,'HH:mm:ss.lXX')#
-S3 хранение: class="err">#dateFormat(qS3VolAge.dt_load,'YYYY-MM-DD')# #timeFormat(qS3VolAge.dt_load,'HH:mm:ss.lXX')#
-S3 операции и трафик: class="err">#dateFormat(qS3OpsTrfAge.dt_load,'YYYY-MM-DD')# #timeFormat(qS3OpsTrfAge.dt_load,'HH:mm:ss.lXX')#
+VCD Computing: class="err">#dateFormat(qComputingAge.dt_load,'YYYY-MM-DD')# #timeFormat(qComputingAge.dt_load,'HH:mm:ssX')#
+VCD Storage: class="err">#dateFormat(qStorageAge.dt_load,'YYYY-MM-DD')# #timeFormat(qStorageAge.dt_load,'HH:mm:ssX')#
+S3 хранение: class="err">#dateFormat(qS3VolAge.dt_load,'YYYY-MM-DD')# #timeFormat(qS3VolAge.dt_load,'HH:mm:ssX')#
+S3 операции и трафик: class="err">#dateFormat(qS3OpsTrfAge.dt_load,'YYYY-MM-DD')# #timeFormat(qS3OpsTrfAge.dt_load,'HH:mm:ssX')#
+GPU: class="err">#dateFormat(qGpuAge.dt_load,'YYYY-MM-DD')# #timeFormat(qGpuAge.dt_load,'HH:mm:ssX')#
+LLM: class="err">#dateFormat(qLlmAge.dt_load,'YYYY-MM-DD')# #timeFormat(qLlmAge.dt_load,'HH:mm:ssX')#
-
diff --git a/s3_ls.cfm b/s3_ls.cfm
index 59e88a0..66c571d 100644
--- a/s3_ls.cfm
+++ b/s3_ls.cfm
@@ -36,7 +36,7 @@
cross join (select max(timestamp_addition) as timestamp_addition from s3billing.bucket_stat) t
-
+
WITH current_state AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY instance_uid ORDER BY version DESC) as rn
FROM instance_state