langfun 0.1.1.dev20240819__tar.gz → 0.1.1.dev20240820__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 (129) hide show
  1. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/PKG-INFO +1 -1
  2. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/eval/base.py +28 -1
  3. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/structured/mapping.py +16 -2
  4. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/structured/mapping_test.py +27 -0
  5. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun.egg-info/PKG-INFO +1 -1
  6. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/LICENSE +0 -0
  7. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/README.md +0 -0
  8. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/__init__.py +0 -0
  9. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/__init__.py +0 -0
  10. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/coding/__init__.py +0 -0
  11. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/coding/python/__init__.py +0 -0
  12. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/coding/python/correction.py +0 -0
  13. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/coding/python/correction_test.py +0 -0
  14. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/coding/python/errors.py +0 -0
  15. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/coding/python/errors_test.py +0 -0
  16. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/coding/python/execution.py +0 -0
  17. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/coding/python/execution_test.py +0 -0
  18. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/coding/python/generation.py +0 -0
  19. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/coding/python/generation_test.py +0 -0
  20. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/coding/python/parsing.py +0 -0
  21. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/coding/python/parsing_test.py +0 -0
  22. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/coding/python/permissions.py +0 -0
  23. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/coding/python/permissions_test.py +0 -0
  24. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/component.py +0 -0
  25. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/component_test.py +0 -0
  26. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/concurrent.py +0 -0
  27. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/concurrent_test.py +0 -0
  28. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/console.py +0 -0
  29. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/console_test.py +0 -0
  30. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/eval/__init__.py +0 -0
  31. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/eval/base_test.py +0 -0
  32. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/eval/matching.py +0 -0
  33. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/eval/matching_test.py +0 -0
  34. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/eval/patching.py +0 -0
  35. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/eval/patching_test.py +0 -0
  36. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/eval/scoring.py +0 -0
  37. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/eval/scoring_test.py +0 -0
  38. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/langfunc.py +0 -0
  39. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/langfunc_test.py +0 -0
  40. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/language_model.py +0 -0
  41. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/language_model_test.py +0 -0
  42. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/llms/__init__.py +0 -0
  43. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/llms/anthropic.py +0 -0
  44. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/llms/anthropic_test.py +0 -0
  45. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/llms/cache/__init__.py +0 -0
  46. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/llms/cache/base.py +0 -0
  47. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/llms/cache/in_memory.py +0 -0
  48. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/llms/cache/in_memory_test.py +0 -0
  49. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/llms/fake.py +0 -0
  50. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/llms/fake_test.py +0 -0
  51. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/llms/google_genai.py +0 -0
  52. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/llms/google_genai_test.py +0 -0
  53. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/llms/groq.py +0 -0
  54. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/llms/groq_test.py +0 -0
  55. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/llms/llama_cpp.py +0 -0
  56. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/llms/llama_cpp_test.py +0 -0
  57. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/llms/openai.py +0 -0
  58. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/llms/openai_test.py +0 -0
  59. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/llms/rest.py +0 -0
  60. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/llms/rest_test.py +0 -0
  61. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/llms/vertexai.py +0 -0
  62. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/llms/vertexai_test.py +0 -0
  63. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/logging.py +0 -0
  64. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/logging_test.py +0 -0
  65. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/memories/__init__.py +0 -0
  66. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/memories/conversation_history.py +0 -0
  67. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/memories/conversation_history_test.py +0 -0
  68. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/memory.py +0 -0
  69. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/message.py +0 -0
  70. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/message_test.py +0 -0
  71. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/modalities/__init__.py +0 -0
  72. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/modalities/audio.py +0 -0
  73. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/modalities/audio_test.py +0 -0
  74. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/modalities/image.py +0 -0
  75. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/modalities/image_test.py +0 -0
  76. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/modalities/mime.py +0 -0
  77. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/modalities/mime_test.py +0 -0
  78. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/modalities/ms_office.py +0 -0
  79. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/modalities/ms_office_test.py +0 -0
  80. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/modalities/pdf.py +0 -0
  81. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/modalities/pdf_test.py +0 -0
  82. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/modalities/video.py +0 -0
  83. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/modalities/video_test.py +0 -0
  84. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/modality.py +0 -0
  85. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/modality_test.py +0 -0
  86. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/natural_language.py +0 -0
  87. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/natural_language_test.py +0 -0
  88. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/repr_utils.py +0 -0
  89. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/repr_utils_test.py +0 -0
  90. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/sampling.py +0 -0
  91. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/sampling_test.py +0 -0
  92. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/structured/__init__.py +0 -0
  93. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/structured/completion.py +0 -0
  94. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/structured/completion_test.py +0 -0
  95. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/structured/description.py +0 -0
  96. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/structured/description_test.py +0 -0
  97. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/structured/function_generation.py +0 -0
  98. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/structured/function_generation_test.py +0 -0
  99. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/structured/parsing.py +0 -0
  100. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/structured/parsing_test.py +0 -0
  101. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/structured/prompting.py +0 -0
  102. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/structured/prompting_test.py +0 -0
  103. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/structured/schema.py +0 -0
  104. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/structured/schema_generation.py +0 -0
  105. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/structured/schema_generation_test.py +0 -0
  106. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/structured/schema_test.py +0 -0
  107. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/structured/scoring.py +0 -0
  108. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/structured/scoring_test.py +0 -0
  109. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/subscription.py +0 -0
  110. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/subscription_test.py +0 -0
  111. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/template.py +0 -0
  112. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/template_test.py +0 -0
  113. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/templates/__init__.py +0 -0
  114. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/templates/completion.py +0 -0
  115. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/templates/completion_test.py +0 -0
  116. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/templates/conversation.py +0 -0
  117. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/templates/conversation_test.py +0 -0
  118. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/templates/demonstration.py +0 -0
  119. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/templates/demonstration_test.py +0 -0
  120. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/templates/selfplay.py +0 -0
  121. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/templates/selfplay_test.py +0 -0
  122. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/text_formatting.py +0 -0
  123. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun/core/text_formatting_test.py +0 -0
  124. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun.egg-info/SOURCES.txt +0 -0
  125. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun.egg-info/dependency_links.txt +0 -0
  126. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun.egg-info/requires.txt +0 -0
  127. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/langfun.egg-info/top_level.txt +0 -0
  128. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/setup.cfg +0 -0
  129. {langfun-0.1.1.dev20240819 → langfun-0.1.1.dev20240820}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: langfun
