diff --git a/.github/actions/test-packages/action.yml b/.github/actions/test-packages/action.yml new file mode 100644 index 0000000000..368c0c1357 --- /dev/null +++ b/.github/actions/test-packages/action.yml @@ -0,0 +1,40 @@ +name: 'Test Built Packages' +description: 'Sets up environment from built packages and runs tests' +inputs: + python-version: + description: 'Python version to use' + required: true + google-drive-clientid-json: + description: 'Google Drive client ID JSON' + required: false + google-source-unit-test-folder: + description: 'Google source unit test folder' + required: false + google-drive-target-email: + description: 'Google Drive target email' + required: false + +runs: + using: "composite" + steps: + - name: Run Tests With Coverage (package) + shell: bash + run: | + # Create a fresh virtual environment + uv venv --python ${{ inputs.python-version }} + + uv pip install --find-links dist "$(ls dist/ragbits-*.whl)[a2a,azure,chroma,cli,fastembed,fastembed-gpu,gcs,google-drive,hf,local,logfire,mcp,openai,otel,pgvector,promptfoo,qdrant,ray,relari,s3,sql,unstructured,weaviate]" + + uv pip install docling==2.15.1 torch==2.2.2 pyarrow==17.0.0 ray==2.43.0 + + # Install test dependencies + uv pip install pytest~=8.3.3 pytest-cov~=5.0.0 pytest-asyncio~=0.24.0 pytest-postgresql~=7.0.1 moto~=4.2.7 aiosqlite~=0.21.0 + + # Run tests with coverage + uv run --no-sync coverage run -m pytest --postgresql-password postgres -v -p no:warnings --junitxml=report.xml + uv run --no-sync coverage report + uv run --no-sync coverage xml + env: + GOOGLE_DRIVE_CLIENTID_JSON: ${{ inputs.google-drive-clientid-json }} + GOOGLE_SOURCE_UNIT_TEST_FOLDER: ${{ inputs.google-source-unit-test-folder }} + GOOGLE_DRIVE_TARGET_EMAIL: ${{ inputs.google-drive-target-email }} diff --git a/.github/workflows/nightly-build.yml b/.github/workflows/nightly-build.yml index d660c58629..df6b8437b1 100644 --- a/.github/workflows/nightly-build.yml +++ b/.github/workflows/nightly-build.yml @@ -4,6 +4,12 @@ on: schedule: - cron: "0 2 * * *" # Daily at 2 AM UTC workflow_dispatch: # Manual trigger for testing + inputs: + dry-run: + description: 'Dry run (skip publishing to PyPI and npm)' + required: false + type: boolean + default: true jobs: check-for-changes: @@ -30,16 +36,16 @@ jobs: python-version: "3.10" - name: Check if nightly build needed + if: ${{ inputs.dry-run != true }} id: check run: uv run scripts/check_nightly_build.py - build-and-publish: + build: needs: check-for-changes - if: needs.check-for-changes.outputs.should-build == 'true' + if: inputs.dry-run == true || needs.check-for-changes.outputs.should-build == 'true' runs-on: ubuntu-latest permissions: contents: write - id-token: write steps: - name: Checkout develop branch uses: actions/checkout@v4 @@ -58,13 +64,8 @@ jobs: with: python-version: "3.10" - - name: Set up Node.js - uses: actions/setup-node@v4 - with: - node-version: "lts/*" - registry-url: "https://registry.npmjs.org" - - name: Update package versions for nightly + if: ${{ github.event_name == 'schedule' || inputs.dry-run != true }} run: | uv run scripts/update_nightly_versions.py "${{ needs.check-for-changes.outputs.nightly-version }}" uv run scripts/update_nightly_npm_versions.py "${{ needs.check-for-changes.outputs.nightly-version }}" @@ -80,7 +81,15 @@ jobs: uv build "$dir" --out-dir dist done + - name: Upload built packages + uses: actions/upload-artifact@v4 + with: + name: nightly-packages + path: dist/** + retention-days: 3 + - name: Sync versions to repo and push tag + if: ${{ github.event_name == 'schedule' || inputs.dry-run != true }} run: | git config user.name "ds-ragbits-robot" git config user.email "ds-ragbits-robot@users.noreply.github.com" @@ -99,7 +108,117 @@ jobs: GH_TOKEN: ${{ secrets.GH_TOKEN }} NIGHTLY_VERSION: ${{ needs.check-for-changes.outputs.nightly-version }} + test-packages: + name: Test packages (Python ${{ matrix.python-version }}) + needs: build + runs-on: ubuntu-latest + timeout-minutes: 15 + strategy: + fail-fast: false + matrix: + python-version: [ "3.10", "3.11", "3.12" ] + + services: + postgres: + image: pgvector/pgvector:0.8.0-pg17 + env: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + POSTGRES_DB: tests + ports: + - 5432:5432 + options: >- + --health-cmd "pg_isready -U postgres" + --health-interval 10s + --health-timeout 5s + --health-retries 5 + weaviate: + image: cr.weaviate.io/semitechnologies/weaviate:1.30.6 + env: + QUERY_DEFAULTS_LIMIT: 25 + AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: true + PERSISTENCE_DATA_PATH: /var/lib/weaviate + ENABLE_API_BASED_MODULES: true + CLUSTER_HOSTNAME: node1 + ports: + - 8080:8080 + - 50051:50051 + options: >- + --health-cmd "wget --no-verbose --tries=1 --spider http://localhost:8080/v1/.well-known/ready || exit 1" + --health-interval 10s + --health-timeout 5s + --health-retries 5 + + steps: + - uses: actions/checkout@v4 + + - name: Install uv + uses: astral-sh/setup-uv@v2 + with: + version: ${{ vars.UV_VERSION || '0.6.9' }} + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + + - name: Download built packages + uses: actions/download-artifact@v4 + with: + name: nightly-packages + path: dist + + - name: Test built packages + uses: ./.github/actions/test-packages + with: + python-version: ${{ matrix.python-version }} + google-drive-clientid-json: ${{ secrets.GOOGLE_DRIVE_CLIENTID_JSON }} + google-source-unit-test-folder: ${{ secrets.GOOGLE_SOURCE_UNIT_TEST_FOLDER }} + google-drive-target-email: ${{ secrets.GOOGLE_DRIVE_TARGET_EMAIL }} + + publish: + needs: [check-for-changes, test-packages] + runs-on: ubuntu-latest + permissions: + contents: write + id-token: write + steps: + - name: Checkout develop branch + uses: actions/checkout@v4 + with: + ref: develop + token: ${{ secrets.GH_TOKEN }} + fetch-depth: 0 + + - name: Install uv + uses: astral-sh/setup-uv@v2 + with: + version: ${{ vars.UV_VERSION || '0.6.9' }} + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: "3.10" + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: "lts/*" + registry-url: "https://registry.npmjs.org" + + - name: Download built packages + uses: actions/download-artifact@v4 + with: + name: nightly-packages + path: dist + + - name: Dry run notice + if: ${{ inputs.dry-run == true }} + run: | + echo "::notice::🔍 DRY RUN MODE: Skipping all publishing steps (PyPI, npm, docs, git push)" + - name: Publish to PyPI + if: ${{ github.event_name == 'schedule' || inputs.dry-run != true }} run: | uv tool run twine upload dist/* --verbose env: @@ -108,24 +227,29 @@ jobs: TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }} - name: Install TypeScript dependencies + if: ${{ github.event_name == 'schedule' || inputs.dry-run != true }} run: npm ci - name: Build npm packages + if: ${{ github.event_name == 'schedule' || inputs.dry-run != true }} run: npm run build:packages - name: Publish @ragbits/api-client (dev) + if: ${{ github.event_name == 'schedule' || inputs.dry-run != true }} run: npm publish --provenance --access public --tag dev working-directory: typescript/@ragbits/api-client env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - name: Publish @ragbits/api-client-react (dev) + if: ${{ github.event_name == 'schedule' || inputs.dry-run != true }} run: npm publish --provenance --access public --tag dev working-directory: typescript/@ragbits/api-client-react env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - name: Deploy nightly documentation + if: ${{ github.event_name == 'schedule' || inputs.dry-run != true }} shell: bash run: | git config user.name "ds-ragbits-robot" diff --git a/.github/workflows/shared-packages.yml b/.github/workflows/shared-packages.yml index 79404be9b0..ba07567285 100644 --- a/.github/workflows/shared-packages.yml +++ b/.github/workflows/shared-packages.yml @@ -105,7 +105,8 @@ jobs: tests: - name: Run tests + name: Run tests (${{ matrix.install-method }}, Python ${{ matrix.python-version }}) + needs: lints runs-on: ubuntu-latest timeout-minutes: 15 permissions: @@ -116,6 +117,7 @@ jobs: fail-fast: false # do not stop all jobs if one fails matrix: python-version: [ "3.10", "3.11", "3.12" ] + install-method: [ "source", "package" ] services: postgres: @@ -154,7 +156,7 @@ jobs: - name: Install uv uses: astral-sh/setup-uv@v2 with: - version: "0.4.20" + version: ${{ vars.UV_VERSION || '0.6.9' }} - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v4 @@ -175,9 +177,24 @@ jobs: path: ~/nltk_data key: nltk-${{ runner.os }} - - name: Run Tests With Coverage + - name: Download built packages + if: matrix.install-method == 'package' + uses: actions/download-artifact@v4 + with: + name: packages + path: dist + + - name: Run Tests With Coverage (package) + if: matrix.install-method == 'package' + uses: ./.github/actions/test-packages + with: + python-version: ${{ matrix.python-version }} + google-drive-clientid-json: ${{ secrets.GOOGLE_DRIVE_CLIENTID_JSON }} + google-source-unit-test-folder: ${{ secrets.GOOGLE_SOURCE_UNIT_TEST_FOLDER }} + google-drive-target-email: ${{ secrets.GOOGLE_DRIVE_TARGET_EMAIL }} + - name: Run Tests With Coverage (source) + if: matrix.install-method == 'source' run: | - # run with coverage to not execute tests twice uv run coverage run -m pytest --postgresql-password postgres -v -p no:warnings --junitxml=report.xml uv run coverage report uv run coverage xml @@ -192,17 +209,19 @@ jobs: if: always() with: report_paths: 'report.xml' + check_name: 'Test Results (${{ matrix.install-method }}, Python ${{ matrix.python-version }})' - name: Publish Test Report uses: actions/upload-artifact@v4 continue-on-error: true if: always() with: - name: test-report + name: test-report-${{ matrix.install-method }}-py${{ matrix.python-version }} path: report.xml retention-days: 10 - name: Produce the coverage report + if: matrix.install-method == 'source' uses: insightsengineering/coverage-action@v2 continue-on-error: true with: diff --git a/README.md b/README.md index 898e706164..ffdc42a407 100644 --- a/README.md +++ b/README.md @@ -75,6 +75,7 @@ This is a starter bundle of packages, containing: - [`ragbits-agents`](https://github.com/deepsense-ai/ragbits/tree/main/packages/ragbits-agents) - abstractions for building agentic systems. - [`ragbits-document-search`](https://github.com/deepsense-ai/ragbits/tree/main/packages/ragbits-document-search) - retrieval and ingestion piplines for knowledge bases. - [`ragbits-evaluate`](https://github.com/deepsense-ai/ragbits/tree/main/packages/ragbits-evaluate) - unified evaluation framework for Ragbits components. +- [`ragbits-guardrails`](https://github.com/deepsense-ai/ragbits/tree/main/packages/ragbits-guardrails) - utilities for ensuring the safety and relevance of responses. - [`ragbits-chat`](https://github.com/deepsense-ai/ragbits/tree/main/packages/ragbits-chat) - full-stack infrastructure for building conversational AI applications. - [`ragbits-cli`](https://github.com/deepsense-ai/ragbits/tree/main/packages/ragbits-cli) - `ragbits` shell command for interacting with Ragbits components. diff --git a/docs/index.md b/docs/index.md index b834edaf18..72caf0d64f 100644 --- a/docs/index.md +++ b/docs/index.md @@ -90,6 +90,7 @@ This is a starter bundle of packages, containing: - [`ragbits-agents`](https://github.com/deepsense-ai/ragbits/tree/main/packages/ragbits-agents) - abstractions for building agentic systems. - [`ragbits-document-search`](https://github.com/deepsense-ai/ragbits/tree/main/packages/ragbits-document-search) - retrieval and ingestion piplines for knowledge bases. - [`ragbits-evaluate`](https://github.com/deepsense-ai/ragbits/tree/main/packages/ragbits-evaluate) - unified evaluation framework for Ragbits components. +- [`ragbits-guardrails`](https://github.com/deepsense-ai/ragbits/tree/main/packages/ragbits-guardrails) - utilities for ensuring the safety and relevance of responses. - [`ragbits-chat`](https://github.com/deepsense-ai/ragbits/tree/main/packages/ragbits-chat) - full-stack infrastructure for building conversational AI applications. - [`ragbits-cli`](https://github.com/deepsense-ai/ragbits/tree/main/packages/ragbits-cli) - `ragbits` shell command for interacting with Ragbits components. diff --git a/docs/tutorials/chat.md b/docs/tutorials/chat.md index 627ce32a90..f9ad642217 100644 --- a/docs/tutorials/chat.md +++ b/docs/tutorials/chat.md @@ -14,7 +14,7 @@ Let's build a **sophisticated chatbot interface** with **Ragbits Chat and Agents - How to debug and optimize tool-powered chat systems - How to build production-ready intelligent assistants with real capabilities -Install the latest Ragbits via `pip install -U ragbits[agents]` and follow along. +Install the latest Ragbits via `pip install -U ragbits` and follow along. ## Configuring the environment diff --git a/packages/ragbits-chat/pyproject.toml b/packages/ragbits-chat/pyproject.toml index 9af3eaf2ed..d6add629a2 100644 --- a/packages/ragbits-chat/pyproject.toml +++ b/packages/ragbits-chat/pyproject.toml @@ -44,8 +44,8 @@ sql = [ "sqlalchemy>=2.0.39,<3.0.0", ] -[tool.uv] -dev-dependencies = [ +[dependency-groups] +dev = [ "pre-commit~=3.8.0", "pytest~=8.3.3", "pytest-cov~=5.0.0", diff --git a/packages/ragbits-core/pyproject.toml b/packages/ragbits-core/pyproject.toml index 4f24885bec..2ebc96e315 100644 --- a/packages/ragbits-core/pyproject.toml +++ b/packages/ragbits-core/pyproject.toml @@ -110,8 +110,8 @@ weaviate = [ "weaviate-client>=4.15.4,<5.0.0", ] -[tool.uv] -dev-dependencies = [ +[dependency-groups] +dev = [ "pre-commit~=3.8.0", "pytest~=8.3.3", "pytest-cov~=5.0.0", diff --git a/packages/ragbits-document-search/pyproject.toml b/packages/ragbits-document-search/pyproject.toml index 21a6a3e6b3..0c5d96a223 100644 --- a/packages/ragbits-document-search/pyproject.toml +++ b/packages/ragbits-document-search/pyproject.toml @@ -29,7 +29,7 @@ classifiers = [ "Topic :: Scientific/Engineering :: Artificial Intelligence", "Topic :: Software Development :: Libraries :: Python Modules", ] -dependencies = ["docling>=2.15.1,<3.0.0", "opencv-python>=4.11.0.86,<5.0.0.0", "rerankers>=0.6.1,<1.0.0", "filetype>=1.2.0,<2.0.0", "python-pptx>=1.0.0,<2.0.0", "ragbits-core==1.4.0.dev202601010248"] +dependencies = ["docling[easyocr]>=2.15.1,<3.0.0", "opencv-python>=4.11.0.86,<5.0.0.0", "rerankers>=0.6.1,<1.0.0", "filetype>=1.2.0,<2.0.0", "python-pptx>=1.0.0,<2.0.0", "ragbits-core==1.4.0.dev202601010248"] [project.urls] "Homepage" = "https://github.com/deepsense-ai/ragbits" @@ -44,8 +44,8 @@ unstructured = [ ] ray = ["ray[data]>=2.43.0,<3.0.0"] -[tool.uv] -dev-dependencies = [ +[dependency-groups] +dev = [ "pre-commit~=3.8.0", "pytest~=8.3.3", "pytest-cov~=5.0.0", diff --git a/packages/ragbits-evaluate/CHANGELOG.md b/packages/ragbits-evaluate/CHANGELOG.md index 33b68a5b32..c175400318 100644 --- a/packages/ragbits-evaluate/CHANGELOG.md +++ b/packages/ragbits-evaluate/CHANGELOG.md @@ -12,6 +12,8 @@ - Feat: add metrics collection system for agent simulation (`MetricCollector` protocol, `LatencyMetricCollector`, `TokenUsageMetricCollector`, `ToolUsageMetricCollector`) (#882) +- Fix: improve `continuous-eval` import compatibility for different package versions specified by constraints + ## 1.3.0 (2025-09-11) ### Changed diff --git a/packages/ragbits-evaluate/pyproject.toml b/packages/ragbits-evaluate/pyproject.toml index 632ff2879f..2652bdac3a 100644 --- a/packages/ragbits-evaluate/pyproject.toml +++ b/packages/ragbits-evaluate/pyproject.toml @@ -45,8 +45,8 @@ relari = [ "continuous-eval>=0.3.12,<1.0.0", ] -[tool.uv] -dev-dependencies = [ +[dependency-groups] +dev = [ "pre-commit~=3.8.0", "pytest~=8.3.3", "pytest-cov~=5.0.0", diff --git a/packages/ragbits-evaluate/src/ragbits/evaluate/metrics/question_answer.py b/packages/ragbits-evaluate/src/ragbits/evaluate/metrics/question_answer.py index ed1ed62d2e..37976c42de 100644 --- a/packages/ragbits-evaluate/src/ragbits/evaluate/metrics/question_answer.py +++ b/packages/ragbits-evaluate/src/ragbits/evaluate/metrics/question_answer.py @@ -4,14 +4,6 @@ from itertools import chain from typing import Generic, TypeVar -from continuous_eval.llm_factory import LLMInterface -from continuous_eval.metrics.base import LLMBasedMetric -from continuous_eval.metrics.generation.text import ( - LLMBasedAnswerCorrectness, - LLMBasedAnswerRelevance, - LLMBasedFaithfulness, - LLMBasedStyleConsistency, -) from typing_extensions import Self from ragbits.agents.types import QuestionAnswerPromptOutputT @@ -20,6 +12,31 @@ from ragbits.evaluate.metrics.base import Metric from ragbits.evaluate.pipelines.question_answer import QuestionAnswerResult +try: + from continuous_eval.llm_factory import LLMInterface + from continuous_eval.metrics.base import LLMBasedMetric + from continuous_eval.metrics.generation.text import ( + LLMBasedAnswerCorrectness, + LLMBasedAnswerRelevance, + LLMBasedFaithfulness, + LLMBasedStyleConsistency, + ) +except ModuleNotFoundError: + from continuous_eval.llms.base import LLMInterface + from continuous_eval.metrics import Metric as LLMBasedMetric + from continuous_eval.metrics.generation.text import ( + AnswerCorrectness as LLMBasedAnswerCorrectness, + ) + from continuous_eval.metrics.generation.text import ( + AnswerRelevance as LLMBasedAnswerRelevance, + ) + from continuous_eval.metrics.generation.text import ( + Faithfulness as LLMBasedFaithfulness, + ) + from continuous_eval.metrics.generation.text import ( + StyleConsistency as LLMBasedStyleConsistency, + ) + MetricT = TypeVar("MetricT", bound=LLMBasedMetric) diff --git a/packages/ragbits-guardrails/pyproject.toml b/packages/ragbits-guardrails/pyproject.toml index 6adc5a6609..4029569f6f 100644 --- a/packages/ragbits-guardrails/pyproject.toml +++ b/packages/ragbits-guardrails/pyproject.toml @@ -44,8 +44,8 @@ openai = [ "openai>=1.91.0,<2.0.0", ] -[tool.uv] -dev-dependencies = [ +[dependency-groups] +dev = [ "pre-commit~=3.8.0", "pytest~=8.3.3", "pytest-cov~=5.0.0", diff --git a/packages/ragbits/pyproject.toml b/packages/ragbits/pyproject.toml index 0a06641265..937073f354 100644 --- a/packages/ragbits/pyproject.toml +++ b/packages/ragbits/pyproject.toml @@ -31,7 +31,7 @@ classifiers = [ "Topic :: Scientific/Engineering :: Artificial Intelligence", "Topic :: Software Development :: Libraries :: Python Modules", ] -dependencies = ["ragbits-document-search==1.4.0.dev202601010248", "ragbits-cli==1.4.0.dev202601010248", "ragbits-evaluate==1.4.0.dev202601010248", "ragbits-guardrails==1.4.0.dev202601010248", "ragbits-chat==1.4.0.dev202601010248", "ragbits-core==1.4.0.dev202601010248"] +dependencies = ["ragbits-agents==1.4.0.dev202601010248", "ragbits-document-search==1.4.0.dev202601010248", "ragbits-cli==1.4.0.dev202601010248", "ragbits-evaluate==1.4.0.dev202601010248", "ragbits-guardrails==1.4.0.dev202601010248", "ragbits-chat==1.4.0.dev202601010248", "ragbits-core==1.4.0.dev202601010248"] [project.urls] "Homepage" = "https://github.com/deepsense-ai/ragbits" @@ -41,88 +41,71 @@ dependencies = ["ragbits-document-search==1.4.0.dev202601010248", "ragbits-cli== [project.optional-dependencies] chroma = [ - "chromadb>=1.0.0,<2.0.0", + "ragbits-core[chroma]==1.4.0.dev202601010248", ] hf = [ - "datasets>=3.0.1,<4.0.0", + "ragbits-core[hf]==1.4.0.dev202601010248", ] s3 = [ - "boto3>=1.35.42,<2.0.0", + "ragbits-core[s3]==1.4.0.dev202601010248", ] gcs = [ - "gcloud-aio-storage>=9.3.0,<10.0.0" + "ragbits-core[gcs]==1.4.0.dev202601010248" ] azure=[ - "azure-storage-blob>=12.24.1,<13.0.0", - "azure-identity>=1.19.0,<2.0.0", - "azure-core>=1.32.0,<2.0.0" + "ragbits-core[azure]==1.4.0.dev202601010248", ] local = [ - "sentence-transformers>=4.0.2,<5.0.0", - "torch>=2.2.1,<3.0.0", - "transformers>=4.44.2,<5.0.0", - "numpy>=1.26.0,<2.0.0", - "accelerate>=1.7.0", + "ragbits-core[local]==1.4.0.dev202601010248", ] openai = [ - "openai>=1.91.0,<2.0.0", + "ragbits-guardrails[openai]==1.4.0.dev202601010248", ] otel = [ - "opentelemetry-api>=1.27.0,<2.0.0", + "ragbits-core[otel]==1.4.0.dev202601010248", ] logfire = [ - "logfire>=3.19.0,<4.0.0", - "logfire[system-metrics]>=3.19.0,<4.0.0", - "opentelemetry-api>=1.27.0,<2.0.0", + "ragbits-core[logfire]==1.4.0.dev202601010248", ] promptfoo = [ - "PyYAML>=6.0.2,<7.0.0", + "ragbits-core[promptfoo]==1.4.0.dev202601010248", ] qdrant = [ - "qdrant-client>=1.12.1,<2.0.0", + "ragbits-core[qdrant]==1.4.0.dev202601010248", ] relari = [ - "continuous-eval>=0.3.12,<1.0.0", + "ragbits-evaluate[relari]==1.4.0.dev202601010248", ] fastembed = [ - "fastembed>=0.4.2,<1.0.0" + "ragbits-core[fastembed]==1.4.0.dev202601010248" ] fastembed-gpu = [ - "fastembed-gpu>=0.4.2,<1.0.0", + "ragbits-core[fastembed-gpu]==1.4.0.dev202601010248", ] pgvector = [ - "asyncpg>=0.30.0,<1.0.0", + "ragbits-core[pgvector]==1.4.0.dev202601010248", ] -ray = ["ray[data]>=2.43.0,<3.0.0"] +ray = ["ragbits-document-search[ray]==1.4.0.dev202601010248"] unstructured = [ - "unstructured>=0.16.9,<1.0.0", - "unstructured-client>=0.26.0,<1.0.0", + "ragbits-document-search[unstructured]==1.4.0.dev202601010248", ] sql = [ - "sqlalchemy>=2.0.39,<3.0.0", + "ragbits-chat[sql]==1.4.0.dev202601010248", ] a2a = [ - "a2a-sdk>=0.2.9,<1.0.0", - "fastapi>=0.115.0,<1.0.0", - "uvicorn>=0.31.0,<1.0.0", + "ragbits-agents[a2a]==1.4.0.dev202601010248", ] mcp = [ - "mcp>=1.9.4,<2.0.0", + "ragbits-agents[mcp]==1.4.0.dev202601010248", ] weaviate = [ - "weaviate-client>=4.15.4,<5.0.0", + "ragbits-core[weaviate]==1.4.0.dev202601010248", ] google_drive = [ - "google-api-core>=2.25.1,<3.0.0", - "google-api-python-client>=2.174.0,<3.0.0", - "google-auth>=2.40.3,<3.0.0", - "google-auth-httplib2>=0.2.0,<1.0.0", - "google-auth-oauthlib>=1.2.2,<2.0.0", - "google-oauth2-tool>=0.0.3,<1.0.0", - "googleapis-common-protos>=1.70.0,<2.0.0" + "ragbits-core[google_drive]==1.4.0.dev202601010248" ] cli = [ - "textual>=0.85.2,<1.0.0", + "ragbits-agents[cli]==1.4.0.dev202601010248", ] [build-system] diff --git a/pyproject.toml b/pyproject.toml index d3d6f10a05..2d7ae083a9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,8 +15,8 @@ dependencies = [ "mike>=2.1.3", ] -[tool.uv] -dev-dependencies = [ +[dependency-groups] +dev = [ "aiosqlite>=0.21.0", "pre-commit~=3.8.0", "pytest~=8.3.3", @@ -41,6 +41,7 @@ dev-dependencies = [ ] [tool.uv.sources] +ragbits = { workspace = true } ragbits-cli = { workspace = true } ragbits-core = { workspace = true } ragbits-document-search = { workspace = true } @@ -51,6 +52,7 @@ ragbits-agents = { workspace = true } [tool.uv.workspace] members = [ + "packages/ragbits", "packages/ragbits-cli", "packages/ragbits-core", "packages/ragbits-document-search", @@ -60,37 +62,13 @@ members = [ "packages/ragbits-agents", ] -[tool.pytest] -norecursedirs = [ - '.git', - '.tox', - '.env', - 'dist', - 'build', - 'migrations', - 'docker', - 'config', - 'notebooks', - 'research', -] -python_files = ['test_*.py'] -addopts = [ - '-ra', - '--showlocals', - '--strict-markers', - '--ignore=docs/conf.py', - '--ignore=setup.py', - '--ignore=ci', - '--ignore=.eggs', - '--doctest-modules', - '--doctest-glob=\*.rst', - '--tb=short', -] - [tool.pytest.ini_options] -addopts = "--import-mode=importlib" +norecursedirs = ".git .tox .env dist build migrations docker config notebooks research scripts examples" +python_files = "test_*.py" +addopts = "--import-mode=importlib -ra --showlocals --strict-markers --ignore=docs/conf.py --ignore=setup.py --ignore=ci --ignore=.eggs --tb=short " #--doctest-modules --doctest-glob=*.rst asyncio_mode = "auto" asyncio_default_fixture_loop_scope = "function" +pythonpath = "./" [tool.coverage.run] omit = [ diff --git a/scripts/update_nightly_versions.py b/scripts/update_nightly_versions.py index d986d13b40..c7e5df8663 100644 --- a/scripts/update_nightly_versions.py +++ b/scripts/update_nightly_versions.py @@ -35,23 +35,32 @@ def update_package_version(package_dir: Path, new_version: str) -> None: data = tomlkit.parse(pyproject_path.read_text()) # Update version - if "project" in data and "version" in data["project"]: - old_version = data["project"]["version"] - data["project"]["version"] = new_version + if (project := data.get("project")) and "version" in project: + old_version = project["version"] + project["version"] = new_version print(f"Updated {package_dir.name}: {old_version} → {new_version}") else: print(f"Warning: No version field found in {pyproject_path}") return # Update dependencies to use the same nightly version - if "project" in data and "dependencies" in data["project"]: - dependencies = data["project"]["dependencies"] + if dependencies := project.get("dependencies"): for i, dep in enumerate(dependencies): if dep.startswith("ragbits-") and "==" in dep: package_name = dep.split("==")[0] dependencies[i] = f"{package_name}=={new_version}" print(f"Updated dependency in {package_dir.name}: {package_name}=={new_version}") + # Update optional-dependencies (extras) to use the same nightly version + if optional_deps := project.get("optional-dependencies"): + for extra_name, deps in optional_deps.items(): + for i, dep in enumerate(deps): + if dep.startswith("ragbits-") and "==" in dep: + # Extract package name with or without extras + package_part = dep.split("==")[0] + deps[i] = f"{package_part}=={new_version}" + print(f"Updated extra '{extra_name}' in {package_dir.name}: {package_part}=={new_version}") + # Write updated pyproject.toml pyproject_path.write_text(tomlkit.dumps(data)) diff --git a/uv.lock b/uv.lock index 318766a842..532d726abe 100644 --- a/uv.lock +++ b/uv.lock @@ -1,5 +1,5 @@ version = 1 -revision = 2 +revision = 3 requires-python = ">=3.10" resolution-markers = [ "python_full_version < '3.11' and platform_machine == 'x86_64' and sys_platform == 'darwin'", @@ -26,6 +26,7 @@ resolution-markers = [ [manifest] members = [ + "ragbits", "ragbits-agents", "ragbits-chat", "ragbits-cli", @@ -4621,22 +4622,22 @@ wheels = [ [[package]] name = "pypdfium2" -version = "4.30.1" +version = "4.30.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/55/d4/905e621c62598a08168c272b42fc00136c8861cfce97afb2a1ecbd99487a/pypdfium2-4.30.1.tar.gz", hash = "sha256:5f5c7c6d03598e107d974f66b220a49436aceb191da34cda5f692be098a814ce", size = 164854, upload-time = "2024-12-19T19:28:11.459Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a1/14/838b3ba247a0ba92e4df5d23f2bea9478edcfd72b78a39d6ca36ccd84ad2/pypdfium2-4.30.0.tar.gz", hash = "sha256:48b5b7e5566665bc1015b9d69c1ebabe21f6aee468b509531c3c8318eeee2e16", size = 140239, upload-time = "2024-05-09T18:33:17.552Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/30/8e/3ce0856b3af0f058dd3655ce57d31d1dbde4d4bd0e172022ffbf1b58a4b9/pypdfium2-4.30.1-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:e07c47633732cc18d890bb7e965ad28a9c5a932e548acb928596f86be2e5ae37", size = 2889836, upload-time = "2024-12-19T19:27:39.531Z" }, - { url = "https://files.pythonhosted.org/packages/c2/6a/f6995b21f9c6c155487ce7df70632a2df1ba49efcb291b9943ea45f28b15/pypdfium2-4.30.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:5ea2d44e96d361123b67b00f527017aa9c847c871b5714e013c01c3eb36a79fe", size = 2769232, upload-time = "2024-12-19T19:27:43.227Z" }, - { url = "https://files.pythonhosted.org/packages/53/91/79060923148e6d380b8a299b32bba46d70aac5fe1cd4f04320bcbd1a48d3/pypdfium2-4.30.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1de7a3a36803171b3f66911131046d65a732f9e7834438191cb58235e6163c4e", size = 2847531, upload-time = "2024-12-19T19:27:46.372Z" }, - { url = "https://files.pythonhosted.org/packages/a8/6c/93507f87c159e747eaab54352c0fccbaec3f1b3749d0bb9085a47899f898/pypdfium2-4.30.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b8a4231efb13170354f568c722d6540b8d5b476b08825586d48ef70c40d16e03", size = 2636266, upload-time = "2024-12-19T19:27:49.767Z" }, - { url = "https://files.pythonhosted.org/packages/24/dc/d56f74a092f2091e328d6485f16562e2fc51cffb0ad6d5c616d80c1eb53c/pypdfium2-4.30.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f434a4934e8244aa95343ffcf24e9ad9f120dbb4785f631bb40a88c39292493", size = 2919296, upload-time = "2024-12-19T19:27:51.767Z" }, - { url = "https://files.pythonhosted.org/packages/be/d9/a2f1ee03d47fbeb48bcfde47ed7155772739622cfadf7135a84ba6a97824/pypdfium2-4.30.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f454032a0bc7681900170f67d8711b3942824531e765f91c2f5ce7937f999794", size = 2866119, upload-time = "2024-12-19T19:27:53.561Z" }, - { url = "https://files.pythonhosted.org/packages/01/47/6aa019c32aa39d3f33347c458c0c5887e84096cbe444456402bc97e66704/pypdfium2-4.30.1-py3-none-musllinux_1_1_aarch64.whl", hash = "sha256:bbf9130a72370ee9d602e39949b902db669a2a1c24746a91e5586eb829055d9f", size = 6228684, upload-time = "2024-12-19T19:27:56.781Z" }, - { url = "https://files.pythonhosted.org/packages/4c/07/2954c15b3f7c85ceb80cad36757fd41b3aba0dd14e68f4bed9ce3f2e7e74/pypdfium2-4.30.1-py3-none-musllinux_1_1_i686.whl", hash = "sha256:5cb52884b1583b96e94fd78542c63bb42e06df5e8f9e52f8f31f5ad5a1e53367", size = 6231815, upload-time = "2024-12-19T19:28:00.351Z" }, - { url = "https://files.pythonhosted.org/packages/b4/9b/b4667e95754624f4af5a912001abba90c046e1c80d4a4e887f0af664ffec/pypdfium2-4.30.1-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:1a9e372bd4867ff223cc8c338e33fe11055dad12f22885950fc27646cc8d9122", size = 6313429, upload-time = "2024-12-19T19:28:02.536Z" }, - { url = "https://files.pythonhosted.org/packages/43/38/f9e77cf55ba5546a39fa659404b78b97de2ca344848271e7731efb0954cd/pypdfium2-4.30.1-py3-none-win32.whl", hash = "sha256:421f1cf205e213e07c1f2934905779547f4f4a2ff2f59dde29da3d511d3fc806", size = 2834989, upload-time = "2024-12-19T19:28:04.657Z" }, - { url = "https://files.pythonhosted.org/packages/a4/f3/8d3a350efb4286b5ebdabcf6736f51d8e3b10dbe68804c6930b00f5cf329/pypdfium2-4.30.1-py3-none-win_amd64.whl", hash = "sha256:598a7f20264ab5113853cba6d86c4566e4356cad037d7d1f849c8c9021007e05", size = 2960157, upload-time = "2024-12-19T19:28:07.772Z" }, - { url = "https://files.pythonhosted.org/packages/e1/6b/2706497c86e8d69fb76afe5ea857fe1794621aa0f3b1d863feb953fe0f22/pypdfium2-4.30.1-py3-none-win_arm64.whl", hash = "sha256:c2b6d63f6d425d9416c08d2511822b54b8e3ac38e639fc41164b1d75584b3a8c", size = 2814810, upload-time = "2024-12-19T19:28:09.857Z" }, + { url = "https://files.pythonhosted.org/packages/c7/9a/c8ff5cc352c1b60b0b97642ae734f51edbab6e28b45b4fcdfe5306ee3c83/pypdfium2-4.30.0-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:b33ceded0b6ff5b2b93bc1fe0ad4b71aa6b7e7bd5875f1ca0cdfb6ba6ac01aab", size = 2837254, upload-time = "2024-05-09T18:32:48.653Z" }, + { url = "https://files.pythonhosted.org/packages/21/8b/27d4d5409f3c76b985f4ee4afe147b606594411e15ac4dc1c3363c9a9810/pypdfium2-4.30.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:4e55689f4b06e2d2406203e771f78789bd4f190731b5d57383d05cf611d829de", size = 2707624, upload-time = "2024-05-09T18:32:51.458Z" }, + { url = "https://files.pythonhosted.org/packages/11/63/28a73ca17c24b41a205d658e177d68e198d7dde65a8c99c821d231b6ee3d/pypdfium2-4.30.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e6e50f5ce7f65a40a33d7c9edc39f23140c57e37144c2d6d9e9262a2a854854", size = 2793126, upload-time = "2024-05-09T18:32:53.581Z" }, + { url = "https://files.pythonhosted.org/packages/d1/96/53b3ebf0955edbd02ac6da16a818ecc65c939e98fdeb4e0958362bd385c8/pypdfium2-4.30.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3d0dd3ecaffd0b6dbda3da663220e705cb563918249bda26058c6036752ba3a2", size = 2591077, upload-time = "2024-05-09T18:32:55.99Z" }, + { url = "https://files.pythonhosted.org/packages/ec/ee/0394e56e7cab8b5b21f744d988400948ef71a9a892cbeb0b200d324ab2c7/pypdfium2-4.30.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cc3bf29b0db8c76cdfaac1ec1cde8edf211a7de7390fbf8934ad2aa9b4d6dfad", size = 2864431, upload-time = "2024-05-09T18:32:57.911Z" }, + { url = "https://files.pythonhosted.org/packages/65/cd/3f1edf20a0ef4a212a5e20a5900e64942c5a374473671ac0780eaa08ea80/pypdfium2-4.30.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1f78d2189e0ddf9ac2b7a9b9bd4f0c66f54d1389ff6c17e9fd9dc034d06eb3f", size = 2812008, upload-time = "2024-05-09T18:32:59.886Z" }, + { url = "https://files.pythonhosted.org/packages/c8/91/2d517db61845698f41a2a974de90762e50faeb529201c6b3574935969045/pypdfium2-4.30.0-py3-none-musllinux_1_1_aarch64.whl", hash = "sha256:5eda3641a2da7a7a0b2f4dbd71d706401a656fea521b6b6faa0675b15d31a163", size = 6181543, upload-time = "2024-05-09T18:33:02.597Z" }, + { url = "https://files.pythonhosted.org/packages/ba/c4/ed1315143a7a84b2c7616569dfb472473968d628f17c231c39e29ae9d780/pypdfium2-4.30.0-py3-none-musllinux_1_1_i686.whl", hash = "sha256:0dfa61421b5eb68e1188b0b2231e7ba35735aef2d867d86e48ee6cab6975195e", size = 6175911, upload-time = "2024-05-09T18:33:05.376Z" }, + { url = "https://files.pythonhosted.org/packages/7a/c4/9e62d03f414e0e3051c56d5943c3bf42aa9608ede4e19dc96438364e9e03/pypdfium2-4.30.0-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:f33bd79e7a09d5f7acca3b0b69ff6c8a488869a7fab48fdf400fec6e20b9c8be", size = 6267430, upload-time = "2024-05-09T18:33:08.067Z" }, + { url = "https://files.pythonhosted.org/packages/90/47/eda4904f715fb98561e34012826e883816945934a851745570521ec89520/pypdfium2-4.30.0-py3-none-win32.whl", hash = "sha256:ee2410f15d576d976c2ab2558c93d392a25fb9f6635e8dd0a8a3a5241b275e0e", size = 2775951, upload-time = "2024-05-09T18:33:10.567Z" }, + { url = "https://files.pythonhosted.org/packages/25/bd/56d9ec6b9f0fc4e0d95288759f3179f0fcd34b1a1526b75673d2f6d5196f/pypdfium2-4.30.0-py3-none-win_amd64.whl", hash = "sha256:90dbb2ac07be53219f56be09961eb95cf2473f834d01a42d901d13ccfad64b4c", size = 2892098, upload-time = "2024-05-09T18:33:13.107Z" }, + { url = "https://files.pythonhosted.org/packages/be/7a/097801205b991bc3115e8af1edb850d30aeaf0118520b016354cf5ccd3f6/pypdfium2-4.30.0-py3-none-win_arm64.whl", hash = "sha256:119b2969a6d6b1e8d55e99caaf05290294f2d0fe49c12a3f17102d01c441bd29", size = 2752118, upload-time = "2024-05-09T18:33:15.489Z" }, ] [[package]] @@ -5048,16 +5049,127 @@ wheels = [ [[package]] name = "ragbits" -version = "0.0.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/21/f7/4dfc757e4d7adff14a8fad9989f47a88c063ca88456d0525d0d5d3593f54/ragbits-0.0.1.tar.gz", hash = "sha256:673b663730ee2ef0d2813ffe1d1619f3ce5042748a4c02c094c787f499f4c886", size = 1378, upload-time = "2024-09-13T15:27:07.347Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/96/e1/2cef0ba62827617ebcd183ebe3a7b3ca7cfee8d45f99c953b4db005b9a88/ragbits-0.0.1-py2.py3-none-any.whl", hash = "sha256:101ef35803f4b78b600b7381cf8f3c86f18018fa54156055d9b6e95f708475bf", size = 1354, upload-time = "2024-09-13T15:27:05.758Z" }, +version = "1.4.0.dev202601010248" +source = { editable = "packages/ragbits" } +dependencies = [ + { name = "ragbits-agents" }, + { name = "ragbits-chat" }, + { name = "ragbits-cli" }, + { name = "ragbits-core" }, + { name = "ragbits-document-search" }, + { name = "ragbits-evaluate" }, + { name = "ragbits-guardrails" }, +] + +[package.optional-dependencies] +a2a = [ + { name = "ragbits-agents", extra = ["a2a"] }, +] +azure = [ + { name = "ragbits-core", extra = ["azure"] }, +] +chroma = [ + { name = "ragbits-core", extra = ["chroma"] }, +] +cli = [ + { name = "ragbits-agents", extra = ["cli"] }, +] +fastembed = [ + { name = "ragbits-core", extra = ["fastembed"] }, +] +fastembed-gpu = [ + { name = "ragbits-core", extra = ["fastembed-gpu"] }, +] +gcs = [ + { name = "ragbits-core", extra = ["gcs"] }, +] +google-drive = [ + { name = "ragbits-core", extra = ["google-drive"] }, +] +hf = [ + { name = "ragbits-core", extra = ["hf"] }, +] +local = [ + { name = "ragbits-core", extra = ["local"] }, +] +logfire = [ + { name = "ragbits-core", extra = ["logfire"] }, +] +mcp = [ + { name = "ragbits-agents", extra = ["mcp"] }, +] +openai = [ + { name = "ragbits-guardrails", extra = ["openai"] }, +] +otel = [ + { name = "ragbits-core", extra = ["otel"] }, +] +pgvector = [ + { name = "ragbits-core", extra = ["pgvector"] }, +] +promptfoo = [ + { name = "ragbits-core", extra = ["promptfoo"] }, +] +qdrant = [ + { name = "ragbits-core", extra = ["qdrant"] }, +] +ray = [ + { name = "ragbits-document-search", extra = ["ray"] }, +] +relari = [ + { name = "ragbits-evaluate", extra = ["relari"] }, +] +s3 = [ + { name = "ragbits-core", extra = ["s3"] }, +] +sql = [ + { name = "ragbits-chat", extra = ["sql"] }, +] +unstructured = [ + { name = "ragbits-document-search", extra = ["unstructured"] }, +] +weaviate = [ + { name = "ragbits-core", extra = ["weaviate"] }, ] +[package.metadata] +requires-dist = [ + { name = "ragbits-agents", editable = "packages/ragbits-agents" }, + { name = "ragbits-agents", extras = ["a2a"], marker = "extra == 'a2a'", editable = "packages/ragbits-agents" }, + { name = "ragbits-agents", extras = ["cli"], marker = "extra == 'cli'", editable = "packages/ragbits-agents" }, + { name = "ragbits-agents", extras = ["mcp"], marker = "extra == 'mcp'", editable = "packages/ragbits-agents" }, + { name = "ragbits-chat", editable = "packages/ragbits-chat" }, + { name = "ragbits-chat", extras = ["sql"], marker = "extra == 'sql'", editable = "packages/ragbits-chat" }, + { name = "ragbits-cli", editable = "packages/ragbits-cli" }, + { name = "ragbits-core", editable = "packages/ragbits-core" }, + { name = "ragbits-core", extras = ["azure"], marker = "extra == 'azure'", editable = "packages/ragbits-core" }, + { name = "ragbits-core", extras = ["chroma"], marker = "extra == 'chroma'", editable = "packages/ragbits-core" }, + { name = "ragbits-core", extras = ["fastembed"], marker = "extra == 'fastembed'", editable = "packages/ragbits-core" }, + { name = "ragbits-core", extras = ["fastembed-gpu"], marker = "extra == 'fastembed-gpu'", editable = "packages/ragbits-core" }, + { name = "ragbits-core", extras = ["gcs"], marker = "extra == 'gcs'", editable = "packages/ragbits-core" }, + { name = "ragbits-core", extras = ["google-drive"], marker = "extra == 'google-drive'", editable = "packages/ragbits-core" }, + { name = "ragbits-core", extras = ["hf"], marker = "extra == 'hf'", editable = "packages/ragbits-core" }, + { name = "ragbits-core", extras = ["local"], marker = "extra == 'local'", editable = "packages/ragbits-core" }, + { name = "ragbits-core", extras = ["logfire"], marker = "extra == 'logfire'", editable = "packages/ragbits-core" }, + { name = "ragbits-core", extras = ["otel"], marker = "extra == 'otel'", editable = "packages/ragbits-core" }, + { name = "ragbits-core", extras = ["pgvector"], marker = "extra == 'pgvector'", editable = "packages/ragbits-core" }, + { name = "ragbits-core", extras = ["promptfoo"], marker = "extra == 'promptfoo'", editable = "packages/ragbits-core" }, + { name = "ragbits-core", extras = ["qdrant"], marker = "extra == 'qdrant'", editable = "packages/ragbits-core" }, + { name = "ragbits-core", extras = ["s3"], marker = "extra == 's3'", editable = "packages/ragbits-core" }, + { name = "ragbits-core", extras = ["weaviate"], marker = "extra == 'weaviate'", editable = "packages/ragbits-core" }, + { name = "ragbits-document-search", editable = "packages/ragbits-document-search" }, + { name = "ragbits-document-search", extras = ["ray"], marker = "extra == 'ray'", editable = "packages/ragbits-document-search" }, + { name = "ragbits-document-search", extras = ["unstructured"], marker = "extra == 'unstructured'", editable = "packages/ragbits-document-search" }, + { name = "ragbits-evaluate", editable = "packages/ragbits-evaluate" }, + { name = "ragbits-evaluate", extras = ["relari"], marker = "extra == 'relari'", editable = "packages/ragbits-evaluate" }, + { name = "ragbits-guardrails", editable = "packages/ragbits-guardrails" }, + { name = "ragbits-guardrails", extras = ["openai"], marker = "extra == 'openai'", editable = "packages/ragbits-guardrails" }, +] +provides-extras = ["chroma", "hf", "s3", "gcs", "azure", "local", "openai", "otel", "logfire", "promptfoo", "qdrant", "relari", "fastembed", "fastembed-gpu", "pgvector", "ray", "unstructured", "sql", "a2a", "mcp", "weaviate", "google-drive", "cli"] + [[package]] name = "ragbits-agents" -version = "1.4.0.dev202512100237" +version = "1.4.0.dev202601010248" source = { editable = "packages/ragbits-agents" } dependencies = [ { name = "ragbits-core" }, @@ -5093,7 +5205,7 @@ provides-extras = ["a2a", "mcp", "openai", "cli"] [[package]] name = "ragbits-chat" -version = "1.4.0.dev202512100237" +version = "1.4.0.dev202601010248" source = { editable = "packages/ragbits-chat" } dependencies = [ { name = "bcrypt" }, @@ -5141,7 +5253,7 @@ dev = [ [[package]] name = "ragbits-cli" -version = "1.4.0.dev202512100237" +version = "1.4.0.dev202601010248" source = { editable = "packages/ragbits-cli" } dependencies = [ { name = "ragbits-core" }, @@ -5156,7 +5268,7 @@ requires-dist = [ [[package]] name = "ragbits-core" -version = "1.4.0.dev202512100237" +version = "1.4.0.dev202601010248" source = { editable = "packages/ragbits-core" } dependencies = [ { name = "aiohttp" }, @@ -5294,7 +5406,7 @@ dev = [ [[package]] name = "ragbits-document-search" -version = "1.4.0.dev202512100237" +version = "1.4.0.dev202601010248" source = { editable = "packages/ragbits-document-search" } dependencies = [ { name = "docling" }, @@ -5321,12 +5433,12 @@ dev = [ { name = "pytest" }, { name = "pytest-asyncio" }, { name = "pytest-cov" }, - { name = "ragbits" }, + { name = "ragbits", extra = ["local"] }, ] [package.metadata] requires-dist = [ - { name = "docling", specifier = ">=2.15.1,<3.0.0" }, + { name = "docling", extras = ["easyocr"], specifier = ">=2.15.1,<3.0.0" }, { name = "filetype", specifier = ">=1.2.0,<2.0.0" }, { name = "opencv-python", specifier = ">=4.11.0.86,<5.0.0.0" }, { name = "python-pptx", specifier = ">=1.0.0,<2.0.0" }, @@ -5345,12 +5457,12 @@ dev = [ { name = "pytest", specifier = "~=8.3.3" }, { name = "pytest-asyncio", specifier = "~=0.24.0" }, { name = "pytest-cov", specifier = "~=5.0.0" }, - { name = "ragbits", extras = ["local"] }, + { name = "ragbits", extras = ["local"], editable = "packages/ragbits" }, ] [[package]] name = "ragbits-evaluate" -version = "1.4.0.dev202512100237" +version = "1.4.0.dev202601010248" source = { editable = "packages/ragbits-evaluate" } dependencies = [ { name = "datasets" }, @@ -5400,7 +5512,7 @@ dev = [ [[package]] name = "ragbits-guardrails" -version = "1.4.0.dev202512100237" +version = "1.4.0.dev202601010248" source = { editable = "packages/ragbits-guardrails" } dependencies = [ { name = "ragbits-core" }, @@ -7404,11 +7516,11 @@ wheels = [ [[package]] name = "xlsxwriter" -version = "3.2.3" +version = "3.2.9" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a7/d1/e026d33dd5d552e5bf3a873dee54dad66b550230df8290d79394f09b2315/xlsxwriter-3.2.3.tar.gz", hash = "sha256:ad6fd41bdcf1b885876b1f6b7087560aecc9ae5a9cc2ba97dcac7ab2e210d3d5", size = 209135, upload-time = "2025-04-17T10:11:23.481Z" } +sdist = { url = "https://files.pythonhosted.org/packages/46/2c/c06ef49dc36e7954e55b802a8b231770d286a9758b3d936bd1e04ce5ba88/xlsxwriter-3.2.9.tar.gz", hash = "sha256:254b1c37a368c444eac6e2f867405cc9e461b0ed97a3233b2ac1e574efb4140c", size = 215940, upload-time = "2025-09-16T00:16:21.63Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/37/b1/a252d499f2760b314fcf264d2b36fcc4343a1ecdb25492b210cb0db70a68/XlsxWriter-3.2.3-py3-none-any.whl", hash = "sha256:593f8296e8a91790c6d0378ab08b064f34a642b3feb787cf6738236bd0a4860d", size = 169433, upload-time = "2025-04-17T10:11:21.329Z" }, + { url = "https://files.pythonhosted.org/packages/3a/0c/3662f4a66880196a590b202f0db82d919dd2f89e99a27fadef91c4a33d41/xlsxwriter-3.2.9-py3-none-any.whl", hash = "sha256:9a5db42bc5dff014806c58a20b9eae7322a134abb6fce3c92c181bfb275ec5b3", size = 175315, upload-time = "2025-09-16T00:16:20.108Z" }, ] [[package]]