synth-ai 0.2.4.dev4__py3-none-any.whl → 0.2.4.dev6__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. synth_ai/environments/examples/__init__.py +1 -0
  2. synth_ai/environments/examples/crafter_classic/__init__.py +8 -0
  3. synth_ai/environments/examples/crafter_classic/config_logging.py +111 -0
  4. synth_ai/environments/examples/crafter_classic/debug_translation.py +0 -0
  5. synth_ai/environments/examples/crafter_classic/engine.py +579 -0
  6. synth_ai/environments/examples/crafter_classic/engine_deterministic_patch.py +63 -0
  7. synth_ai/environments/examples/crafter_classic/engine_helpers/action_map.py +5 -0
  8. synth_ai/environments/examples/crafter_classic/engine_helpers/serialization.py +74 -0
  9. synth_ai/environments/examples/crafter_classic/engine_serialization_patch_v3.py +266 -0
  10. synth_ai/environments/examples/crafter_classic/environment.py +364 -0
  11. synth_ai/environments/examples/crafter_classic/taskset.py +233 -0
  12. synth_ai/environments/examples/crafter_classic/trace_hooks_v3.py +229 -0
  13. synth_ai/environments/examples/crafter_classic/world_config_patch_simple.py +298 -0
  14. synth_ai/environments/examples/crafter_custom/__init__.py +4 -0
  15. synth_ai/environments/examples/crafter_custom/crafter/__init__.py +7 -0
  16. synth_ai/environments/examples/crafter_custom/crafter/config.py +182 -0
  17. synth_ai/environments/examples/crafter_custom/crafter/constants.py +8 -0
  18. synth_ai/environments/examples/crafter_custom/crafter/engine.py +269 -0
  19. synth_ai/environments/examples/crafter_custom/crafter/env.py +266 -0
  20. synth_ai/environments/examples/crafter_custom/crafter/objects.py +418 -0
  21. synth_ai/environments/examples/crafter_custom/crafter/recorder.py +187 -0
  22. synth_ai/environments/examples/crafter_custom/crafter/worldgen.py +119 -0
  23. synth_ai/environments/examples/crafter_custom/dataset_builder.py +373 -0
  24. synth_ai/environments/examples/crafter_custom/environment.py +312 -0
  25. synth_ai/environments/examples/crafter_custom/run_dataset.py +305 -0
  26. synth_ai/environments/examples/enron/art_helpers/email_search_tools.py +156 -0
  27. synth_ai/environments/examples/enron/art_helpers/local_email_db.py +280 -0
  28. synth_ai/environments/examples/enron/art_helpers/types_enron.py +24 -0
  29. synth_ai/environments/examples/enron/engine.py +291 -0
  30. synth_ai/environments/examples/enron/environment.py +165 -0
  31. synth_ai/environments/examples/enron/taskset.py +112 -0
  32. synth_ai/environments/examples/minigrid/__init__.py +48 -0
  33. synth_ai/environments/examples/minigrid/engine.py +589 -0
  34. synth_ai/environments/examples/minigrid/environment.py +274 -0
  35. synth_ai/environments/examples/minigrid/environment_mapping.py +242 -0
  36. synth_ai/environments/examples/minigrid/puzzle_loader.py +416 -0
  37. synth_ai/environments/examples/minigrid/taskset.py +583 -0
  38. synth_ai/environments/examples/nethack/__init__.py +7 -0
  39. synth_ai/environments/examples/nethack/achievements.py +337 -0
  40. synth_ai/environments/examples/nethack/engine.py +738 -0
  41. synth_ai/environments/examples/nethack/environment.py +255 -0
  42. synth_ai/environments/examples/nethack/helpers/__init__.py +42 -0
  43. synth_ai/environments/examples/nethack/helpers/action_mapping.py +301 -0
  44. synth_ai/environments/examples/nethack/helpers/nle_wrapper.py +401 -0
  45. synth_ai/environments/examples/nethack/helpers/observation_utils.py +433 -0
  46. synth_ai/environments/examples/nethack/helpers/recording_wrapper.py +201 -0
  47. synth_ai/environments/examples/nethack/helpers/trajectory_recorder.py +268 -0
  48. synth_ai/environments/examples/nethack/helpers/visualization/replay_viewer.py +308 -0
  49. synth_ai/environments/examples/nethack/helpers/visualization/visualizer.py +430 -0
  50. synth_ai/environments/examples/nethack/taskset.py +323 -0
  51. synth_ai/environments/examples/red/__init__.py +7 -0
  52. synth_ai/environments/examples/red/config_logging.py +110 -0
  53. synth_ai/environments/examples/red/engine.py +693 -0
  54. synth_ai/environments/examples/red/engine_helpers/__init__.py +1 -0
  55. synth_ai/environments/examples/red/engine_helpers/memory_map.py +28 -0
  56. synth_ai/environments/examples/red/engine_helpers/reward_components.py +275 -0
  57. synth_ai/environments/examples/red/engine_helpers/reward_library/__init__.py +142 -0
  58. synth_ai/environments/examples/red/engine_helpers/reward_library/adaptive_rewards.py +56 -0
  59. synth_ai/environments/examples/red/engine_helpers/reward_library/battle_rewards.py +283 -0
  60. synth_ai/environments/examples/red/engine_helpers/reward_library/composite_rewards.py +149 -0
  61. synth_ai/environments/examples/red/engine_helpers/reward_library/economy_rewards.py +137 -0
  62. synth_ai/environments/examples/red/engine_helpers/reward_library/efficiency_rewards.py +56 -0
  63. synth_ai/environments/examples/red/engine_helpers/reward_library/exploration_rewards.py +330 -0
  64. synth_ai/environments/examples/red/engine_helpers/reward_library/novelty_rewards.py +120 -0
  65. synth_ai/environments/examples/red/engine_helpers/reward_library/pallet_town_rewards.py +558 -0
  66. synth_ai/environments/examples/red/engine_helpers/reward_library/pokemon_rewards.py +312 -0
  67. synth_ai/environments/examples/red/engine_helpers/reward_library/social_rewards.py +147 -0
  68. synth_ai/environments/examples/red/engine_helpers/reward_library/story_rewards.py +246 -0
  69. synth_ai/environments/examples/red/engine_helpers/screen_analysis.py +367 -0
  70. synth_ai/environments/examples/red/engine_helpers/state_extraction.py +139 -0
  71. synth_ai/environments/examples/red/environment.py +235 -0
  72. synth_ai/environments/examples/red/taskset.py +77 -0
  73. synth_ai/environments/examples/sokoban/__init__.py +1 -0
  74. synth_ai/environments/examples/sokoban/engine.py +675 -0
  75. synth_ai/environments/examples/sokoban/engine_helpers/__init__.py +1 -0
  76. synth_ai/environments/examples/sokoban/engine_helpers/room_utils.py +656 -0
  77. synth_ai/environments/examples/sokoban/engine_helpers/vendored/__init__.py +17 -0
  78. synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/__init__.py +3 -0
  79. synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/boxoban_env.py +129 -0
  80. synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/render_utils.py +370 -0
  81. synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/room_utils.py +331 -0
  82. synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/sokoban_env.py +305 -0
  83. synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/sokoban_env_fixed_targets.py +66 -0
  84. synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/sokoban_env_pull.py +114 -0
  85. synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/sokoban_env_two_player.py +122 -0
  86. synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/sokoban_env_variations.py +394 -0
  87. synth_ai/environments/examples/sokoban/environment.py +228 -0
  88. synth_ai/environments/examples/sokoban/generate_verified_puzzles.py +438 -0
  89. synth_ai/environments/examples/sokoban/puzzle_loader.py +311 -0
  90. synth_ai/environments/examples/sokoban/taskset.py +425 -0
  91. synth_ai/environments/examples/tictactoe/__init__.py +1 -0
  92. synth_ai/environments/examples/tictactoe/engine.py +368 -0
  93. synth_ai/environments/examples/tictactoe/environment.py +239 -0
  94. synth_ai/environments/examples/tictactoe/taskset.py +214 -0
  95. synth_ai/environments/examples/verilog/__init__.py +10 -0
  96. synth_ai/environments/examples/verilog/engine.py +328 -0
  97. synth_ai/environments/examples/verilog/environment.py +349 -0
  98. synth_ai/environments/examples/verilog/taskset.py +418 -0
  99. synth_ai/environments/examples/wordle/__init__.py +29 -0
  100. synth_ai/environments/examples/wordle/engine.py +391 -0
  101. synth_ai/environments/examples/wordle/environment.py +154 -0
  102. synth_ai/environments/examples/wordle/helpers/generate_instances_wordfreq.py +75 -0
  103. synth_ai/environments/examples/wordle/taskset.py +222 -0
  104. synth_ai/environments/service/app.py +8 -0
  105. synth_ai/environments/service/core_routes.py +38 -0
  106. synth_ai/learning/prompts/banking77_injection_eval.py +163 -0
  107. synth_ai/learning/prompts/hello_world_in_context_injection_ex.py +201 -0
  108. synth_ai/learning/prompts/mipro.py +273 -1
  109. synth_ai/learning/prompts/random_search.py +247 -0
  110. synth_ai/learning/prompts/run_mipro_banking77.py +160 -0
  111. synth_ai/learning/prompts/run_random_search_banking77.py +305 -0
  112. synth_ai/lm/injection.py +81 -0
  113. synth_ai/lm/overrides.py +204 -0
  114. synth_ai/lm/provider_support/anthropic.py +39 -12
  115. synth_ai/lm/provider_support/openai.py +31 -4
  116. synth_ai/lm/vendors/core/anthropic_api.py +16 -0
  117. synth_ai/lm/vendors/openai_standard.py +35 -5
  118. {synth_ai-0.2.4.dev4.dist-info → synth_ai-0.2.4.dev6.dist-info}/METADATA +2 -1
  119. {synth_ai-0.2.4.dev4.dist-info → synth_ai-0.2.4.dev6.dist-info}/RECORD +123 -13
  120. {synth_ai-0.2.4.dev4.dist-info → synth_ai-0.2.4.dev6.dist-info}/WHEEL +0 -0
  121. {synth_ai-0.2.4.dev4.dist-info → synth_ai-0.2.4.dev6.dist-info}/entry_points.txt +0 -0
  122. {synth_ai-0.2.4.dev4.dist-info → synth_ai-0.2.4.dev6.dist-info}/licenses/LICENSE +0 -0
  123. {synth_ai-0.2.4.dev4.dist-info → synth_ai-0.2.4.dev6.dist-info}/top_level.txt +0 -0
