langfun 0.1.2.dev202412070804__tar.gz → 0.1.2.dev202412080804__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 (160) hide show
  1. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/PKG-INFO +1 -1
  2. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/structured/function_generation.py +26 -14
  3. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/structured/function_generation_test.py +30 -0
  4. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun.egg-info/PKG-INFO +1 -1
  5. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/LICENSE +0 -0
  6. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/README.md +0 -0
  7. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/__init__.py +0 -0
  8. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/__init__.py +0 -0
  9. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/agentic/__init__.py +0 -0
  10. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/agentic/action.py +0 -0
  11. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/agentic/action_eval.py +0 -0
  12. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/agentic/action_eval_test.py +0 -0
  13. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/agentic/action_test.py +0 -0
  14. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/coding/__init__.py +0 -0
  15. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/coding/python/__init__.py +0 -0
  16. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/coding/python/correction.py +0 -0
  17. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/coding/python/correction_test.py +0 -0
  18. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/coding/python/errors.py +0 -0
  19. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/coding/python/errors_test.py +0 -0
  20. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/coding/python/execution.py +0 -0
  21. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/coding/python/execution_test.py +0 -0
  22. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/coding/python/generation.py +0 -0
  23. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/coding/python/generation_test.py +0 -0
  24. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/coding/python/parsing.py +0 -0
  25. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/coding/python/parsing_test.py +0 -0
  26. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/coding/python/permissions.py +0 -0
  27. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/coding/python/permissions_test.py +0 -0
  28. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/component.py +0 -0
  29. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/component_test.py +0 -0
  30. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/concurrent.py +0 -0
  31. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/concurrent_test.py +0 -0
  32. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/console.py +0 -0
  33. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/console_test.py +0 -0
  34. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/eval/__init__.py +0 -0
  35. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/eval/base.py +0 -0
  36. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/eval/base_test.py +0 -0
  37. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/eval/matching.py +0 -0
  38. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/eval/matching_test.py +0 -0
  39. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/eval/patching.py +0 -0
  40. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/eval/patching_test.py +0 -0
  41. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/eval/scoring.py +0 -0
  42. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/eval/scoring_test.py +0 -0
  43. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/eval/v2/__init__.py +0 -0
  44. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/eval/v2/checkpointing.py +0 -0
  45. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/eval/v2/checkpointing_test.py +0 -0
  46. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/eval/v2/evaluation.py +0 -0
  47. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/eval/v2/evaluation_test.py +0 -0
  48. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/eval/v2/example.py +0 -0
  49. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/eval/v2/example_test.py +0 -0
  50. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/eval/v2/experiment.py +0 -0
  51. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/eval/v2/experiment_test.py +0 -0
  52. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/eval/v2/metric_values.py +0 -0
  53. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/eval/v2/metric_values_test.py +0 -0
  54. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/eval/v2/metrics.py +0 -0
  55. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/eval/v2/metrics_test.py +0 -0
  56. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/eval/v2/progress.py +0 -0
  57. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/eval/v2/progress_test.py +0 -0
  58. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/eval/v2/progress_tracking.py +0 -0
  59. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/eval/v2/progress_tracking_test.py +0 -0
  60. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/eval/v2/reporting.py +0 -0
  61. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/eval/v2/reporting_test.py +0 -0
  62. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/eval/v2/runners.py +0 -0
  63. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/eval/v2/runners_test.py +0 -0
  64. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/eval/v2/test_helper.py +0 -0
  65. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/langfunc.py +0 -0
  66. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/langfunc_test.py +0 -0
  67. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/language_model.py +0 -0
  68. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/language_model_test.py +0 -0
  69. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/llms/__init__.py +0 -0
  70. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/llms/anthropic.py +0 -0
  71. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/llms/anthropic_test.py +0 -0
  72. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/llms/cache/__init__.py +0 -0
  73. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/llms/cache/base.py +0 -0
  74. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/llms/cache/in_memory.py +0 -0
  75. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/llms/cache/in_memory_test.py +0 -0
  76. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/llms/compositional.py +0 -0
  77. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/llms/compositional_test.py +0 -0
  78. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/llms/fake.py +0 -0
  79. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/llms/fake_test.py +0 -0
  80. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/llms/google_genai.py +0 -0
  81. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/llms/google_genai_test.py +0 -0
  82. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/llms/groq.py +0 -0
  83. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/llms/groq_test.py +0 -0
  84. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/llms/llama_cpp.py +0 -0
  85. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/llms/llama_cpp_test.py +0 -0
  86. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/llms/openai.py +0 -0
  87. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/llms/openai_test.py +0 -0
  88. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/llms/rest.py +0 -0
  89. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/llms/rest_test.py +0 -0
  90. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/llms/vertexai.py +0 -0
  91. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/llms/vertexai_test.py +0 -0
  92. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/logging.py +0 -0
  93. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/logging_test.py +0 -0
  94. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/memories/__init__.py +0 -0
  95. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/memories/conversation_history.py +0 -0
  96. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/memories/conversation_history_test.py +0 -0
  97. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/memory.py +0 -0
  98. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/message.py +0 -0
  99. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/message_test.py +0 -0
  100. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/modalities/__init__.py +0 -0
  101. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/modalities/audio.py +0 -0
  102. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/modalities/audio_test.py +0 -0
  103. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/modalities/image.py +0 -0
  104. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/modalities/image_test.py +0 -0
  105. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/modalities/mime.py +0 -0
  106. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/modalities/mime_test.py +0 -0
  107. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/modalities/ms_office.py +0 -0
  108. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/modalities/ms_office_test.py +0 -0
  109. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/modalities/pdf.py +0 -0
  110. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/modalities/pdf_test.py +0 -0
  111. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/modalities/video.py +0 -0
  112. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/modalities/video_test.py +0 -0
  113. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/modality.py +0 -0
  114. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/modality_test.py +0 -0
  115. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/natural_language.py +0 -0
  116. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/natural_language_test.py +0 -0
  117. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/repr_utils.py +0 -0
  118. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/repr_utils_test.py +0 -0
  119. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/sampling.py +0 -0
  120. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/sampling_test.py +0 -0
  121. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/structured/__init__.py +0 -0
  122. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/structured/completion.py +0 -0
  123. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/structured/completion_test.py +0 -0
  124. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/structured/description.py +0 -0
  125. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/structured/description_test.py +0 -0
  126. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/structured/mapping.py +0 -0
  127. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/structured/mapping_test.py +0 -0
  128. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/structured/parsing.py +0 -0
  129. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/structured/parsing_test.py +0 -0
  130. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/structured/prompting.py +0 -0
  131. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/structured/prompting_test.py +0 -0
  132. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/structured/schema.py +0 -0
  133. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/structured/schema_generation.py +0 -0
  134. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/structured/schema_generation_test.py +0 -0
  135. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/structured/schema_test.py +0 -0
  136. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/structured/scoring.py +0 -0
  137. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/structured/scoring_test.py +0 -0
  138. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/structured/tokenization.py +0 -0
  139. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/structured/tokenization_test.py +0 -0
  140. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/subscription.py +0 -0
  141. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/subscription_test.py +0 -0
  142. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/template.py +0 -0
  143. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/template_test.py +0 -0
  144. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/templates/__init__.py +0 -0
  145. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/templates/completion.py +0 -0
  146. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/templates/completion_test.py +0 -0
  147. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/templates/conversation.py +0 -0
  148. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/templates/conversation_test.py +0 -0
  149. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/templates/demonstration.py +0 -0
  150. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/templates/demonstration_test.py +0 -0
  151. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/templates/selfplay.py +0 -0
  152. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/templates/selfplay_test.py +0 -0
  153. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/text_formatting.py +0 -0
  154. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun/core/text_formatting_test.py +0 -0
  155. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun.egg-info/SOURCES.txt +0 -0
  156. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun.egg-info/dependency_links.txt +0 -0
  157. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun.egg-info/requires.txt +0 -0
  158. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/langfun.egg-info/top_level.txt +0 -0
  159. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/setup.cfg +0 -0
  160. {langfun-0.1.2.dev202412070804 → langfun-0.1.2.dev202412080804}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: langfun
