mirror of
https://github.com/bentoml/OpenLLM.git
synced 2025-12-23 23:57:46 -05:00
54 lines
2.2 KiB
Python
54 lines
2.2 KiB
Python
from __future__ import annotations
|
|
import typing as t
|
|
|
|
import click
|
|
from simple_di import Provide, inject
|
|
|
|
import bentoml
|
|
from bentoml._internal.bento.bento import BentoInfo
|
|
from bentoml._internal.bento.build_config import DockerOptions
|
|
from bentoml._internal.configuration.containers import BentoMLContainer
|
|
from bentoml._internal.container.generate import generate_containerfile
|
|
from openllm_cli import termui
|
|
from openllm_cli._factory import bento_complete_envvar
|
|
from openllm_core.utils import converter
|
|
|
|
if t.TYPE_CHECKING:
|
|
from bentoml._internal.bento import BentoStore
|
|
|
|
|
|
@click.command(
|
|
'get_containerfile', context_settings=termui.CONTEXT_SETTINGS, help='Return Containerfile of any given Bento.'
|
|
)
|
|
@click.argument('bento', type=str, shell_complete=bento_complete_envvar)
|
|
@click.pass_context
|
|
@inject
|
|
def cli(ctx: click.Context, bento: str, _bento_store: BentoStore = Provide[BentoMLContainer.bento_store]) -> str:
|
|
try:
|
|
bentomodel = _bento_store.get(bento)
|
|
except bentoml.exceptions.NotFound:
|
|
ctx.fail(f'Bento {bento} not found. Make sure to call `openllm build` first.')
|
|
# The logic below are similar to bentoml._internal.container.construct_containerfile
|
|
with open(bentomodel.path_of('bento.yaml'), 'r') as f:
|
|
options = BentoInfo.from_yaml_file(f)
|
|
# NOTE: dockerfile_template is already included in the
|
|
# Dockerfile inside bento, and it is not relevant to
|
|
# construct_containerfile. Hence it is safe to set it to None here.
|
|
# See https://github.com/bentoml/BentoML/issues/3399.
|
|
docker_attrs = converter.unstructure(options.docker)
|
|
# NOTE: if users specify a dockerfile_template, we will
|
|
# save it to /env/docker/Dockerfile.template. This is necessary
|
|
# for the reconstruction of the Dockerfile.
|
|
if 'dockerfile_template' in docker_attrs and docker_attrs['dockerfile_template'] is not None:
|
|
docker_attrs['dockerfile_template'] = 'env/docker/Dockerfile.template'
|
|
doc = generate_containerfile(
|
|
docker=DockerOptions(**docker_attrs),
|
|
build_ctx=bentomodel.path,
|
|
conda=options.conda,
|
|
bento_fs=bentomodel._fs,
|
|
enable_buildkit=True,
|
|
add_header=True,
|
|
)
|
|
termui.echo(doc, fg='white')
|
|
return bentomodel.path
|