ragbits-core 1.4.0.dev202509220622__tar.gz → 1.4.0.dev202511290233__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 (161) hide show
  1. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/CHANGELOG.md +3 -0
  2. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/PKG-INFO +3 -1
  3. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/README.md +2 -0
  4. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/pyproject.toml +1 -1
  5. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/llms/litellm.py +106 -3
  6. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/sources/hf.py +35 -17
  7. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/.gitignore +0 -0
  8. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/__init__.py +0 -0
  9. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/audit/__init__.py +0 -0
  10. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/audit/metrics/__init__.py +0 -0
  11. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/audit/metrics/base.py +0 -0
  12. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/audit/metrics/logfire.py +0 -0
  13. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/audit/metrics/otel.py +0 -0
  14. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/audit/traces/__init__.py +0 -0
  15. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/audit/traces/base.py +0 -0
  16. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/audit/traces/cli.py +0 -0
  17. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/audit/traces/logfire.py +0 -0
  18. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/audit/traces/otel.py +0 -0
  19. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/cli.py +0 -0
  20. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/config.py +0 -0
  21. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/embeddings/__init__.py +0 -0
  22. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/embeddings/base.py +0 -0
  23. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/embeddings/dense/__init__.py +0 -0
  24. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/embeddings/dense/base.py +0 -0
  25. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/embeddings/dense/fastembed.py +0 -0
  26. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/embeddings/dense/litellm.py +0 -0
  27. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/embeddings/dense/local.py +0 -0
  28. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/embeddings/dense/noop.py +0 -0
  29. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/embeddings/dense/vertex_multimodal.py +0 -0
  30. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/embeddings/exceptions.py +0 -0
  31. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/embeddings/sparse/__init__.py +0 -0
  32. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/embeddings/sparse/bag_of_tokens.py +0 -0
  33. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/embeddings/sparse/base.py +0 -0
  34. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/embeddings/sparse/fastembed.py +0 -0
  35. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/llms/__init__.py +0 -0
  36. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/llms/base.py +0 -0
  37. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/llms/exceptions.py +0 -0
  38. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/llms/factory.py +0 -0
  39. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/llms/local.py +0 -0
  40. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/llms/mock.py +0 -0
  41. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/options.py +0 -0
  42. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/prompt/__init__.py +0 -0
  43. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/prompt/_cli.py +0 -0
  44. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/prompt/base.py +0 -0
  45. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/prompt/discovery.py +0 -0
  46. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/prompt/exceptions.py +0 -0
  47. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/prompt/parsers.py +0 -0
  48. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/prompt/prompt.py +0 -0
  49. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/prompt/promptfoo.py +0 -0
  50. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/py.typed +0 -0
  51. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/sources/__init__.py +0 -0
  52. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/sources/azure.py +0 -0
  53. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/sources/base.py +0 -0
  54. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/sources/exceptions.py +0 -0
  55. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/sources/gcs.py +0 -0
  56. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/sources/git.py +0 -0
  57. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/sources/google_drive.py +0 -0
  58. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/sources/local.py +0 -0
  59. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/sources/s3.py +0 -0
  60. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/sources/web.py +0 -0
  61. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/types.py +0 -0
  62. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/utils/__init__.py +0 -0
  63. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/utils/_pyproject.py +0 -0
  64. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/utils/config_handling.py +0 -0
  65. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/utils/decorators.py +0 -0
  66. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/utils/dict_transformations.py +0 -0
  67. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/utils/function_schema.py +0 -0
  68. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/utils/helpers.py +0 -0
  69. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/utils/lazy_litellm.py +0 -0
  70. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/utils/pydantic.py +0 -0
  71. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/utils/secrets.py +0 -0
  72. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/vector_stores/__init__.py +0 -0
  73. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/vector_stores/_cli.py +0 -0
  74. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/vector_stores/base.py +0 -0
  75. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/vector_stores/chroma.py +0 -0
  76. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/vector_stores/hybrid.py +0 -0
  77. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/vector_stores/hybrid_strategies.py +0 -0
  78. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/vector_stores/in_memory.py +0 -0
  79. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/vector_stores/pgvector.py +0 -0
  80. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/vector_stores/qdrant.py +0 -0
  81. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/src/ragbits/core/vector_stores/weaviate.py +0 -0
  82. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/assets/img/test.png +0 -0
  83. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/assets/img/test2.jpg +0 -0
  84. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/assets/md/bar.md +0 -0
  85. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/assets/md/foo.md +0 -0
  86. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/cli/__init__.py +0 -0
  87. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/cli/test_cli_trace_handler.py +0 -0
  88. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/cli/test_vector_store.py +0 -0
  89. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/conftest.py +0 -0
  90. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/integration/sources/test_git.py +0 -0
  91. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/integration/sources/test_hf.py +0 -0
  92. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/integration/sources/test_s3.py +0 -0
  93. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/integration/vector_stores/__init__.py +0 -0
  94. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/integration/vector_stores/test_keyword_search.py +0 -0
  95. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/integration/vector_stores/test_vector_store.py +0 -0
  96. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/integration/vector_stores/test_vector_store_sparse.py +0 -0
  97. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/__init__.py +0 -0
  98. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/audit/test_cli.py +0 -0
  99. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/audit/test_metrics.py +0 -0
  100. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/audit/test_trace.py +0 -0
  101. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/embeddings/test_bag_of_tokens.py +0 -0
  102. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/embeddings/test_fastembed.py +0 -0
  103. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/embeddings/test_from_config.py +0 -0
  104. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/embeddings/test_litellm.py +0 -0
  105. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/embeddings/test_local.py +0 -0
  106. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/embeddings/test_noop.py +0 -0
  107. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/embeddings/test_vector_size.py +0 -0
  108. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/embeddings/test_vertex_multimodal.py +0 -0
  109. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/llms/__init__.py +0 -0
  110. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/llms/factory/__init__.py +0 -0
  111. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/llms/factory/test_get_preferred_llm.py +0 -0
  112. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/llms/test_base.py +0 -0
  113. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/llms/test_from_config.py +0 -0
  114. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/llms/test_litellm.py +0 -0
  115. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/llms/test_local.py +0 -0
  116. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/prompts/__init__.py +0 -0
  117. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/prompts/discovery/__init__.py +0 -0
  118. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/prompts/discovery/prompt_classes_for_tests.py +0 -0
  119. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/prompts/discovery/ragbits_tests_pkg_with_prompts/__init__.py +0 -0
  120. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/prompts/discovery/ragbits_tests_pkg_with_prompts/prompts/__init__.py +0 -0
  121. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/prompts/discovery/ragbits_tests_pkg_with_prompts/prompts/temp_prompt1.py +0 -0
  122. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/prompts/discovery/ragbits_tests_pkg_with_prompts/prompts/temp_prompt2.py +0 -0
  123. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/prompts/discovery/test_prompt_discovery.py +0 -0
  124. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/prompts/test_parsers.py +0 -0
  125. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/prompts/test_prompt.py +0 -0
  126. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/sources/test_aws.py +0 -0
  127. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/sources/test_azure.py +0 -0
  128. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/sources/test_exceptions.py +0 -0
  129. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/sources/test_gcs.py +0 -0
  130. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/sources/test_git.py +0 -0
  131. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/sources/test_google_drive.py +0 -0
  132. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/sources/test_hf.py +0 -0
  133. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/sources/test_local.py +0 -0
  134. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/sources/test_source_discriminator.py +0 -0
  135. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/sources/test_web.py +0 -0
  136. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/test_options.py +0 -0
  137. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/utils/__init__.py +0 -0
  138. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/utils/pyproject/test_find.py +0 -0
  139. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/utils/pyproject/test_get_config.py +0 -0
  140. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/utils/pyproject/test_get_instace.py +0 -0
  141. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/utils/test_config_handling.py +0 -0
  142. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/utils/test_decorators.py +0 -0
  143. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/utils/test_dict_transformations.py +0 -0
  144. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/utils/test_function_schema.py +0 -0
  145. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/utils/test_helpers.py +0 -0
  146. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/utils/test_secrets.py +0 -0
  147. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/utils/testprojects/bad_factory_project/pyproject.toml +0 -0
  148. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/utils/testprojects/factory_project/pyproject.toml +0 -0
  149. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/utils/testprojects/happy_project/pyproject.toml +0 -0
  150. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/utils/testprojects/project_with_instance_factory/pyproject.toml +0 -0
  151. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/utils/testprojects/project_with_instances_yaml/instances.yaml +0 -0
  152. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/utils/testprojects/project_with_instances_yaml/pyproject.toml +0 -0
  153. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/vector_stores/test_base.py +0 -0
  154. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/vector_stores/test_chroma.py +0 -0
  155. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/vector_stores/test_from_config.py +0 -0
  156. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/vector_stores/test_hybrid.py +0 -0
  157. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/vector_stores/test_hybrid_strategies.py +0 -0
  158. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/vector_stores/test_in_memory.py +0 -0
  159. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/vector_stores/test_pgvector.py +0 -0
  160. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/vector_stores/test_qdrant.py +0 -0
  161. {ragbits_core-1.4.0.dev202509220622 → ragbits_core-1.4.0.dev202511290233}/tests/unit/vector_stores/test_weaviate.py +0 -0