3
- Version: 0.1.2.dev202412070804
3
+ Version: 0.1.2.dev202412080804
4
4
  Summary: Langfun: Language as Functions.
5
5
  Home-page: https://github.com/google/langfun
6
6
  Author: Langfun Authors
@@ -76,6 +76,7 @@ def unittest_with_test_cases(f, unittests):
76
76
 
77
77
  def _function_gen(
78
78
  func: Callable[..., Any],
79
+ context: dict[str, Any],
79
80
  signature: str,
80
81
  lm: language_model.LanguageModel,
81
82
  num_retries: int = 1,
@@ -141,21 +142,23 @@ def _function_gen(
141
142
  elif isinstance(unittest, list):
142
143
  unittest_examples = unittest
143
144
 
145
+ last_error = None
144
146
  for _ in range(num_retries):
145
147
  try:
146
148
  source_code = prompting.query(
147
149
  PythonFunctionPrompt(signature=signature), lm=lm
148
150
  )
149
- f = python.evaluate(source_code)
151
+ f = python.evaluate(source_code, global_vars=context)
150
152
 
151
153
  # Check whether the sigantures are the same.
152
154
  if inspect.signature(f) != inspect.signature(func):
153
- pg.logging.warning(
154
- "Signature mismatch. Expected: %s, Actual: %s",
155
- inspect.signature(func),
156
- inspect.signature(f),
155
+ raise python.CodeError(
156
+ code=source_code,
157
+ cause=TypeError(
158
+ f"Signature mismatch: Expected: {inspect.signature(func)}, "
159
+ f"Actual: {inspect.signature(f)}.",
160
+ ),
157
161
  )
158
- continue
159
162
 
160
163
  if callable(unittest):
161
164
  unittest(f)
@@ -163,10 +166,12 @@ def _function_gen(
163
166
  unittest_with_test_cases(f, unittest_examples)
164
167
 
165
168
  return f, source_code
166
- except Exception: # pylint: disable=broad-exception-caught
167
- pass
168
-
169
- return None, None
169
+ except python.CodeError as e:
170
+ last_error = e
171
+ pg.logging.warning(
172
+ f"Bad code generated: {e}",
173
+ )
174
+ raise last_error
170
175
 
171
176
 
172
177
  def _process_signature(signature):
@@ -220,6 +225,13 @@ def function_gen(
220
225
  setattr(func, "__function__", None)
221
226
  setattr(func, "__source_code__", None)
222
227
 
228
+ # Prepare the globals/locals for the generated code to be evaluated against.
229
+ callstack = inspect.stack()
230
+ assert len(callstack) > 1
231
+ context = dict(callstack[1][0].f_globals)
232
+ context.update(callstack[1][0].f_locals)
233
+ context.pop(func.__name__, None)
234
+
223
235
  @functools.wraps(func)
224
236
  def lm_generated_func(*args, **kwargs):
225
237
  if func.__function__ is not None:
@@ -238,20 +250,20 @@ def function_gen(
238
250
 
239
251
  if signature in cache:
240
252
  func.__source_code__ = cache[signature]
241
- func.__function__ = python.evaluate(func.__source_code__)
253
+ func.__function__ = python.evaluate(
254
+ func.__source_code__, global_vars=context
255
+ )
242
256
  return func.__function__(*args, **kwargs)
243
257
 
244
258
  func.__function__, func.__source_code__ = _function_gen(
245
259
  func,
260
+ context,
246
261
  signature,
247
262
  lm,
248
263
  num_retries=num_retries,
249
264
  unittest=unittest,
250
265
  unittest_num_retries=unittest_num_retries,
251
266
  )
252
- if func.__function__ is None:
253
- raise ValueError(f"Function generation failed. Signature:\n{signature}")
254
-
255
267
  if cache_filename is not None:
256
268
  cache[signature] = func.__source_code__
257
269
  cache.save(cache_filename)
@@ -311,6 +311,36 @@ class FunctionGenerationTest(unittest.TestCase):
311
311
 
312
312
  self.assertEqual(linear_search(['a', 'b', 'c'], 'c'), 2)
313
313
 
314
+ def test_context_passthrough(self):
315
+
316
+ class Number(pg.Object):
317
+ value: int
318
+
319
+ function_gen_lm_response = inspect.cleandoc("""
320
+ ```python
321
+ def add(a: Number, b: Number) -> Number:
322
+ \"\"\"Adds two numbers together.\"\"\"
323
+ return Number(a.value + b.value)
324
+ ```
325
+ """)
326
+
327
+ lm = fake.StaticSequence(
328
+ [function_gen_lm_response]
329
+ )
330
+
331
+ def _unittest_fn(func):
332
+ assert func(Number(1), Number(2)) == Number(3)
333
+
334
+ custom_unittest = _unittest_fn
335
+
336
+ @function_generation.function_gen(
337
+ lm=lm, unittest=custom_unittest, num_retries=1
338
+ )
339
+ def add(a: Number, b: Number) -> Number: # pylint: disable=unused-argument
340
+ """Adds two numbers together."""
341
+
342
+ self.assertEqual(add(Number(2), Number(3)), Number(5))
343
+
314
344
  def test_siganture_check(self):
315
345
  incorrect_signature_lm_response = inspect.cleandoc("""
316
346
  ```python
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: langfun
3
- Version: 0.1.2.dev202412070804
3
+ Version: 0.1.2.dev202412080804
4
4
  Summary: Langfun: Language as Functions.
5
5
  Home-page: https://github.com/google/langfun
6
6
  Author: Langfun Authors