langfun 0.1.2.dev202503030804__tar.gz → 0.1.2.dev202503050804__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 (162) hide show
  1. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/PKG-INFO +1 -1
  2. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/concurrent_test.py +1 -1
  3. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/llms/__init__.py +1 -0
  4. langfun-0.1.2.dev202503050804/langfun/core/llms/azure_openai.py +90 -0
  5. langfun-0.1.2.dev202503050804/langfun/core/llms/azure_openai_test.py +47 -0
  6. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun.egg-info/PKG-INFO +1 -1
  7. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun.egg-info/SOURCES.txt +2 -0
  8. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/LICENSE +0 -0
  9. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/README.md +0 -0
  10. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/__init__.py +0 -0
  11. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/__init__.py +0 -0
  12. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/agentic/__init__.py +0 -0
  13. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/agentic/action.py +0 -0
  14. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/agentic/action_eval.py +0 -0
  15. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/agentic/action_eval_test.py +0 -0
  16. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/agentic/action_test.py +0 -0
  17. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/coding/__init__.py +0 -0
  18. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/coding/python/__init__.py +0 -0
  19. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/coding/python/correction.py +0 -0
  20. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/coding/python/correction_test.py +0 -0
  21. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/coding/python/execution.py +0 -0
  22. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/coding/python/execution_test.py +0 -0
  23. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/coding/python/generation.py +0 -0
  24. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/coding/python/generation_test.py +0 -0
  25. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/coding/python/parsing.py +0 -0
  26. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/coding/python/parsing_test.py +0 -0
  27. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/coding/python/sandboxing.py +0 -0
  28. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/coding/python/sandboxing_test.py +0 -0
  29. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/component.py +0 -0
  30. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/component_test.py +0 -0
  31. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/concurrent.py +0 -0
  32. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/console.py +0 -0
  33. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/console_test.py +0 -0
  34. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/eval/__init__.py +0 -0
  35. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/eval/base.py +0 -0
  36. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/eval/base_test.py +0 -0
  37. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/eval/matching.py +0 -0
  38. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/eval/matching_test.py +0 -0
  39. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/eval/patching.py +0 -0
  40. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/eval/patching_test.py +0 -0
  41. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/eval/scoring.py +0 -0
  42. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/eval/scoring_test.py +0 -0
  43. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/eval/v2/__init__.py +0 -0
  44. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/eval/v2/checkpointing.py +0 -0
  45. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/eval/v2/checkpointing_test.py +0 -0
  46. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/eval/v2/eval_test_helper.py +0 -0
  47. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/eval/v2/evaluation.py +0 -0
  48. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/eval/v2/evaluation_test.py +0 -0
  49. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/eval/v2/example.py +0 -0
  50. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/eval/v2/example_test.py +0 -0
  51. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/eval/v2/experiment.py +0 -0
  52. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/eval/v2/experiment_test.py +0 -0
  53. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/eval/v2/metric_values.py +0 -0
  54. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/eval/v2/metric_values_test.py +0 -0
  55. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/eval/v2/metrics.py +0 -0
  56. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/eval/v2/metrics_test.py +0 -0
  57. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/eval/v2/progress.py +0 -0
  58. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/eval/v2/progress_test.py +0 -0
  59. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/eval/v2/progress_tracking.py +0 -0
  60. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/eval/v2/progress_tracking_test.py +0 -0
  61. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/eval/v2/reporting.py +0 -0
  62. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/eval/v2/reporting_test.py +0 -0
  63. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/eval/v2/runners.py +0 -0
  64. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/eval/v2/runners_test.py +0 -0
  65. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/langfunc.py +0 -0
  66. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/langfunc_test.py +0 -0
  67. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/language_model.py +0 -0
  68. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/language_model_test.py +0 -0
  69. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/llms/anthropic.py +0 -0
  70. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/llms/anthropic_test.py +0 -0
  71. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/llms/cache/__init__.py +0 -0
  72. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/llms/cache/base.py +0 -0
  73. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/llms/cache/in_memory.py +0 -0
  74. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/llms/cache/in_memory_test.py +0 -0
  75. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/llms/compositional.py +0 -0
  76. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/llms/compositional_test.py +0 -0
  77. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/llms/deepseek.py +0 -0
  78. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/llms/deepseek_test.py +0 -0
  79. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/llms/fake.py +0 -0
  80. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/llms/fake_test.py +0 -0
  81. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/llms/gemini.py +0 -0
  82. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/llms/gemini_test.py +0 -0
  83. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/llms/google_genai.py +0 -0
  84. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/llms/google_genai_test.py +0 -0
  85. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/llms/groq.py +0 -0
  86. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/llms/groq_test.py +0 -0
  87. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/llms/llama_cpp.py +0 -0
  88. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/llms/llama_cpp_test.py +0 -0
  89. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/llms/openai.py +0 -0
  90. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/llms/openai_compatible.py +0 -0
  91. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/llms/openai_compatible_test.py +0 -0
  92. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/llms/openai_test.py +0 -0
  93. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/llms/rest.py +0 -0
  94. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/llms/rest_test.py +0 -0
  95. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/llms/vertexai.py +0 -0
  96. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/llms/vertexai_test.py +0 -0
  97. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/logging.py +0 -0
  98. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/logging_test.py +0 -0
  99. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/memories/__init__.py +0 -0
  100. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/memories/conversation_history.py +0 -0
  101. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/memories/conversation_history_test.py +0 -0
  102. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/memory.py +0 -0
  103. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/message.py +0 -0
  104. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/message_test.py +0 -0
  105. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/modalities/__init__.py +0 -0
  106. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/modalities/audio.py +0 -0
  107. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/modalities/audio_test.py +0 -0
  108. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/modalities/image.py +0 -0
  109. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/modalities/image_test.py +0 -0
  110. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/modalities/mime.py +0 -0
  111. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/modalities/mime_test.py +0 -0
  112. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/modalities/ms_office.py +0 -0
  113. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/modalities/ms_office_test.py +0 -0
  114. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/modalities/pdf.py +0 -0
  115. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/modalities/pdf_test.py +0 -0
  116. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/modalities/video.py +0 -0
  117. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/modalities/video_test.py +0 -0
  118. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/modality.py +0 -0
  119. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/modality_test.py +0 -0
  120. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/natural_language.py +0 -0
  121. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/natural_language_test.py +0 -0
  122. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/sampling.py +0 -0
  123. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/sampling_test.py +0 -0
  124. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/structured/__init__.py +0 -0
  125. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/structured/completion.py +0 -0
  126. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/structured/completion_test.py +0 -0
  127. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/structured/description.py +0 -0
  128. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/structured/description_test.py +0 -0
  129. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/structured/function_generation.py +0 -0
  130. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/structured/function_generation_test.py +0 -0
  131. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/structured/mapping.py +0 -0
  132. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/structured/mapping_test.py +0 -0
  133. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/structured/parsing.py +0 -0
  134. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/structured/parsing_test.py +0 -0
  135. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/structured/querying.py +0 -0
  136. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/structured/querying_test.py +0 -0
  137. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/structured/schema.py +0 -0
  138. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/structured/schema_generation.py +0 -0
  139. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/structured/schema_generation_test.py +0 -0
  140. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/structured/schema_test.py +0 -0
  141. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/structured/scoring.py +0 -0
  142. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/structured/scoring_test.py +0 -0
  143. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/structured/tokenization.py +0 -0
  144. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/structured/tokenization_test.py +0 -0
  145. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/subscription.py +0 -0
  146. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/subscription_test.py +0 -0
  147. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/template.py +0 -0
  148. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/template_test.py +0 -0
  149. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/templates/__init__.py +0 -0
  150. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/templates/completion.py +0 -0
  151. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/templates/completion_test.py +0 -0
  152. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/templates/conversation.py +0 -0
  153. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/templates/conversation_test.py +0 -0
  154. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/templates/demonstration.py +0 -0
  155. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/templates/demonstration_test.py +0 -0
  156. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/templates/selfplay.py +0 -0
  157. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun/core/templates/selfplay_test.py +0 -0
  158. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun.egg-info/dependency_links.txt +0 -0
  159. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun.egg-info/requires.txt +0 -0
  160. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/langfun.egg-info/top_level.txt +0 -0
  161. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/setup.cfg +0 -0
  162. {langfun-0.1.2.dev202503030804 → langfun-0.1.2.dev202503050804}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: langfun
