langfun 0.1.2.dev202502240805__tar.gz → 0.1.2.dev202502250804__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.dev202502240805 → langfun-0.1.2.dev202502250804}/PKG-INFO +1 -1
  2. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/agentic/action.py +78 -0
  3. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/eval/base_test.py +6 -6
  4. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/eval/matching_test.py +1 -1
  5. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/eval/scoring_test.py +1 -1
  6. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/langfunc_test.py +4 -4
  7. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/language_model.py +4 -0
  8. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/llms/__init__.py +3 -0
  9. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/llms/anthropic.py +85 -6
  10. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/llms/vertexai.py +6 -0
  11. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun.egg-info/PKG-INFO +1 -1
  12. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/LICENSE +0 -0
  13. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/README.md +0 -0
  14. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/__init__.py +0 -0
  15. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/__init__.py +0 -0
  16. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/agentic/__init__.py +0 -0
  17. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/agentic/action_eval.py +0 -0
  18. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/agentic/action_eval_test.py +0 -0
  19. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/agentic/action_test.py +0 -0
  20. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/coding/__init__.py +0 -0
  21. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/coding/python/__init__.py +0 -0
  22. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/coding/python/correction.py +0 -0
  23. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/coding/python/correction_test.py +0 -0
  24. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/coding/python/execution.py +0 -0
  25. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/coding/python/execution_test.py +0 -0
  26. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/coding/python/generation.py +0 -0
  27. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/coding/python/generation_test.py +0 -0
  28. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/coding/python/parsing.py +0 -0
  29. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/coding/python/parsing_test.py +0 -0
  30. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/coding/python/sandboxing.py +0 -0
  31. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/coding/python/sandboxing_test.py +0 -0
  32. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/component.py +0 -0
  33. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/component_test.py +0 -0
  34. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/concurrent.py +0 -0
  35. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/concurrent_test.py +0 -0
  36. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/console.py +0 -0
  37. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/console_test.py +0 -0
  38. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/eval/__init__.py +0 -0
  39. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/eval/base.py +0 -0
  40. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/eval/matching.py +0 -0
  41. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/eval/patching.py +0 -0
  42. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/eval/patching_test.py +0 -0
  43. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/eval/scoring.py +0 -0
  44. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/eval/v2/__init__.py +0 -0
  45. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/eval/v2/checkpointing.py +0 -0
  46. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/eval/v2/checkpointing_test.py +0 -0
  47. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/eval/v2/eval_test_helper.py +0 -0
  48. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/eval/v2/evaluation.py +0 -0
  49. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/eval/v2/evaluation_test.py +0 -0
  50. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/eval/v2/example.py +0 -0
  51. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/eval/v2/example_test.py +0 -0
  52. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/eval/v2/experiment.py +0 -0
  53. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/eval/v2/experiment_test.py +0 -0
  54. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/eval/v2/metric_values.py +0 -0
  55. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/eval/v2/metric_values_test.py +0 -0
  56. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/eval/v2/metrics.py +0 -0
  57. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/eval/v2/metrics_test.py +0 -0
  58. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/eval/v2/progress.py +0 -0
  59. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/eval/v2/progress_test.py +0 -0
  60. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/eval/v2/progress_tracking.py +0 -0
  61. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/eval/v2/progress_tracking_test.py +0 -0
  62. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/eval/v2/reporting.py +0 -0
  63. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/eval/v2/reporting_test.py +0 -0
  64. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/eval/v2/runners.py +0 -0
  65. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/eval/v2/runners_test.py +0 -0
  66. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/langfunc.py +0 -0
  67. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/language_model_test.py +0 -0
  68. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/llms/anthropic_test.py +0 -0
  69. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/llms/cache/__init__.py +0 -0
  70. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/llms/cache/base.py +0 -0
  71. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/llms/cache/in_memory.py +0 -0
  72. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/llms/cache/in_memory_test.py +0 -0
  73. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/llms/compositional.py +0 -0
  74. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/llms/compositional_test.py +0 -0
  75. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/llms/deepseek.py +0 -0
  76. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/llms/deepseek_test.py +0 -0
  77. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/llms/fake.py +0 -0
  78. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/llms/fake_test.py +0 -0
  79. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/llms/gemini.py +0 -0
  80. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/llms/gemini_test.py +0 -0
  81. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/llms/google_genai.py +0 -0
  82. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/llms/google_genai_test.py +0 -0
  83. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/llms/groq.py +0 -0
  84. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/llms/groq_test.py +0 -0
  85. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/llms/llama_cpp.py +0 -0
  86. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/llms/llama_cpp_test.py +0 -0
  87. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/llms/openai.py +0 -0
  88. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/llms/openai_compatible.py +0 -0
  89. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/llms/openai_compatible_test.py +0 -0
  90. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/llms/openai_test.py +0 -0
  91. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/llms/rest.py +0 -0
  92. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/llms/rest_test.py +0 -0
  93. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/llms/vertexai_test.py +0 -0
  94. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/logging.py +0 -0
  95. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/logging_test.py +0 -0
  96. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/memories/__init__.py +0 -0
  97. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/memories/conversation_history.py +0 -0
  98. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/memories/conversation_history_test.py +0 -0
  99. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/memory.py +0 -0
  100. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/message.py +0 -0
  101. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/message_test.py +0 -0
  102. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/modalities/__init__.py +0 -0
  103. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/modalities/audio.py +0 -0
  104. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/modalities/audio_test.py +0 -0
  105. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/modalities/image.py +0 -0
  106. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/modalities/image_test.py +0 -0
  107. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/modalities/mime.py +0 -0
  108. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/modalities/mime_test.py +0 -0
  109. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/modalities/ms_office.py +0 -0
  110. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/modalities/ms_office_test.py +0 -0
  111. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/modalities/pdf.py +0 -0
  112. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/modalities/pdf_test.py +0 -0
  113. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/modalities/video.py +0 -0
  114. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/modalities/video_test.py +0 -0
  115. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/modality.py +0 -0
  116. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/modality_test.py +0 -0
  117. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/natural_language.py +0 -0
  118. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/natural_language_test.py +0 -0
  119. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/sampling.py +0 -0
  120. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/sampling_test.py +0 -0
  121. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/structured/__init__.py +0 -0
  122. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/structured/completion.py +0 -0
  123. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/structured/completion_test.py +0 -0
  124. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/structured/description.py +0 -0
  125. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/structured/description_test.py +0 -0
  126. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/structured/function_generation.py +0 -0
  127. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/structured/function_generation_test.py +0 -0
  128. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/structured/mapping.py +0 -0
  129. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/structured/mapping_test.py +0 -0
  130. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/structured/parsing.py +0 -0
  131. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/structured/parsing_test.py +0 -0
  132. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/structured/querying.py +0 -0
  133. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/structured/querying_test.py +0 -0
  134. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/structured/schema.py +0 -0
  135. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/structured/schema_generation.py +0 -0
  136. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/structured/schema_generation_test.py +0 -0
  137. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/structured/schema_test.py +0 -0
  138. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/structured/scoring.py +0 -0
  139. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/structured/scoring_test.py +0 -0
  140. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/structured/tokenization.py +0 -0
  141. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/structured/tokenization_test.py +0 -0
  142. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/subscription.py +0 -0
  143. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/subscription_test.py +0 -0
  144. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/template.py +0 -0
  145. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/template_test.py +0 -0
  146. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/templates/__init__.py +0 -0
  147. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/templates/completion.py +0 -0
  148. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/templates/completion_test.py +0 -0
  149. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/templates/conversation.py +0 -0
  150. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/templates/conversation_test.py +0 -0
  151. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/templates/demonstration.py +0 -0
  152. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/templates/demonstration_test.py +0 -0
  153. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/templates/selfplay.py +0 -0
  154. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun/core/templates/selfplay_test.py +0 -0
  155. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun.egg-info/SOURCES.txt +0 -0
  156. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun.egg-info/dependency_links.txt +0 -0
  157. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun.egg-info/requires.txt +0 -0
  158. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/langfun.egg-info/top_level.txt +0 -0
  159. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/setup.cfg +0 -0
  160. {langfun-0.1.2.dev202502240805 → langfun-0.1.2.dev202502250804}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: langfun
