Skip to content

Commit aa31f05

Browse files
committed
support model config
1 parent 098e8f1 commit aa31f05

File tree

9 files changed

+497
-83
lines changed

9 files changed

+497
-83
lines changed

cli/homl_cli/daemon_pb2.py

Lines changed: 51 additions & 35 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cli/homl_cli/daemon_pb2_grpc.py

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,21 @@ def __init__(self, channel):
6565
request_serializer=daemon__pb2.VersionRequest.SerializeToString,
6666
response_deserializer=daemon__pb2.VersionResponse.FromString,
6767
_registered_method=True)
68+
self.ConfigModel = channel.unary_unary(
69+
'/homl.Daemon/ConfigModel',
70+
request_serializer=daemon__pb2.ModelSettingsRequest.SerializeToString,
71+
response_deserializer=daemon__pb2.ModelConfigResponse.FromString,
72+
_registered_method=True)
73+
self.ConfigModelParam = channel.unary_unary(
74+
'/homl.Daemon/ConfigModelParam',
75+
request_serializer=daemon__pb2.ModelParamRequest.SerializeToString,
76+
response_deserializer=daemon__pb2.ModelConfigResponse.FromString,
77+
_registered_method=True)
78+
self.GetModelConfig = channel.unary_unary(
79+
'/homl.Daemon/GetModelConfig',
80+
request_serializer=daemon__pb2.ModelInfoRequest.SerializeToString,
81+
response_deserializer=daemon__pb2.ModelConfigResponse.FromString,
82+
_registered_method=True)
6883

6984

7085
class DaemonServicer(object):
@@ -112,6 +127,24 @@ def Version(self, request, context):
112127
context.set_details('Method not implemented!')
113128
raise NotImplementedError('Method not implemented!')
114129

130+
def ConfigModel(self, request, context):
131+
"""Missing associated documentation comment in .proto file."""
132+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
133+
context.set_details('Method not implemented!')
134+
raise NotImplementedError('Method not implemented!')
135+
136+
def ConfigModelParam(self, request, context):
137+
"""Missing associated documentation comment in .proto file."""
138+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
139+
context.set_details('Method not implemented!')
140+
raise NotImplementedError('Method not implemented!')
141+
142+
def GetModelConfig(self, request, context):
143+
"""Missing associated documentation comment in .proto file."""
144+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
145+
context.set_details('Method not implemented!')
146+
raise NotImplementedError('Method not implemented!')
147+
115148

116149
def add_DaemonServicer_to_server(servicer, server):
117150
rpc_method_handlers = {
@@ -145,6 +178,21 @@ def add_DaemonServicer_to_server(servicer, server):
145178
request_deserializer=daemon__pb2.VersionRequest.FromString,
146179
response_serializer=daemon__pb2.VersionResponse.SerializeToString,
147180
),
181+
'ConfigModel': grpc.unary_unary_rpc_method_handler(
182+
servicer.ConfigModel,
183+
request_deserializer=daemon__pb2.ModelSettingsRequest.FromString,
184+
response_serializer=daemon__pb2.ModelConfigResponse.SerializeToString,
185+
),
186+
'ConfigModelParam': grpc.unary_unary_rpc_method_handler(
187+
servicer.ConfigModelParam,
188+
request_deserializer=daemon__pb2.ModelParamRequest.FromString,
189+
response_serializer=daemon__pb2.ModelConfigResponse.SerializeToString,
190+
),
191+
'GetModelConfig': grpc.unary_unary_rpc_method_handler(
192+
servicer.GetModelConfig,
193+
request_deserializer=daemon__pb2.ModelInfoRequest.FromString,
194+
response_serializer=daemon__pb2.ModelConfigResponse.SerializeToString,
195+
),
148196
}
149197
generic_handler = grpc.method_handlers_generic_handler(
150198
'homl.Daemon', rpc_method_handlers)
@@ -318,3 +366,84 @@ def Version(request,
318366
timeout,
319367
metadata,
320368
_registered_method=True)
369+
370+
@staticmethod
371+
def ConfigModel(request,
372+
target,
373+
options=(),
374+
channel_credentials=None,
375+
call_credentials=None,
376+
insecure=False,
377+
compression=None,
378+
wait_for_ready=None,
379+
timeout=None,
380+
metadata=None):
381+
return grpc.experimental.unary_unary(
382+
request,
383+
target,
384+
'/homl.Daemon/ConfigModel',
385+
daemon__pb2.ModelSettingsRequest.SerializeToString,
386+
daemon__pb2.ModelConfigResponse.FromString,
387+
options,
388+
channel_credentials,
389+
insecure,
390+
call_credentials,
391+
compression,
392+
wait_for_ready,
393+
timeout,
394+
metadata,
395+
_registered_method=True)
396+
397+
@staticmethod
398+
def ConfigModelParam(request,
399+
target,
400+
options=(),
401+
channel_credentials=None,
402+
call_credentials=None,
403+
insecure=False,
404+
compression=None,
405+
wait_for_ready=None,
406+
timeout=None,
407+
metadata=None):
408+
return grpc.experimental.unary_unary(
409+
request,
410+
target,
411+
'/homl.Daemon/ConfigModelParam',
412+
daemon__pb2.ModelParamRequest.SerializeToString,
413+
daemon__pb2.ModelConfigResponse.FromString,
414+
options,
415+
channel_credentials,
416+
insecure,
417+
call_credentials,
418+
compression,
419+
wait_for_ready,
420+
timeout,
421+
metadata,
422+
_registered_method=True)
423+
424+
@staticmethod
425+
def GetModelConfig(request,
426+
target,
427+
options=(),
428+
channel_credentials=None,
429+
call_credentials=None,
430+
insecure=False,
431+
compression=None,
432+
wait_for_ready=None,
433+
timeout=None,
434+
metadata=None):
435+
return grpc.experimental.unary_unary(
436+
request,
437+
target,
438+
'/homl.Daemon/GetModelConfig',
439+
daemon__pb2.ModelInfoRequest.SerializeToString,
440+
daemon__pb2.ModelConfigResponse.FromString,
441+
options,
442+
channel_credentials,
443+
insecure,
444+
call_credentials,
445+
compression,
446+
wait_for_ready,
447+
timeout,
448+
metadata,
449+
_registered_method=True)