3
- Version: 0.1.2.dev202503030804
3
+ Version: 0.1.2.dev202503050804
4
4
  Summary: Langfun: Language as Functions.
5
5
  Home-page: https://github.com/google/langfun
6
6
  Author: Langfun Authors
@@ -560,6 +560,7 @@ class ConcurrentMapTest(unittest.TestCase):
560
560
  fun, [1, 2, 3], timeout=1.5, max_workers=1, show_progress=True
561
561
  )
562
562
  ], key=lambda x: x[0])
563
+ string_io.flush()
563
564
  self.assertEqual( # pylint: disable=g-generic-assert
564
565
  output,
565
566
  [
@@ -570,7 +571,6 @@ class ConcurrentMapTest(unittest.TestCase):
570
571
  )
571
572
  output = string_io.getvalue()
572
573
  self.assertIn('100%', output)
573
- self.assertIn('TimeIt=foo (', output)
574
574
 
575
575
  def test_concurrent_map_with_showing_progress_and_status_fn(self):
576
576
  def fun(x):
@@ -36,6 +36,7 @@ from langfun.core.llms.anthropic import Anthropic
36
36
  # Base models by serving platforms.
37
37
  from langfun.core.llms.vertexai import VertexAI
38
38
  from langfun.core.llms.groq import Groq
39
+ from langfun.core.llms.azure_openai import AzureOpenAI
39
40
 
40
41
  # Gemini models.
41
42
  from langfun.core.llms.google_genai import GenAI
@@ -0,0 +1,90 @@
1
+ # Copyright 2025 The Langfun Authors
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ """OpenAI models hosted on Azure."""
15
+ import os
16
+ from typing import Annotated, Any
17
+
18
+ import langfun.core as lf
19
+ from langfun.core.llms import openai
20
+ import pyglove as pg
21
+
22
+
23
+ @lf.use_init_args(['model', 'deployment_name'])
24
+ @pg.members([('api_endpoint', pg.typing.Str().freeze(''))])
25
+ class AzureOpenAI(openai.OpenAI):
26
+ """Azure OpenAI model service.
27
+
28
+ This service interacts with the Azure OpenAI API to generate chat completions.
29
+ It uses the deployment_name and API version to construct the endpoint, and
30
+ authenticates using an API key provided via parameter or the
31
+ AZURE_OPENAI_API_KEY environment variable.
32
+
33
+ Example:
34
+ lm = AzureOpenAI(
35
+ model='gpt-4o',
36
+ deployment_name='gpt-4o',
37
+ api_version='2024-08-01-preview',
38
+ azure_endpoint='https://trackname.openai.azure.com/',
39
+ api_key='token'
40
+ )
41
+ response = lf.query(prompt="what the capital of France", lm=lm)
42
+ print(response)
43
+ """
44
+
45
+ deployment_name: Annotated[
46
+ str,
47
+ 'The name of the Azure OpenAI deployment.'
48
+ ] = 'gpt-4'
49
+
50
+ api_version: Annotated[
51
+ str,
52
+ 'The API version for Azure OpenAI.'
53
+ ] = '2023-05-15'
54
+
55
+ azure_endpoint: Annotated[
56
+ str,
57
+ (
58
+ 'The base URL for Azure OpenAI '
59
+ '(e.g. "https://<your-resource>.openai.azure.com/")'
60
+ )
61
+ ] = 'https://api.openai.azure.com/'
62
+
63
+ def _initialize(self):
64
+ # Authentication
65
+ self._api_key = self.api_key or os.environ.get('AZURE_OPENAI_API_KEY')
66
+ if not self._api_key:
67
+ raise ValueError(
68
+ 'Azure OpenAI requires an API key. Please provide '
69
+ 'via `api_key` argument or AZURE_OPENAI_API_KEY '
70
+ 'environment variable.'
71
+ )
72
+
73
+ # Endpoint construction
74
+ self._api_endpoint = (
75
+ f"{self.azure_endpoint.rstrip('/')}/openai/deployments/"
76
+ f"{self.deployment_name}/chat/completions"
77
+ f"?api-version={self.api_version}"
78
+ )
79
+
80
+ @property
81
+ def api_endpoint(self) -> str:
82
+ return self._api_endpoint
83
+
84
+ @property
85
+ def headers(self) -> dict[str, Any]:
86
+ headers = super().headers
87
+ headers.update({
88
+ 'api-key': self._api_key,
89
+ })
90
+ return headers
@@ -0,0 +1,47 @@
1
+ # Copyright 2025 The Langfun Authors
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ import os
15
+ import unittest
16
+ from langfun.core.llms import azure_openai
17
+
18
+
19
+ class AzureOpenAITest(unittest.TestCase):
20
+ def test_api_key_missing(self):
21
+ # Ensure that ValueError is raised when API key is not provided
22
+ os.environ.pop('AZURE_OPENAI_API_KEY', None)
23
+ with self.assertRaisesRegex(ValueError, 'Azure OpenAI requires an API key'):
24
+ azure = azure_openai.AzureOpenAI(model='gpt-4')
25
+ azure._initialize()
26
+
27
+ def test_api_endpoint(self):
28
+ # Test that api_endpoint is properly constructed
29
+ azure = azure_openai.AzureOpenAI(model='gpt-4', api_key='test_key')
30
+ azure._initialize()
31
+ expected = (
32
+ 'https://api.openai.azure.com/openai/deployments/gpt-4/chat/'
33
+ 'completions?api-version=2023-05-15'
34
+ )
35
+ self.assertEqual(azure.api_endpoint, expected)
36
+
37
+ def test_headers(self):
38
+ # Test that headers contain the api-key with correct value
39
+ azure = azure_openai.AzureOpenAI(model='gpt-4', api_key='test_key')
40
+ azure._initialize()
41
+ headers = azure.headers
42
+ self.assertIn('api-key', headers)
43
+ self.assertEqual(headers.get('api-key'), 'test_key')
44
+
45
+
46
+ if __name__ == '__main__':
47
+ unittest.main()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: langfun
3
- Version: 0.1.2.dev202503030804
3
+ Version: 0.1.2.dev202503050804
4
4
  Summary: Langfun: Language as Functions.
5
5
  Home-page: https://github.com/google/langfun
6
6
  Author: Langfun Authors
@@ -84,6 +84,8 @@ langfun/core/eval/v2/runners_test.py
84
84
  langfun/core/llms/__init__.py
85
85
  langfun/core/llms/anthropic.py
86
86
  langfun/core/llms/anthropic_test.py
87
+ langfun/core/llms/azure_openai.py
88
+ langfun/core/llms/azure_openai_test.py
87
89
  langfun/core/llms/compositional.py
88
90
  langfun/core/llms/compositional_test.py
89
91
  langfun/core/llms/deepseek.py