Skip to content

Commit 6ebfce7

Browse files
committed
Added ollama container scaling
1 parent 264ee9a commit 6ebfce7

1 file changed

Lines changed: 54 additions & 3 deletions

File tree

gen_compose.py

Lines changed: 54 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,19 @@ def expand_service(name, service, replicas, preview_paths=None):
136136
return services
137137

138138

139+
def expand_ollama_service(name, service, replicas):
140+
services = expand_service(name, service, replicas)
141+
142+
if replicas == 1:
143+
return services
144+
145+
for i in range(1, replicas + 1):
146+
replica_name = f"{name}-{i}"
147+
services[replica_name]["devices"] = [f"nvidia.com/gpu={i - 1}"]
148+
149+
return services
150+
151+
139152
def expand_depends_on(depends_on, replica_counts):
140153
if isinstance(depends_on, dict):
141154
expanded = {}
@@ -185,6 +198,7 @@ def haproxy_dependencies(
185198
services,
186199
backend_n,
187200
litellm_n,
201+
ollama_n,
188202
available_mcp_servers,
189203
mcp_replica_n,
190204
):
@@ -197,7 +211,8 @@ def haproxy_dependencies(
197211
)
198212

199213
dependencies.extend(service_instance_names("litellm", litellm_n, services))
200-
dependencies.extend(["mongodb", "ollama"])
214+
dependencies.append("mongodb")
215+
dependencies.extend(service_instance_names("ollama", ollama_n, services))
201216

202217
return [dependency for dependency in dependencies if dependency in services]
203218

@@ -217,7 +232,14 @@ def haproxy_backend(name, port, service_names, sticky_mode=None):
217232

218233

219234
def generate_haproxy(
220-
services, backend_n, backend_port, litellm_n, server_list, replica_dict, port_dict
235+
services,
236+
backend_n,
237+
backend_port,
238+
litellm_n,
239+
ollama_n,
240+
server_list,
241+
replica_dict,
242+
port_dict,
221243
):
222244
conf = []
223245

@@ -246,6 +268,10 @@ def generate_haproxy(
246268
"frontend fe_litellm\n bind *:4000\n default_backend be_litellm\n\n"
247269
)
248270

271+
conf.append(
272+
"frontend fe_ollama\n bind *:11434\n default_backend be_ollama\n\n"
273+
)
274+
249275
for s in server_list:
250276
conf.append(
251277
f"frontend fe_{s}\n"
@@ -271,6 +297,15 @@ def generate_haproxy(
271297
)
272298
)
273299

300+
conf.append(
301+
haproxy_backend(
302+
"ollama",
303+
11434,
304+
service_instance_names("ollama", ollama_n, services),
305+
"leastconn",
306+
)
307+
)
308+
274309
for s in server_list:
275310
conf.append(
276311
haproxy_backend(
@@ -377,6 +412,7 @@ def main():
377412
backend_target_port = os.environ.get("CLIMATECLAW_TARGET_PORT", "8502")
378413
backend_n = int(os.environ.get("CLIMATECLAW_BACKEND_REPLICAS", "1"))
379414
litellm_n = int(os.environ.get("CLIMATECLAW_LITELLM_REPLICAS", "1"))
415+
ollama_n = int(os.environ.get("CLIMATECLAW_OLLAMA_REPLICAS", "1"))
380416

381417
available_mcp_servers = [
382418
s
@@ -415,6 +451,7 @@ def main():
415451
replica_counts = {
416452
"climateclaw": backend_n,
417453
"litellm": litellm_n,
454+
"ollama": ollama_n,
418455
**mcp_replica_n,
419456
}
420457

@@ -424,6 +461,8 @@ def main():
424461
new_services.update(expand_service(name, svc, backend_n))
425462
elif name == "litellm":
426463
new_services.update(expand_service(name, svc, litellm_n))
464+
elif name == "ollama":
465+
new_services.update(expand_ollama_service(name, svc, ollama_n))
427466
elif name in MCP_SERVICES:
428467
if name == "code-server":
429468
new_services.update(expand_service(name, svc, backend_n, preview_paths))
@@ -459,16 +498,27 @@ def main():
459498

460499
network_name = list(base["networks"].keys())[0]
461500

501+
haproxy_network = (
502+
{
503+
network_name: {
504+
"aliases": ["ollama"],
505+
}
506+
}
507+
if ollama_n > 1
508+
else [network_name]
509+
)
510+
462511
new_services["haproxy"] = {
463512
"image": "haproxy:3.0-alpine",
464513
"user": "0:0",
465514
"ports": dev_ports if "dev" in compose_path else prod_ports,
466515
"volumes": ["./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro"],
467-
"networks": [network_name],
516+
"networks": haproxy_network,
468517
"depends_on": haproxy_dependencies(
469518
new_services,
470519
backend_n,
471520
litellm_n,
521+
ollama_n,
472522
available_mcp_servers,
473523
mcp_replica_n,
474524
),
@@ -509,6 +559,7 @@ def main():
509559
backend_n,
510560
backend_port,
511561
litellm_n,
562+
ollama_n,
512563
available_mcp_servers,
513564
mcp_replica_n,
514565
port_dict,

0 commit comments

Comments
 (0)