3
- Version: 0.1.1.dev20240819
3
+ Version: 0.1.1.dev20240820
4
4
  Summary: Langfun: Language as Functions.
5
5
  Home-page: https://github.com/google/langfun
6
6
  Author: Langfun Authors
@@ -1061,6 +1061,8 @@ class Evaluation(Evaluable):
1061
1061
  try:
1062
1062
  with lf.use_settings(debug=debug):
1063
1063
  output_message = copy.process(example, **(self.additional_args or {}))
1064
+ self.process_output(example, output_message)
1065
+
1064
1066
  if self.schema is None:
1065
1067
  output = output_message.text
1066
1068
  else:
@@ -1123,7 +1125,9 @@ class Evaluation(Evaluable):
1123
1125
  # generated code with calls to `input` will raise an error, thus not
1124
1126
  # blocking the evaluation.
1125
1127
  with lf_coding.context(input=None):
1126
- return self.process(example, **(self.additional_args or {}))
1128
+ output_message = self.process(example, **(self.additional_args or {}))
1129
+ self.process_output(example, output_message)
1130
+ return output_message
1127
1131
 
1128
1132
  try:
1129
1133
  for example, message, error in lf.concurrent_map(
@@ -1201,6 +1205,29 @@ class Evaluation(Evaluable):
1201
1205
  **kwargs,
1202
1206
  )
1203
1207
 