@@ -27,6 +27,13 @@ from langfuse.decorators import langfuse_context
27
27
  from langfuse.utils import _get_timestamp
28
28
  from langfuse.utils.langfuse_singleton import LangfuseSingleton
29
29
  from wrapt import wrap_function_wrapper
30
+ from synth_ai.lm.overrides import (
31
+ use_overrides_for_messages,
32
+ apply_injection as apply_injection_overrides,
33
+ apply_param_overrides,
34
+ apply_tool_overrides,
35
+ )
36
+ from synth_ai.lm.injection import apply_injection
30
37
 
31
38
  from synth_ai.lm.provider_support.suppress_logging import *
32
39
  from synth_ai.tracing_v1.trackers import (
@@ -349,7 +356,17 @@ def _wrap(anthropic_resource: AnthropicDefinition, initialize, wrapped, args, kw
349
356
  generation = new_langfuse.generation(**generation_data)
350
357
 
351
358
  try:
352
- anthropic_response = wrapped(*args, **arg_extractor.get_anthropic_args())
359
+ call_kwargs = arg_extractor.get_anthropic_args()
360
+ # Apply context-scoped injection to chat messages if present
361
+ if isinstance(call_kwargs, dict) and "messages" in call_kwargs:
362
+ try:
363
+ with use_overrides_for_messages(call_kwargs["messages"]): # type: ignore[arg-type]
364
+ call_kwargs["messages"] = apply_injection_overrides(call_kwargs["messages"]) # type: ignore[arg-type]
365
+ call_kwargs = apply_tool_overrides(call_kwargs)
366
+ call_kwargs = apply_param_overrides(call_kwargs)
367
+ except Exception:
368
+ pass
369
+ anthropic_response = wrapped(*args, **call_kwargs)
353
370
 
354
371
  # If it's a streaming call, returns a generator
355
372
  if isinstance(anthropic_response, types.GeneratorType):
@@ -363,10 +380,10 @@ def _wrap(anthropic_resource: AnthropicDefinition, initialize, wrapped, args, kw
363
380
  else:
364
381
  model, completion, usage = _extract_anthropic_completion(anthropic_response)
365
382
  # Synth tracking
366
- if "messages" in arg_extractor.get_anthropic_args():
383
+ if "messages" in call_kwargs:
367
384
  # print("\nWRAP: Messages API path")
368
- system_content = arg_extractor.get_anthropic_args().get("system")
369
- original_messages = arg_extractor.get_anthropic_args()["messages"]
385
+ system_content = call_kwargs.get("system")
386
+ original_messages = call_kwargs["messages"]
370
387
  # print(f"WRAP: Original messages: {original_messages}")
371
388
  # print(f"WRAP: System content: {system_content}")
372
389
 
@@ -397,9 +414,9 @@ def _wrap(anthropic_resource: AnthropicDefinition, initialize, wrapped, args, kw
397
414
  )
398
415
  # print("Finished tracking LM output")
399
416
 
400
- elif "prompt" in arg_extractor.get_anthropic_args():
417
+ elif "prompt" in call_kwargs:
401
418
  # print("\nWRAP: Completions API path")
402
- user_prompt = arg_extractor.get_anthropic_args().get("prompt", "")
419
+ user_prompt = call_kwargs.get("prompt", "")
403
420
  # print(f"WRAP: User prompt: {user_prompt}")
404
421
  messages = [{"role": "user", "content": user_prompt}]
405
422
  # print(f"WRAP: Messages created: {messages}")
@@ -476,17 +493,27 @@ async def _wrap_async(anthropic_resource: AnthropicDefinition, initialize, wrapp
476
493
 
477
494
  try:
478
495
  logger.debug("About to call wrapped function")
479
- response = await wrapped(*args, **kwargs)
496
+ call_kwargs = kwargs
497
+ # Apply context-scoped injection to chat messages if present
498
+ if isinstance(call_kwargs, dict) and "messages" in call_kwargs:
499
+ try:
500
+ with use_overrides_for_messages(call_kwargs["messages"]): # type: ignore[arg-type]
501
+ call_kwargs["messages"] = apply_injection_overrides(call_kwargs["messages"]) # type: ignore[arg-type]
502
+ call_kwargs = apply_tool_overrides(call_kwargs)
503
+ call_kwargs = apply_param_overrides(call_kwargs)
504
+ except Exception:
505
+ pass
506
+ response = await wrapped(*args, **call_kwargs)
480
507
  logger.debug(f"Got response: {response}")
481
508
 
482
509
  model, completion, usage = _extract_anthropic_completion(response)
483
510
  logger.debug(f"Extracted completion - Model: {model}, Usage: {usage}")
484
511
 
485
512
  # Synth tracking
486
- if "messages" in arg_extractor.get_anthropic_args():
513
+ if "messages" in call_kwargs:
487
514
  # logger.debug("WRAP_ASYNC: Messages API path detected")
488
- system_content = arg_extractor.get_anthropic_args().get("system")
489
- original_messages = arg_extractor.get_anthropic_args()["messages"]
515
+ system_content = call_kwargs.get("system")
516
+ original_messages = call_kwargs["messages"]
490
517
  # logger.debug("WRAP_ASYNC: Original messages: %s", original_messages)
491
518
  # logger.debug("WRAP_ASYNC: System content: %s", system_content)
492
519
 
@@ -511,9 +538,9 @@ async def _wrap_async(anthropic_resource: AnthropicDefinition, initialize, wrapp
511
538
  model_name=model,
512
539
  finetune=False,
513
540
  )
514
- elif "prompt" in arg_extractor.get_anthropic_args():
541
+ elif "prompt" in call_kwargs:
515
542
  # Handle Completions API format
516
- user_prompt = arg_extractor.get_anthropic_args().get("prompt", "")
543
+ user_prompt = call_kwargs.get("prompt", "")
517
544
  messages = [{"role": "user", "content": user_prompt}]
518
545
  assistant_msg = [{"role": "assistant", "content": completion}]
519
546
 
@@ -15,6 +15,13 @@ from langfuse.utils.langfuse_singleton import LangfuseSingleton
15
15
  from packaging.version import Version
16
16
  from pydantic import BaseModel
17
17
  from wrapt import wrap_function_wrapper
18
+ from synth_ai.lm.overrides import (
19
+ use_overrides_for_messages,
20
+ apply_injection as apply_injection_overrides,
21
+ apply_param_overrides,
22
+ apply_tool_overrides,
23
+ )
24
+ from synth_ai.lm.injection import apply_injection
18
25
 
19
26
  from synth_ai.lm.provider_support.suppress_logging import *
20
27
  from synth_ai.tracing_v1.abstractions import MessageInputs
@@ -475,7 +482,17 @@ def _wrap(open_ai_resource: OpenAiDefinition, initialize, wrapped, args, kwargs)
475
482
  )
476
483
  generation = new_langfuse.generation(**generation)
477
484
  try:
478
- openai_response = wrapped(**arg_extractor.get_openai_args())
485
+ openai_args = arg_extractor.get_openai_args()
486
+ # Apply context-scoped injection to chat messages if present
487
+ if isinstance(openai_args, dict) and "messages" in openai_args:
488
+ try:
489
+ with use_overrides_for_messages(openai_args["messages"]): # type: ignore[arg-type]
490
+ openai_args["messages"] = apply_injection_overrides(openai_args["messages"]) # type: ignore[arg-type]
491
+ openai_args = apply_tool_overrides(openai_args)
492
+ openai_args = apply_param_overrides(openai_args)
493
+ except Exception:
494
+ pass
495
+ openai_response = wrapped(**openai_args)
479
496
 
480
497
  if _is_streaming_response(openai_response):
481
498
  return LangfuseResponseGeneratorSync(
@@ -527,7 +544,7 @@ def _wrap(open_ai_resource: OpenAiDefinition, initialize, wrapped, args, kwargs)
527
544
  )
528
545
 
529
546
  elif open_ai_resource.type == "chat":
530
- messages = arg_extractor.get_openai_args().get("messages", [])
547
+ messages = openai_args.get("messages", [])
531
548
  message_input = MessageInputs(messages=messages)
532
549
 
533
550
  # Track user input
@@ -605,7 +622,17 @@ async def _wrap_async(open_ai_resource: OpenAiDefinition, initialize, wrapped, a
605
622
  generation = new_langfuse.generation(**generation)
606
623
 
607
624
  try:
608
- openai_response = await wrapped(**arg_extractor.get_openai_args())
625
+ openai_args = arg_extractor.get_openai_args()
626
+ # Apply context-scoped injection to chat messages if present
627
+ if isinstance(openai_args, dict) and "messages" in openai_args:
628
+ try:
629
+ with use_overrides_for_messages(openai_args["messages"]): # type: ignore[arg-type]
630
+ openai_args["messages"] = apply_injection_overrides(openai_args["messages"]) # type: ignore[arg-type]
631
+ openai_args = apply_tool_overrides(openai_args)
632
+ openai_args = apply_param_overrides(openai_args)
633
+ except Exception:
634
+ pass
635
+ openai_response = await wrapped(**openai_args)
609
636
 
610
637
  if _is_streaming_response(openai_response):
611
638
  return LangfuseResponseGeneratorAsync(
@@ -654,7 +681,7 @@ async def _wrap_async(open_ai_resource: OpenAiDefinition, initialize, wrapped, a
654
681
  )
655
682
 
656
683
  elif open_ai_resource.type == "chat":
657
- messages = arg_extractor.get_openai_args().get("messages", [])
684
+ messages = openai_args.get("messages", [])
658
685
  message_input = MessageInputs(messages=messages)
659
686
 
660
687
  # Track user input
@@ -12,6 +12,8 @@ from synth_ai.lm.tools.base import BaseTool
12
12
  from synth_ai.lm.vendors.base import BaseLMResponse, VendorBase
13
13
  from synth_ai.lm.constants import SPECIAL_BASE_TEMPS, CLAUDE_REASONING_MODELS, SONNET_37_BUDGETS
14
14
  from synth_ai.lm.vendors.core.openai_api import OpenAIStructuredOutputClient
15
+ from synth_ai.lm.overrides import use_overrides_for_messages, apply_injection as apply_injection_overrides, apply_param_overrides
16
+ from synth_ai.lm.injection import apply_injection
15
17
 
16
18
  ANTHROPIC_EXCEPTIONS_TO_RETRY: Tuple[Type[Exception], ...] = (anthropic.APIError,)
17
19
 
@@ -56,6 +58,9 @@ class AnthropicAPI(VendorBase):
56
58
  )
57
59
  used_cache_handler = get_cache_handler(use_ephemeral_cache_only)
58
60
  lm_config["reasoning_effort"] = reasoning_effort
61
+ # Apply context-scoped overrides and injection before splitting
62
+ with use_overrides_for_messages(messages):
63
+ messages = apply_injection_overrides(messages)
59
64
  cache_result = used_cache_handler.hit_managed_cache(
60
65
  model, messages, lm_config=lm_config, tools=tools
61
66
  )
@@ -70,6 +75,10 @@ class AnthropicAPI(VendorBase):
70
75
  "max_tokens": lm_config.get("max_tokens", 4096),
71
76
  "temperature": lm_config.get("temperature", SPECIAL_BASE_TEMPS.get(model, 0)),
72
77
  }
78
+ with use_overrides_for_messages(messages):
79
+ from synth_ai.lm.overrides import apply_tool_overrides
80
+ api_params = apply_tool_overrides(api_params)
81
+ api_params = apply_param_overrides(api_params)
73
82
 
74
83
  # Add tools if provided
75
84
  if tools:
@@ -147,6 +156,9 @@ class AnthropicAPI(VendorBase):
147
156
  )
148
157
  used_cache_handler = get_cache_handler(use_ephemeral_cache_only=use_ephemeral_cache_only)
149
158
  lm_config["reasoning_effort"] = reasoning_effort
159
+ with use_overrides_for_messages(messages):
160
+ # Apply context-scoped injection before splitting into system/messages
161
+ messages = apply_injection_overrides(messages)
150
162
  cache_result = used_cache_handler.hit_managed_cache(
151
163
  model, messages, lm_config=lm_config, tools=tools
152
164
  )
@@ -161,6 +173,10 @@ class AnthropicAPI(VendorBase):
161
173
  "max_tokens": lm_config.get("max_tokens", 4096),
162
174
  "temperature": lm_config.get("temperature", SPECIAL_BASE_TEMPS.get(model, 0)),
163
175
  }
176
+ with use_overrides_for_messages(messages):
177
+ from synth_ai.lm.overrides import apply_tool_overrides
178
+ api_params = apply_tool_overrides(api_params)
179
+ api_params = apply_param_overrides(api_params)
164
180
 
165
181
  # Add tools if provided
166
182
  if tools:
@@ -13,6 +13,8 @@ from synth_ai.lm.caching.initialize import (
13
13
  )
14
14
  from synth_ai.lm.tools.base import BaseTool
15
15
  from synth_ai.lm.vendors.base import BaseLMResponse, VendorBase
16
+ from synth_ai.lm.injection import apply_injection
17
+ from synth_ai.lm.overrides import use_overrides_for_messages, apply_param_overrides, apply_tool_overrides
16
18
  from synth_ai.lm.constants import SPECIAL_BASE_TEMPS
17
19
  from synth_ai.lm.vendors.retries import MAX_BACKOFF
18
20
  from synth_ai.lm.vendors.openai_standard_responses import OpenAIResponsesAPIMixin
@@ -123,6 +125,9 @@ class OpenAIStandard(VendorBase, OpenAIResponsesAPIMixin):
123
125
  print(f" LM config: {lm_config}")
124
126
 
125
127
  messages = special_orion_transform(model, messages)
128
+ # Apply context-scoped overrides and prompt injection just before building API params
129
+ with use_overrides_for_messages(messages):
130
+ messages = apply_injection(messages)
126
131
  used_cache_handler = get_cache_handler(use_ephemeral_cache_only)
127
132
  lm_config["reasoning_effort"] = reasoning_effort
128
133
  cache_result = used_cache_handler.hit_managed_cache(
@@ -143,6 +148,8 @@ class OpenAIStandard(VendorBase, OpenAIResponsesAPIMixin):
143
148
  "model": model,
144
149
  "messages": messages,
145
150
  }
151
+ with use_overrides_for_messages(messages):
152
+ api_params = apply_param_overrides(api_params)
146
153
 
147
154
  # Add tools if provided
148
155
  if tools and all(isinstance(tool, BaseTool) for tool in tools):
@@ -150,8 +157,11 @@ class OpenAIStandard(VendorBase, OpenAIResponsesAPIMixin):
150
157
  elif tools:
151
158
  api_params["tools"] = tools
152
159
 
153
- # Only add temperature for non o1/o3 models
154
- if not any(prefix in model for prefix in ["o1-", "o3-"]):
160
+ # Only add temperature for non o1/o3 models, and do not override if already set via overrides
161
+ if (
162
+ not any(prefix in model for prefix in ["o1-", "o3-"])
163
+ and "temperature" not in api_params
164
+ ):
155
165
  api_params["temperature"] = lm_config.get(
156
166
  "temperature", SPECIAL_BASE_TEMPS.get(model, 0)
157
167
  )
@@ -187,6 +197,11 @@ class OpenAIStandard(VendorBase, OpenAIResponsesAPIMixin):
187
197
  api_params["extra_headers"] = hdrs
188
198
  except Exception:
189
199
  pass
200
+ # Apply overrides (tools and params) from context after building baseline params
201
+ with use_overrides_for_messages(messages):
202
+ api_params = apply_tool_overrides(api_params)
203
+ api_params = apply_param_overrides(api_params)
204
+
190
205
  # Forward Qwen3 chat template kwargs via extra_body when requested
191
206
  if lm_config.get("enable_thinking") is not None:
192
207
  api_params["extra_body"] = api_params.get("extra_body", {})
@@ -417,12 +432,17 @@ class OpenAIStandard(VendorBase, OpenAIResponsesAPIMixin):
417
432
  "response_model is not supported for standard calls"
418
433
  )