@@ -1,6 +1,9 @@
1
1
  # CHANGELOG
2
2
 
3
3
  ## Unreleased
4
+ - Add Support for Thinking in agents (#837)
5
+
6
+ - Add name parameter and slightly refactor HuggingFace dataloder (#829)
4
7
 
5
8
  ## 1.3.0 (2025-09-11)
6
9
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ragbits-core
3
- Version: 1.4.0.dev202509220622
3
+ Version: 1.4.0.dev202511290233
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
@@ -89,6 +89,8 @@ pip install ragbits-core
89
89
  ## Quick Start
90
90
 
91
91
  ```python
92
+ import asyncio
93
+
92
94
  from pydantic import BaseModel
93
95
  from ragbits.core.prompt import Prompt
94
96
  from ragbits.core.llms.litellm import LiteLLM
@@ -11,6 +11,8 @@ pip install ragbits-core
11
11
  ## Quick Start
12
12
 
13
13
  ```python
14
+ import asyncio
15
+
14
16
  from pydantic import BaseModel
15
17
  from ragbits.core.prompt import Prompt
16
18
  from ragbits.core.llms.litellm import LiteLLM
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "ragbits-core"
3
- version = "1.4.0.dev202509220622"
3
+ version = "1.4.0.dev202511290233"
4
4
  description = "Building blocks for rapid development of GenAI applications"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -315,8 +315,13 @@ class LiteLLM(LLM[LiteLLMOptions], LazyLiteLLM):
315
315
  stream=True,
316
316
  stream_options={"include_usage": True},
317
317
  )
318
- if not response.completion_stream and not response.choices: # type: ignore
319
- raise LLMEmptyResponseError()
318
+
319
+ try:
320
+ if (not response.completion_stream and not response.choices) and not response.reasoning: # type: ignore
321
+ raise LLMEmptyResponseError()
322
+ except AttributeError:
323
+ # some providers might not include some parameters (i.e. Gemini -> choices)
324
+ pass
320
325
 
321
326
  async def response_to_async_generator(response: "CustomStreamWrapper") -> AsyncGenerator[dict, None]:
322
327
  nonlocal input_tokens, provider_calculated_usage
@@ -431,9 +436,12 @@ class LiteLLM(LLM[LiteLLMOptions], LazyLiteLLM):
431
436
  ) -> "ModelResponse | CustomStreamWrapper":
