@@ -33,11 +33,21 @@ func BuildRequest(ctx context.Context, cfg provider.RuntimeConfig, req providert
3333 payload .Instructions = req .SystemPrompt
3434 }
3535
36+ assetLimits := providertypes .NormalizeSessionAssetLimits (cfg .SessionAssetLimits )
37+ var usedSessionAssetBytes int64
3638 for _ , message := range req .Messages {
37- items , err := toResponsesInputItems (ctx , message , req .SessionAssetReader )
39+ remainingSessionAssetBytes := assetLimits .MaxSessionAssetsTotalBytes - usedSessionAssetBytes
40+ items , consumedBytes , err := toResponsesInputItems (
41+ ctx ,
42+ message ,
43+ req .SessionAssetReader ,
44+ remainingSessionAssetBytes ,
45+ assetLimits ,
46+ )
3847 if err != nil {
3948 return Request {}, err
4049 }
50+ usedSessionAssetBytes += consumedBytes
4151 payload .Input = append (payload .Input , items ... )
4252 }
4353
@@ -62,20 +72,28 @@ func toResponsesInputItems(
6272 ctx context.Context ,
6373 message providertypes.Message ,
6474 assetReader providertypes.SessionAssetReader ,
65- ) ([]InputItem , error ) {
66- openaiMessage , err := chatcompletions .ToOpenAIMessage (ctx , message , assetReader )
75+ remainingAssetBudget int64 ,
76+ assetLimits providertypes.SessionAssetLimits ,
77+ ) ([]InputItem , int64 , error ) {
78+ openaiMessage , consumedBytes , err := chatcompletions .ToOpenAIMessageWithBudget (
79+ ctx ,
80+ message ,
81+ assetReader ,
82+ remainingAssetBudget ,
83+ assetLimits ,
84+ )
6785 if err != nil {
68- return nil , err
86+ return nil , 0 , err
6987 }
7088
7189 switch strings .TrimSpace (openaiMessage .Role ) {
7290 case providertypes .RoleSystem :
73- return nil , nil
91+ return nil , consumedBytes , nil
7492 case providertypes .RoleUser , providertypes .RoleAssistant :
7593 items := make ([]InputItem , 0 , 1 + len (openaiMessage .ToolCalls ))
7694 contentParts , err := toResponsesContentParts (openaiMessage .Content )
7795 if err != nil {
78- return nil , err
96+ return nil , 0 , err
7997 }
8098 if len (contentParts ) > 0 {
8199 items = append (items , InputItem {
@@ -96,23 +114,23 @@ func toResponsesInputItems(
96114 })
97115 }
98116 }
99- return items , nil
117+ return items , consumedBytes , nil
100118 case providertypes .RoleTool :
101119 callID := strings .TrimSpace (openaiMessage .ToolCallID )
102120 if callID == "" {
103- return nil , errors .New (errorPrefix + "tool result message requires tool_call_id" )
121+ return nil , 0 , errors .New (errorPrefix + "tool result message requires tool_call_id" )
104122 }
105123 output , err := renderToolOutput (openaiMessage .Content )
106124 if err != nil {
107- return nil , err
125+ return nil , 0 , err
108126 }
109127 return []InputItem {{
110128 Type : "function_call_output" ,
111129 CallID : callID ,
112130 Output : output ,
113- }}, nil
131+ }}, consumedBytes , nil
114132 default :
115- return nil , fmt .Errorf ("%sunsupported message role %q" , errorPrefix , openaiMessage .Role )
133+ return nil , 0 , fmt .Errorf ("%sunsupported message role %q" , errorPrefix , openaiMessage .Role )
116134 }
117135}
118136
0 commit comments