langfun 0.1.2.dev202510160805__tar.gz → 0.1.2.dev202510170805__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.

Files changed (194) hide show
  1. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/PKG-INFO +3 -1
  2. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/__init__.py +5 -1
  3. langfun-0.1.2.dev202510170805/langfun/core/async_support.py +98 -0
  4. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/async_support_test.py +23 -0
  5. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/concurrent_test.py +8 -2
  6. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/eval/v2/progress_tracking_test.py +2 -2
  7. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun.egg-info/PKG-INFO +3 -1
  8. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun.egg-info/requires.txt +2 -0
  9. langfun-0.1.2.dev202510160805/langfun/core/async_support.py +0 -28
  10. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/LICENSE +0 -0
  11. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/README.md +0 -0
  12. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/__init__.py +0 -0
  13. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/assistant/capabilities/gui/__init__.py +0 -0
  14. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/assistant/capabilities/gui/bounding_box_parser.py +0 -0
  15. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/assistant/capabilities/gui/bounding_box_parser_test.py +0 -0
  16. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/assistant/capabilities/gui/drawing.py +0 -0
  17. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/assistant/capabilities/gui/drawing_test.py +0 -0
  18. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/assistant/capabilities/gui/location.py +0 -0
  19. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/assistant/capabilities/gui/location_test.py +0 -0
  20. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/agentic/__init__.py +0 -0
  21. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/agentic/action.py +0 -0
  22. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/agentic/action_eval.py +0 -0
  23. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/agentic/action_eval_test.py +0 -0
  24. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/agentic/action_test.py +0 -0
  25. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/coding/__init__.py +0 -0
  26. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/coding/python/__init__.py +0 -0
  27. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/coding/python/correction.py +0 -0
  28. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/coding/python/correction_test.py +0 -0
  29. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/coding/python/execution.py +0 -0
  30. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/coding/python/execution_test.py +0 -0
  31. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/coding/python/generation.py +0 -0
  32. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/coding/python/generation_test.py +0 -0
  33. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/coding/python/parsing.py +0 -0
  34. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/coding/python/parsing_test.py +0 -0
  35. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/coding/python/sandboxing.py +0 -0
  36. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/coding/python/sandboxing_test.py +0 -0
  37. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/component.py +0 -0
  38. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/component_test.py +0 -0
  39. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/concurrent.py +0 -0
  40. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/console.py +0 -0
  41. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/console_test.py +0 -0
  42. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/data/__init__.py +0 -0
  43. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/data/conversion/__init__.py +0 -0
  44. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/data/conversion/anthropic.py +0 -0
  45. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/data/conversion/anthropic_test.py +0 -0
  46. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/data/conversion/gemini.py +0 -0
  47. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/data/conversion/gemini_test.py +0 -0
  48. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/data/conversion/openai.py +0 -0
  49. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/data/conversion/openai_test.py +0 -0
  50. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/eval/__init__.py +0 -0
  51. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/eval/base.py +0 -0
  52. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/eval/base_test.py +0 -0
  53. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/eval/matching.py +0 -0
  54. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/eval/matching_test.py +0 -0
  55. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/eval/patching.py +0 -0
  56. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/eval/patching_test.py +0 -0
  57. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/eval/scoring.py +0 -0
  58. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/eval/scoring_test.py +0 -0
  59. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/eval/v2/__init__.py +0 -0
  60. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/eval/v2/checkpointing.py +0 -0
  61. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/eval/v2/checkpointing_test.py +0 -0
  62. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/eval/v2/eval_test_helper.py +0 -0
  63. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/eval/v2/evaluation.py +0 -0
  64. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/eval/v2/evaluation_test.py +0 -0
  65. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/eval/v2/example.py +0 -0
  66. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/eval/v2/example_test.py +0 -0
  67. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/eval/v2/experiment.py +0 -0
  68. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/eval/v2/experiment_test.py +0 -0
  69. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/eval/v2/metric_values.py +0 -0
  70. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/eval/v2/metric_values_test.py +0 -0
  71. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/eval/v2/metrics.py +0 -0
  72. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/eval/v2/metrics_test.py +0 -0
  73. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/eval/v2/progress.py +0 -0
  74. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/eval/v2/progress_test.py +0 -0
  75. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/eval/v2/progress_tracking.py +0 -0
  76. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/eval/v2/reporting.py +0 -0
  77. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/eval/v2/reporting_test.py +0 -0
  78. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/eval/v2/runners.py +0 -0
  79. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/eval/v2/runners_test.py +0 -0
  80. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/langfunc.py +0 -0
  81. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/langfunc_test.py +0 -0
  82. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/language_model.py +0 -0
  83. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/language_model_test.py +0 -0
  84. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/llms/__init__.py +0 -0
  85. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/llms/anthropic.py +0 -0
  86. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/llms/anthropic_test.py +0 -0
  87. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/llms/azure_openai.py +0 -0
  88. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/llms/azure_openai_test.py +0 -0
  89. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/llms/cache/__init__.py +0 -0
  90. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/llms/cache/base.py +0 -0
  91. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/llms/cache/in_memory.py +0 -0
  92. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/llms/cache/in_memory_test.py +0 -0
  93. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/llms/compositional.py +0 -0
  94. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/llms/compositional_test.py +0 -0
  95. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/llms/deepseek.py +0 -0
  96. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/llms/deepseek_test.py +0 -0
  97. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/llms/fake.py +0 -0
  98. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/llms/fake_test.py +0 -0
  99. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/llms/gemini.py +0 -0
  100. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/llms/gemini_test.py +0 -0
  101. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/llms/google_genai.py +0 -0
  102. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/llms/google_genai_test.py +0 -0
  103. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/llms/groq.py +0 -0
  104. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/llms/groq_test.py +0 -0
  105. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/llms/llama_cpp.py +0 -0
  106. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/llms/llama_cpp_test.py +0 -0
  107. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/llms/openai.py +0 -0
  108. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/llms/openai_compatible.py +0 -0
  109. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/llms/openai_compatible_test.py +0 -0
  110. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/llms/openai_test.py +0 -0
  111. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/llms/rest.py +0 -0
  112. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/llms/rest_test.py +0 -0
  113. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/llms/vertexai.py +0 -0
  114. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/llms/vertexai_test.py +0 -0
  115. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/logging.py +0 -0
  116. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/logging_test.py +0 -0
  117. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/memories/__init__.py +0 -0
  118. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/memories/conversation_history.py +0 -0
  119. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/memories/conversation_history_test.py +0 -0
  120. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/memory.py +0 -0
  121. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/message.py +0 -0
  122. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/message_test.py +0 -0
  123. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/modalities/__init__.py +0 -0
  124. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/modalities/audio.py +0 -0
  125. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/modalities/audio_test.py +0 -0
  126. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/modalities/image.py +0 -0
  127. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/modalities/image_test.py +0 -0
  128. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/modalities/mime.py +0 -0
  129. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/modalities/mime_test.py +0 -0
  130. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/modalities/pdf.py +0 -0
  131. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/modalities/pdf_test.py +0 -0
  132. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/modalities/video.py +0 -0
  133. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/modalities/video_test.py +0 -0
  134. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/modality.py +0 -0
  135. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/modality_test.py +0 -0
  136. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/natural_language.py +0 -0
  137. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/natural_language_test.py +0 -0
  138. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/sampling.py +0 -0
  139. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/sampling_test.py +0 -0
  140. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/structured/__init__.py +0 -0
  141. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/structured/completion.py +0 -0
  142. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/structured/completion_test.py +0 -0
  143. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/structured/description.py +0 -0
  144. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/structured/description_test.py +0 -0
  145. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/structured/function_generation.py +0 -0
  146. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/structured/function_generation_test.py +0 -0
  147. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/structured/mapping.py +0 -0
  148. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/structured/mapping_test.py +0 -0
  149. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/structured/parsing.py +0 -0
  150. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/structured/parsing_test.py +0 -0
  151. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/structured/querying.py +0 -0
  152. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/structured/querying_test.py +0 -0
  153. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/structured/schema.py +0 -0
  154. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/structured/schema_generation.py +0 -0
  155. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/structured/schema_generation_test.py +0 -0
  156. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/structured/schema_test.py +0 -0
  157. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/structured/scoring.py +0 -0
  158. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/structured/scoring_test.py +0 -0
  159. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/structured/tokenization.py +0 -0
  160. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/structured/tokenization_test.py +0 -0
  161. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/subscription.py +0 -0
  162. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/subscription_test.py +0 -0
  163. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/template.py +0 -0
  164. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/template_test.py +0 -0
  165. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/templates/__init__.py +0 -0
  166. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/templates/completion.py +0 -0
  167. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/templates/completion_test.py +0 -0
  168. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/templates/conversation.py +0 -0
  169. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/templates/conversation_test.py +0 -0
  170. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/templates/demonstration.py +0 -0
  171. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/templates/demonstration_test.py +0 -0
  172. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/templates/selfplay.py +0 -0
  173. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/core/templates/selfplay_test.py +0 -0
  174. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/env/__init__.py +0 -0
  175. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/env/base_environment.py +0 -0
  176. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/env/base_feature.py +0 -0
  177. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/env/base_sandbox.py +0 -0
  178. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/env/base_test.py +0 -0
  179. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/env/event_handlers/__init__.py +0 -0
  180. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/env/event_handlers/base.py +0 -0
  181. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/env/event_handlers/event_logger.py +0 -0
  182. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/env/event_handlers/event_logger_test.py +0 -0
  183. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/env/event_handlers/metric_writer.py +0 -0
  184. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/env/event_handlers/metric_writer_test.py +0 -0
  185. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/env/interface.py +0 -0
  186. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/env/interface_test.py +0 -0
  187. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/env/load_balancers.py +0 -0
  188. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/env/load_balancers_test.py +0 -0
  189. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun/env/test_utils.py +0 -0
  190. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun.egg-info/SOURCES.txt +0 -0
  191. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun.egg-info/dependency_links.txt +0 -0
  192. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/langfun.egg-info/top_level.txt +0 -0
  193. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/setup.cfg +0 -0
  194. {langfun-0.1.2.dev202510160805 → langfun-0.1.2.dev202510170805}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langfun
