langfun 0.1.2.dev202409070803__tar.gz → 0.1.2.dev202409090805__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 (131) hide show
  1. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/PKG-INFO +2 -2
  2. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/README.md +1 -1
  3. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/coding/python/correction.py +28 -12
  4. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/coding/python/correction_test.py +27 -0
  5. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun.egg-info/PKG-INFO +2 -2
  6. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/LICENSE +0 -0
  7. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/__init__.py +0 -0
  8. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/__init__.py +0 -0
  9. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/coding/__init__.py +0 -0
  10. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/coding/python/__init__.py +0 -0
  11. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/coding/python/errors.py +0 -0
  12. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/coding/python/errors_test.py +0 -0
  13. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/coding/python/execution.py +0 -0
  14. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/coding/python/execution_test.py +0 -0
  15. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/coding/python/generation.py +0 -0
  16. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/coding/python/generation_test.py +0 -0
  17. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/coding/python/parsing.py +0 -0
  18. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/coding/python/parsing_test.py +0 -0
  19. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/coding/python/permissions.py +0 -0
  20. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/coding/python/permissions_test.py +0 -0
  21. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/component.py +0 -0
  22. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/component_test.py +0 -0
  23. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/concurrent.py +0 -0
  24. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/concurrent_test.py +0 -0
  25. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/console.py +0 -0
  26. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/console_test.py +0 -0
  27. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/eval/__init__.py +0 -0
  28. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/eval/base.py +0 -0
  29. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/eval/base_test.py +0 -0
  30. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/eval/matching.py +0 -0
  31. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/eval/matching_test.py +0 -0
  32. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/eval/patching.py +0 -0
  33. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/eval/patching_test.py +0 -0
  34. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/eval/scoring.py +0 -0
  35. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/eval/scoring_test.py +0 -0
  36. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/langfunc.py +0 -0
  37. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/langfunc_test.py +0 -0
  38. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/language_model.py +0 -0
  39. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/language_model_test.py +0 -0
  40. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/llms/__init__.py +0 -0
  41. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/llms/anthropic.py +0 -0
  42. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/llms/anthropic_test.py +0 -0
  43. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/llms/cache/__init__.py +0 -0
  44. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/llms/cache/base.py +0 -0
  45. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/llms/cache/in_memory.py +0 -0
  46. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/llms/cache/in_memory_test.py +0 -0
  47. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/llms/fake.py +0 -0
  48. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/llms/fake_test.py +0 -0
  49. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/llms/google_genai.py +0 -0
  50. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/llms/google_genai_test.py +0 -0
  51. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/llms/groq.py +0 -0
  52. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/llms/groq_test.py +0 -0
  53. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/llms/llama_cpp.py +0 -0
  54. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/llms/llama_cpp_test.py +0 -0
  55. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/llms/openai.py +0 -0
  56. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/llms/openai_test.py +0 -0
  57. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/llms/rest.py +0 -0
  58. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/llms/rest_test.py +0 -0
  59. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/llms/vertexai.py +0 -0
  60. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/llms/vertexai_test.py +0 -0
  61. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/logging.py +0 -0
  62. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/logging_test.py +0 -0
  63. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/memories/__init__.py +0 -0
  64. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/memories/conversation_history.py +0 -0
  65. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/memories/conversation_history_test.py +0 -0
  66. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/memory.py +0 -0
  67. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/message.py +0 -0
  68. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/message_test.py +0 -0
  69. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/modalities/__init__.py +0 -0
  70. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/modalities/audio.py +0 -0
  71. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/modalities/audio_test.py +0 -0
  72. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/modalities/image.py +0 -0
  73. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/modalities/image_test.py +0 -0
  74. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/modalities/mime.py +0 -0
  75. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/modalities/mime_test.py +0 -0
  76. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/modalities/ms_office.py +0 -0
  77. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/modalities/ms_office_test.py +0 -0
  78. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/modalities/pdf.py +0 -0
  79. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/modalities/pdf_test.py +0 -0
  80. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/modalities/video.py +0 -0
  81. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/modalities/video_test.py +0 -0
  82. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/modality.py +0 -0
  83. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/modality_test.py +0 -0
  84. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/natural_language.py +0 -0
  85. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/natural_language_test.py +0 -0
  86. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/repr_utils.py +0 -0
  87. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/repr_utils_test.py +0 -0
  88. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/sampling.py +0 -0
  89. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/sampling_test.py +0 -0
  90. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/structured/__init__.py +0 -0
  91. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/structured/completion.py +0 -0
  92. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/structured/completion_test.py +0 -0
  93. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/structured/description.py +0 -0
  94. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/structured/description_test.py +0 -0
  95. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/structured/function_generation.py +0 -0
  96. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/structured/function_generation_test.py +0 -0
  97. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/structured/mapping.py +0 -0
  98. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/structured/mapping_test.py +0 -0
  99. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/structured/parsing.py +0 -0
  100. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/structured/parsing_test.py +0 -0
  101. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/structured/prompting.py +0 -0
  102. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/structured/prompting_test.py +0 -0
  103. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/structured/schema.py +0 -0
  104. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/structured/schema_generation.py +0 -0
  105. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/structured/schema_generation_test.py +0 -0
  106. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/structured/schema_test.py +0 -0
  107. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/structured/scoring.py +0 -0
  108. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/structured/scoring_test.py +0 -0
  109. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/structured/tokenization.py +0 -0
  110. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/structured/tokenization_test.py +0 -0
  111. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/subscription.py +0 -0
  112. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/subscription_test.py +0 -0
  113. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/template.py +0 -0
  114. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/template_test.py +0 -0
  115. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/templates/__init__.py +0 -0
  116. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/templates/completion.py +0 -0
  117. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/templates/completion_test.py +0 -0
  118. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/templates/conversation.py +0 -0
  119. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/templates/conversation_test.py +0 -0
  120. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/templates/demonstration.py +0 -0
  121. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/templates/demonstration_test.py +0 -0
  122. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/templates/selfplay.py +0 -0
  123. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/templates/selfplay_test.py +0 -0
  124. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/text_formatting.py +0 -0
  125. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun/core/text_formatting_test.py +0 -0
  126. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun.egg-info/SOURCES.txt +0 -0
  127. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun.egg-info/dependency_links.txt +0 -0
  128. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun.egg-info/requires.txt +0 -0
  129. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/langfun.egg-info/top_level.txt +0 -0
  130. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/setup.cfg +0 -0
  131. {langfun-0.1.2.dev202409070803 → langfun-0.1.2.dev202409090805}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: langfun
