langchain-dev-utils 1.1.13__tar.gz → 1.1.15__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/PKG-INFO +1 -1
  2. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/pyproject.toml +3 -1
  3. langchain_dev_utils-1.1.15/src/langchain_dev_utils/__init__.py +1 -0
  4. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/src/langchain_dev_utils/agents/factory.py +27 -23
  5. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/src/langchain_dev_utils/agents/middleware/plan.py +1 -0
  6. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/src/langchain_dev_utils/chat_models/base.py +1 -1
  7. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/src/langchain_dev_utils/embeddings/base.py +3 -0
  8. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/tests/test_agent.py +1 -0
  9. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/tests/test_load_embbeding.py +7 -1
  10. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/uv.lock +59 -1
  11. langchain_dev_utils-1.1.13/src/langchain_dev_utils/__init__.py +0 -1
  12. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/.gitignore +0 -0
  13. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/.python-version +0 -0
  14. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/.vscode/settings.json +0 -0
  15. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/LICENSE +0 -0
  16. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/README.md +0 -0
  17. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/README_cn.md +0 -0
  18. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/src/langchain_dev_utils/agents/__init__.py +0 -0
  19. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/src/langchain_dev_utils/agents/file_system.py +0 -0
  20. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/src/langchain_dev_utils/agents/middleware/__init__.py +0 -0
  21. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/src/langchain_dev_utils/agents/middleware/model_fallback.py +0 -0
  22. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/src/langchain_dev_utils/agents/middleware/model_router.py +0 -0
  23. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/src/langchain_dev_utils/agents/middleware/summarization.py +0 -0
  24. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/src/langchain_dev_utils/agents/middleware/tool_emulator.py +0 -0
  25. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/src/langchain_dev_utils/agents/middleware/tool_selection.py +0 -0
  26. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/src/langchain_dev_utils/agents/plan.py +0 -0
  27. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/src/langchain_dev_utils/agents/wrap.py +0 -0
  28. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/src/langchain_dev_utils/chat_models/__init__.py +0 -0
  29. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/src/langchain_dev_utils/chat_models/adapters/__init__.py +0 -0
  30. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/src/langchain_dev_utils/chat_models/adapters/openai_compatible.py +0 -0
  31. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/src/langchain_dev_utils/chat_models/types.py +0 -0
  32. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/src/langchain_dev_utils/embeddings/__init__.py +0 -0
  33. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/src/langchain_dev_utils/message_convert/__init__.py +0 -0
  34. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/src/langchain_dev_utils/message_convert/content.py +0 -0
  35. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/src/langchain_dev_utils/message_convert/format.py +0 -0
  36. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/src/langchain_dev_utils/pipeline/__init__.py +0 -0
  37. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/src/langchain_dev_utils/pipeline/parallel.py +0 -0
  38. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/src/langchain_dev_utils/pipeline/sequential.py +0 -0
  39. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/src/langchain_dev_utils/pipeline/types.py +0 -0
  40. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/src/langchain_dev_utils/py.typed +0 -0
  41. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/src/langchain_dev_utils/tool_calling/__init__.py +0 -0
  42. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/src/langchain_dev_utils/tool_calling/human_in_the_loop.py +0 -0
  43. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/src/langchain_dev_utils/tool_calling/utils.py +0 -0
  44. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/tests/test_chat_models.py +0 -0
  45. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/tests/test_human_in_the_loop.py +0 -0
  46. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/tests/test_load_model.py +0 -0
  47. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/tests/test_messages.py +0 -0
  48. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/tests/test_model_tool_emulator.py +0 -0
  49. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/tests/test_pipline.py +0 -0
  50. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/tests/test_plan_middleware.py +0 -0
  51. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/tests/test_router_model.py +0 -0
  52. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/tests/test_tool_calling.py +0 -0
  53. {langchain_dev_utils-1.1.13 → langchain_dev_utils-1.1.15}/tests/test_wrap_agent.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langchain-dev-utils
3
- Version: 1.1.13
3
+ Version: 1.1.15
4
4
  Summary: A practical utility library for LangChain and LangGraph development
