langfun 0.1.1.dev20240729__tar.gz → 0.1.1.dev20240731__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.dev20240729 → langfun-0.1.1.dev20240731}/PKG-INFO +1 -1
  2. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/eval/base.py +55 -24
  3. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/eval/matching.py +16 -20
  4. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/eval/scoring.py +8 -10
  5. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun.egg-info/PKG-INFO +1 -1
  6. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/LICENSE +0 -0
  7. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/README.md +0 -0
  8. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/__init__.py +0 -0
  9. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/__init__.py +0 -0
  10. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/coding/__init__.py +0 -0
  11. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/coding/python/__init__.py +0 -0
  12. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/coding/python/correction.py +0 -0
  13. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/coding/python/correction_test.py +0 -0
  14. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/coding/python/errors.py +0 -0
  15. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/coding/python/errors_test.py +0 -0
  16. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/coding/python/execution.py +0 -0
  17. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/coding/python/execution_test.py +0 -0
  18. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/coding/python/generation.py +0 -0
  19. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/coding/python/generation_test.py +0 -0
  20. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/coding/python/parsing.py +0 -0
  21. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/coding/python/parsing_test.py +0 -0
  22. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/coding/python/permissions.py +0 -0
  23. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/coding/python/permissions_test.py +0 -0
  24. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/component.py +0 -0
  25. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/component_test.py +0 -0
  26. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/concurrent.py +0 -0
  27. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/concurrent_test.py +0 -0
  28. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/console.py +0 -0
  29. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/console_test.py +0 -0
  30. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/eval/__init__.py +0 -0
  31. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/eval/base_test.py +0 -0
  32. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/eval/matching_test.py +0 -0
  33. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/eval/patching.py +0 -0
  34. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/eval/patching_test.py +0 -0
  35. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/eval/scoring_test.py +0 -0
  36. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/langfunc.py +0 -0
  37. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/langfunc_test.py +0 -0
  38. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/language_model.py +0 -0
  39. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/language_model_test.py +0 -0
  40. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/llms/__init__.py +0 -0
  41. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/llms/anthropic.py +0 -0
  42. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/llms/anthropic_test.py +0 -0
  43. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/llms/cache/__init__.py +0 -0
  44. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/llms/cache/base.py +0 -0
  45. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/llms/cache/in_memory.py +0 -0
  46. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/llms/cache/in_memory_test.py +0 -0
  47. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/llms/fake.py +0 -0
  48. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/llms/fake_test.py +0 -0
  49. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/llms/google_genai.py +0 -0
  50. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/llms/google_genai_test.py +0 -0
  51. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/llms/groq.py +0 -0
  52. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/llms/groq_test.py +0 -0
  53. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/llms/llama_cpp.py +0 -0
  54. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/llms/llama_cpp_test.py +0 -0
  55. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/llms/openai.py +0 -0
  56. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/llms/openai_test.py +0 -0
  57. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/llms/rest.py +0 -0
  58. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/llms/rest_test.py +0 -0
  59. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/llms/vertexai.py +0 -0
  60. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/llms/vertexai_test.py +0 -0
  61. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/logging.py +0 -0
  62. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/logging_test.py +0 -0
  63. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/memories/__init__.py +0 -0
  64. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/memories/conversation_history.py +0 -0
  65. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/memories/conversation_history_test.py +0 -0
  66. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/memory.py +0 -0
  67. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/message.py +0 -0
  68. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/message_test.py +0 -0
  69. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/modalities/__init__.py +0 -0
  70. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/modalities/audio.py +0 -0
  71. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/modalities/audio_test.py +0 -0
  72. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/modalities/image.py +0 -0
  73. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/modalities/image_test.py +0 -0
  74. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/modalities/mime.py +0 -0
  75. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/modalities/mime_test.py +0 -0
  76. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/modalities/ms_office.py +0 -0
  77. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/modalities/ms_office_test.py +0 -0
  78. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/modalities/pdf.py +0 -0
  79. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/modalities/pdf_test.py +0 -0
  80. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/modalities/video.py +0 -0
  81. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/modalities/video_test.py +0 -0
  82. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/modality.py +0 -0
  83. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/modality_test.py +0 -0
  84. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/natural_language.py +0 -0
  85. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/natural_language_test.py +0 -0
  86. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/repr_utils.py +0 -0
  87. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/repr_utils_test.py +0 -0
  88. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/sampling.py +0 -0
  89. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/sampling_test.py +0 -0
  90. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/structured/__init__.py +0 -0
  91. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/structured/completion.py +0 -0
  92. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/structured/completion_test.py +0 -0
  93. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/structured/description.py +0 -0
  94. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/structured/description_test.py +0 -0
  95. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/structured/function_generation.py +0 -0
  96. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/structured/function_generation_test.py +0 -0
  97. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/structured/mapping.py +0 -0
  98. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/structured/mapping_test.py +0 -0
  99. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/structured/parsing.py +0 -0
  100. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/structured/parsing_test.py +0 -0
  101. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/structured/prompting.py +0 -0
  102. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/structured/prompting_test.py +0 -0
  103. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/structured/schema.py +0 -0
  104. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/structured/schema_generation.py +0 -0
  105. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/structured/schema_generation_test.py +0 -0
  106. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/structured/schema_test.py +0 -0
  107. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/structured/scoring.py +0 -0
  108. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/structured/scoring_test.py +0 -0
  109. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/subscription.py +0 -0
  110. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/subscription_test.py +0 -0
  111. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/template.py +0 -0
  112. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/template_test.py +0 -0
  113. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/templates/__init__.py +0 -0
  114. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/templates/completion.py +0 -0
  115. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/templates/completion_test.py +0 -0
  116. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/templates/conversation.py +0 -0
  117. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/templates/conversation_test.py +0 -0
  118. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/templates/demonstration.py +0 -0
  119. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/templates/demonstration_test.py +0 -0
  120. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/templates/selfplay.py +0 -0
  121. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/templates/selfplay_test.py +0 -0
  122. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/text_formatting.py +0 -0
  123. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun/core/text_formatting_test.py +0 -0
  124. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun.egg-info/SOURCES.txt +0 -0
  125. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun.egg-info/dependency_links.txt +0 -0
  126. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun.egg-info/requires.txt +0 -0
  127. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/langfun.egg-info/top_level.txt +0 -0
  128. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/setup.cfg +0 -0
  129. {langfun-0.1.1.dev20240729 → langfun-0.1.1.dev20240731}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: langfun
3
- Version: 0.1.1.dev20240729
3
+ Version: 0.1.1.dev20240731
4
4
  Summary: Langfun: Language as Functions.
5
5
  Home-page: https://github.com/google/langfun
6
6
  Author: Langfun Authors
@@ -542,6 +542,8 @@ class Evaluable(lf.Component):
542
542
  'padding: 10px; border: 1px solid; margin-top: 10px">'
543
543
  )
544
544
  s.write(html.escape(m.get('formatted_text', m.text)))
545
+
546
+ # Write output.
545
547
  if m.result is not None:
546
548
  s.write(
547
549
  '<div style="color: magenta; white-space: pre-wrap;'
@@ -549,6 +551,23 @@ class Evaluable(lf.Component):
549
551
  )
550
552
  s.write(html.escape(pg.format(m.result)))
551
553
  s.write('</div>')
554
+
555
+ # Write modality information.
556
+ if 'lm-input' in m.tags or 'lm-response' in m.tags:
557
+ modalities = m.referred_modalities()
558
+ if modalities:
559
+ s.write(f'<div style="color: {text_color}; white-space: pre-wrap;'
560
+ 'padding: 10px; border: 1px solid; margin-top: 10px"><table>')
561
+ for name, modality in modalities.items():
562
+ s.write(f'<tr><td>{name}</td><td>')
563
+ if hasattr(modality, '_repr_html_'):
564
+ s.write(modality._repr_html_()) # pylint: disable=protected-access
565
+ else:
566
+ s.write(html.escape(pg.format(modality, max_bytes_len=32)))
567
+ s.write('</td></tr>')
568
+ s.write('</table></div>')
569
+
570
+ # Write usage information.
552
571
  if m.metadata.get('usage', None):
