langfun 0.1.2.dev202511030805__tar.gz → 0.1.2.dev202511040805__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 (205) hide show
  1. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/PKG-INFO +1 -1
  2. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/message.py +17 -0
  3. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/message_test.py +6 -0
  4. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/modalities/mime.py +9 -2
  5. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/structured/parsing_test.py +0 -3
  6. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/template.py +7 -5
  7. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/template_test.py +18 -0
  8. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun.egg-info/PKG-INFO +1 -1
  9. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/LICENSE +0 -0
  10. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/README.md +0 -0
  11. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/__init__.py +0 -0
  12. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/assistant/capabilities/gui/__init__.py +0 -0
  13. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/assistant/capabilities/gui/bounding_box_parser.py +0 -0
  14. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/assistant/capabilities/gui/bounding_box_parser_test.py +0 -0
  15. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/assistant/capabilities/gui/drawing.py +0 -0
  16. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/assistant/capabilities/gui/drawing_test.py +0 -0
  17. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/assistant/capabilities/gui/location.py +0 -0
  18. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/assistant/capabilities/gui/location_test.py +0 -0
  19. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/__init__.py +0 -0
  20. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/agentic/__init__.py +0 -0
  21. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/agentic/action.py +0 -0
  22. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/agentic/action_eval.py +0 -0
  23. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/agentic/action_eval_test.py +0 -0
  24. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/agentic/action_test.py +0 -0
  25. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/async_support.py +0 -0
  26. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/async_support_test.py +0 -0
  27. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/coding/__init__.py +0 -0
  28. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/coding/python/__init__.py +0 -0
  29. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/coding/python/correction.py +0 -0
  30. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/coding/python/correction_test.py +0 -0
  31. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/coding/python/execution.py +0 -0
  32. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/coding/python/execution_test.py +0 -0
  33. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/coding/python/generation.py +0 -0
  34. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/coding/python/generation_test.py +0 -0
  35. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/coding/python/parsing.py +0 -0
  36. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/coding/python/parsing_test.py +0 -0
  37. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/coding/python/sandboxing.py +0 -0
  38. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/coding/python/sandboxing_test.py +0 -0
  39. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/component.py +0 -0
  40. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/component_test.py +0 -0
  41. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/concurrent.py +0 -0
  42. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/concurrent_test.py +0 -0
  43. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/console.py +0 -0
  44. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/console_test.py +0 -0
  45. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/data/__init__.py +0 -0
  46. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/data/conversion/__init__.py +0 -0
  47. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/data/conversion/anthropic.py +0 -0
  48. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/data/conversion/anthropic_test.py +0 -0
  49. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/data/conversion/gemini.py +0 -0
  50. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/data/conversion/gemini_test.py +0 -0
  51. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/data/conversion/openai.py +0 -0
  52. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/data/conversion/openai_test.py +0 -0
  53. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/eval/__init__.py +0 -0
  54. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/eval/base.py +0 -0
  55. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/eval/base_test.py +0 -0
  56. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/eval/matching.py +0 -0
  57. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/eval/matching_test.py +0 -0
  58. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/eval/patching.py +0 -0
  59. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/eval/patching_test.py +0 -0
  60. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/eval/scoring.py +0 -0
  61. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/eval/scoring_test.py +0 -0
  62. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/eval/v2/__init__.py +0 -0
  63. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/eval/v2/checkpointing.py +0 -0
  64. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/eval/v2/checkpointing_test.py +0 -0
  65. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/eval/v2/eval_test_helper.py +0 -0
  66. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/eval/v2/evaluation.py +0 -0
  67. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/eval/v2/evaluation_test.py +0 -0
  68. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/eval/v2/example.py +0 -0
  69. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/eval/v2/example_test.py +0 -0
  70. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/eval/v2/experiment.py +0 -0
  71. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/eval/v2/experiment_test.py +0 -0
  72. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/eval/v2/metric_values.py +0 -0
  73. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/eval/v2/metric_values_test.py +0 -0
  74. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/eval/v2/metrics.py +0 -0
  75. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/eval/v2/metrics_test.py +0 -0
  76. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/eval/v2/progress.py +0 -0
  77. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/eval/v2/progress_test.py +0 -0
  78. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/eval/v2/progress_tracking.py +0 -0
  79. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/eval/v2/progress_tracking_test.py +0 -0
  80. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/eval/v2/reporting.py +0 -0
  81. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/eval/v2/reporting_test.py +0 -0
  82. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/eval/v2/runners.py +0 -0
  83. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/eval/v2/runners_test.py +0 -0
  84. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/langfunc.py +0 -0
  85. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/langfunc_test.py +0 -0
  86. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/language_model.py +0 -0
  87. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/language_model_test.py +0 -0
  88. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/llms/__init__.py +0 -0
  89. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/llms/anthropic.py +0 -0
  90. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/llms/anthropic_test.py +0 -0
  91. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/llms/azure_openai.py +0 -0
  92. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/llms/azure_openai_test.py +0 -0
  93. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/llms/cache/__init__.py +0 -0
  94. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/llms/cache/base.py +0 -0
  95. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/llms/cache/in_memory.py +0 -0
  96. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/llms/cache/in_memory_test.py +0 -0
  97. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/llms/compositional.py +0 -0
  98. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/llms/compositional_test.py +0 -0
  99. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/llms/deepseek.py +0 -0
  100. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/llms/deepseek_test.py +0 -0
  101. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/llms/fake.py +0 -0
  102. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/llms/fake_test.py +0 -0
  103. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/llms/gemini.py +0 -0
  104. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/llms/gemini_test.py +0 -0
  105. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/llms/google_genai.py +0 -0
  106. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/llms/google_genai_test.py +0 -0
  107. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/llms/groq.py +0 -0
  108. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/llms/groq_test.py +0 -0
  109. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/llms/llama_cpp.py +0 -0
  110. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/llms/llama_cpp_test.py +0 -0
  111. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/llms/openai.py +0 -0
  112. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/llms/openai_compatible.py +0 -0
  113. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/llms/openai_compatible_test.py +0 -0
  114. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/llms/openai_test.py +0 -0
  115. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/llms/rest.py +0 -0
  116. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/llms/rest_test.py +0 -0
  117. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/llms/vertexai.py +0 -0
  118. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/llms/vertexai_test.py +0 -0
  119. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/logging.py +0 -0
  120. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/logging_test.py +0 -0
  121. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/mcp/__init__.py +0 -0
  122. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/mcp/client.py +0 -0
  123. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/mcp/client_test.py +0 -0
  124. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/mcp/session.py +0 -0
  125. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/mcp/session_test.py +0 -0
  126. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/mcp/testing/simple_mcp_client.py +0 -0
  127. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/mcp/testing/simple_mcp_server.py +0 -0
  128. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/mcp/tool.py +0 -0
  129. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/mcp/tool_test.py +0 -0
  130. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/memories/__init__.py +0 -0
  131. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/memories/conversation_history.py +0 -0
  132. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/memories/conversation_history_test.py +0 -0
  133. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/memory.py +0 -0
  134. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/modalities/__init__.py +0 -0
  135. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/modalities/audio.py +0 -0
  136. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/modalities/audio_test.py +0 -0
  137. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/modalities/image.py +0 -0
  138. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/modalities/image_test.py +0 -0
  139. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/modalities/mime_test.py +0 -0
  140. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/modalities/pdf.py +0 -0
  141. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/modalities/pdf_test.py +0 -0
  142. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/modalities/video.py +0 -0
  143. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/modalities/video_test.py +0 -0
  144. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/modality.py +0 -0
  145. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/modality_test.py +0 -0
  146. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/natural_language.py +0 -0
  147. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/natural_language_test.py +0 -0
  148. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/sampling.py +0 -0
  149. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/sampling_test.py +0 -0
  150. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/structured/__init__.py +0 -0
  151. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/structured/completion.py +0 -0
  152. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/structured/completion_test.py +0 -0
  153. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/structured/description.py +0 -0
  154. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/structured/description_test.py +0 -0
  155. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/structured/function_generation.py +0 -0
  156. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/structured/function_generation_test.py +0 -0
  157. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/structured/mapping.py +0 -0
  158. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/structured/mapping_test.py +0 -0
  159. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/structured/parsing.py +0 -0
  160. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/structured/querying.py +0 -0
  161. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/structured/querying_test.py +0 -0
  162. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/structured/schema.py +0 -0
  163. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/structured/schema_generation.py +0 -0
  164. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/structured/schema_generation_test.py +0 -0
  165. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/structured/schema_test.py +0 -0
  166. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/structured/scoring.py +0 -0
  167. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/structured/scoring_test.py +0 -0
  168. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/structured/tokenization.py +0 -0
  169. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/structured/tokenization_test.py +0 -0
  170. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/subscription.py +0 -0
  171. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/subscription_test.py +0 -0
  172. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/templates/__init__.py +0 -0
  173. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/templates/completion.py +0 -0
  174. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/templates/completion_test.py +0 -0
  175. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/templates/conversation.py +0 -0
  176. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/templates/conversation_test.py +0 -0
  177. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/templates/demonstration.py +0 -0
  178. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/templates/demonstration_test.py +0 -0
  179. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/templates/selfplay.py +0 -0
  180. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/core/templates/selfplay_test.py +0 -0
  181. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/env/__init__.py +0 -0
  182. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/env/base_environment.py +0 -0
  183. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/env/base_environment_test.py +0 -0
  184. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/env/base_feature.py +0 -0
  185. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/env/base_feature_test.py +0 -0
  186. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/env/base_sandbox.py +0 -0
  187. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/env/base_sandbox_test.py +0 -0
  188. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/env/event_handlers/__init__.py +0 -0
  189. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/env/event_handlers/chain.py +0 -0
  190. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/env/event_handlers/chain_test.py +0 -0
  191. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/env/event_handlers/event_logger.py +0 -0
  192. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/env/event_handlers/event_logger_test.py +0 -0
  193. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/env/event_handlers/metric_writer.py +0 -0
  194. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/env/event_handlers/metric_writer_test.py +0 -0
  195. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/env/interface.py +0 -0
  196. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/env/interface_test.py +0 -0
  197. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/env/load_balancers.py +0 -0
  198. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/env/load_balancers_test.py +0 -0
  199. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun/env/test_utils.py +0 -0
  200. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun.egg-info/SOURCES.txt +0 -0
  201. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun.egg-info/dependency_links.txt +0 -0
  202. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun.egg-info/requires.txt +0 -0
  203. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/langfun.egg-info/top_level.txt +0 -0
  204. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/setup.cfg +0 -0
  205. {langfun-0.1.2.dev202511030805 → langfun-0.1.2.dev202511040805}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langfun
