1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
[]
= "QuotaSlice: require and cap constraints distribute budget"
= "slicing"
= "quota"
# Budget: 1000 tokens.
# Quotas:
# SystemPrompt: require=30%, cap=50%
# Message: require=0%, cap=40%
# (Document has no quota → require=0%, cap=100%)
#
# Items:
# sys-a: kind=SystemPrompt, tokens=200, score=0.9
# sys-b: kind=SystemPrompt, tokens=200, score=0.5
# msg-a: kind=Message, tokens=300, score=0.8
# msg-b: kind=Message, tokens=300, score=0.3
# doc-a: kind=Document, tokens=200, score=0.7
#
# requireTokens: SystemPrompt=floor(0.3*1000)=300, Message=0
# capTokens: SystemPrompt=floor(0.5*1000)=500, Message=floor(0.4*1000)=400
# totalRequired = 300
# unassigned = 1000 - 300 = 700
#
# candidateTokenMass:
# SystemPrompt: 200+200=400 (cap > require, so participates)
# Message: 300+300=600 (cap=400 > require=0, participates)
# Document: 200 (cap=1000 > require=0, participates)
# totalMassForDistribution = 400+600+200 = 1200
#
# kindBudgets:
# SystemPrompt: require(300) + floor(700*400/1200)=floor(233.33)=233 = 533
# cap = 500, so clamped to 500
# Message: require(0) + floor(700*600/1200)=floor(350)=350 = 350
# cap = 400, within cap → 350
# Document: require(0) + floor(700*200/1200)=floor(116.67)=116 = 116
# cap = 1000, within cap → 116
#
# Inner slicer (greedy) per kind:
# SystemPrompt (budget=500): sys-a(density=0.9/200=0.0045), sys-b(0.5/200=0.0025)
# Fill: sys-a(remaining=300), sys-b(remaining=100). Both fit.
# Message (budget=350): msg-a(density=0.8/300≈0.00267), msg-b(0.3/300=0.001)
# Fill: msg-a(remaining=50), msg-b(300>50 skip). Only msg-a.
# Document (budget=116): doc-a(tokens=200>116 → skip). None selected.
#
# Selected: sys-a, sys-b, msg-a
[]
= "greedy"
[[]]
= "SystemPrompt"
= 30.0
= 50.0
[[]]
= "Message"
= 0.0
= 40.0
[]
= 1000
[[]]
= "sys-a"
= 200
= 0.9
= "SystemPrompt"
[[]]
= "sys-b"
= 200
= 0.5
= "SystemPrompt"
[[]]
= "msg-a"
= 300
= 0.8
= "Message"
[[]]
= "msg-b"
= 300
= 0.3
= "Message"
[[]]
= "doc-a"
= 200
= 0.7
= "Document"
[]
= ["sys-a", "sys-b", "msg-a"]