cat-stack 1.6.3__tar.gz → 1.6.4__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 (44) hide show
  1. {cat_stack-1.6.3 → cat_stack-1.6.4}/PKG-INFO +1 -1
  2. {cat_stack-1.6.3 → cat_stack-1.6.4}/src/catstack/__about__.py +1 -1
  3. {cat_stack-1.6.3 → cat_stack-1.6.4}/src/catstack/_providers.py +6 -2
  4. {cat_stack-1.6.3 → cat_stack-1.6.4}/.gitignore +0 -0
  5. {cat_stack-1.6.3 → cat_stack-1.6.4}/LICENSE +0 -0
  6. {cat_stack-1.6.3 → cat_stack-1.6.4}/README.md +0 -0
  7. {cat_stack-1.6.3 → cat_stack-1.6.4}/pyproject.toml +0 -0
  8. {cat_stack-1.6.3 → cat_stack-1.6.4}/src/cat_stack/__init__.py +0 -0
  9. {cat_stack-1.6.3 → cat_stack-1.6.4}/src/catstack/__init__.py +0 -0
  10. {cat_stack-1.6.3 → cat_stack-1.6.4}/src/catstack/_batch.py +0 -0
  11. {cat_stack-1.6.3 → cat_stack-1.6.4}/src/catstack/_category_analysis.py +0 -0
  12. {cat_stack-1.6.3 → cat_stack-1.6.4}/src/catstack/_chunked.py +0 -0
  13. {cat_stack-1.6.3 → cat_stack-1.6.4}/src/catstack/_embeddings.py +0 -0
  14. {cat_stack-1.6.3 → cat_stack-1.6.4}/src/catstack/_formatter.py +0 -0
  15. {cat_stack-1.6.3 → cat_stack-1.6.4}/src/catstack/_pilot_test.py +0 -0
  16. {cat_stack-1.6.3 → cat_stack-1.6.4}/src/catstack/_prompts.py +0 -0
  17. {cat_stack-1.6.3 → cat_stack-1.6.4}/src/catstack/_review_ui.py +0 -0
  18. {cat_stack-1.6.3 → cat_stack-1.6.4}/src/catstack/_tiebreaker.py +0 -0
  19. {cat_stack-1.6.3 → cat_stack-1.6.4}/src/catstack/_utils.py +0 -0
  20. {cat_stack-1.6.3 → cat_stack-1.6.4}/src/catstack/_web_fetch.py +0 -0
  21. {cat_stack-1.6.3 → cat_stack-1.6.4}/src/catstack/_wrapper_helpers.py +0 -0
  22. {cat_stack-1.6.3 → cat_stack-1.6.4}/src/catstack/calls/CoVe.py +0 -0
  23. {cat_stack-1.6.3 → cat_stack-1.6.4}/src/catstack/calls/__init__.py +0 -0
  24. {cat_stack-1.6.3 → cat_stack-1.6.4}/src/catstack/calls/image_CoVe.py +0 -0
  25. {cat_stack-1.6.3 → cat_stack-1.6.4}/src/catstack/calls/image_stepback.py +0 -0
  26. {cat_stack-1.6.3 → cat_stack-1.6.4}/src/catstack/calls/pdf_CoVe.py +0 -0
  27. {cat_stack-1.6.3 → cat_stack-1.6.4}/src/catstack/calls/pdf_stepback.py +0 -0
  28. {cat_stack-1.6.3 → cat_stack-1.6.4}/src/catstack/calls/stepback.py +0 -0
  29. {cat_stack-1.6.3 → cat_stack-1.6.4}/src/catstack/calls/top_n.py +0 -0
  30. {cat_stack-1.6.3 → cat_stack-1.6.4}/src/catstack/classify.py +0 -0
  31. {cat_stack-1.6.3 → cat_stack-1.6.4}/src/catstack/explore.py +0 -0
  32. {cat_stack-1.6.3 → cat_stack-1.6.4}/src/catstack/extract.py +0 -0
  33. {cat_stack-1.6.3 → cat_stack-1.6.4}/src/catstack/image_functions.py +0 -0
  34. {cat_stack-1.6.3 → cat_stack-1.6.4}/src/catstack/images/circle.png +0 -0
  35. {cat_stack-1.6.3 → cat_stack-1.6.4}/src/catstack/images/cube.png +0 -0
  36. {cat_stack-1.6.3 → cat_stack-1.6.4}/src/catstack/images/diamond.png +0 -0
  37. {cat_stack-1.6.3 → cat_stack-1.6.4}/src/catstack/images/overlapping_pentagons.png +0 -0
  38. {cat_stack-1.6.3 → cat_stack-1.6.4}/src/catstack/images/rectangles.png +0 -0
  39. {cat_stack-1.6.3 → cat_stack-1.6.4}/src/catstack/model_reference_list.py +0 -0
  40. {cat_stack-1.6.3 → cat_stack-1.6.4}/src/catstack/pdf_functions.py +0 -0
  41. {cat_stack-1.6.3 → cat_stack-1.6.4}/src/catstack/prompt_tune.py +0 -0
  42. {cat_stack-1.6.3 → cat_stack-1.6.4}/src/catstack/summarize.py +0 -0
  43. {cat_stack-1.6.3 → cat_stack-1.6.4}/src/catstack/text_functions.py +0 -0
  44. {cat_stack-1.6.3 → cat_stack-1.6.4}/src/catstack/text_functions_ensemble.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cat-stack
