ragbits-chat 1.4.0.dev202512100237__tar.gz → 1.4.0.dev202512110238__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 (62) hide show
  1. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/.gitignore +1 -0
  2. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/CHANGELOG.md +2 -0
  3. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/PKG-INFO +2 -2
  4. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/pyproject.toml +2 -2
  5. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/interface/_interface.py +7 -12
  6. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/README.md +0 -0
  7. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/__init__.py +0 -0
  8. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/_utils.py +0 -0
  9. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/api.py +0 -0
  10. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/auth/__init__.py +0 -0
  11. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/auth/backends.py +0 -0
  12. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/auth/base.py +0 -0
  13. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/auth/types.py +0 -0
  14. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/cli.py +0 -0
  15. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/client/__init__.py +0 -0
  16. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/client/client.py +0 -0
  17. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/client/conversation.py +0 -0
  18. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/client/exceptions.py +0 -0
  19. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/history/__init__.py +0 -0
  20. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/history/compressors/__init__.py +0 -0
  21. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/history/compressors/base.py +0 -0
  22. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/history/compressors/llm.py +0 -0
  23. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/interface/__init__.py +0 -0
  24. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/interface/forms.py +0 -0
  25. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/interface/summary.py +0 -0
  26. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/interface/types.py +0 -0
  27. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/interface/ui_customization.py +0 -0
  28. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/metrics.py +0 -0
  29. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/persistence/__init__.py +0 -0
  30. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/persistence/base.py +0 -0
  31. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/persistence/file.py +0 -0
  32. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/persistence/sql.py +0 -0
  33. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/providers/__init__.py +0 -0
  34. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/providers/model_provider.py +0 -0
  35. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/py.typed +0 -0
  36. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/ui-build/assets/AuthGuard-B326tmZN.js +0 -0
  37. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/ui-build/assets/ChatHistory-Cp_DhrUx.js +0 -0
  38. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/ui-build/assets/ChatOptionsForm-CNjzbIqN.js +0 -0
  39. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/ui-build/assets/FeedbackForm-CmRSbYPS.js +0 -0
  40. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/ui-build/assets/Login-Djq6QJ18.js +0 -0
  41. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/ui-build/assets/LogoutButton-Cn2L63Hk.js +0 -0
  42. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/ui-build/assets/ShareButton-lYj0v67r.js +0 -0
  43. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/ui-build/assets/UsageButton-B-N1J-sZ.js +0 -0
  44. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/ui-build/assets/authStore-DATNN-ps.js +0 -0
  45. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/ui-build/assets/chunk-IGSAU2ZA-CsJAveMU.js +0 -0
  46. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/ui-build/assets/chunk-SSA7SXE4-BJI2Gxdq.js +0 -0
  47. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/ui-build/assets/index-B3hlerKe.js +0 -0
  48. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/ui-build/assets/index-B7bSwAmw.js +0 -0
  49. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/ui-build/assets/index-C_JcEI3R.js +0 -0
  50. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/ui-build/assets/index-CmsICuOz.css +0 -0
  51. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/ui-build/assets/index-v15bx9Do.js +0 -0
  52. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/ui-build/assets/useMenuTriggerState-CTz3KfPq.js +0 -0
  53. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/ui-build/assets/useSelectableItem-DK6eABKK.js +0 -0
  54. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/src/ragbits/chat/ui-build/index.html +0 -0
  55. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/tests/unit/auth/test_list_auth_backend.py +0 -0
  56. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/tests/unit/history/test_llm_compressor.py +0 -0
  57. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/tests/unit/persistence/test_sql.py +0 -0
  58. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/tests/unit/test_api.py +0 -0
  59. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/tests/unit/test_chat_client.py +0 -0
  60. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/tests/unit/test_conversation.py +0 -0
  61. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/tests/unit/test_error_response.py +0 -0
  62. {ragbits_chat-1.4.0.dev202512100237 → ragbits_chat-1.4.0.dev202512110238}/tests/unit/test_generic_custom_response.py +0 -0
@@ -113,3 +113,4 @@ lazygit.tar.gz
113
113
 
114
114
  # chat conversation logs
115
115
  duet_conversation.log