3
- Version: 0.1.2.dev202409070803
3
+ Version: 0.1.2.dev202409090805
4
4
  Summary: Langfun: Language as Functions.
5
5
  Home-page: https://github.com/google/langfun
6
6
  Author: Langfun Authors
@@ -80,7 +80,7 @@ Requires-Dist: pandas>=2.0.3; extra == "mime-xlsx"
80
80
  [![codecov](https://codecov.io/gh/google/langfun/branch/main/graph/badge.svg)](https://codecov.io/gh/google/langfun)
81
81
  ![pytest](https://github.com/google/langfun/actions/workflows/ci.yaml/badge.svg)
82
82
 
83
- [**Installation**](#install) | [**Getting started**](#hello-langfun) | [**Tutorial**](https://colab.research.google.com/github/google/langfun/blob/main/docs/notebooks/langfun101.ipynb)
83
+ [**Installation**](#install) | [**Getting started**](#hello-langfun) | [**Tutorial**](https://colab.research.google.com/github/google/langfun/blob/main/docs/notebooks/langfun101.ipynb) | [**Discord community**](https://discord.gg/U6wPN9R68k)
84
84
 
85
85
  ## Introduction
86
86
 
@@ -8,7 +8,7 @@
8
8
  [![codecov](https://codecov.io/gh/google/langfun/branch/main/graph/badge.svg)](https://codecov.io/gh/google/langfun)
9
9
  ![pytest](https://github.com/google/langfun/actions/workflows/ci.yaml/badge.svg)
10
10
 
11
- [**Installation**](#install) | [**Getting started**](#hello-langfun) | [**Tutorial**](https://colab.research.google.com/github/google/langfun/blob/main/docs/notebooks/langfun101.ipynb)
11
+ [**Installation**](#install) | [**Getting started**](#hello-langfun) | [**Tutorial**](https://colab.research.google.com/github/google/langfun/blob/main/docs/notebooks/langfun101.ipynb) | [**Discord community**](https://discord.gg/U6wPN9R68k)
12
12
 
13
13
  ## Introduction
14
14
 
@@ -81,23 +81,27 @@ def run_with_correction(
81
81
  # pylint: enable=g-import-not-at-top
82
82
 
83
83
  if max_attempts == 0:
84
- result = execution.run(
85
- code,
86
- global_vars=global_vars,
87
- sandbox=sandbox,
88
- timeout=timeout,
89
- outputs_intermediate=outputs_intermediate,
84
+ result = _maybe_custom_validate(
85
+ execution.run(
86
+ code,
87
+ global_vars=global_vars,
88
+ sandbox=sandbox,
89
+ timeout=timeout,
90
+ outputs_intermediate=outputs_intermediate,
91
+ )
90
92
  )
91
93
  return (result, code) if returns_code else result
92
94
 
93
95
  def result_and_error(code: str) -> tuple[Any, str | None]:
94
96
  try:
95
- result = execution.run(
96
- code,
97
- global_vars=global_vars,
98
- sandbox=sandbox,
99
- timeout=timeout,
100
- outputs_intermediate=outputs_intermediate,
97
+ result = _maybe_custom_validate(
98
+ execution.run(
99
+ code,
100
+ global_vars=global_vars,
101
+ sandbox=sandbox,
102
+ timeout=timeout,
103
+ outputs_intermediate=outputs_intermediate,
104
+ )
101
105
  )
102
106
  return (result, None)
103
107
  except Exception as e: # pylint: disable=broad-exception-caught
@@ -190,3 +194,15 @@ def _error_feedback_str(error: Exception) -> str:
190
194
  )
191
195
  else:
192
196
  return f"Encountered {error.__class__.__name__}: {error}"
197
+
198
+
199
+ def _maybe_custom_validate(result: Any) -> Any:
200
+ """Apply custom validation through __validate_generation__ method."""
201
+ if isinstance(result, dict) and "__result__" in result:
202
+ r = result["__result__"]
203
+ else:
204
+ r = result
205
+
206
+ if hasattr(r, "__validate__"):
207
+ r.__validate__()
208
+ return result
@@ -19,6 +19,7 @@ import unittest
19
19
  from langfun.core.coding.python import correction
20
20
  from langfun.core.coding.python import errors
21
21
  from langfun.core.llms import fake
22
+ import pyglove as pg
22
23
 
23
24
 
24
25
  class RunWithCorrectionTest(unittest.TestCase):
@@ -45,6 +46,32 @@ class RunWithCorrectionTest(unittest.TestCase):
45
46
  )
46
47
  self.assertEqual(result, 4)
47
48
 
49
+ def test_run_with_correction_upon_custom_validation(self):
50
+
51
+ class Foo(pg.Object):
52
+ x: int
53
+
54
+ def __validate__(self):
55
+ if self.x > 1:
56
+ raise ValueError('value should be less or equal than 1.')
57
+ if self.x < 0:
58
+ self.rebind(x=0, skip_notification=True)
59
+
60
+ result = correction.run_with_correction(
61
+ inspect.cleandoc("""
62
+ Foo(x=2)
63
+ """),
64
+ global_vars=dict(Foo=Foo),
65
+ lm=fake.StaticSequence([
66
+ inspect.cleandoc("""
67
+ CorrectedCode(
68
+ corrected_code='Foo(x=-1)',
69
+ )
70
+ """),
71
+ ]),
72
+ )
73
+ self.assertEqual(result, Foo(0))
74
+
48
75
  def test_run_without_correction(self):
49
76
  result = correction.run_with_correction(
50
77
  inspect.cleandoc("""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: langfun
3
- Version: 0.1.2.dev202409070803
3
+ Version: 0.1.2.dev202409090805
4
4
  Summary: Langfun: Language as Functions.
5
5
  Home-page: https://github.com/google/langfun
6
6
  Author: Langfun Authors
@@ -80,7 +80,7 @@ Requires-Dist: pandas>=2.0.3; extra == "mime-xlsx"
80
80
  [![codecov](https://codecov.io/gh/google/langfun/branch/main/graph/badge.svg)](https://codecov.io/gh/google/langfun)
81
81
  ![pytest](https://github.com/google/langfun/actions/workflows/ci.yaml/badge.svg)
82
82
 
83
- [**Installation**](#install) | [**Getting started**](#hello-langfun) | [**Tutorial**](https://colab.research.google.com/github/google/langfun/blob/main/docs/notebooks/langfun101.ipynb)
83
+ [**Installation**](#install) | [**Getting started**](#hello-langfun) | [**Tutorial**](https://colab.research.google.com/github/google/langfun/blob/main/docs/notebooks/langfun101.ipynb) | [**Discord community**](https://discord.gg/U6wPN9R68k)
84
84
 
85
85
  ## Introduction
86
86