Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/generate_workflows_lib/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ classifiers = [
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Programming Language :: Python :: 3.15",
"Typing :: Typed",
]
dependencies = ["Jinja2", "tox"]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ def get_test_job_datas(
"py312": "3.12",
"py313": "3.13",
"py314": "3.14",
"py315": "3.15",
}

test_job_datas = []
Expand Down Expand Up @@ -471,10 +472,7 @@ def _generate_workflow_with_template(
runner="ubuntu-latest",
control_runner="ubuntu-latest",
):
if (
name in {"loongsuite_lint", "loongsuite_test"}
and len(job_datas) > max_jobs
):
if name == "loongsuite_lint" and len(job_datas) > max_jobs:
raise RuntimeError(
f"{name} dynamic matrix has {len(job_datas)} jobs, which exceeds "
f"the {max_jobs}-job single-workflow limit. Add an explicit "
Expand All @@ -484,14 +482,20 @@ def _generate_workflow_with_template(
for stale_workflow_path in workflow_directory_path.glob(f"{name}_*.yml"):
stale_workflow_path.unlink()

# Github seems to limit the amount of jobs in a workflow file, that is why
# they are split in groups of 250 per workflow file.
for file_number, job_datas in enumerate(
[
if name == "loongsuite_test":
# A matrix can hold at most 256 jobs, so the dynamic test matrix is
# split into chunks of max_jobs. They stay in one workflow file, whose
# result job checks every chunk.
file_job_datas = [job_datas]
else:
# Github seems to limit the amount of jobs in a workflow file, that is
# why they are split in groups of 250 per workflow file.
file_job_datas = [
job_datas[index : index + max_jobs]
for index in range(0, len(job_datas), max_jobs)
]
):

for file_number, job_datas in enumerate(file_job_datas):
with open(
workflow_directory_path.joinpath(f"{name}_{file_number}.yml"), "w"
) as test_yml_file:
Expand All @@ -500,6 +504,10 @@ def _generate_workflow_with_template(
.get_template(f"{template_name}.yml.j2")
.render(
job_datas=job_datas,
job_chunks=[
job_datas[index : index + max_jobs]
for index in range(0, len(job_datas), max_jobs)
],
file_number=file_number,
runner=runner,
control_runner=control_runner,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,11 @@ jobs:
packages: ${% raw %}{{ steps.detect.outputs.packages }}{% endraw %}
degraded: ${% raw %}{{ steps.detect.outputs.degraded }}{% endraw %}
reason: ${% raw %}{{ steps.detect.outputs.reason }}{% endraw %}
has_jobs: ${% raw %}{{ steps.matrix.outputs.has_jobs }}{% endraw %}
matrix: ${% raw %}{{ steps.matrix.outputs.matrix }}{% endraw %}
{%- for chunk in job_chunks %}
{%- set suffix = "" if loop.first else "_" ~ loop.index0 %}
has_jobs{{ suffix }}: ${% raw %}{{ steps.matrix{% endraw %}{{ suffix }}{% raw %}.outputs.has_jobs }}{% endraw %}
matrix{{ suffix }}: ${% raw %}{{ steps.matrix{% endraw %}{{ suffix }}{% raw %}.outputs.matrix }}{% endraw %}
{%- endfor %}
steps:
- name: Checkout repo @ SHA - ${% raw %}{{ github.sha }}{% endraw %}
uses: actions/checkout@v4
Expand Down Expand Up @@ -79,12 +82,15 @@ jobs:
run_detector "$detector"
fi

- name: Select LoongSuite test matrix
id: matrix
{%- for chunk in job_chunks %}
{%- set suffix = "" if loop.first else "_" ~ loop.index0 %}

- name: Select LoongSuite test matrix{{ "" if loop.first else " " ~ loop.index0 }}
id: matrix{{ suffix }}
shell: bash
env:
LOONGSUITE_ALL_JOBS: >-
{{ job_datas | tojson }}
{{ chunk | tojson }}
LOONGSUITE_FULL: ${% raw %}{{ steps.detect.outputs.full }}{% endraw %}
LOONGSUITE_PACKAGES: ${% raw %}{{ steps.detect.outputs.packages }}{% endraw %}
run: |
Expand All @@ -100,17 +106,20 @@ jobs:
else
run_selector "$selector"
fi
{%- endfor %}
{%- for chunk in job_chunks %}
{%- set suffix = "" if loop.first else "_" ~ loop.index0 %}

loongsuite_test:
loongsuite_test{{ suffix }}:
name: LoongSuite ${% raw %}{{ matrix.ui_name }}{% endraw %}
needs: loongsuite_changes
if: ${% raw %}{{ needs.loongsuite_changes.outputs.has_jobs == 'true' }}{% endraw %}
if: ${% raw %}{{ needs.loongsuite_changes.outputs.has_jobs{% endraw %}{{ suffix }}{% raw %} == 'true' }}{% endraw %}
runs-on: ${% raw %}{{ matrix.os }}{% endraw %}
timeout-minutes: 30
strategy:
fail-fast: false
max-parallel: 20
matrix: ${% raw %}{{ fromJSON(needs.loongsuite_changes.outputs.matrix) }}{% endraw %}
matrix: ${% raw %}{{ fromJSON(needs.loongsuite_changes.outputs.matrix{% endraw %}{{ suffix }}{% raw %}) }}{% endraw %}
steps:
- name: Checkout repo @ SHA - ${% raw %}{{ github.sha }}{% endraw %}
uses: actions/checkout@v4
Expand All @@ -130,12 +139,16 @@ jobs:

- name: Run tests
run: tox -c tox-loongsuite.ini -e ${% raw %}{{ matrix.tox_env }}{% endraw %} -- -ra
{%- endfor %}

loongsuite_test_result:
name: LoongSuite Test {{ file_number }} result
needs:
- loongsuite_changes
- loongsuite_test
{%- for chunk in job_chunks[1:] %}
- loongsuite_test_{{ loop.index }}
{%- endfor %}
if: ${% raw %}{{ always() }}{% endraw %}
runs-on: {{ control_runner }}
steps:
Expand All @@ -145,6 +158,10 @@ jobs:
changes_result="${% raw %}{{ needs.loongsuite_changes.result }}{% endraw %}"
test_result="${% raw %}{{ needs.loongsuite_test.result }}{% endraw %}"
has_jobs="${% raw %}{{ needs.loongsuite_changes.outputs.has_jobs }}{% endraw %}"
{%- for chunk in job_chunks[1:] %}
test_result_{{ loop.index }}="${% raw %}{{ needs.loongsuite_test_{% endraw %}{{ loop.index }}{% raw %}.result }}{% endraw %}"
has_jobs_{{ loop.index }}="${% raw %}{{ needs.loongsuite_changes.outputs.has_jobs_{% endraw %}{{ loop.index }}{% raw %} }}{% endraw %}"
{%- endfor %}
detector_degraded="${% raw %}{{ needs.loongsuite_changes.outputs.degraded }}{% endraw %}"
detector_reason="${% raw %}{{ needs.loongsuite_changes.outputs.reason }}{% endraw %}"
echo "::notice::LoongSuite detector degraded=$detector_degraded reason=$detector_reason"
Expand All @@ -160,4 +177,14 @@ jobs:
echo "::error::loongsuite_test ended with $test_result"
exit 1
fi
{%- for chunk in job_chunks[1:] %}
if [[ "$test_result_{{ loop.index }}" == "skipped" && "$has_jobs_{{ loop.index }}" != "false" ]]; then
echo "::error::loongsuite_test_{{ loop.index }} skipped unexpectedly with has_jobs_{{ loop.index }}=$has_jobs_{{ loop.index }}"
exit 1
fi
if [[ "$test_result_{{ loop.index }}" != "success" && "$test_result_{{ loop.index }}" != "skipped" ]]; then
echo "::error::loongsuite_test_{{ loop.index }} ended with $test_result_{{ loop.index }}"
exit 1
fi
{%- endfor %}
echo "LoongSuite test matrix completed with $test_result"
67 changes: 66 additions & 1 deletion .github/workflows/loongsuite_test_0.yml

Large diffs are not rendered by default.

5 changes: 5 additions & 0 deletions CHANGELOG-loongsuite.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
QwenPaw stay on Python 3.13 and older: `crewai`, `openhands-ai` and `qwenpaw`
require Python < 3.14, and the LangChain tests use `langchain` 0.3, whose
`langchain.chains` does not import on Python 3.14.
- Test LoongSuite instrumentation packages and `loongsuite-distro` on Python
3.15 and add the Python 3.15 classifier. LiteLLM, Google ADK (whose tests
install `litellm`) and Vita stay on Python 3.14 and older: `litellm` requires
Python < 3.15, its older releases need `fastuuid`, which has no Python 3.15
wheels and does not build there, and `vita` has no Python 3.15 wheels.

### Changed

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ classifiers = [
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Programming Language :: Python :: 3.15",
]
dependencies = [
"opentelemetry-api >= 1.37.0",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ classifiers = [
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Programming Language :: Python :: 3.15",
]
dependencies = [
"opentelemetry-api ~= 1.37",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ classifiers = [
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Programming Language :: Python :: 3.15",
]
dependencies = [
"opentelemetry-api ~= 1.37",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ classifiers = [
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Programming Language :: Python :: 3.15",
]
dependencies = [
"opentelemetry-api >= 1.37.0",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ classifiers = [
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Programming Language :: Python :: 3.15",
]
dependencies = [
"opentelemetry-api ~= 1.37",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ classifiers = [
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Programming Language :: Python :: 3.15",
]
dependencies = [
"opentelemetry-api >= 1.37.0",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ classifiers = [
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Programming Language :: Python :: 3.15",
]
dependencies = [
"opentelemetry-api ~= 1.37",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ classifiers = [
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Programming Language :: Python :: 3.15",
]
dependencies = [
"opentelemetry-api >= 1.37.0",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ classifiers = [
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Programming Language :: Python :: 3.15",
]
dependencies = [
"opentelemetry-api ~= 1.37",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ classifiers = [
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Programming Language :: Python :: 3.15",
]
dependencies = [
"loongsuite-instrumentation-langchain",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ classifiers = [
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Programming Language :: Python :: 3.15",
]
dependencies = [
"opentelemetry-api >= 1.37.0",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ classifiers = [
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Programming Language :: Python :: 3.15",
]
dependencies = [
"opentelemetry-api >= 1.37.0, < 1.40",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ classifiers = [
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Programming Language :: Python :: 3.15",
]
dependencies = [
"opentelemetry-api ~= 1.37",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ classifiers = [
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Programming Language :: Python :: 3.15",
]
dependencies = [
"opentelemetry-api >= 1.37.0",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ conventions** and should be treated as experimental.

## Compatibility

- Python: `>= 3.8, <= 3.14`
- Python: `>= 3.8, <= 3.15`
- Mem0 / `mem0ai`: `>= 1.0.0`
- OpenTelemetry API: `>= 1.20.0`

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ classifiers = [
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Programming Language :: Python :: 3.15",
]
dependencies = [
"wrapt >=1.17.3, < 2.0.0",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ classifiers = [
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Programming Language :: Python :: 3.15",
]
dependencies = [
"opentelemetry-api ~= 1.37",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ classifiers = [
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Programming Language :: Python :: 3.15",
]
dependencies = [
"opentelemetry-api >= 1.37.0",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ classifiers = [
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Programming Language :: Python :: 3.15",
]
dependencies = [
"opentelemetry-api ~= 1.37",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ classifiers = [
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Programming Language :: Python :: 3.15",
]
dependencies = [
"opentelemetry-api >= 1.37.0",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ classifiers = [
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Programming Language :: Python :: 3.15",
]
dependencies = [
"opentelemetry-api ~= 1.37",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ classifiers = [
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Programming Language :: Python :: 3.15",
]
dependencies = [
"opentelemetry-api >= 1.37.0",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ classifiers = [
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Programming Language :: Python :: 3.15",
]
dependencies = [
"opentelemetry-api >= 1.37.0",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ classifiers = [
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Programming Language :: Python :: 3.15",
]
dependencies = [
"opentelemetry-api ~= 1.37",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ classifiers = [
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Programming Language :: Python :: 3.15",
]
dependencies = [
"opentelemetry-api ~= 1.37",
Expand Down
1 change: 1 addition & 0 deletions loongsuite-distro/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ classifiers = [
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Programming Language :: Python :: 3.15",
"Typing :: Typed",
]
dependencies = [
Expand Down
Loading
Loading