langfun 0.1.2.dev202503200804__tar.gz → 0.1.2.dev202503220803__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.dev202503200804 → langfun-0.1.2.dev202503220803}/PKG-INFO +1 -1
  2. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/eval/base.py +1 -0
  3. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/eval/v2/__init__.py +2 -0
  4. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/eval/v2/evaluation.py +2 -2
  5. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/eval/v2/experiment.py +5 -0
  6. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/eval/v2/experiment_test.py +4 -0
  7. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/eval/v2/reporting.py +2 -3
  8. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/eval/v2/reporting_test.py +5 -5
  9. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/llms/rest.py +14 -4
  10. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/llms/rest_test.py +51 -0
  11. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun.egg-info/PKG-INFO +1 -1
  12. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/LICENSE +0 -0
  13. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/README.md +0 -0
  14. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/__init__.py +0 -0
  15. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/__init__.py +0 -0
  16. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/agentic/__init__.py +0 -0
  17. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/agentic/action.py +0 -0
  18. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/agentic/action_eval.py +0 -0
  19. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/agentic/action_eval_test.py +0 -0
  20. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/agentic/action_test.py +0 -0
  21. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/coding/__init__.py +0 -0
  22. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/coding/python/__init__.py +0 -0
  23. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/coding/python/correction.py +0 -0
  24. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/coding/python/correction_test.py +0 -0
  25. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/coding/python/execution.py +0 -0
  26. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/coding/python/execution_test.py +0 -0
  27. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/coding/python/generation.py +0 -0
  28. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/coding/python/generation_test.py +0 -0
  29. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/coding/python/parsing.py +0 -0
  30. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/coding/python/parsing_test.py +0 -0
  31. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/coding/python/sandboxing.py +0 -0
  32. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/coding/python/sandboxing_test.py +0 -0
  33. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/component.py +0 -0
  34. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/component_test.py +0 -0
  35. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/concurrent.py +0 -0
  36. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/concurrent_test.py +0 -0
  37. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/console.py +0 -0
  38. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/console_test.py +0 -0
  39. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/eval/__init__.py +0 -0
  40. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/eval/base_test.py +0 -0
  41. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/eval/matching.py +0 -0
  42. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/eval/matching_test.py +0 -0
  43. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/eval/patching.py +0 -0
  44. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/eval/patching_test.py +0 -0
  45. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/eval/scoring.py +0 -0
  46. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/eval/scoring_test.py +0 -0
  47. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/eval/v2/checkpointing.py +0 -0
  48. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/eval/v2/checkpointing_test.py +0 -0
  49. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/eval/v2/eval_test_helper.py +0 -0
  50. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/eval/v2/evaluation_test.py +0 -0
  51. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/eval/v2/example.py +0 -0
  52. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/eval/v2/example_test.py +0 -0
  53. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/eval/v2/metric_values.py +0 -0
  54. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/eval/v2/metric_values_test.py +0 -0
  55. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/eval/v2/metrics.py +0 -0
  56. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/eval/v2/metrics_test.py +0 -0
  57. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/eval/v2/progress.py +0 -0
  58. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/eval/v2/progress_test.py +0 -0
  59. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/eval/v2/progress_tracking.py +0 -0
  60. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/eval/v2/progress_tracking_test.py +0 -0
  61. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/eval/v2/runners.py +0 -0
  62. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/eval/v2/runners_test.py +0 -0
  63. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/langfunc.py +0 -0
  64. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/langfunc_test.py +0 -0
  65. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/language_model.py +0 -0
  66. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/language_model_test.py +0 -0
  67. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/llms/__init__.py +0 -0
  68. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/llms/anthropic.py +0 -0
  69. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/llms/anthropic_test.py +0 -0
  70. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/llms/azure_openai.py +0 -0
  71. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/llms/azure_openai_test.py +0 -0
  72. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/llms/cache/__init__.py +0 -0
  73. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/llms/cache/base.py +0 -0
  74. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/llms/cache/in_memory.py +0 -0
  75. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/llms/cache/in_memory_test.py +0 -0
  76. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/llms/compositional.py +0 -0
  77. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/llms/compositional_test.py +0 -0
  78. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/llms/deepseek.py +0 -0
  79. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/llms/deepseek_test.py +0 -0
  80. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/llms/fake.py +0 -0
  81. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/llms/fake_test.py +0 -0
  82. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/llms/gemini.py +0 -0
  83. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/llms/gemini_test.py +0 -0
  84. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/llms/google_genai.py +0 -0
  85. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/llms/google_genai_test.py +0 -0
  86. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/llms/groq.py +0 -0
  87. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/llms/groq_test.py +0 -0
  88. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/llms/llama_cpp.py +0 -0
  89. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/llms/llama_cpp_test.py +0 -0
  90. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/llms/openai.py +0 -0
  91. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/llms/openai_compatible.py +0 -0
  92. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/llms/openai_compatible_test.py +0 -0
  93. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/llms/openai_test.py +0 -0
  94. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/llms/vertexai.py +0 -0
  95. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/llms/vertexai_test.py +0 -0
  96. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/logging.py +0 -0
  97. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/logging_test.py +0 -0
  98. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/memories/__init__.py +0 -0
  99. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/memories/conversation_history.py +0 -0
  100. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/memories/conversation_history_test.py +0 -0
  101. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/memory.py +0 -0
  102. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/message.py +0 -0
  103. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/message_test.py +0 -0
  104. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/modalities/__init__.py +0 -0
  105. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/modalities/audio.py +0 -0
  106. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/modalities/audio_test.py +0 -0
  107. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/modalities/image.py +0 -0
  108. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/modalities/image_test.py +0 -0
  109. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/modalities/mime.py +0 -0
  110. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/modalities/mime_test.py +0 -0
  111. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/modalities/pdf.py +0 -0
  112. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/modalities/pdf_test.py +0 -0
  113. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/modalities/video.py +0 -0
  114. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/modalities/video_test.py +0 -0
  115. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/modality.py +0 -0
  116. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/modality_test.py +0 -0
  117. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/natural_language.py +0 -0
  118. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/natural_language_test.py +0 -0
  119. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/sampling.py +0 -0
  120. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/sampling_test.py +0 -0
  121. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/structured/__init__.py +0 -0
  122. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/structured/completion.py +0 -0
  123. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/structured/completion_test.py +0 -0
  124. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/structured/description.py +0 -0
  125. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/structured/description_test.py +0 -0
  126. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/structured/function_generation.py +0 -0
  127. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/structured/function_generation_test.py +0 -0
  128. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/structured/mapping.py +0 -0
  129. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/structured/mapping_test.py +0 -0
  130. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/structured/parsing.py +0 -0
  131. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/structured/parsing_test.py +0 -0
  132. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/structured/querying.py +0 -0
  133. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/structured/querying_test.py +0 -0
  134. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/structured/schema.py +0 -0
  135. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/structured/schema_generation.py +0 -0
  136. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/structured/schema_generation_test.py +0 -0
  137. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/structured/schema_test.py +0 -0
  138. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/structured/scoring.py +0 -0
  139. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/structured/scoring_test.py +0 -0
  140. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/structured/tokenization.py +0 -0
  141. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/structured/tokenization_test.py +0 -0
  142. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/subscription.py +0 -0
  143. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/subscription_test.py +0 -0
  144. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/template.py +0 -0
  145. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/template_test.py +0 -0
  146. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/templates/__init__.py +0 -0
  147. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/templates/completion.py +0 -0
  148. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/templates/completion_test.py +0 -0
  149. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/templates/conversation.py +0 -0
  150. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/templates/conversation_test.py +0 -0
  151. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/templates/demonstration.py +0 -0
  152. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/templates/demonstration_test.py +0 -0
  153. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/templates/selfplay.py +0 -0
  154. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun/core/templates/selfplay_test.py +0 -0
  155. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun.egg-info/SOURCES.txt +0 -0
  156. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun.egg-info/dependency_links.txt +0 -0
  157. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun.egg-info/requires.txt +0 -0
  158. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/langfun.egg-info/top_level.txt +0 -0
  159. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/setup.cfg +0 -0
  160. {langfun-0.1.2.dev202503200804 → langfun-0.1.2.dev202503220803}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langfun