3
- Version: 0.1.2.dev202510160805
3
+ Version: 0.1.2.dev202510170805
4
4
  Summary: Langfun: Language as Functions.
5
5
  Home-page: https://github.com/google/langfun
6
6
  Author: Langfun Authors
@@ -21,11 +21,13 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
21
21
  Classifier: Topic :: Software Development :: Libraries
22
22
  Description-Content-Type: text/markdown
23
23
  License-File: LICENSE
24
+ Requires-Dist: anyio>=4.7.0
24
25
  Requires-Dist: jinja2>=3.1.2
25
26
  Requires-Dist: puremagic>=1.20
26
27
  Requires-Dist: pyglove>=0.4.5.dev202507140812
27
28
  Requires-Dist: requests>=2.31.0
28
29
  Provides-Extra: all
30
+ Requires-Dist: anyio>=4.7.0; extra == "all"
29
31
  Requires-Dist: jinja2>=3.1.2; extra == "all"
30
32
  Requires-Dist: puremagic>=1.20; extra == "all"
31
33
  Requires-Dist: pyglove>=0.4.5.dev202507140812; extra == "all"
@@ -40,9 +40,13 @@ from langfun.core.component import context
40
40
  as_context = context
41
41
  use_context = context
42
42
 
43
- # Invoke a callable object asynchronously.
43
+ # Support for async IO.
44
44
  from langfun.core.async_support import invoke_async