553
572
  s.write(
554
573
  '<div style="background-color: #EEEEEE; color: black; '
@@ -1304,20 +1323,22 @@ class Evaluation(Evaluable):
1304
1323
  s = io.StringIO()
1305
1324
  definition = _html_repr(self, compact=False, escape=True)
1306
1325
  s.write('<div><table><tr><td>')
1326
+ self._render_link(
1327
+ s,
1328
+ definition,
1329
+ self.hash,
1330
+ '',
1331
+ lambda: self.link(self.dir),
1332
+ )
1307
1333
  if self.result is None:
1308
1334
  s.write(
1309
- f'<a target="_blank" title="{definition}" '
1310
- f'href="{self.link(self.dir)}">{self.hash}</a>'
1311
1335
  '</td></tr><tr><td>'
1312
1336
  '<span style="color: gray">(IN-PROGRESS...)</span>'
1313
1337
  )
1314
1338
  else:
1315
- s.write(
1316
- f'<a target="_blank" title="{definition}" '
1317
- f'href="{self.index_link}">{self.hash}</a>'
1318
- f' &nbsp;[<a href="{self.link(self.dir)}">dir</a>]'
1319
- '</td></tr><tr><td>'
1320
- )
1339
+ if self.dir:
1340
+ s.write(f' &nbsp;[<a href="{self.link(self.dir)}">dir</a>]')
1341
+ s.write('</td></tr><tr><td>')
1321
1342
  self._render_summary_metrics(s)
1322
1343
 
1323
1344
  # Summarize average usage.
@@ -1341,6 +1362,20 @@ class Evaluation(Evaluable):
1341
1362
  f'" style="color:gray">({total} tokens)</a>'
1342
1363
  )
1343
1364
 
1365
+ def _render_link(self,
1366
+ s: io.StringIO,
1367
+ title: str,
1368
+ text: str,
1369
+ style: str,
1370
+ url_fn: Callable[[], str]) -> None:
1371
+ """Renders a link in HTML."""
1372
+ s.write(
1373
+ f'<a target="_blank" title="{title}" style="{style}"'
1374
+ )
1375
+ if self.dir:
1376
+ s.write(f' href="{url_fn()}"')
1377
+ s.write(f'>{text}</a>')
1378
+
1344
1379
  def _render_summary_metrics(self, s: io.StringIO) -> None:
1345
1380
  """Renders metrics in HTML."""
1346
1381
  assert self.result is not None
@@ -1362,14 +1397,12 @@ class Evaluation(Evaluable):
1362
1397
  extra_style = ''
1363
1398
  if m.oop_failure_rate > 0.1 and m.oop_failures > 3:
1364
1399
  extra_style = ';font-weight:bold'
1365
- s.write(
1366
- '<a title="%s" href="%s" style="color:magenta%s">%s</a>'
1367
- % (
1368
- oop_failure_title,
1369
- self.oop_failures_link,
1370
- extra_style,
1371
- self._format_rate(m.oop_failure_rate),
1372
- )
1400
+ self._render_link(
1401
+ s,
1402
+ oop_failure_title,
1403
+ self._format_rate(m.oop_failure_rate),
1404
+ f'color:magenta{extra_style}',
1405
+ lambda: self.oop_failures_link,
1373
1406
  )
1374
1407
  s.write(' | ')
1375
1408
 
@@ -1387,14 +1420,12 @@ class Evaluation(Evaluable):
1387
1420
  )
1388
1421
 
1389
1422
  extra_style = ';font-weight:bold' if m.non_oop_failures > 0 else ''
