|
1 | 1 | import json |
| 2 | +import os |
2 | 3 | import re |
3 | 4 | from typing import Any, Dict, List |
4 | 5 |
|
@@ -30,6 +31,15 @@ def __init__(self, providers: List[Any] = None, verbose=False): |
30 | 31 | self.calls = [] |
31 | 32 | self.provider_map = {p.name: p for p in self.providers} |
32 | 33 | self.verbose = verbose |
| 34 | + self.settings_from_environment() |
| 35 | + |
| 36 | + def settings_from_environment(self): |
| 37 | + """ |
| 38 | + Get max attempts from environment |
| 39 | + """ |
| 40 | + self.select_max_attempts = int(os.environ.get("MCP_SERVER_SELECT_MAX_ATTEMPTS") or 10) |
| 41 | + self.negotiate_max_attempts = int(os.environ.get("MCP_SERVER_NEGOTIATE_MAX_ATTEMPTS") or 10) |
| 42 | + self.submit_max_attempts = int(os.environ.get("MCP_SERVER_SUBMIT_MAX_ATTEMPTS") or 10) |
33 | 43 |
|
34 | 44 | def build_system_context(self, tool_types) -> str: |
35 | 45 | """ |
@@ -218,7 +228,9 @@ async def submit(self, request: str) -> str: |
218 | 228 | "```" |
219 | 229 | ) |
220 | 230 | # Require at least 2 calls - submit and info |
221 | | - return await self.deliberate(f"EXECUTE REQUEST: {request}", instructions, 2) |
| 231 | + return await self.deliberate( |
| 232 | + f"EXECUTE REQUEST: {request}", instructions, 2, self.submit_max_attempts |
| 233 | + ) |
222 | 234 |
|
223 | 235 | async def select(self, request: str, proposals: Dict[str, Any], metadata: str = None) -> str: |
224 | 236 | """ |
@@ -261,7 +273,7 @@ async def select(self, request: str, proposals: Dict[str, Any], metadata: str = |
261 | 273 | f"ORIGINAL USER REQUEST: '{request}'\n\n" |
262 | 274 | f"CLUSTER PROPOSALS TO EVALUATE:\n{json.dumps(proposals, indent=2)}" |
263 | 275 | ) |
264 | | - return await self.deliberate(request, instructions) |
| 276 | + return await self.deliberate(request, instructions, max_attempts=self.select_max_attempts) |
265 | 277 |
|
266 | 278 | async def negotiate(self, request: str) -> str: |
267 | 279 | """ |
@@ -307,7 +319,7 @@ async def negotiate(self, request: str) -> str: |
307 | 319 | "```" |
308 | 320 | ) |
309 | 321 | # Require at least 1 call, and max 10 loops of thinking |
310 | | - result = await self.deliberate(request, instructions, 1, 10) |
| 322 | + result = await self.deliberate(request, instructions, 1, self.negotiate_max_attempts) |
311 | 323 |
|
312 | 324 | # Max attempts reached |
313 | 325 | if "TIMEOUT" in result: |
|
0 commit comments