45
45
 
46
+ # Adaptors for async function/context manager to sync versions.
47
+ from langfun.core.async_support import invoke_sync
48
+ from langfun.core.async_support import sync_context_manager
49
+
46
50
  # Shortcut function for overriding components attributes, usually for
47
51
  # override settings.
48
52
  from langfun.core.component import use_settings
@@ -0,0 +1,98 @@
1
+ # Copyright 2025 The Langfun Authors
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ """Utility for async IO in Langfun."""
15
+
16
+ import asyncio
17
+ import contextlib
18
+ from typing import Any, Awaitable, Callable, Iterator
19
+ import anyio
20
+ import pyglove as pg
21
+
22
+
23
+ async def invoke_async(
24
+ sync_callable: Callable[..., Any], *args, **kwargs
25
+ ) -> Any:
26
+ """Invokes a callable asynchronously with `lf.context` manager enabled."""
27
+ return await asyncio.to_thread(
28
+ # Enable `lf.context` manager for async calls.
29
+ pg.with_contextual_override(sync_callable), *args, **kwargs
30
+ )
31
+
32
+
33
+ def invoke_sync(
34
+ async_callable: Callable[..., Awaitable[Any]],
35
+ *args,
36
+ **kwargs
37
+ ) -> Any:
38
+ """Invokes a async callable synchronously."""
39
+ async def _invoke():
40
+ return await async_callable(*args, **kwargs)
41
+ invoke_fn = pg.with_contextual_override(_invoke)
42
+ blocking_portal = pg.utils.thread_local_get('__blocking_portal__', None)
43
+ if blocking_portal is None:
44
+ return anyio.run(invoke_fn)
45
+ return blocking_portal.call(invoke_fn)
46
+
47
+
48
+ @contextlib.contextmanager
49
+ def sync_context_manager(
50
+ async_context_manager: contextlib.AbstractAsyncContextManager[Any]
51
+ ) -> Iterator[Any]:
52
+ """Adapts an async context manager to a sync context manager.
53
+
54
+ sync_context_manager installs a blocking portal in current thread to run the
55
+ async context manager in a blocking way. It's useful for running async code in
56
+ sync context managers, e.g. `sync_context_manager` can be nested and share the
57
+ same event loop.
58
+
59
+ Example:
60
+
61
+ ```python
62
+ @contextlib.asynccontextmanager
63
+ async def foo(x):
64
+ try:
65
+ yield x
66
+ finally:
67
+ pass
68
+
69
+ with lf.sync_context_manager(foo(x)) as x
70
+ with lf.sync_context_manager(foo(y)) as y:
71
+ ...
72
+ ```
73
+
74
+ Args:
75
+ async_context_manager: The async context manager to adapt.
76
+
77
+ Yields:
78
+ The value yielded by the async context manager.
79
+ """
80
+ blocking_portal = pg.utils.thread_local_get('__blocking_portal__', None)
81
+ portal_exit_stack = None
82
+
83
+ try:
84
+ if blocking_portal is None:
85
+ portal_exit_stack = contextlib.ExitStack()
86
+ blocking_portal = portal_exit_stack.enter_context(
87
+ anyio.from_thread.start_blocking_portal()
88
+ )
89
+ pg.utils.thread_local_set('__blocking_portal__', blocking_portal)
90
+ context_manager = blocking_portal.wrap_async_context_manager(
91
+ async_context_manager
92
+ )
93
+ with context_manager as value:
94
+ yield value
95
+ finally:
96
+ if portal_exit_stack is not None:
97
+ portal_exit_stack.close()
98
+ pg.utils.thread_local_del('__blocking_portal__')
@@ -13,6 +13,7 @@
13
13
  # limitations under the License.