5
5
  Project-URL: Source Code, https://github.com/TBice123123/langchain-dev-utils
6
6
  Project-URL: repository, https://github.com/TBice123123/langchain-dev-utils
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "langchain-dev-utils"
3
- version = "1.1.13"
3
+ version = "1.1.15"
4
4
  description = "A practical utility library for LangChain and LangGraph development"
5
5
  readme = "README.md"
6
6
  authors = [{ name = "tiebingice", email = "tiebingice123@outlook.com" }]
@@ -28,9 +28,11 @@ python_files = ["test_*.py"]
28
28
  python_functions = ["test_*"]
29
29
 
30
30
  [dependency-groups]
31
+ dev = ["ruff>=0.14.5"]
31
32
  tests = [
32
33
  "python-dotenv>=1.1.1",
33
34
  "langchain-tests>=1.0.0",
34
35
  "langchain-deepseek>=1.0.0",
35
36
  "langchain-qwq>=0.3.0",
37
+ "langchain-ollama>=1.0.0",
36
38
  ]
@@ -0,0 +1 @@
1
+ __version__ = "1.1.15"
@@ -1,9 +1,14 @@
1
1
  from typing import Any, Sequence
2
- from typing import Callable, cast
2
+ from typing import Callable
3
3
 
4
- from langchain.agents import AgentState, create_agent as _create_agent
5
- from langchain.agents.factory import ResponseT
6
- from langchain.agents.middleware import AgentMiddleware
4
+ from langchain.agents import create_agent as _create_agent
5
+ from langchain.agents.middleware.types import (
6
+ AgentMiddleware,
7
+ AgentState,
8
+ ResponseT,
9
+ _InputAgentState,
10
+ _OutputAgentState,
11
+ )
7
12
  from langchain.agents.structured_output import ResponseFormat
8
13
  from langchain_core.tools import BaseTool
9
14
  from langgraph.cache.base import BaseCache
@@ -31,7 +36,9 @@ def create_agent( # noqa: PLR0915
31
36
  debug: bool = False,
32
37
  name: str | None = None,
33
38
  cache: BaseCache | None = None,
34
- ) -> CompiledStateGraph:
39
+ ) -> CompiledStateGraph[
40
+ AgentState[ResponseT], ContextT, _InputAgentState, _OutputAgentState[ResponseT]
41
+ ]:
35
42
  """
36
43
  Create a prebuilt agent with string-based model specification.
37
44
 
@@ -80,22 +87,19 @@ def create_agent( # noqa: PLR0915
80
87
  ... })
81
88
  >>> response
82
89
  """
