@jheavenknows/bluerouter 5.3.1 → 5.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (386) hide show
  1. package/app/.next-cli-build/BUILD_ID +1 -1
  2. package/app/.next-cli-build/app-path-routes-manifest.json +9 -9
  3. package/app/.next-cli-build/build-manifest.json +3 -3
  4. package/app/.next-cli-build/prerender-manifest.json +1 -1
  5. package/app/.next-cli-build/server/app/(dashboard)/dashboard/ai-power-index/page_client-reference-manifest.js +1 -1
  6. package/app/.next-cli-build/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
  7. package/app/.next-cli-build/server/app/(dashboard)/dashboard/api-keys/page_client-reference-manifest.js +1 -1
  8. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  9. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  10. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  11. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/model-profiles/page_client-reference-manifest.js +1 -1
  12. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  13. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  14. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cluster/page_client-reference-manifest.js +1 -1
  15. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  16. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  17. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  18. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  19. package/app/.next-cli-build/server/app/(dashboard)/dashboard/local-ai-report/page_client-reference-manifest.js +1 -1
  20. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  21. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  22. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  23. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  24. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  25. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  26. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  27. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalcloudprovider/page_client-reference-manifest.js +1 -1
  28. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalcloudprovidermonitor/page_client-reference-manifest.js +1 -1
  29. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalquota/page_client-reference-manifest.js +1 -1
  30. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  31. package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-logs/page_client-reference-manifest.js +1 -1
  32. package/app/.next-cli-build/server/app/(dashboard)/dashboard/provider-health/page_client-reference-manifest.js +1 -1
  33. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  34. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  35. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  36. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  37. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  38. package/app/.next-cli-build/server/app/(dashboard)/dashboard/resource-monitor/page.js +254 -31
  39. package/app/.next-cli-build/server/app/(dashboard)/dashboard/resource-monitor/page_client-reference-manifest.js +1 -1
  40. package/app/.next-cli-build/server/app/(dashboard)/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  41. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  42. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  43. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  44. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js +1 -1
  45. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  46. package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  47. package/app/.next-cli-build/server/app/_global-error.html +1 -1
  48. package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  49. package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  50. package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  51. package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  52. package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  53. package/app/.next-cli-build/server/app/_not-found.html +1 -1
  54. package/app/.next-cli-build/server/app/_not-found.rsc +5 -5
  55. package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +5 -5
  56. package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +5 -5
  57. package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  58. package/app/.next-cli-build/server/app/api/auth/ldap/test/route.js.nft.json +1 -1
  59. package/app/.next-cli-build/server/app/api/auth/ldap/users/route.js.nft.json +1 -1
  60. package/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
  61. package/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
  62. package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
  63. package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
  64. package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
  65. package/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
  66. package/app/.next-cli-build/server/app/api/auth/view-mode/route.js.nft.json +1 -1
  67. package/app/.next-cli-build/server/app/api/branding/[asset]/route.js.nft.json +1 -1
  68. package/app/.next-cli-build/server/app/api/branding/route.js.nft.json +1 -1
  69. package/app/.next-cli-build/server/app/api/branding/upload/route.js.nft.json +1 -1
  70. package/app/.next-cli-build/server/app/api/cli-model-profiles/cloud-models/route.js.nft.json +1 -1
  71. package/app/.next-cli-build/server/app/api/cli-model-profiles/route.js.nft.json +1 -1
  72. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  73. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  74. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/autostart/route.js.nft.json +1 -1
  75. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/prompt-log-db/route.js.nft.json +1 -1
  76. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/root-ca/route.js.nft.json +1 -1
  77. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  78. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
  79. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  80. package/app/.next-cli-build/server/app/api/cluster/config/route.js.nft.json +1 -1
  81. package/app/.next-cli-build/server/app/api/cluster/heartbeat/route.js.nft.json +1 -1
  82. package/app/.next-cli-build/server/app/api/cluster/peers/[id]/command/route.js.nft.json +1 -1
  83. package/app/.next-cli-build/server/app/api/cluster/peers/[id]/route.js.nft.json +1 -1
  84. package/app/.next-cli-build/server/app/api/cluster/peers/route.js.nft.json +1 -1
  85. package/app/.next-cli-build/server/app/api/cluster/snapshot/route.js.nft.json +1 -1
  86. package/app/.next-cli-build/server/app/api/cluster/sync/route.js.nft.json +1 -1
  87. package/app/.next-cli-build/server/app/api/cluster/test/route.js.nft.json +1 -1
  88. package/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
  89. package/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
  90. package/app/.next-cli-build/server/app/api/dashboard/ai-power-index/route.js.nft.json +1 -1
  91. package/app/.next-cli-build/server/app/api/dashboard/analytics/ai-models/route.js.nft.json +1 -1
  92. package/app/.next-cli-build/server/app/api/dashboard/analytics/analyze/route.js.nft.json +1 -1
  93. package/app/.next-cli-build/server/app/api/dashboard/analytics/route.js.nft.json +1 -1
  94. package/app/.next-cli-build/server/app/api/dashboard/combos/route.js.nft.json +1 -1
  95. package/app/.next-cli-build/server/app/api/dashboard/endpoint/route.js.nft.json +1 -1
  96. package/app/.next-cli-build/server/app/api/dashboard/local-ai-report/route.js.nft.json +1 -1
  97. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/[id]/route.js.nft.json +1 -1
  98. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/options/route.js.nft.json +1 -1
  99. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/route.js.nft.json +1 -1
  100. package/app/.next-cli-build/server/app/api/dashboard/token-saver/route.js.nft.json +1 -1
  101. package/app/.next-cli-build/server/app/api/keys/[id]/caveman-test/route.js.nft.json +1 -1
  102. package/app/.next-cli-build/server/app/api/keys/[id]/rotate/route.js.nft.json +1 -1
  103. package/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
  104. package/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
  105. package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
  106. package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
  107. package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
  108. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  109. package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
  110. package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
  111. package/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
  112. package/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
  113. package/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
  114. package/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
  115. package/app/.next-cli-build/server/app/api/models/route.js +1 -1
  116. package/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
  117. package/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
  118. package/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
  119. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  120. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  121. package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  122. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  123. package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
  124. package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
  125. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  126. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  127. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/api-key-models/route.js.nft.json +1 -1
  128. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/import-models/route.js.nft.json +1 -1
  129. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/models/[...routeModel]/route.js.nft.json +1 -1
  130. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/route.js.nft.json +1 -1
  131. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/usage/route.js.nft.json +1 -1
  132. package/app/.next-cli-build/server/app/api/personal-cloud-providers/client/route.js.nft.json +1 -1
  133. package/app/.next-cli-build/server/app/api/personal-cloud-providers/monitor/route.js.nft.json +1 -1
  134. package/app/.next-cli-build/server/app/api/personal-cloud-providers/permissions/route.js.nft.json +1 -1
  135. package/app/.next-cli-build/server/app/api/personal-cloud-providers/route.js.nft.json +1 -1
  136. package/app/.next-cli-build/server/app/api/personal-cloud-providers/routing/route.js.nft.json +1 -1
  137. package/app/.next-cli-build/server/app/api/personal-cloud-providers/visibility/route.js.nft.json +1 -1
  138. package/app/.next-cli-build/server/app/api/pricing/catalog/route.js.nft.json +1 -1
  139. package/app/.next-cli-build/server/app/api/pricing/recalculate/route.js.nft.json +1 -1
  140. package/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
  141. package/app/.next-cli-build/server/app/api/provider-health/route.js.nft.json +1 -1
  142. package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  143. package/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
  144. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  145. package/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
  146. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  147. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
  148. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  149. package/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
  150. package/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  151. package/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
  152. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  153. package/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
  154. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
  155. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  156. package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
  157. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
  158. package/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
  159. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
  160. package/app/.next-cli-build/server/app/api/resource-monitor/[id]/route.js.nft.json +1 -1
  161. package/app/.next-cli-build/server/app/api/resource-monitor/ai-models/route.js.nft.json +1 -1
  162. package/app/.next-cli-build/server/app/api/resource-monitor/analyze/route.js.nft.json +1 -1
  163. package/app/.next-cli-build/server/app/api/resource-monitor/history/route.js.nft.json +1 -1
  164. package/app/.next-cli-build/server/app/api/resource-monitor/route.js.nft.json +1 -1
  165. package/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
  166. package/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
  167. package/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
  168. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  169. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
  170. package/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
  171. package/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
  172. package/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  173. package/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  174. package/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
  175. package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  176. package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  177. package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  178. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  179. package/app/.next-cli-build/server/app/api/tunnel/tailscale-login/route.js.nft.json +1 -1
  180. package/app/.next-cli-build/server/app/api/tunnel/tailscale-start-daemon/route.js.nft.json +1 -1
  181. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  182. package/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
  183. package/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
  184. package/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
  185. package/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
  186. package/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  187. package/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
  188. package/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
  189. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  190. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  191. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  192. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  193. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  194. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  195. package/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
  196. package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
  197. package/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
  198. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  199. package/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
  200. package/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
  201. package/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
  202. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  203. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  204. package/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
  205. package/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
  206. package/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
  207. package/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
  208. package/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
  209. package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  210. package/app/.next-cli-build/server/app/callback.html +1 -1
  211. package/app/.next-cli-build/server/app/callback.rsc +5 -5
  212. package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +5 -5
  213. package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
  214. package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +5 -5
  215. package/app/.next-cli-build/server/app/dashboard/ai-power-index.html +1 -1
  216. package/app/.next-cli-build/server/app/dashboard/ai-power-index.rsc +6 -6
  217. package/app/.next-cli-build/server/app/dashboard/ai-power-index.segments/!KGRhc2hib2FyZCk/dashboard/ai-power-index/__PAGE__.segment.rsc +6 -6
  218. package/app/.next-cli-build/server/app/dashboard/ai-power-index.segments/_full.segment.rsc +6 -6
  219. package/app/.next-cli-build/server/app/dashboard/ai-power-index.segments/_tree.segment.rsc +1 -1
  220. package/app/.next-cli-build/server/app/dashboard/analytics.html +1 -1
  221. package/app/.next-cli-build/server/app/dashboard/analytics.rsc +6 -6
  222. package/app/.next-cli-build/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk/dashboard/analytics/__PAGE__.segment.rsc +6 -6
  223. package/app/.next-cli-build/server/app/dashboard/analytics.segments/_full.segment.rsc +6 -6
  224. package/app/.next-cli-build/server/app/dashboard/analytics.segments/_tree.segment.rsc +1 -1
  225. package/app/.next-cli-build/server/app/dashboard/api-keys.html +1 -1
  226. package/app/.next-cli-build/server/app/dashboard/api-keys.rsc +9 -9
  227. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk/dashboard/api-keys/__PAGE__.segment.rsc +9 -9
  228. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_full.segment.rsc +9 -9
  229. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_tree.segment.rsc +1 -1
  230. package/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  231. package/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +7 -7
  232. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +7 -7
  233. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +7 -7
  234. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
  235. package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.html +1 -1
  236. package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.rsc +7 -7
  237. package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/model-profiles/__PAGE__.segment.rsc +7 -7
  238. package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.segments/_full.segment.rsc +7 -7
  239. package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.segments/_tree.segment.rsc +1 -1
  240. package/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  241. package/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +7 -7
  242. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +7 -7
  243. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +7 -7
  244. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
  245. package/app/.next-cli-build/server/app/dashboard/cluster.html +1 -1
  246. package/app/.next-cli-build/server/app/dashboard/cluster.rsc +6 -6
  247. package/app/.next-cli-build/server/app/dashboard/cluster.segments/!KGRhc2hib2FyZCk/dashboard/cluster/__PAGE__.segment.rsc +6 -6
  248. package/app/.next-cli-build/server/app/dashboard/cluster.segments/_full.segment.rsc +6 -6
  249. package/app/.next-cli-build/server/app/dashboard/cluster.segments/_tree.segment.rsc +1 -1
  250. package/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  251. package/app/.next-cli-build/server/app/dashboard/combos.rsc +7 -7
  252. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +7 -7
  253. package/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +7 -7
  254. package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  255. package/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  256. package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +7 -7
  257. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +7 -7
  258. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +7 -7
  259. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  260. package/app/.next-cli-build/server/app/dashboard/local-ai-report.html +1 -1
  261. package/app/.next-cli-build/server/app/dashboard/local-ai-report.rsc +6 -6
  262. package/app/.next-cli-build/server/app/dashboard/local-ai-report.segments/!KGRhc2hib2FyZCk/dashboard/local-ai-report/__PAGE__.segment.rsc +6 -6
  263. package/app/.next-cli-build/server/app/dashboard/local-ai-report.segments/_full.segment.rsc +6 -6
  264. package/app/.next-cli-build/server/app/dashboard/local-ai-report.segments/_tree.segment.rsc +1 -1
  265. package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  266. package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +7 -7
  267. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +7 -7
  268. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +7 -7
  269. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
  270. package/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  271. package/app/.next-cli-build/server/app/dashboard/mitm.rsc +7 -7
  272. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +7 -7
  273. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +7 -7
  274. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
  275. package/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  276. package/app/.next-cli-build/server/app/dashboard/profile.rsc +7 -7
  277. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +7 -7
  278. package/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +7 -7
  279. package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  280. package/app/.next-cli-build/server/app/dashboard/prompt-logs.html +1 -1
  281. package/app/.next-cli-build/server/app/dashboard/prompt-logs.rsc +6 -6
  282. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard/prompt-logs/__PAGE__.segment.rsc +6 -6
  283. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_full.segment.rsc +6 -6
  284. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_tree.segment.rsc +1 -1
  285. package/app/.next-cli-build/server/app/dashboard/provider-health.html +1 -1
  286. package/app/.next-cli-build/server/app/dashboard/provider-health.rsc +6 -6
  287. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard/provider-health/__PAGE__.segment.rsc +6 -6
  288. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_full.segment.rsc +6 -6
  289. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_tree.segment.rsc +1 -1
  290. package/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  291. package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +7 -7
  292. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +7 -7
  293. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +7 -7
  294. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  295. package/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  296. package/app/.next-cli-build/server/app/dashboard/providers.rsc +7 -7
  297. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +7 -7
  298. package/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +7 -7
  299. package/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
  300. package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  301. package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +7 -7
  302. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +7 -7
  303. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +7 -7
  304. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
  305. package/app/.next-cli-build/server/app/dashboard/quota.html +1 -1
  306. package/app/.next-cli-build/server/app/dashboard/quota.rsc +8 -8
  307. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +8 -8
  308. package/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +8 -8
  309. package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
  310. package/app/.next-cli-build/server/app/dashboard/resource-monitor.html +1 -1
  311. package/app/.next-cli-build/server/app/dashboard/resource-monitor.rsc +7 -7
  312. package/app/.next-cli-build/server/app/dashboard/resource-monitor.segments/!KGRhc2hib2FyZCk/dashboard/resource-monitor/__PAGE__.segment.rsc +7 -7
  313. package/app/.next-cli-build/server/app/dashboard/resource-monitor.segments/_full.segment.rsc +7 -7
  314. package/app/.next-cli-build/server/app/dashboard/resource-monitor.segments/_tree.segment.rsc +1 -1
  315. package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  316. package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +6 -6
  317. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/!KGRhc2hib2FyZCk/dashboard/settings/pricing/__PAGE__.segment.rsc +6 -6
  318. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +6 -6
  319. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  320. package/app/.next-cli-build/server/app/dashboard/skills.html +1 -1
  321. package/app/.next-cli-build/server/app/dashboard/skills.rsc +7 -7
  322. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +7 -7
  323. package/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +7 -7
  324. package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +1 -1
  325. package/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
  326. package/app/.next-cli-build/server/app/dashboard/token-saver.rsc +6 -6
  327. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +6 -6
  328. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +6 -6
  329. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +1 -1
  330. package/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  331. package/app/.next-cli-build/server/app/dashboard/translator.rsc +7 -7
  332. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +7 -7
  333. package/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +7 -7
  334. package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
  335. package/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  336. package/app/.next-cli-build/server/app/dashboard/usage.rsc +8 -7
  337. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +8 -7
  338. package/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +8 -7
  339. package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -1
  340. package/app/.next-cli-build/server/app/dashboard.html +1 -1
  341. package/app/.next-cli-build/server/app/dashboard.rsc +7 -7
  342. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +7 -7
  343. package/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +7 -7
  344. package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  345. package/app/.next-cli-build/server/app/index.html +1 -1
  346. package/app/.next-cli-build/server/app/index.rsc +5 -5
  347. package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +5 -5
  348. package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +5 -5
  349. package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
  350. package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  351. package/app/.next-cli-build/server/app/landing.html +1 -1
  352. package/app/.next-cli-build/server/app/landing.rsc +5 -5
  353. package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +5 -5
  354. package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
  355. package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +5 -5
  356. package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  357. package/app/.next-cli-build/server/app/login.html +1 -1
  358. package/app/.next-cli-build/server/app/login.rsc +6 -6
  359. package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +6 -6
  360. package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
  361. package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +6 -6
  362. package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  363. package/app/.next-cli-build/server/app-paths-manifest.json +9 -9
  364. package/app/.next-cli-build/server/chunks/3110.js +1 -1
  365. package/app/.next-cli-build/server/chunks/4746.js +1 -1
  366. package/app/.next-cli-build/server/chunks/6328.js +1 -1
  367. package/app/.next-cli-build/server/chunks/6759.js +1 -1
  368. package/app/.next-cli-build/server/chunks/6811.js +1 -1
  369. package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  370. package/app/.next-cli-build/server/pages/404.html +1 -1
  371. package/app/.next-cli-build/server/pages/500.html +1 -1
  372. package/app/.next-cli-build/static/chunks/{5263-89b1b568677a5ad1.js → 5263-8c1958a0d9344686.js} +1 -1
  373. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/resource-monitor/template-eecb5d00bb376ac8.js +478 -0
  374. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/usage/page-4dbf414f535f4d56.js +1 -0
  375. package/app/.next-cli-build/static/chunks/{webpack-c4a3128f7e9eda51.js → webpack-83c647b2ac8f2bf9.js} +1 -1
  376. package/app/.next-cli-build/static/css/ecece8453e592e06.css +1 -0
  377. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/{upgrade-5.2.86-to-5.2.87-5.2.87-20260815-180816 → upgrade-5.3.0-to-5.3.1-5.3.1-20260815-182751}/data.sqlite +0 -0
  378. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/{upgrade-5.2.87-to-5.2.88-5.2.88-20260815-182203 → upgrade-5.3.1-to-5.3.2-5.3.2-20260815-183321}/data.sqlite +0 -0
  379. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite +0 -0
  380. package/app/package.json +1 -1
  381. package/package.json +1 -1
  382. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/resource-monitor/template-d8c264229683c5ea.js +0 -185
  383. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/usage/page-343d8f15a1ea9d95.js +0 -1
  384. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/upgrade-5.2.88-to-5.3.0-5.3.0-20260815-182310/data.sqlite +0 -0
  385. /package/app/.next-cli-build/static/{KFhYCfDioPjRLz4o9iFXL → G5HT5afoeNcjPfyGOalc3}/_buildManifest.js +0 -0
  386. /package/app/.next-cli-build/static/{KFhYCfDioPjRLz4o9iFXL → G5HT5afoeNcjPfyGOalc3}/_ssgManifest.js +0 -0
