Skip to content

Commit 7468372

Browse files
committed
chore: cursor feedback, remove unnecessary log of response
1 parent f7ce6d3 commit 7468372

3 files changed

Lines changed: 27 additions & 11 deletions

File tree

packages/optimization/src/ldai_optimizer/client.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ def _initialize_class_members_from_config(
185185
self._history: List[OptimizationContext] = []
186186

187187
def _build_agent_config_for_context(
188-
self, ctx: OptimizationContext
188+
self, ctx: OptimizationContext, skip_interpolation: bool = False
189189
) -> AIAgentConfig:
190190
"""
191191
Construct an AIAgentConfig that reflects the current optimization iteration.
@@ -196,16 +196,21 @@ def _build_agent_config_for_context(
196196
ctx.current_variables at call time so the stored template is never mutated.
197197
198198
:param ctx: The OptimizationContext for this iteration
199+
:param skip_interpolation: When True, skip variable interpolation on the
200+
instructions. Use this when the instructions are a meta-prompt (e.g. a
201+
variation-generation prompt) that deliberately contains ``{{key}}`` tokens
202+
as text for the LLM to read rather than as runtime substitution targets.
199203
:return: A fresh AIAgentConfig populated from the context's current state
200204
"""
201205
instructions = (
202206
interpolate_variables(ctx.current_instructions, ctx.current_variables)
203-
if ctx.current_variables
207+
if ctx.current_variables and not skip_interpolation
204208
else ctx.current_instructions
205209
)
206210
return AIAgentConfig(
207211
key=self._agent_key,
208212
enabled=True,
213+
create_tracker=self._agent_config.create_tracker,
209214
model=ModelConfig(
210215
name=ctx.current_model or "",
211216
parameters=ctx.current_parameters,
@@ -1330,7 +1335,7 @@ async def _generate_new_variation(
13301335
# Retry up to _MAX_VARIATION_RETRIES times to handle transient empty or unparseable
13311336
# responses (e.g. when the agent SDK returns the LLM's post-tool-call empty text
13321337
# instead of the tool result).
1333-
agent_config = self._build_agent_config_for_context(variation_ctx)
1338+
agent_config = self._build_agent_config_for_context(variation_ctx, skip_interpolation=True)
13341339
response_data = None
13351340
response_str = ""
13361341
for attempt in range(1, _MAX_VARIATION_RETRIES + 1):

packages/optimization/src/ldai_optimizer/util.py

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -323,10 +323,18 @@ def extract_json_from_response(response_str: str) -> Dict[str, Any]:
323323

324324
# Try balanced-brace scanning
325325
if response_data is None:
326-
brace_count = 0
327326
start_idx = response_str.find('{')
328327
if start_idx != -1:
329-
for i in range(start_idx, len(response_str)):
328+
logger.warning(
329+
"Direct JSON parse and code-block extraction failed; "
330+
"falling back to balanced-brace scanner. "
331+
"Response may be malformed JSON (length: %d).",
332+
len(response_str),
333+
)
334+
while start_idx != -1 and response_data is None:
335+
brace_count = 0
336+
i = start_idx
337+
while i < len(response_str):
330338
if response_str[i] == '{':
331339
brace_count += 1
332340
elif response_str[i] == '}':
@@ -335,12 +343,13 @@ def extract_json_from_response(response_str: str) -> Dict[str, Any]:
335343
json_str = response_str[start_idx:i + 1]
336344
try:
337345
response_data = json.loads(json_str)
338-
break
339346
except json.JSONDecodeError:
340347
start_idx = response_str.find('{', start_idx + 1)
341-
if start_idx == -1:
342-
break
343-
brace_count = 0
348+
break
349+
i += 1
350+
else:
351+
# Exhausted the string without closing the object
352+
break
344353

345354
# Legacy regex fallback
346355
if response_data is None:
@@ -364,9 +373,8 @@ def extract_json_from_response(response_str: str) -> Dict[str, Any]:
364373
if response_data is None:
365374
logger.debug(
366375
"Failed to extract JSON from response. "
367-
"Response length: %d, response: %s",
376+
"Response length: %d",
368377
len(response_str),
369-
response_str,
370378
)
371379
raise ValueError(
372380
"Failed to parse structured output from variation generation. "

packages/optimization/tests/test_client.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ def _make_agent_config(
6262
return AIAgentConfig(
6363
key="test-agent",
6464
enabled=True,
65+
create_tracker=MagicMock,
6566
model=ModelConfig(name=model_name, parameters=parameters or {}),
6667
instructions=instructions,
6768
)
@@ -679,6 +680,7 @@ def _make_judge_config(self, enabled: bool = True) -> AIJudgeConfig:
679680
return AIJudgeConfig(
680681
key="ld-judge-key",
681682
enabled=enabled,
683+
create_tracker=MagicMock,
682684
model=ModelConfig(name="gpt-4o", parameters={}),
683685
messages=[
684686
LDMessage(role="system", content="You are an evaluator."),
@@ -782,6 +784,7 @@ async def test_returns_zero_score_when_judge_has_no_messages(self):
782784
judge_config = AIJudgeConfig(
783785
key="ld-judge-key",
784786
enabled=True,
787+
create_tracker=MagicMock,
785788
model=ModelConfig(name="gpt-4o", parameters={}),
786789
messages=None,
787790
)

0 commit comments

Comments
 (0)