14
14
 
15
15
  import asyncio
16
+ import contextlib
16
17
  import time
17
18
  import unittest
18
19
 
@@ -34,6 +35,28 @@ class AsyncSupportTest(unittest.TestCase):
34
35
  with pg.contextual_override(z=3):
35
36
  self.assertEqual(asyncio.run(r), 6)
36
37
 
38
+ def test_invoke_sync(self):
39
+ @contextlib.asynccontextmanager
40
+ async def bar(x):
41
+ try:
42
+ yield x
43
+ finally:
44
+ pass
45
+
46
+ async def foo(x, *, y):
47
+ time.sleep(2)
48
+ return x + y + pg.contextual_value('z', 0)
49
+
50
+ with pg.contextual_override(z=3):
51
+ with async_support.sync_context_manager(bar(1)) as x:
52
+ self.assertEqual(x, 1)
53
+ with async_support.sync_context_manager(bar(2)) as y:
54
+ self.assertEqual(y, 2)
55
+ self.assertEqual(async_support.invoke_sync(foo, 1, y=2), 6)
56
+
57
+ with pg.contextual_override(z=2):
58
+ self.assertEqual(async_support.invoke_sync(foo, 1, y=2), 5)
59
+
37
60
 
38
61
  if __name__ == '__main__':
39
62
  unittest.main()
@@ -262,6 +262,7 @@ class ProgressControlTest(unittest.TestCase):
262
262
  with contextlib.redirect_stderr(string_io):
263
263
  ctrl.update(1)
264
264
  ctrl.refresh()
265
+ sys.stderr.flush()
265
266
  self.assertEqual(string_io.getvalue(), '')
266
267
  concurrent.progress_bar = 'tqdm'
267
268
 
@@ -274,6 +275,7 @@ class ProgressControlTest(unittest.TestCase):
274
275
  ctrl.set_status('bar')
275
276
  ctrl.update(10)
276
277
  ctrl.refresh()
278
+ sys.stderr.flush()
277
279
  self.assertEqual(
278
280
  string_io.getvalue(),
279
281
  '\x1b[1m\x1b[31mfoo\x1b[0m: \x1b[34m10% (10/100)\x1b[0m : bar\n'
@@ -288,6 +290,7 @@ class ProgressControlTest(unittest.TestCase):
288
290
  self.assertIsInstance(ctrl, concurrent._TqdmProgressControl)
289
291
  ctrl.update(10)
290
292
  ctrl.refresh()
293
+ sys.stderr.flush()
291
294
  self.assertIn('10/100', string_io.getvalue())
292
295
 
293
296
  tqdm = concurrent.tqdm
@@ -316,6 +319,7 @@ class ProgressBarTest(unittest.TestCase):
316
319
  for _ in concurrent.concurrent_execute(fun, range(5)):
317
320
  concurrent.ProgressBar.refresh()
318
321
  concurrent.ProgressBar.uninstall(bar_id)
322
+ sys.stderr.flush()
319
323
  output_str = string_io.getvalue()
320
324
  self.assertIn('100%', output_str)
321
325
  self.assertIn('5/5', output_str)
@@ -332,7 +336,7 @@ class ProgressBarTest(unittest.TestCase):
332
336
  concurrent.ProgressBar.update(bar_id, 0, status=1)
333
337
  concurrent.ProgressBar.uninstall(bar_id)
334
338
  sys.stderr.flush()
335
- time.sleep(1)
339
+ time.sleep(1)
336
340
  self.assertIn('1/4', string_io.getvalue())
337
341
  # TODO(daiyip): Re-enable once flakiness is fixed.
338
342
  # self.assertIn('2/4', string_io.getvalue())
@@ -564,7 +568,8 @@ class ConcurrentMapTest(unittest.TestCase):
564
568
  fun, [1, 2, 3], timeout=1.5, max_workers=1, show_progress=True
565
569
  )
