@@ -6439,6 +6439,9 @@ def generate_content(
64396439      # scones. 
64406440    """ 
64416441
6442+     incompatible_tools_indexes  =  (
6443+         _extra_utils .find_afc_incompatible_tool_indexes (config )
6444+     )
64426445    parsed_config  =  _extra_utils .parse_config_for_mcp_usage (config )
64436446    if  (
64446447        parsed_config 
@@ -6452,6 +6455,26 @@ def generate_content(
64526455      return  self ._generate_content (
64536456          model = model , contents = contents , config = parsed_config 
64546457      )
6458+     if  incompatible_tools_indexes :
6459+       original_tools_length  =  0 
6460+       if  isinstance (config , types .GenerateContentConfig ):
6461+         if  config .tools :
6462+           original_tools_length  =  len (config .tools )
6463+       elif  isinstance (config , dict ):
6464+         tools  =  config .get ('tools' , [])
6465+         if  tools :
6466+           original_tools_length  =  len (tools )
6467+       if  len (incompatible_tools_indexes ) !=  original_tools_length :
6468+         indices_str  =  ', ' .join (map (str , incompatible_tools_indexes ))
6469+         logger .warning (
6470+             'Tools at indices [%s] are not compatible with automatic function ' 
6471+             'calling. AFC will be disabled.' ,
6472+             indices_str ,
6473+         )
6474+       return  self ._generate_content (
6475+           model = model , contents = contents , config = parsed_config 
6476+       )
6477+ 
64556478    remaining_remote_calls_afc  =  _extra_utils .get_max_remote_calls_afc (
64566479        parsed_config 
64576480    )
@@ -6575,6 +6598,9 @@ def generate_content_stream(
65756598      # scones. 
65766599    """ 
65776600
6601+     incompatible_tools_indexes  =  (
6602+         _extra_utils .find_afc_incompatible_tool_indexes (config )
6603+     )
65786604    parsed_config  =  _extra_utils .parse_config_for_mcp_usage (config )
65796605    if  (
65806606        parsed_config 
@@ -6590,6 +6616,27 @@ def generate_content_stream(
65906616      )
65916617      return 
65926618
6619+     if  incompatible_tools_indexes :
6620+       original_tools_length  =  0 
6621+       if  isinstance (config , types .GenerateContentConfig ):
6622+         if  config .tools :
6623+           original_tools_length  =  len (config .tools )
6624+       elif  isinstance (config , dict ):
6625+         tools  =  config .get ('tools' , [])
6626+         if  tools :
6627+           original_tools_length  =  len (tools )
6628+       if  len (incompatible_tools_indexes ) !=  original_tools_length :
6629+         indices_str  =  ', ' .join (map (str , incompatible_tools_indexes ))
6630+         logger .warning (
6631+             'Tools at indices [%s] are not compatible with automatic function ' 
6632+             'calling. AFC will be disabled.' ,
6633+             indices_str ,
6634+         )
6635+       yield  from  self ._generate_content_stream (
6636+           model = model , contents = contents , config = parsed_config 
6637+       )
6638+       return 
6639+ 
65936640    remaining_remote_calls_afc  =  _extra_utils .get_max_remote_calls_afc (
65946641        parsed_config 
65956642    )
@@ -8172,13 +8219,35 @@ async def generate_content(
81728219      # J'aime les bagels. 
81738220    """ 
81748221    # Retrieve and cache any MCP sessions if provided. 
8222+     incompatible_tools_indexes  =  (
8223+         _extra_utils .find_afc_incompatible_tool_indexes (config )
8224+     )
81758225    parsed_config , mcp_to_genai_tool_adapters  =  (
81768226        await  _extra_utils .parse_config_for_mcp_sessions (config )
81778227    )
81788228    if  _extra_utils .should_disable_afc (parsed_config ):
81798229      return  await  self ._generate_content (
81808230          model = model , contents = contents , config = parsed_config 
81818231      )
8232+     if  incompatible_tools_indexes :
8233+       original_tools_length  =  0 
8234+       if  isinstance (config , types .GenerateContentConfig ):
8235+         if  config .tools :
8236+           original_tools_length  =  len (config .tools )
8237+       elif  isinstance (config , dict ):
8238+         tools  =  config .get ('tools' , [])
8239+         if  tools :
8240+           original_tools_length  =  len (tools )
8241+       if  len (incompatible_tools_indexes ) !=  original_tools_length :
8242+         indices_str  =  ', ' .join (map (str , incompatible_tools_indexes ))
8243+         logger .warning (
8244+             'Tools at indices [%s] are not compatible with automatic function ' 
8245+             'calling. AFC will be disabled.' ,
8246+             indices_str ,
8247+         )
8248+       return  await  self ._generate_content (
8249+           model = model , contents = contents , config = parsed_config 
8250+       )
81828251    remaining_remote_calls_afc  =  _extra_utils .get_max_remote_calls_afc (
81838252        parsed_config 
81848253    )
@@ -8303,6 +8372,10 @@ async def generate_content_stream(
83038372      # scones. 
83048373    """ 
83058374
8375+     # Retrieve and cache any MCP sessions if provided. 
8376+     incompatible_tools_indexes  =  (
8377+         _extra_utils .find_afc_incompatible_tool_indexes (config )
8378+     )
83068379    # Retrieve and cache any MCP sessions if provided. 
83078380    parsed_config , mcp_to_genai_tool_adapters  =  (
83088381        await  _extra_utils .parse_config_for_mcp_sessions (config )
@@ -8318,6 +8391,32 @@ async def base_async_generator(model, contents, config):  # type: ignore[no-unty
83188391
83198392      return  base_async_generator (model , contents , parsed_config )  # type: ignore[no-untyped-call, no-any-return] 
83208393
8394+     if  incompatible_tools_indexes :
8395+       original_tools_length  =  0 
8396+       if  isinstance (config , types .GenerateContentConfig ):
8397+         if  config .tools :
8398+           original_tools_length  =  len (config .tools )
8399+       elif  isinstance (config , dict ):
8400+         tools  =  config .get ('tools' , [])
8401+         if  tools :
8402+           original_tools_length  =  len (tools )
8403+       if  len (incompatible_tools_indexes ) !=  original_tools_length :
8404+         indices_str  =  ', ' .join (map (str , incompatible_tools_indexes ))
8405+         logger .warning (
8406+             'Tools at indices [%s] are not compatible with automatic function ' 
8407+             'calling. AFC will be disabled.' ,
8408+             indices_str ,
8409+         )
8410+       response  =  await  self ._generate_content_stream (
8411+           model = model , contents = contents , config = parsed_config 
8412+       )
8413+ 
8414+       async  def  base_async_generator (model , contents , config ):  # type: ignore[no-untyped-def] 
8415+         async  for  chunk  in  response :  # type: ignore[attr-defined] 
8416+           yield  chunk 
8417+ 
8418+       return  base_async_generator (model , contents , parsed_config )  # type: ignore[no-untyped-call, no-any-return] 
8419+ 
83218420    async  def  async_generator (model , contents , config ):  # type: ignore[no-untyped-def] 
83228421      remaining_remote_calls_afc  =  _extra_utils .get_max_remote_calls_afc (config )
83238422      logger .info (
0 commit comments