3
- Version: 0.1.2.dev202502240805
3
+ Version: 0.1.2.dev202502250804
4
4
  Summary: Langfun: Language as Functions.
5
5
  Home-page: https://github.com/google/langfun
6
6
  Author: Langfun Authors
@@ -795,6 +795,84 @@ class Session(pg.Object, pg.views.html.HtmlTreeView.Extension):
795
795
  **kwargs
796
796
  )
797
797
 
798
+ def query_prompt(
799
+ self,
800
+ prompt: Union[str, lf.Template, Any],
801
+ schema: Union[
802
+ lf_structured.Schema, Type[Any], list[Type[Any]], dict[str, Any], None
803
+ ] = None,
804
+ **kwargs,
805
+ ) -> Any:
806
+ """Calls `lf.query_prompt` and associates it with the current invocation.
807
+
808
+ The following code are equivalent:
809
+
810
+ Code 1:
811
+ ```
812
+ session.query_prompt(...)
813
+ ```
814
+
815
+ Code 2:
816
+ ```
817
+ with session.track_queries() as queries:
818
+ output = lf.query_prompt(...)
819
+ ```
820
+ The former is preferred when `lf.query_prompt` is directly called by the
821
+ action.
822
+ If `lf.query_prompt` is called by a function that does not have access to
823
+ the
824
+ session, the latter should be used.
825
+
826
+ Args:
827
+ prompt: The prompt to query.
828
+ schema: The schema to use for the query.
829
+ **kwargs: Additional keyword arguments to pass to `lf.query_prompt`.
830
+
831
+ Returns:
832
+ The result of the query.
833
+ """
834
+ with self.track_queries():
835
+ return lf_structured.query_prompt(prompt, schema=schema, **kwargs)
836
+
837
+ def query_output(
838
+ self,
839
+ response: Union[str, lf.Template, Any],
840
+ schema: Union[
841
+ lf_structured.Schema, Type[Any], list[Type[Any]], dict[str, Any], None
842
+ ] = None,
843
+ **kwargs,
844
+ ) -> Any:
845
+ """Calls `lf.query_output` and associates it with the current invocation.
846
+
847
+ The following code are equivalent:
848
+
849
+ Code 1:
850
+ ```
851
+ session.query_output(...)
852
+ ```
853
+
854
+ Code 2:
855
+ ```
856
+ with session.track_queries() as queries:
857
+ output = lf.query_output(...)
858
+ ```
859
+ The former is preferred when `lf.query_output` is directly called by the
860
+ action.
861
+ If `lf.query_output` is called by a function that does not have access to
862
+ the
863
+ session, the latter should be used.
864
+
865
+ Args:
866
+ response: The response to query.
867
+ schema: The schema to use for the query.
868
+ **kwargs: Additional keyword arguments to pass to `lf.query_prompt`.
869
+
870
+ Returns:
871
+ The result of the query.
872
+ """
873
+ with self.track_queries():
874
+ return lf_structured.query_output(response, schema=schema, **kwargs)
875
+
798
876
  def _log(self, level: lf.logging.LogLevel, message: str, **kwargs):
