mirror of
https://github.com/memohai/Memoh.git
synced 2026-04-25 07:00:48 +09:00
33b57ee345
Rename session info endpoint from /sessions/:id/info to /sessions/:id/status and update frontend tab label accordingly. Add /status slash command that displays current session metrics (message count, context usage, cache hit rate, used skills) as formatted text in any channel.
51 lines
1.6 KiB
SQL
51 lines
1.6 KiB
SQL
-- name: CountMessagesBySession :one
|
|
SELECT COUNT(*)::bigint AS message_count
|
|
FROM bot_history_messages
|
|
WHERE session_id = sqlc.arg(session_id);
|
|
|
|
-- name: GetLatestAssistantUsage :one
|
|
SELECT
|
|
COALESCE((m.usage->>'inputTokens')::bigint, 0)::bigint AS input_tokens
|
|
FROM bot_history_messages m
|
|
WHERE m.session_id = sqlc.arg(session_id)
|
|
AND m.role = 'assistant'
|
|
AND m.usage IS NOT NULL
|
|
ORDER BY m.created_at DESC
|
|
LIMIT 1;
|
|
|
|
-- name: GetSessionCacheStats :one
|
|
SELECT
|
|
COALESCE(SUM((m.usage->>'inputTokens')::bigint), 0)::bigint AS total_input_tokens,
|
|
COALESCE(SUM((m.usage->'inputTokenDetails'->>'cacheReadTokens')::bigint), 0)::bigint AS cache_read_tokens,
|
|
COALESCE(SUM((m.usage->'inputTokenDetails'->>'cacheWriteTokens')::bigint), 0)::bigint AS cache_write_tokens
|
|
FROM bot_history_messages m
|
|
WHERE m.session_id = sqlc.arg(session_id)
|
|
AND m.usage IS NOT NULL;
|
|
|
|
-- name: GetLatestSessionIDByBot :one
|
|
SELECT s.id
|
|
FROM bot_sessions s
|
|
WHERE s.bot_id = sqlc.arg(bot_id)
|
|
AND s.type = 'chat'
|
|
AND s.deleted_at IS NULL
|
|
ORDER BY s.updated_at DESC
|
|
LIMIT 1;
|
|
|
|
-- name: GetSessionUsedSkills :many
|
|
SELECT DISTINCT
|
|
(part->'input'->>'skillName')::text AS skill_name
|
|
FROM bot_history_messages m,
|
|
jsonb_array_elements(
|
|
CASE WHEN jsonb_typeof(m.content->'content') = 'array'
|
|
THEN m.content->'content'
|
|
ELSE '[]'::jsonb
|
|
END
|
|
) AS part
|
|
WHERE m.session_id = sqlc.arg(session_id)
|
|
AND m.role = 'assistant'
|
|
AND part->>'type' = 'tool-call'
|
|
AND part->>'toolName' = 'use_skill'
|
|
AND part->'input'->>'skillName' IS NOT NULL
|
|
AND part->'input'->>'skillName' != ''
|
|
ORDER BY skill_name;
|