3
- Version: 1.6.3
3
+ Version: 1.6.4
4
4
  Summary: Domain-agnostic text, image, PDF, and DOCX classification engine powered by LLMs
5
5
  Project-URL: Documentation, https://github.com/chrissoria/cat-stack#readme
6
6
  Project-URL: Issues, https://github.com/chrissoria/cat-stack/issues
@@ -1,7 +1,7 @@
1
1
  # SPDX-FileCopyrightText: 2025-present Christopher Soria <chrissoria@berkeley.edu>
2
2
  #
3
3
  # SPDX-License-Identifier: GPL-3.0-or-later
4
- __version__ = "1.6.3"
4
+ __version__ = "1.6.4"
5
5
  __author__ = "Chris Soria"
6
6
  __email__ = "chrissoria@berkeley.edu"
7
7
  __title__ = "cat-stack"
@@ -855,7 +855,9 @@ class UnifiedLLMClient:
855
855
  wait_time = _backoff_with_jitter(initial_delay, attempt, multiplier=5.0)
856
856
  elapsed = time.monotonic() - start
857
857
  if attempt < max_retries - 1 and elapsed + wait_time <= _MAX_TOTAL_WAIT_SECONDS:
858
- print(f"Rate limited. Waiting {wait_time:.1f}s...")
858
+ # Name the throttling provider/model so multi-model
859
+ # ensemble runs can attribute the slowdown.
860
+ print(f"[{self.provider}/{self.model}] Rate limited. Waiting {wait_time:.1f}s...")
859
861
  time.sleep(wait_time)
860
862
  continue
861
863
  else:
@@ -893,7 +895,9 @@ class UnifiedLLMClient:
893
895
  wait_time = _backoff_with_jitter(initial_delay, attempt)
894
896
  elapsed = time.monotonic() - start
895
897
  if attempt < max_retries - 1 and elapsed + wait_time <= _MAX_TOTAL_WAIT_SECONDS:
896
- print(f"Server error {response.status_code}. Retrying in {wait_time:.1f}s...")
898
+ # Name the failing provider/model — same rationale as
899
+ # the 429 handler above.
900
+ print(f"[{self.provider}/{self.model}] Server error {response.status_code}. Retrying in {wait_time:.1f}s...")
897
901
  time.sleep(wait_time)
898
902
  continue
899
903
  else:
File without changes
File without changes
File without changes
File without changes