Skip to content

Commit 54d73de

Browse files
committed
Implemented ollama container scaling
1 parent dbc9a8d commit 54d73de

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
@@ -42,6 +42,19 @@ def expand_service(name, service, replicas):
4242
return services
4343

4444

45+
def expand_ollama_service(name, service, replicas):
46+
services = expand_service(name, service, replicas)
47+
48+
if replicas == 1:
49+
return services
50+
51+
for i in range(1, replicas + 1):
52+
replica_name = f"{name}-{i}"
53+
services[replica_name]["devices"] = [f"nvidia.com/gpu={i - 1}"]
54+
55+
return services
56+
57+
4558
def expand_depends_on(depends_on, replica_counts):
4659
if isinstance(depends_on, dict):
4760
expanded = {}
@@ -91,6 +104,7 @@ def haproxy_dependencies(
91104
services,
92105
backend_n,
93106
litellm_n,
107+
ollama_n,
94108
available_mcp_servers,
95109
mcp_replica_n,
96110
):
@@ -103,7 +117,8 @@ def haproxy_dependencies(
103117
)
104118

105119
dependencies.extend(service_instance_names("litellm", litellm_n, services))
106-
dependencies.extend(["mongodb", "ollama"])
120+
dependencies.append("mongodb")
121+
dependencies.extend(service_instance_names("ollama", ollama_n, services))
107122

108123
return [dependency for dependency in dependencies if dependency in services]
109124

@@ -122,7 +137,14 @@ def haproxy_backend(name, port, service_names, sticky_mode=None):
122137

123138

124139
def generate_haproxy(
125-
services, backend_n, backend_port, litellm_n, server_list, replica_dict, port_dict
140+
services,
141+
backend_n,
142+
backend_port,
143+
litellm_n,
144+
ollama_n,
145+
server_list,
146+
replica_dict,
147+
port_dict,
126148
):
127149
conf = []
128150

@@ -151,6 +173,10 @@ def generate_haproxy(
151173
"frontend fe_litellm\n bind *:4000\n default_backend be_litellm\n\n"
152174
)
153175

176+
conf.append(
177+
"frontend fe_ollama\n bind *:11434\n default_backend be_ollama\n\n"
178+
)
179+
154180
for s in server_list:
155181
conf.append(
156182
f"frontend fe_{s}\n"
@@ -176,6 +202,15 @@ def generate_haproxy(
176202
)
177203
)
178204

205+
conf.append(
206+
haproxy_backend(
207+
"ollama",
208+
11434,
209+
service_instance_names("ollama", ollama_n, services),
210+
"leastconn",
211+
)
212+
)
213+
179214
for s in server_list:
180215
conf.append(
181216
haproxy_backend(
@@ -201,6 +236,7 @@ def main():
201236
backend_target_port = os.environ.get("CLIMATECLAW_TARGET_PORT", "8502")
202237
backend_n = int(os.environ.get("CLIMATECLAW_BACKEND_REPLICAS", "1"))
203238
litellm_n = int(os.environ.get("CLIMATECLAW_LITELLM_REPLICAS", "1"))
239+
ollama_n = int(os.environ.get("CLIMATECLAW_OLLAMA_REPLICAS", "1"))
204240

205241
available_mcp_servers = [
206242
s
@@ -226,6 +262,7 @@ def main():
226262
replica_counts = {
227263
"climateclaw": backend_n,
228264
"litellm": litellm_n,
265+
"ollama": ollama_n,
229266
**mcp_replica_n,
230267
}
231268

@@ -234,6 +271,8 @@ def main():
234271
new_services.update(expand_service(name, svc, backend_n))
235272
elif name == "litellm":
236273
new_services.update(expand_service(name, svc, litellm_n))
274+
elif name == "ollama":
275+
new_services.update(expand_ollama_service(name, svc, ollama_n))
237276
elif name in MCP_SERVICES:
238277
if name in available_mcp_servers:
239278
new_services.update(expand_service(name, svc, mcp_replica_n[name]))
@@ -257,16 +296,27 @@ def main():
257296

258297
network_name = list(base["networks"].keys())[0]
259298

299+
haproxy_network = (
300+
{
301+
network_name: {
302+
"aliases": ["ollama"],
303+
}
304+
}
305+
if ollama_n > 1
306+
else [network_name]
307+
)
308+
260309
new_services["haproxy"] = {
261310
"image": "haproxy:3.0-alpine",
262311
"user": "0:0",
263312
"ports": dev_ports if "dev" in compose_path else prod_ports,
264313
"volumes": ["./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro"],
265-
"networks": [network_name],
314+
"networks": haproxy_network,
266315
"depends_on": haproxy_dependencies(
267316
new_services,
268317
backend_n,
269318
litellm_n,
319+
ollama_n,
270320
available_mcp_servers,
271321
mcp_replica_n,
272322
),
@@ -285,6 +335,7 @@ def main():
285335
backend_n,
286336
backend_port,
287337
litellm_n,
338+
ollama_n,
288339
available_mcp_servers,
289340
mcp_replica_n,
290341
port_dict,

0 commit comments

Comments
 (0)