566
570
  ], key=lambda x: x[0])
567
- string_io.flush()
571
+ sys.stderr.flush()
572
+
568
573
  self.assertEqual( # pylint: disable=g-generic-assert
569
574
  output,
570
575
  [
@@ -592,6 +597,7 @@ class ConcurrentMapTest(unittest.TestCase):
592
597
  show_progress=bar_id, status_fn=lambda p: dict(x=1, y=1)
593
598
  )
594
599
  ], key=lambda x: x[0])
600
+ sys.stderr.flush()
595
601
 
596
602
  self.assertEqual( # pylint: disable=g-generic-assert
597
603
  output,
@@ -50,7 +50,7 @@ class TqdmProgressTrackerTest(unittest.TestCase):
50
50
  string_io = io.StringIO()
51
51
  with contextlib.redirect_stderr(string_io):
52
52
  _ = experiment.run(root_dir, 'new', plugins=[])
53
- sys.stderr.flush()
53
+ sys.stderr.flush()
54
54
  self.assertIn('All: 100%', string_io.getvalue())
55
55
 
56
56
  def test_with_example_ids(self):
@@ -61,7 +61,7 @@ class TqdmProgressTrackerTest(unittest.TestCase):
61
61
  string_io = io.StringIO()
62
62
  with contextlib.redirect_stderr(string_io):
63
63
  _ = experiment.run(root_dir, 'new', example_ids=[1], plugins=[])
64
- sys.stderr.flush()
64
+ sys.stderr.flush()
65
65
  self.assertIn('All: 100%', string_io.getvalue())
66
66
 
67
67
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langfun
3
- Version: 0.1.2.dev202510160805
3
+ Version: 0.1.2.dev202510170805
4
4
  Summary: Langfun: Language as Functions.
5
5
  Home-page: https://github.com/google/langfun
6
6
  Author: Langfun Authors
@@ -21,11 +21,13 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
21
21
  Classifier: Topic :: Software Development :: Libraries
22
22
  Description-Content-Type: text/markdown
23
23
  License-File: LICENSE
24
+ Requires-Dist: anyio>=4.7.0
24
25
  Requires-Dist: jinja2>=3.1.2
25
26
  Requires-Dist: puremagic>=1.20
26
27
  Requires-Dist: pyglove>=0.4.5.dev202507140812
27
28
  Requires-Dist: requests>=2.31.0
28
29
  Provides-Extra: all
30
+ Requires-Dist: anyio>=4.7.0; extra == "all"
29
31
  Requires-Dist: jinja2>=3.1.2; extra == "all"
30
32
  Requires-Dist: puremagic>=1.20; extra == "all"
31
33
  Requires-Dist: pyglove>=0.4.5.dev202507140812; extra == "all"
@@ -1,9 +1,11 @@
1
+ anyio>=4.7.0
1
2
  jinja2>=3.1.2
2
3
  puremagic>=1.20
3
4
  pyglove>=0.4.5.dev202507140812
4
5
  requests>=2.31.0
5
6
 
6
7
  [all]
8
+ anyio>=4.7.0
7
9
  jinja2>=3.1.2
8
10
  puremagic>=1.20
9
11
  pyglove>=0.4.5.dev202507140812
@@ -1,28 +0,0 @@
1
- # Copyright 2025 The Langfun Authors
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
- """Utility for async IO in Langfun."""
15
-
16
- import asyncio
17
- from typing import Any, Callable
18
- import pyglove as pg
19
-
20
-
21
- async def invoke_async(
22
- callable_object: Callable[..., Any], *args, **kwargs
23
- ) -> Any:
24
- """Invokes a callable asynchronously with `lf.context` manager enabled."""
25
- return await asyncio.to_thread(
26
- # Enable `lf.context` manager for async calls.
27
- pg.with_contextual_override(callable_object), *args, **kwargs
28
- )