fluxloop-cli 0.2.9__tar.gz → 0.2.10__tar.gz

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 (35) hide show
  1. {fluxloop_cli-0.2.9 → fluxloop_cli-0.2.10}/PKG-INFO +1 -1
  2. {fluxloop_cli-0.2.9 → fluxloop_cli-0.2.10}/fluxloop_cli/__init__.py +1 -1
  3. {fluxloop_cli-0.2.9 → fluxloop_cli-0.2.10}/fluxloop_cli/arg_binder.py +34 -1
  4. {fluxloop_cli-0.2.9 → fluxloop_cli-0.2.10}/fluxloop_cli.egg-info/PKG-INFO +1 -1
  5. {fluxloop_cli-0.2.9 → fluxloop_cli-0.2.10}/pyproject.toml +1 -1
  6. {fluxloop_cli-0.2.9 → fluxloop_cli-0.2.10}/README.md +0 -0
  7. {fluxloop_cli-0.2.9 → fluxloop_cli-0.2.10}/fluxloop_cli/commands/__init__.py +0 -0
  8. {fluxloop_cli-0.2.9 → fluxloop_cli-0.2.10}/fluxloop_cli/commands/config.py +0 -0
  9. {fluxloop_cli-0.2.9 → fluxloop_cli-0.2.10}/fluxloop_cli/commands/generate.py +0 -0
  10. {fluxloop_cli-0.2.9 → fluxloop_cli-0.2.10}/fluxloop_cli/commands/init.py +0 -0
  11. {fluxloop_cli-0.2.9 → fluxloop_cli-0.2.10}/fluxloop_cli/commands/parse.py +0 -0
  12. {fluxloop_cli-0.2.9 → fluxloop_cli-0.2.10}/fluxloop_cli/commands/record.py +0 -0
  13. {fluxloop_cli-0.2.9 → fluxloop_cli-0.2.10}/fluxloop_cli/commands/run.py +0 -0
  14. {fluxloop_cli-0.2.9 → fluxloop_cli-0.2.10}/fluxloop_cli/commands/status.py +0 -0
  15. {fluxloop_cli-0.2.9 → fluxloop_cli-0.2.10}/fluxloop_cli/config_loader.py +0 -0
  16. {fluxloop_cli-0.2.9 → fluxloop_cli-0.2.10}/fluxloop_cli/config_schema.py +0 -0
  17. {fluxloop_cli-0.2.9 → fluxloop_cli-0.2.10}/fluxloop_cli/constants.py +0 -0
  18. {fluxloop_cli-0.2.9 → fluxloop_cli-0.2.10}/fluxloop_cli/input_generator.py +0 -0
  19. {fluxloop_cli-0.2.9 → fluxloop_cli-0.2.10}/fluxloop_cli/llm_generator.py +0 -0
  20. {fluxloop_cli-0.2.9 → fluxloop_cli-0.2.10}/fluxloop_cli/main.py +0 -0
  21. {fluxloop_cli-0.2.9 → fluxloop_cli-0.2.10}/fluxloop_cli/project_paths.py +0 -0
  22. {fluxloop_cli-0.2.9 → fluxloop_cli-0.2.10}/fluxloop_cli/runner.py +0 -0
  23. {fluxloop_cli-0.2.9 → fluxloop_cli-0.2.10}/fluxloop_cli/target_loader.py +0 -0
  24. {fluxloop_cli-0.2.9 → fluxloop_cli-0.2.10}/fluxloop_cli/templates.py +0 -0
  25. {fluxloop_cli-0.2.9 → fluxloop_cli-0.2.10}/fluxloop_cli/validators.py +0 -0
  26. {fluxloop_cli-0.2.9 → fluxloop_cli-0.2.10}/fluxloop_cli.egg-info/SOURCES.txt +0 -0
  27. {fluxloop_cli-0.2.9 → fluxloop_cli-0.2.10}/fluxloop_cli.egg-info/dependency_links.txt +0 -0
  28. {fluxloop_cli-0.2.9 → fluxloop_cli-0.2.10}/fluxloop_cli.egg-info/entry_points.txt +0 -0
  29. {fluxloop_cli-0.2.9 → fluxloop_cli-0.2.10}/fluxloop_cli.egg-info/requires.txt +0 -0
  30. {fluxloop_cli-0.2.9 → fluxloop_cli-0.2.10}/fluxloop_cli.egg-info/top_level.txt +0 -0
  31. {fluxloop_cli-0.2.9 → fluxloop_cli-0.2.10}/setup.cfg +0 -0
  32. {fluxloop_cli-0.2.9 → fluxloop_cli-0.2.10}/tests/test_arg_binder.py +0 -0
  33. {fluxloop_cli-0.2.9 → fluxloop_cli-0.2.10}/tests/test_config_command.py +0 -0
  34. {fluxloop_cli-0.2.9 → fluxloop_cli-0.2.10}/tests/test_input_generator.py +0 -0
  35. {fluxloop_cli-0.2.9 → fluxloop_cli-0.2.10}/tests/test_target_loader.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fluxloop-cli