cli/homl_cli/main.py

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,31 @@ def config_list():
8080
# Do not print credentials or sensitive values
8181
click.echo(f" Current value: {value}")
8282

83+
@config_cli.command("model")
84+
@click.argument("model_name", required=True)
85+
@click.option("--params", help="launch params")
86+
@click.option("--get", is_flag=True, help="Get model configuration")
87+
def config_model(model_name, params, get):
88+
"""Manage model-specific configuration."""
89+
stub = get_client_stub()
90+
if not stub:
91+
click.secho("HoML server is not running.", fg="red")
92+
return
93+
if get:
94+
"""Get model configuration."""
95+
96+
response = stub.GetModelConfig(daemon_pb2.ModelInfoRequest(model_name=model_name))
97+
elif params:
98+
params = params.split(" ")
99+
response = stub.ConfigModelParam(daemon_pb2.ModelParamRequest(
100+
model_name=model_name,
101+
params=daemon_pb2.ModelParam(params=params)
102+
))
103+
click.echo(f"Model settings for '{model_name}': {response.params.params}: \"{' '.join(response.params.params)}\"")
104+
105+
106+
107+
83108

84109
main.add_command(config_cli, name="config")
85110

@@ -211,7 +236,8 @@ def stop(model_name):
211236

212237
@main.command()
213238
@click.argument('model_name')
214-
def pull(model_name):
239+
@click.option('--config', 'refresh_config', is_flag=True, help="Refresh the model config. Local config will be overridden if conflict with the model default.")
240+
def pull(model_name, refresh_config):
215241
"""Pulls a model from a registry."""
216242
stub = get_client_stub()
217243
if "gptoss" in model_name.lower():
@@ -235,7 +261,7 @@ def pull(model_name):
235261
click.echo(f"Pulling model '{model_name}'...")
236262
try:
237263
responses = stub.PullModel(daemon_pb2.PullModelRequest(
238-
model_name=model_name, hf_token=hf_token))
264+
model_name=model_name, hf_token=hf_token, refresh_config=refresh_config))
239265
for resp in responses:
240266
msg = resp.message
241267
percent = resp.percent

protos/daemon.proto

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,38 @@ service Daemon {
2424
rpc ListLocalModels (ListLocalModelsRequest) returns (ListLocalModelsResponse) {}
2525

2626
rpc Version (VersionRequest) returns (VersionResponse) {}
27+
28+
rpc ConfigModel(ModelSettingsRequest) returns (ModelConfigResponse) {}
29+
rpc ConfigModelParam(ModelParamRequest) returns (ModelConfigResponse) {}
30+
rpc GetModelConfig(ModelInfoRequest) returns (ModelConfigResponse) {}
2731
}
2832

2933

3034

3135
// --- Messages ---
36+
message ModelSettings {
37+
map<string, string> settings = 1;
38+
}
39+
message ModelParam {
40+
repeated string params = 1;
41+
}
42+
message ModelConfigResponse {
43+
ModelSettings settings = 1;
44+
ModelParam params = 2;
45+
}
46+
message ModelSettingsRequest {
47+
string model_name = 1;
48+
ModelSettings settings = 2;
49+
}
50+
message ModelParamRequest {
51+
string model_name = 1;
52+
ModelParam params = 2;
53+
}
54+
55+
message ModelInfoRequest {
56+
string model_name = 1;
57+
}
58+
3259
message VersionRequest {
3360
}
3461
message VersionResponse {
@@ -38,6 +65,7 @@ message VersionResponse {
3865
message PullModelRequest {
3966
string model_name = 1;
4067
string hf_token = 2;
68+
bool refresh_config = 3;
4169
}
4270

4371
message PullModelResponse {
@@ -55,6 +83,8 @@ message PullModelProgress {
5583
message StartModelRequest {
5684
string model_name = 1;
5785
bool eager_mode = 2;
86+
ModelParam params = 3;
87+
bool use_params = 4;
5888
}
5989

6090
message StartModelResponse {

0 commit comments

Comments
 (0)