419
434
  messages = special_orion_transform(model, messages)
435
+ with use_overrides_for_messages(messages):
436
+ # Apply context-scoped prompt injection just before building API params
437
+ messages = apply_injection(messages)
420
438
  used_cache_handler = get_cache_handler(use_ephemeral_cache_only=use_ephemeral_cache_only)
421
439
  lm_config["reasoning_effort"] = reasoning_effort
422
440
  cache_result = used_cache_handler.hit_managed_cache(
423
441
  model, messages, lm_config=lm_config, tools=tools
424
442
  )
425
- if cache_result:
443
+ # During pytest runs, bypass returning cache to allow tests to inspect outgoing params
444
+ IN_PYTEST = os.getenv("PYTEST_CURRENT_TEST") is not None
445
+ if cache_result and not IN_PYTEST:
426
446
  return cache_result
427
447
 
428
448
  # Common API call params
@@ -430,6 +450,8 @@ class OpenAIStandard(VendorBase, OpenAIResponsesAPIMixin):
430
450
  "model": model,
431
451
  "messages": messages,
432
452
  }
453
+ with use_overrides_for_messages(messages):
454
+ api_params = apply_param_overrides(api_params)
433
455
 
434
456
  # Add tools if provided
435
457
  if tools and all(isinstance(tool, BaseTool) for tool in tools):