116
+ worktrees/
@@ -2,6 +2,7 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ - Make `SummaryGenerator` optional in `ChatInterface` by providing a default Heuristic implementation.
5
6
  - Refactor ragbits-client types to remove excessive use of any (#881)
6
7
  - Split params into path params, query params in API client (#871)
7
8
  - Fix bug causing conversation not to be selected when navigating to it from url(#872)
@@ -15,6 +16,7 @@
15
16
 
16
17
  ### Added
17
18
 
19
+ - Make `SummaryGenerator` optional in `ChatInterface` by providing a default no-op implementation.
18
20
  - Add automatic topic extraction to be used as conversation title with ability to edit in the client side (#840)
19
21
  - Add todo list component to the UI, add support for todo events in API (#827)
20
22
  - Add custom response type to the chat interface with full type safety and validation (#849)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ragbits-chat
3
- Version: 1.4.0.dev202512100237
3
+ Version: 1.4.0.dev202512110238
4
4
  Summary: Building blocks for rapid development of GenAI applications
5
5
  Project-URL: Homepage, https://github.com/deepsense-ai/ragbits
6
6
  Project-URL: Bug Reports, https://github.com/deepsense-ai/ragbits/issues
@@ -26,7 +26,7 @@ Requires-Dist: bcrypt>=4.2.0
26
26
  Requires-Dist: fastapi<1.0.0,>=0.115.0
27
27
  Requires-Dist: httpx<1.0.0,>=0.28.1
28
28
  Requires-Dist: python-jose[cryptography]>=3.5.0
29
- Requires-Dist: ragbits-core==1.4.0.dev202512100237
29
+ Requires-Dist: ragbits-core==1.4.0.dev202512110238
30
30
  Requires-Dist: uvicorn<1.0.0,>=0.31.0
31
31
  Provides-Extra: sql
32
32
  Requires-Dist: sqlalchemy<3.0.0,>=2.0.39; extra == 'sql'
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "ragbits-chat"
3
- version = "1.4.0.dev202512100237"
3
+ version = "1.4.0.dev202512110238"
4
4
  description = "Building blocks for rapid development of GenAI applications"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -31,7 +31,7 @@ classifiers = [
31
31
  "Topic :: Scientific/Engineering :: Artificial Intelligence",
32
32
  "Topic :: Software Development :: Libraries :: Python Modules",
33
33
  ]
34
- dependencies = ["fastapi>=0.115.0,<1.0.0", "uvicorn>=0.31.0,<1.0.0", "httpx>=0.28.1,<1.0.0", "bcrypt>=4.2.0", "python-jose[cryptography]>=3.5.0", "ragbits-core==1.4.0.dev202512100237"]
34
+ dependencies = ["fastapi>=0.115.0,<1.0.0", "uvicorn>=0.31.0,<1.0.0", "httpx>=0.28.1,<1.0.0", "bcrypt>=4.2.0", "python-jose[cryptography]>=3.5.0", "ragbits-core==1.4.0.dev202512110238"]
35
35
 
36
36
  [project.urls]
37
37
  "Homepage" = "https://github.com/deepsense-ai/ragbits"
@@ -10,7 +10,7 @@ from collections.abc import AsyncGenerator, Callable
10
10
  from typing import Any
11
11
 
12
12
  from ragbits.agents.tools.todo import Task
13
- from ragbits.chat.interface.summary import SummaryGenerator
13
+ from ragbits.chat.interface.summary import HeuristicSummaryGenerator, SummaryGenerator
14
14
  from ragbits.chat.interface.ui_customization import UICustomization
15
15
  from ragbits.core.audit.metrics import record_metric
16
16
  from ragbits.core.audit.metrics.base import MetricType
@@ -108,16 +108,14 @@ def with_chat_metadata( # noqa: PLR0915
108
108
  # Generate summary to serve as title for new conversations
109
109
  try:
110
110
  summary = await self.generate_conversation_summary(message, history, context)
111
- yield ConversationSummaryResponse(content=ConversationSummaryContent(summary=summary))
111
+ if summary:
112
+ yield ConversationSummaryResponse(content=ConversationSummaryContent(summary=summary))
112
113
  except Exception:
113
114
  logger.exception("Failed to generate conversation title")
114
115
 
115
- responses = []
116
- main_response = ""
117
- extra_responses: list[ChatResponseUnion] = []
116
+ responses, main_response, extra_responses = [], "", []
118
117
  timestamp = time.time()
119
- response_token_count = 0.0
120
- first_token_time = None
118
+ response_token_count, first_token_time = 0.0, None
121
119
 
122
120
  try:
123
121
  async for response in func(self, message, history, context):
@@ -212,7 +210,7 @@ class ChatInterface(ABC):
212
210
  show_usage: bool = False
213
211
  ui_customization: UICustomization | None = None
214
212
  history_persistence: HistoryPersistenceStrategy | None = None
215
- summary_generator: SummaryGenerator | None = None
213
+ summary_generator: SummaryGenerator = HeuristicSummaryGenerator()
216
214
 
217
215
  def __init_subclass__(cls, **kwargs: dict) -> None:
218
216
  """Automatically apply the with_chat_metadata decorator to the chat method in subclasses."""
@@ -395,8 +393,5 @@ class ChatInterface(ABC):
395
393
  logger.info(f"[{self.__class__.__name__}] Saving {feedback} for message {message_id} with payload {payload}")
396
394
 
397
395
  async def generate_conversation_summary(self, message: str, history: ChatFormat, context: ChatContext) -> str:
398
- """Delegate to the configured summary generator."""
399
- if not self.summary_generator:
400
- raise Exception("Tried to invoke `generate_conversation_summary`. No SummaryGenerator found.")
401
-
396
+ """Handles conversation summary generation using the configured summary_generator."""
402
397
  return await self.summary_generator.generate(message, history, context)