3
- Version: 0.2.9
3
+ Version: 0.2.10
4
4
  Summary: FluxLoop CLI for running agent simulations
5
5
  Author-email: FluxLoop Team <team@fluxloop.dev>
6
6
  License: Apache-2.0
@@ -2,7 +2,7 @@
2
2
  FluxLoop CLI - Command-line interface for running agent simulations.
3
3
  """
4
4
 
5
- __version__ = "0.2.9"
5
+ __version__ = "0.2.10"
6
6
 
7
7
  from .main import app
8
8
 
@@ -7,6 +7,25 @@ import json
7
7
  from pathlib import Path
8
8
  from typing import Any, Callable, Dict, Optional
9
9
 
10
+
11
+ class _AttrDict(dict):
12
+ """Dictionary that also supports attribute access for keys."""
13
+
14
+ def __getattr__(self, item: str) -> Any: # type: ignore[override]
15
+ try:
16
+ return self[item]
17
+ except KeyError as exc: # pragma: no cover
18
+ raise AttributeError(item) from exc
19
+
20
+ def __setattr__(self, key: str, value: Any) -> None: # type: ignore[override]
21
+ self[key] = value
22
+
23
+ def __delattr__(self, item: str) -> None: # type: ignore[override]
24
+ try:
25
+ del self[item]
26
+ except KeyError as exc: # pragma: no cover
27
+ raise AttributeError(item) from exc
28
+
10
29
  from fluxloop.schemas import ExperimentConfig, ReplayArgsConfig
11
30
 
12
31
 
@@ -97,7 +116,7 @@ class ArgBinder:
97
116
 
98
117
  self._restore_callables(kwargs, replay)
99
118
  self._ensure_no_unmapped_callables(kwargs, replay)
100
- return kwargs
119
+ return self._hydrate_structures(kwargs)
101
120
 
102
121
  return self._bind_by_signature(func, runtime_input)
103
122
 
@@ -157,6 +176,20 @@ class ArgBinder:
157
176
  f"{', '.join(missing)}. Configure them under replay_args.callable_providers."
158
177
  )
159
178
 
179
+ def _hydrate_structures(self, payload: Dict[str, Any]) -> Dict[str, Any]:
180
+ return {key: self._hydrate_value(value) for key, value in payload.items()}
181
+
182
+ def _hydrate_value(self, value: Any) -> Any:
183
+ if callable(value):
184
+ return value
185
+ if isinstance(value, _AttrDict):
186
+ return value
187
+ if isinstance(value, dict):
188
+ return _AttrDict({k: self._hydrate_value(v) for k, v in value.items()})
189
+ if isinstance(value, list):
190
+ return [self._hydrate_value(item) for item in value]
191
+ return value
192
+
160
193
  def _resolve_builtin_callable(self, provider: str, marker: str) -> Callable:
161
194
  is_async = marker.endswith(":async>")
162
195
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fluxloop-cli
3
- Version: 0.2.9
3
+ Version: 0.2.10
4
4
  Summary: FluxLoop CLI for running agent simulations
5
5
  Author-email: FluxLoop Team <team@fluxloop.dev>
6
6
  License: Apache-2.0
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "fluxloop-cli"
7
- version = "0.2.9"
7
+ version = "0.2.10"
8
8
  description = "FluxLoop CLI for running agent simulations"
9
9
  authors = [
10
10
  {name = "FluxLoop Team", email = "team@fluxloop.dev"}
File without changes
File without changes