@@ -77,13 +77,11 @@ describe("AwsBedrockHandler", () => {
7777
7878 const modelInfo = customArnHandler . getModel ( )
7979
80- // Verify the ARN is preserved as the ID
8180 expect ( modelInfo . id ) . toBe (
8281 "arn:aws:bedrock:ap-northeast-3:123456789012:inference-profile/apne3.anthropic.claude-3-5-sonnet-20241022-v2:0" ,
83- )
84-
85- // Verify the model info is defined
86- expect ( modelInfo . info ) . toBeDefined ( )
82+ ) ,
83+ // Verify the model info is defined
84+ expect ( modelInfo . info ) . toBeDefined ( )
8785
8886 // Verify parseArn was called with the correct ARN
8987 expect ( parseArnMock ) . toHaveBeenCalledWith (
@@ -102,177 +100,21 @@ describe("AwsBedrockHandler", () => {
102100 }
103101 } )
104102
105- it ( "should use default model when custom- arn is selected but no ARN is provided " , ( ) => {
103+ it ( "should use default prompt router model when prompt router arn is entered but no model can be identified from the ARN " , ( ) => {
106104 const customArnHandler = new AwsBedrockHandler ( {
107- apiModelId : "custom-arn" ,
105+ awsCustomArn :
106+ "arn:aws:bedrock:ap-northeast-3:123456789012:default-prompt-router/my_router_arn_no_model" ,
108107 awsAccessKey : "test-access-key" ,
109108 awsSecretKey : "test-secret-key" ,
110109 awsRegion : "us-east-1" ,
111- // No awsCustomArn provided
112110 } )
113111 const modelInfo = customArnHandler . getModel ( )
114- // Should fall back to default model
115- expect ( modelInfo . id ) . not . toBe ( "custom-arn" )
112+ // Should fall back to default prompt router model
113+ expect ( modelInfo . id ) . toBe (
114+ "arn:aws:bedrock:ap-northeast-3:123456789012:default-prompt-router/my_router_arn_no_model" ,
115+ ) // bedrockDefaultPromptRouterModelId
116116 expect ( modelInfo . info ) . toBeDefined ( )
117- } )
118- } )
119-
120- describe ( "invokedModelId handling" , ( ) => {
121- it ( "should update costModelConfig when invokedModelId is present in custom ARN scenario" , async ( ) => {
122- const customArnHandler = new AwsBedrockHandler ( {
123- apiModelId : "anthropic.claude-3-5-sonnet-20241022-v2:0" ,
124- awsAccessKey : "test-access-key" ,
125- awsSecretKey : "test-secret-key" ,
126- awsRegion : "us-east-1" ,
127- awsCustomArn : "arn:aws:bedrock:us-east-1:123456789:foundation-model/custom-model" ,
128- } )
129-
130- const mockStreamEvent = {
131- trace : {
132- promptRouter : {
133- invokedModelId : "arn:aws:bedrock:us-east-1:123456789:foundation-model/custom-model:0" ,
134- } ,
135- } ,
136- }
137-
138- jest . spyOn ( customArnHandler , "getModel" ) . mockReturnValue ( {
139- id : "custom-model" ,
140- info : {
141- maxTokens : 4096 ,
142- contextWindow : 128_000 ,
143- supportsPromptCache : false ,
144- supportsImages : true ,
145- } ,
146- } )
147-
148- await customArnHandler . createMessage ( "system prompt" , [ { role : "user" , content : "user message" } ] ) . next ( )
149-
150- expect ( customArnHandler . getModel ( ) ) . toEqual ( {
151- id : "custom-model" ,
152- info : {
153- maxTokens : 4096 ,
154- contextWindow : 128_000 ,
155- supportsPromptCache : false ,
156- supportsImages : true ,
157- } ,
158- } )
159- } )
160-
161- it ( "should update costModelConfig when invokedModelId is present in default model scenario" , async ( ) => {
162- handler = new AwsBedrockHandler ( {
163- apiModelId : "anthropic.claude-3-5-sonnet-20241022-v2:0" ,
164- awsAccessKey : "test-access-key" ,
165- awsSecretKey : "test-secret-key" ,
166- awsRegion : "us-east-1" ,
167- } )
168-
169- const mockStreamEvent = {
170- trace : {
171- promptRouter : {
172- invokedModelId : "arn:aws:bedrock:us-east-1:123456789:foundation-model/default-model:0" ,
173- } ,
174- } ,
175- }
176-
177- jest . spyOn ( handler , "getModel" ) . mockReturnValue ( {
178- id : "default-model" ,
179- info : {
180- maxTokens : 4096 ,
181- contextWindow : 128_000 ,
182- supportsPromptCache : false ,
183- supportsImages : true ,
184- } ,
185- } )
186-
187- await handler . createMessage ( "system prompt" , [ { role : "user" , content : "user message" } ] ) . next ( )
188-
189- expect ( handler . getModel ( ) ) . toEqual ( {
190- id : "default-model" ,
191- info : {
192- maxTokens : 4096 ,
193- contextWindow : 128_000 ,
194- supportsPromptCache : false ,
195- supportsImages : true ,
196- } ,
197- } )
198- } )
199-
200- it ( "should not update costModelConfig when invokedModelId is not present" , async ( ) => {
201- handler = new AwsBedrockHandler ( {
202- apiModelId : "anthropic.claude-3-5-sonnet-20241022-v2:0" ,
203- awsAccessKey : "test-access-key" ,
204- awsSecretKey : "test-secret-key" ,
205- awsRegion : "us-east-1" ,
206- } )
207-
208- const mockStreamEvent = {
209- trace : {
210- promptRouter : {
211- // No invokedModelId present
212- } ,
213- } ,
214- }
215-
216- jest . spyOn ( handler , "getModel" ) . mockReturnValue ( {
217- id : "default-model" ,
218- info : {
219- maxTokens : 4096 ,
220- contextWindow : 128_000 ,
221- supportsPromptCache : false ,
222- supportsImages : true ,
223- } ,
224- } )
225-
226- await handler . createMessage ( "system prompt" , [ { role : "user" , content : "user message" } ] ) . next ( )
227-
228- expect ( handler . getModel ( ) ) . toEqual ( {
229- id : "default-model" ,
230- info : {
231- maxTokens : 4096 ,
232- contextWindow : 128_000 ,
233- supportsPromptCache : false ,
234- supportsImages : true ,
235- } ,
236- } )
237- } )
238-
239- it ( "should not update costModelConfig when invokedModelId cannot be parsed" , async ( ) => {
240- handler = new AwsBedrockHandler ( {
241- apiModelId : "anthropic.claude-3-5-sonnet-20241022-v2:0" ,
242- awsAccessKey : "test-access-key" ,
243- awsSecretKey : "test-secret-key" ,
244- awsRegion : "us-east-1" ,
245- } )
246-
247- const mockStreamEvent = {
248- trace : {
249- promptRouter : {
250- invokedModelId : "invalid-arn" ,
251- } ,
252- } ,
253- }
254-
255- jest . spyOn ( handler , "getModel" ) . mockReturnValue ( {
256- id : "default-model" ,
257- info : {
258- maxTokens : 4096 ,
259- contextWindow : 128_000 ,
260- supportsPromptCache : false ,
261- supportsImages : true ,
262- } ,
263- } )
264-
265- await handler . createMessage ( "system prompt" , [ { role : "user" , content : "user message" } ] ) . next ( )
266-
267- expect ( handler . getModel ( ) ) . toEqual ( {
268- id : "default-model" ,
269- info : {
270- maxTokens : 4096 ,
271- contextWindow : 128_000 ,
272- supportsPromptCache : false ,
273- supportsImages : true ,
274- } ,
275- } )
117+ expect ( modelInfo . info . maxTokens ) . toBe ( 4096 )
276118 } )
277119 } )
278120} )
0 commit comments