Skip to content

Commit e0ccba5

Browse files
committed
docs: enhance agent plugin documentation with token metrics and sequence calculations
1 parent 0f81067 commit e0ccba5

2 files changed

Lines changed: 71 additions & 7 deletions

File tree

adminforth/documentation/docs/tutorial/08-Plugins/01-agent.md

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -500,7 +500,9 @@ Create a renderer in your app custom folder:
500500
<div class="mt-1">
501501
{{ debugSequences.length }} sequences,
502502
{{ totalToolCalls }} tool calls,
503-
{{ totalCachedTokens.toLocaleString() }} cached prompt tokens
503+
{{ totalUncachedInputTokens.toLocaleString() }} uncached input tokens,
504+
{{ totalCachedInputTokens.toLocaleString() }} cached input tokens,
505+
{{ totalOutputTokens.toLocaleString() }} output tokens
504506
</div>
505507
</div>
506508
@@ -518,7 +520,13 @@ type DebugToolCall = {
518520
};
519521
520522
type DebugSequence = {
523+
uncachedInputTokens?: number;
524+
cachedInputTokens?: number;
525+
outputTokens?: number;
521526
cachedTokens: number;
527+
promptTokens: number;
528+
reasoningTokens: number;
529+
textTokens: number;
522530
toolCalls: DebugToolCall[];
523531
};
524532
@@ -531,9 +539,27 @@ const debugSequences = computed(() => props.record[props.column.name] ?? []);
531539
const totalToolCalls = computed(() =>
532540
debugSequences.value.reduce((sum, sequence) => sum + sequence.toolCalls.length, 0),
533541
);
534-
const totalCachedTokens = computed(() =>
535-
debugSequences.value.reduce((sum, sequence) => sum + sequence.cachedTokens, 0),
542+
const totalUncachedInputTokens = computed(() =>
543+
debugSequences.value.reduce((sum, sequence) => sum + sequenceUncachedInputTokens(sequence), 0),
536544
);
545+
const totalCachedInputTokens = computed(() =>
546+
debugSequences.value.reduce((sum, sequence) => sum + sequenceCachedInputTokens(sequence), 0),
547+
);
548+
const totalOutputTokens = computed(() =>
549+
debugSequences.value.reduce((sum, sequence) => sum + sequenceOutputTokens(sequence), 0),
550+
);
551+
552+
function sequenceUncachedInputTokens(sequence: DebugSequence) {
553+
return sequence.uncachedInputTokens ?? Math.max(sequence.promptTokens - sequenceCachedInputTokens(sequence), 0);
554+
}
555+
556+
function sequenceCachedInputTokens(sequence: DebugSequence) {
557+
return sequence.cachedInputTokens ?? sequence.cachedTokens;
558+
}
559+
560+
function sequenceOutputTokens(sequence: DebugSequence) {
561+
return sequence.outputTokens ?? sequence.reasoningTokens + sequence.textTokens;
562+
}
537563
</script>
538564
```
539565

adminforth/documentation/docs/tutorial/08-Plugins/27-dashboard.md

Lines changed: 42 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,45 @@ query:
212212
direction: desc
213213
```
214214

215-
Funnel charts use a steps query because each step can use its own resource, metric, and filters.
215+
Step-based charts use a `steps` query when each step needs its own resource, metric, and filters. Funnel charts always use this query shape.
216+
217+
Depending on the widget, `query` can also use `limit`, `offset`, `calcs`, `time_series`, `period`, `bucket`, and `formatting`.
218+
219+
Widget-scoped constants can be defined with `variables`. They are available inside `query.calcs` through `lookup($variables.path, field, default)`.
220+
221+
```yaml
222+
label: Average Car Price by Database
223+
target: chart
224+
variables:
225+
price_multipliers:
226+
cars_sl: 0.84
227+
cars_mysql: 1.12
228+
chart:
229+
type: bar
230+
x:
231+
field: name
232+
y:
233+
field: adjusted_value
234+
query:
235+
steps:
236+
- name: SQLite
237+
resource: cars_sl
238+
metric:
239+
agg: avg
240+
field: price
241+
as: value
242+
- name: MySQL
243+
resource: cars_mysql
244+
metric:
245+
agg: avg
246+
field: price
247+
as: value
248+
calcs:
249+
- calc: value * lookup($variables.price_multipliers, resource, 1)
250+
as: adjusted_value
251+
```
252+
253+
Define `variables` on each widget config. Dashboard root variables are not merged into widget data queries.
216254

217255
## Widget Examples
218256

@@ -406,11 +444,11 @@ Widgets support these layout fields:
406444
size: small
407445
width: 320
408446
height: 360
409-
minWidth: 240
410-
maxWidth: 640
447+
min_width: 240
448+
max_width: 640
411449
```
412450

413-
`size` can be `small`, `medium`, `large`, `wide`, or `full`. Explicit `width`, `height`, `minWidth`, and `maxWidth` can be used when a widget needs more precise sizing.
451+
`size` can be `small`, `medium`, `large`, `wide`, or `full`. Explicit `width`, `height`, `min_width`, and `max_width` can be used when a widget needs more precise sizing.
414452

415453
## Agent Plugin Integration
416454

0 commit comments

Comments
 (0)