3
- Version: 0.1.2.dev202503200804
3
+ Version: 0.1.2.dev202503220803
4
4
  Summary: Langfun: Language as Functions.
5
5
  Home-page: https://github.com/google/langfun
6
6
  Author: Langfun Authors
@@ -77,6 +77,7 @@ class Evaluable(lf.Component):
77
77
 
78
78
  @classmethod
79
79
  def link(cls, path: str) -> str:
80
+ assert path.startswith('/'), path
80
81
  return f'file://{path}'
81
82
 
82
83
  @property
@@ -28,6 +28,8 @@ from langfun.core.eval.v2.metric_values import Average
28
28
  from langfun.core.eval.v2.metrics import Metric
29
29
  from langfun.core.eval.v2 import metrics
30
30
 
31
+ from langfun.core.eval.v2.experiment import Run
32
+ from langfun.core.eval.v2.experiment import RunId
31
33
  from langfun.core.eval.v2.experiment import Plugin
32
34
  from langfun.core.eval.v2.experiment import Runner
33
35
  from langfun.core.eval.v2 import runners
@@ -425,7 +425,7 @@ class Evaluation(experiment_lib.Experiment):
425
425
  [
426
426
  pg.views.html.controls.Label(
427
427
  'Summary',
428
- link=run.experiment.output_link(run, 'summary.html'),
428
+ link=run.output_link('summary.html'),
429
429
  css_classes=['summary-link'],
430
430
  ),
431
431
  '|',
@@ -571,7 +571,7 @@ class Evaluation(experiment_lib.Experiment):
571
571
  pg.Html.element(
572
572
  'iframe', [],
573
573
  name='example-view',
574
- src='./1.html',
574
+ src='about:blank',
575
575
  title='Example view.',
576
576
  css_classes=['example-view'],
577
577
  ),
@@ -276,6 +276,7 @@ class Experiment(lf.Component, pg.views.HtmlTreeView.Extension):
276
276
 
277
277
  @classmethod
278
278
  def link(cls, path: str) -> str:
279
+ assert path.startswith('/'), path
279
280
  return f'file://{path}'
280
281
 
281
282
  #
@@ -887,6 +888,10 @@ class Run(pg.Object, pg.views.html.HtmlTreeView.Extension):
887
888
  return os.path.join(self.output_root, experiment.id.replace('@', '/'))
888
889
  return self.output_root
889
890
 
891
+ def output_link(self, relative_path: str):
892
+ """Returns the output link for the relative path."""
893
+ return Experiment.link(os.path.join(self.output_root, relative_path))
894
+
890
895
  def input_dir(self, experiment: Experiment) -> str:
891
896
  """Returns the input directory of the experiment."""
892
897
  if experiment.is_leaf:
@@ -218,6 +218,10 @@ class RunTest(unittest.TestCase):
218
218
  )
