langfun 0.1.2.dev202511030805__tar.gz → 0.1.2.dev202511050805__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.
Potentially problematic release.
This version of langfun might be problematic. Click here for more details.
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/PKG-INFO +1 -1
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/agentic/action.py +76 -9
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/agentic/action_eval.py +9 -2
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/async_support.py +32 -3
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/coding/python/correction.py +19 -9
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/coding/python/execution.py +14 -12
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/coding/python/generation.py +21 -16
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/coding/python/sandboxing.py +23 -3
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/component.py +42 -3
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/concurrent.py +70 -6
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/console.py +1 -1
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/data/conversion/anthropic.py +10 -3
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/data/conversion/gemini.py +9 -2
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/data/conversion/openai.py +17 -7
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/eval/base.py +46 -42
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/eval/matching.py +5 -2
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/eval/patching.py +3 -3
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/eval/scoring.py +4 -3
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/eval/v2/checkpointing.py +30 -4
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/eval/v2/evaluation.py +59 -13
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/eval/v2/example.py +22 -11
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/eval/v2/experiment.py +51 -8
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/eval/v2/metric_values.py +23 -3
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/eval/v2/metrics.py +33 -4
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/eval/v2/progress.py +9 -1
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/eval/v2/reporting.py +15 -1
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/eval/v2/runners.py +27 -7
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/langfunc.py +45 -130
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/language_model.py +88 -10
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/llms/anthropic.py +27 -2
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/llms/azure_openai.py +29 -17
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/llms/cache/base.py +22 -2
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/llms/cache/in_memory.py +48 -7
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/llms/compositional.py +25 -1
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/llms/deepseek.py +29 -1
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/llms/fake.py +32 -1
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/llms/gemini.py +9 -1
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/llms/google_genai.py +29 -1
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/llms/groq.py +27 -2
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/llms/llama_cpp.py +22 -3
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/llms/openai.py +29 -1
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/llms/openai_compatible.py +18 -6
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/llms/rest.py +12 -1
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/llms/vertexai.py +39 -6
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/logging.py +1 -1
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/mcp/client.py +77 -22
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/mcp/session.py +90 -10
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/mcp/tool.py +83 -23
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/memory.py +1 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/message.py +75 -11
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/message_test.py +9 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/modalities/audio.py +21 -1
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/modalities/image.py +19 -1
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/modalities/mime.py +54 -4
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/modalities/pdf.py +19 -1
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/modalities/video.py +21 -1
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/modality.py +66 -5
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/natural_language.py +1 -1
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/sampling.py +4 -4
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/structured/completion.py +32 -37
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/structured/description.py +54 -50
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/structured/function_generation.py +29 -12
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/structured/mapping.py +70 -15
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/structured/parsing.py +90 -74
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/structured/parsing_test.py +0 -3
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/structured/querying.py +201 -130
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/structured/schema.py +70 -10
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/structured/schema_generation.py +33 -14
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/structured/scoring.py +45 -34
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/structured/tokenization.py +24 -9
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/subscription.py +2 -2
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/template.py +139 -40
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/template_test.py +40 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun.egg-info/PKG-INFO +1 -1
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/LICENSE +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/README.md +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/__init__.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/assistant/capabilities/gui/__init__.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/assistant/capabilities/gui/bounding_box_parser.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/assistant/capabilities/gui/bounding_box_parser_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/assistant/capabilities/gui/drawing.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/assistant/capabilities/gui/drawing_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/assistant/capabilities/gui/location.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/assistant/capabilities/gui/location_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/__init__.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/agentic/__init__.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/agentic/action_eval_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/agentic/action_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/async_support_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/coding/__init__.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/coding/python/__init__.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/coding/python/correction_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/coding/python/execution_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/coding/python/generation_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/coding/python/parsing.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/coding/python/parsing_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/coding/python/sandboxing_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/component_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/concurrent_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/console_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/data/__init__.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/data/conversion/__init__.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/data/conversion/anthropic_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/data/conversion/gemini_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/data/conversion/openai_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/eval/__init__.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/eval/base_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/eval/matching_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/eval/patching_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/eval/scoring_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/eval/v2/__init__.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/eval/v2/checkpointing_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/eval/v2/eval_test_helper.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/eval/v2/evaluation_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/eval/v2/example_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/eval/v2/experiment_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/eval/v2/metric_values_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/eval/v2/metrics_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/eval/v2/progress_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/eval/v2/progress_tracking.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/eval/v2/progress_tracking_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/eval/v2/reporting_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/eval/v2/runners_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/langfunc_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/language_model_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/llms/__init__.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/llms/anthropic_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/llms/azure_openai_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/llms/cache/__init__.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/llms/cache/in_memory_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/llms/compositional_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/llms/deepseek_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/llms/fake_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/llms/gemini_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/llms/google_genai_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/llms/groq_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/llms/llama_cpp_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/llms/openai_compatible_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/llms/openai_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/llms/rest_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/llms/vertexai_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/logging_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/mcp/__init__.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/mcp/client_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/mcp/session_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/mcp/testing/simple_mcp_client.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/mcp/testing/simple_mcp_server.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/mcp/tool_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/memories/__init__.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/memories/conversation_history.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/memories/conversation_history_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/modalities/__init__.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/modalities/audio_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/modalities/image_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/modalities/mime_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/modalities/pdf_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/modalities/video_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/modality_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/natural_language_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/sampling_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/structured/__init__.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/structured/completion_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/structured/description_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/structured/function_generation_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/structured/mapping_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/structured/querying_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/structured/schema_generation_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/structured/schema_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/structured/scoring_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/structured/tokenization_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/subscription_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/templates/__init__.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/templates/completion.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/templates/completion_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/templates/conversation.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/templates/conversation_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/templates/demonstration.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/templates/demonstration_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/templates/selfplay.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/templates/selfplay_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/env/__init__.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/env/base_environment.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/env/base_environment_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/env/base_feature.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/env/base_feature_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/env/base_sandbox.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/env/base_sandbox_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/env/event_handlers/__init__.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/env/event_handlers/chain.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/env/event_handlers/chain_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/env/event_handlers/event_logger.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/env/event_handlers/event_logger_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/env/event_handlers/metric_writer.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/env/event_handlers/metric_writer_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/env/interface.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/env/interface_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/env/load_balancers.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/env/load_balancers_test.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/env/test_utils.py +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun.egg-info/SOURCES.txt +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun.egg-info/dependency_links.txt +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun.egg-info/requires.txt +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun.egg-info/top_level.txt +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/setup.cfg +0 -0
- {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/setup.py +0 -0
{langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/agentic/action.py
RENAMED
|
@@ -36,7 +36,12 @@ class ActionTimeoutError(ActionError):
|
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
class Action(pg.Object):
|
|
39
|
-
"""Base class for
|
|
39
|
+
"""Base class for agentic actions.
|
|
40
|
+
|
|
41
|
+
An `Action` represents a single, executable step or task that an agent can
|
|
42
|
+
perform, such as calling a tool, querying a language model, or returning a
|
|
43
|
+
final answer. Actions are designed to be composable and trackable within a
|
|
44
|
+
`Session`.
|
|
40
45
|
|
|
41
46
|
# Developing Actions
|
|
42
47
|
|
|
@@ -149,7 +154,7 @@ class Action(pg.Object):
|
|
|
149
154
|
|
|
150
155
|
# Explicitly create and pass a session.
|
|
151
156
|
with lf.Session(id='my_agent_session') as session:
|
|
152
|
-
result = calc(session=session)
|
|
157
|
+
result = calc(session=session) # Pass the session explicitly
|
|
153
158
|
print(result)
|
|
154
159
|
```
|
|
155
160
|
|
|
@@ -320,7 +325,14 @@ TracedItem = Union[
|
|
|
320
325
|
|
|
321
326
|
|
|
322
327
|
class ExecutionTrace(pg.Object, pg.views.html.HtmlTreeView.Extension):
|
|
323
|
-
"""Trace of
|
|
328
|
+
"""Trace of an execution, containing queries, logs, and sub-actions.
|
|
329
|
+
|
|
330
|
+
`ExecutionTrace` records the sequence of operations performed during an
|
|
331
|
+
action's execution or within a specific phase of execution (demarcated by
|
|
332
|
+
`session.track_phase`). It captures `lf.query` calls, log entries, and
|
|
333
|
+
nested `ActionInvocation` objects in the order they occurred. It also
|
|
334
|
+
aggregates LLM usage summaries from its child items.
|
|
335
|
+
"""
|
|
324
336
|
|
|
325
337
|
name: Annotated[
|
|
326
338
|
str | None,
|
|
@@ -328,7 +340,7 @@ class ExecutionTrace(pg.Object, pg.views.html.HtmlTreeView.Extension):
|
|
|
328
340
|
'The name of the execution trace. If None, the trace is unnamed, '
|
|
329
341
|
'which is the case for the top-level trace of an action. An '
|
|
330
342
|
'execution trace could have sub-traces, called phases, which are '
|
|
331
|
-
'created and named by `session.
|
|
343
|
+
'created and named by `session.track_phase()` context manager.'
|
|
332
344
|
)
|
|
333
345
|
] = None
|
|
334
346
|
|
|
@@ -362,7 +374,7 @@ class ExecutionTrace(pg.Object, pg.views.html.HtmlTreeView.Extension):
|
|
|
362
374
|
self.__dict__.pop('id', None)
|
|
363
375
|
|
|
364
376
|
def indexof(self, item: TracedItem, count_item_cls: Type[Any]) -> int:
|
|
365
|
-
"""Returns the index of the child
|
|
377
|
+
"""Returns the index of the child item of given type."""
|
|
366
378
|
pos = 0
|
|
367
379
|
for x in self._iter_children(count_item_cls):
|
|
368
380
|
if x is item:
|
|
@@ -787,7 +799,12 @@ class ExecutionTrace(pg.Object, pg.views.html.HtmlTreeView.Extension):
|
|
|
787
799
|
|
|
788
800
|
|
|
789
801
|
class ParallelExecutions(pg.Object, pg.views.html.HtmlTreeView.Extension):
|
|
790
|
-
"""A
|
|
802
|
+
"""A container for multiple parallel execution traces.
|
|
803
|
+
|
|
804
|
+
When `session.concurrent_map` is used, it creates a `ParallelExecutions`
|
|
805
|
+
object to hold an `ExecutionTrace` for each parallel branch of execution,
|
|
806
|
+
allowing inspection of parallel workflows.
|
|
807
|
+
"""
|
|
791
808
|
|
|
792
809
|
name: Annotated[
|
|
793
810
|
str | None,
|
|
@@ -876,7 +893,14 @@ class ParallelExecutions(pg.Object, pg.views.html.HtmlTreeView.Extension):
|
|
|
876
893
|
|
|
877
894
|
|
|
878
895
|
class ActionInvocation(pg.Object, pg.views.html.HtmlTreeView.Extension):
|
|
879
|
-
"""
|
|
896
|
+
"""An invocation of an action, capturing its execution and result.
|
|
897
|
+
|
|
898
|
+
`ActionInvocation` represents a single call to an `Action`. It contains
|
|
899
|
+
the `Action` object itself, its result or error, associated metadata,
|
|
900
|
+
and an `ExecutionTrace` detailing the steps taken during its execution
|
|
901
|
+
(queries, logs, sub-actions). Invocations form a tree structure within a
|
|
902
|
+
`Session`, reflecting the hierarchy of agentic operations.
|
|
903
|
+
"""
|
|
880
904
|
|
|
881
905
|
action: Annotated[
|
|
882
906
|
Action,
|
|
@@ -1406,7 +1430,50 @@ class SessionLogging(SessionEventHandler):
|
|
|
1406
1430
|
|
|
1407
1431
|
|
|
1408
1432
|
class Session(pg.Object, pg.views.html.HtmlTreeView.Extension):
|
|
1409
|
-
"""
|
|
1433
|
+
"""Manages the execution trajectory of agentic actions.
|
|
1434
|
+
|
|
1435
|
+
A `Session` tracks the execution of a root `Action` and all its
|
|
1436
|
+
sub-actions, including LLM queries (`lf.query`), logging messages,
|
|
1437
|
+
and nested actions. It provides a complete, hierarchical trace of an
|
|
1438
|
+
agent's workflow, which is important for debugging, analysis, and
|
|
1439
|
+
visualization.
|
|
1440
|
+
|
|
1441
|
+
Sessions can be created implicitly when an action is called without an
|
|
1442
|
+
active session, or explicitly for more control.
|
|
1443
|
+
|
|
1444
|
+
**1. Implicit Session:**
|
|
1445
|
+
When an action is called without a session, Langfun creates one automatically.
|
|
1446
|
+
|
|
1447
|
+
```python
|
|
1448
|
+
action = MyAction()
|
|
1449
|
+
action()
|
|
1450
|
+
session = action.session # Access the implicit session
|
|
1451
|
+
```
|
|
1452
|
+
|
|
1453
|
+
**2. Explicit Session:**
|
|
1454
|
+
Use a `with` statement to manage a session explicitly. This is useful for
|
|
1455
|
+
setting session IDs or capturing the trajectory of multiple top-level actions.
|
|
1456
|
+
|
|
1457
|
+
```python
|
|
1458
|
+
with lf.Session(id='my-session') as session:
|
|
1459
|
+
action1()
|
|
1460
|
+
action2()
|
|
1461
|
+
```
|
|
1462
|
+
|
|
1463
|
+
**3. Accessing Trajectory:**
|
|
1464
|
+
The `session.root` attribute provides access to the `ActionInvocation` tree.
|
|
1465
|
+
|
|
1466
|
+
```python
|
|
1467
|
+
with lf.Session() as session:
|
|
1468
|
+
my_action()
|
|
1469
|
+
|
|
1470
|
+
# Get all queries in the session
|
|
1471
|
+
print(session.all_queries)
|
|
1472
|
+
|
|
1473
|
+
# Get all top-level action calls in the session
|
|
1474
|
+
print(session.root.actions)
|
|
1475
|
+
```
|
|
1476
|
+
"""
|
|
1410
1477
|
|
|
1411
1478
|
root: Annotated[
|
|
1412
1479
|
ActionInvocation,
|
|
@@ -1559,7 +1626,7 @@ class Session(pg.Object, pg.views.html.HtmlTreeView.Extension):
|
|
|
1559
1626
|
)
|
|
1560
1627
|
|
|
1561
1628
|
def update_progress(self, title: str, **kwargs: Any) -> None:
|
|
1562
|
-
"""
|
|
1629
|
+
"""Updates the progress of current action's execution.
|
|
1563
1630
|
|
|
1564
1631
|
Args:
|
|
1565
1632
|
title: The title of the progress update.
|
{langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/agentic/action_eval.py
RENAMED
|
@@ -24,7 +24,14 @@ import pyglove as pg
|
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
class ActionEval(lf.eval.v2.Evaluation):
|
|
27
|
-
"""
|
|
27
|
+
"""Evaluation for agentic actions.
|
|
28
|
+
|
|
29
|
+
`ActionEval` is a specialized evaluation class for executing and evaluating
|
|
30
|
+
agentic actions based on provided inputs. Each input example is expected to
|
|
31
|
+
contain an `action` attribute. The `process` method executes the action
|
|
32
|
+
within a dedicated `Session`, captures the final result, and returns it
|
|
33
|
+
along with the session details in the metadata.
|
|
34
|
+
"""
|
|
28
35
|
|
|
29
36
|
action_args: Annotated[
|
|
30
37
|
dict[str, Any],
|
|
@@ -68,7 +75,7 @@ class ExampleView(pg.Object):
|
|
|
68
75
|
class ActionEvalV1(lf_eval.Matching):
|
|
69
76
|
"""Base class for action evaluations.
|
|
70
77
|
|
|
71
|
-
The input function should
|
|
78
|
+
The input function should return a list of pg.Dict, with `action` and
|
|
72
79
|
`groundtruth` fields.
|
|
73
80
|
"""
|
|
74
81
|
# We override the schema and prompt to dummy values since they are not used.
|
{langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511050805}/langfun/core/async_support.py
RENAMED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
|
-
"""
|
|
14
|
+
"""Utilities for asynchronous programming in Langfun."""
|
|
15
15
|
|
|
16
16
|
import asyncio
|
|
17
17
|
import contextlib
|
|
@@ -23,7 +23,20 @@ import pyglove as pg
|
|
|
23
23
|
async def invoke_async(
|
|
24
24
|
sync_callable: Callable[..., Any], *args, **kwargs
|
|
25
25
|
) -> Any:
|
|
26
|
-
"""Invokes a callable asynchronously
|
|
26
|
+
"""Invokes a sync callable asynchronously in a separate thread.
|
|
27
|
+
|
|
28
|
+
This is useful for wrapping a sync function into an async function,
|
|
29
|
+
allowing multiple calls of the sync function to run concurrently.
|
|
30
|
+
`lf.context` will be propagated to the thread that runs the sync callable.
|
|
31
|
+
|
|
32
|
+
Args:
|
|
33
|
+
sync_callable: The sync callable to invoke.
|
|
34
|
+
*args: Positional arguments to pass to the callable.
|
|
35
|
+
**kwargs: Keyword arguments to pass to the callable.
|
|
36
|
+
|
|
37
|
+
Returns:
|
|
38
|
+
An awaitable that resolves to the return value of the sync_callable.
|
|
39
|
+
"""
|
|
27
40
|
return await asyncio.to_thread(
|
|
28
41
|
# Enable `lf.context` manager for async calls.
|
|
29
42
|
pg.with_contextual_override(sync_callable), *args, **kwargs
|
|
@@ -35,7 +48,23 @@ def invoke_sync(
|
|
|
35
48
|
*args,
|
|
36
49
|
**kwargs
|
|
37
50
|
) -> Any:
|
|
38
|
-
"""Invokes
|
|
51
|
+
"""Invokes an async callable synchronously.
|
|
52
|
+
|
|
53
|
+
This is useful for calling an async function from a sync context.
|
|
54
|
+
If there is an existing async event loop in current thread managed by
|
|
55
|
+
`lf.sync_context_manager`, it will be used for running the async callable.
|
|
56
|
+
Otherwise, `anyio.run` will be used to run the async callable in a new
|
|
57
|
+
event loop.
|
|
58
|
+
`lf.context` will be propagated to the async callable.
|
|
59
|
+
|
|
60
|
+
Args:
|
|
61
|
+
async_callable: The async callable to invoke.
|
|
62
|
+
*args: Positional arguments to pass to the callable.
|
|
63
|
+
**kwargs: Keyword arguments to pass to the callable.
|
|
64
|
+
|
|
65
|
+
Returns:
|
|
66
|
+
The return value of the async_callable.
|
|
67
|
+
"""
|
|
39
68
|
async def _invoke():
|
|
40
69
|
return await async_callable(*args, **kwargs)
|
|
41
70
|
invoke_fn = pg.with_contextual_override(_invoke)
|
|
@@ -19,13 +19,23 @@ import pyglove as pg
|
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
class CodeWithError(pg.Object):
|
|
22
|
-
"""Python code with error.
|
|
22
|
+
"""A structure representing Python code along with an execution error.
|
|
23
|
+
|
|
24
|
+
This is used as input to a language model for error correction, providing
|
|
25
|
+
the model with the code that failed and the error message it produced.
|
|
26
|
+
"""
|
|
23
27
|
|
|
24
28
|
code: str
|
|
25
29
|
error: str
|
|
26
30
|
|
|
27
31
|
|
|
28
32
|
class CorrectedCode(pg.Object):
|
|
33
|
+
"""A structure containing corrected Python code.
|
|
34
|
+
|
|
35
|
+
This is used as the output schema when asking a language model to correct
|
|
36
|
+
code, expecting the model to return the fixed code in the `corrected_code`
|
|
37
|
+
field.
|
|
38
|
+
"""
|
|
29
39
|
corrected_code: str
|
|
30
40
|
|
|
31
41
|
|
|
@@ -49,7 +59,7 @@ def run_with_correction(
|
|
|
49
59
|
code: The source code that may or may not be problematic.
|
|
50
60
|
error: An optional initial error for `code` when it's problematic, usually
|
|
51
61
|
caught from elsewhere when it ran. If None, code will be executed once to
|
|
52
|
-
verify if
|
|
62
|
+
verify if it's good and obtain a feedback error message.
|
|
53
63
|
global_vars: A dict of str to value as the global variables that could be
|
|
54
64
|
accessed within the corrected code.
|
|
55
65
|
lm: Language model to be used. If not specified, it will try to use the `lm`
|
|
@@ -57,15 +67,15 @@ def run_with_correction(
|
|
|
57
67
|
max_attempts: Max number of attempts for the correction.
|
|
58
68
|
sandbox: If True, run code in sandbox; If False, run code in current
|
|
59
69
|
process. If None, run in sandbox first, if the output could not be
|
|
60
|
-
serialized and
|
|
70
|
+
serialized and passed to current process, run the code again in current
|
|
61
71
|
process.
|
|
62
72
|
permission: The permission to run the code.
|
|
63
73
|
timeout: The timeout for running the corrected code. If None, there is no
|
|
64
74
|
timeout. Applicable only when sandbox is set to True.
|
|
65
75
|
returns_code: If True, the return value is a tuple of (result, final code).
|
|
66
76
|
Otherwise the return value is the result only.
|
|
67
|
-
returns_stdout: If True, the stdout (a
|
|
68
|
-
outputs_intermediate: If True, intermediate output will be
|
|
77
|
+
returns_stdout: If True, the stdout (a string) will be returned.
|
|
78
|
+
outputs_intermediate: If True, intermediate output will be output as a
|
|
69
79
|
dict, with the last line's value accessible by key '__result__'. Otherwise
|
|
70
80
|
the value of the last line will be returned.
|
|
71
81
|
|
|
@@ -161,7 +171,7 @@ def correct(
|
|
|
161
171
|
code: The source code that may or may not be problematic.
|
|
162
172
|
error: An optional initial error for `code` when it's problematic, usually
|
|
163
173
|
caught from elsewhere when it ran. If None, code will be executed once to
|
|
164
|
-
verify if
|
|
174
|
+
verify if it's good and obtain a feedback error message.
|
|
165
175
|
global_vars: A dict of str to value as the global variables that could be
|
|
166
176
|
accessed within the corrected code.
|
|
167
177
|
lm: Language model to be used. If not specified, it will try to use the `lm`
|
|
@@ -169,7 +179,7 @@ def correct(
|
|
|
169
179
|
max_attempts: Max number of attempts for the correction.
|
|
170
180
|
sandbox: If True, run code in sandbox; If False, run code in current
|
|
171
181
|
process. If None, run in sandbox first, if the output could not be
|
|
172
|
-
serialized and
|
|
182
|
+
serialized and passed to current process, run the code again in current
|
|
173
183
|
process.
|
|
174
184
|
timeout: The timeout for running the corrected code. If None, there is no
|
|
175
185
|
timeout. Applicable only when sandbox is set to True.
|
|
@@ -193,7 +203,7 @@ def correct(
|
|
|
193
203
|
|
|
194
204
|
|
|
195
205
|
def _error_feedback_str(error: Exception) -> str:
|
|
196
|
-
"""Returns the error
|
|
206
|
+
"""Returns the error string for feedback."""
|
|
197
207
|
if isinstance(error, pg.coding.CodeError):
|
|
198
208
|
return pg.decolor(error.format(include_complete_code=False))
|
|
199
209
|
else:
|
|
@@ -201,7 +211,7 @@ def _error_feedback_str(error: Exception) -> str:
|
|
|
201
211
|
|
|
202
212
|
|
|
203
213
|
def _maybe_custom_validate(result: Any) -> Any:
|
|
204
|
-
"""
|
|
214
|
+
"""Applies custom validation through __validate__ method."""
|
|
205
215
|
if isinstance(result, dict) and "__result__" in result:
|
|
206
216
|
r = result["__result__"]
|
|
207
217
|
else:
|
|
@@ -45,17 +45,17 @@ def evaluate(
|
|
|
45
45
|
global_vars: An optional dict as the globals that could be referenced by the
|
|
46
46
|
code.
|
|
47
47
|
permission: Permission for the Python code to run.
|
|
48
|
-
returns_stdout: If True, the stdout (a
|
|
48
|
+
returns_stdout: If True, the stdout (a string) will be returned.
|
|
49
49
|
outputs_intermediate: Applicable when returns_stdout is False. If True,
|
|
50
|
-
intermediate output will be
|
|
51
|
-
value accessible by key '__result__' and the
|
|
50
|
+
intermediate output will be output as a dict, with the last line's
|
|
51
|
+
value accessible by key '__result__' and the stdout accessible by
|
|
52
52
|
key '__stdout__'. Otherwise the value of the last line will be returned.
|
|
53
53
|
|
|
54
54
|
Returns:
|
|
55
55
|
The value of the last line of the code block. Or a dict of variable
|
|
56
56
|
names of all locals to their evaluated values as the output of the code to
|
|
57
57
|
run. The value for the last line can be accessed by key '__result__'. Or the
|
|
58
|
-
stdout as a
|
|
58
|
+
stdout as a string.
|
|
59
59
|
"""
|
|
60
60
|
return pg.coding.evaluate(
|
|
61
61
|
parsing.clean(code),
|
|
@@ -85,28 +85,30 @@ def run(
|
|
|
85
85
|
|
|
86
86
|
Args:
|
|
87
87
|
code: Python code to run.
|
|
88
|
-
global_vars: An optional dict
|
|
88
|
+
global_vars: An optional dict as the globals that could be referenced by the
|
|
89
|
+
code.
|
|
89
90
|
permission: Permission for the Python code to run.
|
|
90
|
-
returns_stdout: If True, the stdout (a
|
|
91
|
+
returns_stdout: If True, the stdout (a string) will be returned.
|
|
91
92
|
outputs_intermediate: Applicable when returns_stdout is False. If True,
|
|
92
|
-
intermediate output will be
|
|
93
|
-
value accessible by key '__result__' and the
|
|
93
|
+
intermediate output will be output as a dict, with the last line's
|
|
94
|
+
value accessible by key '__result__' and the stdout accessible by
|
|
94
95
|
key '__stdout__'. Otherwise the value of the last line will be returned.
|
|
95
96
|
sandbox: If True, run code in sandbox; If False, run code in current
|
|
96
97
|
process. If None, run in sandbox first, if the output could not be
|
|
97
|
-
serialized and
|
|
98
|
+
serialized and passed to current process, run the code again in current
|
|
98
99
|
process.
|
|
99
|
-
timeout: Execution timeout in seconds. If None, wait the code
|
|
100
|
+
timeout: Execution timeout in seconds. If None, wait for the code to
|
|
101
|
+
complete.
|
|
100
102
|
|
|
101
103
|
Returns:
|
|
102
104
|
The value of the last line of the code block. Or a dict of variable
|
|
103
105
|
names of all locals to their evaluated values as the output of the code to
|
|
104
106
|
run. The value for the last line can be accessed by key '__result__'. Or the
|
|
105
|
-
stdout as a
|
|
107
|
+
stdout as a string.
|
|
106
108
|
|
|
107
109
|
Raises:
|
|
108
110
|
TimeoutError: If the execution time exceeds the timeout.
|
|
109
|
-
Exception:
|
|
111
|
+
Exception: Exceptions that are raised from the code.
|
|
110
112
|
"""
|
|
111
113
|
return pg.coding.run(
|
|
112
114
|
parsing.clean(code),
|
|
@@ -22,9 +22,13 @@ import pyglove as pg
|
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
class PythonCode(pg.Object):
|
|
25
|
-
"""
|
|
25
|
+
"""Represents a piece of Python code that can be executed.
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
When `PythonCode` is instantiated within a `PythonCode.auto_run()` context,
|
|
28
|
+
it automatically executes the code and returns the result of the last
|
|
29
|
+
expression. Otherwise, it acts as a container for the source code, which
|
|
30
|
+
can be executed by calling the instance. The class also supports automatic
|
|
31
|
+
error correction via `lf.coding.run_with_correction` when called.
|
|
28
32
|
"""
|
|
29
33
|
|
|
30
34
|
source: Annotated[
|
|
@@ -56,7 +60,7 @@ class PythonCode(pg.Object):
|
|
|
56
60
|
Otherwise, auto call will be disabled.
|
|
57
61
|
sandbox: If True, run code in sandbox; If False, run code in current
|
|
58
62
|
process. If None, run in sandbox first, if the output could not be
|
|
59
|
-
serialized and
|
|
63
|
+
serialized and passed to current process, run the code again in current
|
|
60
64
|
process. Applicable when `enabled` is set to True.
|
|
61
65
|
timeout: Timeout in seconds. Applicable when both `enabled` and `sandbox`
|
|
62
66
|
are set to True.
|
|
@@ -98,17 +102,17 @@ class PythonCode(pg.Object):
|
|
|
98
102
|
Args:
|
|
99
103
|
sandbox: If True, run code in sandbox; If False, run code in current
|
|
100
104
|
process. If None, run in sandbox first, if the output could not be
|
|
101
|
-
serialized and
|
|
105
|
+
serialized and passed to current process, run the code again in current
|
|
102
106
|
process.
|
|
103
107
|
timeout: Timeout in seconds. If None, there is no timeout. Applicable when
|
|
104
108
|
sandbox is set to True.
|
|
105
109
|
global_vars: Global variables that could be accessed from the source code.
|
|
106
|
-
returns_stdout: If True, the stdout (a
|
|
110
|
+
returns_stdout: If True, the stdout (a string) will be returned.
|
|
107
111
|
outputs_intermediate: Applicable when returns_stdout is False. If True,
|
|
108
|
-
intermediate output will be
|
|
109
|
-
value accessible by key '__result__' and the
|
|
112
|
+
intermediate output will be output as a dict, with the last line's
|
|
113
|
+
value accessible by key '__result__' and the stdout accessible by
|
|
110
114
|
key '__stdout__'. Otherwise the value of the last line will be returned.
|
|
111
|
-
autofix: Number of attempts to
|
|
115
|
+
autofix: Number of attempts to autofix the generated code. If 0, autofix
|
|
112
116
|
is disabled.
|
|
113
117
|
autofix_lm: Language model to be used. If not specified, it will try to
|
|
114
118
|
use the `lm` under `lf.context`.
|
|
@@ -117,8 +121,8 @@ class PythonCode(pg.Object):
|
|
|
117
121
|
The value of the last expression in the source code. Or a dict of local
|
|
118
122
|
variable names defined in the source code to their values if
|
|
119
123
|
`outputs_intermediate` is set to True. The value for the last line can be
|
|
120
|
-
accessed by key '__result__'. Or the stdout as a
|
|
121
|
-
is set to True.
|
|
124
|
+
accessed by key '__result__'. Or the stdout as a string if
|
|
125
|
+
`returns_stdout` is set to True.
|
|
122
126
|
|
|
123
127
|
Raises:
|
|
124
128
|
TimeoutError: If `sandbox` is True and timeout has reached.
|
|
@@ -152,12 +156,12 @@ class PythonCode(pg.Object):
|
|
|
152
156
|
Args:
|
|
153
157
|
sandbox: If True, run code in sandbox; If False, run code in current
|
|
154
158
|
process. If None, run in sandbox first, if the output could not be
|
|
155
|
-
serialized and
|
|
159
|
+
serialized and passed to current process, run the code again in current
|
|
156
160
|
process.
|
|
157
161
|
timeout: Timeout in seconds. If None, there is no timeout. Applicable when
|
|
158
162
|
sandbox is set to True.
|
|
159
163
|
global_vars: Global variables that could be accessed from the source code.
|
|
160
|
-
autofix: Number of attempts to
|
|
164
|
+
autofix: Number of attempts to autofix the generated code. If 0, autofix
|
|
161
165
|
is disabled. Auto-fix is not supported for 'json' protocol.
|
|
162
166
|
autofix_lm: Language model to be used. If not specified, it will try to
|
|
163
167
|
use the `lm` under `lf.context`.
|
|
@@ -182,10 +186,11 @@ class PythonCode(pg.Object):
|
|
|
182
186
|
|
|
183
187
|
|
|
184
188
|
class PythonFunction(pg.Object):
|
|
185
|
-
"""
|
|
189
|
+
"""Represents a Python function defined by source code.
|
|
186
190
|
|
|
187
|
-
|
|
188
|
-
|
|
191
|
+
This class takes Python source code that defines a function and makes it
|
|
192
|
+
callable. The source code is evaluated to create a function object, which
|
|
193
|
+
can then be invoked like a regular Python function.
|
|
189
194
|
"""
|
|
190
195
|
|
|
191
196
|
name: str
|
|
@@ -214,7 +219,7 @@ class PythonFunction(pg.Object):
|
|
|
214
219
|
*args: Positional arguments that will be passed to the implementation.
|
|
215
220
|
sandbox: If True, run code in sandbox; If False, run code in current
|
|
216
221
|
process. If None, run in sandbox first, if the output could not be
|
|
217
|
-
serialized and
|
|
222
|
+
serialized and passed to current process, run the code again in current
|
|
218
223
|
process.
|
|
219
224
|
timeout: Timeout in seconds. If None, there is no timeout. Applicable when
|
|
220
225
|
sandbox is set to True.
|
|
@@ -23,7 +23,14 @@ import pyglove as pg
|
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
class SandboxOutput(pg.Object):
|
|
26
|
-
"""
|
|
26
|
+
"""A structure containing the output from a sandbox execution.
|
|
27
|
+
|
|
28
|
+
Attributes:
|
|
29
|
+
stdout: The standard output captured during execution.
|
|
30
|
+
stderr: The standard error captured during execution.
|
|
31
|
+
output_files: A dictionary of file names to their byte content for files
|
|
32
|
+
generated during execution.
|
|
33
|
+
"""
|
|
27
34
|
|
|
28
35
|
stdout: Annotated[
|
|
29
36
|
str,
|
|
@@ -42,7 +49,14 @@ class SandboxOutput(pg.Object):
|
|
|
42
49
|
|
|
43
50
|
|
|
44
51
|
class BaseSandbox(pg.Object):
|
|
45
|
-
"""
|
|
52
|
+
"""Base class for Python code sandboxing.
|
|
53
|
+
|
|
54
|
+
A sandbox provides an isolated environment for executing Python code,
|
|
55
|
+
typically with restrictions on file system access, network calls, or other
|
|
56
|
+
potentially harmful operations. This base class defines the interface for
|
|
57
|
+
sandboxes, including methods for running code (`run`), uploading files
|
|
58
|
+
(`upload`), and managing the sandbox lifecycle (`setup`, `cleanup`).
|
|
59
|
+
"""
|
|
46
60
|
|
|
47
61
|
def _on_bound(self):
|
|
48
62
|
super()._on_bound()
|
|
@@ -111,7 +125,13 @@ class BaseSandbox(pg.Object):
|
|
|
111
125
|
|
|
112
126
|
|
|
113
127
|
class MultiProcessingSandbox(BaseSandbox):
|
|
114
|
-
"""
|
|
128
|
+
"""A sandbox implementation using Python's `multiprocessing`.
|
|
129
|
+
|
|
130
|
+
This sandbox executes code in a separate process, providing isolation from
|
|
131
|
+
the main process. It uses a temporary directory for file operations,
|
|
132
|
+
which is cleaned up when the sandbox is closed. It relies on
|
|
133
|
+
`pg.coding.run` with `sandbox=True` for execution.
|
|
134
|
+
"""
|
|
115
135
|
|
|
116
136
|
def _on_bound(self):
|
|
117
137
|
super()._on_bound()
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
|
-
"""
|
|
14
|
+
"""Base component for Langfun."""
|
|
15
15
|
|
|
16
16
|
from typing import ContextManager
|
|
17
17
|
import pyglove as pg
|
|
@@ -22,7 +22,37 @@ RAISE_IF_HAS_ERROR = (pg.MISSING_VALUE,)
|
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
class Component(pg.ContextualObject):
|
|
25
|
-
"""Base class for
|
|
25
|
+
"""Base class for Langfun components.
|
|
26
|
+
|
|
27
|
+
Langfun components are context-aware symbolic objects powered by PyGlove.
|
|
28
|
+
(See [PyGlove basics](https://pyglove.readthedocs.io/en/latest/basics.html)
|
|
29
|
+
for more details).
|
|
30
|
+
|
|
31
|
+
**Context-awareness**
|
|
32
|
+
|
|
33
|
+
Langfun components can have contextual attributes using `lf.contextual`,
|
|
34
|
+
whose values can be provided or overridden via `lf.context` or
|
|
35
|
+
`lf.use_settings`.
|
|
36
|
+
|
|
37
|
+
Example:
|
|
38
|
+
```python
|
|
39
|
+
import langfun as lf
|
|
40
|
+
|
|
41
|
+
class Bar(lf.Component):
|
|
42
|
+
y = lf.contextual(1)
|
|
43
|
+
|
|
44
|
+
class Foo(lf.Component):
|
|
45
|
+
x = lf.contextual(0)
|
|
46
|
+
bar = Bar()
|
|
47
|
+
|
|
48
|
+
f = Foo()
|
|
49
|
+
assert f.x == 0 and f.bar.y == 1
|
|
50
|
+
|
|
51
|
+
# `lf.context` overrides `lf.contextual` attributes.
|
|
52
|
+
with lf.context(x=10, y=20):
|
|
53
|
+
assert f.x == 10 and f.bar.y == 20
|
|
54
|
+
```
|
|
55
|
+
"""
|
|
26
56
|
|
|
27
57
|
# Allow symbolic assignment, which invalidates the object and recomputes
|
|
28
58
|
# states upon update.
|
|
@@ -78,6 +108,15 @@ def use_settings(
|
|
|
78
108
|
) -> ContextManager[dict[str, pg.utils.ContextualOverride]]:
|
|
79
109
|
"""Shortcut method for overriding component attributes.
|
|
80
110
|
|
|
111
|
+
Example:
|
|
112
|
+
|
|
113
|
+
```
|
|
114
|
+
with lf.use_settings(
|
|
115
|
+
lm=lf.llms.Gpt35(),
|
|
116
|
+
temperature=0.0):
|
|
117
|
+
lf.query('who are you?')
|
|
118
|
+
```
|
|
119
|
+
|
|
81
120
|
Args:
|
|
82
121
|
cascade: If True, this override will apply to both current scope and nested
|
|
83
122
|
scope, meaning that this `lf.context` will take precedence over all
|
|
@@ -85,6 +124,6 @@ def use_settings(
|
|
|
85
124
|
**settings: Key/values as override for component attributes.
|
|
86
125
|
|
|
87
126
|
Returns:
|
|
88
|
-
A
|
|
127
|
+
A context manager for overriding settings.
|
|
89
128
|
"""
|
|
90
129
|
return context(cascade=cascade, override_attrs=True, **settings)
|