I think you should consider a new approach: not defining the output name inside the model (even if you think now that it will always be related to the input) if not using batch mode. This allows you to be flexible on the definition of the output name and use the Input name or use a new one if you need to.
It is quite easy to give the output the name of the Input layer. User this code in the output:
'C:/Users/user/Desktop/' || @layer || '_new' || '.gpkg'
This will automatically replace that @layer for the object called @layer within the model (see screenshots). Just find how the object is called within the model and substitute it keeping the @ before.
Here are some screepshots of the process:
Layer with different names and a simple model that do some calculation.

Execute your model in batch mode and, instead of select each output name, go to 'calculate by expression' and use the above structure:

After writting yours correctly, the output names are going to be filled using the input (@layer) name:
