From 1829031010b59804afbff7d0d797943deaef4df7 Mon Sep 17 00:00:00 2001 From: Matthias Georgi Date: Sun, 12 Jan 2025 08:44:15 +0100 Subject: [PATCH] Summarize RSS example --- poetry.lock | 691 +++++++++++++++++- pyproject.toml | 1 + src/nodetool/metadata/nodes.json | 609 ++++++++++++--- src/nodetool/metadata/types.py | 21 +- src/nodetool/nodes/nodetool/__init__.py | 1 + src/nodetool/nodes/nodetool/dataframe.py | 49 ++ src/nodetool/nodes/nodetool/network/http.py | 20 + src/nodetool/nodes/nodetool/network/rss.py | 126 ++++ src/nodetool/nodes/nodetool/text.py | 196 ++++- src/nodetool/nodes/ollama/agents.py | 3 + .../workflows/examples/Summarize RSS.json | 451 ++++++++++++ .../context_menus/ConnectableNodes.tsx | 2 + 12 files changed, 2059 insertions(+), 111 deletions(-) create mode 100644 src/nodetool/nodes/nodetool/network/rss.py create mode 100644 src/nodetool/workflows/examples/Summarize RSS.json diff --git a/poetry.lock b/poetry.lock index b3d5b28c..777d2054 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.4 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.0.0 and should not be changed by hand. [[package]] name = "accelerate" @@ -6,6 +6,8 @@ version = "1.1.1" description = "Accelerate" optional = false python-versions = ">=3.9.0" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "accelerate-1.1.1-py3-none-any.whl", hash = "sha256:61edd81762131b8d4bede008643fa1e1f3bf59bec710ebda9771443e24feae02"}, {file = "accelerate-1.1.1.tar.gz", hash = "sha256:0d39dfac557052bc735eb2703a0e87742879e1e40b88af8a2f9a93233d4cd7db"}, @@ -37,6 +39,8 @@ version = "2.4.0" description = "Addict is a dictionary whose items can be set using both attribute and item syntax." optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "addict-2.4.0-py3-none-any.whl", hash = "sha256:249bb56bbfd3cdc2a004ea0ff4c2b6ddc84d53bc2194761636eb314d5cfa5dfc"}, {file = "addict-2.4.0.tar.gz", hash = "sha256:b3b2210e0e067a281f5646c8c5db92e99b7231ea8b0eb5f74dbdf9e259d4e494"}, @@ -48,6 +52,8 @@ version = "3.2.0" description = "Simple DNS resolver for asyncio" optional = false python-versions = "*" +groups = ["main"] +markers = "(python_version >= \"3.12\" or python_version <= \"3.11\") and (sys_platform == \"linux\" or sys_platform == \"darwin\")" files = [ {file = "aiodns-3.2.0-py3-none-any.whl", hash = "sha256:e443c0c27b07da3174a109fd9e736d69058d808f144d3c9d56dbd1776964c5f5"}, {file = "aiodns-3.2.0.tar.gz", hash = "sha256:62869b23409349c21b072883ec8998316b234c9a9e36675756e8e317e8768f72"}, @@ -62,6 +68,8 @@ version = "24.1.0" description = "File support for asyncio." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "aiofiles-24.1.0-py3-none-any.whl", hash = "sha256:b4ec55f4195e3eb5d7abd1bf7e061763e864dd4954231fb8539a0ef8bb8260e5"}, {file = "aiofiles-24.1.0.tar.gz", hash = "sha256:22a075c9e5a3810f0c2e48f3008c94d68c65d763b9b03857924c99e57355166c"}, @@ -73,6 +81,8 @@ version = "2.4.4" description = "Happy Eyeballs for asyncio" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "aiohappyeyeballs-2.4.4-py3-none-any.whl", hash = "sha256:a980909d50efcd44795c4afeca523296716d50cd756ddca6af8c65b996e27de8"}, {file = "aiohappyeyeballs-2.4.4.tar.gz", hash = "sha256:5fdd7d87889c63183afc18ce9271f9b0a7d32c2303e394468dd45d514a757745"}, @@ -84,6 +94,8 @@ version = "3.11.2" description = "Async http client/server framework (asyncio)" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "aiohttp-3.11.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:783741f534c14957fbe657d62a34b947ec06db23d45a2fd4a8aeb73d9c84d7e6"}, {file = "aiohttp-3.11.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:435f7a08d8aa42371a94e7c141205a9cb092ba551084b5e0c57492e6673601a3"}, @@ -185,6 +197,8 @@ version = "2.9.1" description = "Simple retry client for aiohttp" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "aiohttp_retry-2.9.1-py3-none-any.whl", hash = "sha256:66d2759d1921838256a05a3f80ad7e724936f083e35be5abb5e16eed6be6dc54"}, {file = "aiohttp_retry-2.9.1.tar.gz", hash = "sha256:8eb75e904ed4ee5c2ec242fefe85bf04240f685391c4879d8f541d6028ff01f1"}, @@ -199,6 +213,8 @@ version = "1.3.2" description = "aiosignal: a list of registered asynchronous callbacks" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "aiosignal-1.3.2-py2.py3-none-any.whl", hash = "sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5"}, {file = "aiosignal-1.3.2.tar.gz", hash = "sha256:a8c255c66fafb1e499c9351d0bf32ff2d8a0321595ebac3b93713656d2436f54"}, @@ -213,6 +229,8 @@ version = "0.7.0" description = "Reusable constraint types to use with typing.Annotated" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, @@ -224,6 +242,8 @@ version = "0.39.0" description = "The official Python library for the anthropic API" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "anthropic-0.39.0-py3-none-any.whl", hash = "sha256:ea17093ae0ce0e1768b0c46501d6086b5bcd74ff39d68cd2d6396374e9de7c09"}, {file = "anthropic-0.39.0.tar.gz", hash = "sha256:94671cc80765f9ce693f76d63a97ee9bef4c2d6063c044e983d21a2e262f63ba"}, @@ -248,6 +268,8 @@ version = "4.9.3" description = "ANTLR 4.9.3 runtime for Python 3.7" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "antlr4-python3-runtime-4.9.3.tar.gz", hash = "sha256:f224469b4168294902bb1efa80a8bf7855f24c99aef99cbefc1bcd3cce77881b"}, ] @@ -258,6 +280,8 @@ version = "4.7.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "anyio-4.7.0-py3-none-any.whl", hash = "sha256:ea60c3723ab42ba6fff7e8ccb0488c898ec538ff4df1f1d5e642c3601d07e352"}, {file = "anyio-4.7.0.tar.gz", hash = "sha256:2f834749c602966b7d456a7567cafcb309f96482b5081d14ac93ccd457f9dd48"}, @@ -280,6 +304,8 @@ version = "3.8.1" description = "ASGI specs, helper code, and adapters" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "asgiref-3.8.1-py3-none-any.whl", hash = "sha256:3e1e3ecc849832fe52ccf2cb6686b7a55f82bb1d6aee72a58826471390335e47"}, {file = "asgiref-3.8.1.tar.gz", hash = "sha256:c343bd80a0bec947a9860adb4c432ffa7db769836c64238fc34bdc3fec84d590"}, @@ -297,6 +323,8 @@ version = "5.0.1" description = "Timeout context manager for asyncio programs" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version < \"3.11\"" files = [ {file = "async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c"}, {file = "async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3"}, @@ -308,6 +336,8 @@ version = "24.3.0" description = "Classes Without Boilerplate" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "attrs-24.3.0-py3-none-any.whl", hash = "sha256:ac96cd038792094f438ad1f6ff80837353805ac950cd2aa0e0625ef19850c308"}, {file = "attrs-24.3.0.tar.gz", hash = "sha256:8f5c07333d543103541ba7be0e2ce16eeee8130cb0b3f9238ab904ce1e85baff"}, @@ -327,6 +357,8 @@ version = "0.2.1" description = "LTS Port of Python audioop" optional = false python-versions = ">=3.13" +groups = ["main"] +markers = "python_version >= \"3.13\"" files = [ {file = "audioop_lts-0.2.1-cp313-abi3-macosx_10_13_universal2.whl", hash = "sha256:fd1345ae99e17e6910f47ce7d52673c6a1a70820d78b67de1b7abb3af29c426a"}, {file = "audioop_lts-0.2.1-cp313-abi3-macosx_10_13_x86_64.whl", hash = "sha256:e175350da05d2087e12cea8e72a70a1a8b14a17e92ed2022952a4419689ede5e"}, @@ -369,6 +401,8 @@ version = "3.0.1" description = "Multi-library, cross-platform audio decoding." optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "audioread-3.0.1-py3-none-any.whl", hash = "sha256:4cdce70b8adc0da0a3c9e0d85fb10b3ace30fbdf8d1670fd443929b61d117c33"}, {file = "audioread-3.0.1.tar.gz", hash = "sha256:ac5460a5498c48bdf2e8e767402583a4dcd13f4414d286f42ce4379e8b35066d"}, @@ -383,6 +417,8 @@ version = "1.3.2" description = "The ultimate Python library in building OAuth and OpenID Connect servers and clients." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "Authlib-1.3.2-py2.py3-none-any.whl", hash = "sha256:ede026a95e9f5cdc2d4364a52103f5405e75aa156357e831ef2bfd0bc5094dfc"}, {file = "authlib-1.3.2.tar.gz", hash = "sha256:4b16130117f9eb82aa6eec97f6dd4673c3f960ac0283ccdae2897ee4bc030ba2"}, @@ -397,6 +433,8 @@ version = "13.1.0" description = "Pythonic bindings for FFmpeg's libraries." optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "av-13.1.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:a2af44fae6d16c3a40dd1c85bda41b449be08a2c172d8f44fb63395ccf6e6fb4"}, {file = "av-13.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0fea71fe06fd0dfe90a089200eb6468034797f860a321fa2d62e07d619c74749"}, @@ -449,6 +487,8 @@ version = "2.2.1" description = "Function decoration for backoff and retry" optional = false python-versions = ">=3.7,<4.0" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8"}, {file = "backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba"}, @@ -460,6 +500,8 @@ version = "4.2.1" description = "Modern password hashing for your software and your servers" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "bcrypt-4.2.1-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:1340411a0894b7d3ef562fb233e4b6ed58add185228650942bdc885362f32c17"}, {file = "bcrypt-4.2.1-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1ee315739bc8387aa36ff127afc99120ee452924e0df517a8f3e4c0187a0f5f"}, @@ -498,6 +540,8 @@ version = "4.12.3" description = "Screen-scraping library" optional = false python-versions = ">=3.6.0" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "beautifulsoup4-4.12.3-py3-none-any.whl", hash = "sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed"}, {file = "beautifulsoup4-4.12.3.tar.gz", hash = "sha256:74e3d1928edc070d21748185c46e3fb33490f22f52a3addee9aee0f4f7781051"}, @@ -519,6 +563,8 @@ version = "24.10.0" description = "The uncompromising code formatter." optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "black-24.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e6668650ea4b685440857138e5fe40cde4d652633b1bdffc62933d0db4ed9812"}, {file = "black-24.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1c536fcf674217e87b8cc3657b81809d3c085d7bf3ef262ead700da345bfa6ea"}, @@ -565,6 +611,8 @@ version = "1.35.63" description = "The AWS SDK for Python" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "boto3-1.35.63-py3-none-any.whl", hash = "sha256:d0f938d4f6f392b6ffc5e75fff14a42e5bbb5228675a0367c8af55398abadbec"}, {file = "boto3-1.35.63.tar.gz", hash = "sha256:deb593d9a0fb240deb4c43e4da8e6626d7c36be7b2fd2fe28f49d44d395b7de0"}, @@ -584,6 +632,8 @@ version = "1.35.92" description = "Low-level, data-driven core of boto 3." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "botocore-1.35.92-py3-none-any.whl", hash = "sha256:f94ae1e056a675bd67c8af98a6858d06e3927d974d6c712ed6e27bb1d11bee1d"}, {file = "botocore-1.35.92.tar.gz", hash = "sha256:caa7d5d857fed5b3d694b89c45f82b9f938f840e90a4eb7bf50aa65da2ba8f82"}, @@ -603,6 +653,8 @@ version = "1.1.0" description = "Python bindings for the Brotli compression library" optional = false python-versions = "*" +groups = ["main"] +markers = "(python_version >= \"3.12\" or python_version <= \"3.11\") and platform_python_implementation == \"CPython\"" files = [ {file = "Brotli-1.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e1140c64812cb9b06c922e77f1c26a75ec5e3f0fb2bf92cc8c58720dec276752"}, {file = "Brotli-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c8fd5270e906eef71d4a8d19b7c6a43760c6abcfcc10c9101d14eb2357418de9"}, @@ -737,6 +789,8 @@ version = "1.1.0.0" description = "Python CFFI bindings to the Brotli library" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "(python_version >= \"3.12\" or python_version <= \"3.11\") and platform_python_implementation != \"CPython\"" files = [ {file = "brotlicffi-1.1.0.0-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9b7ae6bd1a3f0df532b6d67ff674099a96d22bc0948955cb338488c31bfb8851"}, {file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19ffc919fa4fc6ace69286e0a23b3789b4219058313cf9b45625016bf7ff996b"}, @@ -776,6 +830,8 @@ version = "0.0.2" description = "Dummy package for Beautiful Soup (beautifulsoup4)" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "bs4-0.0.2-py2.py3-none-any.whl", hash = "sha256:abf8742c0805ef7f662dce4b51cca104cffe52b835238afc169142ab9b3fbccc"}, {file = "bs4-0.0.2.tar.gz", hash = "sha256:a48685c58f50fe127722417bae83fe6badf500d54b55f7e39ffe43b798653925"}, @@ -790,6 +846,8 @@ version = "1.2.2.post1" description = "A simple, correct Python build frontend" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "build-1.2.2.post1-py3-none-any.whl", hash = "sha256:1d61c0887fa860c01971625baae8bdd338e517b836a2f70dd1f7aa3a6b2fc5b5"}, {file = "build-1.2.2.post1.tar.gz", hash = "sha256:b36993e92ca9375a219c99e606a122ff365a760a2d4bba0caa09bd5278b608b7"}, @@ -815,6 +873,8 @@ version = "5.5.0" description = "Extensible memoizing collections and decorators" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "cachetools-5.5.0-py3-none-any.whl", hash = "sha256:02134e8439cdc2ffb62023ce1debca2944c3f289d66bb17ead3ab3dede74b292"}, {file = "cachetools-5.5.0.tar.gz", hash = "sha256:2cc24fb4cbe39633fb7badd9db9ca6295d766d9c2995f245725a46715d050f2a"}, @@ -826,6 +886,8 @@ version = "1.7.1" description = "cffi-based cairo bindings for Python" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "cairocffi-1.7.1-py3-none-any.whl", hash = "sha256:9803a0e11f6c962f3b0ae2ec8ba6ae45e957a146a004697a1ac1bbf16b073b3f"}, {file = "cairocffi-1.7.1.tar.gz", hash = "sha256:2e48ee864884ec4a3a34bfa8c9ab9999f688286eb714a15a43ec9d068c36557b"}, @@ -845,6 +907,8 @@ version = "2.7.1" description = "A Simple SVG Converter based on Cairo" optional = false python-versions = ">=3.5" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "CairoSVG-2.7.1-py3-none-any.whl", hash = "sha256:8a5222d4e6c3f86f1f7046b63246877a63b49923a1cd202184c3a634ef546b3b"}, {file = "CairoSVG-2.7.1.tar.gz", hash = "sha256:432531d72347291b9a9ebfb6777026b607563fd8719c46ee742db0aef7271ba0"}, @@ -867,6 +931,8 @@ version = "2024.12.14" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "certifi-2024.12.14-py3-none-any.whl", hash = "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56"}, {file = "certifi-2024.12.14.tar.gz", hash = "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db"}, @@ -878,6 +944,8 @@ version = "1.17.1" description = "Foreign Function Interface for Python calling C code." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, @@ -957,6 +1025,8 @@ version = "5.2.0" description = "Universal encoding detector for Python 3" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970"}, {file = "chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7"}, @@ -968,6 +1038,8 @@ version = "3.4.1" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de"}, {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176"}, @@ -1069,6 +1141,8 @@ version = "0.7.6" description = "Chromas fork of hnswlib" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "chroma_hnswlib-0.7.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f35192fbbeadc8c0633f0a69c3d3e9f1a4eab3a46b65458bbcbcabdd9e895c36"}, {file = "chroma_hnswlib-0.7.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6f007b608c96362b8f0c8b6b2ac94f67f83fcbabd857c378ae82007ec92f4d82"}, @@ -1110,6 +1184,8 @@ version = "0.5.23" description = "Chroma." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "chromadb-0.5.23-py3-none-any.whl", hash = "sha256:ffe5bdd7276d12cb682df0d38a13aa37573e6a3678e71889ac45f539ae05ad7e"}, {file = "chromadb-0.5.23.tar.gz", hash = "sha256:360a12b9795c5a33cb1f839d14410ccbde662ef1accd36153b0ae22312edabd1"}, @@ -1151,6 +1227,8 @@ version = "8.1.7" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, @@ -1165,6 +1243,8 @@ version = "0.1.4" description = "Create data objects" optional = false python-versions = ">=3.5" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "cobble-0.1.4-py3-none-any.whl", hash = "sha256:36c91b1655e599fd428e2b95fdd5f0da1ca2e9f1abb0bc871dec21a0e78a2b44"}, {file = "cobble-0.1.4.tar.gz", hash = "sha256:de38be1539992c8a06e569630717c485a5f91be2192c461ea2b220607dfa78aa"}, @@ -1176,10 +1256,12 @@ version = "0.4.6" description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["main", "dev"] files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] +markers = {main = "python_version <= \"3.11\" or python_version >= \"3.12\"", dev = "(python_version >= \"3.12\" or python_version <= \"3.11\") and sys_platform == \"win32\""} [[package]] name = "coloredlogs" @@ -1187,6 +1269,8 @@ version = "15.0.1" description = "Colored terminal output for Python's logging module" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "coloredlogs-15.0.1-py2.py3-none-any.whl", hash = "sha256:612ee75c546f53e92e70049c9dbfcc18c935a2b9a53b66085ce9ef6a6e5c0934"}, {file = "coloredlogs-15.0.1.tar.gz", hash = "sha256:7c991aa71a4577af2f82600d8f8f3a89f936baeaf9b50a9c197da014e5bf16b0"}, @@ -1204,6 +1288,8 @@ version = "1.3.1" description = "Python library for calculating contours of 2D quadrilateral grids" optional = false python-versions = ">=3.10" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "contourpy-1.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a045f341a77b77e1c5de31e74e966537bba9f3c4099b35bf4c2e3939dd54cdab"}, {file = "contourpy-1.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:500360b77259914f7805af7462e41f9cb7ca92ad38e9f94d6c8641b089338124"}, @@ -1277,6 +1363,8 @@ version = "43.0.3" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "cryptography-43.0.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:bf7a1932ac4176486eab36a19ed4c0492da5d97123f1406cf15e41b05e787d2e"}, {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63efa177ff54aec6e1c0aefaa1a241232dcd37413835a9b674b6e3f0ae2bfd3e"}, @@ -1326,6 +1414,8 @@ version = "0.7.0" description = "CSS selectors for Python ElementTree" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "cssselect2-0.7.0-py3-none-any.whl", hash = "sha256:fd23a65bfd444595913f02fc71f6b286c29261e354c41d722ca7a261a49b5969"}, {file = "cssselect2-0.7.0.tar.gz", hash = "sha256:1ccd984dab89fc68955043aca4e1b03e0cf29cad9880f6e28e3ba7a74b14aa5a"}, @@ -1345,6 +1435,8 @@ version = "0.12.1" description = "Composable style cycles" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"}, {file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"}, @@ -1360,6 +1452,8 @@ version = "3.1.0" description = "HuggingFace community-driven open-source library of datasets" optional = false python-versions = ">=3.8.0" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "datasets-3.1.0-py3-none-any.whl", hash = "sha256:dc8808a6d17838fe05e13b39aa7ac3ea0fd0806ed7004eaf4d4eb2c2a356bc61"}, {file = "datasets-3.1.0.tar.gz", hash = "sha256:c92cac049e0f9f85b0dd63739c68e564c657b1624bc2b66b1e13489062832e27"}, @@ -1402,6 +1496,8 @@ version = "4.4.2" description = "Decorators for Humans" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "decorator-4.4.2-py2.py3-none-any.whl", hash = "sha256:41fa54c2a0cc4ba648be4fd43cff00aedf5b9465c9bf18d64325bc225f08f760"}, {file = "decorator-4.4.2.tar.gz", hash = "sha256:e3a62f0520172440ca0dcc823749319382e377f37f140a0b99ef45fecb84bfe7"}, @@ -1413,6 +1509,8 @@ version = "0.7.1" description = "XML bomb protection for Python stdlib modules" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, @@ -1424,6 +1522,8 @@ version = "1.2.15" description = "Python @deprecated decorator to deprecate old python classes, functions or methods." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "Deprecated-1.2.15-py2.py3-none-any.whl", hash = "sha256:353bc4a8ac4bfc96800ddab349d89c25dec1079f65fd53acdcc1e0b975b21320"}, {file = "deprecated-1.2.15.tar.gz", hash = "sha256:683e561a90de76239796e6b6feac66b99030d2dd3fcf61ef996330f14bbb9b0d"}, @@ -1441,6 +1541,8 @@ version = "0.31.0" description = "State-of-the-art diffusion in PyTorch and JAX." optional = false python-versions = ">=3.8.0" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "diffusers-0.31.0-py3-none-any.whl", hash = "sha256:cbc498ae63f4abfc7c3a07649cdcbee229ef2f9a9a1f0d19c9bbaf22f8d30c1f"}, {file = "diffusers-0.31.0.tar.gz", hash = "sha256:b1d01a73e45d43a0630c299173915dddd69fc50f2ae8f2ab5de4fd245eaed72f"}, @@ -1473,6 +1575,8 @@ version = "0.3.8" description = "serialize all of Python" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "dill-0.3.8-py3-none-any.whl", hash = "sha256:c36ca9ffb54365bdd2f8eb3eff7d2a21237f8452b57ace88b1ac615b7e815bd7"}, {file = "dill-0.3.8.tar.gz", hash = "sha256:3ebe3c479ad625c4553aca177444d89b486b1d84982eeacded644afc0cf797ca"}, @@ -1488,6 +1592,8 @@ version = "1.9.0" description = "Distro - an OS platform information API" optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2"}, {file = "distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed"}, @@ -1499,6 +1605,8 @@ version = "2.7.0" description = "DNS toolkit" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "dnspython-2.7.0-py3-none-any.whl", hash = "sha256:b4c34b7d10b51bcc3a5071e7b8dee77939f1e878477eeecc965e9835f63c6c86"}, {file = "dnspython-2.7.0.tar.gz", hash = "sha256:ce9c432eda0dc91cf618a5cedf1a4e142651196bbcd2c80e89ed5a907e5cfaf1"}, @@ -1519,6 +1627,8 @@ version = "0.9" description = "Module for converting between datetime.timedelta and Go's Duration strings." optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "durationpy-0.9-py3-none-any.whl", hash = "sha256:e65359a7af5cedad07fb77a2dd3f390f8eb0b74cb845589fa6c057086834dd38"}, {file = "durationpy-0.9.tar.gz", hash = "sha256:fd3feb0a69a0057d582ef643c355c40d2fa1c942191f914d12203b1a01ac722a"}, @@ -1530,6 +1640,8 @@ version = "0.8.0" description = "A new flavour of deep learning operations" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "einops-0.8.0-py3-none-any.whl", hash = "sha256:9572fb63046264a862693b0a87088af3bdc8c068fde03de63453cbbde245465f"}, {file = "einops-0.8.0.tar.gz", hash = "sha256:63486517fed345712a8385c100cb279108d9d47e6ae59099b07657e983deae85"}, @@ -1541,6 +1653,8 @@ version = "2.2.0" description = "A robust email address syntax and deliverability validation library." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "email_validator-2.2.0-py3-none-any.whl", hash = "sha256:561977c2d73ce3611850a06fa56b414621e0c8faa9d66f2611407d87465da631"}, {file = "email_validator-2.2.0.tar.gz", hash = "sha256:cb690f344c617a714f22e66ae771445a1ceb46821152df8e165c5f9a364582b7"}, @@ -1556,6 +1670,8 @@ version = "2.0.0" description = "An implementation of lxml.xmlfile for the standard library" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa"}, {file = "et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54"}, @@ -1567,6 +1683,8 @@ version = "1.2.2" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" +groups = ["main", "dev"] +markers = "python_version < \"3.11\"" files = [ {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, @@ -1581,6 +1699,8 @@ version = "2.1.1" description = "execnet: rapid multi-Python deployment" optional = false python-versions = ">=3.8" +groups = ["dev"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "execnet-2.1.1-py3-none-any.whl", hash = "sha256:26dee51f1b80cebd6d0ca8e74dd8745419761d3bef34163928cbebbdc4749fdc"}, {file = "execnet-2.1.1.tar.gz", hash = "sha256:5189b52c6121c24feae288166ab41b32549c7e2348652736540b9e6e7d4e72e3"}, @@ -1595,6 +1715,8 @@ version = "0.115.5" description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "fastapi-0.115.5-py3-none-any.whl", hash = "sha256:596b95adbe1474da47049e802f9a65ab2ffa9c2b07e7efee70eb8a66c9f2f796"}, {file = "fastapi-0.115.5.tar.gz", hash = "sha256:0e7a4d0dc0d01c68df21887cce0945e72d3c48b9f4f79dfe7a7d53aa08fbb289"}, @@ -1627,6 +1749,8 @@ version = "0.0.7" description = "Run and manage FastAPI apps from the command line with FastAPI CLI. 🚀" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "fastapi_cli-0.0.7-py3-none-any.whl", hash = "sha256:d549368ff584b2804336c61f192d86ddea080c11255f375959627911944804f4"}, {file = "fastapi_cli-0.0.7.tar.gz", hash = "sha256:02b3b65956f526412515907a0793c9094abd4bfb5457b389f645b0ea6ba3605e"}, @@ -1640,12 +1764,30 @@ uvicorn = {version = ">=0.15.0", extras = ["standard"]} [package.extras] standard = ["uvicorn[standard] (>=0.15.0)"] +[[package]] +name = "feedparser" +version = "6.0.11" +description = "Universal feed parser, handles RSS 0.9x, RSS 1.0, RSS 2.0, CDF, Atom 0.3, and Atom 1.0 feeds" +optional = false +python-versions = ">=3.6" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" +files = [ + {file = "feedparser-6.0.11-py3-none-any.whl", hash = "sha256:0be7ee7b395572b19ebeb1d6aafb0028dee11169f1c934e0ed67d54992f4ad45"}, + {file = "feedparser-6.0.11.tar.gz", hash = "sha256:c9d0407b64c6f2a065d0ebb292c2b35c01050cc0dc33757461aaabdc4c4184d5"}, +] + +[package.dependencies] +sgmllib3k = "*" + [[package]] name = "ffmpeg-python" version = "0.2.0" description = "Python bindings for FFmpeg - with complex filtering support" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "ffmpeg-python-0.2.0.tar.gz", hash = "sha256:65225db34627c578ef0e11c8b1eb528bb35e024752f6f10b78c011f6f64c4127"}, {file = "ffmpeg_python-0.2.0-py3-none-any.whl", hash = "sha256:ac441a0404e053f8b6a1113a77c0f452f1cfc62f6344a769475ffdc0f56c23c5"}, @@ -1663,6 +1805,8 @@ version = "3.16.1" description = "A platform independent file lock." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "filelock-3.16.1-py3-none-any.whl", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0"}, {file = "filelock-3.16.1.tar.gz", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435"}, @@ -1679,6 +1823,8 @@ version = "24.12.23" description = "The FlatBuffers serialization format for Python" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "flatbuffers-24.12.23-py2.py3-none-any.whl", hash = "sha256:c418e0d48890f4142b92fd3e343e73a48f194e1f80075ddcc5793779b3585444"}, {file = "flatbuffers-24.12.23.tar.gz", hash = "sha256:2910b0bc6ae9b6db78dd2b18d0b7a0709ba240fb5585f286a3a2b30785c22dac"}, @@ -1690,6 +1836,8 @@ version = "4.55.3" description = "Tools to manipulate font files" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "fonttools-4.55.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1dcc07934a2165ccdc3a5a608db56fb3c24b609658a5b340aee4ecf3ba679dc0"}, {file = "fonttools-4.55.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f7d66c15ba875432a2d2fb419523f5d3d347f91f48f57b8b08a2dfc3c39b8a3f"}, @@ -1763,6 +1911,8 @@ version = "1.5.1" description = "Let your Python tests travel through time" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "freezegun-1.5.1-py3-none-any.whl", hash = "sha256:bf111d7138a8abe55ab48a71755673dbaa4ab87f4cff5634a4442dfec34c15f1"}, {file = "freezegun-1.5.1.tar.gz", hash = "sha256:b29dedfcda6d5e8e083ce71b2b542753ad48cfec44037b3fc79702e2980a89e9"}, @@ -1777,6 +1927,8 @@ version = "1.5.0" description = "A list-like structure which implements collections.abc.MutableSequence" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5b6a66c18b5b9dd261ca98dffcb826a525334b2f29e7caa54e182255c5f6a65a"}, {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d1b3eb7b05ea246510b43a7e53ed1653e55c2121019a97e60cad7efb881a97bb"}, @@ -1878,6 +2030,8 @@ version = "2024.9.0" description = "File-system specification" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "fsspec-2024.9.0-py3-none-any.whl", hash = "sha256:a0947d552d8a6efa72cc2c730b12c41d043509156966cca4fb157b0f2a0c574b"}, {file = "fsspec-2024.9.0.tar.gz", hash = "sha256:4b0afb90c2f21832df142f292649035d80b421f60a9e1c027802e5a0da2b04e8"}, @@ -1920,6 +2074,8 @@ version = "6.3.1" description = "Fixes mojibake and other problems with Unicode, after the fact" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "ftfy-6.3.1-py3-none-any.whl", hash = "sha256:7c70eb532015cd2f9adb53f101fb6c7945988d023a085d127d1573dc49dd0083"}, {file = "ftfy-6.3.1.tar.gz", hash = "sha256:9b3c3d90f84fb267fe64d375a07b7f8912d817cf86009ae134aa03e1819506ec"}, @@ -1934,6 +2090,8 @@ version = "1.0.0" description = "Clean single-source support for Python 3 and 2" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "future-1.0.0-py3-none-any.whl", hash = "sha256:929292d34f5872e70396626ef385ec22355a1fae8ad29e1a734c3e43f9fbc216"}, {file = "future-1.0.0.tar.gz", hash = "sha256:bd2968309307861edae1458a4f8a4f3598c03be43b97521076aebf5d94c07b05"}, @@ -1945,6 +2103,8 @@ version = "0.1.5.post20221221" description = "Collection of common code shared among different research projects in FAIR computer vision team" optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "fvcore-0.1.5.post20221221.tar.gz", hash = "sha256:f2fb0bb90572ae651c11c78e20493ed19b2240550a7e4bbb2d6de87bdd037860"}, ] @@ -1968,6 +2128,8 @@ version = "0.6.10" description = "Google Ai Generativelanguage API client library" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "google_ai_generativelanguage-0.6.10-py3-none-any.whl", hash = "sha256:854a2bf833d18be05ad5ef13c755567b66a4f4a870f099b62c61fe11bddabcf4"}, {file = "google_ai_generativelanguage-0.6.10.tar.gz", hash = "sha256:6fa642c964d8728006fe7e8771026fc0b599ae0ebeaf83caf550941e8e693455"}, @@ -1985,6 +2147,8 @@ version = "2.24.0" description = "Google API client core library" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "google_api_core-2.24.0-py3-none-any.whl", hash = "sha256:10d82ac0fca69c82a25b3efdeefccf6f28e02ebb97925a8cce8edbfe379929d9"}, {file = "google_api_core-2.24.0.tar.gz", hash = "sha256:e255640547a597a4da010876d333208ddac417d60add22b6851a0c66a831fcaf"}, @@ -2020,6 +2184,8 @@ version = "2.157.0" description = "Google API Client Library for Python" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "google_api_python_client-2.157.0-py2.py3-none-any.whl", hash = "sha256:0b0231db106324c659bf8b85f390391c00da57a60ebc4271e33def7aac198c75"}, {file = "google_api_python_client-2.157.0.tar.gz", hash = "sha256:2ee342d0967ad1cedec43ccd7699671d94bff151e1f06833ea81303f9a6d86fd"}, @@ -2038,6 +2204,8 @@ version = "2.37.0" description = "Google Authentication Library" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "google_auth-2.37.0-py2.py3-none-any.whl", hash = "sha256:42664f18290a6be591be5329a96fe30184be1a1badb7292a7f686a9659de9ca0"}, {file = "google_auth-2.37.0.tar.gz", hash = "sha256:0054623abf1f9c83492c63d3f47e77f0a544caa3d40b2d98e099a611c2dd5d00"}, @@ -2062,6 +2230,8 @@ version = "0.2.0" description = "Google Authentication Library: httplib2 transport" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "google-auth-httplib2-0.2.0.tar.gz", hash = "sha256:38aa7badf48f974f1eb9861794e9c0cb2a0511a4ec0679b1f886d108f5640e05"}, {file = "google_auth_httplib2-0.2.0-py2.py3-none-any.whl", hash = "sha256:b65a0a2123300dd71281a7bf6e64d65a0759287df52729bdd1ae2e47dc311a3d"}, @@ -2077,6 +2247,8 @@ version = "0.8.3" description = "Google Generative AI High level API client library and tools." optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "google_generativeai-0.8.3-py3-none-any.whl", hash = "sha256:1108ff89d5b8e59f51e63d1a8bf84701cd84656e17ca28d73aeed745e736d9b7"}, ] @@ -2100,6 +2272,8 @@ version = "1.66.0" description = "Common protobufs used in Google APIs" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "googleapis_common_protos-1.66.0-py2.py3-none-any.whl", hash = "sha256:d7abcd75fabb2e0ec9f74466401f6c119a0b498e27370e9be4c94cb7e382b8ed"}, {file = "googleapis_common_protos-1.66.0.tar.gz", hash = "sha256:c3e7b33d15fdca5374cc0a7346dd92ffa847425cc4ea941d970f13680052ec8c"}, @@ -2117,6 +2291,8 @@ version = "1.68.1" description = "HTTP/2-based RPC framework" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "grpcio-1.68.1-cp310-cp310-linux_armv7l.whl", hash = "sha256:d35740e3f45f60f3c37b1e6f2f4702c23867b9ce21c6410254c9c682237da68d"}, {file = "grpcio-1.68.1-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:d99abcd61760ebb34bdff37e5a3ba333c5cc09feda8c1ad42547bea0416ada78"}, @@ -2184,6 +2360,8 @@ version = "1.68.1" description = "Status proto mapping for gRPC" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "grpcio_status-1.68.1-py3-none-any.whl", hash = "sha256:66f3d8847f665acfd56221333d66f7ad8927903d87242a482996bdb45e8d28fd"}, {file = "grpcio_status-1.68.1.tar.gz", hash = "sha256:e1378d036c81a1610d7b4c7a146cd663dd13fcc915cf4d7d053929dba5bbb6e1"}, @@ -2200,6 +2378,8 @@ version = "0.14.0" description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, @@ -2211,6 +2391,8 @@ version = "1.0.7" description = "A minimal low-level HTTP client." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "httpcore-1.0.7-py3-none-any.whl", hash = "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd"}, {file = "httpcore-1.0.7.tar.gz", hash = "sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c"}, @@ -2232,6 +2414,8 @@ version = "0.22.0" description = "A comprehensive HTTP client library." optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "httplib2-0.22.0-py3-none-any.whl", hash = "sha256:14ae0a53c1ba8f3d37e9e27cf37eabb0fb9980f435ba405d546948b009dd64dc"}, {file = "httplib2-0.22.0.tar.gz", hash = "sha256:d7a10bc5ef5ab08322488bde8c726eeee5c8618723fdb399597ec58f3d82df81"}, @@ -2246,6 +2430,8 @@ version = "0.6.4" description = "A collection of framework independent HTTP protocol utils." optional = false python-versions = ">=3.8.0" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "httptools-0.6.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3c73ce323711a6ffb0d247dcd5a550b8babf0f757e86a52558fe5b86d6fefcc0"}, {file = "httptools-0.6.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:345c288418f0944a6fe67be8e6afa9262b18c7626c3ef3c28adc5eabc06a68da"}, @@ -2301,6 +2487,8 @@ version = "0.27.2" description = "The next generation HTTP client." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "httpx-0.27.2-py3-none-any.whl", hash = "sha256:7bb2708e112d8fdd7829cd4243970f0c223274051cb35ee80c03301ee29a3df0"}, {file = "httpx-0.27.2.tar.gz", hash = "sha256:f7c2be1d2f3c3c3160d441802406b206c2b76f5947b11115e6df10c6c65e66c2"}, @@ -2326,6 +2514,8 @@ version = "0.26.2" description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" optional = false python-versions = ">=3.8.0" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "huggingface_hub-0.26.2-py3-none-any.whl", hash = "sha256:98c2a5a8e786c7b2cb6fdeb2740893cba4d53e312572ed3d8afafda65b128c46"}, {file = "huggingface_hub-0.26.2.tar.gz", hash = "sha256:b100d853465d965733964d123939ba287da60a547087783ddff8a323f340332b"}, @@ -2360,6 +2550,8 @@ version = "10.0" description = "Human friendly output for text interfaces using Python" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "humanfriendly-10.0-py2.py3-none-any.whl", hash = "sha256:1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477"}, {file = "humanfriendly-10.0.tar.gz", hash = "sha256:6b0b831ce8f15f7300721aa49829fc4e83921a9a301cc7f606be6686a2288ddc"}, @@ -2374,6 +2566,8 @@ version = "1.3.2" description = "A framework for elegantly configuring complex applications" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "hydra-core-1.3.2.tar.gz", hash = "sha256:8a878ed67216997c3e9d88a8e72e7b4767e81af37afb4ea3334b269a4390a824"}, {file = "hydra_core-1.3.2-py3-none-any.whl", hash = "sha256:fa0238a9e31df3373b35b0bfb672c34cc92718d21f81311d8996a16de1141d8b"}, @@ -2390,6 +2584,8 @@ version = "3.10" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, @@ -2404,6 +2600,8 @@ version = "2.36.0" description = "Library for reading and writing a wide range of image, video, scientific, and volumetric data formats." optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "imageio-2.36.0-py3-none-any.whl", hash = "sha256:471f1eda55618ee44a3c9960911c35e647d9284c68f077e868df633398f137f0"}, {file = "imageio-2.36.0.tar.gz", hash = "sha256:1c8f294db862c256e9562354d65aa54725b8dafed7f10f02bb3ec20ec1678850"}, @@ -2437,6 +2635,8 @@ version = "0.5.1" description = "FFMPEG wrapper for Python" optional = false python-versions = ">=3.5" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "imageio-ffmpeg-0.5.1.tar.gz", hash = "sha256:0ed7a9b31f560b0c9d929c5291cd430edeb9bed3ce9a497480e536dd4326484c"}, {file = "imageio_ffmpeg-0.5.1-py3-none-macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:1460e84712b9d06910c1f7bb524096b0341d4b7844cea6c20e099d0a24e795b1"}, @@ -2455,6 +2655,8 @@ version = "3.0.1" description = "Easy-to-use, Pythonic and complete IMAP client library" optional = false python-versions = ">=3.7.0" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "IMAPClient-3.0.1-py2.py3-none-any.whl", hash = "sha256:d77d77caa4123e0233b5cf2b9c54a078522e63270b88d3f48653a28637fd8828"}, {file = "IMAPClient-3.0.1.zip", hash = "sha256:78e6d62fbfbbe233e1f0e0e993160fd665eb1fd35973acddc61c15719b22bc02"}, @@ -2469,6 +2671,8 @@ version = "8.5.0" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "importlib_metadata-8.5.0-py3-none-any.whl", hash = "sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b"}, {file = "importlib_metadata-8.5.0.tar.gz", hash = "sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7"}, @@ -2492,6 +2696,8 @@ version = "6.5.2" description = "Read resources from Python packages" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "importlib_resources-6.5.2-py3-none-any.whl", hash = "sha256:789cfdc3ed28c78b67a06acb8126751ced69a3d5f79c095a98298cd8a760ccec"}, {file = "importlib_resources-6.5.2.tar.gz", hash = "sha256:185f87adef5bcc288449d98fb4fba07cea78bc036455dd44c5fc4a2fe78fed2c"}, @@ -2511,6 +2717,8 @@ version = "2.0.0" description = "brain-dead simple config-ini parsing" optional = false python-versions = ">=3.7" +groups = ["dev"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, @@ -2522,6 +2730,8 @@ version = "0.3.4" description = "Python port of Inquirer.js (A collection of common interactive command-line user interfaces)" optional = false python-versions = ">=3.7,<4.0" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "InquirerPy-0.3.4-py3-none-any.whl", hash = "sha256:c65fdfbac1fa00e3ee4fb10679f4d3ed7a012abf4833910e63c295827fe2a7d4"}, {file = "InquirerPy-0.3.4.tar.gz", hash = "sha256:89d2ada0111f337483cb41ae31073108b2ec1e618a49d7110b0d7ade89fc197e"}, @@ -2540,6 +2750,8 @@ version = "0.1.10" description = "A library for providing I/O abstraction." optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "iopath-0.1.10.tar.gz", hash = "sha256:3311c16a4d9137223e20f141655759933e1eda24f8bff166af834af3c645ef01"}, ] @@ -2558,6 +2770,8 @@ version = "2.2.0" description = "Safely pass data to untrusted environments and back." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "itsdangerous-2.2.0-py3-none-any.whl", hash = "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef"}, {file = "itsdangerous-2.2.0.tar.gz", hash = "sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173"}, @@ -2569,6 +2783,8 @@ version = "3.1.5" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jinja2-3.1.5-py3-none-any.whl", hash = "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb"}, {file = "jinja2-3.1.5.tar.gz", hash = "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb"}, @@ -2586,6 +2802,8 @@ version = "0.8.2" description = "Fast iterable JSON parser." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jiter-0.8.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:ca8577f6a413abe29b079bc30f907894d7eb07a865c4df69475e868d73e71c7b"}, {file = "jiter-0.8.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b25bd626bde7fb51534190c7e3cb97cee89ee76b76d7585580e22f34f5e3f393"}, @@ -2671,6 +2889,8 @@ version = "1.0.1" description = "JSON Matching Expressions" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980"}, {file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"}, @@ -2682,6 +2902,8 @@ version = "1.4.2" description = "Lightweight pipelining with Python functions" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "joblib-1.4.2-py3-none-any.whl", hash = "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6"}, {file = "joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e"}, @@ -2693,6 +2915,8 @@ version = "1.33" description = "Apply JSON-Patches (RFC 6902)" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jsonpatch-1.33-py2.py3-none-any.whl", hash = "sha256:0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade"}, {file = "jsonpatch-1.33.tar.gz", hash = "sha256:9fcd4009c41e6d12348b4a0ff2563ba56a2923a7dfee731d004e212e1ee5030c"}, @@ -2707,8 +2931,12 @@ version = "1.7.0" description = "A final implementation of JSONPath for Python that aims to be standard compliant, including arithmetic and binary comparison operators and providing clear AST for metaprogramming." optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jsonpath-ng-1.7.0.tar.gz", hash = "sha256:f6f5f7fd4e5ff79c785f1573b394043b39849fb2bb47bcead935d12b00beab3c"}, + {file = "jsonpath_ng-1.7.0-py2-none-any.whl", hash = "sha256:898c93fc173f0c336784a3fa63d7434297544b7198124a68f9a3ef9597b0ae6e"}, + {file = "jsonpath_ng-1.7.0-py3-none-any.whl", hash = "sha256:f3d7f9e848cba1b6da28c55b1c26ff915dc9e0b1ba7e752a53d6da8d5cbd00b6"}, ] [package.dependencies] @@ -2720,6 +2948,8 @@ version = "3.0.0" description = "Identify specific nodes in a JSON document (RFC 6901)" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942"}, {file = "jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef"}, @@ -2731,6 +2961,8 @@ version = "4.23.0" description = "An implementation of JSON Schema validation for Python" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566"}, {file = "jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4"}, @@ -2752,6 +2984,8 @@ version = "2024.10.1" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jsonschema_specifications-2024.10.1-py3-none-any.whl", hash = "sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf"}, {file = "jsonschema_specifications-2024.10.1.tar.gz", hash = "sha256:0f38b83639958ce1152d02a7f062902c41c8fd20d558b0c34344292d417ae272"}, @@ -2766,6 +3000,8 @@ version = "1.3.1" description = "JSON Web Token library for Python 3." optional = false python-versions = ">= 3.6" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jwt-1.3.1-py3-none-any.whl", hash = "sha256:61c9170f92e736b530655e75374681d4fcca9cfa8763ab42be57353b2b203494"}, ] @@ -2779,6 +3015,8 @@ version = "1.4.8" description = "A fast implementation of the Cassowary constraint solver" optional = false python-versions = ">=3.10" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "kiwisolver-1.4.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:88c6f252f6816a73b1f8c904f7bbe02fd67c09a69f7cb8a0eecdbf5ce78e63db"}, {file = "kiwisolver-1.4.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c72941acb7b67138f35b879bbe85be0f6c6a70cab78fe3ef6db9c024d9223e5b"}, @@ -2868,6 +3106,8 @@ version = "0.7.4" description = "Open Source Differentiable Computer Vision Library for PyTorch" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "kornia-0.7.4-py2.py3-none-any.whl", hash = "sha256:1b816b4c45878a73531a500a46dbf61e646ec7a749bf8a4dd7a5833a04e28808"}, {file = "kornia-0.7.4.tar.gz", hash = "sha256:1f8dd6268ca5a2f2ec04b13c48da4dfb90ba2cfae7e31e0cc80d37f6520fa3f1"}, @@ -2889,6 +3129,8 @@ version = "0.1.8" description = "Low level implementations for computer vision in Rust" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "kornia_rs-0.1.8-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:1380edbbb841f9579bc8677d388e326b7363e1d0d49e8bab567ec9ef1aec782f"}, {file = "kornia_rs-0.1.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b82cf759df6f5fd935c1afd25aa3a145fd47f14af3650ad37c71189f49171bd8"}, @@ -2934,6 +3176,8 @@ version = "31.0.0" description = "Kubernetes python client" optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "kubernetes-31.0.0-py2.py3-none-any.whl", hash = "sha256:bf141e2d380c8520eada8b351f4e319ffee9636328c137aa432bc486ca1200e1"}, {file = "kubernetes-31.0.0.tar.gz", hash = "sha256:28945de906c8c259c1ebe62703b56a03b714049372196f854105afe4e6d014c0"}, @@ -2961,6 +3205,8 @@ version = "0.3.29" description = "Building applications with LLMs through composability" optional = false python-versions = "<4.0,>=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "langchain_core-0.3.29-py3-none-any.whl", hash = "sha256:817db1474871611a81105594a3e4d11704949661008e455a10e38ca9ff601a1a"}, {file = "langchain_core-0.3.29.tar.gz", hash = "sha256:773d6aeeb612e7ce3d996c0be403433d8c6a91e77bbb7a7461c13e15cfbe5b06"}, @@ -2984,6 +3230,8 @@ version = "0.3.4" description = "LangChain text splitting utilities" optional = false python-versions = "<4.0,>=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "langchain_text_splitters-0.3.4-py3-none-any.whl", hash = "sha256:432fdb39c161d4d0db16d61d38af068dc5dd4dd08082febd2fced81304b2725c"}, {file = "langchain_text_splitters-0.3.4.tar.gz", hash = "sha256:f3cedea469684483b4492d9f11dc2fa66388dab01c5d5c5307925515ab884c24"}, @@ -2998,6 +3246,8 @@ version = "0.2.10" description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform." optional = false python-versions = "<4.0,>=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "langsmith-0.2.10-py3-none-any.whl", hash = "sha256:b02f2f174189ff72e54c88b1aa63343defd6f0f676c396a690c63a4b6495dcc2"}, {file = "langsmith-0.2.10.tar.gz", hash = "sha256:153c7b3ccbd823528ff5bec84801e7e50a164e388919fc583252df5b27dd7830"}, @@ -3023,6 +3273,8 @@ version = "0.4" description = "Makes it easy to load subpackages and functions on demand." optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "lazy_loader-0.4-py3-none-any.whl", hash = "sha256:342aa8e14d543a154047afb4ba8ef17f5563baad3fc610d7b15b213b0f119efc"}, {file = "lazy_loader-0.4.tar.gz", hash = "sha256:47c75182589b91a4e1a85a136c074285a5ad4d9f39c63e0d7fb76391c4574cd1"}, @@ -3042,6 +3294,8 @@ version = "0.10.2.post1" description = "Python module for audio and music processing" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "librosa-0.10.2.post1-py3-none-any.whl", hash = "sha256:dc882750e8b577a63039f25661b7e39ec4cfbacc99c1cffba666cd664fb0a7a0"}, {file = "librosa-0.10.2.post1.tar.gz", hash = "sha256:cd99f16717cbcd1e0983e37308d1db46a6f7dfc2e396e5a9e61e6821e44bd2e7"}, @@ -3073,6 +3327,8 @@ version = "0.43.0" description = "lightweight wrapper around basic LLVM functionality" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "llvmlite-0.43.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a289af9a1687c6cf463478f0fa8e8aa3b6fb813317b0d70bf1ed0759eab6f761"}, {file = "llvmlite-0.43.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6d4fd101f571a31acb1559ae1af30f30b1dc4b3186669f92ad780e17c81e91bc"}, @@ -3103,6 +3359,8 @@ version = "1.1.0" description = "The official Python library for the lumaai API" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "lumaai-1.1.0-py3-none-any.whl", hash = "sha256:80ce2370989d81248e53bda7792c72556e4185966cb23c46965c20d50bfd2cd5"}, {file = "lumaai-1.1.0.tar.gz", hash = "sha256:2b192d79487b6c06b8237c41d4eddcaba844ac25fd03a3a0db74746ad0a8706a"}, @@ -3122,6 +3380,8 @@ version = "5.3.0" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "lxml-5.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:dd36439be765e2dde7660212b5275641edbc813e7b24668831a5c8ac91180656"}, {file = "lxml-5.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ae5fe5c4b525aa82b8076c1a59d642c17b6e8739ecf852522c6321852178119d"}, @@ -3276,6 +3536,8 @@ version = "1.9.0" description = "Convert Word documents from docx to simple and clean HTML and Markdown" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "mammoth-1.9.0-py2.py3-none-any.whl", hash = "sha256:0eea277316586f0ca65d86834aec4de5a0572c83ec54b4991f9bb520a891150f"}, {file = "mammoth-1.9.0.tar.gz", hash = "sha256:74f5dae10ca240fd9b7a0e1a6deaebe0aad23bc590633ef6f5e868aa9b7042a6"}, @@ -3290,6 +3552,8 @@ version = "3.0.0" description = "Python port of markdown-it. Markdown parsing, done right!" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, @@ -3314,6 +3578,8 @@ version = "0.14.1" description = "Convert HTML to markdown." optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "markdownify-0.14.1-py3-none-any.whl", hash = "sha256:4c46a6c0c12c6005ddcd49b45a5a890398b002ef51380cd319db62df5e09bc2a"}, {file = "markdownify-0.14.1.tar.gz", hash = "sha256:a62a7a216947ed0b8dafb95b99b2ef4a0edd1e18d5653c656f68f03db2bfb2f1"}, @@ -3329,6 +3595,8 @@ version = "0.0.1a3" description = "" optional = false python-versions = ">=3.10" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "markitdown-0.0.1a3-py3-none-any.whl", hash = "sha256:6efcab2f05714675486dc2ddf912415734b1caa0343f73f75d852046f04e5f37"}, {file = "markitdown-0.0.1a3.tar.gz", hash = "sha256:f6c8f5f7f5541e91c6c535218318968fefd71e2a6faa0eb782b3492e04cd023d"}, @@ -3358,6 +3626,8 @@ version = "3.0.2" description = "Safely add untrusted strings to HTML/XML markup." optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, @@ -3428,6 +3698,8 @@ version = "3.9.2" description = "Python plotting package" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "matplotlib-3.9.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:9d78bbc0cbc891ad55b4f39a48c22182e9bdaea7fc0e5dbd364f49f729ca1bbb"}, {file = "matplotlib-3.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c375cc72229614632c87355366bdf2570c2dac01ac66b8ad048d2dabadf2d0d4"}, @@ -3491,6 +3763,8 @@ version = "0.1.2" description = "Markdown URL utilities" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, @@ -3502,6 +3776,8 @@ version = "5.0.1" description = "Python extension for MurmurHash (MurmurHash3), a set of fast and robust hash functions." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "mmh3-5.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f0a4b4bf05778ed77d820d6e7d0e9bd6beb0c01af10e1ce9233f5d2f814fcafa"}, {file = "mmh3-5.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac7a391039aeab95810c2d020b69a94eb6b4b37d4e2374831e92db3a0cdf71c6"}, @@ -3615,6 +3891,8 @@ version = "1.6" description = "An implementation of time.monotonic() for Python 2 & < 3.3" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "monotonic-1.6-py2.py3-none-any.whl", hash = "sha256:68687e19a14f11f26d140dd5c86f3dba4bf5df58003000ed467e0e2a69bca96c"}, {file = "monotonic-1.6.tar.gz", hash = "sha256:3a55207bcfed53ddd5c5bae174524062935efed17792e9de2ad0205ce9ad63f7"}, @@ -3626,6 +3904,8 @@ version = "5.0.25" description = "A library that allows you to easily mock out tests based on AWS infrastructure" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "moto-5.0.25-py3-none-any.whl", hash = "sha256:ab790f9d7d08f30667a196af7cacead03e76c10be2d1148ea00a731d47918a1e"}, {file = "moto-5.0.25.tar.gz", hash = "sha256:deea8b158cec5a65c9635ae1fff4579d735b11ac8a0e5226fbbeb742ce0ce6b2"}, @@ -3673,6 +3953,8 @@ version = "1.0.3" description = "Video editing with Python" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "moviepy-1.0.3.tar.gz", hash = "sha256:2884e35d1788077db3ff89e763c5ba7bfddbd7ae9108c9bc809e7ba58fa433f5"}, ] @@ -3697,6 +3979,8 @@ version = "1.3.0" description = "Python library for arbitrary-precision floating-point arithmetic" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"}, {file = "mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f"}, @@ -3714,6 +3998,8 @@ version = "1.1.0" description = "MessagePack serializer" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "msgpack-1.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7ad442d527a7e358a469faf43fda45aaf4ac3249c8310a82f0ccff9164e5dccd"}, {file = "msgpack-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:74bed8f63f8f14d75eec75cf3d04ad581da6b914001b474a5d3cd3372c8cc27d"}, @@ -3787,6 +4073,8 @@ version = "6.1.0" description = "multidict implementation" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3380252550e372e8511d49481bd836264c009adb826b23fefcc5dd3c69692f60"}, {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:99f826cbf970077383d7de805c0681799491cb939c25450b9b5b3ced03ca99f1"}, @@ -3891,6 +4179,8 @@ version = "0.70.16" description = "better multiprocessing and multithreading in Python" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "multiprocess-0.70.16-pp310-pypy310_pp73-macosx_10_13_x86_64.whl", hash = "sha256:476887be10e2f59ff183c006af746cb6f1fd0eadcfd4ef49e605cbe2659920ee"}, {file = "multiprocess-0.70.16-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d951bed82c8f73929ac82c61f01a7b5ce8f3e5ef40f5b52553b4f547ce2b08ec"}, @@ -3915,6 +4205,8 @@ version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." optional = false python-versions = ">=3.5" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, @@ -3926,6 +4218,8 @@ version = "3.4.2" description = "Python package for creating and manipulating graphs and networks" optional = false python-versions = ">=3.10" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f"}, {file = "networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1"}, @@ -3945,6 +4239,8 @@ version = "0.60.0" description = "compiling Python code using LLVM" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "numba-0.60.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5d761de835cd38fb400d2c26bb103a2726f548dc30368853121d66201672e651"}, {file = "numba-0.60.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:159e618ef213fba758837f9837fb402bbe65326e60ba0633dbe6c7f274d42c1b"}, @@ -3979,6 +4275,8 @@ version = "1.26.4" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, @@ -4024,6 +4322,8 @@ version = "12.1.3.1" description = "CUBLAS native runtime libraries" optional = false python-versions = ">=3" +groups = ["main"] +markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and (python_version >= \"3.12\" or python_version <= \"3.11\")" files = [ {file = "nvidia_cublas_cu12-12.1.3.1-py3-none-manylinux1_x86_64.whl", hash = "sha256:ee53ccca76a6fc08fb9701aa95b6ceb242cdaab118c3bb152af4e579af792728"}, {file = "nvidia_cublas_cu12-12.1.3.1-py3-none-win_amd64.whl", hash = "sha256:2b964d60e8cf11b5e1073d179d85fa340c120e99b3067558f3cf98dd69d02906"}, @@ -4035,6 +4335,8 @@ version = "12.1.105" description = "CUDA profiling tools runtime libs." optional = false python-versions = ">=3" +groups = ["main"] +markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and (python_version >= \"3.12\" or python_version <= \"3.11\")" files = [ {file = "nvidia_cuda_cupti_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:e54fde3983165c624cb79254ae9818a456eb6e87a7fd4d56a2352c24ee542d7e"}, {file = "nvidia_cuda_cupti_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:bea8236d13a0ac7190bd2919c3e8e6ce1e402104276e6f9694479e48bb0eb2a4"}, @@ -4046,6 +4348,8 @@ version = "12.1.105" description = "NVRTC native runtime libraries" optional = false python-versions = ">=3" +groups = ["main"] +markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and (python_version >= \"3.12\" or python_version <= \"3.11\")" files = [ {file = "nvidia_cuda_nvrtc_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:339b385f50c309763ca65456ec75e17bbefcbbf2893f462cb8b90584cd27a1c2"}, {file = "nvidia_cuda_nvrtc_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:0a98a522d9ff138b96c010a65e145dc1b4850e9ecb75a0172371793752fd46ed"}, @@ -4057,6 +4361,8 @@ version = "12.1.105" description = "CUDA Runtime native Libraries" optional = false python-versions = ">=3" +groups = ["main"] +markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and (python_version >= \"3.12\" or python_version <= \"3.11\")" files = [ {file = "nvidia_cuda_runtime_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:6e258468ddf5796e25f1dc591a31029fa317d97a0a94ed93468fc86301d61e40"}, {file = "nvidia_cuda_runtime_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:dfb46ef84d73fababab44cf03e3b83f80700d27ca300e537f85f636fac474344"}, @@ -4068,6 +4374,8 @@ version = "9.1.0.70" description = "cuDNN runtime libraries" optional = false python-versions = ">=3" +groups = ["main"] +markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and (python_version >= \"3.12\" or python_version <= \"3.11\")" files = [ {file = "nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl", hash = "sha256:165764f44ef8c61fcdfdfdbe769d687e06374059fbb388b6c89ecb0e28793a6f"}, {file = "nvidia_cudnn_cu12-9.1.0.70-py3-none-win_amd64.whl", hash = "sha256:6278562929433d68365a07a4a1546c237ba2849852c0d4b2262a486e805b977a"}, @@ -4082,6 +4390,8 @@ version = "11.0.2.54" description = "CUFFT native runtime libraries" optional = false python-versions = ">=3" +groups = ["main"] +markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and (python_version >= \"3.12\" or python_version <= \"3.11\")" files = [ {file = "nvidia_cufft_cu12-11.0.2.54-py3-none-manylinux1_x86_64.whl", hash = "sha256:794e3948a1aa71fd817c3775866943936774d1c14e7628c74f6f7417224cdf56"}, {file = "nvidia_cufft_cu12-11.0.2.54-py3-none-win_amd64.whl", hash = "sha256:d9ac353f78ff89951da4af698f80870b1534ed69993f10a4cf1d96f21357e253"}, @@ -4093,6 +4403,8 @@ version = "10.3.2.106" description = "CURAND native runtime libraries" optional = false python-versions = ">=3" +groups = ["main"] +markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and (python_version >= \"3.12\" or python_version <= \"3.11\")" files = [ {file = "nvidia_curand_cu12-10.3.2.106-py3-none-manylinux1_x86_64.whl", hash = "sha256:9d264c5036dde4e64f1de8c50ae753237c12e0b1348738169cd0f8a536c0e1e0"}, {file = "nvidia_curand_cu12-10.3.2.106-py3-none-win_amd64.whl", hash = "sha256:75b6b0c574c0037839121317e17fd01f8a69fd2ef8e25853d826fec30bdba74a"}, @@ -4104,6 +4416,8 @@ version = "11.4.5.107" description = "CUDA solver native runtime libraries" optional = false python-versions = ">=3" +groups = ["main"] +markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and (python_version >= \"3.12\" or python_version <= \"3.11\")" files = [ {file = "nvidia_cusolver_cu12-11.4.5.107-py3-none-manylinux1_x86_64.whl", hash = "sha256:8a7ec542f0412294b15072fa7dab71d31334014a69f953004ea7a118206fe0dd"}, {file = "nvidia_cusolver_cu12-11.4.5.107-py3-none-win_amd64.whl", hash = "sha256:74e0c3a24c78612192a74fcd90dd117f1cf21dea4822e66d89e8ea80e3cd2da5"}, @@ -4120,6 +4434,8 @@ version = "12.1.0.106" description = "CUSPARSE native runtime libraries" optional = false python-versions = ">=3" +groups = ["main"] +markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and (python_version >= \"3.12\" or python_version <= \"3.11\")" files = [ {file = "nvidia_cusparse_cu12-12.1.0.106-py3-none-manylinux1_x86_64.whl", hash = "sha256:f3b50f42cf363f86ab21f720998517a659a48131e8d538dc02f8768237bd884c"}, {file = "nvidia_cusparse_cu12-12.1.0.106-py3-none-win_amd64.whl", hash = "sha256:b798237e81b9719373e8fae8d4f091b70a0cf09d9d85c95a557e11df2d8e9a5a"}, @@ -4134,6 +4450,8 @@ version = "2.20.5" description = "NVIDIA Collective Communication Library (NCCL) Runtime" optional = false python-versions = ">=3" +groups = ["main"] +markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and (python_version >= \"3.12\" or python_version <= \"3.11\")" files = [ {file = "nvidia_nccl_cu12-2.20.5-py3-none-manylinux2014_aarch64.whl", hash = "sha256:1fc150d5c3250b170b29410ba682384b14581db722b2531b0d8d33c595f33d01"}, {file = "nvidia_nccl_cu12-2.20.5-py3-none-manylinux2014_x86_64.whl", hash = "sha256:057f6bf9685f75215d0c53bf3ac4a10b3e6578351de307abad9e18a99182af56"}, @@ -4145,6 +4463,8 @@ version = "12.6.85" description = "Nvidia JIT LTO Library" optional = false python-versions = ">=3" +groups = ["main"] +markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and (python_version >= \"3.12\" or python_version <= \"3.11\")" files = [ {file = "nvidia_nvjitlink_cu12-12.6.85-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:eedc36df9e88b682efe4309aa16b5b4e78c2407eac59e8c10a6a47535164369a"}, {file = "nvidia_nvjitlink_cu12-12.6.85-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cf4eaa7d4b6b543ffd69d6abfb11efdeb2db48270d94dfd3a452c24150829e41"}, @@ -4157,6 +4477,8 @@ version = "12.1.105" description = "NVIDIA Tools Extension" optional = false python-versions = ">=3" +groups = ["main"] +markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and (python_version >= \"3.12\" or python_version <= \"3.11\")" files = [ {file = "nvidia_nvtx_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:dc21cf308ca5691e7c04d962e213f8a4aa9bbfa23d95412f452254c2caeb09e5"}, {file = "nvidia_nvtx_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:65f4d98982b31b60026e0e6de73fbdfc09d08a96f4656dd3665ca616a11e1e82"}, @@ -4168,6 +4490,8 @@ version = "3.2.2" description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "oauthlib-3.2.2-py3-none-any.whl", hash = "sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca"}, {file = "oauthlib-3.2.2.tar.gz", hash = "sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918"}, @@ -4184,6 +4508,8 @@ version = "0.4.4" description = "The official Python client for Ollama." optional = false python-versions = "<4.0,>=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "ollama-0.4.4-py3-none-any.whl", hash = "sha256:0f466e845e2205a1cbf5a2fef4640027b90beaa3b06c574426d8b6b17fd6e139"}, {file = "ollama-0.4.4.tar.gz", hash = "sha256:e1db064273c739babc2dde9ea84029c4a43415354741b6c50939ddd3dd0f7ffb"}, @@ -4199,6 +4525,8 @@ version = "2.3.0" description = "A flexible configuration library" optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "omegaconf-2.3.0-py3-none-any.whl", hash = "sha256:7b4df175cdb08ba400f45cae3bdcae7ba8365db4d165fc65fd04b050ab63b46b"}, {file = "omegaconf-2.3.0.tar.gz", hash = "sha256:d5d4b6d29955cc50ad50c46dc269bcd92c6e00f5f90d23ab5fee7bfca4ba4cc7"}, @@ -4214,6 +4542,8 @@ version = "1.20.0" description = "ONNX Runtime is a runtime accelerator for Machine Learning models" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "onnxruntime-1.20.0-cp310-cp310-macosx_13_0_universal2.whl", hash = "sha256:2ac38bc6cbf7bb8527ded58711af6ef2c8c59d070f0fde58f83824422526922a"}, {file = "onnxruntime-1.20.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5cfd5a22abc11b273ec76fa773e22db19b749e27bf1ed05dd50d207f1817aae1"}, @@ -4252,6 +4582,8 @@ version = "2.29.0" description = "Open reproduction of consastive language-image pretraining (CLIP) and related." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "open_clip_torch-2.29.0-py3-none-any.whl", hash = "sha256:86e50e7493efdb223daae369be41a0d614e30fd78316c30fa166ceac0e7a360e"}, {file = "open_clip_torch-2.29.0.tar.gz", hash = "sha256:f443d7c1ca30f0e4759b7d005cf1b208abc85611e5489140d1bccccedce655c1"}, @@ -4277,6 +4609,8 @@ version = "1.54.4" description = "The official Python library for the openai API" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "openai-1.54.4-py3-none-any.whl", hash = "sha256:0d95cef99346bf9b6d7fbf57faf61a673924c3e34fa8af84c9ffe04660673a7e"}, {file = "openai-1.54.4.tar.gz", hash = "sha256:50f3656e45401c54e973fa05dc29f3f0b0d19348d685b2f7ddb4d92bf7b1b6bf"}, @@ -4301,6 +4635,8 @@ version = "0.5.0" description = "Pydantic OpenAPI schema implementation" optional = false python-versions = "<4.0,>=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "openapi_pydantic-0.5.0-py3-none-any.whl", hash = "sha256:06458efd34969446f42d96d51de39cdef4a9b19daf3cc456a2dfa697458ac542"}, {file = "openapi_pydantic-0.5.0.tar.gz", hash = "sha256:a48f88e2904a056e1ef6d4728cfb2f36aa3213ce194fb09fc04259b9007165f0"}, @@ -4315,6 +4651,8 @@ version = "4.10.0.84" description = "Wrapper package for OpenCV python bindings." optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opencv-python-headless-4.10.0.84.tar.gz", hash = "sha256:f2017c6101d7c2ef8d7bc3b414c37ff7f54d64413a1847d89970b6b7069b4e1a"}, {file = "opencv_python_headless-4.10.0.84-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:a4f4bcb07d8f8a7704d9c8564c224c8b064c63f430e95b61ac0bffaa374d330e"}, @@ -4339,6 +4677,8 @@ version = "3.1.5" description = "A Python library to read/write Excel 2010 xlsx/xlsm files" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2"}, {file = "openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050"}, @@ -4353,6 +4693,8 @@ version = "1.29.0" description = "OpenTelemetry Python API" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opentelemetry_api-1.29.0-py3-none-any.whl", hash = "sha256:5fcd94c4141cc49c736271f3e1efb777bebe9cc535759c54c936cca4f1b312b8"}, {file = "opentelemetry_api-1.29.0.tar.gz", hash = "sha256:d04a6cf78aad09614f52964ecb38021e248f5714dc32c2e0d8fd99517b4d69cf"}, @@ -4368,6 +4710,8 @@ version = "1.29.0" description = "OpenTelemetry Protobuf encoding" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opentelemetry_exporter_otlp_proto_common-1.29.0-py3-none-any.whl", hash = "sha256:a9d7376c06b4da9cf350677bcddb9618ed4b8255c3f6476975f5e38274ecd3aa"}, {file = "opentelemetry_exporter_otlp_proto_common-1.29.0.tar.gz", hash = "sha256:e7c39b5dbd1b78fe199e40ddfe477e6983cb61aa74ba836df09c3869a3e3e163"}, @@ -4382,6 +4726,8 @@ version = "1.29.0" description = "OpenTelemetry Collector Protobuf over gRPC Exporter" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opentelemetry_exporter_otlp_proto_grpc-1.29.0-py3-none-any.whl", hash = "sha256:5a2a3a741a2543ed162676cf3eefc2b4150e6f4f0a193187afb0d0e65039c69c"}, {file = "opentelemetry_exporter_otlp_proto_grpc-1.29.0.tar.gz", hash = "sha256:3d324d07d64574d72ed178698de3d717f62a059a93b6b7685ee3e303384e73ea"}, @@ -4402,6 +4748,8 @@ version = "0.50b0" description = "Instrumentation Tools & Auto Instrumentation for OpenTelemetry Python" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opentelemetry_instrumentation-0.50b0-py3-none-any.whl", hash = "sha256:b8f9fc8812de36e1c6dffa5bfc6224df258841fb387b6dfe5df15099daa10630"}, {file = "opentelemetry_instrumentation-0.50b0.tar.gz", hash = "sha256:7d98af72de8dec5323e5202e46122e5f908592b22c6d24733aad619f07d82979"}, @@ -4419,6 +4767,8 @@ version = "0.50b0" description = "ASGI instrumentation for OpenTelemetry" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opentelemetry_instrumentation_asgi-0.50b0-py3-none-any.whl", hash = "sha256:2ba1297f746e55dec5a17fe825689da0613662fb25c004c3965a6c54b1d5be22"}, {file = "opentelemetry_instrumentation_asgi-0.50b0.tar.gz", hash = "sha256:3ca4cb5616ae6a3e8ce86e7d5c360a8d8cc8ed722cf3dc8a5e44300774e87d49"}, @@ -4440,6 +4790,8 @@ version = "0.50b0" description = "OpenTelemetry FastAPI Instrumentation" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opentelemetry_instrumentation_fastapi-0.50b0-py3-none-any.whl", hash = "sha256:8f03b738495e4705fbae51a2826389c7369629dace89d0f291c06ffefdff5e52"}, {file = "opentelemetry_instrumentation_fastapi-0.50b0.tar.gz", hash = "sha256:16b9181682136da210295def2bb304a32fb9bdee9a935cdc9da43567f7c1149e"}, @@ -4461,6 +4813,8 @@ version = "1.29.0" description = "OpenTelemetry Python Proto" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opentelemetry_proto-1.29.0-py3-none-any.whl", hash = "sha256:495069c6f5495cbf732501cdcd3b7f60fda2b9d3d4255706ca99b7ca8dec53ff"}, {file = "opentelemetry_proto-1.29.0.tar.gz", hash = "sha256:3c136aa293782e9b44978c738fff72877a4b78b5d21a64e879898db7b2d93e5d"}, @@ -4475,6 +4829,8 @@ version = "1.29.0" description = "OpenTelemetry Python SDK" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opentelemetry_sdk-1.29.0-py3-none-any.whl", hash = "sha256:173be3b5d3f8f7d671f20ea37056710217959e774e2749d984355d1f9391a30a"}, {file = "opentelemetry_sdk-1.29.0.tar.gz", hash = "sha256:b0787ce6aade6ab84315302e72bd7a7f2f014b0fb1b7c3295b88afe014ed0643"}, @@ -4491,6 +4847,8 @@ version = "0.50b0" description = "OpenTelemetry Semantic Conventions" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opentelemetry_semantic_conventions-0.50b0-py3-none-any.whl", hash = "sha256:e87efba8fdb67fb38113efea6a349531e75ed7ffc01562f65b802fcecb5e115e"}, {file = "opentelemetry_semantic_conventions-0.50b0.tar.gz", hash = "sha256:02dc6dbcb62f082de9b877ff19a3f1ffaa3c306300fa53bfac761c4567c83d38"}, @@ -4506,6 +4864,8 @@ version = "0.50b0" description = "Web util for OpenTelemetry" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opentelemetry_util_http-0.50b0-py3-none-any.whl", hash = "sha256:21f8aedac861ffa3b850f8c0a6c373026189eb8630ac6e14a2bf8c55695cc090"}, {file = "opentelemetry_util_http-0.50b0.tar.gz", hash = "sha256:dc4606027e1bc02aabb9533cc330dd43f874fca492e4175c31d7154f341754af"}, @@ -4517,6 +4877,8 @@ version = "3.10.13" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "orjson-3.10.13-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:1232c5e873a4d1638ef957c5564b4b0d6f2a6ab9e207a9b3de9de05a09d1d920"}, {file = "orjson-3.10.13-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d26a0eca3035619fa366cbaf49af704c7cb1d4a0e6c79eced9f6a3f2437964b6"}, @@ -4601,6 +4963,8 @@ version = "1.3.0.post0" description = "Capture the outcome of Python function calls." optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "outcome-1.3.0.post0-py2.py3-none-any.whl", hash = "sha256:e771c5ce06d1415e356078d3bdd68523f284b4ce5419828922b6871e65eda82b"}, {file = "outcome-1.3.0.post0.tar.gz", hash = "sha256:9dcf02e65f2971b80047b377468e72a268e15c0af3cf1238e6ff14f7f91143b8"}, @@ -4615,6 +4979,8 @@ version = "7.7.0" description = "A decorator to automatically detect mismatch when overriding a method." optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49"}, {file = "overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a"}, @@ -4626,6 +4992,8 @@ version = "24.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, @@ -4637,6 +5005,8 @@ version = "2.2.3" description = "Powerful data structures for data analysis, time series, and statistics" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pandas-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5"}, {file = "pandas-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348"}, @@ -4723,6 +5093,8 @@ version = "3.5.0" description = "SSH2 protocol library" optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "paramiko-3.5.0-py3-none-any.whl", hash = "sha256:1fedf06b085359051cd7d0d270cebe19e755a8a921cc2ddbfa647fb0cd7d68f9"}, {file = "paramiko-3.5.0.tar.gz", hash = "sha256:ad11e540da4f55cedda52931f1a3f812a8238a7af7f62a60de538cd80bb28124"}, @@ -4744,6 +5116,8 @@ version = "0.12.1" description = "Utility library for gitignore style pattern matching of file paths." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, @@ -4755,6 +5129,8 @@ version = "3.2.3" description = "pathvalidate is a Python library to sanitize/validate a string such as filenames/file-paths/etc." optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pathvalidate-3.2.3-py3-none-any.whl", hash = "sha256:5eaf0562e345d4b6d0c0239d0f690c3bd84d2a9a3c4c73b99ea667401b27bee1"}, {file = "pathvalidate-3.2.3.tar.gz", hash = "sha256:59b5b9278e30382d6d213497623043ebe63f10e29055be4419a9c04c721739cb"}, @@ -4771,6 +5147,8 @@ version = "1.0.1" description = "A Python package for describing statistical models and for building design matrices." optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "patsy-1.0.1-py2.py3-none-any.whl", hash = "sha256:751fb38f9e97e62312e921a1954b81e1bb2bcda4f5eeabaf94db251ee791509c"}, {file = "patsy-1.0.1.tar.gz", hash = "sha256:e786a9391eec818c054e359b737bbce692f051aee4c661f4141cc88fb459c0c4"}, @@ -4788,6 +5166,8 @@ version = "20231228" description = "PDF parser and analyzer" optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pdfminer.six-20231228-py3-none-any.whl", hash = "sha256:e8d3c3310e6fbc1fe414090123ab01351634b4ecb021232206c4c9a8ca3e3b8f"}, {file = "pdfminer.six-20231228.tar.gz", hash = "sha256:6004da3ad1a7a4d45930cb950393df89b068e73be365a6ff64a838d37bcb08c4"}, @@ -4808,6 +5188,8 @@ version = "0.11.4" description = "Plumb a PDF for detailed information about each char, rectangle, and line." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pdfplumber-0.11.4-py3-none-any.whl", hash = "sha256:6150f0678c7aaba974ac09839c17475d6c0c4d126b5f92cb85154885f31c6d73"}, {file = "pdfplumber-0.11.4.tar.gz", hash = "sha256:147b55cde2351fcb9523b46b09cc771eea3602faecfb60d463c6bf951694fbe8"}, @@ -4824,6 +5206,8 @@ version = "0.9.16" description = "A Python library for adding effects to audio." optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pedalboard-0.9.16-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:9d68f2a0816f4b611ef9e6fd2d216c0f89840c7aa855efdb499b63b5e8014009"}, {file = "pedalboard-0.9.16-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2ac0f9c57a89c2e437a41288cd5da42d65d737457848fd95adfba7c97bb99914"}, @@ -4871,6 +5255,8 @@ version = "0.13.2" description = "Parameter-Efficient Fine-Tuning (PEFT)" optional = false python-versions = ">=3.8.0" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "peft-0.13.2-py3-none-any.whl", hash = "sha256:d4e0951ec78eac11c45a051801c569913436888c578d48e5ce86996b715bc6ef"}, {file = "peft-0.13.2.tar.gz", hash = "sha256:0e0cbd40ebdf5fe4ea79f255880d02f96712d18899509369a2cc5768ad46d672"}, @@ -4900,6 +5286,8 @@ version = "0.3.4" description = "Python port of the fzy fuzzy string matching algorithm" optional = false python-versions = ">=3.7,<4.0" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pfzy-0.3.4-py3-none-any.whl", hash = "sha256:5f50d5b2b3207fa72e7ec0ef08372ef652685470974a107d0d4999fc5a903a96"}, {file = "pfzy-0.3.4.tar.gz", hash = "sha256:717ea765dd10b63618e7298b2d98efd819e0b30cd5905c9707223dceeb94b3f1"}, @@ -4914,6 +5302,8 @@ version = "11.0.0" description = "Python Imaging Library (Fork)" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pillow-11.0.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:6619654954dc4936fcff82db8eb6401d3159ec6be81e33c6000dfd76ae189947"}, {file = "pillow-11.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b3c5ac4bed7519088103d9450a1107f76308ecf91d6dabc8a33a2fcfb18d0fba"}, @@ -5006,6 +5396,8 @@ version = "4.3.6" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, @@ -5022,6 +5414,8 @@ version = "1.5.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" +groups = ["dev"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, @@ -5037,6 +5431,8 @@ version = "3.11" description = "Python Lex & Yacc" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce"}, {file = "ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3"}, @@ -5048,6 +5444,8 @@ version = "1.8.2" description = "A friend to fetch your data files" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pooch-1.8.2-py3-none-any.whl", hash = "sha256:3529a57096f7198778a5ceefd5ac3ef0e4d06a6ddaf9fc2d609b806f25302c47"}, {file = "pooch-1.8.2.tar.gz", hash = "sha256:76561f0de68a01da4df6af38e9955c4c9d1a5c90da73f7e40276a5728ec83d10"}, @@ -5069,6 +5467,8 @@ version = "3.1.1" description = "Wraps the portalocker recipe for easy usage" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "portalocker-3.1.1-py3-none-any.whl", hash = "sha256:80e984e24de292ff258a5bea0e4f3f778fff84c0ae1275dbaebc4658de4aacb3"}, {file = "portalocker-3.1.1.tar.gz", hash = "sha256:ec20f6dda2ad9ce89fa399a5f31f4f1495f515958f0cb7ca6543cef7bb5a749e"}, @@ -5088,6 +5488,8 @@ version = "3.7.5" description = "Integrate PostHog into any python application." optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "posthog-3.7.5-py2.py3-none-any.whl", hash = "sha256:022132c17069dde03c5c5904e2ae1b9bd68d5059cbc5a8dffc5c1537a1b71cb5"}, {file = "posthog-3.7.5.tar.gz", hash = "sha256:8ba40ab623da35db72715fc87fe7dccb7fc272ced92581fe31db2d4dbe7ad761"}, @@ -5111,6 +5513,8 @@ version = "3.12.0" description = "A simple Python library for easily displaying tabular data in a visually appealing ASCII table format" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "prettytable-3.12.0-py3-none-any.whl", hash = "sha256:77ca0ad1c435b6e363d7e8623d7cc4fcf2cf15513bf77a1c1b2e814930ac57cc"}, {file = "prettytable-3.12.0.tar.gz", hash = "sha256:f04b3e1ba35747ac86e96ec33e3bb9748ce08e254dc2a1c6253945901beec804"}, @@ -5128,6 +5532,8 @@ version = "0.1.10" description = "Log and progress bar manager for console, notebooks, web..." optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "proglog-0.1.10-py3-none-any.whl", hash = "sha256:19d5da037e8c813da480b741e3fa71fb1ac0a5b02bf21c41577c7f327485ec50"}, {file = "proglog-0.1.10.tar.gz", hash = "sha256:658c28c9c82e4caeb2f25f488fff9ceace22f8d69b15d0c1c86d64275e4ddab4"}, @@ -5142,6 +5548,8 @@ version = "3.0.48" description = "Library for building powerful interactive command lines in Python" optional = false python-versions = ">=3.7.0" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "prompt_toolkit-3.0.48-py3-none-any.whl", hash = "sha256:f49a827f90062e411f1ce1f854f2aedb3c23353244f8108b89283587397ac10e"}, {file = "prompt_toolkit-3.0.48.tar.gz", hash = "sha256:d6623ab0477a80df74e646bdbc93621143f5caf104206aa29294d53de1a03d90"}, @@ -5156,6 +5564,8 @@ version = "0.2.1" description = "Accelerated property cache" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "propcache-0.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6b3f39a85d671436ee3d12c017f8fdea38509e4f25b28eb25877293c98c243f6"}, {file = "propcache-0.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d51fbe4285d5db5d92a929e3e21536ea3dd43732c5b177c7ef03f918dff9f2"}, @@ -5247,6 +5657,8 @@ version = "1.25.0" description = "Beautiful, Pythonic protocol buffers." optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "proto_plus-1.25.0-py3-none-any.whl", hash = "sha256:c91fc4a65074ade8e458e95ef8bac34d4008daa7cce4a12d6707066fca648961"}, {file = "proto_plus-1.25.0.tar.gz", hash = "sha256:fbb17f57f7bd05a68b7707e745e26528b0b3c34e378db91eef93912c54982d91"}, @@ -5264,6 +5676,8 @@ version = "5.29.2" description = "" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "protobuf-5.29.2-cp310-abi3-win32.whl", hash = "sha256:c12ba8249f5624300cf51c3d0bfe5be71a60c63e4dcf51ffe9a68771d958c851"}, {file = "protobuf-5.29.2-cp310-abi3-win_amd64.whl", hash = "sha256:842de6d9241134a973aab719ab42b008a18a90f9f07f06ba480df268f86432f9"}, @@ -5284,6 +5698,8 @@ version = "6.1.0" description = "Cross-platform lib for process and system monitoring in Python." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "psutil-6.1.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ff34df86226c0227c52f38b919213157588a678d049688eded74c76c8ba4a5d0"}, {file = "psutil-6.1.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:c0e0c00aa18ca2d3b2b991643b799a15fc8f0563d2ebb6040f64ce8dc027b942"}, @@ -5314,6 +5730,8 @@ version = "2.9.10" description = "psycopg2 - Python-PostgreSQL Database Adapter" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "psycopg2-binary-2.9.10.tar.gz", hash = "sha256:4b3df0e6990aa98acda57d983942eff13d824135fe2250e6522edaa782a06de2"}, {file = "psycopg2_binary-2.9.10-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:0ea8e3d0ae83564f2fc554955d327fa081d065c8ca5cc6d2abb643e2c9c1200f"}, @@ -5362,6 +5780,7 @@ files = [ {file = "psycopg2_binary-2.9.10-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:bb89f0a835bcfc1d42ccd5f41f04870c1b936d8507c6df12b7737febc40f0909"}, {file = "psycopg2_binary-2.9.10-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f0c2d907a1e102526dd2986df638343388b94c33860ff3bbe1384130828714b1"}, {file = "psycopg2_binary-2.9.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f8157bed2f51db683f31306aa497311b560f2265998122abe1dce6428bd86567"}, + {file = "psycopg2_binary-2.9.10-cp313-cp313-win_amd64.whl", hash = "sha256:27422aa5f11fbcd9b18da48373eb67081243662f9b46e6fd07c3eb46e4535142"}, {file = "psycopg2_binary-2.9.10-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:eb09aa7f9cecb45027683bb55aebaaf45a0df8bf6de68801a6afdc7947bb09d4"}, {file = "psycopg2_binary-2.9.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b73d6d7f0ccdad7bc43e6d34273f70d587ef62f824d7261c4ae9b8b1b6af90e8"}, {file = "psycopg2_binary-2.9.10-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce5ab4bf46a211a8e924d307c1b1fcda82368586a19d0a24f8ae166f5c784864"}, @@ -5390,6 +5809,8 @@ version = "1.28" description = "Pure python implementation of magic file detection" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "puremagic-1.28-py3-none-any.whl", hash = "sha256:e16cb9708ee2007142c37931c58f07f7eca956b3472489106a7245e5c3aa1241"}, {file = "puremagic-1.28.tar.gz", hash = "sha256:195893fc129657f611b86b959aab337207d6df7f25372209269ed9e303c1a8c0"}, @@ -5401,6 +5822,8 @@ version = "9.0.0" description = "Get CPU info with pure Python" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "py-cpuinfo-9.0.0.tar.gz", hash = "sha256:3cdbbf3fac90dc6f118bfd64384f309edeadd902d7c8fb17f02ffa1fc3f49690"}, {file = "py_cpuinfo-9.0.0-py3-none-any.whl", hash = "sha256:859625bc251f64e21f077d099d4162689c762b5d6a4c3c97553d56241c9674d5"}, @@ -5412,6 +5835,8 @@ version = "0.6.1" description = "Pure Python PartiQL Parser" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "py_partiql_parser-0.6.1-py2.py3-none-any.whl", hash = "sha256:ff6a48067bff23c37e9044021bf1d949c83e195490c17e020715e927fe5b2456"}, {file = "py_partiql_parser-0.6.1.tar.gz", hash = "sha256:8583ff2a0e15560ef3bc3df109a7714d17f87d81d33e8c38b7fed4e58a63215d"}, @@ -5426,6 +5851,8 @@ version = "18.1.0" description = "Python library for Apache Arrow" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pyarrow-18.1.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:e21488d5cfd3d8b500b3238a6c4b075efabc18f0f6d80b29239737ebd69caa6c"}, {file = "pyarrow-18.1.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:b516dad76f258a702f7ca0250885fc93d1fa5ac13ad51258e39d402bd9e2e1e4"}, @@ -5480,6 +5907,8 @@ version = "0.6.1" description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pyasn1-0.6.1-py3-none-any.whl", hash = "sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629"}, {file = "pyasn1-0.6.1.tar.gz", hash = "sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034"}, @@ -5491,6 +5920,8 @@ version = "0.4.1" description = "A collection of ASN.1-based protocols modules" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pyasn1_modules-0.4.1-py3-none-any.whl", hash = "sha256:49bfa96b45a292b711e986f222502c1c9a5e1f4e568fc30e2574a6c7d07838fd"}, {file = "pyasn1_modules-0.4.1.tar.gz", hash = "sha256:c28e2dbf9c06ad61c71a075c7e0f9fd0f1b0bb2d2ad4377f240d33ac2ab60a7c"}, @@ -5505,6 +5936,8 @@ version = "4.5.0" description = "Python interface for c-ares" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "(python_version >= \"3.12\" or python_version <= \"3.11\") and (sys_platform == \"linux\" or sys_platform == \"darwin\")" files = [ {file = "pycares-4.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:13a82fad8239d6fbcf916099bee17d8b5666d0ddb77dace431e0f7961c9427ab"}, {file = "pycares-4.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fefc7bebbe39b2e3b4b9615471233a8f7356b96129a7db9030313a3ae4ecc42d"}, @@ -5591,6 +6024,8 @@ version = "2.22" description = "C parser in Python" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, @@ -5602,6 +6037,8 @@ version = "2.9.2" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pydantic-2.9.2-py3-none-any.whl", hash = "sha256:f048cec7b26778210e28a0459867920654d48e5e62db0958433636cde4254f12"}, {file = "pydantic-2.9.2.tar.gz", hash = "sha256:d155cef71265d1e9807ed1c32b4c8deec042a44a50a4188b25ac67ecd81a9c0f"}, @@ -5625,6 +6062,8 @@ version = "2.23.4" description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pydantic_core-2.23.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:b10bd51f823d891193d4717448fab065733958bdb6a6b351967bd349d48d5c9b"}, {file = "pydantic_core-2.23.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4fc714bdbfb534f94034efaa6eadd74e5b93c8fa6315565a222f7b6f42ca1166"}, @@ -5726,6 +6165,8 @@ version = "2.10.1" description = "Extra Pydantic types." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pydantic_extra_types-2.10.1-py3-none-any.whl", hash = "sha256:db2c86c04a837bbac0d2d79bbd6f5d46c4c9253db11ca3fdd36a2b282575f1e2"}, {file = "pydantic_extra_types-2.10.1.tar.gz", hash = "sha256:e4f937af34a754b8f1fa228a2fac867091a51f56ed0e8a61d5b3a6719b13c923"}, @@ -5749,6 +6190,8 @@ version = "2.7.1" description = "Settings management using Pydantic" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pydantic_settings-2.7.1-py3-none-any.whl", hash = "sha256:590be9e6e24d06db33a4262829edef682500ef008565a969c73d39d5f8bfb3fd"}, {file = "pydantic_settings-2.7.1.tar.gz", hash = "sha256:10c9caad35e64bfb3c2fbf70a078c0e25cc92499782e5200747f942a065dec93"}, @@ -5769,6 +6212,8 @@ version = "0.25.1" description = "Manipulate audio with an simple and easy high level interface" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pydub-0.25.1-py2.py3-none-any.whl", hash = "sha256:65617e33033874b59d87db603aa1ed450633288aefead953b30bded59cb599a6"}, {file = "pydub-0.25.1.tar.gz", hash = "sha256:980a33ce9949cab2a569606b65674d748ecbca4f0796887fd6f46173a7b0d30f"}, @@ -5780,6 +6225,8 @@ version = "2.18.0" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, @@ -5794,6 +6241,8 @@ version = "4.0.0" description = "A comprehensive, fast, pure Python memcached client" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pymemcache-4.0.0-py2.py3-none-any.whl", hash = "sha256:f507bc20e0dc8d562f8df9d872107a278df049fa496805c1431b926f3ddd0eab"}, {file = "pymemcache-4.0.0.tar.gz", hash = "sha256:27bf9bd1bbc1e20f83633208620d56de50f14185055e49504f4f5e94e94aff94"}, @@ -5805,6 +6254,8 @@ version = "1.5.0" description = "Python binding to the Networking and Cryptography (NaCl) library" optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1"}, {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92"}, @@ -5831,6 +6282,8 @@ version = "7.2.1" description = "A Python wrapper for ngrok." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pyngrok-7.2.1-py3-none-any.whl", hash = "sha256:a78facb44c95ba85fd58c53cef01a27c20a653d413902c9dc5870285802ea53c"}, {file = "pyngrok-7.2.1.tar.gz", hash = "sha256:50921b09cb10cca985787f20bdfc4554de28bd3ede0a748706c082a282279bf1"}, @@ -5849,6 +6302,8 @@ version = "1.14" description = "Thin wrapper for pandoc." optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pypandoc-1.14-py3-none-any.whl", hash = "sha256:1315c7ad7fac7236dacf69a05b521ed2c3f1d0177f70e9b92bfffce6c023df22"}, {file = "pypandoc-1.14.tar.gz", hash = "sha256:6b4c45f5f1b9fb5bb562079164806bdbbc3e837b5402bcf3f1139edc5730a197"}, @@ -5860,6 +6315,8 @@ version = "3.2.1" description = "pyparsing module - Classes and methods to define and execute parsing grammars" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pyparsing-3.2.1-py3-none-any.whl", hash = "sha256:506ff4f4386c4cec0590ec19e6302d3aedb992fdc02c761e90416f158dacf8e1"}, {file = "pyparsing-3.2.1.tar.gz", hash = "sha256:61980854fd66de3a90028d679a954d5f2623e83144b5afe5ee86f43d762e5f0a"}, @@ -5874,6 +6331,8 @@ version = "4.30.1" description = "Python bindings to PDFium" optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pypdfium2-4.30.1-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:e07c47633732cc18d890bb7e965ad28a9c5a932e548acb928596f86be2e5ae37"}, {file = "pypdfium2-4.30.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:5ea2d44e96d361123b67b00f527017aa9c847c871b5714e013c01c3eb36a79fe"}, @@ -5896,6 +6355,8 @@ version = "0.48.9" description = "A SQL query builder API for Python" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "PyPika-0.48.9.tar.gz", hash = "sha256:838836a61747e7c8380cd1b7ff638694b7a7335345d0f559b04b2cd832ad5378"}, ] @@ -5906,6 +6367,8 @@ version = "1.2.0" description = "Wrappers to call pyproject.toml-based build backend hooks." optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pyproject_hooks-1.2.0-py3-none-any.whl", hash = "sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913"}, {file = "pyproject_hooks-1.2.0.tar.gz", hash = "sha256:1e859bd5c40fae9448642dd871adf459e5e2084186e8d2c2a79a824c970da1f8"}, @@ -5917,6 +6380,8 @@ version = "3.5.4" description = "A python implementation of GNU readline." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "sys_platform == \"win32\" and (python_version >= \"3.12\" or python_version <= \"3.11\")" files = [ {file = "pyreadline3-3.5.4-py3-none-any.whl", hash = "sha256:eaf8e6cc3c49bcccf145fc6067ba8643d1df34d604a1ec0eccbf7a18e6d3fae6"}, {file = "pyreadline3-3.5.4.tar.gz", hash = "sha256:8d57d53039a1c75adba8e50dd3d992b28143480816187ea5efbd5c78e6c885b7"}, @@ -5931,6 +6396,8 @@ version = "1.7.1" description = "A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information." optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "PySocks-1.7.1-py27-none-any.whl", hash = "sha256:08e69f092cc6dbe92a0fdd16eeb9b9ffbc13cadfe5ca4c7bd92ffb078b293299"}, {file = "PySocks-1.7.1-py3-none-any.whl", hash = "sha256:2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5"}, @@ -5943,6 +6410,8 @@ version = "0.3.13" description = "Python-tesseract is a python wrapper for Google's Tesseract-OCR" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pytesseract-0.3.13-py3-none-any.whl", hash = "sha256:7a99c6c2ac598360693d83a416e36e0b33a67638bb9d77fdcac094a3589d4b34"}, {file = "pytesseract-0.3.13.tar.gz", hash = "sha256:4bf5f880c99406f52a3cfc2633e42d9dc67615e69d8a509d74867d3baddb5db9"}, @@ -5958,6 +6427,8 @@ version = "8.3.4" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" +groups = ["dev"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pytest-8.3.4-py3-none-any.whl", hash = "sha256:50e16d954148559c9a74109af1eaf0c945ba2d8f30f0a3d3335edde19788b6f6"}, {file = "pytest-8.3.4.tar.gz", hash = "sha256:965370d062bce11e73868e0335abac31b4d3de0e82f4007408d242b4f8610761"}, @@ -5980,6 +6451,8 @@ version = "0.25.1" description = "Pytest support for asyncio" optional = false python-versions = ">=3.9" +groups = ["dev"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pytest_asyncio-0.25.1-py3-none-any.whl", hash = "sha256:c84878849ec63ff2ca509423616e071ef9cd8cc93c053aa33b5b8fb70a990671"}, {file = "pytest_asyncio-0.25.1.tar.gz", hash = "sha256:79be8a72384b0c917677e00daa711e07db15259f4d23203c59012bcd989d4aee"}, @@ -5998,6 +6471,8 @@ version = "1.1.5" description = "pytest plugin that allows you to add environment variables." optional = false python-versions = ">=3.8" +groups = ["dev"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pytest_env-1.1.5-py3-none-any.whl", hash = "sha256:ce90cf8772878515c24b31cd97c7fa1f4481cd68d588419fd45f10ecaee6bc30"}, {file = "pytest_env-1.1.5.tar.gz", hash = "sha256:91209840aa0e43385073ac464a554ad2947cc2fd663a9debf88d03b01e0cc1cf"}, @@ -6016,6 +6491,8 @@ version = "3.14.0" description = "Thin-wrapper around the mock package for easier use with pytest" optional = false python-versions = ">=3.8" +groups = ["dev"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pytest-mock-3.14.0.tar.gz", hash = "sha256:2719255a1efeceadbc056d6bf3df3d1c5015530fb40cf347c0f9afac88410bd0"}, {file = "pytest_mock-3.14.0-py3-none-any.whl", hash = "sha256:0b72c38033392a5f4621342fe11e9219ac11ec9d375f8e2a0c164539e0d70f6f"}, @@ -6033,6 +6510,8 @@ version = "3.6.1" description = "pytest xdist plugin for distributed testing, most importantly across multiple CPUs" optional = false python-versions = ">=3.8" +groups = ["dev"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pytest_xdist-3.6.1-py3-none-any.whl", hash = "sha256:9ed4adfb68a016610848639bb7e02c9352d5d9f03d04809919e2dafc3be4cca7"}, {file = "pytest_xdist-3.6.1.tar.gz", hash = "sha256:ead156a4db231eec769737f57668ef58a2084a34b2e55c4a8fa20d861107300d"}, @@ -6053,6 +6532,8 @@ version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, @@ -6067,6 +6548,8 @@ version = "1.1.2" description = "Create, read, and update Microsoft Word .docx files." optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "python_docx-1.1.2-py3-none-any.whl", hash = "sha256:08c20d6058916fb19853fcf080f7f42b6270d89eac9fa5f8c15f691c0017fabe"}, {file = "python_docx-1.1.2.tar.gz", hash = "sha256:0cf1f22e95b9002addca7948e16f2cd7acdfd498047f1941ca5d293db7762efd"}, @@ -6082,6 +6565,8 @@ version = "1.0.1" description = "Read key-value pairs from a .env file and set them as environment variables" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca"}, {file = "python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a"}, @@ -6096,6 +6581,8 @@ version = "0.0.17" description = "A streaming multipart parser for Python" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "python_multipart-0.0.17-py3-none-any.whl", hash = "sha256:15dc4f487e0a9476cc1201261188ee0940165cffc94429b6fc565c4d3045cb5d"}, {file = "python_multipart-0.0.17.tar.gz", hash = "sha256:41330d831cae6e2f22902704ead2826ea038d0419530eadff3ea80175aec5538"}, @@ -6107,6 +6594,8 @@ version = "1.0.2" description = "Create, read, and update PowerPoint 2007+ (.pptx) files." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "python_pptx-1.0.2-py3-none-any.whl", hash = "sha256:160838e0b8565a8b1f67947675886e9fea18aa5e795db7ae531606d68e785cba"}, {file = "python_pptx-1.0.2.tar.gz", hash = "sha256:479a8af0eaf0f0d76b6f00b0887732874ad2e3188230315290cd1f9dd9cc7095"}, @@ -6124,6 +6613,8 @@ version = "2024.2" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725"}, {file = "pytz-2024.2.tar.gz", hash = "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a"}, @@ -6135,6 +6626,8 @@ version = "308" description = "Python for Window Extensions" optional = false python-versions = "*" +groups = ["main"] +markers = "platform_system == \"Windows\" and (python_version >= \"3.12\" or python_version <= \"3.11\")" files = [ {file = "pywin32-308-cp310-cp310-win32.whl", hash = "sha256:796ff4426437896550d2981b9c2ac0ffd75238ad9ea2d3bfa67a1abd546d262e"}, {file = "pywin32-308-cp310-cp310-win_amd64.whl", hash = "sha256:4fc888c59b3c0bef905ce7eb7e2106a07712015ea1c8234b703a088d46110e8e"}, @@ -6162,6 +6655,8 @@ version = "6.0.2" description = "YAML parser and emitter for Python" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, @@ -6224,6 +6719,8 @@ version = "0.35.1" description = "JSON Referencing + Python" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "referencing-0.35.1-py3-none-any.whl", hash = "sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de"}, {file = "referencing-0.35.1.tar.gz", hash = "sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c"}, @@ -6239,6 +6736,8 @@ version = "2024.11.6" description = "Alternative regular expression module, to replace re." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91"}, {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0"}, @@ -6342,6 +6841,8 @@ version = "1.0.3" description = "Python client for Replicate" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "replicate-1.0.3-py3-none-any.whl", hash = "sha256:8c49d63444b7ea9ac1d6af99eb23a01efb5b7f079cc8a020d6f52b38843db1da"}, {file = "replicate-1.0.3.tar.gz", hash = "sha256:0fd9ca5230fe67c42e4508dd96a5b1414b3fefa5342f8921dbb63c74266cb130"}, @@ -6359,6 +6860,8 @@ version = "4.2.5" description = "The Reportlab Toolkit" optional = false python-versions = "<4,>=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "reportlab-4.2.5-py3-none-any.whl", hash = "sha256:eb2745525a982d9880babb991619e97ac3f661fae30571b7d50387026ca765ee"}, {file = "reportlab-4.2.5.tar.gz", hash = "sha256:5cf35b8fd609b68080ac7bbb0ae1e376104f7d5f7b2d3914c7adc63f2593941f"}, @@ -6379,6 +6882,8 @@ version = "2.32.3" description = "Python HTTP for Humans." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, @@ -6400,6 +6905,8 @@ version = "2.0.0" description = "OAuthlib authentication support for Requests." optional = false python-versions = ">=3.4" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "requests-oauthlib-2.0.0.tar.gz", hash = "sha256:b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9"}, {file = "requests_oauthlib-2.0.0-py2.py3-none-any.whl", hash = "sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36"}, @@ -6418,6 +6925,8 @@ version = "1.0.0" description = "A utility belt for advanced users of python-requests" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6"}, {file = "requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06"}, @@ -6432,6 +6941,8 @@ version = "0.25.3" description = "A utility library for mocking out the `requests` Python library." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "responses-0.25.3-py3-none-any.whl", hash = "sha256:521efcbc82081ab8daa588e08f7e8a64ce79b91c39f6e62199b19159bea7dbcb"}, {file = "responses-0.25.3.tar.gz", hash = "sha256:617b9247abd9ae28313d57a75880422d55ec63c29d33d629697590a034358dba"}, @@ -6451,6 +6962,8 @@ version = "0.21.1" description = "A utility for mocking out the Python HTTPX and HTTP Core libraries." optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "respx-0.21.1-py2.py3-none-any.whl", hash = "sha256:05f45de23f0c785862a2c92a3e173916e8ca88e4caad715dd5f68584d6053c20"}, {file = "respx-0.21.1.tar.gz", hash = "sha256:0bd7fe21bfaa52106caa1223ce61224cf30786985f17c63c5d71eff0307ee8af"}, @@ -6465,6 +6978,8 @@ version = "13.9.4" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false python-versions = ">=3.8.0" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90"}, {file = "rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098"}, @@ -6484,6 +6999,8 @@ version = "0.12.0" description = "Rich toolkit for building command-line applications" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "rich_toolkit-0.12.0-py3-none-any.whl", hash = "sha256:a2da4416384410ae871e890db7edf8623e1f5e983341dbbc8cc03603ce24f0ab"}, {file = "rich_toolkit-0.12.0.tar.gz", hash = "sha256:facb0b40418010309f77abd44e2583b4936656f6ee5c8625da807564806a6c40"}, @@ -6500,6 +7017,8 @@ version = "0.22.3" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "rpds_py-0.22.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:6c7b99ca52c2c1752b544e310101b98a659b720b21db00e65edca34483259967"}, {file = "rpds_py-0.22.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:be2eb3f2495ba669d2a985f9b426c1797b7d48d6963899276d22f23e33d47e37"}, @@ -6612,6 +7131,8 @@ version = "4.9" description = "Pure-Python RSA implementation" optional = false python-versions = ">=3.6,<4" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7"}, {file = "rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21"}, @@ -6626,6 +7147,8 @@ version = "1.7.6" description = "🐍 | Python library for RunPod API and serverless worker SDK." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "runpod-1.7.6-py3-none-any.whl", hash = "sha256:0a0f565340f80959a25043cf6c2eca329a5ff3e529ac9c57a45ad5e441195e54"}, {file = "runpod-1.7.6.tar.gz", hash = "sha256:2d8cd53dc26882b17b391a608f0807f8a13a91b069b12b25e3fdfa84e24bdfaa"}, @@ -6660,6 +7183,8 @@ version = "0.10.4" description = "An Amazon S3 Transfer Manager" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "s3transfer-0.10.4-py3-none-any.whl", hash = "sha256:244a76a24355363a68164241438de1b72f8781664920260c48465896b712a41e"}, {file = "s3transfer-0.10.4.tar.gz", hash = "sha256:29edc09801743c21eb5ecbc617a152df41d3c287f67b615f73e5f750583666a7"}, @@ -6677,6 +7202,8 @@ version = "0.4.5" description = "" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "safetensors-0.4.5-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a63eaccd22243c67e4f2b1c3e258b257effc4acd78f3b9d397edc8cf8f1298a7"}, {file = "safetensors-0.4.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:23fc9b4ec7b602915cbb4ec1a7c1ad96d2743c322f20ab709e2c35d1b66dad27"}, @@ -6809,6 +7336,8 @@ version = "0.4.1" description = "SAM 2: Segment Anything in Images and Videos" optional = false python-versions = ">=3.10.0" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "sam2-0.4.1.tar.gz", hash = "sha256:13de5921730c5af784ac6e18f13bd114f7d71d9cceb0e7cc79786a96b0d0843b"}, ] @@ -6832,6 +7361,8 @@ version = "0.24.0" description = "Image processing in Python" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "scikit_image-0.24.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cb3bc0264b6ab30b43c4179ee6156bc18b4861e78bb329dd8d16537b7bbf827a"}, {file = "scikit_image-0.24.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:9c7a52e20cdd760738da38564ba1fed7942b623c0317489af1a598a8dedf088b"}, @@ -6880,6 +7411,8 @@ version = "1.5.2" description = "A set of python modules for machine learning and data mining" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "scikit_learn-1.5.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:299406827fb9a4f862626d0fe6c122f5f87f8910b86fe5daa4c32dcd742139b6"}, {file = "scikit_learn-1.5.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:2d4cad1119c77930b235579ad0dc25e65c917e756fe80cab96aa3b9428bd3fb0"}, @@ -6930,6 +7463,8 @@ version = "1.14.1" description = "Fundamental algorithms for scientific computing in Python" optional = false python-versions = ">=3.10" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "scipy-1.14.1-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:b28d2ca4add7ac16ae8bb6632a3c86e4b9e4d52d3e34267f6e1b0c1f8d87e389"}, {file = "scipy-1.14.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d0d2821003174de06b69e58cef2316a6622b60ee613121199cb2852a873f8cf3"}, @@ -6980,6 +7515,8 @@ version = "0.13.2" description = "Statistical data visualization" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "seaborn-0.13.2-py3-none-any.whl", hash = "sha256:636f8336facf092165e27924f223d3c62ca560b1f2bb5dff7ab7fad265361987"}, {file = "seaborn-0.13.2.tar.gz", hash = "sha256:93e60a40988f4d65e9f4885df477e2fdaff6b73a9ded434c1ab356dd57eefff7"}, @@ -7001,6 +7538,8 @@ version = "4.26.1" description = "Official Python bindings for Selenium WebDriver" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "selenium-4.26.1-py3-none-any.whl", hash = "sha256:1db3f3a0cd5bb07624fa8a3905a6fdde1595a42185a0617077c361dc53d104fb"}, {file = "selenium-4.26.1.tar.gz", hash = "sha256:7640f3f08ae7f4e450f895678e8a10a55eb4e4ca18311ed675ecc4684b96b683"}, @@ -7020,6 +7559,8 @@ version = "3.3.0" description = "State-of-the-Art Text Embeddings" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "sentence_transformers-3.3.0-py3-none-any.whl", hash = "sha256:5897c376fde1fea5f22a90ead2612278a464e52b8e42f1af95f84092c36bc23c"}, {file = "sentence_transformers-3.3.0.tar.gz", hash = "sha256:b91f0aea4ada72ed5a7cdbe8a6245a7152d0d9f84f336383778f8568e406b008"}, @@ -7047,6 +7588,8 @@ version = "0.2.0" description = "SentencePiece python wrapper" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "sentencepiece-0.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:188779e1298a1c8b8253c7d3ad729cb0a9891e5cef5e5d07ce4592c54869e227"}, {file = "sentencepiece-0.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bed9cf85b296fa2b76fc2547b9cbb691a523864cebaee86304c43a7b4cb1b452"}, @@ -7109,6 +7652,8 @@ version = "75.1.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "setuptools-75.1.0-py3-none-any.whl", hash = "sha256:35ab7fd3bcd95e6b7fd704e4a1539513edad446c097797f2985e0e4b960772f2"}, {file = "setuptools-75.1.0.tar.gz", hash = "sha256:d59a21b17a275fb872a9c3dae73963160ae079f1049ed956880cd7c09b120538"}, @@ -7123,12 +7668,26 @@ enabler = ["pytest-enabler (>=2.2)"] test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] type = ["importlib-metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.11.*)", "pytest-mypy"] +[[package]] +name = "sgmllib3k" +version = "1.0.0" +description = "Py3k port of sgmllib." +optional = false +python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" +files = [ + {file = "sgmllib3k-1.0.0.tar.gz", hash = "sha256:7868fb1c8bfa764c1ac563d3cf369c381d1325d36124933a726f29fcdaa812e9"}, +] + [[package]] name = "shellingham" version = "1.5.4" description = "Tool to Detect Surrounding Shell" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686"}, {file = "shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de"}, @@ -7140,6 +7699,8 @@ version = "1.17.0" description = "Python 2 and 3 compatibility utilities" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, @@ -7151,6 +7712,8 @@ version = "1.3.1" description = "Sniff out which async library your code is running under" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, @@ -7162,6 +7725,8 @@ version = "2.4.0" description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0"}, {file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"}, @@ -7173,6 +7738,8 @@ version = "0.13.0" description = "An audio library based on libsndfile, CFFI and NumPy" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "soundfile-0.13.0-py2.py3-none-any.whl", hash = "sha256:6a732002843d267267de52367cbdb16dfea6c1f4e3de5e4ddfb2bd0b9b65dddf"}, {file = "soundfile-0.13.0-py2.py3-none-macosx_10_9_x86_64.whl", hash = "sha256:c28024e59ebf2e5b12f5d77a16eb3ef1527e7580d7bbebfb5645253368391385"}, @@ -7194,6 +7761,8 @@ version = "2.6" description = "A modern CSS selector implementation for Beautiful Soup." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "soupsieve-2.6-py3-none-any.whl", hash = "sha256:e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9"}, {file = "soupsieve-2.6.tar.gz", hash = "sha256:e2e68417777af359ec65daac1057404a3c8a5455bb8abc36f1a9866ab1a51abb"}, @@ -7205,6 +7774,8 @@ version = "0.5.0.post1" description = "High quality, one-dimensional sample-rate conversion library" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "soxr-0.5.0.post1-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:7406d782d85f8cf64e66b65e6b7721973de8a1dc50b9e88bc2288c343a987484"}, {file = "soxr-0.5.0.post1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fa0a382fb8d8e2afed2c1642723b2d2d1b9a6728ff89f77f3524034c8885b8c9"}, @@ -7242,6 +7813,8 @@ version = "0.4.0" description = "Give your project support for a variety of PyTorch model architectures, including auto-detecting model architecture from just .pth files. spandrel gives you arch support." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "spandrel-0.4.0-py3-none-any.whl", hash = "sha256:819f3f15fe944fe589f43ba33150458a00d0ed0c2e8ef1eef0198615320127b1"}, {file = "spandrel-0.4.0.tar.gz", hash = "sha256:f45526893f923a12ef37542c44e444b1208976593bc7ccdfa54fd04c7c3e80ca"}, @@ -7261,6 +7834,8 @@ version = "3.13.0" description = "Library for performing speech recognition, with support for several engines and APIs, online and offline." optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "SpeechRecognition-3.13.0-py3-none-any.whl", hash = "sha256:44ca68ffbc55910ec0d26f009632a67367e2c81934934babe52456a896e983e1"}, {file = "speechrecognition-3.13.0.tar.gz", hash = "sha256:fdf42f4ad3cc05df7dd4a651ae090f313e34a5f6389f09134594e4ada9d28b19"}, @@ -7287,6 +7862,8 @@ version = "3.13.0" description = "Standard library aifc redistribution. \"dead battery\"." optional = false python-versions = "*" +groups = ["main"] +markers = "python_version >= \"3.13\"" files = [ {file = "standard_aifc-3.13.0-py3-none-any.whl", hash = "sha256:f7ae09cc57de1224a0dd8e3eb8f73830be7c3d0bc485de4c1f82b4a7f645ac66"}, {file = "standard_aifc-3.13.0.tar.gz", hash = "sha256:64e249c7cb4b3daf2fdba4e95721f811bde8bdfc43ad9f936589b7bb2fae2e43"}, @@ -7302,6 +7879,8 @@ version = "3.13.0" description = "Standard library chunk redistribution. \"dead battery\"." optional = false python-versions = "*" +groups = ["main"] +markers = "python_version >= \"3.13\"" files = [ {file = "standard_chunk-3.13.0-py3-none-any.whl", hash = "sha256:17880a26c285189c644bd5bd8f8ed2bdb795d216e3293e6dbe55bbd848e2982c"}, {file = "standard_chunk-3.13.0.tar.gz", hash = "sha256:4ac345d37d7e686d2755e01836b8d98eda0d1a3ee90375e597ae43aaf064d654"}, @@ -7313,6 +7892,8 @@ version = "0.41.3" description = "The little ASGI library that shines." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "starlette-0.41.3-py3-none-any.whl", hash = "sha256:44cedb2b7c77a9de33a8b74b2b90e9f50d11fcf25d8270ea525ad71a25374ff7"}, {file = "starlette-0.41.3.tar.gz", hash = "sha256:0e4ab3d16522a255be6b28260b938eae2482f98ce5cc934cb08dce8dc3ba5835"}, @@ -7330,6 +7911,8 @@ version = "0.14.4" description = "Statistical computations and models for Python" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "statsmodels-0.14.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7a62f1fc9086e4b7ee789a6f66b3c0fc82dd8de1edda1522d30901a0aa45e42b"}, {file = "statsmodels-0.14.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:46ac7ddefac0c9b7b607eed1d47d11e26fe92a1bc1f4d9af48aeed4e21e87981"}, @@ -7381,6 +7964,8 @@ version = "1.5.1" description = "A pure-Python library for reading and converting SVG" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "svglib-1.5.1.tar.gz", hash = "sha256:3ae765d3a9409ee60c0fb4d24c2deb6a80617aa927054f5bcd7fc98f0695e587"}, ] @@ -7397,6 +7982,8 @@ version = "1.13.3" description = "Computer algebra system (CAS) in Python" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "sympy-1.13.3-py3-none-any.whl", hash = "sha256:54612cf55a62755ee71824ce692986f23c88ffa77207b30c1368eda4a7060f73"}, {file = "sympy-1.13.3.tar.gz", hash = "sha256:b27fd2c6530e0ab39e275fc9b683895367e51d5da91baa8d3d64db2565fec4d9"}, @@ -7414,6 +8001,8 @@ version = "0.9.0" description = "Pretty-print tabular data" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f"}, {file = "tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c"}, @@ -7428,6 +8017,8 @@ version = "9.0.0" description = "Retry code until it succeeds" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "tenacity-9.0.0-py3-none-any.whl", hash = "sha256:93de0c98785b27fcf659856aa9f54bfbd399e29969b0621bc7f762bd441b4539"}, {file = "tenacity-9.0.0.tar.gz", hash = "sha256:807f37ca97d62aa361264d497b0e31e92b8027044942bfa756160d908320d73b"}, @@ -7443,6 +8034,8 @@ version = "2.5.0" description = "ANSI color formatting for output in terminal" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "termcolor-2.5.0-py3-none-any.whl", hash = "sha256:37b17b5fc1e604945c2642c872a3764b5d547a48009871aea3edd3afa180afb8"}, {file = "termcolor-2.5.0.tar.gz", hash = "sha256:998d8d27da6d48442e8e1f016119076b690d962507531df4890fcd2db2ef8a6f"}, @@ -7457,6 +8050,8 @@ version = "3.5.0" description = "threadpoolctl" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "threadpoolctl-3.5.0-py3-none-any.whl", hash = "sha256:56c1e26c150397e58c4926da8eeee87533b1e32bef131bd4bf6a2f45f3185467"}, {file = "threadpoolctl-3.5.0.tar.gz", hash = "sha256:082433502dd922bf738de0d8bcc4fdcbf0979ff44c42bd40f5af8a282f6fa107"}, @@ -7468,6 +8063,8 @@ version = "2024.12.12" description = "Read and write TIFF files" optional = false python-versions = ">=3.10" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "tifffile-2024.12.12-py3-none-any.whl", hash = "sha256:6ff0f196a46a75c8c0661c70995e06ea4d08a81fe343193e69f1673f4807d508"}, {file = "tifffile-2024.12.12.tar.gz", hash = "sha256:c38e929bf74c04b6c8708d87f16b32c85c6d7c2514b99559ea3db8003ba4edda"}, @@ -7490,6 +8087,8 @@ version = "0.8.0" description = "tiktoken is a fast BPE tokeniser for use with OpenAI's models" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "tiktoken-0.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b07e33283463089c81ef1467180e3e00ab00d46c2c4bbcef0acab5f771d6695e"}, {file = "tiktoken-0.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9269348cb650726f44dd3bbb3f9110ac19a8dcc8f54949ad3ef652ca22a38e21"}, @@ -7537,6 +8136,8 @@ version = "1.0.12" description = "PyTorch Image Models" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "timm-1.0.12-py3-none-any.whl", hash = "sha256:6b2770674213f10b7f193be5598ce48bd010ab21cc8af77dba6aeef58b1298a1"}, {file = "timm-1.0.12.tar.gz", hash = "sha256:9da490683bd06302ec40e1892f1ccf87985f033e41f3580887d886b9aee9449a"}, @@ -7555,6 +8156,8 @@ version = "1.4.0" description = "A tiny CSS parser" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289"}, {file = "tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7"}, @@ -7573,6 +8176,8 @@ version = "0.19.1" description = "" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "tokenizers-0.19.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:952078130b3d101e05ecfc7fc3640282d74ed26bcf691400f872563fca15ac97"}, {file = "tokenizers-0.19.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:82c8b8063de6c0468f08e82c4e198763e7b97aabfe573fd4cf7b33930ca4df77"}, @@ -7690,6 +8295,7 @@ version = "2.2.1" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, @@ -7724,6 +8330,7 @@ files = [ {file = "tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc"}, {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"}, ] +markers = {main = "python_version <= \"3.11\" or python_version >= \"3.12\"", dev = "python_version < \"3.11\""} [[package]] name = "tomlkit" @@ -7731,6 +8338,8 @@ version = "0.13.2" description = "Style preserving TOML library" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "tomlkit-0.13.2-py3-none-any.whl", hash = "sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde"}, {file = "tomlkit-0.13.2.tar.gz", hash = "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79"}, @@ -7742,6 +8351,8 @@ version = "2.4.1" description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration" optional = false python-versions = ">=3.8.0" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "torch-2.4.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:362f82e23a4cd46341daabb76fba08f04cd646df9bfaf5da50af97cb60ca4971"}, {file = "torch-2.4.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:e8ac1985c3ff0f60d85b991954cfc2cc25f79c84545aead422763148ed2759e3"}, @@ -7796,6 +8407,8 @@ version = "2.4.1" description = "An audio package for PyTorch" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "torchaudio-2.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:661909751909340b24f637410dfec02a888867816c3db19ed4f4102ae105244a"}, {file = "torchaudio-2.4.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:bfc234cef1d03092ea27440fb79e486722ccb41cff94ebaf9d5a1082436395fe"}, @@ -7828,6 +8441,8 @@ version = "0.2.6" description = "SDE solvers and stochastic adjoint sensitivity analysis in PyTorch." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "torchsde-0.2.6-py3-none-any.whl", hash = "sha256:19bf7ff02eec7e8e46ba1cdb4aa0f9db1c51d492524a16975234b467f7fc463b"}, {file = "torchsde-0.2.6.tar.gz", hash = "sha256:81d074d3504f9d190f1694fb526395afbe4608ee43a88adb1262a639e5b4778b"}, @@ -7845,6 +8460,8 @@ version = "0.19.1" description = "image and video datasets and models for torch deep learning" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "torchvision-0.19.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:54e8513099e6f586356c70f809d34f391af71ad182fe071cc328a28af2c40608"}, {file = "torchvision-0.19.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:20a1f5e02bfdad7714e55fa3fa698347c11d829fa65e11e5a84df07d93350eed"}, @@ -7883,6 +8500,8 @@ version = "4.67.0" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "tqdm-4.67.0-py3-none-any.whl", hash = "sha256:0cd8af9d56911acab92182e88d763100d4788bdf421d251616040cc4d44863be"}, {file = "tqdm-4.67.0.tar.gz", hash = "sha256:fe5a6f95e6fe0b9755e9469b77b9c3cf850048224ecaa8293d7d2d31f97d869a"}, @@ -7904,6 +8523,8 @@ version = "0.2" description = "TQDM progress bar helpers for logging and other headless application" optional = false python-versions = ">3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "tqdm_loggable-0.2-py3-none-any.whl", hash = "sha256:9703046302b93a667166487759e6f3f49597e86c89eb132ba1f31caa07bf0941"}, {file = "tqdm_loggable-0.2.tar.gz", hash = "sha256:175abec3e1f63bbd2eac192fa5da075e80c7bb715d7ccf3cd1a29b7ab5af0617"}, @@ -7918,6 +8539,8 @@ version = "0.1.2" description = "Simple and tiny yield-based trampoline implementation." optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "trampoline-0.1.2-py3-none-any.whl", hash = "sha256:36cc9a4ff9811843d177fc0e0740efbd7da39eadfe6e50c9e2937cbc06d899d9"}, ] @@ -7928,6 +8551,8 @@ version = "4.43.3" description = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow" optional = false python-versions = ">=3.8.0" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "transformers-4.43.3-py3-none-any.whl", hash = "sha256:6552beada5d826c25ff9b79139d237ab9050c6ea96b73d7fd2f8a8ba23ee76a4"}, {file = "transformers-4.43.3.tar.gz", hash = "sha256:820c5b192bb1bf47250802901a8f0bf581e06b8fded89179d4ef08a1e903ee1c"}, @@ -7996,6 +8621,8 @@ version = "3.21.1" description = "Import, export, process, analyze and view triangular meshes." optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "trimesh-3.21.1-py3-none-any.whl", hash = "sha256:2275cb824a499b0dc0180edb0234493e164024533f00e3193afeaf610c808b82"}, {file = "trimesh-3.21.1.tar.gz", hash = "sha256:ec6ec3abbb734b71d22b8cd70e363dd4eed6fac0c3dc8dcac0ee47ec1918fcbc"}, @@ -8015,6 +8642,8 @@ version = "0.28.0" description = "A friendly Python library for async concurrency and I/O" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "trio-0.28.0-py3-none-any.whl", hash = "sha256:56d58977acc1635735a96581ec70513cc781b8b6decd299c487d3be2a721cd94"}, {file = "trio-0.28.0.tar.gz", hash = "sha256:4e547896fe9e8a5658e54e4c7c5fa1db748cbbbaa7c965e7d40505b928c73c05"}, @@ -8035,6 +8664,8 @@ version = "0.11.1" description = "WebSocket library for Trio" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "trio-websocket-0.11.1.tar.gz", hash = "sha256:18c11793647703c158b1f6e62de638acada927344d534e3c7628eedcb746839f"}, {file = "trio_websocket-0.11.1-py3-none-any.whl", hash = "sha256:520d046b0d030cf970b8b2b2e00c4c2245b3807853ecd44214acd33d74581638"}, @@ -8051,6 +8682,8 @@ version = "3.0.0" description = "A language and compiler for custom Deep Learning operations" optional = false python-versions = "*" +groups = ["main"] +markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version <= \"3.11\" or platform_system == \"Linux\" and python_version >= \"3.12\" and platform_machine == \"x86_64\" and python_version < \"3.13\"" files = [ {file = "triton-3.0.0-1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e1efef76935b2febc365bfadf74bcb65a6f959a9872e5bddf44cc9e0adce1e1a"}, {file = "triton-3.0.0-1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5ce8520437c602fb633f1324cc3871c47bee3b67acf9756c1a66309b60e3216c"}, @@ -8073,6 +8706,8 @@ version = "0.15.1" description = "Typer, build great CLIs. Easy to code. Based on Python type hints." optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "typer-0.15.1-py3-none-any.whl", hash = "sha256:7994fb7b8155b64d3402518560648446072864beefd44aa2dc36972a5972e847"}, {file = "typer-0.15.1.tar.gz", hash = "sha256:a0588c0a7fa68a1978a069818657778f86abe6ff5ea6abf472f940a08bfe4f0a"}, @@ -8090,6 +8725,8 @@ version = "4.12.2" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, @@ -8101,6 +8738,8 @@ version = "2024.2" description = "Provider of IANA time zone data" optional = false python-versions = ">=2" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "tzdata-2024.2-py2.py3-none-any.whl", hash = "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd"}, {file = "tzdata-2024.2.tar.gz", hash = "sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc"}, @@ -8112,6 +8751,8 @@ version = "5.10.0" description = "Ultra fast JSON encoder and decoder for Python" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "ujson-5.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2601aa9ecdbee1118a1c2065323bda35e2c5a2cf0797ef4522d485f9d3ef65bd"}, {file = "ujson-5.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:348898dd702fc1c4f1051bc3aacbf894caa0927fe2c53e68679c073375f732cf"}, @@ -8199,6 +8840,8 @@ version = "4.1.1" description = "Implementation of RFC 6570 URI Templates" optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "uritemplate-4.1.1-py2.py3-none-any.whl", hash = "sha256:830c08b8d99bdd312ea4ead05994a38e8936266f84b9a7878232db50b044e02e"}, {file = "uritemplate-4.1.1.tar.gz", hash = "sha256:4346edfc5c3b79f694bccd6d6099a322bbeb628dbf2cd86eea55a456ce5124f0"}, @@ -8210,6 +8853,8 @@ version = "2.3.0" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df"}, {file = "urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d"}, @@ -8230,6 +8875,8 @@ version = "0.32.0" description = "The lightning-fast ASGI server." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "uvicorn-0.32.0-py3-none-any.whl", hash = "sha256:60b8f3a5ac027dcd31448f411ced12b5ef452c646f76f02f8cc3f25d8d26fd82"}, {file = "uvicorn-0.32.0.tar.gz", hash = "sha256:f78b36b143c16f54ccdb8190d0a26b5f1901fe5a3c777e1ab29f26391af8551e"}, @@ -8256,6 +8903,8 @@ version = "0.21.0" description = "Fast implementation of asyncio event loop on top of libuv" optional = false python-versions = ">=3.8.0" +groups = ["main"] +markers = "(sys_platform != \"win32\" and sys_platform != \"cygwin\") and platform_python_implementation != \"PyPy\" and (python_version >= \"3.12\" or python_version <= \"3.11\")" files = [ {file = "uvloop-0.21.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ec7e6b09a6fdded42403182ab6b832b71f4edaf7f37a9a0e371a01db5f0cb45f"}, {file = "uvloop-0.21.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:196274f2adb9689a289ad7d65700d37df0c0930fd8e4e743fa4834e850d7719d"}, @@ -8307,6 +8956,8 @@ version = "6.0.0" description = "Filesystem events monitoring" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1cdb490583ebd691c012b3d6dae011000fe42edb7a82ece80965b42abd61f26"}, {file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc64ab3bdb6a04d69d4023b29422170b74681784ffb9463ed4870cf2f3e66112"}, @@ -8349,6 +9000,8 @@ version = "1.0.3" description = "Simple, modern and high performance file watching and code reload in python." optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "watchfiles-1.0.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:1da46bb1eefb5a37a8fb6fd52ad5d14822d67c498d99bda8754222396164ae42"}, {file = "watchfiles-1.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2b961b86cd3973f5822826017cad7f5a75795168cb645c3a6b30c349094e02e3"}, @@ -8432,6 +9085,8 @@ version = "0.2.13" description = "Measures the displayed width of unicode strings in a terminal" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, @@ -8443,6 +9098,8 @@ version = "0.5.1" description = "Character encoding aliases for legacy web content" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, @@ -8454,6 +9111,8 @@ version = "1.8.0" description = "WebSocket client for Python with low level API options" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "websocket_client-1.8.0-py3-none-any.whl", hash = "sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526"}, {file = "websocket_client-1.8.0.tar.gz", hash = "sha256:3239df9f44da632f96012472805d40a23281a991027ce11d2f45a6f24ac4c3da"}, @@ -8470,6 +9129,8 @@ version = "14.1" description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "websockets-14.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a0adf84bc2e7c86e8a202537b4fd50e6f7f0e4a6b6bf64d7ccb96c4cd3330b29"}, {file = "websockets-14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:90b5d9dfbb6d07a84ed3e696012610b6da074d97453bd01e0e30744b472c8179"}, @@ -8548,6 +9209,8 @@ version = "3.1.3" description = "The comprehensive WSGI web application library." optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "werkzeug-3.1.3-py3-none-any.whl", hash = "sha256:54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e"}, {file = "werkzeug-3.1.3.tar.gz", hash = "sha256:60723ce945c19328679790e3282cc758aa4a6040e4bb330f53d30fa546d44746"}, @@ -8565,6 +9228,8 @@ version = "0.44.0" description = "A built-package format for Python" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "wheel-0.44.0-py3-none-any.whl", hash = "sha256:2376a90c98cc337d18623527a97c31797bd02bad0033d41547043a1cbfbe448f"}, {file = "wheel-0.44.0.tar.gz", hash = "sha256:a29c3f2817e95ab89aa4660681ad547c0e9547f20e75b0562fe7723c9a2a9d49"}, @@ -8579,6 +9244,8 @@ version = "1.17.0" description = "Module for decorators, wrappers and monkey patching." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "wrapt-1.17.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2a0c23b8319848426f305f9cb0c98a6e32ee68a36264f45948ccf8e7d2b941f8"}, {file = "wrapt-1.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1ca5f060e205f72bec57faae5bd817a1560fcfc4af03f414b08fa29106b7e2d"}, @@ -8653,6 +9320,8 @@ version = "1.2.0" description = "WebSockets state-machine based protocol implementation" optional = false python-versions = ">=3.7.0" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "wsproto-1.2.0-py3-none-any.whl", hash = "sha256:b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736"}, {file = "wsproto-1.2.0.tar.gz", hash = "sha256:ad565f26ecb92588a3e43bc3d96164de84cd9902482b130d0ddbaa9664a85065"}, @@ -8667,6 +9336,8 @@ version = "3.2.0" description = "A Python module for creating Excel XLSX files." optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "XlsxWriter-3.2.0-py3-none-any.whl", hash = "sha256:ecfd5405b3e0e228219bcaf24c2ca0915e012ca9464a14048021d21a995d490e"}, {file = "XlsxWriter-3.2.0.tar.gz", hash = "sha256:9977d0c661a72866a61f9f7a809e25ebbb0fb7036baa3b9fe74afcfca6b3cb8c"}, @@ -8678,6 +9349,8 @@ version = "0.14.2" description = "Makes working with XML feel like you are working with JSON" optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "xmltodict-0.14.2-py2.py3-none-any.whl", hash = "sha256:20cc7d723ed729276e808f26fb6b3599f786cbc37e06c65e192ba77c40f20aac"}, {file = "xmltodict-0.14.2.tar.gz", hash = "sha256:201e7c28bb210e374999d1dde6382923ab0ed1a8a5faeece48ab525b7810a553"}, @@ -8689,6 +9362,8 @@ version = "3.5.0" description = "Python binding for xxHash" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "xxhash-3.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ece616532c499ee9afbb83078b1b952beffef121d989841f7f4b3dc5ac0fd212"}, {file = "xxhash-3.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3171f693dbc2cef6477054a665dc255d996646b4023fe56cb4db80e26f4cc520"}, @@ -8821,6 +9496,8 @@ version = "0.1.8" description = "Yet Another Configuration System" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "yacs-0.1.8-py2-none-any.whl", hash = "sha256:d43d1854c1ffc4634c5b349d1c1120f86f05c3a294c9d141134f282961ab5d94"}, {file = "yacs-0.1.8-py3-none-any.whl", hash = "sha256:99f893e30497a4b66842821bac316386f7bd5c4f47ad35c9073ef089aa33af32"}, @@ -8836,6 +9513,8 @@ version = "0.40.2" description = "A formatter for Python code" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "yapf-0.40.2-py3-none-any.whl", hash = "sha256:adc8b5dd02c0143108878c499284205adb258aad6db6634e5b869e7ee2bd548b"}, {file = "yapf-0.40.2.tar.gz", hash = "sha256:4dab8a5ed7134e26d57c1647c7483afb3f136878b579062b786c9ba16b94637b"}, @@ -8852,6 +9531,8 @@ version = "1.18.3" description = "Yet another URL library" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "yarl-1.18.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7df647e8edd71f000a5208fe6ff8c382a1de8edfbccdbbfe649d263de07d8c34"}, {file = "yarl-1.18.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c69697d3adff5aa4f874b19c0e4ed65180ceed6318ec856ebc423aa5850d84f7"}, @@ -8948,6 +9629,8 @@ version = "0.6.2" description = "This is an python API which allows you to get the transcripts/subtitles for a given YouTube video. It also works for automatically generated subtitles, supports translating subtitles and it does not require a headless browser, like other selenium based solutions do!" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "youtube_transcript_api-0.6.2-py3-none-any.whl", hash = "sha256:019dbf265c6a68a0591c513fff25ed5a116ce6525832aefdfb34d4df5567121c"}, {file = "youtube_transcript_api-0.6.2.tar.gz", hash = "sha256:cad223d7620633cec44f657646bffc8bbc5598bd8e70b1ad2fa8277dec305eb7"}, @@ -8962,6 +9645,8 @@ version = "3.21.0" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"}, {file = "zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4"}, @@ -8976,6 +9661,6 @@ test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", type = ["pytest-mypy"] [metadata] -lock-version = "2.0" +lock-version = "2.1" python-versions = "^3.10" -content-hash = "59e637ca908e94b2f10b4cccfcc1193b7a7a54abd13218ef048e98cbccb6f9bc" +content-hash = "ddc4cdc507818b8be6b26006171823b20e4c7d432d667a4df1f8ec2a8af69e15" diff --git a/pyproject.toml b/pyproject.toml index b0f629af..e352e579 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -44,6 +44,7 @@ python-docx = "1.1.2" diffusers = { extras = ["torch"], version = "0.31.0" } einops = "0.8.0" fastapi = "0.115.5" +feedparser = "6.0.11" filelock = "3.16.1" ffmpeg-python = "0.2.0" freezegun = "1.5.1" diff --git a/src/nodetool/metadata/nodes.json b/src/nodetool/metadata/nodes.json index 24a65af3..7df41fc0 100644 --- a/src/nodetool/metadata/nodes.json +++ b/src/nodetool/metadata/nodes.json @@ -1727,7 +1727,7 @@ }, { "title": "Index Images", - "description": "Index a list of image assets or files.", + "description": "Index a list of image assets or files.\n chroma, embedding, collection, RAG, index, image, batch", "namespace": "chroma.index", "node_type": "chroma.index.IndexImages", "layout": "default", @@ -1800,7 +1800,7 @@ }, { "title": "Index Texts", - "description": "Index a list of text assets or files.", + "description": "Index a list of text assets or files.\n chroma, embedding, collection, RAG, index, text, batch", "namespace": "chroma.index", "node_type": "chroma.index.IndexTexts", "layout": "default", @@ -1857,7 +1857,7 @@ }, { "title": "Index Image", - "description": "Index a single image asset.", + "description": "Index a single image asset.\n chroma, embedding, collection, RAG, index, image", "namespace": "chroma.index", "node_type": "chroma.index.IndexImage", "layout": "default", @@ -1911,7 +1911,7 @@ }, { "title": "Index Text", - "description": "Index a single text asset.", + "description": "Index a single text asset.\n chroma, embedding, collection, RAG, index, text", "namespace": "chroma.index", "node_type": "chroma.index.IndexText", "layout": "default", @@ -1965,7 +1965,7 @@ }, { "title": "Index Text Chunk", - "description": "Index a single text chunk.", + "description": "Index a single text chunk.\n chroma, embedding, collection, RAG, index, text, chunk", "namespace": "chroma.index", "node_type": "chroma.index.IndexTextChunk", "layout": "default", @@ -2019,7 +2019,7 @@ }, { "title": "Index Text Chunks", - "description": "Index multiple text chunks at once.", + "description": "Index multiple text chunks at once.\n chroma, embedding, collection, RAG, index, text, chunk, batch", "namespace": "chroma.index", "node_type": "chroma.index.IndexTextChunks", "layout": "default", @@ -2076,7 +2076,7 @@ }, { "title": "Index String", - "description": "Index a string with a Document ID to a collection.\n text, document_id, collection, index, save\n\n Use cases:\n - Index documents for a vector search", + "description": "Index a string with a Document ID to a collection.\n chroma, embedding, collection, RAG, index, text, string\n\n Use cases:\n - Index documents for a vector search", "namespace": "chroma.index", "node_type": "chroma.index.IndexString", "layout": "default", @@ -22047,6 +22047,134 @@ "end_index" ] }, + { + "title": "To List", + "description": "Convert dataframe to list of dictionaries.\n dataframe, list, convert\n\n Use cases:\n - Convert dataframe data for API consumption\n - Transform data for JSON serialization\n - Prepare data for document-based storage", + "namespace": "nodetool.dataframe", + "node_type": "nodetool.dataframe.ToList", + "layout": "default", + "properties": [ + { + "name": "dataframe", + "type": { + "type": "dataframe", + "optional": false, + "values": null, + "type_args": [], + "type_name": null + }, + "default": { + "type": "dataframe", + "uri": "", + "asset_id": null, + "data": null, + "columns": null + }, + "title": "Dataframe", + "description": "The input dataframe to convert.", + "min": null, + "max": null + } + ], + "outputs": [ + { + "type": { + "type": "list", + "optional": false, + "values": null, + "type_args": [ + { + "type": "dict", + "optional": false, + "values": null, + "type_args": [], + "type_name": null + } + ], + "type_name": null + }, + "name": "output", + "stream": false + } + ], + "the_model_info": {}, + "recommended_models": [], + "basic_fields": [ + "dataframe" + ] + }, + { + "title": "Map Template", + "description": "Maps a template string over dataframe rows.\n dataframe, template, format, string\n\n Use cases:\n - Format each row into a custom string representation\n - Generate text summaries from structured data\n - Create formatted output from dataframe records\n \n Example:\n Template: \"Name: {name}, Age: {age}\"\n Row: {\"name\": \"Alice\", \"age\": 30}\n Output: \"Name: Alice, Age: 30\"", + "namespace": "nodetool.dataframe", + "node_type": "nodetool.dataframe.MapTemplate", + "layout": "default", + "properties": [ + { + "name": "dataframe", + "type": { + "type": "dataframe", + "optional": false, + "values": null, + "type_args": [], + "type_name": null + }, + "default": { + "type": "dataframe", + "uri": "", + "asset_id": null, + "data": null, + "columns": null + }, + "title": "Dataframe", + "description": "The input dataframe.", + "min": null, + "max": null + }, + { + "name": "template", + "type": { + "type": "str", + "optional": false, + "values": null, + "type_args": [], + "type_name": null + }, + "default": "", + "title": "Template", + "description": "Template string with placeholders matching column names (e.g., {column_name}).", + "min": null, + "max": null + } + ], + "outputs": [ + { + "type": { + "type": "list", + "optional": false, + "values": null, + "type_args": [ + { + "type": "str", + "optional": false, + "values": null, + "type_args": [], + "type_name": null + } + ], + "type_name": null + }, + "name": "output", + "stream": false + } + ], + "the_model_info": {}, + "recommended_models": [], + "basic_fields": [ + "dataframe", + "template" + ] + }, { "title": "Today", "description": "Get the current date.\n date, today, now", @@ -22252,10 +22380,10 @@ "year": 2025, "month": 1, "day": 12, - "hour": 0, - "minute": 39, - "second": 18, - "microsecond": 436466, + "hour": 8, + "minute": 43, + "second": 43, + "microsecond": 340032, "tzinfo": "UTC", "utc_offset": 0.0 }, @@ -23294,10 +23422,10 @@ "year": 2025, "month": 1, "day": 12, - "hour": 0, - "minute": 39, - "second": 18, - "microsecond": 440481, + "hour": 8, + "minute": 43, + "second": 43, + "microsecond": 344448, "tzinfo": "UTC", "utc_offset": 0.0 }, @@ -23347,10 +23475,10 @@ "year": 2025, "month": 1, "day": 12, - "hour": 0, - "minute": 39, - "second": 18, - "microsecond": 440704, + "hour": 8, + "minute": 43, + "second": 43, + "microsecond": 344803, "tzinfo": "UTC", "utc_offset": 0.0 }, @@ -23400,10 +23528,10 @@ "year": 2025, "month": 1, "day": 12, - "hour": 0, - "minute": 39, - "second": 18, - "microsecond": 440924, + "hour": 8, + "minute": 43, + "second": 43, + "microsecond": 345032, "tzinfo": "UTC", "utc_offset": 0.0 }, @@ -23453,10 +23581,10 @@ "year": 2025, "month": 1, "day": 12, - "hour": 0, - "minute": 39, - "second": 18, - "microsecond": 441133, + "hour": 8, + "minute": 43, + "second": 43, + "microsecond": 345393, "tzinfo": "UTC", "utc_offset": 0.0 }, @@ -23506,10 +23634,10 @@ "year": 2025, "month": 1, "day": 12, - "hour": 0, - "minute": 39, - "second": 18, - "microsecond": 441386, + "hour": 8, + "minute": 43, + "second": 43, + "microsecond": 345698, "tzinfo": "UTC", "utc_offset": 0.0 }, @@ -23559,10 +23687,10 @@ "year": 2025, "month": 1, "day": 12, - "hour": 0, - "minute": 39, - "second": 18, - "microsecond": 441597, + "hour": 8, + "minute": 43, + "second": 43, + "microsecond": 346002, "tzinfo": "UTC", "utc_offset": 0.0 }, @@ -23612,10 +23740,10 @@ "year": 2025, "month": 1, "day": 12, - "hour": 0, - "minute": 39, - "second": 18, - "microsecond": 441829, + "hour": 8, + "minute": 43, + "second": 43, + "microsecond": 346238, "tzinfo": "UTC", "utc_offset": 0.0 }, @@ -23681,10 +23809,10 @@ "year": 2025, "month": 1, "day": 12, - "hour": 0, - "minute": 39, - "second": 18, - "microsecond": 442105, + "hour": 8, + "minute": 43, + "second": 43, + "microsecond": 346499, "tzinfo": "UTC", "utc_offset": 0.0 }, @@ -39955,7 +40083,7 @@ ] }, { - "title": "Get Request", + "title": "HTTP GET Request", "description": "Perform an HTTP GET request to retrieve data from a specified URL.\n http, get, request, url\n\n Use cases:\n - Fetch web page content\n - Retrieve API data\n - Download files\n - Check website availability", "namespace": "nodetool.network.http", "node_type": "nodetool.network.http.GetRequest", @@ -40059,7 +40187,7 @@ ] }, { - "title": "Post Request", + "title": "HTTP POST Request", "description": "Send data to a server using an HTTP POST request.\n http, post, request, url, data\n\n Use cases:\n - Submit form data\n - Create new resources on an API\n - Upload files\n - Authenticate users", "namespace": "nodetool.network.http", "node_type": "nodetool.network.http.PostRequest", @@ -40179,7 +40307,7 @@ ] }, { - "title": "Put Request", + "title": "HTTP PUT Request", "description": "Update existing resources on a server using an HTTP PUT request.\n http, put, request, url, data\n\n Use cases:\n - Update user profiles\n - Modify existing API resources\n - Replace file contents\n - Set configuration values", "namespace": "nodetool.network.http", "node_type": "nodetool.network.http.PutRequest", @@ -40299,7 +40427,7 @@ ] }, { - "title": "Delete Request", + "title": "HTTP DELETE Request", "description": "Remove a resource from a server using an HTTP DELETE request.\n http, delete, request, url\n\n Use cases:\n - Delete user accounts\n - Remove API resources\n - Cancel subscriptions\n - Clear cache entries", "namespace": "nodetool.network.http", "node_type": "nodetool.network.http.DeleteRequest", @@ -40403,7 +40531,7 @@ ] }, { - "title": "Head Request", + "title": "HTTP HEAD Request", "description": "Retrieve headers from a resource using an HTTP HEAD request.\n http, head, request, url\n\n Use cases:\n - Check resource existence\n - Get metadata without downloading content\n - Verify authentication or permissions", "namespace": "nodetool.network.http", "node_type": "nodetool.network.http.HeadRequest", @@ -41731,7 +41859,7 @@ ] }, { - "title": "Text ID", + "title": "Get Text ID", "description": "Returns the asset id.\n index, asset, identifier", "namespace": "nodetool.text", "node_type": "nodetool.text.TextID", @@ -41788,7 +41916,7 @@ ] }, { - "title": "Concat", + "title": "Concatenate Text", "description": "Concatenates two text inputs into a single output.\n text, concatenation, combine\n\n Use cases:\n - Joining outputs from multiple text processing nodes\n - Combining parts of sentences or paragraphs\n - Merging text data from different sources", "namespace": "nodetool.text", "node_type": "nodetool.text.Concat", @@ -41891,7 +42019,7 @@ ] }, { - "title": "Join", + "title": "Join Text", "description": "Joins a list of strings into a single string using a specified separator.\n text, join, combine\n\n Use cases:\n - Combining multiple text elements with a consistent delimiter\n - Creating comma-separated lists from individual items\n - Assembling formatted text from array elements", "namespace": "nodetool.text", "node_type": "nodetool.text.Join", @@ -41987,7 +42115,7 @@ ] }, { - "title": "Template", + "title": "Format Text", "description": "Replaces placeholders in a string with provided values.\n text, template, formatting\n\n Use cases:\n - Generating personalized messages with dynamic content\n - Creating parameterized queries or commands\n - Formatting text output based on variable inputs\n\n Examples:\n - text: \"Hello, {name}!\" values: {\"name\": \"Alice\"} -> \"Hello, Alice!\"\n - text: \"Hello, {0} {1}!\" values: [\"Alice\", \"Meyer\"] -> \"Hello, Alice Meyer!\"\n - text: \"Hello, {0}!\" values: \"Alice\" -> \"Hello, Alice!\"", "namespace": "nodetool.text", "node_type": "nodetool.text.Template", @@ -42119,7 +42247,7 @@ ] }, { - "title": "Replace", + "title": "Replace Text", "description": "Replaces a substring in a text with another substring.\n text, replace, substitute\n\n Use cases:\n - Correcting or updating specific text patterns\n - Sanitizing or normalizing text data\n - Implementing simple text transformations", "namespace": "nodetool.text", "node_type": "nodetool.text.Replace", @@ -42223,7 +42351,7 @@ ] }, { - "title": "JSONTo Dataframe", + "title": "Convert JSON to DataFrame", "description": "Transforms a JSON string into a pandas DataFrame.\n json, dataframe, conversion\n\n Use cases:\n - Converting API responses to tabular format\n - Preparing JSON data for analysis or visualization\n - Structuring unstructured JSON data for further processing", "namespace": "nodetool.text", "node_type": "nodetool.text.JSONToDataframe", @@ -42374,7 +42502,7 @@ ] }, { - "title": "Split", + "title": "Split Text", "description": "Separates text into a list of strings based on a specified delimiter.\n text, split, tokenize\n\n Use cases:\n - Parsing CSV or similar delimited data\n - Breaking down sentences into words or phrases\n - Extracting specific elements from structured text", "namespace": "nodetool.text", "node_type": "nodetool.text.Split", @@ -42455,7 +42583,7 @@ ] }, { - "title": "Extract", + "title": "Extract Text", "description": "Extracts a substring from input text.\n text, extract, substring\n\n Use cases:\n - Extracting specific portions of text for analysis\n - Trimming unwanted parts from text data\n - Focusing on relevant sections of longer documents", "namespace": "nodetool.text", "node_type": "nodetool.text.Extract", @@ -42559,7 +42687,7 @@ ] }, { - "title": "Chunk", + "title": "Split Text into Chunks", "description": "Splits text into chunks of specified word length.\n text, chunk, split\n\n Use cases:\n - Preparing text for processing by models with input length limits\n - Creating manageable text segments for parallel processing\n - Generating summaries of text sections", "namespace": "nodetool.text", "node_type": "nodetool.text.Chunk", @@ -42687,7 +42815,7 @@ ] }, { - "title": "Extract Regex", + "title": "Extract Regex Groups", "description": "Extracts substrings matching regex groups from text.\n text, regex, extract\n\n Use cases:\n - Extracting structured data (e.g., dates, emails) from unstructured text\n - Parsing specific patterns in log files or documents\n - Isolating relevant information from complex text formats", "namespace": "nodetool.text", "node_type": "nodetool.text.ExtractRegex", @@ -42816,7 +42944,7 @@ ] }, { - "title": "Find All Regex", + "title": "Find All Regex Matches", "description": "Finds all regex matches in text as separate substrings.\n text, regex, find\n\n Use cases:\n - Identifying all occurrences of a pattern in text\n - Extracting multiple instances of structured data\n - Analyzing frequency and distribution of specific text patterns", "namespace": "nodetool.text", "node_type": "nodetool.text.FindAllRegex", @@ -42945,7 +43073,7 @@ ] }, { - "title": "Parse JSON", + "title": "Parse JSON String", "description": "Parses a JSON string into a Python object.\n json, parse, convert\n\n Use cases:\n - Converting JSON API responses for further processing\n - Preparing structured data for analysis or storage\n - Extracting configuration or settings from JSON files", "namespace": "nodetool.text", "node_type": "nodetool.text.ParseJSON", @@ -43091,7 +43219,7 @@ ] }, { - "title": "Sentence Splitter", + "title": "Split Sentences", "description": "Splits text into chunks of a minimum length.\n text, split, sentences\n\n Use cases:\n - Splitting text into manageable chunks for processing\n - Creating traceable units for analysis or storage\n - Preparing text for language model processing", "namespace": "nodetool.text", "node_type": "nodetool.text.SentenceSplitter", @@ -43156,6 +43284,36 @@ "description": null, "min": null, "max": null + }, + { + "name": "chunk_size", + "type": { + "type": "int", + "optional": false, + "values": null, + "type_args": [], + "type_name": null + }, + "default": 1000, + "title": "Chunk Size", + "description": null, + "min": null, + "max": null + }, + { + "name": "chunk_overlap", + "type": { + "type": "int", + "optional": false, + "values": null, + "type_args": [], + "type_name": null + }, + "default": 200, + "title": "Chunk Overlap", + "description": null, + "min": null, + "max": null } ], "outputs": [ @@ -43184,11 +43342,13 @@ "basic_fields": [ "text", "min_length", - "source_id" + "source_id", + "chunk_size", + "chunk_overlap" ] }, { - "title": "Regex Match", + "title": "Find Regex Matches", "description": "Find all matches of a regex pattern in text.\n regex, search, pattern, match\n\n Use cases:\n - Extract specific patterns from text\n - Validate text against patterns\n - Find all occurrences of a pattern", "namespace": "nodetool.text", "node_type": "nodetool.text.RegexMatch", @@ -43270,7 +43430,7 @@ ] }, { - "title": "Regex Replace", + "title": "Replace with Regex", "description": "Replace text matching a regex pattern.\n regex, replace, substitute\n\n Use cases:\n - Clean or standardize text\n - Remove unwanted patterns\n - Transform text formats", "namespace": "nodetool.text", "node_type": "nodetool.text.RegexReplace", @@ -43360,7 +43520,7 @@ ] }, { - "title": "Regex Split", + "title": "Split with Regex", "description": "Split text using a regex pattern as delimiter.\n regex, split, tokenize\n\n Use cases:\n - Parse structured text\n - Extract fields from formatted strings\n - Tokenize text", "namespace": "nodetool.text", "node_type": "nodetool.text.RegexSplit", @@ -43442,7 +43602,7 @@ ] }, { - "title": "Regex Validate", + "title": "Validate with Regex", "description": "Check if text matches a regex pattern.\n regex, validate, check\n\n Use cases:\n - Validate input formats (email, phone, etc)\n - Check text structure\n - Filter text based on patterns", "namespace": "nodetool.text", "node_type": "nodetool.text.RegexValidate", @@ -43500,7 +43660,7 @@ ] }, { - "title": "Regex Extract", + "title": "Extract Regex Groups", "description": "Extract named groups from text using regex.\n regex, extract, groups\n\n Use cases:\n - Parse structured data\n - Extract semantic components\n - Named field extraction", "namespace": "nodetool.text", "node_type": "nodetool.text.RegexExtract", @@ -43558,7 +43718,7 @@ ] }, { - "title": "HTMLTo Text", + "title": "Convert HTML to Text", "description": "Converts HTML to plain text by removing tags and decoding entities using BeautifulSoup.\n html, text, convert\n\n Use cases:\n - Cleaning HTML content for text analysis\n - Extracting readable content from web pages\n - Preparing HTML data for natural language processing", "namespace": "nodetool.text", "node_type": "nodetool.text.HTMLToText", @@ -43646,7 +43806,7 @@ ] }, { - "title": "Slice", + "title": "Slice Text", "description": "Slices text using Python's slice notation (start:stop:step).\n text, slice, substring\n\n Use cases:\n - Extracting specific portions of text with flexible indexing\n - Reversing text using negative step\n - Taking every nth character with step parameter\n\n Examples:\n - start=0, stop=5: first 5 characters\n - start=-5: last 5 characters\n - step=2: every second character\n - step=-1: reverse the text", "namespace": "nodetool.text", "node_type": "nodetool.text.Slice", @@ -43811,7 +43971,7 @@ ] }, { - "title": "Recursive Text Splitter", + "title": "Split Recursively", "description": "Splits text recursively using LangChain's RecursiveCharacterTextSplitter.\n text, split, chunks\n\n Use cases:\n - Splitting documents while preserving semantic relationships\n - Creating chunks for language model processing\n - Handling text in languages with/without word boundaries", "namespace": "nodetool.text", "node_type": "nodetool.text.RecursiveTextSplitter", @@ -43952,7 +44112,7 @@ ] }, { - "title": "Markdown Splitter", + "title": "Split Markdown", "description": "Splits markdown text by headers while preserving header hierarchy in metadata.\n markdown, split, headers\n\n Use cases:\n - Splitting markdown documentation while preserving structure\n - Processing markdown files for semantic search\n - Creating context-aware chunks from markdown content", "namespace": "nodetool.text", "node_type": "nodetool.text.MarkdownSplitter", @@ -44310,7 +44470,7 @@ ] }, { - "title": "Contains", + "title": "Contains Text", "description": "Checks if text contains a specified substring.\n text, check, contains, compare, validate, substring, string\n\n Use cases:\n - Searching for keywords in text\n - Filtering content based on presence of terms\n - Validating text content", "namespace": "nodetool.text", "node_type": "nodetool.text.Contains", @@ -44472,7 +44632,7 @@ ] }, { - "title": "Has Length", + "title": "Check Length", "description": "Checks if text length meets specified conditions.\n text, check, length, compare, validate, whitespace, string\n\n Use cases:\n - Validating input length requirements\n - Filtering text by length\n - Checking content size constraints", "namespace": "nodetool.text", "node_type": "nodetool.text.HasLength", @@ -44621,6 +44781,83 @@ "exact_length" ] }, + { + "title": "Count Tokens", + "description": "Counts the number of tokens in text using tiktoken.\n text, tokens, count, encoding\n\n Use cases:\n - Checking text length for LLM input limits\n - Estimating API costs\n - Managing token budgets in text processing", + "namespace": "nodetool.text", + "node_type": "nodetool.text.CountTokens", + "layout": "default", + "properties": [ + { + "name": "text", + "type": { + "type": "union", + "optional": false, + "values": null, + "type_args": [ + { + "type": "str", + "optional": false, + "values": null, + "type_args": [], + "type_name": null + }, + { + "type": "text", + "optional": false, + "values": null, + "type_args": [], + "type_name": null + } + ], + "type_name": null + }, + "default": "", + "title": "Text", + "description": null, + "min": null, + "max": null + }, + { + "name": "encoding", + "type": { + "type": "enum", + "optional": false, + "values": [ + "cl100k_base", + "p50k_base", + "r50k_base" + ], + "type_args": [], + "type_name": "nodetool.nodes.nodetool.text.TiktokenEncoding" + }, + "default": "cl100k_base", + "title": "Encoding", + "description": "The tiktoken encoding to use for token counting", + "min": null, + "max": null + } + ], + "outputs": [ + { + "type": { + "type": "int", + "optional": false, + "values": null, + "type_args": [], + "type_name": null + }, + "name": "output", + "stream": false + } + ], + "the_model_info": {}, + "recommended_models": [], + "basic_fields": [ + "text", + "encoding" + ] + }, { "title": "Email Fields", "description": "Decomposes an email into its individual components.\n email, decompose, extract\n\n Takes an Email object and returns its individual fields:\n - id: Message ID\n - subject: Email subject\n - sender: Sender address\n - date: Datetime of email\n - body: Email body content", @@ -44915,6 +45152,202 @@ "max_results" ] }, + { + "title": "Fetch RSS Feed", + "description": "Fetches and parses an RSS feed from a URL.\n rss, feed, network\n \n Use cases:\n - Monitor news feeds\n - Aggregate content from multiple sources\n - Process blog updates", + "namespace": "nodetool.network.rss", + "node_type": "nodetool.network.rss.FetchRSSFeed", + "layout": "default", + "properties": [ + { + "name": "url", + "type": { + "type": "str", + "optional": false, + "values": null, + "type_args": [], + "type_name": null + }, + "default": "", + "title": "Url", + "description": "URL of the RSS feed to fetch", + "min": null, + "max": null + } + ], + "outputs": [ + { + "type": { + "type": "list", + "optional": false, + "values": null, + "type_args": [ + { + "type": "rss_entry", + "optional": false, + "values": null, + "type_args": [], + "type_name": null + } + ], + "type_name": null + }, + "name": "output", + "stream": false + } + ], + "the_model_info": {}, + "recommended_models": [], + "basic_fields": [ + "url" + ] + }, + { + "title": "Extract RSS Entry Fields", + "description": "Extracts fields from an RSS entry.\n rss, entry, fields", + "namespace": "nodetool.network.rss", + "node_type": "nodetool.network.rss.RSSEntryFields", + "layout": "default", + "properties": [ + { + "name": "entry", + "type": { + "type": "rss_entry", + "optional": false, + "values": null, + "type_args": [], + "type_name": null + }, + "default": { + "type": "rss_entry", + "title": "", + "link": "", + "published": { + "type": "datetime", + "year": 0, + "month": 0, + "day": 0, + "hour": 0, + "minute": 0, + "second": 0, + "microsecond": 0, + "tzinfo": "UTC", + "utc_offset": 0 + }, + "summary": "", + "author": "" + }, + "title": "Entry", + "description": "The RSS entry to extract fields from.", + "min": null, + "max": null + } + ], + "outputs": [ + { + "type": { + "type": "str", + "optional": false, + "values": null, + "type_args": [], + "type_name": null + }, + "name": "title", + "stream": false + }, + { + "type": { + "type": "str", + "optional": false, + "values": null, + "type_args": [], + "type_name": null + }, + "name": "link", + "stream": false + }, + { + "type": { + "type": "datetime", + "optional": false, + "values": null, + "type_args": [], + "type_name": null + }, + "name": "published", + "stream": false + }, + { + "type": { + "type": "str", + "optional": false, + "values": null, + "type_args": [], + "type_name": null + }, + "name": "summary", + "stream": false + }, + { + "type": { + "type": "str", + "optional": false, + "values": null, + "type_args": [], + "type_name": null + }, + "name": "author", + "stream": false + } + ], + "the_model_info": {}, + "recommended_models": [], + "basic_fields": [ + "entry" + ] + }, + { + "title": "Extract Feed Metadata", + "description": "Extracts metadata from an RSS feed.\n rss, metadata, feed\n \n Use cases:\n - Get feed information\n - Validate feed details\n - Extract feed metadata", + "namespace": "nodetool.network.rss", + "node_type": "nodetool.network.rss.ExtractFeedMetadata", + "layout": "default", + "properties": [ + { + "name": "url", + "type": { + "type": "str", + "optional": false, + "values": null, + "type_args": [], + "type_name": null + }, + "default": "", + "title": "Url", + "description": "URL of the RSS feed", + "min": null, + "max": null + } + ], + "outputs": [ + { + "type": { + "type": "dict", + "optional": false, + "values": null, + "type_args": [], + "type_name": null + }, + "name": "output", + "stream": false + } + ], + "the_model_info": {}, + "recommended_models": [], + "basic_fields": [ + "url" + ] + }, { "title": "Get Environment Variable", "description": "Gets an environment variable value.\n environment, variable, system\n\n Use cases:\n - Access configuration\n - Get system settings", @@ -70029,7 +70462,7 @@ }, { "title": "KSampler Select", - "description": "The KSampler Select node allows choosing a specific sampler for the diffusion process.\n Different samplers can produce varying results or have different performance characteristics.", + "description": "Select a specific sampler for the diffusion process with different performance characteristics and output qualities.\n sampling, diffusion\n Use cases:\n - Experimenting with different sampling methods for optimal image quality\n - Balancing speed vs quality in image generation\n - Testing model behavior with different sampling algorithms", "namespace": "comfy.sampling.samplers", "node_type": "comfy.sampling.samplers.KSamplerSelect", "layout": "default", @@ -70094,7 +70527,7 @@ }, { "title": "Sampler DPMPP 2 M SDE", - "description": "The SamplerDPMPP_2M_SDE node implements the DPMPP (2M) SDE sampler, which is an advanced\n sampling method that can potentially produce high-quality results with fewer steps.", + "description": "Advanced DPMPP (2M) SDE sampler implementation offering high-quality results with fewer steps.\n sampling, diffusion, sde, dpmpp\n Use cases:\n - High-quality image generation with reduced step count\n - Performance-optimized sampling for production workflows\n - Advanced noise control with GPU/CPU options", "namespace": "comfy.sampling.samplers", "node_type": "comfy.sampling.samplers.SamplerDPMPP_2M_SDE", "layout": "default", @@ -70190,7 +70623,7 @@ }, { "title": "Sampler DPMPP SDE", - "description": "The SamplerDPMPP_SDE node implements the DPMPP SDE sampler, another advanced sampling\n method that can offer good performance and quality in certain scenarios.", + "description": "Implementation of DPMPP SDE sampler with configurable noise and performance parameters.\n sampling, diffusion, sde, dpmpp\n Use cases:\n - Efficient image generation with controllable noise levels\n - Fine-tuning sampling parameters for specific image styles\n - Balancing quality and speed with custom parameters", "namespace": "comfy.sampling.samplers", "node_type": "comfy.sampling.samplers.SamplerDPMPP_SDE", "layout": "default", @@ -70283,7 +70716,7 @@ }, { "title": "Sampler Custom", - "description": "The SamplerCustom node provides a customizable sampling process, allowing fine-grained\n control over various sampling parameters including noise, CFG, and conditioning.", + "description": "Customizable sampling process with fine-grained control over noise, CFG, and conditioning parameters.\n sampling, cfg, noise, conditioning\n Use cases:\n - Advanced sampling control for complex image generation tasks\n - Customizing sampling parameters for specific models or tasks\n - Fine-tuning sampling for specific effects or styles", "namespace": "comfy.sampling.samplers", "node_type": "comfy.sampling.samplers.SamplerCustom", "layout": "default", @@ -70472,7 +70905,7 @@ }, { "title": "Sampler Custom Advanced", - "description": "The SamplerCustomAdvanced node offers even more advanced customization options for\n the sampling process, including separate control over noise, guidance, and the ability\n to output both the final latent and the denoised latent.", + "description": "Advanced sampling implementation with separate control over noise, guidance, and multiple output options.\n sampling, noise, guidance, cfg\n Use cases:\n - Complex image generation requiring precise noise control\n - Workflows needing access to intermediate denoised results\n - Advanced guidance-based sampling applications", "namespace": "comfy.sampling.samplers", "node_type": "comfy.sampling.samplers.SamplerCustomAdvanced", "layout": "default", @@ -71343,7 +71776,7 @@ }, { "title": "Basic Guider", - "description": "The Basic Guider node provides a simple guidance mechanism for the sampling process.\n It uses a single conditioning input to guide the model's generation.", + "description": "The Basic Guider node provides a simple guidance mechanism for the sampling process. It uses a single conditioning input to guide the model's generation.\n sampling, guidance, basic\n Use cases:\n - Simple guidance for image generation\n - Single conditioning input scenarios\n - Basic control over the sampling process", "namespace": "comfy.sampling.guiders", "node_type": "comfy.sampling.guiders.BasicGuider", "layout": "default", @@ -71408,7 +71841,7 @@ }, { "title": "CFGGuider", - "description": "The CFG (Classifier-Free Guidance) Guider node implements the classifier-free guidance\n method for controlling the generation process. It allows for separate positive and\n negative conditioning, along with a CFG scale parameter.", + "description": "The CFG (Classifier-Free Guidance) Guider node implements the classifier-free guidance method for controlling the generation process. It allows for separate positive and negative conditioning, along with a CFG scale parameter.\n sampling, guidance, cfg\n Use cases:\n - Advanced control over the sampling process\n - Combining multiple conditioning inputs\n - Creating diverse image variations", "namespace": "comfy.sampling.guiders", "node_type": "comfy.sampling.guiders.CFGGuider", "layout": "default", @@ -71502,7 +71935,7 @@ }, { "title": "Dual CFGGuider", - "description": "The Dual CFG Guider node extends the CFG guidance method by allowing two separate\n conditioning inputs, each with its own CFG scale. This can be useful for more\n complex guidance scenarios or when combining multiple concepts.", + "description": "The Dual CFG Guider node extends the CFG guidance method by allowing two separate conditioning inputs, each with its own CFG scale. This can be useful for more complex guidance scenarios or when combining multiple concepts.\n sampling, guidance, cfg, dual\n Use cases:\n - Advanced control over the sampling process\n - Combining multiple conditioning inputs\n - Creating diverse image variations", "namespace": "comfy.sampling.guiders", "node_type": "comfy.sampling.guiders.DualCFGGuider", "layout": "default", @@ -71634,7 +72067,7 @@ }, { "title": "Video Linear CFGGuidance", - "description": "The Video Linear CFG Guidance node applies a linear CFG guidance scheme specifically\n designed for video generation tasks. It allows setting a minimum CFG value to control\n the strength of the guidance throughout the video frames.", + "description": "The Video Linear CFG Guidance node applies a linear CFG guidance scheme specifically designed for video generation tasks. It allows setting a minimum CFG value to control the strength of the guidance throughout the video frames.\n sampling, guidance, cfg, video\n Use cases:\n - Creating consistent video outputs\n - Controlling the strength of guidance across frames\n - Enhancing video generation with CFG", "namespace": "comfy.sampling.guiders", "node_type": "comfy.sampling.guiders.VideoLinearCFGGuidance", "layout": "default", @@ -71696,7 +72129,7 @@ }, { "title": "Video Triangle CFGGuidance", - "description": "The Video Triangle CFG Guidance node applies a triangular CFG guidance scheme for\n video generation. This can create a varying strength of guidance across video frames,\n potentially leading to more dynamic or consistent video outputs.", + "description": "The Video Triangle CFG Guidance node applies a triangular CFG guidance scheme for video generation. This can create a varying strength of guidance across video frames, potentially leading to more dynamic or consistent video outputs.\n sampling, guidance, cfg, video\n Use cases:\n - Creating dynamic video outputs\n - Controlling the strength of guidance across frames\n - Enhancing video generation with CFG", "namespace": "comfy.sampling.guiders", "node_type": "comfy.sampling.guiders.VideoTriangleCFGGuidance", "layout": "default", @@ -98313,7 +98746,7 @@ }, { "title": "Gemini Agent", - "description": "Gemini version of the Agent node for task planning and goal decomposition.", + "description": "Gemini version of the Agent node for task planning and goal decomposition.\n agent, planning, task, decomposition\n Use cases:\n - Breaking down complex tasks into smaller steps\n - Creating task dependencies and workflows\n - Planning multi-step processes", "namespace": "google.agents", "node_type": "google.agents.GeminiAgent", "layout": "default", @@ -98399,7 +98832,7 @@ }, { "title": "Chain Of Thought", - "description": "Gemini version of chain-of-thought reasoning node.", + "description": "Gemini version of chain-of-thought reasoning node for breaking down complex problems into clear steps.\n agent, reasoning, analysis, problem-solving\n Use cases:\n - Analyzing complex problems step by step\n - Breaking down solutions into logical steps\n - Providing detailed reasoning for decisions", "namespace": "google.agents", "node_type": "google.agents.ChainOfThought", "layout": "default", @@ -98483,7 +98916,7 @@ }, { "title": "Data Generator", - "description": "Gemini version of the data generator for creating dataframes based on user prompts.\n Supports multimodal inputs including images and audio.", + "description": "Gemini version of the data generator for creating dataframes based on user prompts. Supports multimodal inputs including images and audio.\n data, generator, dataframe, multimodal\n Use cases:\n - Creating a dataset for a machine learning model\n - Creating a dataset for a data visualization\n - Creating a dataset for a data analysis", "namespace": "google.agents", "node_type": "google.agents.DataGenerator", "layout": "default", @@ -98620,7 +99053,7 @@ }, { "title": "SVGGenerator", - "description": "Gemini version of SVG generator for creating SVG elements based on user prompts.", + "description": "Gemini version of SVG generator for creating SVG elements based on user prompts.\n svg, generator, vector, graphics\n Use cases:\n - Creating vector graphics from text descriptions\n - Generating scalable illustrations\n - Creating custom icons and diagrams", "namespace": "google.agents", "node_type": "google.agents.SVGGenerator", "layout": "default", @@ -98746,7 +99179,7 @@ }, { "title": "Summarizer", - "description": "Gemini version of the summarizer for creating concise summaries of text content.", + "description": "Gemini version of the summarizer for creating concise summaries of text content.\n text, summarization, nlp, content\n Use cases:\n - Condensing long documents into key points\n - Creating executive summaries\n - Extracting main ideas from text", "namespace": "google.agents", "node_type": "google.agents.Summarizer", "layout": "default", diff --git a/src/nodetool/metadata/types.py b/src/nodetool/metadata/types.py index 7589078e..e1073c66 100644 --- a/src/nodetool/metadata/types.py +++ b/src/nodetool/metadata/types.py @@ -1605,12 +1605,23 @@ class IMAPConnection(BaseType): """Configuration for an IMAP email connection.""" type: Literal["imap_connection"] = "imap_connection" - host: str = Field(default="", description="IMAP server hostname") - port: int = Field(default=993, description="IMAP server port") - username: str = Field(default="", description="Email account username") - password: str = Field(default="", description="Email account password") - use_ssl: bool = Field(default=True, description="Whether to use SSL/TLS connection") + host: str = "" + port: int = 993 + username: str = "" + password: str = "" + use_ssl: bool = True def is_configured(self) -> bool: """Check if the connection has all required fields set.""" return bool(self.host and self.username and self.password) + + +class RSSEntry(BaseType): + """Represents an RSS entry.""" + + type: Literal["rss_entry"] = "rss_entry" + title: str = "" + link: str = "" + published: Datetime = Datetime() + summary: str = "" + author: str = "" diff --git a/src/nodetool/nodes/nodetool/__init__.py b/src/nodetool/nodes/nodetool/__init__.py index 5047810f..41001c59 100644 --- a/src/nodetool/nodes/nodetool/__init__.py +++ b/src/nodetool/nodes/nodetool/__init__.py @@ -34,6 +34,7 @@ import nodetool.nodes.nodetool.math import nodetool.nodes.nodetool.network.http import nodetool.nodes.nodetool.network.imap +import nodetool.nodes.nodetool.network.rss import nodetool.nodes.nodetool.os import nodetool.nodes.nodetool.output import nodetool.nodes.nodetool.tensor diff --git a/src/nodetool/nodes/nodetool/dataframe.py b/src/nodetool/nodes/nodetool/dataframe.py index b5f060c6..bfb6d863 100644 --- a/src/nodetool/nodes/nodetool/dataframe.py +++ b/src/nodetool/nodes/nodetool/dataframe.py @@ -610,3 +610,52 @@ async def process(self, context: ProcessingContext) -> DataframeRef: sliced_df = df.iloc[self.start_index : self.end_index] return await context.dataframe_from_pandas(sliced_df) + + +class ToList(BaseNode): + """ + Convert dataframe to list of dictionaries. + dataframe, list, convert + + Use cases: + - Convert dataframe data for API consumption + - Transform data for JSON serialization + - Prepare data for document-based storage + """ + + dataframe: DataframeRef = Field( + default=DataframeRef(), description="The input dataframe to convert." + ) + + async def process(self, context: ProcessingContext) -> list[dict]: + df = await context.dataframe_to_pandas(self.dataframe) + return df.to_dict('records') + + +class MapTemplate(BaseNode): + """ + Maps a template string over dataframe rows. + dataframe, template, format, string + + Use cases: + - Format each row into a custom string representation + - Generate text summaries from structured data + - Create formatted output from dataframe records + + Example: + Template: "Name: {name}, Age: {age}" + Row: {"name": "Alice", "age": 30} + Output: "Name: Alice, Age: 30" + """ + + dataframe: DataframeRef = Field( + default=DataframeRef(), description="The input dataframe." + ) + template: str = Field( + default="", + description="Template string with placeholders matching column names (e.g., {column_name})." + ) + + async def process(self, context: ProcessingContext) -> list[str]: + df = await context.dataframe_to_pandas(self.dataframe) + return [self.template.format(**row) for _, row in df.iterrows()] diff --git a/src/nodetool/nodes/nodetool/network/http.py b/src/nodetool/nodes/nodetool/network/http.py index cdbdf805..b526052b 100644 --- a/src/nodetool/nodes/nodetool/network/http.py +++ b/src/nodetool/nodes/nodetool/network/http.py @@ -58,6 +58,10 @@ class GetRequest(HTTPBaseNode): - Check website availability """ + @classmethod + def get_title(cls): + return "HTTP GET Request" + async def process(self, context: ProcessingContext) -> str: res = await context.http_get(self.url, **self.get_request_kwargs()) return res.content.decode(res.encoding or "utf-8") @@ -75,6 +79,10 @@ class PostRequest(HTTPBaseNode): - Authenticate users """ + @classmethod + def get_title(cls): + return "HTTP POST Request" + data: str = Field( default="", description="The data to send in the POST request.", @@ -99,6 +107,10 @@ class PutRequest(HTTPBaseNode): - Set configuration values """ + @classmethod + def get_title(cls): + return "HTTP PUT Request" + data: str = Field( default="", description="The data to send in the PUT request.", @@ -123,6 +135,10 @@ class DeleteRequest(HTTPBaseNode): - Clear cache entries """ + @classmethod + def get_title(cls): + return "HTTP DELETE Request" + async def process(self, context: ProcessingContext) -> str: res = await context.http_delete(self.url, **self.get_request_kwargs()) return res.content.decode(res.encoding or "utf-8") @@ -139,6 +155,10 @@ class HeadRequest(HTTPBaseNode): - Verify authentication or permissions """ + @classmethod + def get_title(cls): + return "HTTP HEAD Request" + async def process(self, context: ProcessingContext) -> dict[str, str]: res = await context.http_head(self.url, **self.get_request_kwargs()) return dict(res.headers.items()) diff --git a/src/nodetool/nodes/nodetool/network/rss.py b/src/nodetool/nodes/nodetool/network/rss.py new file mode 100644 index 00000000..7c278ad1 --- /dev/null +++ b/src/nodetool/nodes/nodetool/network/rss.py @@ -0,0 +1,126 @@ +from datetime import datetime +import feedparser +from pydantic import Field +from nodetool.workflows.base_node import BaseNode +from nodetool.workflows.processing_context import ProcessingContext +from nodetool.metadata.types import Datetime, RSSEntry + +class FetchRSSFeed(BaseNode): + """ + Fetches and parses an RSS feed from a URL. + rss, feed, network + + Use cases: + - Monitor news feeds + - Aggregate content from multiple sources + - Process blog updates + """ + + url: str = Field( + default="", + description="URL of the RSS feed to fetch" + ) + + @classmethod + def get_title(cls): + return "Fetch RSS Feed" + + async def process(self, context: ProcessingContext) -> list[RSSEntry]: + feed = feedparser.parse(self.url) + + data = [] + for entry in feed.entries: + # Try different common RSS date formats + published_str = entry.get('published', '') + try: + # Format with numeric timezone + published = datetime.strptime(published_str, '%a, %d %b %Y %H:%M:%S %z') + except ValueError: + try: + # Format with GMT/UTC + published = datetime.strptime(published_str, '%a, %d %b %Y %H:%M:%S GMT') + except ValueError: + try: + # Alternative format sometimes used + published = datetime.strptime(published_str, '%Y-%m-%dT%H:%M:%S%z') + except ValueError: + # If all parsing attempts fail, use current time + published = datetime.now() + + data.append(RSSEntry( + title=entry.get('title', ''), + link=entry.get('link', ''), + published=Datetime.from_datetime(published), + summary=entry.get('summary', ''), + author=entry.get('author', '') + )) + return data + + +class RSSEntryFields(BaseNode): + """ + Extracts fields from an RSS entry. + rss, entry, fields + """ + + @classmethod + def get_title(cls): + return "Extract RSS Entry Fields" + + entry: RSSEntry = Field( + default=RSSEntry(), description="The RSS entry to extract fields from." + ) + + @classmethod + def return_type(cls): + return { + "title": str, + "link": str, + "published": Datetime, + "summary": str, + "author": str + } + + + async def process(self, context: ProcessingContext): + return { + "title": self.entry.title, + "link": self.entry.link, + "published": self.entry.published, + "summary": self.entry.summary, + "author": self.entry.author + } + + +class ExtractFeedMetadata(BaseNode): + """ + Extracts metadata from an RSS feed. + rss, metadata, feed + + Use cases: + - Get feed information + - Validate feed details + - Extract feed metadata + """ + + @classmethod + def get_title(cls): + return "Extract Feed Metadata" + + url: str = Field( + default="", + description="URL of the RSS feed" + ) + + async def process(self, context: ProcessingContext) -> dict: + feed = feedparser.parse(self.url) + + return { + "title": feed.feed.get('title', ''), + "description": feed.feed.get('description', ''), + "link": feed.feed.get('link', ''), + "language": feed.feed.get('language', ''), + "updated": feed.feed.get('updated', ''), + "generator": feed.feed.get('generator', ''), + "entry_count": len(feed.entries) + } \ No newline at end of file diff --git a/src/nodetool/nodes/nodetool/text.py b/src/nodetool/nodes/nodetool/text.py index c11288e6..55feb3b5 100644 --- a/src/nodetool/nodes/nodetool/text.py +++ b/src/nodetool/nodes/nodetool/text.py @@ -22,6 +22,7 @@ from typing import Optional from html import unescape from bs4 import BeautifulSoup +from enum import Enum async def to_string(context: ProcessingContext, text: TextRef | str) -> str: @@ -49,6 +50,10 @@ class TextID(BaseNode): text: TextRef = Field(title="Text", default="") + @classmethod + def get_title(cls): + return "Get Text ID" + async def process(self, context: ProcessingContext) -> str | None: return self.text.asset_id @@ -67,6 +72,10 @@ class Concat(BaseNode): a: str | TextRef = "" b: str | TextRef = "" + @classmethod + def get_title(cls): + return "Concatenate Text" + async def process(self, context: ProcessingContext) -> str | TextRef: res = await to_string(context, self.a) + await to_string(context, self.b) return await convert_result(context, [self.a, self.b], res) @@ -86,6 +95,10 @@ class Join(BaseNode): strings: list[str | TextRef] = [] separator: str = "" + @classmethod + def get_title(cls): + return "Join Text" + async def process(self, context: ProcessingContext) -> str | TextRef: if len(self.strings) == 0: return "" @@ -125,6 +138,10 @@ class Template(BaseNode): """, ) + @classmethod + def get_title(cls): + return "Format Text" + async def process(self, context: ProcessingContext) -> str | TextRef: string = await to_string(context, self.string) if isinstance(self.values, str): @@ -155,6 +172,10 @@ class Replace(BaseNode): old: str = Field(title="Old", default="") new: str = Field(title="New", default="") + @classmethod + def get_title(cls): + return "Replace Text" + async def process(self, context: ProcessingContext) -> str | TextRef: text = await to_string(context, self.text) res = text.replace(self.old, self.new) @@ -174,6 +195,10 @@ class JSONToDataframe(BaseNode): text: str | TextRef = Field(title="JSON", default_factory=TextRef) + @classmethod + def get_title(cls): + return "Convert JSON to DataFrame" + async def process(self, context: ProcessingContext) -> DataframeRef: json_string = await to_string(context, self.text) rows = json.loads(json_string) @@ -214,6 +239,10 @@ class SaveText(BaseNode): def required_inputs(self): return ["text"] + @classmethod + def get_title(cls): + return "Save Text" + async def process(self, context: ProcessingContext) -> TextRef: string = await to_string(context, self.text) filename = datetime.now().strftime(self.name) @@ -237,6 +266,10 @@ class Split(BaseNode): text: str | TextRef = Field(title="Text", default="") delimiter: str = "," + @classmethod + def get_title(cls): + return "Split Text" + async def process(self, context: ProcessingContext) -> list[str]: text = await to_string(context, self.text) res = text.split(self.delimiter) @@ -258,6 +291,10 @@ class Extract(BaseNode): start: int = Field(title="Start", default=0) end: int = Field(title="End", default=0) + @classmethod + def get_title(cls): + return "Extract Text" + async def process(self, context: ProcessingContext) -> str | TextRef: text = await to_string(context, self.text) res = text[self.start : self.end] @@ -280,6 +317,10 @@ class Chunk(BaseNode): overlap: int = Field(title="Overlap", default=0) separator: str | None = Field(title="Separator", default=None) + @classmethod + def get_title(cls): + return "Split Text into Chunks" + async def process(self, context: ProcessingContext) -> list[str]: text = await to_string(context, self.text) text = text.split(sep=self.separator) @@ -308,6 +349,10 @@ class ExtractRegex(BaseNode): ignorecase: bool = Field(title="Ignorecase", default=False) multiline: bool = Field(title="Multiline", default=False) + @classmethod + def get_title(cls): + return "Extract Regex Groups" + async def process(self, context: ProcessingContext) -> list[str]: options = 0 if self.dotall: @@ -340,6 +385,10 @@ class FindAllRegex(BaseNode): ignorecase: bool = Field(title="Ignorecase", default=False) multiline: bool = Field(title="Multiline", default=False) + @classmethod + def get_title(cls): + return "Find All Regex Matches" + async def process(self, context: ProcessingContext) -> list[str]: options = 0 if self.dotall: @@ -366,6 +415,10 @@ class ParseJSON(BaseNode): text: str | TextRef = Field(title="JSON string", default="") + @classmethod + def get_title(cls): + return "Parse JSON String" + async def process(self, context: ProcessingContext) -> Any: json_string = await to_string(context, self.text) return json.loads(json_string) @@ -386,6 +439,10 @@ class ExtractJSON(BaseNode): json_path: str = Field(title="JSONPath Expression", default="$.*") find_all: bool = Field(title="Find All", default=False) + @classmethod + def get_title(cls): + return "Extract JSON" + async def process(self, context: ProcessingContext) -> Any: json_string = await to_string(context, self.text) parsed_json = json.loads(json_string) @@ -410,25 +467,41 @@ class SentenceSplitter(BaseNode): text: str | TextRef = Field(title="Text", default="") min_length: int = Field(title="Minimum Length", default=10) source_id: str = Field(title="Source ID", default="") + chunk_size: int = Field(title="Chunk Size", default=1000) + chunk_overlap: int = Field(title="Chunk Overlap", default=200) + + @classmethod + def get_title(cls): + return "Split Sentences" async def process(self, context: ProcessingContext) -> list[TextChunk]: - text = await to_string(context, self.text) - chunks = [] + from langchain_text_splitters import RecursiveCharacterTextSplitter + from langchain_core.documents import Document - # Simple sentence splitting using common punctuation - for match in re.finditer(r"[^.!?]+[.!?]+", text): - sentence = match.group().strip() - if len(sentence) >= self.min_length: - start_idx = match.start() - chunks.append( - TextChunk( - text=sentence, - source_id=self.source_id, - start_index=start_idx, - ) - ) + assert self.source_id, "document_id is required" - return chunks + content = await to_string(context, self.text) + separators = ["\n\n", "\n", ".", "?", "!", " ", ""] + + splitter = RecursiveCharacterTextSplitter( + chunk_size=self.chunk_size, + chunk_overlap=self.chunk_overlap, + separators=separators, + length_function=len, + is_separator_regex=False, + add_start_index=True, + ) + + docs = splitter.split_documents([Document(page_content=content)]) + + return [ + TextChunk( + text=doc.page_content, + source_id=self.source_id, + start_index=doc.metadata["start_index"], + ) + for doc in docs + ] class RegexMatch(BaseNode): @@ -448,6 +521,10 @@ class RegexMatch(BaseNode): default=None, description="Capture group to extract (0 for full match)" ) + @classmethod + def get_title(cls): + return "Find Regex Matches" + async def process(self, context: ProcessingContext) -> list[str]: if self.group is None: return re.findall(self.pattern, self.text) @@ -471,6 +548,10 @@ class RegexReplace(BaseNode): replacement: str = Field(default="", description="Replacement text") count: int = Field(default=0, description="Maximum replacements (0 for unlimited)") + @classmethod + def get_title(cls): + return "Replace with Regex" + async def process(self, context: ProcessingContext) -> str: return re.sub(self.pattern, self.replacement, self.text, count=self.count) @@ -494,6 +575,10 @@ class RegexSplit(BaseNode): default=0, description="Maximum number of splits (0 for unlimited)" ) + @classmethod + def get_title(cls): + return "Split with Regex" + async def process(self, context: ProcessingContext) -> list[str]: return re.split(self.pattern, self.text, maxsplit=self.maxsplit) @@ -512,6 +597,10 @@ class RegexValidate(BaseNode): text: str = Field(default="", description="Text to validate") pattern: str = Field(default="", description="Regular expression pattern") + @classmethod + def get_title(cls): + return "Validate with Regex" + async def process(self, context: ProcessingContext) -> bool: return bool(re.match(self.pattern, self.text)) @@ -532,6 +621,10 @@ class RegexExtract(BaseNode): default="", description="Regular expression pattern with named groups" ) + @classmethod + def get_title(cls): + return "Extract Regex Groups" + async def process(self, context: ProcessingContext) -> dict: match = re.search(self.pattern, self.text) if match: @@ -594,6 +687,10 @@ class HTMLToText(BaseNode): description="Convert block-level elements to newlines", ) + @classmethod + def get_title(cls): + return "Convert HTML to Text" + async def process(self, context: ProcessingContext) -> str | TextRef: html = await to_string(context, self.text) text = convert_html_to_text(html, self.preserve_linebreaks) @@ -622,6 +719,10 @@ class Slice(BaseNode): stop: int | None = Field(title="Stop Index", default=None) step: int | None = Field(title="Step", default=None) + @classmethod + def get_title(cls): + return "Slice Text" + async def process(self, context: ProcessingContext) -> str | TextRef: text = await to_string(context, self.text) res = text[slice(self.start, self.stop, self.step)] @@ -660,6 +761,10 @@ class RecursiveTextSplitter(BaseNode): description="List of separators to use for splitting, in order of preference", ) + @classmethod + def get_title(cls): + return "Split Recursively" + async def process(self, context: ProcessingContext) -> list[TextChunk]: from langchain_text_splitters import RecursiveCharacterTextSplitter from langchain_core.documents import Document @@ -727,6 +832,10 @@ class MarkdownSplitter(BaseNode): description="Overlap size when using chunk_size", ) + @classmethod + def get_title(cls): + return "Split Markdown" + async def process(self, context: ProcessingContext) -> list[TextChunk]: from langchain_text_splitters import ( MarkdownHeaderTextSplitter, @@ -777,6 +886,10 @@ class StartsWith(BaseNode): text: str | TextRef = Field(title="Text", default="") prefix: str = Field(title="Prefix", default="") + @classmethod + def get_title(cls): + return "Starts With" + async def process(self, context: ProcessingContext) -> bool: text = await to_string(context, self.text) return text.startswith(self.prefix) @@ -796,6 +909,10 @@ class EndsWith(BaseNode): text: str | TextRef = Field(title="Text", default="") suffix: str = Field(title="Suffix", default="") + @classmethod + def get_title(cls): + return "Ends With" + async def process(self, context: ProcessingContext) -> bool: text = await to_string(context, self.text) return text.endswith(self.suffix) @@ -816,6 +933,10 @@ class Contains(BaseNode): substring: str = Field(title="Substring", default="") case_sensitive: bool = Field(title="Case Sensitive", default=True) + @classmethod + def get_title(cls): + return "Contains Text" + async def process(self, context: ProcessingContext) -> bool: text = await to_string(context, self.text) if not self.case_sensitive: @@ -840,6 +961,10 @@ class IsEmpty(BaseNode): text: str | TextRef = Field(title="Text", default="") trim_whitespace: bool = Field(title="Trim Whitespace", default=True) + @classmethod + def get_title(cls): + return "Is Empty" + async def process(self, context: ProcessingContext) -> bool: text = await to_string(context, self.text) if self.trim_whitespace: @@ -863,6 +988,10 @@ class HasLength(BaseNode): max_length: int | None = Field(title="Maximum Length", default=None) exact_length: int | None = Field(title="Exact Length", default=None) + @classmethod + def get_title(cls): + return "Check Length" + async def process(self, context: ProcessingContext) -> bool: text = await to_string(context, self.text) length = len(text) @@ -877,3 +1006,40 @@ async def process(self, context: ProcessingContext) -> bool: return False return True + + +class TiktokenEncoding(str, Enum): + """Available tiktoken encodings""" + CL100K_BASE = "cl100k_base" # GPT-4, GPT-3.5 + P50K_BASE = "p50k_base" # GPT-3 + R50K_BASE = "r50k_base" # GPT-2 + + +class CountTokens(BaseNode): + """ + Counts the number of tokens in text using tiktoken. + text, tokens, count, encoding + + Use cases: + - Checking text length for LLM input limits + - Estimating API costs + - Managing token budgets in text processing + """ + + text: str | TextRef = Field(title="Text", default="") + encoding: TiktokenEncoding = Field( + title="Encoding", + default=TiktokenEncoding.CL100K_BASE, + description="The tiktoken encoding to use for token counting", + ) + + @classmethod + def get_title(cls): + return "Count Tokens" + + async def process(self, context: ProcessingContext) -> int: + import tiktoken + + text = await to_string(context, self.text) + encoding = tiktoken.get_encoding(self.encoding.value) + return len(encoding.encode(text)) diff --git a/src/nodetool/nodes/ollama/agents.py b/src/nodetool/nodes/ollama/agents.py index a3403dbb..6802cf76 100644 --- a/src/nodetool/nodes/ollama/agents.py +++ b/src/nodetool/nodes/ollama/agents.py @@ -1094,6 +1094,9 @@ def get_basic_fields(cls) -> list[str]: async def process(self, context: ProcessingContext) -> str: encoding = tiktoken.get_encoding("cl100k_base") + if not self.model.is_set(): + raise ValueError("Model is not set") + parts = [] token_progress = 0 diff --git a/src/nodetool/workflows/examples/Summarize RSS.json b/src/nodetool/workflows/examples/Summarize RSS.json new file mode 100644 index 00000000..95b3e053 --- /dev/null +++ b/src/nodetool/workflows/examples/Summarize RSS.json @@ -0,0 +1,451 @@ +{ + "id": "4967c0b0d07b11efb3dc000010283958", + "access": "public", + "created_at": "2025-01-12T08:44:07.153311", + "updated_at": "2025-01-12T08:44:07.153328", + "name": "Summarize RSS", + "description": "", + "tags": null, + "thumbnail": null, + "thumbnail_url": null, + "graph": { + "nodes": [ + { + "id": "9", + "parent_id": null, + "type": "nodetool.group.Loop", + "data": {}, + "ui_properties": { + "position": { + "x": 458, + "y": 184 + }, + "zIndex": -10, + "width": 1136, + "height": 537, + "selectable": false + } + }, + { + "id": "1", + "parent_id": null, + "type": "nodetool.network.rss.FetchRSSFeed", + "data": { + "url": "https://feeds.bbci.co.uk/news/world/europe/rss.xml" + }, + "ui_properties": { + "position": { + "x": 50, + "y": 329 + }, + "zIndex": 0, + "width": 159, + "selectable": true + } + }, + { + "id": "2", + "parent_id": null, + "type": "nodetool.workflows.base_node.Preview", + "data": { + "name": "dataframe_output_2025-01-12" + }, + "ui_properties": { + "position": { + "x": 269, + "y": 497 + }, + "zIndex": 0, + "width": 159, + "height": 159, + "selectable": true + } + }, + { + "id": "5", + "parent_id": null, + "type": "nodetool.list.JoinStrings", + "data": { + "delimiter": "=================" + }, + "ui_properties": { + "position": { + "x": 1624, + "y": 297 + }, + "zIndex": 0, + "width": 159, + "selectable": true + } + }, + { + "id": "8", + "parent_id": null, + "type": "nodetool.workflows.base_node.Preview", + "data": { + "name": "str_output_2025-01-12" + }, + "ui_properties": { + "position": { + "x": 1843, + "y": 50 + }, + "zIndex": 0, + "width": 211, + "height": 185, + "selectable": true + } + }, + { + "id": "10", + "parent_id": "9", + "type": "nodetool.input.GroupInput", + "data": {}, + "ui_properties": { + "position": { + "x": 50, + "y": 168 + }, + "zIndex": 0, + "width": 111, + "selectable": true + } + }, + { + "id": "11", + "parent_id": "9", + "type": "nodetool.output.GroupOutput", + "data": {}, + "ui_properties": { + "position": { + "x": 966, + "y": 162 + }, + "zIndex": 0, + "width": 120, + "selectable": true + } + }, + { + "id": "12", + "parent_id": "9", + "type": "nodetool.network.rss.RSSEntryFields", + "data": {}, + "ui_properties": { + "position": { + "x": 191, + "y": 71 + }, + "zIndex": 0, + "width": 137, + "selectable": true + } + }, + { + "id": "13", + "parent_id": "9", + "type": "nodetool.network.http.GetRequest", + "data": { + "headers": null, + "auth": null + }, + "ui_properties": { + "position": { + "x": 358, + "y": 90 + }, + "zIndex": 0, + "width": 159, + "selectable": true + } + }, + { + "id": "14", + "parent_id": "9", + "type": "nodetool.text.HTMLToText", + "data": { + "preserve_linebreaks": true + }, + "ui_properties": { + "position": { + "x": 547, + "y": 104 + }, + "zIndex": 0, + "width": 159, + "selectable": true + } + }, + { + "id": "16", + "parent_id": null, + "type": "nodetool.list.Slice", + "data": { + "start": 0, + "stop": 10, + "step": 1 + }, + "ui_properties": { + "position": { + "x": 303, + "y": 280 + }, + "zIndex": 0, + "width": 100, + "selectable": true + } + }, + { + "id": "18", + "parent_id": null, + "type": "nodetool.workflows.base_node.Preview", + "data": { + "name": "str_output_2025-01-12" + }, + "ui_properties": { + "position": { + "x": 2084, + "y": 494 + }, + "zIndex": 0, + "width": 301, + "height": 320, + "selectable": true + } + }, + { + "id": "19", + "parent_id": null, + "type": "ollama.agents.Summarizer", + "data": { + "model": { + "type": "llama_model", + "repo_id": "llama3.2:3b" + }, + "prompt": "Strasbourg tram collision sees dozens injured\nSkip to content\n\nBritish Broadcasting Corporation\n\nHome\n\nNews\n\nSport\n\nBusiness\n\nInnovation\n\nCulture\n\nArts\n\nTravel\n\nEarth\n\nVideo\n\nLive\n\nHome\nNews\nIsrael-Gaza War\nWar in Ukraine\nUS & Canada\nUK\nUK Politics\nEngland\nN. Ireland\nN. Ireland Politics\nScotland\nScotland Politics\nWales\nWales Politics\nAfrica\nAsia\nChina\nIndia\nAustralia\nEurope\nLatin America\nMiddle East\nIn Pictures\nBBC InDepth\nBBC Verify\nSport\nBusiness\nExecutive Lounge\nTechnology of Business\nFuture of Business\nInnovation\nTechnology\nScience & Health\nArtificial Intelligence\nAI v the Mind\nCulture\nFilm & TV\nMusic\nArt & Design\nStyle\nBooks\nEntertainment News\nArts\nArts in Motion\nTravel\nDestinations\nAfrica\nAntarctica\nAsia\nAustralia and Pacific\nCaribbean & Bermuda\nCentral America\nEurope\nMiddle East\nNorth America\nSouth America\nWorld\u2019s Table\nCulture & Experiences\nAdventures\nThe SpeciaList\nEarth\nNatural Wonders\nWeather & Science\nClimate Solutions\nSustainable Business\nGreen Living\nVideo\nLive\nLive News\nLive Sport\n\nHome\n\nNews\n\nSport\n\nBusiness\n\nInnovation\n\nCulture\n\nArts\n\nTravel\n\nEarth\n\nVideo\n\nLive\n\nAudio\nWeather\nNewsletters\n\nDozens injured after Strasbourg tram collision\n\nWatch: Chaos after trams collide in Strasbourg\nAt least 30 people have been injured after two trams collided at Strasbourg's central station on Saturday, authorities said.\nVideos and photos posted on social media showed two trams containing dozens of people inside. One video shows smoke rising and chaotic scenes as an alarm sounds.\nLocal media reported that the crash occurred after one of the trams switched tracks and collided with a stationary tram. Other reports said one tram was reversing at the time.\nA spokesman for the prefecture said an investigation into the cause of the accident has been opened and no fatalities have been confirmed.\n\nStrasbourg's mayor Jeanne Barseghian told reporters at the scene there had been a collision involving a tram, but the cause was not known.\nAccording to BFM TV, Barseghian called on people to wait for the results of the investigation.\nOne eyewitness named Johan told AFP news agency that he saw one of the trams reversing at speed, adding: \"We heard a big impact, a big bang.\"\nAnother eyewitness told BFM TV that the doors of the tram flew off on impact.\nThe outlet reported that a large security perimeter was set up in front of the station.\nThe Bas-Rhin region's Fire and Rescue Service posted on X urging people to avoid the area to allow emergency services to access the area.\nThe service's director Rene Cellier said some of the non-fatal injuries reported were \"mostly trauma\", but also include scalp wounds, clavicle fractures, and knee sprains.\n\"There are also around 100 people who have no particular injuries but are being seen by the doctors,\" Cellier said.\nHe added that around 50 vehicles and 130 firefighters were dispatched to the scene and that the situation \"could have been much more serious\".\nEmmanuel Auneau, the director of the CTS - which is responsible for managing public transport in Strasbourg - said the two tram drivers were \"not physically injured, but are very shocked\".\n\nAlso in EuropeGermany says Russian 'shadow' ship stuck in Baltic Sea\n\n'My father should die in prison', daughter of Dominique Pelicot tells BBC\n\nTrump wants to take Greenland: Four ways this saga could go\n\nEurope\nFrance\nStrasbourg\n\nRelated\n\nGermany says Russian 'shadow' ship stuck in Baltic Sea\n\n10 hrs ago\nEurope\n\nMusk interviews German far-right frontwoman\n\n2 days ago\nEurope\n\nJailed Belarus opposition figure seen for first time in months\n\n3 days ago\nEurope\n\nMore\n\n1 day ago\n\n'My father should die in prison', daughter of Dominique Pelicot tells BBC\n\nCaroline Darian has become a vocal advocate for victims of sexual violence in the wake of her mother's trial.\n1 day ago\nEurope\n\n3 days ago\n\nWas Deschamps right to leave and will Zidane replace him?\n\nBBC French football expert Julien Laurens discusses Didier Deschamps decision to stand down as France coach and says Zinedine Zidane is primed to replace him.\n3 days ago\nFrance\n\n4 days ago\n\nFrance's Nicolas Sarkozy: 'Bling' and legal woes\n\nThe former president- already twice convicted- is standing trial for accepting cash from late Libyan dictator Gaddafi.\n4 days ago\nEurope\n\n4 days ago\n\nGermany and France warn Trump over threat to take over Greenland\n\nThe EU's two leading members were reacting to the US president-elect's plans to acquire Denmark's autonomous territory.\n4 days ago\nWorld\n\n4 days ago\n\nFrance manager Deschamps to step down after 2026 World Cup\n\nFrance's World Cup-winning manager Didier Deschamps says he will step down after the 2026 tournament in the United States, Canada and Mexico.\n4 days ago\nFrance\n\nBritish Broadcasting Corporation\n\nHome\n\nNews\n\nSport\n\nBusiness\n\nInnovation\n\nCulture\n\nArts\n\nTravel\n\nEarth\n\nVideo\n\nLive\n\nAudio\n\nWeather\n\nBBC Shop\n\nBBC in other languages\n\nFollow BBC on:\n\nTerms of Use\n\nAbout the BBC\n\nPrivacy Policy\n\nCookies\n\nAccessibility Help\n\nContact the BBC\n\nAdvertise with us\n\nDo not share or sell my info\n\nContact technical support\n\nCopyright 2025 BBC. All rights reserved.\u00a0\u00a0The BBC is not responsible for the content of external sites.\u00a0Read about our approach to external linking.=================Germany says Russian 'shadow' oil tanker stuck in Baltic Sea\nSkip to content\n\nBritish Broadcasting Corporation\n\nHome\n\nNews\n\nSport\n\nBusiness\n\nInnovation\n\nCulture\n\nArts\n\nTravel\n\nEarth\n\nVideo\n\nLive\n\nHome\nNews\nIsrael-Gaza War\nWar in Ukraine\nUS & Canada\nUK\nUK Politics\nEngland\nN. Ireland\nN. Ireland Politics\nScotland\nScotland Politics\nWales\nWales Politics\nAfrica\nAsia\nChina\nIndia\nAustralia\nEurope\nLatin America\nMiddle East\nIn Pictures\nBBC InDepth\nBBC Verify\nSport\nBusiness\nExecutive Lounge\nTechnology of Business\nFuture of Business\nInnovation\nTechnology\nScience & Health\nArtificial Intelligence\nAI v the Mind\nCulture\nFilm & TV\nMusic\nArt & Design\nStyle\nBooks\nEntertainment News\nArts\nArts in Motion\nTravel\nDestinations\nAfrica\nAntarctica\nAsia\nAustralia and Pacific\nCaribbean & Bermuda\nCentral America\nEurope\nMiddle East\nNorth America\nSouth America\nWorld\u2019s Table\nCulture & Experiences\nAdventures\nThe SpeciaList\nEarth\nNatural Wonders\nWeather & Science\nClimate Solutions\nSustainable Business\nGreen Living\nVideo\nLive\nLive News\nLive Sport\n\nHome\n\nNews\n\nSport\n\nBusiness\n\nInnovation\n\nCulture\n\nArts\n\nTravel\n\nEarth\n\nVideo\n\nLive\n\nAudio\nWeather\nNewsletters\n\nGermany says Russian 'shadow' ship stuck in Baltic Sea\n\nHavariekommando\n\nGermany's maritime authorities released pictures of the Eventin tanker and their tugboats carrying out the rescue operation\nGerman authorities have said an oil tanker stuck in German waters belongs to Russia's \"shadow fleet\", which Berlin says is used to avoid sanctions.\nGermany's maritime authorities (CCME) said on Friday that the Panamanian-flagged ship, known as Eventin, had lost power and steering, meaning tugboats were deployed to secure the vessel.\nGerman Foreign Minister Annalena Baerbock blamed Moscow, accusing Russian President Vladimir Putin of \"circumventing\" sanctions and threatening European security by \"ruthlessly deploying a fleet of rusty tankers\".\nRussia, which previously declined to respond to accusations that it uses a shadow fleet, has not yet commented on this incident.\n\nThe US, UK and the EU have imposed sanctions on Russia's oil industry following Russia's full-scale invasion of Ukraine in 2022.\nIn its first report of the tanker drifting in German waters, the CCME said the vessel was 274m (898ft) long and 48m (157ft) wide, carrying about 99,000 tonnes of oil.\nGerman maritime authorities said the oil tanker was drifting at a low speed in the coastal waters of the Baltic Sea, north of the German island of R\u00fcgen.\nA four-person team of specialists was lowered onto the vessel by helicopter on Friday night to establish towing connections, which were secured. Three tugboats took control of the \"stricken vessel\" that is \"unable to manoeuvre\".\nMaritime authorities said on Friday night that no oil leaks had been detected.\nIn its latest update on Saturday evening, German maritime authorities said the towing convoy around the tanker was headed to Sassnitz, a town on the island of R\u00fcgen, and would arrive early on Sunday.\nEarlier, authorities said the convoy of tugboats working to rescue Eventin remained north of R\u00fcgen and was moving eastwards \"slowly\", at about 2.5 km per hour (1.5mph).\nCCME said they had taken safety measures given the rough seas, as the area where the vessel is located was experiencing 2.5m-high (8ft) waves and strengthening wind gusts.\n\nHavariekommando\n\nThe oil tanker was drifting at a low speed in the coastal waters of the Baltic Sea\n\nAlthough the vessel sports the Panamanian flag, German authorities have blamed Russia for the incident.\n\"Russia is endangering our European security not only with its illegal war of aggression against Ukraine, but also with severed cables, displaced border buoys, disinformation campaigns, GPS jammers and, as we have seen, dilapidated oil tankers,\" the German foreign minister said in a statement.\nLast December, the European Union said it was working on measures including sanctions to target \"Russia's shadow fleet, which threatens security and the environment, while funding Russia's war budget\".\nThe European bloc's remarks came after undersea cables in the Baltic Sea were damaged by a suspected vessel, which the EU believes was part of Russia's shadow fleet.\nThe move was a further step taken by Western countries to hit the Kremlin's oil industry in response to Russia's full-scale invasion of Ukraine. \nSince tougher embargo measures were put in place to halt Russia from exporting oil, Moscow is believed to be using ships with unclear ownership to transport goods - namely oil - across the globe.\nAs reported by the Atlantic Council, a US-based think tank, Russia is \"instrumentalising the dark fleet, using it especially as a primary conveyor of oil exports\".\nThe shadow fleet, or dark fleet, is the name given to ageing ships that sail \"without the industry's standard Western insurance, have opaque ownership, frequently change their names and flag registrations, and generally operate outside maritime regulations\", according to the Atlantic Council. \nThe latest incident in the Baltic Sea comes as Washington and London joined efforts to directly sanction energy companies Gazprom Neft and Surgutneftegas. \nUK Foreign Secretary David Lammy said the move to weaken Russian oil companies would \"drain Russia's war chest,\" adding that funds taken \"from Putin's hands helps save Ukrainian lives\".\nBut Gazprom Neft slammed the sanctions as \"baseless\" and \"illegitimate\", as reported by Russian state news agencies.\nAlso on Friday, the US Department of the Treasury said it had sanctioned 183 vessels that are \"part of the shadow fleet as well as oil tankers owned by Russia-based fleet operators\". \n\nAlso In EuropeDozens injured after Strasbourg tram collision\n\nTrump wants to take Greenland: Four ways this saga could go\n\nUS and UK toughen sanctions on Russian oil industry\n\nEurope\nGermany\nRussia\n\nRelated\n\nDozens injured after Strasbourg tram collision\n\n11 hrs ago\nEurope\n\nMusk interviews German far-right frontwoman\n\n2 days ago\nEurope\n\nJailed Belarus opposition figure seen for first time in months\n\n3 days ago\nEurope\n\nMore\n\n15 hrs ago\n\nUkraine says it captured two injured North Korean soldiers in Russia\n\nPresident Zelensky says the two men are receiving \"necessary medical assistance\". \n15 hrs ago\nWorld\n\n1 day ago\n\nUS and UK toughen sanctions on Russian oil industry\n\nThe actions are aimed at cutting off revenue Moscow is using to fund its war in Ukraine.\n1 day ago\nEurope\n\n2 days ago\n\nTrump says meeting with Putin being arranged\n\nThe US president-elect has said previously that he wants to negotiate an end to the war in Ukraine.\n2 days ago\nWorld\n\n3 days ago\n\nRussia keeping close eye on Trump's claim to Greenland\n\nThe Kremlin reacts to the US president-elect's remarks saying the Arctic is in Russia's sphere of interest.\n3 days ago\nEurope\n\n4 days ago\n\nRussian shelling kills 13 in Zaporizhzhia - Ukraine\n\nUkraine says Russia deliberately hit the city with guided aerial bombs knowing that civilians will be hurt. \n4 days ago\nEurope\n\nBritish Broadcasting Corporation\n\nHome\n\nNews\n\nSport\n\nBusiness\n\nInnovation\n\nCulture\n\nArts\n\nTravel\n\nEarth\n\nVideo\n\nLive\n\nAudio\n\nWeather\n\nBBC Shop\n\nBBC in other languages\n\nFollow BBC on:\n\nTerms of Use\n\nAbout the BBC\n\nPrivacy Policy\n\nCookies\n\nAccessibility Help\n\nContact the BBC\n\nAdvertise with us\n\nDo not share or sell my info\n\nContact technical support\n\nCopyright 2025 BBC. All rights reserved.\u00a0\u00a0The BBC is not responsible for the content of external sites.\u00a0Read about our approach to external linking.=================Trump wants to take Greenland: Four ways this saga could go\nSkip to content\n\nBritish Broadcasting Corporation\n\nHome\n\nNews\n\nSport\n\nBusiness\n\nInnovation\n\nCulture\n\nArts\n\nTravel\n\nEarth\n\nVideo\n\nLive\n\nHome\nNews\nIsrael-Gaza War\nWar in Ukraine\nUS & Canada\nUK\nUK Politics\nEngland\nN. Ireland\nN. Ireland Politics\nScotland\nScotland Politics\nWales\nWales Politics\nAfrica\nAsia\nChina\nIndia\nAustralia\nEurope\nLatin America\nMiddle East\nIn Pictures\nBBC InDepth\nBBC Verify\nSport\nBusiness\nExecutive Lounge\nTechnology of Business\nFuture of Business\nInnovation\nTechnology\nScience & Health\nArtificial Intelligence\nAI v the Mind\nCulture\nFilm & TV\nMusic\nArt & Design\nStyle\nBooks\nEntertainment News\nArts\nArts in Motion\nTravel\nDestinations\nAfrica\nAntarctica\nAsia\nAustralia and Pacific\nCaribbean & Bermuda\nCentral America\nEurope\nMiddle East\nNorth America\nSouth America\nWorld\u2019s Table\nCulture & Experiences\nAdventures\nThe SpeciaList\nEarth\nNatural Wonders\nWeather & Science\nClimate Solutions\nSustainable Business\nGreen Living\nVideo\nLive\nLive News\nLive Sport\n\nHome\n\nNews\n\nSport\n\nBusiness\n\nInnovation\n\nCulture\n\nArts\n\nTravel\n\nEarth\n\nVideo\n\nLive\n\nAudio\nWeather\nNewsletters\n\nTrump wants to take Greenland: Four ways this saga could go\n\nGetty Images\n\nDonald Trump's son Donald Jr recently visited Greenland\nIn recent weeks, US President-elect Donald Trump has shown renewed interest in taking control of Greenland, a largely autonomous territory of Denmark in the Arctic and the world's largest island.\nHe first indicated an intention to buy Greenland in 2019, during his first term as president, but this week he went further, refusing to rule out economic or military force to take control of it.\nDanish and European officials have responded negatively, saying Greenland is not for sale and its territorial integrity must be preserved.\nSo how could this unusual situation play out, with two Nato allies at odds over a huge territory which is 80% covered with ice but has considerable untapped mineral wealth? \nAnd how could the aspirations for independence among Greenland's population of 56,000, under Danish control for 300 years, affect the final outcome?\nHere we look at four possible scenarios for Greenland's future.\n\nTrump loses interest, nothing happens\n\nThere is some speculation that Trump's move is just bluster, a move to get Denmark to boost Greenland's security in the face of the threat of both Russia and China seeking influence in the region.\nLast month, Denmark announced a new $1.5bn (\u00a31.2bn) military package for the Arctic. It had been prepared before Trump's remarks but the announcement just hours after them was described by the Danish defence minister as an \"irony of fate\".\n\"What was important in what Trump said was that Denmark has to fulfil its obligations in the Arctic or it's got to let the US do it,\" says Elisabet Svane, chief political correspondent for Politiken newspaper.\nMarc Jacobsen, associate professor at the Royal Danish Defence College, believes that this is a case of Trump \"positioning himself before entering office\" while Greenland is using the occasion to gain more international authority, as an important step towards independence.\nSo even if Trump were to lose further interest in Greenland now, which Professor Jacobsen thinks is the most likely scenario, he has certainly put the spotlight on the issue.\nBut independence for Greenland has been on the agenda for many years, and some say the debate could even go in the opposite direction.\n\"I noticed in the last few days the Greenland PM is calmer in his comments - ie. yes, we want independence but in the long run,\" says Svane.\n\nReuters\n\nGreenland votes for independence, seeks closer ties with US\n\nThere is a general consensus in Greenland that independence will happen eventually, and also that if Greenland votes for it, Denmark will accept and ratify it. \nHowever, it is also unlikely that Greenland would vote for independence unless its people are given guarantees that they can keep the subsidies they currently get from Denmark to pay for things like healthcare and the welfare system.\n\"The Greenland PM may be up in arms now, but in the event that he actually calls a referendum, he will need some kind of convincing narrative about how to save the Greenland economy and welfare system,\" Ulrik Gad, a senior researcher at the Danish Institute for International Studies, told the BBC.\nOne possible next step is a free association - something like the US currently has with Pacific states the Marshall Islands, Micronesia and Palau.\nDenmark has previously opposed this status both for Greenland and for the Faroe Islands, but according to Dr Gad, current Prime Minister Mette Frederiksen is not categorically against it.\n\"Danish understanding of the Greenland historical experience is way better than it was 20 years ago,\" he says, with Denmark accepting colonial responsibility.\nThe recent discussions \"might persuade [Frederiksen] to say - better to keep Denmark in the Arctic, keep some kind of connection to Greenland, even if it's a looser one\", he adds.\nBut even if Greenland is able to get rid of Denmark, it has become clear in recent years that it can't get rid of the US. The Americans never really left after taking control of the island in World War Two, and see it as vital for their security.\nAn agreement in 1951 affirmed Denmark's basic sovereignty of the island but, in effect, gave the US whatever it wanted.\nDr Gad said that Greenland officials had been in contact with the last two US administrations about Washington's role.\n\"They now know the US will never leave,\" he said.\n\nWhy does Trump want Greenland and what do its people think?\n\nDanes struggle with response to Trump Greenland threat\n\nRussia keeping close eye on Trump's claim to Greenland\n\nTrump steps up economic pressure\n\nThere has been speculation that Trump's economic rhetoric is potentially the biggest threat to Denmark - with the US drastically increasing tariffs on Danish, or even EU, goods, forcing Denmark into concessions of some kind over Greenland.\nProfessor Jacobsen says Danish governments have been preparing for that, and not just because of the Arctic territory. \nTrump has been threatening universal 10% tariffs on all US imports which could, among other things, significantly disrupt European growth, and some Danish and other European companies are now considering setting up manufacturing bases in the US.\nPossible options for raising tariffs include by invoking the 1977 International Emergency Economic Powers Act (IEEPA), Benjamin Cote of international law firm Pillsbury told the website MarketWatch.\nOne of the main Danish industries potentially affected by this is pharmaceuticals. The US receives products such as hearing aids and most of its insulin from Denmark, as well as the diabetes drug Ozempic, made by the Danish company Novo Nordisk.\nAnalysts say the hike in prices that would result from these measures would not find favour with the US public.\n\nTrump invades Greenland\n\nThe \"nuclear option\" seems far-fetched, but with Trump failing to rule out military action it has to be considered.\nEssentially, it wouldn't be hard for the US to take control, given that they already have bases and plenty of troops in Greenland. \n\"The US has de facto control already,\" says Professor Jacobsen, adding that Trump's remarks seemed ill-informed and he didn't understand the point of them.\nThat said, any use of military force by Washington would create an international incident.\n\"If they invade Greenland, they invade Nato,\" says Svane. \"So that's where it stops. Article 5 would have to be triggered. And if a Nato country invades Nato then there's no Nato.\"\nDr Gad says Trump sounds like Chinese President Xi Jinping talking about Taiwan or Russia's Vladimir Putin talking about Ukraine.\n\"He's saying it's legitimate for us to take this piece of land,\" he says. \"If we take him really seriously this is a bad omen for the whole of the Western alliance.\"\nAdditional reporting by George Sandeman\n\nGreenland\nDenmark\nDonald Trump\nUnited States\n\nRelated\n\nGreenland profile\n\n2 days ago\nEurope\n\nDanes struggle with response to Trump Greenland threat\n\n2 days ago\nEurope\n\nRussia keeping close eye on Trump's claim to Greenland\n\n3 days ago\nEurope\n\nMore\n\n2 hrs ago\n\nWhat's the latest on the Los Angeles wildfires and what caused them?\n\nEverything you need to know about the blazes that have forced thousands to leave their homes.\n2 hrs ago\nUS & Canada\n\n2 hrs ago\n\n'Everything is gone' - Agony on a tight-knit LA street razed by inferno\n\nLifelong neighbours of West Las Flores Drive banded together, even as their community burned down.\n2 hrs ago\nUS & Canada\n\n2 hrs ago\n\nLA firefighters battle to contain monster inferno as death toll rises\n\nThe Palisades blaze is threatening Brentwood, one of the most affluent enclaves of America's second-biggest city.\n2 hrs ago\nUS & Canada\n\n5 hrs ago\n\nWhat we know about LA fires victims\n\nAn amputee and his bedbound son, and a man trying to defend his home of 55 years are among the 11 victims of the Los Angeles fires.\n5 hrs ago\nUS & Canada\n\n6 hrs ago\n\nThe star player hoping to turn millions of TikTok followers into rugby fans\n\nThe US athlete and social media star helped attract record crowds as she made her English rugby debut.\n6 hrs ago\nEngland\n\nBritish Broadcasting Corporation\n\nHome\n\nNews\n\nSport\n\nBusiness\n\nInnovation\n\nCulture\n\nArts\n\nTravel\n\nEarth\n\nVideo\n\nLive\n\nAudio\n\nWeather\n\nBBC Shop\n\nBBC in other languages\n\nFollow BBC on:\n\nTerms of Use\n\nAbout the BBC\n\nPrivacy Policy\n\nCookies\n\nAccessibility Help\n\nContact the BBC\n\nAdvertise with us\n\nDo not share or sell my info\n\nContact technical support\n\nCopyright 2025 BBC. All rights reserved.\u00a0\u00a0The BBC is not responsible for the content of external sites.\u00a0Read about our approach to external linking.", + "num_predict": 1024, + "context_window": 4096, + "temperature": 0, + "top_k": 50, + "top_p": 0.95, + "keep_alive": 300 + }, + "ui_properties": { + "position": { + "x": 1848.5, + "y": 524 + }, + "zIndex": 0, + "width": 200, + "selectable": true + } + }, + { + "id": "20", + "parent_id": null, + "type": "nodetool.text.CountTokens", + "data": { + "encoding": "cl100k_base" + }, + "ui_properties": { + "position": { + "x": 1848.5, + "y": 285 + }, + "zIndex": 0, + "width": 200, + "selectable": true + } + }, + { + "id": "21", + "parent_id": null, + "type": "nodetool.workflows.base_node.Preview", + "data": { + "name": "int_output_2025-01-12" + }, + "ui_properties": { + "position": { + "x": 2084, + "y": 284 + }, + "zIndex": 0, + "width": 160, + "height": 160, + "selectable": true + } + }, + { + "id": "22", + "parent_id": "9", + "type": "ollama.agents.Summarizer", + "data": { + "model": { + "type": "llama_model", + "repo_id": "llama3.2:3b" + }, + "prompt": "Strasbourg tram collision sees dozens injured\nSkip to content\n\nBritish Broadcasting Corporation\n\nHome\n\nNews\n\nSport\n\nBusiness\n\nInnovation\n\nCulture\n\nArts\n\nTravel\n\nEarth\n\nVideo\n\nLive\n\nHome\nNews\nIsrael-Gaza War\nWar in Ukraine\nUS & Canada\nUK\nUK Politics\nEngland\nN. Ireland\nN. Ireland Politics\nScotland\nScotland Politics\nWales\nWales Politics\nAfrica\nAsia\nChina\nIndia\nAustralia\nEurope\nLatin America\nMiddle East\nIn Pictures\nBBC InDepth\nBBC Verify\nSport\nBusiness\nExecutive Lounge\nTechnology of Business\nFuture of Business\nInnovation\nTechnology\nScience & Health\nArtificial Intelligence\nAI v the Mind\nCulture\nFilm & TV\nMusic\nArt & Design\nStyle\nBooks\nEntertainment News\nArts\nArts in Motion\nTravel\nDestinations\nAfrica\nAntarctica\nAsia\nAustralia and Pacific\nCaribbean & Bermuda\nCentral America\nEurope\nMiddle East\nNorth America\nSouth America\nWorld\u2019s Table\nCulture & Experiences\nAdventures\nThe SpeciaList\nEarth\nNatural Wonders\nWeather & Science\nClimate Solutions\nSustainable Business\nGreen Living\nVideo\nLive\nLive News\nLive Sport\n\nHome\n\nNews\n\nSport\n\nBusiness\n\nInnovation\n\nCulture\n\nArts\n\nTravel\n\nEarth\n\nVideo\n\nLive\n\nAudio\nWeather\nNewsletters\n\nDozens injured after Strasbourg tram collision\n\nWatch: Chaos after trams collide in Strasbourg\nAt least 30 people have been injured after two trams collided at Strasbourg's central station on Saturday, authorities said.\nVideos and photos posted on social media showed two trams containing dozens of people inside. One video shows smoke rising and chaotic scenes as an alarm sounds.\nLocal media reported that the crash occurred after one of the trams switched tracks and collided with a stationary tram. Other reports said one tram was reversing at the time.\nA spokesman for the prefecture said an investigation into the cause of the accident has been opened and no fatalities have been confirmed.\n\nStrasbourg's mayor Jeanne Barseghian told reporters at the scene there had been a collision involving a tram, but the cause was not known.\nAccording to BFM TV, Barseghian called on people to wait for the results of the investigation.\nOne eyewitness named Johan told AFP news agency that he saw one of the trams reversing at speed, adding: \"We heard a big impact, a big bang.\"\nAnother eyewitness told BFM TV that the doors of the tram flew off on impact.\nThe outlet reported that a large security perimeter was set up in front of the station.\nThe Bas-Rhin region's Fire and Rescue Service posted on X urging people to avoid the area to allow emergency services to access the area.\nThe service's director Rene Cellier said some of the non-fatal injuries reported were \"mostly trauma\", but also include scalp wounds, clavicle fractures, and knee sprains.\n\"There are also around 100 people who have no particular injuries but are being seen by the doctors,\" Cellier said.\nHe added that around 50 vehicles and 130 firefighters were dispatched to the scene and that the situation \"could have been much more serious\".\nEmmanuel Auneau, the director of the CTS - which is responsible for managing public transport in Strasbourg - said the two tram drivers were \"not physically injured, but are very shocked\".\n\nAlso in EuropeGermany says Russian 'shadow' ship stuck in Baltic Sea\n\n'My father should die in prison', daughter of Dominique Pelicot tells BBC\n\nTrump wants to take Greenland: Four ways this saga could go\n\nEurope\nFrance\nStrasbourg\n\nRelated\n\nGermany says Russian 'shadow' ship stuck in Baltic Sea\n\n10 hrs ago\nEurope\n\nMusk interviews German far-right frontwoman\n\n2 days ago\nEurope\n\nJailed Belarus opposition figure seen for first time in months\n\n3 days ago\nEurope\n\nMore\n\n1 day ago\n\n'My father should die in prison', daughter of Dominique Pelicot tells BBC\n\nCaroline Darian has become a vocal advocate for victims of sexual violence in the wake of her mother's trial.\n1 day ago\nEurope\n\n3 days ago\n\nWas Deschamps right to leave and will Zidane replace him?\n\nBBC French football expert Julien Laurens discusses Didier Deschamps decision to stand down as France coach and says Zinedine Zidane is primed to replace him.\n3 days ago\nFrance\n\n4 days ago\n\nFrance's Nicolas Sarkozy: 'Bling' and legal woes\n\nThe former president- already twice convicted- is standing trial for accepting cash from late Libyan dictator Gaddafi.\n4 days ago\nEurope\n\n4 days ago\n\nGermany and France warn Trump over threat to take over Greenland\n\nThe EU's two leading members were reacting to the US president-elect's plans to acquire Denmark's autonomous territory.\n4 days ago\nWorld\n\n4 days ago\n\nFrance manager Deschamps to step down after 2026 World Cup\n\nFrance's World Cup-winning manager Didier Deschamps says he will step down after the 2026 tournament in the United States, Canada and Mexico.\n4 days ago\nFrance\n\nBritish Broadcasting Corporation\n\nHome\n\nNews\n\nSport\n\nBusiness\n\nInnovation\n\nCulture\n\nArts\n\nTravel\n\nEarth\n\nVideo\n\nLive\n\nAudio\n\nWeather\n\nBBC Shop\n\nBBC in other languages\n\nFollow BBC on:\n\nTerms of Use\n\nAbout the BBC\n\nPrivacy Policy\n\nCookies\n\nAccessibility Help\n\nContact the BBC\n\nAdvertise with us\n\nDo not share or sell my info\n\nContact technical support\n\nCopyright 2025 BBC. All rights reserved.\u00a0\u00a0The BBC is not responsible for the content of external sites.\u00a0Read about our approach to external linking.=================Germany says Russian 'shadow' oil tanker stuck in Baltic Sea\nSkip to content\n\nBritish Broadcasting Corporation\n\nHome\n\nNews\n\nSport\n\nBusiness\n\nInnovation\n\nCulture\n\nArts\n\nTravel\n\nEarth\n\nVideo\n\nLive\n\nHome\nNews\nIsrael-Gaza War\nWar in Ukraine\nUS & Canada\nUK\nUK Politics\nEngland\nN. Ireland\nN. Ireland Politics\nScotland\nScotland Politics\nWales\nWales Politics\nAfrica\nAsia\nChina\nIndia\nAustralia\nEurope\nLatin America\nMiddle East\nIn Pictures\nBBC InDepth\nBBC Verify\nSport\nBusiness\nExecutive Lounge\nTechnology of Business\nFuture of Business\nInnovation\nTechnology\nScience & Health\nArtificial Intelligence\nAI v the Mind\nCulture\nFilm & TV\nMusic\nArt & Design\nStyle\nBooks\nEntertainment News\nArts\nArts in Motion\nTravel\nDestinations\nAfrica\nAntarctica\nAsia\nAustralia and Pacific\nCaribbean & Bermuda\nCentral America\nEurope\nMiddle East\nNorth America\nSouth America\nWorld\u2019s Table\nCulture & Experiences\nAdventures\nThe SpeciaList\nEarth\nNatural Wonders\nWeather & Science\nClimate Solutions\nSustainable Business\nGreen Living\nVideo\nLive\nLive News\nLive Sport\n\nHome\n\nNews\n\nSport\n\nBusiness\n\nInnovation\n\nCulture\n\nArts\n\nTravel\n\nEarth\n\nVideo\n\nLive\n\nAudio\nWeather\nNewsletters\n\nGermany says Russian 'shadow' ship stuck in Baltic Sea\n\nHavariekommando\n\nGermany's maritime authorities released pictures of the Eventin tanker and their tugboats carrying out the rescue operation\nGerman authorities have said an oil tanker stuck in German waters belongs to Russia's \"shadow fleet\", which Berlin says is used to avoid sanctions.\nGermany's maritime authorities (CCME) said on Friday that the Panamanian-flagged ship, known as Eventin, had lost power and steering, meaning tugboats were deployed to secure the vessel.\nGerman Foreign Minister Annalena Baerbock blamed Moscow, accusing Russian President Vladimir Putin of \"circumventing\" sanctions and threatening European security by \"ruthlessly deploying a fleet of rusty tankers\".\nRussia, which previously declined to respond to accusations that it uses a shadow fleet, has not yet commented on this incident.\n\nThe US, UK and the EU have imposed sanctions on Russia's oil industry following Russia's full-scale invasion of Ukraine in 2022.\nIn its first report of the tanker drifting in German waters, the CCME said the vessel was 274m (898ft) long and 48m (157ft) wide, carrying about 99,000 tonnes of oil.\nGerman maritime authorities said the oil tanker was drifting at a low speed in the coastal waters of the Baltic Sea, north of the German island of R\u00fcgen.\nA four-person team of specialists was lowered onto the vessel by helicopter on Friday night to establish towing connections, which were secured. Three tugboats took control of the \"stricken vessel\" that is \"unable to manoeuvre\".\nMaritime authorities said on Friday night that no oil leaks had been detected.\nIn its latest update on Saturday evening, German maritime authorities said the towing convoy around the tanker was headed to Sassnitz, a town on the island of R\u00fcgen, and would arrive early on Sunday.\nEarlier, authorities said the convoy of tugboats working to rescue Eventin remained north of R\u00fcgen and was moving eastwards \"slowly\", at about 2.5 km per hour (1.5mph).\nCCME said they had taken safety measures given the rough seas, as the area where the vessel is located was experiencing 2.5m-high (8ft) waves and strengthening wind gusts.\n\nHavariekommando\n\nThe oil tanker was drifting at a low speed in the coastal waters of the Baltic Sea\n\nAlthough the vessel sports the Panamanian flag, German authorities have blamed Russia for the incident.\n\"Russia is endangering our European security not only with its illegal war of aggression against Ukraine, but also with severed cables, displaced border buoys, disinformation campaigns, GPS jammers and, as we have seen, dilapidated oil tankers,\" the German foreign minister said in a statement.\nLast December, the European Union said it was working on measures including sanctions to target \"Russia's shadow fleet, which threatens security and the environment, while funding Russia's war budget\".\nThe European bloc's remarks came after undersea cables in the Baltic Sea were damaged by a suspected vessel, which the EU believes was part of Russia's shadow fleet.\nThe move was a further step taken by Western countries to hit the Kremlin's oil industry in response to Russia's full-scale invasion of Ukraine. \nSince tougher embargo measures were put in place to halt Russia from exporting oil, Moscow is believed to be using ships with unclear ownership to transport goods - namely oil - across the globe.\nAs reported by the Atlantic Council, a US-based think tank, Russia is \"instrumentalising the dark fleet, using it especially as a primary conveyor of oil exports\".\nThe shadow fleet, or dark fleet, is the name given to ageing ships that sail \"without the industry's standard Western insurance, have opaque ownership, frequently change their names and flag registrations, and generally operate outside maritime regulations\", according to the Atlantic Council. \nThe latest incident in the Baltic Sea comes as Washington and London joined efforts to directly sanction energy companies Gazprom Neft and Surgutneftegas. \nUK Foreign Secretary David Lammy said the move to weaken Russian oil companies would \"drain Russia's war chest,\" adding that funds taken \"from Putin's hands helps save Ukrainian lives\".\nBut Gazprom Neft slammed the sanctions as \"baseless\" and \"illegitimate\", as reported by Russian state news agencies.\nAlso on Friday, the US Department of the Treasury said it had sanctioned 183 vessels that are \"part of the shadow fleet as well as oil tankers owned by Russia-based fleet operators\". \n\nAlso In EuropeDozens injured after Strasbourg tram collision\n\nTrump wants to take Greenland: Four ways this saga could go\n\nUS and UK toughen sanctions on Russian oil industry\n\nEurope\nGermany\nRussia\n\nRelated\n\nDozens injured after Strasbourg tram collision\n\n11 hrs ago\nEurope\n\nMusk interviews German far-right frontwoman\n\n2 days ago\nEurope\n\nJailed Belarus opposition figure seen for first time in months\n\n3 days ago\nEurope\n\nMore\n\n15 hrs ago\n\nUkraine says it captured two injured North Korean soldiers in Russia\n\nPresident Zelensky says the two men are receiving \"necessary medical assistance\". \n15 hrs ago\nWorld\n\n1 day ago\n\nUS and UK toughen sanctions on Russian oil industry\n\nThe actions are aimed at cutting off revenue Moscow is using to fund its war in Ukraine.\n1 day ago\nEurope\n\n2 days ago\n\nTrump says meeting with Putin being arranged\n\nThe US president-elect has said previously that he wants to negotiate an end to the war in Ukraine.\n2 days ago\nWorld\n\n3 days ago\n\nRussia keeping close eye on Trump's claim to Greenland\n\nThe Kremlin reacts to the US president-elect's remarks saying the Arctic is in Russia's sphere of interest.\n3 days ago\nEurope\n\n4 days ago\n\nRussian shelling kills 13 in Zaporizhzhia - Ukraine\n\nUkraine says Russia deliberately hit the city with guided aerial bombs knowing that civilians will be hurt. \n4 days ago\nEurope\n\nBritish Broadcasting Corporation\n\nHome\n\nNews\n\nSport\n\nBusiness\n\nInnovation\n\nCulture\n\nArts\n\nTravel\n\nEarth\n\nVideo\n\nLive\n\nAudio\n\nWeather\n\nBBC Shop\n\nBBC in other languages\n\nFollow BBC on:\n\nTerms of Use\n\nAbout the BBC\n\nPrivacy Policy\n\nCookies\n\nAccessibility Help\n\nContact the BBC\n\nAdvertise with us\n\nDo not share or sell my info\n\nContact technical support\n\nCopyright 2025 BBC. All rights reserved.\u00a0\u00a0The BBC is not responsible for the content of external sites.\u00a0Read about our approach to external linking.=================Trump wants to take Greenland: Four ways this saga could go\nSkip to content\n\nBritish Broadcasting Corporation\n\nHome\n\nNews\n\nSport\n\nBusiness\n\nInnovation\n\nCulture\n\nArts\n\nTravel\n\nEarth\n\nVideo\n\nLive\n\nHome\nNews\nIsrael-Gaza War\nWar in Ukraine\nUS & Canada\nUK\nUK Politics\nEngland\nN. Ireland\nN. Ireland Politics\nScotland\nScotland Politics\nWales\nWales Politics\nAfrica\nAsia\nChina\nIndia\nAustralia\nEurope\nLatin America\nMiddle East\nIn Pictures\nBBC InDepth\nBBC Verify\nSport\nBusiness\nExecutive Lounge\nTechnology of Business\nFuture of Business\nInnovation\nTechnology\nScience & Health\nArtificial Intelligence\nAI v the Mind\nCulture\nFilm & TV\nMusic\nArt & Design\nStyle\nBooks\nEntertainment News\nArts\nArts in Motion\nTravel\nDestinations\nAfrica\nAntarctica\nAsia\nAustralia and Pacific\nCaribbean & Bermuda\nCentral America\nEurope\nMiddle East\nNorth America\nSouth America\nWorld\u2019s Table\nCulture & Experiences\nAdventures\nThe SpeciaList\nEarth\nNatural Wonders\nWeather & Science\nClimate Solutions\nSustainable Business\nGreen Living\nVideo\nLive\nLive News\nLive Sport\n\nHome\n\nNews\n\nSport\n\nBusiness\n\nInnovation\n\nCulture\n\nArts\n\nTravel\n\nEarth\n\nVideo\n\nLive\n\nAudio\nWeather\nNewsletters\n\nTrump wants to take Greenland: Four ways this saga could go\n\nGetty Images\n\nDonald Trump's son Donald Jr recently visited Greenland\nIn recent weeks, US President-elect Donald Trump has shown renewed interest in taking control of Greenland, a largely autonomous territory of Denmark in the Arctic and the world's largest island.\nHe first indicated an intention to buy Greenland in 2019, during his first term as president, but this week he went further, refusing to rule out economic or military force to take control of it.\nDanish and European officials have responded negatively, saying Greenland is not for sale and its territorial integrity must be preserved.\nSo how could this unusual situation play out, with two Nato allies at odds over a huge territory which is 80% covered with ice but has considerable untapped mineral wealth? \nAnd how could the aspirations for independence among Greenland's population of 56,000, under Danish control for 300 years, affect the final outcome?\nHere we look at four possible scenarios for Greenland's future.\n\nTrump loses interest, nothing happens\n\nThere is some speculation that Trump's move is just bluster, a move to get Denmark to boost Greenland's security in the face of the threat of both Russia and China seeking influence in the region.\nLast month, Denmark announced a new $1.5bn (\u00a31.2bn) military package for the Arctic. It had been prepared before Trump's remarks but the announcement just hours after them was described by the Danish defence minister as an \"irony of fate\".\n\"What was important in what Trump said was that Denmark has to fulfil its obligations in the Arctic or it's got to let the US do it,\" says Elisabet Svane, chief political correspondent for Politiken newspaper.\nMarc Jacobsen, associate professor at the Royal Danish Defence College, believes that this is a case of Trump \"positioning himself before entering office\" while Greenland is using the occasion to gain more international authority, as an important step towards independence.\nSo even if Trump were to lose further interest in Greenland now, which Professor Jacobsen thinks is the most likely scenario, he has certainly put the spotlight on the issue.\nBut independence for Greenland has been on the agenda for many years, and some say the debate could even go in the opposite direction.\n\"I noticed in the last few days the Greenland PM is calmer in his comments - ie. yes, we want independence but in the long run,\" says Svane.\n\nReuters\n\nGreenland votes for independence, seeks closer ties with US\n\nThere is a general consensus in Greenland that independence will happen eventually, and also that if Greenland votes for it, Denmark will accept and ratify it. \nHowever, it is also unlikely that Greenland would vote for independence unless its people are given guarantees that they can keep the subsidies they currently get from Denmark to pay for things like healthcare and the welfare system.\n\"The Greenland PM may be up in arms now, but in the event that he actually calls a referendum, he will need some kind of convincing narrative about how to save the Greenland economy and welfare system,\" Ulrik Gad, a senior researcher at the Danish Institute for International Studies, told the BBC.\nOne possible next step is a free association - something like the US currently has with Pacific states the Marshall Islands, Micronesia and Palau.\nDenmark has previously opposed this status both for Greenland and for the Faroe Islands, but according to Dr Gad, current Prime Minister Mette Frederiksen is not categorically against it.\n\"Danish understanding of the Greenland historical experience is way better than it was 20 years ago,\" he says, with Denmark accepting colonial responsibility.\nThe recent discussions \"might persuade [Frederiksen] to say - better to keep Denmark in the Arctic, keep some kind of connection to Greenland, even if it's a looser one\", he adds.\nBut even if Greenland is able to get rid of Denmark, it has become clear in recent years that it can't get rid of the US. The Americans never really left after taking control of the island in World War Two, and see it as vital for their security.\nAn agreement in 1951 affirmed Denmark's basic sovereignty of the island but, in effect, gave the US whatever it wanted.\nDr Gad said that Greenland officials had been in contact with the last two US administrations about Washington's role.\n\"They now know the US will never leave,\" he said.\n\nWhy does Trump want Greenland and what do its people think?\n\nDanes struggle with response to Trump Greenland threat\n\nRussia keeping close eye on Trump's claim to Greenland\n\nTrump steps up economic pressure\n\nThere has been speculation that Trump's economic rhetoric is potentially the biggest threat to Denmark - with the US drastically increasing tariffs on Danish, or even EU, goods, forcing Denmark into concessions of some kind over Greenland.\nProfessor Jacobsen says Danish governments have been preparing for that, and not just because of the Arctic territory. \nTrump has been threatening universal 10% tariffs on all US imports which could, among other things, significantly disrupt European growth, and some Danish and other European companies are now considering setting up manufacturing bases in the US.\nPossible options for raising tariffs include by invoking the 1977 International Emergency Economic Powers Act (IEEPA), Benjamin Cote of international law firm Pillsbury told the website MarketWatch.\nOne of the main Danish industries potentially affected by this is pharmaceuticals. The US receives products such as hearing aids and most of its insulin from Denmark, as well as the diabetes drug Ozempic, made by the Danish company Novo Nordisk.\nAnalysts say the hike in prices that would result from these measures would not find favour with the US public.\n\nTrump invades Greenland\n\nThe \"nuclear option\" seems far-fetched, but with Trump failing to rule out military action it has to be considered.\nEssentially, it wouldn't be hard for the US to take control, given that they already have bases and plenty of troops in Greenland. \n\"The US has de facto control already,\" says Professor Jacobsen, adding that Trump's remarks seemed ill-informed and he didn't understand the point of them.\nThat said, any use of military force by Washington would create an international incident.\n\"If they invade Greenland, they invade Nato,\" says Svane. \"So that's where it stops. Article 5 would have to be triggered. And if a Nato country invades Nato then there's no Nato.\"\nDr Gad says Trump sounds like Chinese President Xi Jinping talking about Taiwan or Russia's Vladimir Putin talking about Ukraine.\n\"He's saying it's legitimate for us to take this piece of land,\" he says. \"If we take him really seriously this is a bad omen for the whole of the Western alliance.\"\nAdditional reporting by George Sandeman\n\nGreenland\nDenmark\nDonald Trump\nUnited States\n\nRelated\n\nGreenland profile\n\n2 days ago\nEurope\n\nDanes struggle with response to Trump Greenland threat\n\n2 days ago\nEurope\n\nRussia keeping close eye on Trump's claim to Greenland\n\n3 days ago\nEurope\n\nMore\n\n2 hrs ago\n\nWhat's the latest on the Los Angeles wildfires and what caused them?\n\nEverything you need to know about the blazes that have forced thousands to leave their homes.\n2 hrs ago\nUS & Canada\n\n2 hrs ago\n\n'Everything is gone' - Agony on a tight-knit LA street razed by inferno\n\nLifelong neighbours of West Las Flores Drive banded together, even as their community burned down.\n2 hrs ago\nUS & Canada\n\n2 hrs ago\n\nLA firefighters battle to contain monster inferno as death toll rises\n\nThe Palisades blaze is threatening Brentwood, one of the most affluent enclaves of America's second-biggest city.\n2 hrs ago\nUS & Canada\n\n5 hrs ago\n\nWhat we know about LA fires victims\n\nAn amputee and his bedbound son, and a man trying to defend his home of 55 years are among the 11 victims of the Los Angeles fires.\n5 hrs ago\nUS & Canada\n\n6 hrs ago\n\nThe star player hoping to turn millions of TikTok followers into rugby fans\n\nThe US athlete and social media star helped attract record crowds as she made her English rugby debut.\n6 hrs ago\nEngland\n\nBritish Broadcasting Corporation\n\nHome\n\nNews\n\nSport\n\nBusiness\n\nInnovation\n\nCulture\n\nArts\n\nTravel\n\nEarth\n\nVideo\n\nLive\n\nAudio\n\nWeather\n\nBBC Shop\n\nBBC in other languages\n\nFollow BBC on:\n\nTerms of Use\n\nAbout the BBC\n\nPrivacy Policy\n\nCookies\n\nAccessibility Help\n\nContact the BBC\n\nAdvertise with us\n\nDo not share or sell my info\n\nContact technical support\n\nCopyright 2025 BBC. All rights reserved.\u00a0\u00a0The BBC is not responsible for the content of external sites.\u00a0Read about our approach to external linking.", + "num_predict": 1024, + "context_window": 4096, + "temperature": 0, + "top_k": 50, + "top_p": 0.95, + "keep_alive": 300 + }, + "ui_properties": { + "position": { + "x": 736, + "y": 50 + }, + "zIndex": 0, + "width": 200, + "selectable": true + } + } + ], + "edges": [ + { + "id": "e19a5014-a167-4004-9a0c-86150c3465b5", + "source": "10", + "sourceHandle": "output", + "target": "12", + "targetHandle": "entry", + "ui_properties": { + "className": "any" + } + }, + { + "id": "3f616e72-90ab-4ce3-bf53-6264410b07da", + "source": "1", + "sourceHandle": "output", + "target": "2", + "targetHandle": "value", + "ui_properties": { + "className": "dataframe" + } + }, + { + "id": "440d8ed3-5219-4662-b7bc-2065bdf88d05", + "source": "1", + "sourceHandle": "output", + "target": "16", + "targetHandle": "values", + "ui_properties": { + "className": "list" + } + }, + { + "id": "82f5ae88-395d-427b-a1e7-6198cc8b4123", + "source": "9", + "sourceHandle": "output", + "target": "5", + "targetHandle": "values", + "ui_properties": { + "className": "any" + } + }, + { + "id": "53fb6ff2-3984-4a8c-93da-3071f75b6de6", + "source": "12", + "sourceHandle": "link", + "target": "13", + "targetHandle": "url", + "ui_properties": { + "className": "str" + } + }, + { + "id": "32e48d7c-d40d-4997-884d-c53d16f1765f", + "source": "19", + "sourceHandle": "output", + "target": "18", + "targetHandle": "value", + "ui_properties": { + "className": "str" + } + }, + { + "id": "33530", + "source": "20", + "sourceHandle": "output", + "target": "21", + "targetHandle": "value", + "ui_properties": { + "className": "int" + } + }, + { + "id": "6", + "source": "5", + "sourceHandle": "output", + "target": "8", + "targetHandle": "value", + "ui_properties": { + "className": "str" + } + }, + { + "id": "c9ab34f0-4a95-469b-bf0c-4bb72fde0b58", + "source": "14", + "sourceHandle": "output", + "target": "22", + "targetHandle": "text", + "ui_properties": { + "className": "union" + } + }, + { + "id": "8b5b8657-8c8d-4a6f-84a2-a92d0cf3e152", + "source": "22", + "sourceHandle": "output", + "target": "11", + "targetHandle": "input", + "ui_properties": { + "className": "str" + } + }, + { + "id": "831cb14c-c49a-4d49-a3d1-f9898602a42d", + "source": "16", + "sourceHandle": "output", + "target": "9", + "targetHandle": "input", + "ui_properties": { + "className": "list" + } + }, + { + "id": "2e1a56f7-1370-4042-9791-32adda4840d7", + "source": "13", + "sourceHandle": "output", + "target": "14", + "targetHandle": "text", + "ui_properties": { + "className": "str" + } + }, + { + "id": "xy-edge__5output-19text", + "source": "5", + "sourceHandle": "output", + "target": "19", + "targetHandle": "text", + "ui_properties": { + "className": "str" + } + }, + { + "id": "33529", + "source": "5", + "sourceHandle": "output", + "target": "20", + "targetHandle": "text", + "ui_properties": { + "className": "str" + } + } + ] + }, + "input_schema": null, + "output_schema": null +} \ No newline at end of file diff --git a/web/src/components/context_menus/ConnectableNodes.tsx b/web/src/components/context_menus/ConnectableNodes.tsx index 1d2a8762..c622a42a 100644 --- a/web/src/components/context_menus/ConnectableNodes.tsx +++ b/web/src/components/context_menus/ConnectableNodes.tsx @@ -185,6 +185,8 @@ const ConnectableNodes: React.FC = ({ y: menuPosition?.y || 0 }) ); + newNode.width = 200; + newNode.height = 200; addNode(newNode);