@@ -437,8 +459,16 @@ class OpenAIStandard(VendorBase, OpenAIResponsesAPIMixin):
437
459
  elif tools:
438
460
  api_params["tools"] = tools
439
461
 
440
- # Only add temperature for non o1/o3 models
441
- if not any(prefix in model for prefix in ["o1-", "o3-"]):
462
+ # Apply overrides (tools and params) using module-level imports
463
+ with use_overrides_for_messages(messages):
464
+ api_params = apply_tool_overrides(api_params)
465
+ api_params = apply_param_overrides(api_params)
466
+
467
+ # Only add temperature for non o1/o3 models, and do not override if already set via overrides
468
+ if (
469
+ not any(prefix in model for prefix in ["o1-", "o3-"])
470
+ and "temperature" not in api_params
471
+ ):
442
472
  api_params["temperature"] = lm_config.get(
443
473
  "temperature", SPECIAL_BASE_TEMPS.get(model, 0)
444
474
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: synth-ai
3
- Version: 0.2.4.dev4
3
+ Version: 0.2.4.dev6
4
4
  Summary: Software for aiding the best and multiplying the will - Core AI functionality and tracing
5
5
  Author-email: Synth AI <josh@usesynth.ai>
6
6
  License-Expression: MIT
@@ -49,6 +49,7 @@ Requires-Dist: textual>=1.1.0
49
49
  Requires-Dist: openai-harmony>=0.0.1
50
50
  Requires-Dist: asyncpg>=0.30.0
51
51
  Requires-Dist: aiohttp>=3.8.0
52
+ Requires-Dist: datasets>=4.0.0
52
53
  Provides-Extra: dev
53
54
  Requires-Dist: build>=1.2.2.post1; extra == "dev"
54
55
  Requires-Dist: twine>=4.0.0; extra == "dev"
@@ -29,11 +29,114 @@ synth_ai/environments/environment/resources/sqlite.py,sha256=_kKSF2SUGN1E61Hq7AZ
29
29
  synth_ai/environments/environment/rewards/__init__.py,sha256=5TpSHuCNeRy0W5N55ITVVoAI6oNYre9usbPhFnDrc7I,18
30
30
  synth_ai/environments/environment/rewards/core.py,sha256=NPy6EmpBzeWlEulIvWXh12aJqQ71_X7rqzgVu85myXk,888
31
31
  synth_ai/environments/environment/tools/__init__.py,sha256=hl244E3Zy4RYMtCzz0RPpFTTqYCh0IckRrdN7mGafoc,6910
32
+ synth_ai/environments/examples/__init__.py,sha256=POgz9O4n1tvPAW1rYNUNeQGrMlWxoPDmyht85o5Po0s,38
33
+ synth_ai/environments/examples/crafter_classic/__init__.py,sha256=waICaSbO19tTJpj-BxCURLDxRdx_gnSVQXLIwo4gqLM,270
34
+ synth_ai/environments/examples/crafter_classic/config_logging.py,sha256=Eqq35s0lPAmBiU0neZM6vmHPct15gp9TwS3vogrNziM,3794
35
+ synth_ai/environments/examples/crafter_classic/debug_translation.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
+ synth_ai/environments/examples/crafter_classic/engine.py,sha256=j3ld7vuWx5KZgs_4g2u8UPJuOhvUL3qt4TZM3Cuo8NU,25257
37
+ synth_ai/environments/examples/crafter_classic/engine_deterministic_patch.py,sha256=Jhn4dtLypG4-eLMsHxesagVTGJtzoGF6UssEfblEJYE,2801
38
+ synth_ai/environments/examples/crafter_classic/engine_serialization_patch_v3.py,sha256=E7EA1IODxeb8Fq6uV15pL5HFuv4q-KTwnmRGqweuM34,11126
39
+ synth_ai/environments/examples/crafter_classic/environment.py,sha256=6Us77M0AhVOrBwZoaZesxC4QXC6q1tmVphga2BZvVv4,17218
40
+ synth_ai/environments/examples/crafter_classic/taskset.py,sha256=Jg3BgGetBjFor6MT3Fsx8BrrNRcS-RsffvusZsmi7v0,9843
41
+ synth_ai/environments/examples/crafter_classic/trace_hooks_v3.py,sha256=OuP_pm565jRIFc4AzzEAa7jrIvm0E4B5EAv6GnQWGzw,7195
42
+ synth_ai/environments/examples/crafter_classic/world_config_patch_simple.py,sha256=hrWo6OweT1Cyrck9YVP4TtxGdHmezbvITRTrhibWieo,10165
43
+ synth_ai/environments/examples/crafter_classic/engine_helpers/action_map.py,sha256=KUf20wX_t-DpU6kxWX6n7iyZxg_zrq7dV5S8Ci-2r18,229
44
+ synth_ai/environments/examples/crafter_classic/engine_helpers/serialization.py,sha256=biLmlrQFsSS4SVAqKilFyR6NjgcNJR1UlTnql98L0a0,2242
45
+ synth_ai/environments/examples/crafter_custom/__init__.py,sha256=139ewayoaO3Oxr-vG-1hxI89urYr1Dsy35JEeJEdvj0,190
46
+ synth_ai/environments/examples/crafter_custom/dataset_builder.py,sha256=QHoP45shr9kFvCjf0ta0aHPuVq9R6rU9MP1ZE1wk4L0,12956
47
+ synth_ai/environments/examples/crafter_custom/environment.py,sha256=9RswjKlVa2NwSELqYuvqxeZnW9O3eOVClMKDmdVV0m0,14784
48
+ synth_ai/environments/examples/crafter_custom/run_dataset.py,sha256=DmyxqebahMcnUDLgTCQdprfHYzFXKho17U6ypbobuQs,9959
49
+ synth_ai/environments/examples/crafter_custom/crafter/__init__.py,sha256=_M8hAShOyx-rd7prlDNGpzWk8BhGKY2l6hQvQ5teECs,235
50
+ synth_ai/environments/examples/crafter_custom/crafter/config.py,sha256=b3EuU7aK9XUIBeEbJiq6Xnt_7D4aYOBg8_hdqKxCxS8,5542
51
+ synth_ai/environments/examples/crafter_custom/crafter/constants.py,sha256=ZAHy89ZCWyLGzP1sQqlHHqGIMuIHqgsYWy7usD3ODB8,218
52
+ synth_ai/environments/examples/crafter_custom/crafter/engine.py,sha256=DFGknXHvOoliVtded7TnDsBrOOSnb79gbTdgpJNQKtE,9479
53
+ synth_ai/environments/examples/crafter_custom/crafter/env.py,sha256=EsYNnypT797f5yH_2FXcd_kQrxO3UA_gsXZ8HX6pSY4,9313
54
+ synth_ai/environments/examples/crafter_custom/crafter/objects.py,sha256=mCMu0ofXBaQIgjVM27eD2IN9IWi7ki6LeYDLnScNctk,13022
55
+ synth_ai/environments/examples/crafter_custom/crafter/recorder.py,sha256=NcqecXkU8S5pJ4vE89KcZPIO8SknkKuV1AookEvQ2Gw,5898
56
+ synth_ai/environments/examples/crafter_custom/crafter/worldgen.py,sha256=ieQMJyoni4Xl6uM_32ekKLk1QdFtJRHz6FR-8nLCwcI,4128
57
+ synth_ai/environments/examples/enron/engine.py,sha256=Unq3mrgit0Y4Y64s9cmiG4wocWyE28iRGGBFjN2IvmA,11534
58
+ synth_ai/environments/examples/enron/environment.py,sha256=QW0dmvv7og31tVnFHrQefZjAoo-yiKkkUUwj8QSd2f4,5985
59
+ synth_ai/environments/examples/enron/taskset.py,sha256=PdCkrPm99lAfRKKwkh6Qg_3LUEHy2AAP3qcvFht8_PI,3171
60
+ synth_ai/environments/examples/enron/art_helpers/email_search_tools.py,sha256=VqUy5pDRHt2qs0G7jwgqN60T7xQJEKRUhWQYsIopqP0,5545
61
+ synth_ai/environments/examples/enron/art_helpers/local_email_db.py,sha256=G0_26Y-6TwDIHcjVrMLJ-4gqQwJowoFB-WkgQhtAlPU,9984
62
+ synth_ai/environments/examples/enron/art_helpers/types_enron.py,sha256=Nxn0yP5aQyRftlsuXvH6_8BxM3Ms14UuD1Pq-UO9uBY,733
63
+ synth_ai/environments/examples/minigrid/__init__.py,sha256=tWQQ9kqbf-eP9RcJtlM_RNR63YkNXAl_U1zPfgP2TWk,1328
64
+ synth_ai/environments/examples/minigrid/engine.py,sha256=gvdc8Wgc8E4SGRhxCtCARgTzMMmtzxZT5Nc68-iI85k,22061
65
+ synth_ai/environments/examples/minigrid/environment.py,sha256=T-65hM-C3vqncmaLYzemNTwY7akDkRHiCKk3Dhiu9sQ,10490
66
+ synth_ai/environments/examples/minigrid/environment_mapping.py,sha256=N0JJ4Ako-sX-89nE9vCbPQIzVuhGpyy309Y_y7osNiA,7019
67
+ synth_ai/environments/examples/minigrid/puzzle_loader.py,sha256=Kc2KRBQr2wo1Lq3xhTASXFo1-j9ZgysY7imQ8uNz0zE,14655
68
+ synth_ai/environments/examples/minigrid/taskset.py,sha256=_ekomoTujsRbur60GvWSwWmABmZCp5k7f_JBDwJGmYk,21305
69
+ synth_ai/environments/examples/nethack/__init__.py,sha256=viygo8pTUB891fGm_tb38s5thNcr17bLFffQdDOfiQ0,266
70
+ synth_ai/environments/examples/nethack/achievements.py,sha256=hSDld5CBHubzmrDy2kZcfVDxQtymfg3kjQr0WuPH-Ro,12443
71
+ synth_ai/environments/examples/nethack/engine.py,sha256=e4F1bBoCbcvJwiHOGCCB5Ogwk_ARYHXiO3WC7tQAI-o,29956
72
+ synth_ai/environments/examples/nethack/environment.py,sha256=5ez7AJiKdnwe4cekTSTEh1Y5I1ZtPrDtCa6VeH_6pIY,10041
73
+ synth_ai/environments/examples/nethack/taskset.py,sha256=aPuleNGageiPhSXfNV-bzdmyPMi6gQSU40BAd8eT-a0,11339
74
+ synth_ai/environments/examples/nethack/helpers/__init__.py,sha256=7U8i1NKNIMC2eFKU5aOKYnUHbQCBTkoEZe-prFhAZOw,959
75
+ synth_ai/environments/examples/nethack/helpers/action_mapping.py,sha256=AZwkDY9-VEblagnpFrrnzlmNyRumWsDEf4w35y5Csmg,9133
76
+ synth_ai/environments/examples/nethack/helpers/nle_wrapper.py,sha256=dhyBFbHVHVslSm_4ztELLEURNt-iky0OOer2DEM7J8A,15141
77
+ synth_ai/environments/examples/nethack/helpers/observation_utils.py,sha256=XIHK6gtroNfeiLc8aisj7rDvcxROYiIpHKSCoJoWypU,12350
78
+ synth_ai/environments/examples/nethack/helpers/recording_wrapper.py,sha256=uWxZOgsi0GT29nv5_7zKAm28YCG8ukYCXafeV1kmgow,7448
79
+ synth_ai/environments/examples/nethack/helpers/trajectory_recorder.py,sha256=vzU_ir8zX1AlwcvgliA-HkCqEJJpICFDvAAS_UuP7xY,8987
80
+ synth_ai/environments/examples/nethack/helpers/visualization/replay_viewer.py,sha256=eceK4aejd3OcBXW98s3uhJ70kzOEXIa19TxdP4BCZdI,11902
81
+ synth_ai/environments/examples/nethack/helpers/visualization/visualizer.py,sha256=jHndZowjrRF2nYFyN-gP_3OOBsP3uPNT2PP1y6WV4pA,14831
82
+ synth_ai/environments/examples/red/__init__.py,sha256=4uHc_oyMmFK9jllUs9BAY4mxMwt5_Q7sD7Meo8zuTa4,199
83
+ synth_ai/environments/examples/red/config_logging.py,sha256=jVjehrms140gnJ1aAaXK9oxRXqh8CuU23yGp4AZOh74,3710
84
+ synth_ai/environments/examples/red/engine.py,sha256=43fKZ9YEs-ccL7rPtVNihStbwvxndk7GYyjr4zoCbYI,23835
85
+ synth_ai/environments/examples/red/environment.py,sha256=oHdG2I1QUOnVj80_IvIgBi5Rv2IyotnPgwMpXqsSZMc,9342
86
+ synth_ai/environments/examples/red/taskset.py,sha256=1oYI2UOqBdV5A-r7fg1LM4JIi5OQcRdTI6UUyPuQW_0,2825
87
+ synth_ai/environments/examples/red/engine_helpers/__init__.py,sha256=YyNOk0TMWA_CI_EakcTMjbLJpkFKKRhJfVe792w-CXE,33
88
+ synth_ai/environments/examples/red/engine_helpers/memory_map.py,sha256=jOsBYaYYxUy2tz3L2pCoj7Y_3UdrViw6vNYdgbEZFDk,1193
89
+ synth_ai/environments/examples/red/engine_helpers/reward_components.py,sha256=QllhLE4lpyKLcTbGgl5zK51ftX5CXjl_7-MOoSIiRLg,9355
90
+ synth_ai/environments/examples/red/engine_helpers/screen_analysis.py,sha256=gR1AU10m_HZGqWr6g6eTUx1fkZi8Yfhg73XuMwmZODg,12773
91
+ synth_ai/environments/examples/red/engine_helpers/state_extraction.py,sha256=i20OpC7DCcOo52dHGzHQnXI2DzUiTbu_2PcyVhGDj9Q,4418
92
+ synth_ai/environments/examples/red/engine_helpers/reward_library/__init__.py,sha256=kETzPWAaFOiAO4sNxcGerX2lXP1xnQkdiVfzmL1JGkU,4015
93
+ synth_ai/environments/examples/red/engine_helpers/reward_library/adaptive_rewards.py,sha256=xE7AsliJVmygo2aptYCHBnt4X0OffeLYzRa0Tjhp92k,1890
94
+ synth_ai/environments/examples/red/engine_helpers/reward_library/battle_rewards.py,sha256=hjJMYS-CzvO2ugJyBVBNZuhZIG-LU2ng0S4DUkHZD90,10426
95
+ synth_ai/environments/examples/red/engine_helpers/reward_library/composite_rewards.py,sha256=sRS4h4njAzfGDnaah_OG0kCz3P5UlAz9zXm0hczRyLA,5091
96
+ synth_ai/environments/examples/red/engine_helpers/reward_library/economy_rewards.py,sha256=25ACp4SDPXUxQjAVRcdFvOw_NStRFaPc5K78OrwcJG4,5018
97
+ synth_ai/environments/examples/red/engine_helpers/reward_library/efficiency_rewards.py,sha256=RCLbN-hh-Cx0fxOB3zKQs6KvRa-u9MlKYeI5_TtOFrg,1817
98
+ synth_ai/environments/examples/red/engine_helpers/reward_library/exploration_rewards.py,sha256=V3Gvs-hHGHV9OohDsZncBd8K7kiGRtQkDo7p8rOG1mA,12391
99
+ synth_ai/environments/examples/red/engine_helpers/reward_library/novelty_rewards.py,sha256=uCRT8CQUDBueCuMa8x7IYKQun2yXq32mt6eHBifu4B8,3611
100
+ synth_ai/environments/examples/red/engine_helpers/reward_library/pallet_town_rewards.py,sha256=I-MzN6eiaQs7cuQHZvKO_nZJ1SRVlsK83dIY4TmTigA,19889
101
+ synth_ai/environments/examples/red/engine_helpers/reward_library/pokemon_rewards.py,sha256=pHMN8mh3qvJ-anxb80DxR_UBChOdrjiL7Ng6oyFBydU,10860
102
+ synth_ai/environments/examples/red/engine_helpers/reward_library/social_rewards.py,sha256=qQ-gN_xceb9QTzMiMGNmmKrZSsQDr-bD9JDWS4d_ops,5675
103
+ synth_ai/environments/examples/red/engine_helpers/reward_library/story_rewards.py,sha256=1sH6bLShvWOrvdOCIWbg56oMJ7eeMm2SmSLMcrO8MME,8464
104
+ synth_ai/environments/examples/sokoban/__init__.py,sha256=Y5MpHrvlI9s5gEwlAJ0FM08bZpyC4QdnGWaTCyPQas8,35
105
+ synth_ai/environments/examples/sokoban/engine.py,sha256=Dn5lV8lyhb_4uQNIwpTeDjN0bYUCqjo1ym3vrD2nQfs,26275
106
+ synth_ai/environments/examples/sokoban/environment.py,sha256=wZ59GS9-UZMt9ysAVgdJIcL9UwvjiCdzYjEj6aPYSKM,9801
107
+ synth_ai/environments/examples/sokoban/generate_verified_puzzles.py,sha256=tGCJNaNsXGK2nsZ54xqJ4p9lyfjQGJ54a9SguUIQiiU,15509
108
+ synth_ai/environments/examples/sokoban/puzzle_loader.py,sha256=4Ufqx9IyuWDfHt77VxcM7URgCb6crpsMHr-1TBkfxsc,11497
109
+ synth_ai/environments/examples/sokoban/taskset.py,sha256=UhavqJceg6CYFFWClbldgjqRzY6gBUqZveaHc7N13Ko,15537
110
+ synth_ai/environments/examples/sokoban/engine_helpers/__init__.py,sha256=ensyOUm01rMpYZPIoV012_v6vxnv95mwwi63hLJvwIw,29
111
+ synth_ai/environments/examples/sokoban/engine_helpers/room_utils.py,sha256=NZ3TSvTmbo19aT9X-xaPsg5CV4oPmdtV6356L76F7Bk,21757
112
+ synth_ai/environments/examples/sokoban/engine_helpers/vendored/__init__.py,sha256=jdGs_dghlGglKSi1EpsLz3IivSqNYhgu0icwzS7nKS0,404
113
+ synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/__init__.py,sha256=Gvw94rIHk-BAaARkboJzZ6mx4z_n_UkFxm9xqZqxVFc,134
114
+ synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/boxoban_env.py,sha256=ykJzlZjQtmcG0JJbOECUJ5EgQAURfvKkAq3ACwYF5xE,4132
115
+ synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/render_utils.py,sha256=Vpj86hJhrSkK6kPobB_H5_bcvKsPT86-uhs7Agu66L4,11375
116
+ synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/room_utils.py,sha256=43mge3pUJgvnGqKT1y7Ww39h3k0MRcvmL208ffzHzZ8,10587
117
+ synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/sokoban_env.py,sha256=VaLExeff0vh4hQvkZphPBmjtS-f5v_MRk4E-9jNtCxU,10381
118
+ synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/sokoban_env_fixed_targets.py,sha256=aVsb29Q79X_6XYR6-fKynTlSoxBo7_Es9wlUFAM8ltE,2551
119
+ synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/sokoban_env_pull.py,sha256=8FiVFOf5-w_fuf2fWUOcluRH5Zzqbn7y4CDxXlMjtMM,3807
120
+ synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/sokoban_env_two_player.py,sha256=ChjsHcraEnjRPazhojeG4RDekyBbB9XzRU-UnXIfEEo,3762
121
+ synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/sokoban_env_variations.py,sha256=mQlnDZJUfi-TiR3zcGyy4iTJutUqxwjRj7fxz8THupg,15455
122
+ synth_ai/environments/examples/tictactoe/__init__.py,sha256=XGoOP8GEGXjG-TI_E_-3b1jOhpGNtl_LmR9G3K59Gig,31
123
+ synth_ai/environments/examples/tictactoe/engine.py,sha256=NuFpXuiClyBCByS-m3fEpU343nkNq_aIsqYAMxXrGCs,12430
124
+ synth_ai/environments/examples/tictactoe/environment.py,sha256=42y9wCpG1NOAPxaILdaBjDl8WgEvnHbk3rd75GtgLH4,9335
125
+ synth_ai/environments/examples/tictactoe/taskset.py,sha256=rGbFwkokndkwXR95RSUF4-mRwvX8EKjpQRofnabmhs8,7811
126
+ synth_ai/environments/examples/verilog/__init__.py,sha256=JBf4ayWGO-VPK7PLitp_-jiKDi9gd3hhQ-PahNkiLJ0,262
127
+ synth_ai/environments/examples/verilog/engine.py,sha256=jxpVJ5oVbRyObCLnETfy-sPARunaoYLLaPx7cyl68jc,12170
128
+ synth_ai/environments/examples/verilog/environment.py,sha256=M6igedpgJWvLjw_ta1k4fwY9Kz0dPDIEgO9S4B-eBGg,12329
129
+ synth_ai/environments/examples/verilog/taskset.py,sha256=-Vqrc_HY07WHcHLDQJ3KIDU3kNjpCgAMqCUYtay2Vyg,13336
130
+ synth_ai/environments/examples/wordle/__init__.py,sha256=tQIybhLzILCDhOTYFdToG8nSzVXx9zAIduMPJ6E3zb0,804
131
+ synth_ai/environments/examples/wordle/engine.py,sha256=HJO2VVRiAx6ddY-cjsMidIaFJY9d2bvzjEGA-uQ6RvM,13044
132
+ synth_ai/environments/examples/wordle/environment.py,sha256=mlmSubr8se7i-p858xLKQWcTK0dgcrXOTQ6NTjeoGZ0,6326
133
+ synth_ai/environments/examples/wordle/taskset.py,sha256=vM3sm91Fc6g5hmk-d36YhHTz4gnZ5WlYFGiZBn6XqEw,8182
134
+ synth_ai/environments/examples/wordle/helpers/generate_instances_wordfreq.py,sha256=PH-grN1UgonZzrqxo15tbYYxYgNTBMwfqbaHpt-fIMQ,2510
32
135
  synth_ai/environments/reproducibility/core.py,sha256=y4__bivu_tdyIas509oK2EH9KUdLaQfbJ6z3dK8wYxc,1499
33
136
  synth_ai/environments/reproducibility/helpers.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
137
  synth_ai/environments/reproducibility/tree.py,sha256=bl0lfIjrJGxMNmcWs75uPBwurgd1ENjN_mI5RHfrANY,13743
35
- synth_ai/environments/service/app.py,sha256=KoouFEIOHQFSfP1CfiS756VTK6ActRG-jZ1v6xrVq0U,2637
36
- synth_ai/environments/service/core_routes.py,sha256=vblHFC5ibOyCkLRmTusOXmJnrXBty_FStqVVMTsl-_w,37226
138
+ synth_ai/environments/service/app.py,sha256=d_2OFCbywdM0C3UH3T7gdEl_Sh2SBheV2qi1QIzT-xs,2980
139
+ synth_ai/environments/service/core_routes.py,sha256=xA1db-D-GhBtIINdGAI8s5XhnwL2_F79A0PQqF_QS10,38735
37
140
  synth_ai/environments/service/external_registry.py,sha256=x7Qgbw83-1xcN69J337UHm4xPpWc5B0KUZrNUFtutLE,1795
38
141
  synth_ai/environments/service/registry.py,sha256=Ex9c3ZwfZ-oW9nGz7bwCj1GNzvu78Z54rwufjKhsnMg,405
39
142
  synth_ai/environments/stateful/__init__.py,sha256=UPNmotqxS2zXjSfhBui6R4qsDOIxKECL5xVTVDHcvsk,39
@@ -57,11 +160,18 @@ synth_ai/learning/offline/sft.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
57
160
  synth_ai/learning/offline/shared.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
58
161
  synth_ai/learning/online/grpo.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
59
162
  synth_ai/learning/online/irft.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
163
+ synth_ai/learning/prompts/banking77_injection_eval.py,sha256=hlmm1neRtZBp0g0mCw0FZAr-564EVhIt92scvgZPdVM,5687
60
164
  synth_ai/learning/prompts/gepa.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
61
- synth_ai/learning/prompts/mipro.py,sha256=nIw7v6t3DXA8MbmPFQTxKbpFhMa1ocMmWLtxhfONwoc,51
165
+ synth_ai/learning/prompts/hello_world_in_context_injection_ex.py,sha256=NV4GA8vmW0jD9vSAdb_qDCHCUmSOyxVtHQKOjCGM8e4,8990
166
+ synth_ai/learning/prompts/mipro.py,sha256=H62Ig7E_ujDVp_qhX1bmbznU0UtEKSDlIvRRRvhudOc,9465
167
+ synth_ai/learning/prompts/random_search.py,sha256=z87u41gpt377347ea1jpQisSryuLu6DQrldytZDzGCY,8321
168
+ synth_ai/learning/prompts/run_mipro_banking77.py,sha256=pae3ij_U_0SJ9I8VP4o2GGkXwiFY6M-dIzBLkVL7GHU,5308
169
+ synth_ai/learning/prompts/run_random_search_banking77.py,sha256=u3TvIJe2sXNV5hGDlOTYeQdPGwJk5lQ0CWf1mzeRuJ0,13236
62
170
  synth_ai/lm/__init__.py,sha256=aylYW_xWcQlRppFNfys7VtkNICMyYe6FMZmjVRN_BmM,1142
63
171
  synth_ai/lm/config.py,sha256=LW5QG-U2heRdvXQ9qi5NWExOF8yprQi-cCo817nf28g,3604
64
172
  synth_ai/lm/constants.py,sha256=ToYCu-ZeHgbb7VIRpDcCDV2D668P4UEHOKXM7urkp08,1248
173
+ synth_ai/lm/injection.py,sha256=8yzqoeuc530TqsAl1afZPhUnFaP7HZuRkh0IcyN0IpQ,2836
174
+ synth_ai/lm/overrides.py,sha256=R_H8L0_h1mHKGXvrsBV0FVpj0OWlhEBNx-7mLIlFiY8,6900
65
175
  synth_ai/lm/unified_interface.py,sha256=4rK0uU84w5tJObxZw6LqZOrPRrAAKd9R1Um2SYIVbbM,6474
66
176
  synth_ai/lm/warmup.py,sha256=_THQV-YUO7XQzH8IgHWRqxjISmN02K5E3iwS8HrvYOk,6791
67
177
  synth_ai/lm/caching/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -81,8 +191,8 @@ synth_ai/lm/cost/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,
81
191
  synth_ai/lm/cost/monitor.py,sha256=DkeLUlrb7rGx3nZ04aADU9HXXu5mZTf_DBwT0xhzIv4,7
82
192
  synth_ai/lm/cost/statefulness.py,sha256=SO-H9_R1_KL110z_ceRIJzH6n8D9gpx-R1-_mtO7pNI,37
83
193
  synth_ai/lm/provider_support/__init__.py,sha256=4wd2x_gsRAVnGwHsK4nR0rlyIctPEpbZDETAtSh7doA,225
84
- synth_ai/lm/provider_support/anthropic.py,sha256=ohytXTK643SkBsm2bwwG7l0e0bIPja_LK5BYj8nUXqg,34431
85
- synth_ai/lm/provider_support/openai.py,sha256=T8rps5kc2HxKuSGO44SJNc55Qr7GVu7NCHRWeg7gO8U,38770
194
+ synth_ai/lm/provider_support/anthropic.py,sha256=Dh4j5Xwv1KEtTMXA6bg4yanWuh0tScClq2AZP0f83Ro,35630
195
+ synth_ai/lm/provider_support/openai.py,sha256=yxVL7DQToIUcYqgJRYK-Pev522jW6pkxrtkL13cPtb0,40159
86
196
  synth_ai/lm/provider_support/suppress_logging.py,sha256=CKk8yGVWUZT6YLqzALOf4PZ3WyqMC_DiUTx6vF9O0zo,1037
87
197
  synth_ai/lm/structured_outputs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
88
198
  synth_ai/lm/structured_outputs/handler.py,sha256=BrGuBT3XjPJBNR5YhrHQvu1wuJB9_q83ONDhxuJlFpo,17294
@@ -92,12 +202,12 @@ synth_ai/lm/tools/__init__.py,sha256=3JM5vqZqKloaeHaxuO49C8A_0qljys3pQ1yt70WKhho
92
202
  synth_ai/lm/tools/base.py,sha256=i4pXGXLbuU5paxIEpEwgb5cRYB-m4ovRZbftm17mXDM,5816
93
203
  synth_ai/lm/vendors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
94
204
  synth_ai/lm/vendors/base.py,sha256=g2u1Z2irv1EbMRmSE57_6xbInicW4yZM23lpqZZDaKo,2522
95
- synth_ai/lm/vendors/openai_standard.py,sha256=NqHXJAu1nyAoympz1H_YyLo3qRGDnQtnf8X3_E9BOu8,30127
205
+ synth_ai/lm/vendors/openai_standard.py,sha256=YjGfr3vJa5pEAc-q74jLd0WFiY0Wuj1cLdeoQExP7P0,31802
96
206
  synth_ai/lm/vendors/openai_standard_responses.py,sha256=P4-2QhxPfs4PRpqATOdGi_Yo2GW7XxbH_TEsYgXS458,10357
97
207
  synth_ai/lm/vendors/retries.py,sha256=DkLYngUdqiDnLPv5n-gV9Tdq1ChRxmA8emLSMTcZJwM,429
98
208
  synth_ai/lm/vendors/synth_client.py,sha256=uSZfsyr1cjW53tOVEuNUOCdfJuMvcTpmJ2WDtcpapBQ,16279
99
209
  synth_ai/lm/vendors/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
100
- synth_ai/lm/vendors/core/anthropic_api.py,sha256=GPKqai4RABMgk8t_0YLmYiuG_cZyE5g73AcGksNs470,13986
210
+ synth_ai/lm/vendors/core/anthropic_api.py,sha256=S8s-CMO5GhbQ_V4CmVaNICF56If3wmT0PmCszKvTSeg,15011
101
211
  synth_ai/lm/vendors/core/gemini_api.py,sha256=eCMhRSGH5ATAiszFuwGW1Nja6dgzvEOq4sZACjU4XrM,11274
102
212
  synth_ai/lm/vendors/core/mistral_api.py,sha256=vf_AK-zBwa0xICdQYBcIxxtK94pus94XafXhurR0T4I,11926
103
213
  synth_ai/lm/vendors/core/openai_api.py,sha256=Li9OIkvNltAtZN1MUw3RzEM0rp4PciM9SLM4y9OQmZ4,7140
@@ -181,9 +291,9 @@ synth_ai/v0/tracing_v1/events/manage.py,sha256=dgIlH43aEz7yA1_rj4IisJP6ROiROmLwD
181
291
  synth_ai/v0/tracing_v1/events/scope.py,sha256=BuBkhSpVHUJt8iGT9HJZF82rbb88mQcd2vM2shg-w2I,2550
182
292
  synth_ai/v0/tracing_v1/events/store.py,sha256=gVM3L_bV_PAEh9GD9eg2AQqNfANu-zH9ied7bAKk_Eg,9040
183
293
  synth_ai/zyk/__init__.py,sha256=6HFa13sdHCouhzKOUPEWcJeVxKlzjWO7ERsrrwtTugs,752
184
- synth_ai-0.2.4.dev4.dist-info/licenses/LICENSE,sha256=ynhjRQUfqA_RdGRATApfFA_fBAy9cno04sLtLUqxVFM,1069
185
- synth_ai-0.2.4.dev4.dist-info/METADATA,sha256=rQqUijPG-9CeDt33ihFOSoDyKrQpF_3obxoNG-tCCJg,7150
186
- synth_ai-0.2.4.dev4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
187
- synth_ai-0.2.4.dev4.dist-info/entry_points.txt,sha256=GSFXaJreq4PJXbixkUI0GHZwGh2dZDG5pYaoVmqr_KE,46
188
- synth_ai-0.2.4.dev4.dist-info/top_level.txt,sha256=fBmtZyVHuKaGa29oHBaaUkrUIWTqSpoVMPiVdCDP3k8,9
189
- synth_ai-0.2.4.dev4.dist-info/RECORD,,
294
+ synth_ai-0.2.4.dev6.dist-info/licenses/LICENSE,sha256=ynhjRQUfqA_RdGRATApfFA_fBAy9cno04sLtLUqxVFM,1069
295
+ synth_ai-0.2.4.dev6.dist-info/METADATA,sha256=89Oe0wNXNB8HhowQ3cRClzDFwoAXbWaHEiblVwmUF6g,7181
296
+ synth_ai-0.2.4.dev6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
297
+ synth_ai-0.2.4.dev6.dist-info/entry_points.txt,sha256=GSFXaJreq4PJXbixkUI0GHZwGh2dZDG5pYaoVmqr_KE,46
298
+ synth_ai-0.2.4.dev6.dist-info/top_level.txt,sha256=fBmtZyVHuKaGa29oHBaaUkrUIWTqSpoVMPiVdCDP3k8,9
299
+ synth_ai-0.2.4.dev6.dist-info/RECORD,,