@@ -1,185 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[770],{6202:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>c});var a=r(95155),n=r(12115);let o="button[data-resource-server-id]",i="resource-vllm-metric-guide";function s(e){let t=Number(e)||0;return .001>Math.abs(t-Math.round(t))?String(Math.round(t)):t.toFixed(1)}function l(){document.getElementById(i)?.remove()}function c({children:e}){let t=(0,n.useRef)([]),r=(0,n.useRef)(new Map);return(0,n.useEffect)(()=>{let e=!1,a=null,n=null,c=()=>{let e=t.current;if(!e.length)return void l();let a=new Map(e.map(e=>[String(e.id),e])),n=Date.now();for(let e of document.querySelectorAll(o)){let t=String(e.dataset.resourceServerId||""),o=a.get(t),i=r.current.get(t),l=function(e,t=0){let r=e?.lastStatus;if(!r)return null;let a=r.vllm;if(!a)return{state:"upgrade",summary:"vLLM metrics \xb7 cần cập nhật agent",detail:"Agent hiện tại chưa c\xf3 vLLM monitor. Mở Sửa server v\xe0 c\xe0i lại agent một lần.",showReasons:!1};let n=Array.isArray(a.instances)?a.instances:[],o=a.summary||{},i=Number(o.instanceCount??n.length)||0,l=Number(o.metricsInstanceCount??i)||0,c=Number(o.running)||0,d=Number(o.waiting)||0,u=Number(o.waitingCapacity)||0,m=Number(o.waitingDeferred)||0,g=Object.prototype.hasOwnProperty.call(o||{},"waitingCapacity")||Object.prototype.hasOwnProperty.call(o||{},"waitingDeferred")||n.some(e=>Object.prototype.hasOwnProperty.call(e||{},"waitingCapacity")||Object.prototype.hasOwnProperty.call(e||{},"waitingDeferred")),p=Number(o.preemptions)||0,h=Number.isFinite(Number(o.kvCacheUsagePercent))?Number(o.kvCacheUsagePercent):null;if(!i)return{state:"none",summary:"vLLM \xb7 0 instance đang chạy",detail:"docker"===a.discovery?"Agent đ\xe3 kiểm tra Docker nhưng chưa ph\xe1t hiện container vLLM đang chạy.":"Agent chưa ph\xe1t hiện endpoint /metrics của vLLM tr\xean host.",showReasons:!1};let v=n.map(e=>{let t=e.containerName?`${e.containerName}${e.containerId?` (${e.containerId})`:""}`:`:${e.port}`;if(!1===e.metricsAvailable)return`${t} \xb7 đang chạy nhưng chưa đọc được /metrics`;let r=Number.isFinite(Number(e.kvCacheUsagePercent))?`${Number(e.kvCacheUsagePercent).toFixed(1)}%`:"—",a=Array.isArray(e.models)&&e.models.length?` \xb7 ${e.models.join(", ")}`:"",n=e.endpoint?` \xb7 ${e.endpoint}`:"",o=Object.prototype.hasOwnProperty.call(e,"waitingCapacity")||Object.prototype.hasOwnProperty.call(e,"waitingDeferred")?` \xb7 Capacity ${s(e.waitingCapacity)} \xb7 Deferred ${s(e.waitingDeferred)}`:"";return`${t}${n} \xb7 Running ${s(e.running)} \xb7 Waiting ${s(e.waiting)}${o} \xb7 KV ${r} \xb7 Preempt ${s(e.preemptions)}${a}`}),x=l<i,b=u>0&&t>=8e3,f=u>0&&!b,y=x?"partial":b?"pressure":f?"transient":null!==h&&h>=90?"hot":"active",w=x?`${i} vLLM (${l} metrics)`:`${i} vLLM`,$="docker"===a.discovery?"Docker-aware discovery":"Socket fallback discovery",M=g&&d>0,k=M?`
2
- Capacity ${s(u)} \xb7 Deferred ${s(m)}`:"",C=b?`Capacity pressure li\xean tục ${Math.max(1,Math.round(t/1e3))}s`:f?"Capacity waiting mới xuất hiện; chưa coi l\xe0 overload":d>0?"Waiting hiện tại chưa tạo capacity pressure":"Kh\xf4ng c\xf3 queue pressure";return{state:y,summary:`${w} \xb7 Running ${s(c)} \xb7 Waiting ${s(d)}${k}
3
- KV ${null===h?"—":`${h.toFixed(1)}%`} \xb7 Preempt ${s(p)}`,detail:[`${$} \xb7 ${i} instance`,C,...v].join("\n"),showReasons:M}}(o,i?Math.max(0,n-i):0);if(!l){delete e.dataset.vllmSummary,delete e.dataset.vllmState,delete e.dataset.vllmReasons;continue}e.dataset.vllmSummary=l.summary,e.dataset.vllmState=l.state,e.dataset.vllmReasons=l.showReasons?"1":"0",e.dataset.vllmBaseTitle||(e.dataset.vllmBaseTitle=e.title||"Linux host"),e.title=`${e.dataset.vllmBaseTitle}
4
-
5
- ${l.detail}`}!function(){let e=document.querySelector(o),t=e?.closest(".scroll-thin-x");if(!t)return l();let r=document.getElementById(i);if(r){r.previousElementSibling!==t&&t.insertAdjacentElement("afterend",r);return}let a=document.createElement("section");a.id=i,a.className="resource-vllm-metric-guide",a.setAttribute("aria-label","Giải th\xedch chỉ số vLLM"),a.innerHTML=`
6
- <div class="resource-vllm-guide-heading">
7
- <span class="material-symbols-outlined resource-vllm-guide-icon" aria-hidden="true">info</span>
8
- <div>
9
- <div class="resource-vllm-guide-title">C\xe1ch đọc chỉ số vLLM</div>
10
- <div class="resource-vllm-guide-subtitle">C\xe1c số tr\xean card l\xe0 snapshot realtime của to\xe0n bộ vLLM instance tr\xean Linux host.</div>
11
- </div>
12
- </div>
13
- <div class="resource-vllm-guide-grid">
14
- <div class="resource-vllm-guide-item">
15
- <strong>Running</strong>
16
- <span>Số request đang được scheduler xử l\xfd.</span>
17
- </div>
18
- <div class="resource-vllm-guide-item">
19
- <strong>Waiting</strong>
20
- <span>Số request đang chờ. Một nhịp Waiting ngắn chưa c\xf3 nghĩa l\xe0 qu\xe1 tải.</span>
21
- </div>
22
- <div class="resource-vllm-guide-item">
23
- <strong>Capacity</strong>
24
- <span>Request chờ v\xec scheduler/KV admission chưa đủ capacity. K\xe9o d\xe0i mới l\xe0 pressure.</span>
25
- </div>
26
- <div class="resource-vllm-guide-item">
27
- <strong>Deferred</strong>
28
- <span>Request bị ho\xe3n bởi constraint nội bộ kh\xe1c; kh\xf4ng mặc định đồng nghĩa thiếu GPU.</span>
29
- </div>
30
- <div class="resource-vllm-guide-item">
31
- <strong>KV Cache</strong>
32
- <span>% KV cache pool đang d\xf9ng, kh\xf4ng phải % tổng VRAM của GPU.</span>
33
- </div>
34
- <div class="resource-vllm-guide-item">
35
- <strong>Preempt</strong>
36
- <span>Counter t\xedch lũy số lần request phải nhường t\xe0i nguy\xean; tốc độ tăng quan trọng hơn tổng số.</span>
37
- </div>
38
- </div>
39
- <div class="resource-vllm-guide-note">
40
- <span class="material-symbols-outlined" aria-hidden="true">monitoring</span>
41
- <span><strong>Đọc cảnh b\xe1o:</strong> Waiting tho\xe1ng qua vẫn b\xecnh thường. Dashboard chỉ coi <strong>Capacity &gt; 0 li\xean tục từ 8 gi\xe2y</strong> l\xe0 pressure; KV cao hoặc Preempt tăng li\xean tục cũng cần theo d\xf5i.</span>
42
- </div>
43
- `,t.insertAdjacentElement("afterend",a)}()},d=async()=>{try{let a=await fetch("/api/resource-monitor?snapshot=1",{cache:"no-store"}),n=await a.json().catch(()=>({}));if(!a.ok||e)return;let o=Array.isArray(n.servers)?n.servers:[];t.current=o;let i=Date.now(),s=new Set;for(let e of o){let t=String(e?.id||"");t&&(s.add(t),(Number(e?.lastStatus?.vllm?.summary?.waitingCapacity)||0)>0?r.current.has(t)||r.current.set(t,i):r.current.delete(t))}for(let e of r.current.keys())s.has(e)||r.current.delete(e);c()}catch{}},u=new MutationObserver(()=>{n&&window.clearTimeout(n),n=window.setTimeout(c,80)});u.observe(document.body,{childList:!0,subtree:!0}),a=window.setInterval(d,4e3);let m=window.setTimeout(d,500);return()=>{e=!0,u.disconnect(),window.clearInterval(a),window.clearTimeout(m),n&&window.clearTimeout(n),l()}},[]),(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("style",{children:`
44
- .resource-monitor-sortable-host[data-vllm-summary] {
45
- min-width: 292px;
46
- padding-bottom: 62px !important;
47
- }
48
- .resource-monitor-sortable-host[data-vllm-reasons="1"] {
49
- padding-bottom: 78px !important;
50
- }
51
- .resource-monitor-sortable-host[data-vllm-summary]::before {
52
- content: attr(data-vllm-summary);
53
- position: absolute;
54
- left: 16px;
55
- right: 40px;
56
- bottom: 10px;
57
- border-top: 1px solid var(--color-border-subtle);
58
- padding-top: 8px;
59
- color: var(--color-text-muted);
60
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
61
- font-size: 10.5px;
62
- font-weight: 600;
63
- line-height: 1.55;
64
- white-space: pre-line;
65
- pointer-events: none;
66
- text-align: left;
67
- }
68
- .resource-monitor-sortable-host[data-vllm-state="active"]::before {
69
- color: #059669;
70
- }
71
- .resource-monitor-sortable-host[data-vllm-state="transient"]::before {
72
- color: #ca8a04;
73
- }
74
- .resource-monitor-sortable-host[data-vllm-state="pressure"]::before {
75
- color: #dc2626;
76
- }
77
- .resource-monitor-sortable-host[data-vllm-state="hot"]::before,
78
- .resource-monitor-sortable-host[data-vllm-state="partial"]::before,
79
- .resource-monitor-sortable-host[data-vllm-state="upgrade"]::before {
80
- color: #d97706;
81
- }
82
- .resource-monitor-sortable-host[data-vllm-state="none"]::before {
83
- color: var(--color-text-subtle);
84
- }
85
- .resource-vllm-metric-guide {
86
- margin-top: 10px;
87
- border: 1px solid var(--color-border);
88
- border-radius: 18px;
89
- background: var(--color-surface);
90
- padding: 15px 16px;
91
- box-shadow: var(--shadow-soft);
92
- }
93
- .resource-vllm-guide-heading {
94
- display: flex;
95
- align-items: flex-start;
96
- gap: 10px;
97
- }
98
- .resource-vllm-guide-icon {
99
- display: inline-flex;
100
- height: 30px;
101
- width: 30px;
102
- flex: 0 0 auto;
103
- align-items: center;
104
- justify-content: center;
105
- border-radius: 10px;
106
- background: color-mix(in srgb, var(--color-brand-500) 12%, transparent);
107
- color: var(--color-brand-500);
108
- font-size: 19px;
109
- }
110
- .resource-vllm-guide-title {
111
- color: var(--color-text-main);
112
- font-size: 14px;
113
- font-weight: 700;
114
- line-height: 1.3;
115
- }
116
- .resource-vllm-guide-subtitle {
117
- margin-top: 3px;
118
- color: var(--color-text-muted);
119
- font-size: 12px;
120
- line-height: 1.45;
121
- }
122
- .resource-vllm-guide-grid {
123
- display: grid;
124
- grid-template-columns: repeat(6, minmax(0, 1fr));
125
- gap: 8px;
126
- margin-top: 12px;
127
- }
128
- .resource-vllm-guide-item {
129
- min-width: 0;
130
- border: 1px solid var(--color-border-subtle);
131
- border-radius: 12px;
132
- background: var(--color-surface-2);
133
- padding: 10px 11px;
134
- }
135
- .resource-vllm-guide-item strong {
136
- display: block;
137
- margin-bottom: 4px;
138
- color: var(--color-text-main);
139
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
140
- font-size: 11px;
141
- font-weight: 700;
142
- }
143
- .resource-vllm-guide-item span {
144
- display: block;
145
- color: var(--color-text-muted);
146
- font-size: 10.5px;
147
- line-height: 1.45;
148
- }
149
- .resource-vllm-guide-note {
150
- display: flex;
151
- align-items: flex-start;
152
- gap: 8px;
153
- margin-top: 10px;
154
- border-radius: 11px;
155
- background: color-mix(in srgb, #f59e0b 9%, transparent);
156
- padding: 8px 10px;
157
- color: var(--color-text-muted);
158
- font-size: 11px;
159
- line-height: 1.5;
160
- }
161
- .resource-vllm-guide-note .material-symbols-outlined {
162
- flex: 0 0 auto;
163
- color: #d97706;
164
- font-size: 17px;
165
- }
166
- .resource-vllm-guide-note strong {
167
- color: var(--color-text-main);
168
- font-weight: 700;
169
- }
170
- @media (max-width: 1400px) {
171
- .resource-vllm-guide-grid {
172
- grid-template-columns: repeat(3, minmax(0, 1fr));
173
- }
174
- }
175
- @media (max-width: 760px) {
176
- .resource-vllm-guide-grid {
177
- grid-template-columns: repeat(2, minmax(0, 1fr));
178
- }
179
- }
180
- @media (max-width: 520px) {
181
- .resource-vllm-guide-grid {
182
- grid-template-columns: 1fr;
183
- }
184
- }
185
- `}),e]})}},90490:(e,t,r)=>{Promise.resolve().then(r.bind(r,6202))}},e=>{e.O(0,[8441,3794,7358],()=>e(e.s=90490)),_N_E=e.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2825],{21007:(e,t,s)=>{Promise.resolve().then(s.bind(s,81772))},81772:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>w});var a=s(95155),l=s(12115),n=s(73321),r=s(35497),i=s(94027),o=s(84588),d=s(92542),c=s(31474);function x({isOpen:e,onClose:t,title:s,children:n,width:r="md",className:i}){let o={sm:"w-[400px]",md:"w-[500px]",lg:"w-[600px]",xl:"w-[800px]",full:"w-full"};return((0,l.useEffect)(()=>(e?document.body.style.overflow="hidden":document.body.style.overflow="",()=>{document.body.style.overflow=""}),[e]),(0,l.useEffect)(()=>{let s=s=>{"Escape"===s.key&&e&&t()};return document.addEventListener("keydown",s),()=>document.removeEventListener("keydown",s)},[e,t]),e)?(0,a.jsxs)("div",{className:"fixed inset-0 z-50",children:[(0,a.jsx)("div",{className:"absolute inset-0 bg-black/50 backdrop-blur-[2px] fade-in cursor-pointer",onClick:t,"aria-hidden":"true"}),(0,a.jsxs)("div",{className:(0,c.cn)("absolute right-0 top-0 h-full bg-surface flex flex-col","shadow-[var(--shadow-elev)]","slide-in-right","border-l border-border-subtle",o[r]||o.md,i),children:[(0,a.jsxs)("div",{className:"flex items-center justify-between p-6 border-b border-border-subtle flex-shrink-0",children:[(0,a.jsx)("div",{className:"flex items-center gap-3",children:s&&(0,a.jsx)("h2",{className:"text-lg font-semibold text-text-main",children:s})}),(0,a.jsx)("button",{type:"button",onClick:t,className:"p-1.5 rounded-[10px] text-text-muted hover:bg-surface-2 hover:text-text-main transition-colors",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"close"})})]}),(0,a.jsx)("div",{className:"flex-1 overflow-y-auto p-6 custom-scrollbar",children:n})]})]}):null}function m({currentPage:e,pageSize:t,totalItems:s,onPageChange:l,onPageSizeChange:n,className:r}){let i=Math.ceil(s/t),o=s>0?(e-1)*t+1:0,x=Math.min(e*t,s),u=(()=>{let t=[],s=Math.max(1,e-2),a=Math.min(i,s+5-1);a-s+1<5&&(s=Math.max(1,a-5+1));for(let e=s;e<=a;e++)t.push(e);return t})();return(0,a.jsxs)("div",{className:(0,c.cn)("flex flex-col sm:flex-row items-center justify-between gap-4 py-4 px-2",r),children:[s>0&&(0,a.jsxs)("div",{className:"text-sm text-text-muted",children:["Showing ",(0,a.jsx)("span",{className:"font-medium text-text-main",children:o})," to"," ",(0,a.jsx)("span",{className:"font-medium text-text-main",children:x})," of"," ",(0,a.jsx)("span",{className:"font-medium text-text-main",children:s})," results"]}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center justify-center gap-2 sm:gap-4",children:[n&&(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{className:"text-sm text-text-muted",children:"Rows:"}),(0,a.jsx)("select",{value:t,onChange:e=>n(Number(e.target.value)),className:(0,c.cn)("h-9 rounded-lg border border-black/10 dark:border-white/10 bg-surface","text-sm text-text-main focus:outline-none focus:ring-2 focus:ring-primary/20","cursor-pointer"),style:{colorScheme:"auto"},children:[10,20,50].map(e=>(0,a.jsx)("option",{value:e,children:e},e))})]}),i>1&&(0,a.jsxs)("div",{className:"flex items-center gap-1",children:[(0,a.jsx)(d.default,{variant:"outline",size:"sm",onClick:()=>l(e-1),disabled:1===e,className:"w-9 px-0",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"chevron_left"})}),u[0]>1&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(d.default,{variant:"ghost",size:"sm",onClick:()=>l(1),className:"w-9 px-0 hidden sm:inline-flex",children:"1"}),u[0]>2&&(0,a.jsx)("span",{className:"text-text-muted px-1 hidden sm:inline",children:"..."})]}),u.map(t=>(0,a.jsx)(d.default,{variant:e===t?"primary":"ghost",size:"sm",onClick:()=>l(t),className:(0,c.cn)("w-9 px-0",e===t?"inline-flex":"hidden sm:inline-flex"),children:t},t)),u[u.length-1]<i&&(0,a.jsxs)(a.Fragment,{children:[u[u.length-1]<i-1&&(0,a.jsx)("span",{className:"text-text-muted px-1 hidden sm:inline",children:"..."}),(0,a.jsx)(d.default,{variant:"ghost",size:"sm",onClick:()=>l(i),className:"w-9 px-0 hidden sm:inline-flex",children:i})]}),(0,a.jsx)(d.default,{variant:"outline",size:"sm",onClick:()=>l(e+1),disabled:e===i,className:"w-9 px-0",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"chevron_right"})})]})]})]})}var u=s(52679);let p=null,h=null;async function f({force:e=!1}={}){if(!e&&p&&h)return{providerNameCache:p,providerNodesCache:h};let t=await fetch("/api/provider-nodes",{cache:"no-store"}),s=(await t.json()).nodes||[];for(let e of(h={},s))h[e.id]=e.name;return{providerNameCache:p={...u.Q2,...h},providerNodesCache:h}}function b(e,t){if(!e||!t)return e;let s=t[e];if("string"==typeof s)return s;if(s?.name)return s.name;let a=(0,u.zt)(e)||u.Q2[e];return a?.name||e}function g({title:e,children:t,defaultOpen:s=!1,icon:n=null}){let[r,i]=(0,l.useState)(s);return(0,a.jsxs)("div",{className:"border border-black/5 dark:border-white/5 rounded-lg overflow-hidden",children:[(0,a.jsxs)("button",{type:"button",onClick:()=>i(!r),className:"w-full flex items-center justify-between p-3 bg-black/[0.02] dark:bg-white/[0.02] hover:bg-black/[0.04] dark:hover:bg-white/[0.04] transition-colors",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[n&&(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px] text-text-muted",children:n}),(0,a.jsx)("span",{className:"font-semibold text-sm text-text-main",children:e})]}),(0,a.jsx)("span",{className:(0,c.cn)("material-symbols-outlined text-[20px] text-text-muted transition-transform duration-200",r?"rotate-90":""),children:"chevron_right"})]}),r&&(0,a.jsx)("div",{className:"p-4 border-t border-black/5 dark:border-white/5",children:t})]})}function j(e){let t=e?.display_total_input_tokens,s=Number(t);if(null!=t&&""!==t&&Number.isFinite(s)&&s>=0)return s;let a=Number(e?.prompt_tokens??e?.input_tokens??0)||0,l=Number(e?.display_cached_input_tokens??e?.cached_tokens??e?.cache_read_input_tokens??e?.input_tokens_details?.cached_tokens??e?.prompt_tokens_details?.cached_tokens??0)||0,n=Number(e?.display_cache_creation_input_tokens??e?.cache_creation_input_tokens??e?.input_tokens_details?.cache_creation_tokens??e?.prompt_tokens_details?.cache_creation_tokens??0)||0,r=e?.cache_read_input_tokens!=null||e?.cache_creation_input_tokens!=null,i=!!(e?.input_tokens_details||e?.prompt_tokens_details),o=e?.prompt_tokens!=null&&e?.input_tokens!=null&&Number(e.prompt_tokens)!==Number(e.input_tokens);return!r||i||o?a:a+l+n}function v(){let[e,t]=(0,l.useState)([]),[s,n]=(0,l.useState)({page:1,pageSize:20,totalItems:0,totalPages:0}),[r,i]=(0,l.useState)(!1),[u,p]=(0,l.useState)(null),[h,v]=(0,l.useState)(!1),[N,w]=(0,l.useState)([]),[k,y]=(0,l.useState)(null),[_,S]=(0,l.useState)({provider:"",startDate:"",endDate:""}),C=(0,l.useCallback)(async({force:e=!1}={})=>{try{let t=await fetch("/api/usage/providers",{cache:"no-store"}),s=await t.json();w(s.providers||[]);let a=await f({force:e});y(a.providerNameCache)}catch(e){console.error("Failed to fetch providers:",e)}},[]),D=(0,l.useCallback)(async({force:e=!1}={})=>{i(!0);try{let a=new URLSearchParams({page:s.page.toString(),pageSize:s.pageSize.toString()});_.provider&&a.append("provider",_.provider),_.startDate&&a.append("startDate",_.startDate),_.endDate&&a.append("endDate",_.endDate),e&&a.set("_refresh",Date.now().toString());let l=await fetch(`/api/usage/request-details?${a}`,{cache:"no-store"}),r=await l.json();t(r.details||[]),n(e=>({...e,...r.pagination}))}catch(e){console.error("Failed to fetch request details:",e)}finally{i(!1)}},[s.page,s.pageSize,_]);(0,l.useEffect)(()=>{C()},[C]),(0,l.useEffect)(()=>{D()},[D]);let z=(0,l.useCallback)(async()=>{await Promise.all([C({force:!0}),D({force:!0})])},[C,D]);return(0,a.jsxs)("div",{className:"flex min-w-0 flex-col gap-6",children:[(0,a.jsx)(o.default,{padding:"md",children:(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4",children:[(0,a.jsxs)("div",{className:"flex min-w-0 flex-col gap-2",children:[(0,a.jsx)("label",{htmlFor:"provider-filter",className:"text-sm font-medium text-text-main",children:"Provider"}),(0,a.jsxs)("select",{id:"provider-filter",value:_.provider,onChange:e=>S({..._,provider:e.target.value}),className:(0,c.cn)("h-9 px-3 rounded-lg border border-black/10 dark:border-white/10 bg-surface","text-sm text-text-main focus:outline-none focus:ring-2 focus:ring-primary/20","w-full min-w-0 cursor-pointer"),style:{colorScheme:"auto"},children:[(0,a.jsx)("option",{value:"",children:"All Providers"}),N.map(e=>(0,a.jsx)("option",{value:e.id,children:e.name},e.id))]})]}),(0,a.jsxs)("div",{className:"flex min-w-0 flex-col gap-2",children:[(0,a.jsx)("label",{htmlFor:"start-date-filter",className:"text-sm font-medium text-text-main",children:"Start Date"}),(0,a.jsx)("input",{id:"start-date-filter",type:"datetime-local",value:_.startDate,onChange:e=>S({..._,startDate:e.target.value}),className:(0,c.cn)("h-9 px-3 rounded-lg border border-black/10 dark:border-white/10 bg-surface","w-full min-w-0 text-sm text-text-main focus:outline-none focus:ring-2 focus:ring-primary/20")})]}),(0,a.jsxs)("div",{className:"flex min-w-0 flex-col gap-2",children:[(0,a.jsx)("label",{htmlFor:"end-date-filter",className:"text-sm font-medium text-text-main",children:"End Date"}),(0,a.jsx)("input",{id:"end-date-filter",type:"datetime-local",value:_.endDate,onChange:e=>S({..._,endDate:e.target.value}),className:(0,c.cn)("h-9 px-3 rounded-lg border border-black/10 dark:border-white/10 bg-surface","w-full min-w-0 text-sm text-text-main focus:outline-none focus:ring-2 focus:ring-primary/20")})]}),(0,a.jsxs)("div",{className:"flex min-w-0 flex-col gap-2 sm:col-span-2 lg:col-span-1",children:[(0,a.jsx)("span",{className:"hidden text-sm font-medium text-text-main opacity-0 lg:block","aria-hidden":"true",children:"Actions"}),(0,a.jsxs)("div",{className:"grid grid-cols-2 gap-2",children:[(0,a.jsx)(d.default,{variant:"outline",onClick:z,loading:r,className:"w-full",icon:"refresh",children:"Refresh"}),(0,a.jsx)(d.default,{variant:"ghost",onClick:()=>{S({provider:"",startDate:"",endDate:""})},disabled:!_.provider&&!_.startDate&&!_.endDate,className:"w-full",children:"Clear"})]})]})]})}),(0,a.jsxs)(o.default,{padding:"none",children:[(0,a.jsx)("div",{className:"overflow-x-auto",children:(0,a.jsxs)("table",{className:"w-full min-w-[880px]",children:[(0,a.jsx)("thead",{children:(0,a.jsxs)("tr",{className:"border-b border-black/5 dark:border-white/5",children:[(0,a.jsx)("th",{className:"text-left p-4 text-sm font-semibold text-text-main",children:"Timestamp"}),(0,a.jsx)("th",{className:"text-left p-4 text-sm font-semibold text-text-main",children:"Model"}),(0,a.jsx)("th",{className:"text-left p-4 text-sm font-semibold text-text-main",children:"Provider"}),(0,a.jsx)("th",{className:"text-right p-4 text-sm font-semibold text-text-main",children:"Input Tokens"}),(0,a.jsx)("th",{className:"text-right p-4 text-sm font-semibold text-text-main",children:"Output Tokens"}),(0,a.jsx)("th",{className:"text-left p-4 text-sm font-semibold text-text-main",children:"Latency"}),(0,a.jsx)("th",{className:"text-center p-4 text-sm font-semibold text-text-main",children:"Action"})]})}),(0,a.jsx)("tbody",{children:r?(0,a.jsx)("tr",{children:(0,a.jsx)("td",{colSpan:"7",className:"p-8 text-center text-text-muted",children:(0,a.jsxs)("div",{className:"flex items-center justify-center gap-2",children:[(0,a.jsx)("span",{className:"material-symbols-outlined animate-spin text-[20px]",children:"progress_activity"}),"Loading..."]})})}):0===e.length?(0,a.jsx)("tr",{children:(0,a.jsx)("td",{colSpan:"7",className:"p-8 text-center text-text-muted",children:"No request details found"})}):e.map((e,t)=>(0,a.jsxs)("tr",{className:"border-b border-black/5 dark:border-white/5 last:border-b-0 hover:bg-black/[0.02] dark:hover:bg-white/[0.02] transition-colors",children:[(0,a.jsx)("td",{className:"whitespace-nowrap p-4 text-sm text-text-main",children:new Date(e.timestamp).toLocaleString()}),(0,a.jsx)("td",{className:"max-w-[260px] truncate p-4 font-mono text-sm text-text-main",children:e.model}),(0,a.jsx)("td",{className:"max-w-[180px] truncate p-4 text-sm text-text-main",children:(0,a.jsx)("span",{className:"font-medium",children:b(e.provider,k)})}),(0,a.jsx)("td",{className:"p-4 text-sm text-text-main text-right font-mono",children:j(e.tokens).toLocaleString()}),(0,a.jsx)("td",{className:"p-4 text-sm text-text-main text-right font-mono",children:e.tokens?.completion_tokens?.toLocaleString()||0}),(0,a.jsx)("td",{className:"p-4 text-sm text-text-muted",children:(0,a.jsxs)("div",{className:"flex flex-col gap-0.5",children:[(0,a.jsxs)("div",{children:["TTFT: ",(0,a.jsxs)("span",{className:"font-mono",children:[e.latency?.ttft||0,"ms"]})]}),(0,a.jsxs)("div",{children:["Total: ",(0,a.jsxs)("span",{className:"font-mono",children:[e.latency?.total||0,"ms"]})]})]})}),(0,a.jsx)("td",{className:"p-4 text-center",children:(0,a.jsx)(d.default,{variant:"outline",size:"sm",onClick:()=>{p(e),v(!0)},children:"Detail"})})]},`${e.id}-${t}`))})]})}),!r&&e.length>0&&(0,a.jsx)("div",{className:"border-t border-black/5 dark:border-white/5",children:(0,a.jsx)(m,{currentPage:s.page,pageSize:s.pageSize,totalItems:s.totalItems,onPageChange:e=>{n(t=>({...t,page:e}))},onPageSizeChange:e=>{n(t=>({...t,pageSize:e,page:1}))}})})]}),(0,a.jsx)(x,{isOpen:h,onClose:()=>v(!1),title:"Request Details",width:"lg",children:u&&(0,a.jsxs)("div",{className:"space-y-6",children:[(0,a.jsxs)("div",{className:"grid min-w-0 grid-cols-1 gap-4 text-sm sm:grid-cols-2",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("span",{className:"text-text-muted",children:"ID:"})," ",(0,a.jsx)("span",{className:"break-all font-mono text-text-main",children:u.id})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("span",{className:"text-text-muted",children:"Timestamp:"})," ",(0,a.jsx)("span",{className:"text-text-main",children:new Date(u.timestamp).toLocaleString()})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("span",{className:"text-text-muted",children:"Provider:"})," ",(0,a.jsx)("span",{className:"text-text-main font-medium",children:b(u.provider,k)})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("span",{className:"text-text-muted",children:"Model:"})," ",(0,a.jsx)("span",{className:"text-text-main font-mono",children:u.model})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("span",{className:"text-text-muted",children:"Status:"})," ",(0,a.jsx)("span",{className:(0,c.cn)("font-medium","success"===u.status?"text-green-600":"text-red-600"),children:u.status})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("span",{className:"text-text-muted",children:"Latency:"})," ",(0,a.jsxs)("span",{className:"text-text-main font-mono",children:["TTFT ",u.latency?.ttft||0,"ms / Total ",u.latency?.total||0,"ms"]})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("span",{className:"text-text-muted",children:"Input Tokens:"})," ",(0,a.jsx)("span",{className:"text-text-main font-mono",children:j(u.tokens).toLocaleString()})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("span",{className:"text-text-muted",children:"Output Tokens:"})," ",(0,a.jsx)("span",{className:"text-text-main font-mono",children:u.tokens?.completion_tokens?.toLocaleString()||0})]})]}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsx)(g,{title:"1. Client Request (Input)",defaultOpen:!0,icon:"input",children:(0,a.jsx)("pre",{className:"max-h-[300px] max-w-full overflow-auto rounded-lg border border-black/5 bg-black/5 p-3 font-mono text-xs text-text-main dark:border-white/5 dark:bg-white/5 sm:p-4",children:JSON.stringify(u.request,null,2)})}),u.providerRequest&&(0,a.jsx)(g,{title:"2. Provider Request (Translated)",icon:"translate",children:(0,a.jsx)("pre",{className:"max-h-[300px] max-w-full overflow-auto rounded-lg border border-black/5 bg-black/5 p-3 font-mono text-xs text-text-main dark:border-white/5 dark:bg-white/5 sm:p-4",children:JSON.stringify(u.providerRequest,null,2)})}),u.providerResponse&&(0,a.jsx)(g,{title:"3. Provider Response (Raw)",icon:"data_object",children:(0,a.jsx)("pre",{className:"max-h-[300px] max-w-full overflow-auto rounded-lg border border-black/5 bg-black/5 p-3 font-mono text-xs text-text-main dark:border-white/5 dark:bg-white/5 sm:p-4",children:"object"==typeof u.providerResponse?JSON.stringify(u.providerResponse,null,2):u.providerResponse})}),(0,a.jsxs)(g,{title:"4. Client Response (Final)",defaultOpen:!0,icon:"output",children:[u.response?.thinking&&(0,a.jsxs)("div",{className:"mb-4",children:[(0,a.jsxs)("h4",{className:"font-semibold text-text-main mb-2 flex items-center gap-2 text-xs uppercase tracking-wide opacity-70",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"psychology"}),"Thinking Process"]}),(0,a.jsx)("pre",{className:"max-h-[200px] max-w-full overflow-auto rounded-lg border border-amber-200 bg-amber-50 p-3 font-mono text-xs text-amber-900 dark:border-amber-800 dark:bg-amber-950/30 dark:text-amber-100 sm:p-4",children:u.response.thinking})]}),(0,a.jsx)("h4",{className:"font-semibold text-text-main mb-2 text-xs uppercase tracking-wide opacity-70",children:"Content"}),(0,a.jsx)("pre",{className:"max-h-[300px] max-w-full overflow-auto rounded-lg border border-black/5 bg-black/5 p-3 font-mono text-xs text-text-main dark:border-white/5 dark:bg-white/5 sm:p-4",children:u.response?.content||"[No content]"})]})]})]})})]})}let N=[{value:"today",label:"Today"},{value:"24h",label:"24h"},{value:"7d",label:"7D"},{value:"30d",label:"30D"},{value:"60d",label:"60D"}];function w(){return(0,a.jsx)(l.Suspense,{fallback:(0,a.jsx)(r.Qv,{}),children:(0,a.jsx)(k,{})})}function k(){let e=(0,n.useSearchParams)(),t=(0,n.useRouter)(),{isAdmin:s}=(0,i.s)(),[o,d]=(0,l.useState)("today"),c=e.get("tab"),x=c&&["overview","logs","details"].includes(c)&&("details"!==c||s)?c:"overview";(0,l.useEffect)(()=>{if("details"===c&&!s){let s=new URLSearchParams(e);s.set("tab","overview"),t.replace(`/dashboard/usage?${s.toString()}`,{scroll:!1})}},[c,s,t,e]);let m=[{value:"overview",label:"Overview"},...s?[{value:"details",label:"Details"}]:[]];return(0,a.jsxs)("div",{className:"flex min-w-0 flex-col gap-6 px-1 sm:px-0",children:[(0,a.jsxs)("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between",children:[(0,a.jsx)(r.Iz,{options:m,value:x,onChange:s=>{if(s===x)return;let a=new URLSearchParams(e);a.set("tab",s),t.push(`/dashboard/usage?${a.toString()}`,{scroll:!1})},className:"w-full sm:w-auto"}),"overview"===x&&(0,a.jsx)(r.Iz,{options:N,value:o,onChange:d,size:"sm",className:"w-full sm:w-auto"})]}),"overview"===x&&(0,a.jsx)(l.Suspense,{fallback:(0,a.jsx)(r.Qv,{}),children:(0,a.jsx)(r.jK,{period:o,setPeriod:d,hidePeriodSelector:!0})}),"logs"===x&&(0,a.jsx)(r.gM,{}),"details"===x&&(0,a.jsx)(v,{})]})}}},e=>{e.O(0,[9906,3862,9893,9959,1997,5564,5263,7033,5497,8441,3794,7358],()=>e(e.s=21007)),_N_E=e.O()}]);