432
437
  entrypoint = self.router or self._create_router_from_self_and_options(options)
433
438
 
439
+ # Preprocess messages for Claude with reasoning enabled
440
+ processed_conversation = self._preprocess_messages_for_claude(conversation, options)
441
+
434
442
  # Prepare kwargs for the completion call
435
443
  completion_kwargs = {
436
- "messages": conversation,
444
+ "messages": processed_conversation,
437
445
  "model": self.model_name,
438
446
  "response_format": response_format,
439
447
  "tools": tools,
@@ -461,6 +469,101 @@ class LiteLLM(LLM[LiteLLMOptions], LazyLiteLLM):
461
469
  raise LLMResponseError() from exc
462
470
  return response
463
471
 
472
+ def _preprocess_messages_for_claude(self, conversation: ChatFormat, options: LiteLLMOptions) -> ChatFormat:
473
+ """
474
+ Preprocess messages for Claude when reasoning is enabled.
475
+
476
+ Claude + reasoning_effort + tool calls creates a conflict:
477
+ - LiteLLM validates messages against OpenAI format (rejects Claude native format)
478
+ - Claude requires thinking blocks when reasoning_effort is set (rejects OpenAI format)
479
+
480
+ Subject to removal after the following are resolved on LiteLLM's side:
481
+ Issue: https://github.com/BerriAI/litellm/issues/14194
482
+ Linked PR(s): https://github.com/BerriAI/litellm/pull/15220
483
+
484
+ Solution: Summarize tool call history and append to last user message.
485
+ This provides context to Claude without triggering validation errors.
486
+
487
+ Args:
488
+ conversation: The conversation in OpenAI format
489
+ options: LLM options including reasoning_effort
490
+
491
+ Returns:
492
+ Processed conversation with tool context included
493
+ """
494
+
495
+ def create_enhanced_user_message(
496
+ tool_summary_parts: list[str], original_user_msg: str | None
497
+ ) -> dict[str, Any]:
498
+ if tool_summary_parts and original_user_msg:
499
+ enhanced_message = original_user_msg
500
+ enhanced_message += "\n\n[Previous tool calls in this conversation:"
501
+
502
+ for summary in tool_summary_parts:
503
+ enhanced_message += f"\n- {summary}"
504
+ enhanced_message += "\nUse this information to provide your final answer.]"
505
+ return {"role": "user", "content": enhanced_message}
506
+
507
+ return {"role": "user", "content": original_user_msg}
508
+
509
+ # Only process for Claude models with reasoning enabled
510
+ is_claude = "anthropic" in self.model_name.lower() or "claude" in self.model_name.lower()
511
+ has_reasoning = options.reasoning_effort is not NOT_GIVEN and options.reasoning_effort is not None
512
+
513
+ if not (is_claude and has_reasoning):
514
+ return conversation
515
+
516
+ # Check if conversation has tool calls
517
+ has_tool_calls = any(msg.get("role") == "assistant" and msg.get("tool_calls") for msg in conversation)
518
+
519
+ if not has_tool_calls:
520
+ # No tool calls, conversation is fine as-is
521
+ return conversation
522
+
523
+ # Build tool call summary from conversation history
524
+ tool_summary_parts = []
525
+ i = 0
526
+ while i < len(conversation):
527
+ msg = conversation[i]
528
+ if msg.get("role") == "assistant" and msg.get("tool_calls"):
529
+ # Found assistant message with tool calls
530
+ for tool_call in msg["tool_calls"]:
531
+ tool_name = tool_call["function"]["name"]
532
+ tool_args = tool_call["function"]["arguments"]
533
+ tool_id = tool_call["id"]
534
+
535
+ # Find corresponding tool result
536
+ tool_result = None
537
+ for j in range(i + 1, len(conversation)):
538
+ if conversation[j].get("role") == "tool" and conversation[j].get("tool_call_id") == tool_id:
539
+ tool_result = conversation[j].get("content")
540
+ break
541
+
542
+ if tool_result:
543
+ tool_summary_parts.append(f"{tool_name}({tool_args}) returned: {tool_result}")
544
+ i += 1
545
+
546
+ # Build processed conversation
547
+ processed = []
548
+
549
+ # Keep system message if present
550
+ for msg in conversation:
551
+ if msg.get("role") == "system":
552
+ processed.append(msg)
553
+ break
554
+
555
+ # Get the original user message (first non-system)
556
+ original_user_msg = None
557
+ for msg in conversation:
558
+ if msg.get("role") == "user":
559
+ original_user_msg = msg.get("content", "")
560
+ break
561
+
562
+ # Create enhanced user message with tool context
563
+ processed.append(create_enhanced_user_message(tool_summary_parts, original_user_msg))
564
+
565
+ return processed
566
+
464
567
  def _get_response_format(
465
568
  self, output_schema: type[BaseModel] | dict | None, json_mode: bool
466
569
  ) -> type[BaseModel] | dict | None:
@@ -1,7 +1,7 @@
1
1
  import re
2
2
  from collections.abc import Iterable
3
3
  from pathlib import Path
4
- from typing import ClassVar
4
+ from typing import TYPE_CHECKING, ClassVar, TypeAlias
5
5
 
6
6
  from typing_extensions import Self
7
7
 
@@ -10,6 +10,11 @@ from ragbits.core.sources.base import Source, get_local_storage_dir
10
10
  from ragbits.core.sources.exceptions import SourceConnectionError, SourceNotFoundError
11
11
  from ragbits.core.utils.decorators import requires_dependencies
12
12
 
13
+ if TYPE_CHECKING:
14
+ from datasets import Dataset, DatasetDict, IterableDataset, IterableDatasetDict
15
+
16
+ HFDataset: TypeAlias = Dataset | DatasetDict | IterableDataset | IterableDatasetDict
17
+
13
18
 
14
19
  class HuggingFaceSource(Source):
15
20
  """
@@ -23,6 +28,7 @@ class HuggingFaceSource(Source):
23
28
 
24
29
  protocol: ClassVar[str] = "hf"
25
30
  path: str
31
+ name: str | None = None
26
32
  split: str = "train"
27
33
  row: int | None = None
28
34
 
@@ -33,6 +39,32 @@ class HuggingFaceSource(Source):
33
39
  """
34
40
  return f"hf:{self.path}/{self.split}{f'/{self.row}' if self.row is not None else ''}"
35
41
 
42
+ def _load_dataset(self, streaming: bool = False) -> "HFDataset":
43
+ """
44
+ Load the dataset from Hugging Face.
45
+
46
+ Args:
47
+ streaming: Whether to stream the dataset.
48
+
49
+ Returns:
50
+ The loaded dataset.
51
+
52
+ Raises:
53
+ SourceConnectionError: If the source connection fails.
54
+ SourceNotFoundError: If the source dataset is not found.
55
+ """
56
+ from datasets import load_dataset
57
+ from datasets.exceptions import DatasetNotFoundError
58
+
59
+ try:
60
+ if self.name is not None and str(self.name).strip():
61
+ return load_dataset(self.path, self.name, split=self.split, streaming=streaming)
62
+ return load_dataset(self.path, split=self.split, streaming=streaming)
63
+ except ConnectionError as exc:
64
+ raise SourceConnectionError() from exc
65
+ except DatasetNotFoundError as exc:
66
+ raise SourceNotFoundError(source_id=self.id) from exc
67
+
36
68
  @requires_dependencies(["datasets"], "hf")
37
69
  async def fetch(self) -> Path:
38
70
  """
@@ -45,17 +77,9 @@ class HuggingFaceSource(Source):
45
77
  SourceConnectionError: If the source connection fails.
46
78
  SourceNotFoundError: If the source document is not found.
47
79
  """
48
- from datasets import load_dataset
49
- from datasets.exceptions import DatasetNotFoundError
50
-
51
80
  with trace(path=self.path, split=self.split, row=self.row) as outputs:
52
81
  if self.row is not None:
53
- try:
54
- dataset = load_dataset(self.path, split=self.split, streaming=True)
55
- except ConnectionError as exc:
56
- raise SourceConnectionError() from exc
57
- except DatasetNotFoundError as exc:
58
- raise SourceNotFoundError(source_id=self.id) from exc
82
+ dataset = self._load_dataset(streaming=True)
59
83
 
60
84
  try:
61
85
  data = next(iter(dataset.skip(self.row).take(1)))
@@ -78,13 +102,7 @@ class HuggingFaceSource(Source):
78
102
  path = source_dir / f"{self.split}.json"
79
103
 
80
104
  if not path.is_file():
81
- try:
82
- dataset = load_dataset(self.path, split=self.split)
83
- except ConnectionError as exc:
84
- raise SourceConnectionError() from exc
85
- except DatasetNotFoundError as exc:
86
- raise SourceNotFoundError(source_id=self.id) from exc
87
-
105
+ dataset = self._load_dataset(streaming=False)
88
106
  dataset.to_json(path)
89
107
  outputs.path = path
90
108