langfun 0.1.2.dev202505110803__tar.gz → 0.1.2.dev202505130804__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 (168) hide show
  1. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/PKG-INFO +1 -1
  2. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/language_model.py +53 -3
  3. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/llms/gemini.py +7 -1
  4. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun.egg-info/PKG-INFO +1 -1
  5. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/LICENSE +0 -0
  6. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/README.md +0 -0
  7. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/__init__.py +0 -0
  8. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/__init__.py +0 -0
  9. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/agentic/__init__.py +0 -0
  10. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/agentic/action.py +0 -0
  11. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/agentic/action_eval.py +0 -0
  12. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/agentic/action_eval_test.py +0 -0
  13. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/agentic/action_test.py +0 -0
  14. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/coding/__init__.py +0 -0
  15. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/coding/python/__init__.py +0 -0
  16. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/coding/python/correction.py +0 -0
  17. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/coding/python/correction_test.py +0 -0
  18. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/coding/python/execution.py +0 -0
  19. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/coding/python/execution_test.py +0 -0
  20. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/coding/python/generation.py +0 -0
  21. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/coding/python/generation_test.py +0 -0
  22. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/coding/python/parsing.py +0 -0
  23. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/coding/python/parsing_test.py +0 -0
  24. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/coding/python/sandboxing.py +0 -0
  25. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/coding/python/sandboxing_test.py +0 -0
  26. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/component.py +0 -0
  27. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/component_test.py +0 -0
  28. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/concurrent.py +0 -0
  29. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/concurrent_test.py +0 -0
  30. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/console.py +0 -0
  31. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/console_test.py +0 -0
  32. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/data/__init__.py +0 -0
  33. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/data/conversion/__init__.py +0 -0
  34. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/data/conversion/anthropic.py +0 -0
  35. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/data/conversion/anthropic_test.py +0 -0
  36. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/data/conversion/gemini.py +0 -0
  37. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/data/conversion/gemini_test.py +0 -0
  38. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/data/conversion/openai.py +0 -0
  39. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/data/conversion/openai_test.py +0 -0
  40. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/eval/__init__.py +0 -0
  41. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/eval/base.py +0 -0
  42. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/eval/base_test.py +0 -0
  43. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/eval/matching.py +0 -0
  44. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/eval/matching_test.py +0 -0
  45. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/eval/patching.py +0 -0
  46. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/eval/patching_test.py +0 -0
  47. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/eval/scoring.py +0 -0
  48. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/eval/scoring_test.py +0 -0
  49. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/eval/v2/__init__.py +0 -0
  50. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/eval/v2/checkpointing.py +0 -0
  51. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/eval/v2/checkpointing_test.py +0 -0
  52. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/eval/v2/eval_test_helper.py +0 -0
  53. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/eval/v2/evaluation.py +0 -0
  54. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/eval/v2/evaluation_test.py +0 -0
  55. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/eval/v2/example.py +0 -0
  56. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/eval/v2/example_test.py +0 -0
  57. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/eval/v2/experiment.py +0 -0
  58. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/eval/v2/experiment_test.py +0 -0
  59. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/eval/v2/metric_values.py +0 -0
  60. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/eval/v2/metric_values_test.py +0 -0
  61. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/eval/v2/metrics.py +0 -0
  62. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/eval/v2/metrics_test.py +0 -0
  63. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/eval/v2/progress.py +0 -0
  64. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/eval/v2/progress_test.py +0 -0
  65. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/eval/v2/progress_tracking.py +0 -0
  66. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/eval/v2/progress_tracking_test.py +0 -0
  67. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/eval/v2/reporting.py +0 -0
  68. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/eval/v2/reporting_test.py +0 -0
  69. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/eval/v2/runners.py +0 -0
  70. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/eval/v2/runners_test.py +0 -0
  71. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/langfunc.py +0 -0
  72. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/langfunc_test.py +0 -0
  73. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/language_model_test.py +0 -0
  74. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/llms/__init__.py +0 -0
  75. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/llms/anthropic.py +0 -0
  76. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/llms/anthropic_test.py +0 -0
  77. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/llms/azure_openai.py +0 -0
  78. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/llms/azure_openai_test.py +0 -0
  79. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/llms/cache/__init__.py +0 -0
  80. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/llms/cache/base.py +0 -0
  81. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/llms/cache/in_memory.py +0 -0
  82. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/llms/cache/in_memory_test.py +0 -0
  83. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/llms/compositional.py +0 -0
  84. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/llms/compositional_test.py +0 -0
  85. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/llms/deepseek.py +0 -0
  86. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/llms/deepseek_test.py +0 -0
  87. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/llms/fake.py +0 -0
  88. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/llms/fake_test.py +0 -0
  89. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/llms/gemini_test.py +0 -0
  90. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/llms/google_genai.py +0 -0
  91. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/llms/google_genai_test.py +0 -0
  92. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/llms/groq.py +0 -0
  93. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/llms/groq_test.py +0 -0
  94. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/llms/llama_cpp.py +0 -0
  95. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/llms/llama_cpp_test.py +0 -0
  96. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/llms/openai.py +0 -0
  97. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/llms/openai_compatible.py +0 -0
  98. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/llms/openai_compatible_test.py +0 -0
  99. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/llms/openai_test.py +0 -0
  100. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/llms/rest.py +0 -0
  101. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/llms/rest_test.py +0 -0
  102. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/llms/vertexai.py +0 -0
  103. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/llms/vertexai_test.py +0 -0
  104. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/logging.py +0 -0
  105. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/logging_test.py +0 -0
  106. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/memories/__init__.py +0 -0
  107. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/memories/conversation_history.py +0 -0
  108. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/memories/conversation_history_test.py +0 -0
  109. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/memory.py +0 -0
  110. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/message.py +0 -0
  111. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/message_test.py +0 -0
  112. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/modalities/__init__.py +0 -0
  113. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/modalities/audio.py +0 -0
  114. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/modalities/audio_test.py +0 -0
  115. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/modalities/image.py +0 -0
  116. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/modalities/image_test.py +0 -0
  117. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/modalities/mime.py +0 -0
  118. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/modalities/mime_test.py +0 -0
  119. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/modalities/pdf.py +0 -0
  120. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/modalities/pdf_test.py +0 -0
  121. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/modalities/video.py +0 -0
  122. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/modalities/video_test.py +0 -0
  123. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/modality.py +0 -0
  124. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/modality_test.py +0 -0
  125. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/natural_language.py +0 -0
  126. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/natural_language_test.py +0 -0
  127. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/sampling.py +0 -0
  128. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/sampling_test.py +0 -0
  129. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/structured/__init__.py +0 -0
  130. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/structured/completion.py +0 -0
  131. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/structured/completion_test.py +0 -0
  132. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/structured/description.py +0 -0
  133. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/structured/description_test.py +0 -0
  134. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/structured/function_generation.py +0 -0
  135. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/structured/function_generation_test.py +0 -0
  136. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/structured/mapping.py +0 -0
  137. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/structured/mapping_test.py +0 -0
  138. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/structured/parsing.py +0 -0
  139. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/structured/parsing_test.py +0 -0
  140. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/structured/querying.py +0 -0
  141. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/structured/querying_test.py +0 -0
  142. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/structured/schema.py +0 -0
  143. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/structured/schema_generation.py +0 -0
  144. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/structured/schema_generation_test.py +0 -0
  145. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/structured/schema_test.py +0 -0
  146. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/structured/scoring.py +0 -0
  147. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/structured/scoring_test.py +0 -0
  148. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/structured/tokenization.py +0 -0
  149. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/structured/tokenization_test.py +0 -0
  150. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/subscription.py +0 -0
  151. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/subscription_test.py +0 -0
  152. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/template.py +0 -0
  153. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/template_test.py +0 -0
  154. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/templates/__init__.py +0 -0
  155. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/templates/completion.py +0 -0
  156. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/templates/completion_test.py +0 -0
  157. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/templates/conversation.py +0 -0
  158. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/templates/conversation_test.py +0 -0
  159. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/templates/demonstration.py +0 -0
  160. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/templates/demonstration_test.py +0 -0
  161. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/templates/selfplay.py +0 -0
  162. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun/core/templates/selfplay_test.py +0 -0
  163. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun.egg-info/SOURCES.txt +0 -0
  164. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun.egg-info/dependency_links.txt +0 -0
  165. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun.egg-info/requires.txt +0 -0
  166. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/langfun.egg-info/top_level.txt +0 -0
  167. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/setup.cfg +0 -0
  168. {langfun-0.1.2.dev202505110803 → langfun-0.1.2.dev202505130804}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langfun
