Repository: jina-ai/jina
File: jina/hubble/hubio.py (Python)

Code before:
                Panel.fit(
                    '''
[bold]Dockerfile[/bold] describes how this executor will be built. It is useful when
your executor has non-trivial dependencies or must be run under certain environment.

- If [bold]Dockerfile[/bold] is not given, Jina Cloud automatically generates one.
- If [bold]Dockerfile[/bold] is provided by you, then Jina Cloud will respect it when building the Executor.

Here are some Dockerfile templates for you to choose from:
- [b]cpu[/b]: CPU-only executor with Jina as base image
- [b]torch-gpu[/b]: GPU enabled executor with PyTorch as the base image
- [b]tf-gpu[/b]: GPU enabled executor with Tensorflow as the base image
''',
                    title=':package: [bold]Dockerfile[/bold]',
                    width=80,
                )
            )

            is_dockerfile = self.args.dockerfile or Prompt.ask(
                ':grey_question: Select how you want to generate the [bold]Dockerfile[/bold] for this Executor?',
                choices=['cpu', 'torch-gpu', 'tf-gpu', 'none'],
                default='cpu',
            )

            print(
                Panel.fit(
                    '''
Meta information helps other users to identify, search and reuse your Executor on Jina Cloud.
''',
                    title=':name_badge: [bold]Meta Info[/bold]',
                    width=80,
                )
            )

            exec_description = (
                self.args.description
                if self.args.description
                else (
                    Prompt.ask(
                        ':grey_question: Please give a [bold]short description[/bold] of your executor?\n'
                        f'[dim]Example: {exec_name} embeds images into 128-dim vectors using ResNet.[/dim]'
                    )
                )
            )

            exec_keywords = (
                self.args.keywords
                if self.args.keywords
                else (
                    Prompt.ask(
                        ':grey_question: Please give some [bold]keywords[/bold] to help people search your executor [dim](separated by comma)[/dim]\n'

Review comment (suggestion):
```suggestion
            if isinstance(is_dockerfile, str) and 'gpu' in is_dockerfile:
                print(Panel.fit('GPU dockerfiles expect requirements to come from "gpu_requirements.txt", make sure to provide extra dependencies in this file.'))
            print(
```

Code after:
                Panel.fit(
                    '''
[bold]Dockerfile[/bold] describes how this executor will be built. It is useful when
your executor has non-trivial dependencies or must be run under certain environment.

- If [bold]Dockerfile[/bold] is not given, Jina Cloud automatically generates one.
- If [bold]Dockerfile[/bold] is provided by you, then Jina Cloud will respect it when building the Executor.

Here are some Dockerfile templates for you to choose from:
- [b]cpu[/b]: CPU-only executor with Jina as base image;
- [b]torch-gpu[/b]: GPU enabled executor with PyTorch as the base image;
- [b]tf-gpu[/b]: GPU enabled executor with Tensorflow as the base image;
- [b]jax-gpu[/b]: GPU enabled executor with JAX installed.
''',
                    title=':package: [bold]Dockerfile[/bold]',
                    width=80,
                )
            )

            is_dockerfile = self.args.dockerfile or Prompt.ask(
                ':grey_question: Select how you want to generate the [bold]Dockerfile[/bold] for this Executor?',
                choices=['cpu', 'torch-gpu', 'tf-gpu', 'jax-gpu', 'none'],
                default='cpu',
            )

            print(
                Panel.fit(
                    '''
Meta information helps other users to identify, search and reuse your Executor on Jina Cloud.
''',
                    title=':name_badge: [bold]Meta Info[/bold]',
                    width=80,
                )
            )

            exec_description = (
                self.args.description
                if self.args.description
                else (
                    Prompt.ask(
                        ':grey_question: Please give a [bold]short description[/bold] of your executor?\n'
                        f'[dim]Example: {exec_name} embeds images into 128-dim vectors using ResNet.[/dim]'
                    )
                )
            )

            exec_keywords = (
                self.args.keywords
                if self.args.keywords
                else (
                    Prompt.ask(