hamtaa-texttools 1.1.12__tar.gz → 1.1.13__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 (40) hide show
  1. {hamtaa_texttools-1.1.12/hamtaa_texttools.egg-info → hamtaa_texttools-1.1.13}/PKG-INFO +1 -1
  2. {hamtaa_texttools-1.1.12 → hamtaa_texttools-1.1.13/hamtaa_texttools.egg-info}/PKG-INFO +1 -1
  3. {hamtaa_texttools-1.1.12 → hamtaa_texttools-1.1.13}/hamtaa_texttools.egg-info/SOURCES.txt +1 -0
  4. {hamtaa_texttools-1.1.12 → hamtaa_texttools-1.1.13}/pyproject.toml +1 -1
  5. {hamtaa_texttools-1.1.12 → hamtaa_texttools-1.1.13}/texttools/tools/internals/async_operator.py +4 -0
  6. hamtaa_texttools-1.1.13/texttools/tools/internals/formatters.py +24 -0
  7. {hamtaa_texttools-1.1.12 → hamtaa_texttools-1.1.13}/texttools/tools/internals/sync_operator.py +4 -0
  8. {hamtaa_texttools-1.1.12 → hamtaa_texttools-1.1.13}/LICENSE +0 -0
  9. {hamtaa_texttools-1.1.12 → hamtaa_texttools-1.1.13}/MANIFEST.in +0 -0
  10. {hamtaa_texttools-1.1.12 → hamtaa_texttools-1.1.13}/README.md +0 -0
  11. {hamtaa_texttools-1.1.12 → hamtaa_texttools-1.1.13}/hamtaa_texttools.egg-info/dependency_links.txt +0 -0
  12. {hamtaa_texttools-1.1.12 → hamtaa_texttools-1.1.13}/hamtaa_texttools.egg-info/requires.txt +0 -0
  13. {hamtaa_texttools-1.1.12 → hamtaa_texttools-1.1.13}/hamtaa_texttools.egg-info/top_level.txt +0 -0
  14. {hamtaa_texttools-1.1.12 → hamtaa_texttools-1.1.13}/setup.cfg +0 -0
  15. {hamtaa_texttools-1.1.12 → hamtaa_texttools-1.1.13}/tests/test_all_async_tools.py +0 -0
  16. {hamtaa_texttools-1.1.12 → hamtaa_texttools-1.1.13}/tests/test_all_tools.py +0 -0
  17. {hamtaa_texttools-1.1.12 → hamtaa_texttools-1.1.13}/tests/test_logprobs.py +0 -0
  18. {hamtaa_texttools-1.1.12 → hamtaa_texttools-1.1.13}/tests/test_output_validation.py +0 -0
  19. {hamtaa_texttools-1.1.12 → hamtaa_texttools-1.1.13}/texttools/__init__.py +0 -0
  20. {hamtaa_texttools-1.1.12 → hamtaa_texttools-1.1.13}/texttools/batch/batch_config.py +0 -0
  21. {hamtaa_texttools-1.1.12 → hamtaa_texttools-1.1.13}/texttools/batch/batch_runner.py +0 -0
  22. {hamtaa_texttools-1.1.12 → hamtaa_texttools-1.1.13}/texttools/batch/internals/batch_manager.py +0 -0
  23. {hamtaa_texttools-1.1.12 → hamtaa_texttools-1.1.13}/texttools/batch/internals/utils.py +0 -0
  24. {hamtaa_texttools-1.1.12 → hamtaa_texttools-1.1.13}/texttools/prompts/README.md +0 -0
  25. {hamtaa_texttools-1.1.12 → hamtaa_texttools-1.1.13}/texttools/prompts/categorizer.yaml +0 -0
  26. {hamtaa_texttools-1.1.12 → hamtaa_texttools-1.1.13}/texttools/prompts/extract_entities.yaml +0 -0
  27. {hamtaa_texttools-1.1.12 → hamtaa_texttools-1.1.13}/texttools/prompts/extract_keywords.yaml +0 -0
  28. {hamtaa_texttools-1.1.12 → hamtaa_texttools-1.1.13}/texttools/prompts/is_question.yaml +0 -0
  29. {hamtaa_texttools-1.1.12 → hamtaa_texttools-1.1.13}/texttools/prompts/merge_questions.yaml +0 -0
  30. {hamtaa_texttools-1.1.12 → hamtaa_texttools-1.1.13}/texttools/prompts/rewrite.yaml +0 -0
  31. {hamtaa_texttools-1.1.12 → hamtaa_texttools-1.1.13}/texttools/prompts/run_custom.yaml +0 -0
  32. {hamtaa_texttools-1.1.12 → hamtaa_texttools-1.1.13}/texttools/prompts/subject_to_question.yaml +0 -0
  33. {hamtaa_texttools-1.1.12 → hamtaa_texttools-1.1.13}/texttools/prompts/summarize.yaml +0 -0
  34. {hamtaa_texttools-1.1.12 → hamtaa_texttools-1.1.13}/texttools/prompts/text_to_question.yaml +0 -0
  35. {hamtaa_texttools-1.1.12 → hamtaa_texttools-1.1.13}/texttools/prompts/translate.yaml +0 -0
  36. {hamtaa_texttools-1.1.12 → hamtaa_texttools-1.1.13}/texttools/tools/async_tools.py +0 -0
  37. {hamtaa_texttools-1.1.12 → hamtaa_texttools-1.1.13}/texttools/tools/internals/operator_utils.py +0 -0
  38. {hamtaa_texttools-1.1.12 → hamtaa_texttools-1.1.13}/texttools/tools/internals/output_models.py +0 -0
  39. {hamtaa_texttools-1.1.12 → hamtaa_texttools-1.1.13}/texttools/tools/internals/prompt_loader.py +0 -0
  40. {hamtaa_texttools-1.1.12 → hamtaa_texttools-1.1.13}/texttools/tools/sync_tools.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hamtaa-texttools