83
- return cast(
84
- CompiledStateGraph,
85
- _create_agent(
86
- model=load_chat_model(model),
87
- tools=tools,
88
- system_prompt=system_prompt,
89
- middleware=middleware,
90
- response_format=response_format,
91
- state_schema=state_schema,
92
- context_schema=context_schema,
93
- checkpointer=checkpointer,
94
- store=store,
95
- interrupt_before=interrupt_before,
96
- interrupt_after=interrupt_after,
97
- debug=debug,
98
- name=name,
99
- cache=cache,
100
- ),
90
+ return _create_agent(
91
+ model=load_chat_model(model),
92
+ tools=tools,
93
+ system_prompt=system_prompt,
94
+ middleware=middleware,
95
+ response_format=response_format,
96
+ state_schema=state_schema,
97
+ context_schema=context_schema,
98
+ checkpointer=checkpointer,
99
+ store=store,
100
+ interrupt_before=interrupt_before,
101
+ interrupt_after=interrupt_after,
102
+ debug=debug,
103
+ name=name,
104
+ cache=cache,
101
105
  )
@@ -287,6 +287,7 @@ class PlanMiddleware(AgentMiddleware):
287
287
  If not provided, uses the default `_DEFAULT_READ_PLAN_TOOL_DESCRIPTION`.
288
288
  use_read_plan_tool: Whether to use the `read_plan` tool.
289
289
  If not provided, uses the default `True`.
290
+ message_key: The key of the message to be updated. Defaults to "messages".
290
291
  Example:
291
292
  ```python
292
293
  from langchain_dev_utils.agents.middleware.plan import PlanMiddleware
@@ -3,9 +3,9 @@ from typing import Any, NotRequired, Optional, TypedDict, cast
3
3
  from langchain.chat_models.base import _SUPPORTED_PROVIDERS, _init_chat_model_helper
4
4
  from langchain_core.language_models.chat_models import BaseChatModel
5
5
  from langchain_core.utils import from_env
6
+ from pydantic import BaseModel
6
7
 
7
8
  from .types import ChatModelType, ToolChoiceType
8
- from pydantic import BaseModel
9
9
 
10
10
  _MODEL_PROVIDERS_DICT = {}
11
11
 
@@ -223,6 +223,9 @@ def load_embeddings(
223
223
  ):
224
224
  raise ValueError(f"Provider {provider} not registered")
225
225
 
226
+ if provider in _SUPPORTED_PROVIDERS:
227
+ return init_embeddings(model, provider=provider, **kwargs)
228
+
226
229
  embeddings = _EMBEDDINGS_PROVIDERS_DICT[provider]["embeddings_model"]
227
230
  if isinstance(embeddings, str):
228
231
  if not (api_key := kwargs.get("api_key")):
@@ -33,6 +33,7 @@ def test_prebuilt_agent():
33
33
  response = agent.invoke(
34
34
  {"messages": [HumanMessage("What's the weather in New York?")]}
35
35
  )
36
+
36
37
  assert len(response["messages"]) == 4
37
38
 
38
39
  assert response["messages"][1].tool_calls[0]["name"] == "get_current_weather"
@@ -22,7 +22,13 @@ batch_register_embeddings_provider(
22
22
  )
23
23
 
24
24
 
25
- @pytest.fixture(params=["dashscope:text-embedding-v4", "siliconflow:BAAI/bge-m3"])
25
+ @pytest.fixture(
26
+ params=[
27
+ "dashscope:text-embedding-v4",
28
+ "siliconflow:BAAI/bge-m3",
29
+ "ollama:bge-m3:latest",
30
+ ]
31
+ )
26
32
  def embbeding_model(request: pytest.FixtureRequest) -> Embeddings:
27
33
  params = request.param
28
34
  return load_embeddings(params)
@@ -418,7 +418,7 @@ wheels = [
418
418
 
419
419
  [[package]]
420
420
  name = "langchain-dev-utils"
421
- version = "1.1.12"
421
+ version = "1.1.14"
422
422
  source = { editable = "." }
423
423
  dependencies = [
424
424
  { name = "langchain" },
@@ -431,8 +431,12 @@ standard = [
431
431
  ]
432
432
 
433
433
  [package.dev-dependencies]
434
+ dev = [
435
+ { name = "ruff" },
436
+ ]
434
437
  tests = [
435
438
  { name = "langchain-deepseek" },
439
+ { name = "langchain-ollama" },
436
440
  { name = "langchain-qwq" },
437
441
  { name = "langchain-tests" },
438
442
  { name = "python-dotenv" },
@@ -447,13 +451,28 @@ requires-dist = [
447
451
  provides-extras = ["standard"]
448
452
 
449
453
  [package.metadata.requires-dev]
454
+ dev = [{ name = "ruff", specifier = ">=0.14.5" }]
450
455
  tests = [
451
456
  { name = "langchain-deepseek", specifier = ">=1.0.0" },
457
+ { name = "langchain-ollama", specifier = ">=1.0.0" },
452
458
  { name = "langchain-qwq", specifier = ">=0.3.0" },
453
459
  { name = "langchain-tests", specifier = ">=1.0.0" },
454
460
  { name = "python-dotenv", specifier = ">=1.1.1" },
455
461
  ]
456
462
 
463
+ [[package]]
464
+ name = "langchain-ollama"
465
+ version = "1.0.0"
466
+ source = { registry = "https://pypi.mirrors.ustc.edu.cn/simple/" }
467
+ dependencies = [
468
+ { name = "langchain-core" },
469
+ { name = "ollama" },
470
+ ]
471
+ sdist = { url = "https://mirrors.ustc.edu.cn/pypi/packages/8b/45/d996b4c0e3e7155ff7a110bf24dcb5043fc1405559a2089c11fe97511cc2/langchain_ollama-1.0.0.tar.gz", hash = "sha256:2ea9ad1b0f0ab319d600b9193d1124a8925523a3b943d75a967718e24ec09a8a", size = 151042, upload-time = "2025-10-17T15:41:50.277Z" }
472
+ wheels = [
473
+ { url = "https://mirrors.ustc.edu.cn/pypi/packages/91/08/7be292aee722692b13a93316247b57eefb83d4309f5fdfe636cc47786efe/langchain_ollama-1.0.0-py3-none-any.whl", hash = "sha256:5828523fcbd137847490841110a6aedf96b68534e7fe2735715ecf3e835b2391", size = 29006, upload-time = "2025-10-17T15:41:49.497Z" },
474
+ ]
475
+
457
476
  [[package]]
458
477
  name = "langchain-openai"
459
478
  version = "1.0.3"
@@ -797,6 +816,19 @@ wheels = [
797
816
  { url = "https://mirrors.ustc.edu.cn/pypi/packages/95/8e/2844c3959ce9a63acc7c8e50881133d86666f0420bcde695e115ced0920f/numpy-2.3.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:81b3a59793523e552c4a96109dde028aa4448ae06ccac5a76ff6532a85558a7f", size = 12973130, upload-time = "2025-10-15T16:18:09.397Z" },
798
817
  ]
799
818
 
819
+ [[package]]
820
+ name = "ollama"
821
+ version = "0.6.1"
822
+ source = { registry = "https://pypi.mirrors.ustc.edu.cn/simple/" }
823
+ dependencies = [
824
+ { name = "httpx" },
825
+ { name = "pydantic" },
826
+ ]
827
+ sdist = { url = "https://mirrors.ustc.edu.cn/pypi/packages/9d/5a/652dac4b7affc2b37b95386f8ae78f22808af09d720689e3d7a86b6ed98e/ollama-0.6.1.tar.gz", hash = "sha256:478c67546836430034b415ed64fa890fd3d1ff91781a9d548b3325274e69d7c6", size = 51620, upload-time = "2025-11-13T23:02:17.416Z" }
828
+ wheels = [
829
+ { url = "https://mirrors.ustc.edu.cn/pypi/packages/47/4f/4a617ee93d8208d2bcf26b2d8b9402ceaed03e3853c754940e2290fed063/ollama-0.6.1-py3-none-any.whl", hash = "sha256:fc4c984b345735c5486faeee67d8a265214a31cbb828167782dc642ce0a2bf8c", size = 14354, upload-time = "2025-11-13T23:02:16.292Z" },
830
+ ]
831
+
800
832
  [[package]]
801
833
  name = "openai"
802
834
  version = "2.6.1"
@@ -1470,6 +1502,32 @@ wheels = [
1470
1502
  { url = "https://mirrors.ustc.edu.cn/pypi/packages/25/7a/b0178788f8dc6cafce37a212c99565fa1fe7872c70c6c9c1e1a372d9d88f/rich-14.2.0-py3-none-any.whl", hash = "sha256:76bc51fe2e57d2b1be1f96c524b890b816e334ab4c1e45888799bfaab0021edd", size = 243393, upload-time = "2025-10-09T14:16:51.245Z" },
1471
1503
  ]
1472
1504
 
1505
+ [[package]]
1506
+ name = "ruff"
1507
+ version = "0.14.5"
1508
+ source = { registry = "https://pypi.mirrors.ustc.edu.cn/simple/" }
1509
+ sdist = { url = "https://mirrors.ustc.edu.cn/pypi/packages/82/fa/fbb67a5780ae0f704876cb8ac92d6d76da41da4dc72b7ed3565ab18f2f52/ruff-0.14.5.tar.gz", hash = "sha256:8d3b48d7d8aad423d3137af7ab6c8b1e38e4de104800f0d596990f6ada1a9fc1", size = 5615944, upload-time = "2025-11-13T19:58:51.155Z" }
1510
+ wheels = [
1511
+ { url = "https://mirrors.ustc.edu.cn/pypi/packages/68/31/c07e9c535248d10836a94e4f4e8c5a31a1beed6f169b31405b227872d4f4/ruff-0.14.5-py3-none-linux_armv6l.whl", hash = "sha256:f3b8248123b586de44a8018bcc9fefe31d23dda57a34e6f0e1e53bd51fd63594", size = 13171630, upload-time = "2025-11-13T19:57:54.894Z" },
1512
+ { url = "https://mirrors.ustc.edu.cn/pypi/packages/8e/5c/283c62516dca697cd604c2796d1487396b7a436b2f0ecc3fd412aca470e0/ruff-0.14.5-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:f7a75236570318c7a30edd7f5491945f0169de738d945ca8784500b517163a72", size = 13413925, upload-time = "2025-11-13T19:57:59.181Z" },
1513
+ { url = "https://mirrors.ustc.edu.cn/pypi/packages/b6/f3/aa319f4afc22cb6fcba2b9cdfc0f03bbf747e59ab7a8c5e90173857a1361/ruff-0.14.5-py3-none-macosx_11_0_arm64.whl", hash = "sha256:6d146132d1ee115f8802356a2dc9a634dbf58184c51bff21f313e8cd1c74899a", size = 12574040, upload-time = "2025-11-13T19:58:02.056Z" },
1514
+ { url = "https://mirrors.ustc.edu.cn/pypi/packages/f9/7f/cb5845fcc7c7e88ed57f58670189fc2ff517fe2134c3821e77e29fd3b0c8/ruff-0.14.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2380596653dcd20b057794d55681571a257a42327da8894b93bbd6111aa801f", size = 13009755, upload-time = "2025-11-13T19:58:05.172Z" },
1515
+ { url = "https://mirrors.ustc.edu.cn/pypi/packages/21/d2/bcbedbb6bcb9253085981730687ddc0cc7b2e18e8dc13cf4453de905d7a0/ruff-0.14.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2d1fa985a42b1f075a098fa1ab9d472b712bdb17ad87a8ec86e45e7fa6273e68", size = 12937641, upload-time = "2025-11-13T19:58:08.345Z" },
1516
+ { url = "https://mirrors.ustc.edu.cn/pypi/packages/a4/58/e25de28a572bdd60ffc6bb71fc7fd25a94ec6a076942e372437649cbb02a/ruff-0.14.5-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88f0770d42b7fa02bbefddde15d235ca3aa24e2f0137388cc15b2dcbb1f7c7a7", size = 13610854, upload-time = "2025-11-13T19:58:11.419Z" },
1517
+ { url = "https://mirrors.ustc.edu.cn/pypi/packages/7d/24/43bb3fd23ecee9861970978ea1a7a63e12a204d319248a7e8af539984280/ruff-0.14.5-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:3676cb02b9061fee7294661071c4709fa21419ea9176087cb77e64410926eb78", size = 15061088, upload-time = "2025-11-13T19:58:14.551Z" },
1518
+ { url = "https://mirrors.ustc.edu.cn/pypi/packages/23/44/a022f288d61c2f8c8645b24c364b719aee293ffc7d633a2ca4d116b9c716/ruff-0.14.5-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b595bedf6bc9cab647c4a173a61acf4f1ac5f2b545203ba82f30fcb10b0318fb", size = 14734717, upload-time = "2025-11-13T19:58:17.518Z" },
1519
+ { url = "https://mirrors.ustc.edu.cn/pypi/packages/58/81/5c6ba44de7e44c91f68073e0658109d8373b0590940efe5bd7753a2585a3/ruff-0.14.5-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f55382725ad0bdb2e8ee2babcbbfb16f124f5a59496a2f6a46f1d9d99d93e6e2", size = 14028812, upload-time = "2025-11-13T19:58:20.533Z" },
1520
+ { url = "https://mirrors.ustc.edu.cn/pypi/packages/ad/ef/41a8b60f8462cb320f68615b00299ebb12660097c952c600c762078420f8/ruff-0.14.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7497d19dce23976bdaca24345ae131a1d38dcfe1b0850ad8e9e6e4fa321a6e19", size = 13825656, upload-time = "2025-11-13T19:58:23.345Z" },
1521
+ { url = "https://mirrors.ustc.edu.cn/pypi/packages/7c/00/207e5de737fdb59b39eb1fac806904fe05681981b46d6a6db9468501062e/ruff-0.14.5-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:410e781f1122d6be4f446981dd479470af86537fb0b8857f27a6e872f65a38e4", size = 13959922, upload-time = "2025-11-13T19:58:26.537Z" },
1522
+ { url = "https://mirrors.ustc.edu.cn/pypi/packages/bc/7e/fa1f5c2776db4be405040293618846a2dece5c70b050874c2d1f10f24776/ruff-0.14.5-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:c01be527ef4c91a6d55e53b337bfe2c0f82af024cc1a33c44792d6844e2331e1", size = 12932501, upload-time = "2025-11-13T19:58:29.822Z" },
1523
+ { url = "https://mirrors.ustc.edu.cn/pypi/packages/67/d8/d86bf784d693a764b59479a6bbdc9515ae42c340a5dc5ab1dabef847bfaa/ruff-0.14.5-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:f66e9bb762e68d66e48550b59c74314168ebb46199886c5c5aa0b0fbcc81b151", size = 12927319, upload-time = "2025-11-13T19:58:32.923Z" },
1524
+ { url = "https://mirrors.ustc.edu.cn/pypi/packages/ac/de/ee0b304d450ae007ce0cb3e455fe24fbcaaedae4ebaad6c23831c6663651/ruff-0.14.5-py3-none-musllinux_1_2_i686.whl", hash = "sha256:d93be8f1fa01022337f1f8f3bcaa7ffee2d0b03f00922c45c2207954f351f465", size = 13206209, upload-time = "2025-11-13T19:58:35.952Z" },
1525
+ { url = "https://mirrors.ustc.edu.cn/pypi/packages/33/aa/193ca7e3a92d74f17d9d5771a765965d2cf42c86e6f0fd95b13969115723/ruff-0.14.5-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:c135d4b681f7401fe0e7312017e41aba9b3160861105726b76cfa14bc25aa367", size = 13953709, upload-time = "2025-11-13T19:58:39.002Z" },
1526
+ { url = "https://mirrors.ustc.edu.cn/pypi/packages/cc/f1/7119e42aa1d3bf036ffc9478885c2e248812b7de9abea4eae89163d2929d/ruff-0.14.5-py3-none-win32.whl", hash = "sha256:c83642e6fccfb6dea8b785eb9f456800dcd6a63f362238af5fc0c83d027dd08b", size = 12925808, upload-time = "2025-11-13T19:58:42.779Z" },
1527
+ { url = "https://mirrors.ustc.edu.cn/pypi/packages/3b/9d/7c0a255d21e0912114784e4a96bf62af0618e2190cae468cd82b13625ad2/ruff-0.14.5-py3-none-win_amd64.whl", hash = "sha256:9d55d7af7166f143c94eae1db3312f9ea8f95a4defef1979ed516dbb38c27621", size = 14331546, upload-time = "2025-11-13T19:58:45.691Z" },
1528
+ { url = "https://mirrors.ustc.edu.cn/pypi/packages/e5/80/69756670caedcf3b9be597a6e12276a6cf6197076eb62aad0c608f8efce0/ruff-0.14.5-py3-none-win_arm64.whl", hash = "sha256:4b700459d4649e2594b31f20a9de33bc7c19976d4746d8d0798ad959621d64a4", size = 13433331, upload-time = "2025-11-13T19:58:48.434Z" },
1529
+ ]
1530
+
1473
1531
  [[package]]
1474
1532
  name = "sniffio"
1475
1533
  version = "1.3.1"
@@ -1 +0,0 @@
1
- __version__ = "1.1.13"