langfun 0.1.0__tar.gz → 0.1.1.dev20240720__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.0 → langfun-0.1.1.dev20240720}/PKG-INFO +2 -3
  2. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/README.md +1 -2
  3. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/__init__.py +1 -1
  4. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/coding/python/parsing.py +2 -1
  5. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/concurrent_test.py +6 -6
  6. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/message.py +7 -5
  7. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/message_test.py +3 -6
  8. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun.egg-info/PKG-INFO +2 -3
  9. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/LICENSE +0 -0
  10. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/__init__.py +0 -0
  11. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/coding/__init__.py +0 -0
  12. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/coding/python/__init__.py +0 -0
  13. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/coding/python/correction.py +0 -0
  14. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/coding/python/correction_test.py +0 -0
  15. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/coding/python/errors.py +0 -0
  16. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/coding/python/errors_test.py +0 -0
  17. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/coding/python/execution.py +0 -0
  18. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/coding/python/execution_test.py +0 -0
  19. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/coding/python/generation.py +0 -0
  20. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/coding/python/generation_test.py +0 -0
  21. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/coding/python/parsing_test.py +0 -0
  22. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/coding/python/permissions.py +0 -0
  23. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/coding/python/permissions_test.py +0 -0
  24. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/component.py +0 -0
  25. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/component_test.py +0 -0
  26. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/concurrent.py +0 -0
  27. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/console.py +0 -0
  28. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/console_test.py +0 -0
  29. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/eval/__init__.py +0 -0
  30. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/eval/base.py +0 -0
  31. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/eval/base_test.py +0 -0
  32. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/eval/matching.py +0 -0
  33. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/eval/matching_test.py +0 -0
  34. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/eval/patching.py +0 -0
  35. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/eval/patching_test.py +0 -0
  36. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/eval/scoring.py +0 -0
  37. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/eval/scoring_test.py +0 -0
  38. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/langfunc.py +0 -0
  39. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/langfunc_test.py +0 -0
  40. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/language_model.py +0 -0
  41. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/language_model_test.py +0 -0
  42. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/llms/__init__.py +0 -0
  43. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/llms/anthropic.py +0 -0
  44. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/llms/anthropic_test.py +0 -0
  45. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/llms/cache/__init__.py +0 -0
  46. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/llms/cache/base.py +0 -0
  47. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/llms/cache/in_memory.py +0 -0
  48. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/llms/cache/in_memory_test.py +0 -0
  49. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/llms/fake.py +0 -0
  50. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/llms/fake_test.py +0 -0
  51. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/llms/google_genai.py +0 -0
  52. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/llms/google_genai_test.py +0 -0
  53. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/llms/groq.py +0 -0
  54. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/llms/groq_test.py +0 -0
  55. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/llms/llama_cpp.py +0 -0
  56. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/llms/llama_cpp_test.py +0 -0
  57. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/llms/openai.py +0 -0
  58. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/llms/openai_test.py +0 -0
  59. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/llms/rest.py +0 -0
  60. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/llms/rest_test.py +0 -0
  61. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/llms/vertexai.py +0 -0
  62. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/llms/vertexai_test.py +0 -0
  63. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/logging.py +0 -0
  64. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/logging_test.py +0 -0
  65. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/memories/__init__.py +0 -0
  66. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/memories/conversation_history.py +0 -0
  67. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/memories/conversation_history_test.py +0 -0
  68. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/memory.py +0 -0
  69. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/modalities/__init__.py +0 -0
  70. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/modalities/audio.py +0 -0
  71. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/modalities/audio_test.py +0 -0
  72. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/modalities/image.py +0 -0
  73. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/modalities/image_test.py +0 -0
  74. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/modalities/mime.py +0 -0
  75. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/modalities/mime_test.py +0 -0
  76. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/modalities/ms_office.py +0 -0
  77. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/modalities/ms_office_test.py +0 -0
  78. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/modalities/pdf.py +0 -0
  79. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/modalities/pdf_test.py +0 -0
  80. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/modalities/video.py +0 -0
  81. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/modalities/video_test.py +0 -0
  82. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/modality.py +0 -0
  83. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/modality_test.py +0 -0
  84. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/natural_language.py +0 -0
  85. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/natural_language_test.py +0 -0
  86. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/repr_utils.py +0 -0
  87. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/repr_utils_test.py +0 -0
  88. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/sampling.py +0 -0
  89. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/sampling_test.py +0 -0
  90. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/structured/__init__.py +0 -0
  91. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/structured/completion.py +0 -0
  92. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/structured/completion_test.py +0 -0
  93. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/structured/description.py +0 -0
  94. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/structured/description_test.py +0 -0
  95. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/structured/function_generation.py +0 -0
  96. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/structured/function_generation_test.py +0 -0
  97. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/structured/mapping.py +0 -0
  98. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/structured/mapping_test.py +0 -0
  99. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/structured/parsing.py +0 -0
  100. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/structured/parsing_test.py +0 -0
  101. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/structured/prompting.py +0 -0
  102. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/structured/prompting_test.py +0 -0
  103. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/structured/schema.py +0 -0
  104. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/structured/schema_generation.py +0 -0
  105. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/structured/schema_generation_test.py +0 -0
  106. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/structured/schema_test.py +0 -0
  107. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/structured/scoring.py +0 -0
  108. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/structured/scoring_test.py +0 -0
  109. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/subscription.py +0 -0
  110. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/subscription_test.py +0 -0
  111. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/template.py +0 -0
  112. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/template_test.py +0 -0
  113. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/templates/__init__.py +0 -0
  114. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/templates/completion.py +0 -0
  115. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/templates/completion_test.py +0 -0
  116. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/templates/conversation.py +0 -0
  117. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/templates/conversation_test.py +0 -0
  118. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/templates/demonstration.py +0 -0
  119. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/templates/demonstration_test.py +0 -0
  120. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/templates/selfplay.py +0 -0
  121. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/templates/selfplay_test.py +0 -0
  122. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/text_formatting.py +0 -0
  123. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun/core/text_formatting_test.py +0 -0
  124. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun.egg-info/SOURCES.txt +0 -0
  125. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun.egg-info/dependency_links.txt +0 -0
  126. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun.egg-info/requires.txt +0 -0
  127. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/langfun.egg-info/top_level.txt +0 -0
  128. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/setup.cfg +0 -0
  129. {langfun-0.1.0 → langfun-0.1.1.dev20240720}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: langfun
