@@ -42,25 +42,37 @@ vi.mock('@/lib/integrations/availability.server', () => ({
4242} ) )
4343vi . mock ( '@/providers/utils' , ( ) => ( { filterBlacklistedModels : mocks . filterModels } ) )
4444vi . mock ( '@/tools/metadata' , ( ) => ( { getToolMetadata : mocks . toolMetadata } ) )
45- vi . mock ( '@/providers/models' , ( ) => ( {
46- DYNAMIC_MODEL_PROVIDERS : [ 'ollama' , 'vllm' , 'litellm' , 'openrouter' ] ,
47- PROVIDER_DEFINITIONS : {
48- openai : {
49- id : 'openai' ,
50- name : 'OpenAI' ,
51- models : [
52- { id : 'public-model' } ,
53- { id : 'blocked-model' } ,
54- { id : 'retired-model' , sunset : { status : 'deprecated' } } ,
55- ] ,
45+ vi . mock ( '@/providers/models' , ( ) => {
46+ const publicModels = {
47+ openai : [
48+ { id : 'public-model' } ,
49+ { id : 'blocked-model' } ,
50+ { id : 'retired-model' , sunset : { status : 'deprecated' } } ,
51+ ] ,
52+ fireworks : [ { id : 'fireworks/public-model' } ] ,
53+ }
54+ return {
55+ getStaticProviderModels : ( providerId : string ) =>
56+ publicModels [ providerId as keyof typeof publicModels ] ?? [ ] ,
57+ PROVIDER_DEFINITIONS : {
58+ openai : { id : 'openai' , name : 'OpenAI' , models : publicModels . openai } ,
59+ anthropic : { id : 'anthropic' , name : 'Anthropic' , models : [ { id : 'anthropic-model' } ] } ,
60+ ollama : { id : 'ollama' , name : 'Ollama' , models : [ { id : 'private-local' } ] } ,
61+ vllm : { id : 'vllm' , name : 'vLLM' , models : [ ] } ,
62+ litellm : { id : 'litellm' , name : 'LiteLLM' , models : [ ] } ,
63+ openrouter : {
64+ id : 'openrouter' ,
65+ name : 'OpenRouter' ,
66+ models : [ { id : 'private-tenant-model' } ] ,
67+ } ,
68+ fireworks : {
69+ id : 'fireworks' ,
70+ name : 'Fireworks' ,
71+ models : [ ...publicModels . fireworks , { id : 'fireworks/private-model' } ] ,
72+ } ,
5673 } ,
57- anthropic : { id : 'anthropic' , name : 'Anthropic' , models : [ { id : 'anthropic-model' } ] } ,
58- ollama : { id : 'ollama' , name : 'Ollama' , models : [ { id : 'private-local' } ] } ,
59- vllm : { id : 'vllm' , name : 'vLLM' , models : [ ] } ,
60- litellm : { id : 'litellm' , name : 'LiteLLM' , models : [ ] } ,
61- openrouter : { id : 'openrouter' , name : 'OpenRouter' , models : [ { id : 'private-tenant-model' } ] } ,
62- } ,
63- } ) )
74+ }
75+ } )
6476vi . mock ( '@/connectors/registry' , ( ) => ( {
6577 CONNECTOR_META_REGISTRY : {
6678 available : {
@@ -187,11 +199,23 @@ describe('access request catalog deployment ceilings', () => {
187199
188200 it ( 'omits blacklisted/retired models, unconfigured endpoints, and private dynamic names' , async ( ) => {
189201 const catalog = await loadAccessRequestCatalog ( context )
190- expect ( [ ...catalog . providers . keys ( ) ] ) . toEqual ( [ 'openai' , 'openrouter' ] )
191- expect ( [ ...catalog . models . keys ( ) ] ) . toEqual ( [ 'public-model' ] )
202+ expect ( [ ...catalog . providers . keys ( ) ] ) . toEqual ( [ 'openai' , 'openrouter' , 'fireworks' ] )
203+ expect ( [ ...catalog . models . keys ( ) ] ) . toEqual ( [ 'public-model' , 'fireworks/public-model' ] )
192204 expect ( [ ...catalog . knowledgeConnectors . keys ( ) ] ) . toEqual ( [ 'available' , 'token' , 'fallback' ] )
193205 } )
194206
207+ it ( 'keeps public models of dynamic providers requestable without exposing private names' , async ( ) => {
208+ const catalog = await loadAccessRequestCatalog ( context , 'model' )
209+
210+ expect ( catalog . models . get ( 'fireworks/public-model' ) ) . toEqual ( {
211+ id : 'fireworks/public-model' ,
212+ label : 'fireworks/public-model' ,
213+ providerId : 'fireworks' ,
214+ } )
215+ expect ( catalog . models . has ( 'fireworks/private-model' ) ) . toBe ( false )
216+ expect ( catalog . models . has ( 'private-tenant-model' ) ) . toBe ( false )
217+ } )
218+
195219 it ( 'refuses ambiguous tool parent policies instead of choosing one silently' , async ( ) => {
196220 mocks . blocks . mockReturnValue ( {
197221 first : { type : 'first' , name : 'First' , tools : { access : [ 'shared_tool' ] } } ,
0 commit comments