brainstorming
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or planning anything new, in software or out of it (a talk, a business, a renovation).
service-authoringAuthor BentoML services and APIs with the current class-based SDK, including service decorators, API/task endpoints, IO specs, batching, dependencies, lifecycle hooks, ASGI/Gradio/WebSocket/streaming integrations, GPU/runtime hints, and service-loading checks.
Independent GitHub snapshot · Automated classification · Original documentation governs
Use this sub-skill when creating or debugging service.py and other BentoML service modules. It focuses on Python SDK authoring, not Bento packaging, model-store import mechanics, client usage, observability, cloud deployment, or CLI operations.
bentoml build, Bento image/container settings, bentofile.yaml, include/exclude rules, or containerization, use ../packaging-and-containerization/SKILL.md.bentoml serve, SyncHTTPClient, AsyncHTTPClient, HTTP calls, and server flags, use ../serving-and-clients/SKILL.md.../model-management/SKILL.md.../observability-and-operations/SKILL.md.bentoml deploy, BentoCloud resources, secrets, and deployment config, use ../cli-and-cloud/SKILL.md.service.py, and assign the decorated class at module scope.@bentoml.service or @bentoml.service(...); default service name is the class name.__init__, lifecycle hooks, or with bentoml.importing(): if they may be absent during tooling/import-only phases.@bentoml.api or @bentoml.api(...); use @bentoml.task only for asynchronous task-queue endpoints.input_spec= / output_spec= so BentoML can infer request/response schemas.scripts/validate_service_target.py --target service:MyService --working-dir ..from __future__ import annotations
import bentoml
@bentoml.service(name="text_tools", path_prefix="/v1")
class TextTools:
@bentoml.api(route="/echo", name="echo")
def echo(self, text: str) -> str:
return text
@bentoml.api(batchable=True, max_batch_size=32, max_latency_ms=1000)
def summarize(self, texts: list[str]) -> list[str]:
return [text[:80] for text in texts]
Generate a fuller starter service with:
python skills/bentoml/sub-skills/service-authoring/scripts/create_minimal_service.py --output service.py --class-name TextTools
@bentoml.service(...) accepts name, image, description, path_prefix, envs, labels, cmd, service_class, and service config kwargs such as resources, workers, traffic, metrics, and logging.path_prefix="/v1" applies to BentoML API routes, mounted ASGI apps, and health endpoints such as /v1/livez and /v1/readyz.@bentoml.api(...) and @bentoml.task(...) share route, name, input_spec, output_spec, batchable, batch_dim, max_batch_size, and max_latency_ms; task endpoints must not return a stream.bentoml.Context, return the matching batched structure, and set batch_dim=(input_dim, output_dim) when input and output split axes differ.bentoml.depends(OtherService) for service composition; call blocking dependency APIs through .to_async from async endpoints.bentoml.images.Image(...).python_packages(...) and envs=[...] as service-level runtime hints, but route full packaging decisions to packaging guidance.@bentoml.on_deployment for once-before-workers setup, @bentoml.on_startup for per-worker startup, @bentoml.on_shutdown for cleanup, and __is_alive__ / __is_ready__ for health checks.@bentoml.asgi_app(app, path="/app"), and use bentoml.get_current_service() or class-route self to access service state.Interface/Blocks and mount with @bentoml.gradio.mount_gradio_app(blocks, path="/ui"); include fastapi and gradio in the runtime environment.@app.websocket(...); BentoML Python clients do not handle WebSocket endpoints, so author a direct WebSocket client for tests or consumers.Generator[...] or AsyncGenerator[...] from @bentoml.api; BentoML defaults stream media type to text/event-stream when no explicit media type is inferred.resources={"gpu": 1} or resources={"gpu": 2} on the service and select framework devices in __init__; use bentoml.server_context.worker_index when mapping multiple workers to devices.references/api-reference.md for decorator signatures, route/schema choices, IO validators, and lifecycle/API patterns.references/workflows.md for common recipes: minimal services, batching, tasks, composition, ASGI/Gradio/WebSocket/streaming, and validation loops.references/troubleshooting.md for import target errors, missing runtime dependencies, invalid specs, batching mismatch, optional dependency gaps, service init side effects, and async task misuse.scripts/create_minimal_service.py to generate a safe starter service without relying on repository examples.scripts/validate_service_target.py to import a user service target from a chosen working directory and inspect APIs/tasks/routes without serving it.