219
219
  self.assertEqual(run.output_root, '/root/run_20241102_0')
220
220
  self.assertEqual(run.input_root, '/root/run_20241102_0')
221
+ self.assertEqual(
222
+ run.output_link('summary.html'),
223
+ 'file:///root/run_20241102_0/summary.html'
224
+ )
221
225
  self.assertEqual(
222
226
  run.output_dir(run.experiment.leaf_nodes[0]),
223
227
  (
@@ -13,6 +13,7 @@
13
13
  # limitations under the License.
14
14
  """Reporting evaluation results."""
15
15
 
16
+ import os
16
17
  import threading
17
18
  import time
18
19
  import traceback
@@ -145,9 +146,7 @@ class HtmlReporter(experiment_lib.Plugin):
145
146
  )
146
147
  )
147
148
  with self._summary_lock:
148
- html.save(
149
- run.output_path_for(run.experiment, _SUMMARY_FILE)
150
- )
149
+ html.save(os.path.join(run.output_root, _SUMMARY_FILE))
151
150
 
152
151
  if force or (time.time() - self._last_summary_time > self.summary_interval):
153
152
  self._last_summary_time = time.time()
@@ -31,7 +31,7 @@ class ReportingTest(unittest.TestCase):
31
31
  reporter = reporting.HtmlReporter()
32
32
  run = experiment.run(root_dir, 'new', plugins=[checkpointer, reporter])
33
33
  self.assertTrue(
34
- pg.io.path_exists(run.output_path_for(experiment, 'summary.html'))
34
+ pg.io.path_exists(os.path.join(run.output_root, 'summary.html'))
35
35
  )
36
36
  for leaf in experiment.leaf_nodes:
37
37
  self.assertTrue(
@@ -56,7 +56,7 @@ class ReportingTest(unittest.TestCase):
56
56
  warm_start_from=run.output_root
57
57
  )
58
58
  self.assertTrue(
59
- pg.io.path_exists(run.output_path_for(experiment, 'summary.html'))
59
+ pg.io.path_exists(os.path.join(run.output_root, 'summary.html'))
60
60
  )
61
61
  for leaf in experiment.leaf_nodes:
62
62
  self.assertTrue(
@@ -83,7 +83,7 @@ class ReportingTest(unittest.TestCase):
83
83
  reporter = reporting.HtmlReporter()
84
84
  run = experiment.run(root_dir, 'new', plugins=[reporter])
85
85
  self.assertFalse(
86
- pg.io.path_exists(run.output_path_for(experiment, 'summary.html'))
86
+ pg.io.path_exists(os.path.join(run.output_root, 'summary.html'))
87
87
  )
88
88
  for leaf in experiment.leaf_nodes:
89
89
  self.assertFalse(
@@ -107,7 +107,7 @@ class ReportingTest(unittest.TestCase):
107
107
  reporter = reporting.HtmlReporter()
108
108
  run = experiment.run(root_dir, 'new', plugins=[checkpointer, reporter])
109
109
  self.assertTrue(
110
- pg.io.path_exists(run.output_path_for(experiment, 'summary.html'))
110
+ pg.io.path_exists(os.path.join(run.output_root, 'summary.html'))
111
111
  )
112
112
  for leaf in experiment.leaf_nodes:
113
113
  self.assertTrue(
@@ -136,7 +136,7 @@ class ReportingTest(unittest.TestCase):
136
136
  warm_start_from=run.output_root
137
137
  )
138
138
  self.assertTrue(
139
- pg.io.path_exists(run.output_path_for(experiment, 'summary.html'))
139
+ pg.io.path_exists(os.path.join(run.output_root, 'summary.html'))
140
140
  )
141
141
  for leaf in experiment.leaf_nodes:
142
142
  self.assertTrue(
@@ -89,11 +89,21 @@ class REST(lf.LanguageModel):
89
89
  timeout=self.timeout,
90
90
  )
91
91
  )
92
- except (requests.exceptions.ReadTimeout,
93
- requests.exceptions.ConnectTimeout) as e:
92
+ except (
93
+ requests.exceptions.Timeout,
94
+ requests.exceptions.ReadTimeout,
95
+ requests.exceptions.ConnectTimeout,
96
+ TimeoutError,
97
+ ) as e:
94
98
  raise lf.TemporaryLMError(str(e)) from e
95
- except ConnectionError as e:
96
- raise lf.LMError(str(e)) from e
99
+ except (
100
+ requests.exceptions.ConnectionError,
101
+ ConnectionError,
102
+ ) as e:
103
+ error_message = str(e)
104
+ if 'REJECTED_CLIENT_THROTTLED' in error_message:
105
+ raise lf.TemporaryLMError(error_message) from e
106
+ raise lf.LMError(error_message) from e
97
107
 
98
108
  def _error(self, status_code: int, content: str) -> lf.LMError:
99
109
  if status_code == 429:
@@ -38,6 +38,13 @@ def mock_requests_post(url: str, json: dict[str, Any], **kwargs):
38
38
  return response
39
39
 
40
40
 
41
+ def mock_requests_post_exception(error):
42
+ def _mock_requests(url: str, json: dict[str, Any], **kwargs):
43
+ del url, json, kwargs
44
+ raise error
45
+ return _mock_requests
46
+
47
+
41
48
  def mock_requests_post_error(status_code, error_type, error_message):
42
49
  def _mock_requests(url: str, json: dict[str, Any], **kwargs):
43
50
  del url, json, kwargs
@@ -106,6 +113,50 @@ class RestTest(unittest.TestCase):
106
113
  ):
107
114
  self._lm('hello', max_attempts=1)
108
115
 
116
+ for error, expected_lm_error_cls, expected_lm_error_msg in [
117
+ (
118
+ requests.exceptions.Timeout('Timeout.'),
119
+ lf.TemporaryLMError,
120
+ 'Timeout.',
121
+ ),
122
+ (
123
+ requests.exceptions.ReadTimeout('Read timeout.'),
124
+ lf.TemporaryLMError,
125
+ 'Read timeout.',
126
+ ),
127
+ (
128
+ requests.exceptions.ConnectTimeout('Connect timeout.'),
129
+ lf.TemporaryLMError,
130
+ 'Connect timeout.',
131
+ ),
132
+ (
133
+ TimeoutError('Timeout error.'),
134
+ lf.TemporaryLMError,
135
+ 'Timeout error.',
136
+ ),
137
+ (
138
+ requests.exceptions.ConnectionError('REJECTED_CLIENT_THROTTLED'),
139
+ lf.TemporaryLMError,
140
+ 'REJECTED_CLIENT_THROTTLED',
141
+ ),
142
+ (
143
+ requests.exceptions.ConnectionError('Connection error.'),
144
+ lf.LMError,
145
+ 'Connection error.',
146
+ ),
147
+ (
148
+ ConnectionError('Connection error.'),
149
+ lf.LMError,
150
+ 'Connection error.',
151
+ )
152
+ ]:
153
+ with mock.patch('requests.Session.post') as mock_post:
154
+ mock_post.side_effect = mock_requests_post_exception(error)
155
+ with self.assertRaisesRegex(
156
+ expected_lm_error_cls, expected_lm_error_msg
157
+ ):
158
+ self._lm._sample_single(lf.UserMessage('hello'))
159
+
109
160
 
110
161
  if __name__ == '__main__':
111
162
  unittest.main()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langfun
3
- Version: 0.1.2.dev202503200804
3
+ Version: 0.1.2.dev202503220803
4
4
  Summary: Langfun: Language as Functions.
5
5
  Home-page: https://github.com/google/langfun
6
6
  Author: Langfun Authors