Skip to content

Commit

Permalink
feat: add min_concurrency
Browse files Browse the repository at this point in the history
  • Loading branch information
isidentical committed Jan 21, 2024
1 parent 9b42407 commit 6ccf6ba
Show file tree
Hide file tree
Showing 6 changed files with 109 additions and 46 deletions.
10 changes: 10 additions & 0 deletions projects/fal/src/fal/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
from fal.sdk import (
FAL_SERVERLESS_DEFAULT_KEEP_ALIVE,
FAL_SERVERLESS_DEFAULT_MAX_MULTIPLEXING,
FAL_SERVERLESS_DEFAULT_MIN_CONCURRENCY,
Credentials,
FalServerlessClient,
FalServerlessConnection,
Expand Down Expand Up @@ -309,6 +310,7 @@ class FalServerlessHost(Host):
"machine_type",
"keep_alive",
"max_concurrency",
"min_concurrency",
"max_multiplexing",
"setup_function",
"metadata",
Expand Down Expand Up @@ -352,6 +354,7 @@ def register(
)
keep_alive = options.host.get("keep_alive", FAL_SERVERLESS_DEFAULT_KEEP_ALIVE)
max_concurrency = options.host.get("max_concurrency")
min_concurrency = options.host.get("min_concurrency")
max_multiplexing = options.host.get("max_multiplexing")
base_image = options.host.get("_base_image", None)
scheduler = options.host.get("_scheduler", None)
Expand All @@ -367,6 +370,7 @@ def register(
scheduler_options=scheduler_options,
max_multiplexing=max_multiplexing,
max_concurrency=max_concurrency,
min_concurrency=min_concurrency,
)

partial_func = _prepare_partial_func(func)
Expand Down Expand Up @@ -416,6 +420,7 @@ def run(
)
keep_alive = options.host.get("keep_alive", FAL_SERVERLESS_DEFAULT_KEEP_ALIVE)
max_concurrency = options.host.get("max_concurrency")
min_concurrency = options.host.get("min_concurrency")
max_multiplexing = options.host.get("max_multiplexing")
base_image = options.host.get("_base_image", None)
scheduler = options.host.get("_scheduler", None)
Expand All @@ -432,6 +437,7 @@ def run(
scheduler_options=scheduler_options,
max_multiplexing=max_multiplexing,
max_concurrency=max_concurrency,
min_concurrency=min_concurrency,
)

return_value = _UNSET
Expand Down Expand Up @@ -556,6 +562,7 @@ def function(
machine_type: str = FAL_SERVERLESS_DEFAULT_MACHINE_TYPE,
keep_alive: int = FAL_SERVERLESS_DEFAULT_KEEP_ALIVE,
max_multiplexing: int = FAL_SERVERLESS_DEFAULT_MAX_MULTIPLEXING,
min_concurrency: int = FAL_SERVERLESS_DEFAULT_MIN_CONCURRENCY,
setup_function: Callable[..., None] | None = None,
_base_image: str | None = None,
_scheduler: str | None = None,
Expand All @@ -581,6 +588,7 @@ def function(
machine_type: str = FAL_SERVERLESS_DEFAULT_MACHINE_TYPE,
keep_alive: int = FAL_SERVERLESS_DEFAULT_KEEP_ALIVE,
max_multiplexing: int = FAL_SERVERLESS_DEFAULT_MAX_MULTIPLEXING,
min_concurrency: int = FAL_SERVERLESS_DEFAULT_MIN_CONCURRENCY,
setup_function: Callable[..., None] | None = None,
_base_image: str | None = None,
_scheduler: str | None = None,
Expand Down Expand Up @@ -658,6 +666,7 @@ def function(
machine_type: str = FAL_SERVERLESS_DEFAULT_MACHINE_TYPE,
keep_alive: int = FAL_SERVERLESS_DEFAULT_KEEP_ALIVE,
max_multiplexing: int = FAL_SERVERLESS_DEFAULT_MAX_MULTIPLEXING,
min_concurrency: int = FAL_SERVERLESS_DEFAULT_MIN_CONCURRENCY,
setup_function: Callable[..., None] | None = None,
_base_image: str | None = None,
_scheduler: str | None = None,
Expand Down Expand Up @@ -688,6 +697,7 @@ def function(
machine_type: str = FAL_SERVERLESS_DEFAULT_MACHINE_TYPE,
keep_alive: int = FAL_SERVERLESS_DEFAULT_KEEP_ALIVE,
max_multiplexing: int = FAL_SERVERLESS_DEFAULT_MAX_MULTIPLEXING,
min_concurrency: int = FAL_SERVERLESS_DEFAULT_MIN_CONCURRENCY,
setup_function: Callable[..., None] | None = None,
_base_image: str | None = None,
_scheduler: str | None = None,
Expand Down
5 changes: 5 additions & 0 deletions projects/fal/src/fal/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -365,6 +365,7 @@ def _alias_table(aliases: list[AliasInfo]):
table.add_column("Alias")
table.add_column("Revision")
table.add_column("Auth")
table.add_column("Min Concurrency")
table.add_column("Max Concurrency")
table.add_column("Max Multiplexing")
table.add_column("Keep Alive")
Expand All @@ -375,6 +376,7 @@ def _alias_table(aliases: list[AliasInfo]):
app_alias.alias,
app_alias.revision,
app_alias.auth_mode,
str(app_alias.min_concurrency),
str(app_alias.max_concurrency),
str(app_alias.max_multiplexing),
str(app_alias.keep_alive),
Expand Down Expand Up @@ -429,6 +431,7 @@ def alias_list(client: api.FalServerlessClient):
@click.option("--keep-alive", "-k", type=int)
@click.option("--max-multiplexing", "-m", type=int)
@click.option("--max-concurrency", "-c", type=int)
@click.option("--min-concurrency", type=int)
# TODO: add auth_mode
# @click.option(
# "--auth",
Expand All @@ -442,6 +445,7 @@ def alias_update(
keep_alive: int | None,
max_multiplexing: int | None,
max_concurrency: int | None,
min_concurrency: int | None,
):
with client.connect() as connection:
if keep_alive is None and max_multiplexing is None and max_concurrency is None:
Expand All @@ -453,6 +457,7 @@ def alias_update(
keep_alive=keep_alive,
max_multiplexing=max_multiplexing,
max_concurrency=max_concurrency,
min_concurrency=min_concurrency,
)
table = _alias_table([alias_info])

Expand Down
8 changes: 8 additions & 0 deletions projects/fal/src/fal/sdk.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
_DEFAULT_SERIALIZATION_METHOD = "dill"
FAL_SERVERLESS_DEFAULT_KEEP_ALIVE = 10
FAL_SERVERLESS_DEFAULT_MAX_MULTIPLEXING = 1
FAL_SERVERLESS_DEFAULT_MIN_CONCURRENCY = 0

log = get_logger(__name__)

Expand Down Expand Up @@ -188,6 +189,7 @@ class AliasInfo:
max_concurrency: int
max_multiplexing: int
active_runners: int
min_concurrency: int


@dataclass
Expand Down Expand Up @@ -272,6 +274,7 @@ def _from_grpc_alias_info(message: isolate_proto.AliasInfo) -> AliasInfo:
max_concurrency=message.max_concurrency,
max_multiplexing=message.max_multiplexing,
active_runners=message.active_runners,
min_concurrency=message.min_concurrency,
)


Expand Down Expand Up @@ -330,6 +333,7 @@ class MachineRequirements:
scheduler_options: dict[str, Any] | None = None
max_concurrency: int | None = None
max_multiplexing: int | None = None
min_concurrency: int | None = None


@dataclass
Expand Down Expand Up @@ -425,6 +429,7 @@ def register(
machine_requirements.scheduler_options or {}
),
max_concurrency=machine_requirements.max_concurrency,
min_concurrency=machine_requirements.min_concurrency,
max_multiplexing=machine_requirements.max_multiplexing,
)
else:
Expand Down Expand Up @@ -462,12 +467,14 @@ def update_application(
keep_alive: int | None = None,
max_multiplexing: int | None = None,
max_concurrency: int | None = None,
min_concurrency: int | None = None,
) -> AliasInfo:
request = isolate_proto.UpdateApplicationRequest(
application_name=application_name,
keep_alive=keep_alive,
max_multiplexing=max_multiplexing,
max_concurrency=max_concurrency,
min_concurrency=min_concurrency,
)
res: isolate_proto.UpdateApplicationResult = self.stub.UpdateApplication(
request
Expand Down Expand Up @@ -496,6 +503,7 @@ def run(
),
max_concurrency=machine_requirements.max_concurrency,
max_multiplexing=machine_requirements.max_multiplexing,
min_concurrency=machine_requirements.min_concurrency,
)
else:
wrapped_requirements = None
Expand Down
3 changes: 3 additions & 0 deletions projects/isolate_proto/src/isolate_proto/controller.proto
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,7 @@ message MachineRequirements {
optional google.protobuf.Struct scheduler_options = 8;
optional int32 max_multiplexing = 6;
optional int32 max_concurrency = 9;
optional int32 min_concurrency = 10;
}

enum ApplicationAuthMode {
Expand Down Expand Up @@ -189,6 +190,7 @@ message UpdateApplicationRequest {
optional int32 keep_alive = 2;
optional int32 max_multiplexing = 3;
optional int32 max_concurrency = 4;
optional int32 min_concurrency = 5;
}

message UpdateApplicationResult {
Expand Down Expand Up @@ -229,6 +231,7 @@ message AliasInfo {
int32 max_multiplexing = 5;
int32 keep_alive = 6;
int32 active_runners = 7;
int32 min_concurrency = 8;
}

message SetSecretRequest {
Expand Down
Loading

0 comments on commit 6ccf6ba

Please sign in to comment.