3
- Version: 1.1.12
3
+ Version: 1.1.13
4
4
  Summary: A high-level NLP toolkit built on top of modern LLMs.
5
5
  Author-email: Tohidi <the.mohammad.tohidi@gmail.com>, Montazer <montazerh82@gmail.com>, Givechi <mohamad.m.givechi@gmail.com>, MoosaviNejad <erfanmoosavi84@gmail.com>
6
6
  License: MIT License
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hamtaa-texttools
3
- Version: 1.1.12
3
+ Version: 1.1.13
4
4
  Summary: A high-level NLP toolkit built on top of modern LLMs.
5
5
  Author-email: Tohidi <the.mohammad.tohidi@gmail.com>, Montazer <montazerh82@gmail.com>, Givechi <mohamad.m.givechi@gmail.com>, MoosaviNejad <erfanmoosavi84@gmail.com>
6
6
  License: MIT License
@@ -31,6 +31,7 @@ texttools/prompts/translate.yaml
31
31
  texttools/tools/async_tools.py
32
32
  texttools/tools/sync_tools.py
33
33
  texttools/tools/internals/async_operator.py
34
+ texttools/tools/internals/formatters.py
34
35
  texttools/tools/internals/operator_utils.py
35
36
  texttools/tools/internals/output_models.py
36
37
  texttools/tools/internals/prompt_loader.py
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "hamtaa-texttools"
7
- version = "1.1.12"
7
+ version = "1.1.13"
8
8
  authors = [
9
9
  { name = "Tohidi", email = "the.mohammad.tohidi@gmail.com" },
10
10
  { name = "Montazer", email = "montazerh82@gmail.com" },
@@ -6,6 +6,7 @@ from pydantic import BaseModel
6
6
 
7
7
  from texttools.tools.internals.output_models import ToolOutput
8
8
  from texttools.tools.internals.operator_utils import OperatorUtils
9
+ from texttools.tools.internals.formatters import Formatter
9
10
  from texttools.tools.internals.prompt_loader import PromptLoader
10
11
 
11
12
  # Base Model type for output models
@@ -92,6 +93,7 @@ class AsyncOperator:
92
93
  Execute the async LLM pipeline with the given input text. (Async)
93
94
  """
94
95
  prompt_loader = PromptLoader()
96
+ formatter = Formatter()
95
97
  output = ToolOutput()
96
98
 
97
99
  try:
@@ -131,6 +133,8 @@ class AsyncOperator:
131
133
  OperatorUtils.build_user_message(prompt_configs["main_template"])
132
134
  )
133
135
 
136
+ messages = formatter.user_merge_format(messages)
137
+
134
138
  parsed, completion = await self._parse_completion(
135
139
  messages, output_model, temperature, logprobs, top_logprobs
136
140
  )
@@ -0,0 +1,24 @@
1
+ class Formatter:
2
+ @staticmethod
3
+ def user_merge_format(messages: list[dict[str, str]]) -> list[dict[str, str]]:
4
+ """
5
+ Merges consecutive user messages into a single message, separated by newlines.
6
+
7
+ This is useful for condensing a multi-turn user input into a single
8
+ message for the LLM. Assistant and system messages are left unchanged and
9
+ act as separators between user message groups.
10
+ """
11
+ merged: list[dict[str, str]] = []
12
+
13
+ for message in messages:
14
+ role, content = message["role"], message["content"].strip()
15
+
16
+ # Merge with previous user turn
17
+ if merged and role == "user" and merged[-1]["role"] == "user":
18
+ merged[-1]["content"] += "\n" + content
19
+
20
+ # Otherwise, start a new turn
21
+ else:
22
+ merged.append({"role": role, "content": content})
23
+
24
+ return merged
@@ -6,6 +6,7 @@ from pydantic import BaseModel
6
6
 
7
7
  from texttools.tools.internals.output_models import ToolOutput
8
8
  from texttools.tools.internals.operator_utils import OperatorUtils
9
+ from texttools.tools.internals.formatters import Formatter
9
10
  from texttools.tools.internals.prompt_loader import PromptLoader
10
11
 
11
12
  # Base Model type for output models
@@ -92,6 +93,7 @@ class Operator:
92
93
  Execute the LLM pipeline with the given input text.
93
94
  """
94
95
  prompt_loader = PromptLoader()
96
+ formatter = Formatter()
95
97
  output = ToolOutput()
96
98
 
97
99
  try:
@@ -131,6 +133,8 @@ class Operator:
131
133
  OperatorUtils.build_user_message(prompt_configs["main_template"])
132
134
  )
133
135
 
136
+ messages = formatter.user_merge_format(messages)
137
+
134
138
  parsed, completion = self._parse_completion(
135
139
  messages, output_model, temperature, logprobs, top_logprobs
136
140
  )