3
- Version: 0.1.0
3
+ Version: 0.1.1.dev20240720
4
4
  Summary: Langfun: Language as Functions.
5
5
  Home-page: https://github.com/google/langfun
6
6
  Author: Langfun Authors
@@ -82,12 +82,11 @@ Langfun is *simple and elegant*:
82
82
  import langfun as lf
83
83
  import pyglove as pg
84
84
 
85
- from typing import Literal
86
85
  from IPython import display
87
86
 
88
87
  class Item(pg.Object):
89
88
  name: str
90
- size: Literal['large', 'medium', 'small']
89
+ color: str
91
90
 
92
91
  class ImageDescription(pg.Object):
93
92
  items: list[Item]
@@ -45,12 +45,11 @@ Langfun is *simple and elegant*:
45
45
  import langfun as lf
46
46
  import pyglove as pg
47
47
 
48
- from typing import Literal
49
48
  from IPython import display
50
49
 
51
50
  class Item(pg.Object):
52
51
  name: str
53
- size: Literal['large', 'medium', 'small']
52
+ color: str
54
53
 
55
54
  class ImageDescription(pg.Object):
56
55
  items: list[Item]
@@ -75,4 +75,4 @@ CodeError = coding.CodeError
75
75
  # pylint: enable=g-import-not-at-top
76
76
  # pylint: enable=g-bad-import-order
77
77
 
78
- __version__ = "0.1.0"
78
+ __version__ = "0.1.1"
@@ -161,7 +161,8 @@ class PythonCodeParser(lf.Component):
161
161
 
162
162
  # Peek forward to see if it could be a valid string.
163
163
  nt, nnt_start = _next_token(code_text, i + 1)
164
- if nt in (',', '[', ']', '}', ')', '+', '*', '%', '\n', ':'):
164
+ if (len(c) == 3
165
+ or nt in (',', '[', ']', '}', ')', '+', '*', '%', '\n', ':')):
165
166
  end_quote = True
166
167
  elif nt == ' ':
167
168
  # Detect if . could be a method invocation.
@@ -256,18 +256,18 @@ class ProgressBarTest(unittest.TestCase):
256
256
  with contextlib.redirect_stderr(string_io):
257
257
  bar_id = concurrent.ProgressBar.install(None, 4)
258
258
  concurrent.ProgressBar.update(bar_id, 1, postfix=None)
259
- self.assertIn('1/4', string_io.getvalue())
260
259
  concurrent.ProgressBar.update(bar_id, 1, postfix='hello')
261
- self.assertIn('2/4', string_io.getvalue())
262
- self.assertIn('hello', string_io.getvalue())
263
260
  concurrent.ProgressBar.update(bar_id, color='lightgreen')
264
- self.assertIn('2/4', string_io.getvalue())
265
261
  concurrent.ProgressBar.update(bar_id, 2, postfix=dict(x=1))
266
- self.assertIn('4/4', string_io.getvalue())
267
- self.assertIn('x=1', string_io.getvalue())
268
262
  with self.assertRaisesRegex(ValueError, 'Unsupported postfix'):