3
- Version: 0.1.2.dev202505110803
3
+ Version: 0.1.2.dev202505130804
4
4
  Summary: Langfun: Language as Functions.
5
5
  Home-page: https://github.com/google/langfun
6
6
  Author: Langfun Authors
@@ -1019,11 +1019,21 @@ class LanguageModel(component.Component):
1019
1019
  ] = RetryableLMError,
1020
1020
  ) -> list[Any]:
1021
1021
  """Helper method for subclasses for implementing _sample."""
1022
+ if self.max_concurrency is None:
1023
+ execute = action
1024
+ executor = None
1025
+ max_workers = len(inputs)
1026
+ else:
1027
+ execute = lambda x: _ConcurrencyControl.get(
1028
+ self.resource_id, self.max_concurrency)(action, x)
1029
+ executor = self.resource_id if len(inputs) > 1 else None
1030
+ max_workers = self.max_concurrency
1031
+
1022
1032
  executed_jobs = concurrent.concurrent_execute(
1023
- action,
1033
+ execute,
1024
1034
  inputs,
1025
- executor=self.resource_id if self.max_concurrency else None,
1026
- max_workers=self.max_concurrency or len(inputs),
1035
+ executor=executor,
1036
+ max_workers=max_workers,
1027
1037
  retry_on_errors=retry_on_errors,
1028
1038
  max_attempts=self.max_attempts,
1029
1039
  retry_interval=self.retry_interval,
@@ -1323,6 +1333,46 @@ class LanguageModel(component.Component):
1323
1333
  return None
1324
1334
 
1325
1335
 
1336
+ class _ConcurrencyControl:
1337
+ """Controls the max concurrent LLM calls for a given model."""
1338
+
1339
+ _MODEL_CONCURRENCY: ClassVar[dict[str, '_ConcurrencyControl']] = {}
1340
+
1341
+ def __init__(self, max_concurrency: int):
1342
+ self.max_concurrency = max_concurrency
1343
+ self._concurrency = 0
1344
+
1345
+ @property
1346
+ def concurrency(self) -> int:
1347
+ """Returns the current concurrency."""
1348
+ return self._concurrency
1349
+
1350
+ def __call__(self, fn: Callable[..., Any], *args, **kwargs):
1351
+ """Calls the function with concurrency control."""
1352
+ while self._concurrency >= self.max_concurrency:
1353
+ time.sleep(0.01)
1354
+
1355
+ try:
1356
+ # Increment/decrement is atomic in Python, so we don't need to protect it
1357
+ # with a lock.
1358
+ self._concurrency += 1
1359
+ return fn(*args, **kwargs)
1360
+ finally:
1361
+ self._concurrency -= 1
1362
+
1363
+ @classmethod
1364
+ def get(
1365
+ cls, model_id: str, max_concurrency: int | None = None
1366
+ ) -> '_ConcurrencyControl':
1367
+ """Returns the concurrency control for the given model ID."""
1368
+ control = cls._MODEL_CONCURRENCY.get(model_id, None)
1369
+ if control is None:
1370
+ assert max_concurrency is not None
1371
+ control = cls(max_concurrency)
1372
+ cls._MODEL_CONCURRENCY[model_id] = control
1373
+ return control
1374
+
1375
+
1326
1376
  class UsageSummary(pg.Object, pg.views.HtmlTreeView.Extension):
1327
1377
  """Usage sumary."""
1328
1378
 
@@ -678,9 +678,15 @@ class Gemini(rest.REST):
678
678
  return config
679
679
 
680
680
  def result(self, json: dict[str, Any]) -> lf.LMSamplingResult:
681
+ candidates = json.get('candidates')
682
+ if candidates is None:
683
+ raise lf.TemporaryLMError(
684
+ 'No candidates found in response. This is a Gemini API issue that '
685
+ 'happens occasionally, and retrying should fix it. '
686
+ )
681
687
  messages = [
682
688
  lf.Message.from_value(candidate['content'], format='gemini')
683
- for candidate in json.get('candidates', [])
689
+ for candidate in candidates
684
690
  ]
685
691
  usage = json['usageMetadata']
686
692
  input_tokens = usage['promptTokenCount']
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langfun
3
- Version: 0.1.2.dev202505110803
3
+ Version: 0.1.2.dev202505130804
4
4
  Summary: Langfun: Language as Functions.
5
5
  Home-page: https://github.com/google/langfun
6
6
  Author: Langfun Authors