3
- Version: 0.1.2.dev202511030805
3
+ Version: 0.1.2.dev202511040805
4
4
  Summary: Langfun: Language as Functions.
5
5
  Home-page: https://github.com/google/langfun
6
6
  Author: Langfun Authors
@@ -239,6 +239,11 @@ class Message(
239
239
  """
240
240
  return MessageConverter.get(format_or_type, **kwargs).to_value(self)
241
241
 
242
+ @classmethod
243
+ def is_convertible(cls, format_or_type: str | Type[Any]) -> bool:
244
+ """Returns True if the value can be converted to a message."""
245
+ return MessageConverter.is_convertible(format_or_type)
246
+
242
247
  @classmethod
243
248
  def convertible_formats(cls) -> list[str]:
244
249
  """Returns supported format for message conversion."""
@@ -938,6 +943,13 @@ class _MessageConverterRegistry:
938
943
  assert isinstance(format_or_type, type), format_or_type
939
944
  return self.get_by_type(format_or_type, **kwargs)
940
945
 
946
+ def is_convertible(self, format_or_type: str | Type[Any]) -> bool:
947
+ """Returns whether the message is convertible to the given format or type."""
948
+ if isinstance(format_or_type, str):
949
+ return format_or_type in self._name_to_converter
950
+ assert isinstance(format_or_type, type), format_or_type
951
+ return format_or_type in self._type_to_converters
952
+
941
953
  def convertible_formats(self) -> list[str]:
942
954
  """Returns a list of converter names."""
943
955
  return sorted(list(self._name_to_converter.keys()))
@@ -1029,6 +1041,11 @@ class MessageConverter(pg.Object):
1029
1041
  """Returns a message converter for the given type."""
1030
1042
  return cls._REGISTRY.get_by_type(t, **kwargs)
1031
1043
 
1044
+ @classmethod
1045
+ def is_convertible(cls, format_or_type: str | Type[Any]) -> bool:
1046
+ """Returns whether the message is convertible to the given format or type."""
1047
+ return cls._REGISTRY.is_convertible(format_or_type)
1048
+
1032
1049
  @classmethod
1033
1050
  def convertible_formats(cls) -> list[str]:
1034
1051
  """Returns a list of converter names."""
@@ -500,6 +500,12 @@ class MessageConverterTest(unittest.TestCase):
500
500
  self.assertIn('test_format2', message.Message.convertible_formats())
501
501
  self.assertIn('test_format3', message.Message.convertible_formats())
502
502
 
503
+ self.assertTrue(message.Message.is_convertible(int))
504
+ self.assertFalse(message.Message.is_convertible(dict))
505
+ self.assertTrue(message.Message.is_convertible('test_format1'))
506
+ self.assertTrue(message.Message.is_convertible('test_format2'))
507
+ self.assertTrue(message.Message.is_convertible('test_format3'))
508
+ self.assertFalse(message.Message.is_convertible('test_format4'))
503
509
  self.assertIn(int, message.Message.convertible_types())
504
510
  self.assertIn(tuple, message.Message.convertible_types())
505
511
  self.assertEqual(
@@ -49,6 +49,10 @@ class Mime(lf.Modality):
49
49
  Union[str, bytes, None], 'The raw content of the MIME type.'
50
50
  ] = None
51
51
 
52
+ metadata: Annotated[
53
+ dict[str, Any], 'Additional metadata attached to this object.'
54
+ ] = {}
55
+
52
56
  @functools.cached_property
53
57
  def mime_type(self) -> str:
54
58
  """Returns the MIME type."""
@@ -94,7 +98,10 @@ class Mime(lf.Modality):
94
98
  # Hash the URI to avoid downloading the content.
95
99
  if self.uri is not None:
96
100
  return hashlib.md5(self.uri.encode()).hexdigest()[:8]
97
- return super().hash
101
+ if self.content is not None:
102
+ return super().hash
103
+ assert self.metadata
104
+ return hashlib.md5(str(self.metadata).encode()).hexdigest()[:8]
98
105
 
99
106
  def to_text(self) -> str:
100
107
  """Returns the text content of the MIME type."""
@@ -141,7 +148,7 @@ class Mime(lf.Modality):
141
148
 
142
149
  def _on_bound(self):
143
150
  super()._on_bound()
144
- if self.uri is None and self.content is None:
151
+ if self.uri is None and self.content is None and not self.metadata:
145
152
  raise ValueError('Either uri or content must be provided.')
146
153
 
147
154
  def to_bytes(self) -> bytes:
@@ -745,9 +745,6 @@ class CallTest(unittest.TestCase):
745
745
  parsing.call('what is one plus two?', int, lm=lm, autofix=3), 3
746
746
  )
747
747
 
748
- def test_call_with_structured_input(self):
749
- self.assertEqual(parsing.call(1, lm=fake.StaticResponse('2')), '2')
750
-
751
748
  def test_call_with_response_postprocess(self):
752
749
  target_str = '@TARGET_STR@'
753
750
  random_str = '!RANDOM_STR!'
@@ -540,17 +540,19 @@ class Template(
540
540
  return value.clone(override=kwargs) if kwargs else value # pylint: disable=no-value-for-parameter
541
541
  if isinstance(value, str):
542
542
  return cls(template_str=value, **kwargs)
543
+ if isinstance(value, Template):
544
+ lfun = cls(template_str=value.template_str, **kwargs) # pylint: disable=attribute-error
545
+ # So lfun could acccess all attributes from value.
546
+ lfun.sym_setparent(value)
547
+ return lfun
548
+ if message_lib.Message.is_convertible(type(value)):
549
+ value = message_lib.Message.from_value(value)
543
550
  if isinstance(value, message_lib.Message):
544
551
  for k, v in value.metadata.sym_items(): # pylint: disable=attribute-error
545
552
  kwargs[_ADDITIONAL_METADATA_PREFIX + k] = v
546
553
  t = cls(template_str=value.text, **kwargs)
547
554
  t._referred_modalities = value.referred_modalities
548
555
  return t
549
- if isinstance(value, Template):
550
- lfun = cls(template_str=value.template_str, **kwargs) # pylint: disable=attribute-error
551
- # So lfun could acccess all attributes from value.
552
- lfun.sym_setparent(value)
553
- return lfun
554
556
  return cls(template_str='{{input}}', input=value, **kwargs)
555
557
 
556
558
  def _html_tree_view_content(
@@ -198,6 +198,24 @@ class FromValueTest(unittest.TestCase):
198
198
  )
199
199
  self.assertEqual(message.metadata, m.metadata)
200
200
 
201
+ def test_from_message_convertible(self):
202
+
203
+ class MyFormat(pg.Object):
204
+ text: str
205
+
206
+ class MyConverter(message_lib.MessageConverter): # pylint: disable=unused-variable
207
+ FORMAT_ID = 'int'
208
+ OUTPUT_TYPE = MyFormat
209
+
210
+ def to_value(self, m: message_lib.Message) -> MyFormat:
211
+ return MyFormat(text=m.text)
212
+
213
+ def from_value(self, value: MyFormat) -> message_lib.Message:
214
+ return message_lib.UserMessage(value.text)
215
+
216
+ t = Template.from_value(MyFormat(text='1'))
217
+ self.assertEqual(t.render(), '1')
218
+
201
219
  def test_from_same_template(self):
202
220
  t = Template('Hello {{x}}', x=1)
203
221
  t2 = Template.from_value(t)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langfun
3
- Version: 0.1.2.dev202511030805
3
+ Version: 0.1.2.dev202511040805
4
4
  Summary: Langfun: Language as Functions.
5
5
  Home-page: https://github.com/google/langfun
6
6
  Author: Langfun Authors