269
263
  concurrent.ProgressBar.update(bar_id, 0, postfix=1)
270
264
  concurrent.ProgressBar.uninstall(bar_id)
265
+ self.assertIn('1/4', string_io.getvalue())
266
+ self.assertIn('2/4', string_io.getvalue())
267
+ self.assertIn('hello', string_io.getvalue())
268
+ self.assertNotIn('3/4', string_io.getvalue())
269
+ self.assertIn('4/4', string_io.getvalue())
270
+ self.assertIn('x=1', string_io.getvalue())
271
271
 
272
272
 
273
273
  class ConcurrentMapTest(unittest.TestCase):
@@ -318,7 +318,7 @@ class Message(natural_language.NaturalLanguageFormattable, pg.Object):
318
318
  while chunk_start < len(text):
319
319
  ref_start = text.find(modality.Modality.REF_START, ref_end)
320
320
  if ref_start == -1:
321
- add_text_chunk(text[chunk_start:].strip())
321
+ add_text_chunk(text[chunk_start:].strip(' '))
322
322
  break
323
323
 
324
324
  var_start = ref_start + len(modality.Modality.REF_START)
@@ -330,29 +330,31 @@ class Message(natural_language.NaturalLanguageFormattable, pg.Object):
330
330
  var_name = text[var_start:ref_end].strip()
331
331
  var_value = self.get_modality(var_name)
332
332
  if var_value is not None:
333
- add_text_chunk(text[chunk_start:ref_start].strip())
333
+ add_text_chunk(text[chunk_start:ref_start].strip(' '))
334
334
  chunks.append(var_value)
335
335
  chunk_start = ref_end + len(modality.Modality.REF_END)
336
336
  return chunks
337
337
 
338
338
  @classmethod
339
339
  def from_chunks(
340
- cls, chunks: list[str | modality.Modality], separator: str = '\n'
340
+ cls, chunks: list[str | modality.Modality], separator: str = ' '
341
341
  ) -> 'Message':
342
342
  """Assembly a message from a list of string or modality objects."""
343
343
  fused_text = io.StringIO()
344
344
  ref_index = 0
345
345
  metadata = dict()
346
-
346
+ last_char = None
347
347
  for i, chunk in enumerate(chunks):
348
- if i > 0:
348
+ if i > 0 and last_char not in ('\t', ' ', '\n'):
349
349
  fused_text.write(separator)
350
350
  if isinstance(chunk, str):
351
351
  fused_text.write(chunk)
352
+ last_char = chunk[-1]
352
353
  else:
353
354
  assert isinstance(chunk, modality.Modality), chunk
354
355
  var_name = f'obj{ref_index}'
355
356
  fused_text.write(modality.Modality.text_marker(var_name))
357
+ last_char = modality.Modality.REF_END[-1]
356
358
  # Make a reference if the chunk is already owned by another object
357
359
  # to avoid copy.
358
360
  metadata[var_name] = pg.maybe_ref(chunk)
@@ -295,7 +295,7 @@ class MessageTest(unittest.TestCase):
295
295
  [
296
296
  'Hi, this is',
297
297
  CustomModality('foo'),
298
- 'and this is {{b}}.',
298
+ 'and this is {{b}}.\n',
299
299
  CustomModality('bar'),
300
300
  '{{something else',
301
301
  ],
@@ -306,11 +306,8 @@ class MessageTest(unittest.TestCase):
306
306
  message.AIMessage.from_chunks(chunks),
307
307
  message.AIMessage(
308
308
  inspect.cleandoc("""
309
- Hi, this is
310
- <<[[obj0]]>>
311
- and this is {{b}}.
312
- <<[[obj1]]>>
313
- {{something else
309
+ Hi, this is <<[[obj0]]>> and this is {{b}}.
310
+ <<[[obj1]]>> {{something else
314
311
  """),
315
312
  obj0=pg.Ref(m.a),
316
313
  obj1=pg.Ref(m.x.c),
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: langfun
3
- Version: 0.1.0
3
+ Version: 0.1.1.dev20240720
4
4
  Summary: Langfun: Language as Functions.
5
5
  Home-page: https://github.com/google/langfun
6
6
  Author: Langfun Authors
@@ -82,12 +82,11 @@ Langfun is *simple and elegant*:
82
82
  import langfun as lf
83
83
  import pyglove as pg
84
84
 
85
- from typing import Literal
86
85
  from IPython import display
87
86
 
88
87
  class Item(pg.Object):
89
88
  name: str
90
- size: Literal['large', 'medium', 'small']
89
+ color: str
91
90
 
92
91
  class ImageDescription(pg.Object):
93
92
  items: list[Item]
File without changes
File without changes
File without changes