799
877
  self._current_action.current_phase.append(
800
878
  lf.logging.LogEntry(
@@ -101,7 +101,7 @@ class EvaluationTest(unittest.TestCase):
101
101
  self.assertEqual(s.dir, os.path.join(s.root_dir, s.id))
102
102
  self.assertEqual(s.hash, s.clone().hash)
103
103
  # Test persistent hash.
104
- self.assertEqual(s.hash, 'ae86c703')
104
+ self.assertEqual(s.hash, '31a1c20a')
105
105
  self.assertEqual(
106
106
  s.hash, s.clone(override={'max_workers': 2, 'lm.timeout': 20}).hash
107
107
  )
@@ -211,7 +211,7 @@ class EvaluationTest(unittest.TestCase):
211
211
  s.result,
212
212
  dict(
213
213
  experiment_setup=dict(
214
- id='Evaluation@0fade07d',
214
+ id='Evaluation@e06b5967',
215
215
  dir=s.dir,
216
216
  model='StaticSequence',
217
217
  prompt_template='{{example.question}}',
@@ -376,7 +376,7 @@ class EvaluationTest(unittest.TestCase):
376
376
  s.children[0].dir, os.path.join(s.root_dir, s.children[0].id)
377
377
  )
378
378
  # Test persistent hash.
379
- self.assertEqual(s.hash, 'b66a4e88')
379
+ self.assertEqual(s.hash, '9f4bc85b')
380
380
 
381
381
  summary = s.run(verbose=True)
382
382
  self.assertEqual(len(summary.evaluations), 2)
@@ -526,10 +526,10 @@ class SuiteTest(unittest.TestCase):
526
526
  lm=lm
527
527
  )
528
528
  # Test for persistent hash.
529
- self.assertEqual(s.hash, '26e6cc25')
529
+ self.assertEqual(s.hash, '2910c323')
530
530
  s.run()
531
531
  expected = {
532
- 'Evaluation@0fade07d': dict(
532
+ 'Evaluation@e06b5967': dict(
533
533
  experiment_setup=dict(
534
534
  id=s.children[0].id,
535
535
  dir=s.children[0].dir,
@@ -555,7 +555,7 @@ class SuiteTest(unittest.TestCase):
555
555
  ),
556
556
  usage=s.children[0].result.usage,
557
557
  ),
558
- 'Evaluation@ae86c703': dict(
558
+ 'Evaluation@31a1c20a': dict(
559
559
  experiment_setup=dict(
560
560
  id=s.children[1].children[0].id,
561
561
  dir=s.children[1].children[0].dir,
@@ -103,7 +103,7 @@ class MatchingTest(unittest.TestCase):
103
103
  s.result,
104
104
  dict(
105
105
  experiment_setup=dict(
106
- id='MyTask@739a174b',
106
+ id='MyTask@a98a284d',
107
107
  dir=s.dir,
108
108
  model='StaticSequence',
109
109
  prompt_template='{{example.question}}',
@@ -81,7 +81,7 @@ class ScoringTest(unittest.TestCase):
81
81
  s.result,
82
82
  dict(
83
83
  experiment_setup=dict(
84
- id='ConstraintFollowing@5c88a5eb',
84
+ id='ConstraintFollowing@90671d5e',
85
85
  dir=s.dir,
86
86
  model='StaticSequence',
87
87
  prompt_template='{{example}}',
@@ -106,10 +106,10 @@ class LangFuncCallTest(unittest.TestCase):
106
106
  "LangFunc(template_str='Hello', clean=True,"
107
107
  ' lm=ExcitedEchoer(sampling_options=LMSamplingOptions(temperature=None,'
108
108
  ' max_tokens=None, n=1, top_k=40, top_p=None, stop=None,'
109
- ' random_seed=None, logprobs=False, top_logprobs=None), cache=None,'
110
- ' max_concurrency=None, timeout=120.0, max_attempts=5,'
111
- ' retry_interval=(5, 60), exponential_backoff=True,'
112
- ' max_retry_interval=300, debug=False))',
109
+ ' random_seed=None, logprobs=False, top_logprobs=None,'
110
+ ' max_thinking_tokens=None), cache=None, max_concurrency=None,'
111
+ ' timeout=120.0, max_attempts=5, retry_interval=(5, 60),'
112
+ ' exponential_backoff=True, max_retry_interval=300, debug=False))',
113
113
  )
114
114
 
115
115
  l = LangFunc('Hello')
@@ -560,6 +560,10 @@ class LMSamplingOptions(component.Component):
560
560
  ),
561
561
  ] = None
562
562
 
563
+ max_thinking_tokens: Annotated[
564
+ int | None, 'Number of max thinking tokens.'
565
+ ] = None
566
+
563
567
  def cache_key(self) -> tuple[Any, ...]:
564
568
  """Returns a tuple of current values as cache key."""
565
569
  return (
@@ -127,6 +127,8 @@ from langfun.core.llms.openai import Gpt35
127
127
 
128
128
  # Anthropic models.
129
129
 
130
+ from langfun.core.llms.anthropic import Claude37
131
+ from langfun.core.llms.anthropic import Claude37Sonnet_20250219
130
132
  from langfun.core.llms.anthropic import Claude35Sonnet
131
133
  from langfun.core.llms.anthropic import Claude35Sonnet_20241022
132
134
  from langfun.core.llms.anthropic import Claude35Haiku
@@ -139,6 +141,7 @@ from langfun.core.llms.anthropic import Claude3Haiku
139
141
  from langfun.core.llms.anthropic import Claude3Haiku_20240307
140
142
 
141
143
  from langfun.core.llms.vertexai import VertexAIAnthropic
144
+ from langfun.core.llms.vertexai import VertexAIClaude37Sonnet_20250219
142
145
  from langfun.core.llms.vertexai import VertexAIClaude35Sonnet_20241022
143
146
  from langfun.core.llms.vertexai import VertexAIClaude35Haiku_20241022
144
147
  from langfun.core.llms.vertexai import VertexAIClaude3Opus_20240229
@@ -88,6 +88,32 @@ SUPPORTED_MODELS = [
88
88
  max_output_tokens_per_minute=80_000,
89
89
  ),
90
90
  ),
91
+ AnthropicModelInfo(
92
+ model_id='claude-3-7-sonnet-20250219',
93
+ provider='Anthropic',
94
+ in_service=True,
95
+ description='Claude 3.7 Sonnet model (2/19/2025).',
96
+ release_date=datetime.datetime(2025, 2, 19),
97
+ input_modalities=(
98
+ AnthropicModelInfo.INPUT_IMAGE_TYPES
99
+ + AnthropicModelInfo.INPUT_DOC_TYPES
100
+ ),
101
+ context_length=lf.ModelInfo.ContextLength(
102
+ max_input_tokens=200_000,
103
+ max_output_tokens=128_000,
104
+ ),
105
+ pricing=lf.ModelInfo.Pricing(
106
+ cost_per_1m_cached_input_tokens=0.3,
107
+ cost_per_1m_input_tokens=3,
108
+ cost_per_1m_output_tokens=15,
109
+ ),
110
+ rate_limits=AnthropicModelInfo.RateLimits(
111
+ # Tier 4 rate limits
112
+ max_requests_per_minute=4000,
113
+ max_input_tokens_per_minute=400_000,
114
+ max_output_tokens_per_minute=80_000,
115
+ ),
116
+ ),
91
117
  AnthropicModelInfo(
92
118
  model_id='claude-3-5-sonnet-20241022',
93
119
  provider='Anthropic',
@@ -139,9 +165,34 @@ SUPPORTED_MODELS = [
139
165
  cost_per_1m_output_tokens=15,
140
166
  ),
141
167
  rate_limits=AnthropicModelInfo.RateLimits(
142
- # Tier 4 rate limits
143
- max_requests_per_minute=4000,
144
- max_input_tokens_per_minute=400_000,
168
+ max_requests_per_minute=100,
169
+ max_input_tokens_per_minute=1_000_000,
170
+ max_output_tokens_per_minute=80_000,
171
+ ),
172
+ ),
173
+ AnthropicModelInfo(
174
+ model_id='claude-3-7-sonnet@20250219',
175
+ alias_for='claude-3-7-sonnet-20250219',
176
+ provider='VertexAI',
177
+ in_service=True,
178
+ description='Claude 3.7 Sonnet model served on VertexAI (02/19/2025).',
179
+ release_date=datetime.datetime(2025, 2, 19),
180
+ input_modalities=(
181
+ AnthropicModelInfo.INPUT_IMAGE_TYPES
182
+ + AnthropicModelInfo.INPUT_DOC_TYPES
183
+ ),
184
+ context_length=lf.ModelInfo.ContextLength(
185
+ max_input_tokens=200_000,
186
+ max_output_tokens=128_000,
187
+ ),
188
+ pricing=lf.ModelInfo.Pricing(
189
+ cost_per_1m_cached_input_tokens=0.3,
190
+ cost_per_1m_input_tokens=3,
191
+ cost_per_1m_output_tokens=15,
192
+ ),
193
+ rate_limits=AnthropicModelInfo.RateLimits(
194
+ max_requests_per_minute=100,
195
+ max_input_tokens_per_minute=1_000_000,
145
196
  max_output_tokens_per_minute=80_000,
146
197
  ),
147
198
  ),
@@ -457,8 +508,7 @@ class Anthropic(rest.REST):
457
508
  'x-api-key': self._api_key,
458
509
  'anthropic-version': self.api_version,
459
510
  'content-type': 'application/json',
460
- # TODO(yifenglu): Remove beta flag once the feature is fully supported.
461
- 'anthropic-beta': 'pdfs-2024-09-25',
511
+ 'anthropic-beta': 'output-128k-2025-02-19',
462
512
  }
463
513
 
464
514
  @functools.cached_property
@@ -506,6 +556,17 @@ class Anthropic(rest.REST):
506
556
  args['top_k'] = options.top_k
507
557
  if options.top_p is not None:
508
558
  args['top_p'] = options.top_p
559
+ if options.max_thinking_tokens is not None:
560
+ args['thinking'] = {
561
+ 'type': 'enabled',
562
+ # Minimum budget is 1,024 tokens.
563
+ 'budget_tokens': options.max_thinking_tokens,
564
+ }
565
+ # Thinking isn’t compatible with temperature, top_p, or top_k.
566
+ # https://docs.anthropic.com/en/docs/build-with-claude/extended-thinking#important-considerations-when-using-extended-thinking
567
+ args.pop('temperature', None)
568
+ args.pop('top_k', None)
569
+ args.pop('top_p', None)
509
570
  return args
510
571
 
511
572
  def _content_from_message(self, prompt: lf.Message) -> list[dict[str, Any]]:
@@ -559,9 +620,27 @@ class Anthropic(rest.REST):
559
620
  def _message_from_content(self, content: list[dict[str, Any]]) -> lf.Message:
560
621
  """Converts Anthropic's content protocol to message."""
561
622
  # Refer: https://docs.anthropic.com/claude/reference/messages-examples
562
- return lf.AIMessage.from_chunks(
623
+ # Thinking: https://docs.anthropic.com/en/docs/build-with-claude/extended-thinking#implementing-extended-thinking # pylint: disable=line-too-long
624
+ response = lf.AIMessage.from_chunks(
563
625
  [x['text'] for x in content if x['type'] == 'text']
564
626
  )
627
+ thinking = lf.AIMessage.from_chunks(
628
+ [x['thinking'] for x in content if x['type'] == 'thinking']
629
+ )
630
+ # thinking is added into the metadata.thinking field.
631
+ response.set('thinking', thinking)
632
+ return response
633
+
634
+
635
+ class Claude37(Anthropic):
636
+ """Base class for Claude 3.7 models."""
637
+
638
+
639
+ # pylint: disable=invalid-name
640
+ class Claude37Sonnet_20250219(Claude37):
641
+ """Claude 3.7 Sonnet model (latest)."""
642
+
643
+ model = 'claude-3-7-sonnet-20250219'
565
644
 
566
645
 
567
646
  class Claude35(Anthropic):
@@ -302,6 +302,12 @@ class VertexAIAnthropic(VertexAI, anthropic.Anthropic):
302
302
  # pylint: disable=invalid-name
303
303
 
304
304
 
305
+ class VertexAIClaude37Sonnet_20250219(VertexAIAnthropic):
306
+ """Anthropic's Claude 3.7 model on VertexAI."""
307
+ model = 'claude-3-7-sonnet@20250219'
308
+ location = 'us-east5'
309
+
310
+
305
311
  class VertexAIClaude35Sonnet_20241022(VertexAIAnthropic):
306
312
  """Anthropic's Claude 3.5 Sonnet model on VertexAI."""
307
313
  model = 'claude-3-5-sonnet-v2@20241022'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: langfun
3
- Version: 0.1.2.dev202502240805
3
+ Version: 0.1.2.dev202502250804
4
4
  Summary: Langfun: Language as Functions.
5
5
  Home-page: https://github.com/google/langfun
6
6
  Author: Langfun Authors