diff --git a/dev-python/lmnr/Manifest b/dev-python/lmnr/Manifest new file mode 100644 index 0000000000..ab00441f7c --- /dev/null +++ b/dev-python/lmnr/Manifest @@ -0,0 +1 @@ +DIST lmnr-python-0.7.52.gh.tar.gz 3699962 BLAKE2B 12a29bdd6161f127bcbcd5bdf20a1e91dd3e3b4ac1dbf1d0f30ffebe03d209ab0cafb1eebd4bbd570015b664438b3f842e17e98c97c1a0c7785e58d64b163b3b SHA512 1600aa3eb117f075130d56682373ab05eae0f33db1bd2ab68d5c3040b77d93bbf8497cd49fc3dcce6f05609bbb6d92b4f2faa50ce48114952a9acd5f6d98d70c diff --git a/dev-python/lmnr/lmnr-0.7.52.ebuild b/dev-python/lmnr/lmnr-0.7.52.ebuild new file mode 100644 index 0000000000..b7804fd3a0 --- /dev/null +++ b/dev-python/lmnr/lmnr-0.7.52.ebuild @@ -0,0 +1,111 @@ +# Copyright 2026 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +DISTUTILS_USE_PEP517=uv-build +PYTHON_COMPAT=( python3_{12..14} ) + +inherit distutils-r1 + +MY_PN="lmnr-python" +MY_P="${MY_PN}-${PV}" +DESCRIPTION="Python SDK for Laminar" +HOMEPAGE=" + https://github.com/lmnr-ai/lmnr-python + https://pypi.org/project/lmnr/ +" +SRC_URI=" + https://github.com/lmnr-ai/${MY_PN}/archive/refs/tags/${PV}.tar.gz + -> ${MY_P}.gh.tar.gz +" +S="${WORKDIR}/${MY_P}" + +LICENSE="Apache-2.0" +SLOT="0" +KEYWORDS="~amd64 ~arm64" + +RDEPEND=" + >=dev-python/grpcio-1[${PYTHON_USEDEP}] + >=dev-python/httpx-0.24.0[${PYTHON_USEDEP}] + >=dev-python/opentelemetry-api-1.39.0[${PYTHON_USEDEP}] + >=dev-python/opentelemetry-exporter-otlp-proto-grpc-1.39.0[${PYTHON_USEDEP}] + >=dev-python/opentelemetry-exporter-otlp-proto-http-1.39.0[${PYTHON_USEDEP}] + >=dev-python/opentelemetry-instrumentation-0.54_beta0[${PYTHON_USEDEP}] + >=dev-python/opentelemetry-instrumentation-threading-0.54_beta0[${PYTHON_USEDEP}] + >=dev-python/opentelemetry-sdk-1.39.0[${PYTHON_USEDEP}] + >=dev-python/opentelemetry-semantic-conventions-0.60_beta1[${PYTHON_USEDEP}] + >=dev-python/opentelemetry-semantic-conventions-ai-0.4.13[${PYTHON_USEDEP}] + >=dev-python/orjson-3.0.0[${PYTHON_USEDEP}] + >=dev-python/packaging-22.0[${PYTHON_USEDEP}] + >=dev-python/pydantic-2.0.3[${PYTHON_USEDEP}] + >=dev-python/python-dotenv-1.0[${PYTHON_USEDEP}] + >=dev-python/tenacity-8.0[${PYTHON_USEDEP}] + >=dev-python/tqdm-4.0[${PYTHON_USEDEP}] +" +# FIXME keyword litellm and dependencies for arm64 +BDEPEND=" + test? ( + >=dev-python/anthropic-0.95.0[${PYTHON_USEDEP}] + >=dev-python/boto3-1.28.57[${PYTHON_USEDEP}] + !arm64? ( + $(python_gen_any_dep ' + >=dev-python/litellm-1.85.2[${PYTHON_SINGLE_USEDEP}] + ') + ) + ) +" + +EPYTEST_PLUGINS=( pytest-{asyncio,recording,sugar} ) +distutils_enable_tests pytest + +python_test() { + local EPYTEST_IGNORE=( + # missing optional deps + tests/test_google_genai.py + tests/test_instrumentations/test_claude_agent/ + tests/test_langchain.py + tests/test_instrumentations/test_groq/ + tests/test_instrumentations/test_openai_agents/ + ) + local EPYTEST_DESELECT=( + # google-genai + tests/test_utils.py::test_merge_text_parts_empty_list + tests/test_utils.py::test_merge_text_parts_consecutive_strings + tests/test_utils.py::test_merge_text_parts_consecutive_part_objects + tests/test_utils.py::test_merge_text_parts_consecutive_part_dicts + tests/test_utils.py::test_merge_text_parts_mixed_types + tests/test_utils.py::test_merge_text_parts_with_non_text_part + tests/test_utils.py::test_merge_text_parts_with_function_call + tests/test_utils.py::test_merge_text_parts_multiple_non_text_parts + tests/test_utils.py::test_merge_text_parts_only_non_text_parts + tests/test_utils.py::test_merge_text_parts_single_text_part + tests/test_utils.py::test_merge_text_parts_with_file_object + tests/test_utils.py::test_merge_text_parts_trailing_text_only + tests/test_utils.py::test_merge_text_parts_leading_non_text + + # langchain-openai + tests/test_observe_concurrency.py::test_observe_threadpool_parallel_spans_with_langchain + tests/test_tracing.py::test_use_span_with_auto_instrumentation_langchain + tests/test_tracing_concurrency.py::test_threadpool_parallel_spans_with_langchain + + # network + tests/test_instrumentations/test_openai/traces/test_chat.py::test_chat_exception + tests/test_instrumentations/test_openai/traces/test_chat.py::test_chat_async_exception + tests/test_instrumentations/test_openai/traces/test_chat_parse.py::test_parsed_completion_exception + tests/test_instrumentations/test_openai/traces/test_chat_parse.py::test_async_parsed_completion_exception + tests/test_instrumentations/test_openai/traces/test_completions.py::test_completion_streaming + tests/test_instrumentations/test_openai/traces/test_completions.py::test_completion_exception + tests/test_instrumentations/test_openai/traces/test_completions.py::test_async_completion_exception + tests/test_instrumentations/test_openai/traces/test_embeddings.py::test_embeddings_exception + tests/test_instrumentations/test_openai/traces/test_embeddings.py::test_async_embeddings_exception + ) + + if ! has_version "dev-python/litellm[${PYTHON_SINGLE_USEDEP}]"; then + EPYTEST_IGNORE+=( + tests/test_litellm.py + ) + fi + + epytest +} diff --git a/dev-python/lmnr/metadata.xml b/dev-python/lmnr/metadata.xml new file mode 100644 index 0000000000..76a9c8ba2b --- /dev/null +++ b/dev-python/lmnr/metadata.xml @@ -0,0 +1,12 @@ + + + + + falbrechtskirchinger@gmail.com + Florian Albrechtskirchinger + + + lmnr + lmnr-ai/lmnr-python + +