1208
+ def process_output(self, example: Any, output: lf.Message) -> None:
1209
+ """Process the output for an example.
1210
+
1211
+ Subclasses can override this method to generate and attach additional
1212
+ metadata for debugging purpose. For example, draw bounding boxes on the
1213
+ input image based on LLM predicted boxes and attach to output_message's
1214
+ metadata.
1215
+
1216
+ Example:
1217
+
1218
+ class BoundingBoxEval(lf.eval.Matching):
1219
+ ...
1220
+ def process_output(example, output):
1221
+ output.metadata.image_with_bbox = draw_bboxes(
1222
+ example.image, output.result)
1223
+
1224
+ Args:
1225
+ example: User input.
1226
+ output: LLM's output message. Users could attach additional
1227
+ information to the message, which will be shown in debugging
1228
+ """
1229
+ del example, output
1230
+
1204
1231
  def _status(self, progress: lf.concurrent.Progress) -> dict[str, Any]:
1205
1232
  return {
1206
1233
  'Model': self.lm.model_id,
@@ -92,6 +92,15 @@ class MappingExample(lf.NaturalLanguageFormattable, lf.Component):
92
92
  'The natural language context for this mapping. ',
93
93
  ] = None
94
94
 
95
+ metadata: Annotated[
96
+ dict[str, Any],
97
+ (
98
+ 'The metadata associated with the mapping example, '
99
+ 'which chould carry structured data, such as tool function input. '
100
+ 'It is a `pg.Dict` object whose keys can be accessed by attributes.'
101
+ ),
102
+ ] = pg.Dict()
103
+
95
104
  def schema_repr(
96
105
  self, protocol: schema_lib.SchemaProtocol = 'python', **kwargs
97
106
  ) -> str:
@@ -157,16 +166,21 @@ class MappingExample(lf.NaturalLanguageFormattable, lf.Component):
157
166
 
158
167
  result.write(lf.colored('[INPUT]\n', styles=['bold']))
159
168
  result.write(lf.colored(self.input_repr(), color='green'))
160
- result.write('\n\n')
161
169
 
162
170
  if self.schema is not None:
171
+ result.write('\n\n')
163
172
  result.write(lf.colored('[SCHEMA]\n', styles=['bold']))
164
173
  result.write(lf.colored(self.schema_repr(), color='red'))
165
- result.write('\n\n')
166
174
 
167
175
  if schema_lib.MISSING != self.output:
176
+ result.write('\n\n')
168
177
  result.write(lf.colored('[OUTPUT]\n', styles=['bold']))
169
178
  result.write(lf.colored(self.output_repr(), color='blue'))
179
+
180
+ if self.metadata:
181
+ result.write('\n\n')
182
+ result.write(lf.colored('[METADATA]\n', styles=['bold']))
183
+ result.write(lf.colored(str(self.metadata), color='cyan'))
170
184
  return result.getvalue().strip()
171
185
 
172
186
 
@@ -129,6 +129,33 @@ class MappingExampleTest(unittest.TestCase):
129
129
  """),
130
130
  )
131
131
 
132
+ def test_str_with_metadata(self):
133
+ self.assertEqual(
134
+ str(
135
+ mapping.MappingExample(
136
+ '1 + 1 = 2',
137
+ schema=int,
138
+ context='Give the answer.',
139
+ metadata={'foo': 'bar'},
140
+ )
141
+ ),
142
+ inspect.cleandoc("""
143
+ \x1b[1m[CONTEXT]
144
+ \x1b[0m\x1b[35mGive the answer.\x1b[0m
145
+
146
+ \x1b[1m[INPUT]
147
+ \x1b[0m\x1b[32m1 + 1 = 2\x1b[0m
148
+
149
+ \x1b[1m[SCHEMA]
150
+ \x1b[0m\x1b[31mint\x1b[0m
151
+
152
+ \x1b[1m[METADATA]
153
+ \x1b[0m\x1b[36m{
154
+ foo = 'bar'
155
+ }\x1b[0m
156
+ """),
157
+ )
158
+
132
159
  def test_serialization(self):
133
160
  example = mapping.MappingExample(
134
161
  'the answer is 2', 2, int, context='compute 1 + 1'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: langfun
3
- Version: 0.1.1.dev20240819
3
+ Version: 0.1.1.dev20240820
4
4
  Summary: Langfun: Language as Functions.
5
5
  Home-page: https://github.com/google/langfun
6
6
  Author: Langfun Authors