1390
- s.write(
1391
- '<a title="%s" href="%s" style="color:red%s">%s</a>'
1392
- % (
1393
- non_oop_failure_title,
1394
- self.non_oop_failures_link,
1395
- extra_style,
1396
- self._format_rate(m.non_oop_failure_rate),
1397
- )
1423
+ self._render_link(
1424
+ s,
1425
+ non_oop_failure_title,
1426
+ self._format_rate(m.non_oop_failure_rate),
1427
+ f'color:red{extra_style}',
1428
+ lambda: self.non_oop_failures_link,
1398
1429
  )
1399
1430
 
1400
1431
  def _format_rate(self, rate: float) -> str:
@@ -239,24 +239,20 @@ class Matching(base.Evaluation):
239
239
  """Renders metrics in HTML."""
240
240
  assert self.result is not None
241
241
  m = self.result.metrics
242
- s.write(
243
- '<a title="Matches (%d/%d)" href="%s" style="color:green">%s</a>'
244
- % (
245
- m.num_matches,
246
- m.total,
247
- self.matches_link,
248
- self._format_rate(m.match_rate),
249
- )
242
+ self._render_link(
243
+ s,
244
+ 'Matches (%d/%d)' % (m.num_matches, m.total),
245
+ self._format_rate(m.match_rate),
246
+ 'color:green',
247
+ lambda: self.matches_link,
250
248
  )
251
249
  s.write(' | ')
252
- s.write(
253
- '<a title="Mismatches (%d/%d)" href="%s" style="color:orange">%s</a>'
254
- % (
255
- m.num_mismatches,
256
- m.total,
257
- self.mismatches_link,
258
- self._format_rate(m.mismatch_rate),
259
- )
250
+ self._render_link(
251
+ s,
252
+ 'Mismatches (%d/%d)' % (m.num_mismatches, m.total),
253
+ self._format_rate(m.mismatch_rate),
254
+ 'color:orange',
255
+ lambda: self.mismatches_link,
260
256
  )
261
257
  s.write(' | ')
262
258
  super()._render_summary_metrics(s)
@@ -275,9 +271,9 @@ class Matching(base.Evaluation):
275
271
  for i, (example, output, message) in enumerate(self.matches):
276
272
  bgcolor = 'white' if i % 2 == 0 else '#DDDDDD'
277
273
  s.write(f'<tr style="background-color: {bgcolor}"><td>{i + 1}</td>')
278
- input_str = pg.format(example, verbose=False)
274
+ input_str = pg.format(example, verbose=False, max_bytes_len=32)
279
275
  s.write(f'<td style="color:green;white-space:pre-wrap">{input_str}</td>')
280
- output_str = pg.format(output, verbose=False)
276
+ output_str = pg.format(output, verbose=False, max_bytes_len=32)
281
277
  s.write(f'<td style="color:blue;white-space:pre-wrap">{output_str}</td>')
282
278
  s.write('<td>')
283
279
  self._render_message(message, s)
@@ -300,9 +296,9 @@ class Matching(base.Evaluation):
300
296
  for i, (example, output, message) in enumerate(self.mismatches):
301
297
  bgcolor = 'white' if i % 2 == 0 else '#DDDDDD'
302
298
  s.write(f'<tr style="background-color: {bgcolor}"><td>{i + 1}</td>')
303
- input_str = pg.format(example, verbose=False)
299
+ input_str = pg.format(example, verbose=False, max_bytes_len=32)
304
300
  s.write(f'<td style="color:green;white-space:pre-wrap">{input_str}</td>')
305
- output_str = pg.format(output, verbose=False)
301
+ output_str = pg.format(output, verbose=False, max_bytes_len=32)
306
302
  s.write(
307
303
  f'<td style="color:magenta;white-space:pre-wrap">{output_str}</td>'
308
304
  )
@@ -172,14 +172,12 @@ class Scoring(base.Evaluation):
172
172
  """Renders metrics in HTML."""
173
173
  assert self.result is not None
174
174
  m = self.result.metrics
175
- s.write(
176
- '<a title="Average score (%d/%d)" href="%s" style="color:green">%s</a>'
177
- % (
178
- m.num_scored,
179
- m.total,
180
- self.scored_link,
181
- '%.2f%%' % (m.score_rate * 100),
182
- )
175
+ self._render_link(
176
+ s,
177
+ 'Average score (%d/%d)' % (m.num_scored, m.total),
178
+ '%.2f (%.2f%%)' % (m.avg_score, m.score_rate * 100),
179
+ 'color:green',
180
+ lambda: self.scored_link,
183
181
  )
184
182
  s.write(' | ')
185
183
  super()._render_summary_metrics(s)
@@ -198,9 +196,9 @@ class Scoring(base.Evaluation):
198
196
  for i, (example, output, score, message) in enumerate(self.scored):
199
197
  bgcolor = 'white' if i % 2 == 0 else '#DDDDDD'
200
198
  s.write(f'<tr style="background-color: {bgcolor}"><td>{i + 1}</td>')
201
- input_str = pg.format(example, verbose=False)
199
+ input_str = pg.format(example, verbose=False, max_bytes_len=32)
202
200
  s.write(f'<td style="color:green;white-space:pre-wrap">{input_str}</td>')
203
- output_str = pg.format(output, verbose=False)
201
+ output_str = pg.format(output, verbose=False, max_bytes_len=32)
204
202
  s.write(f'<td style="color:blue;white-space:pre-wrap">{output_str}</td>')
205
203
  s.write(f'<td style="color:magenta;white-space:pre-wrap">{score}</td>')
206
204
  s.write('<td>')
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: langfun
3
- Version: 0.1.1.dev20240729
3
+ Version: 0.1.1.dev20240731
4
4
  Summary: Langfun: Language as Functions.
5
5
  Home-page: https://github.com/google/langfun
6
6
  Author: Langfun Authors