Aasher commited on
Commit
9ec8758
·
1 Parent(s): 8ce06a3

Restructure axiom project

Browse files
Dockerfile CHANGED
@@ -32,12 +32,11 @@ ENV HOME=/home/user \
32
  WORKDIR $HOME/app
33
 
34
  # Copy application files with correct ownership
35
- COPY --chown=user:user ./app.py ./app.py
36
- COPY --chown=user:user . .
37
 
38
  # Expose the necessary ports
39
  EXPOSE 8082
40
  EXPOSE 7860
41
 
42
  # Run the two required commands concurrently using bash process control
43
- CMD ["bash", "-c", "uv run mcpdoc --yaml docs_config.yaml --transport sse --port 8082 --host localhost & uv run chainlit run app.py -h --port 7860 --host 0.0.0.0"]
 
32
  WORKDIR $HOME/app
33
 
34
  # Copy application files with correct ownership
35
+ COPY --chown=user:user . .
 
36
 
37
  # Expose the necessary ports
38
  EXPOSE 8082
39
  EXPOSE 7860
40
 
41
  # Run the two required commands concurrently using bash process control
42
+ CMD ["bash", "-c", "uv run mcpdoc --yaml docs_config.yaml --transport sse --port 8082 --host localhost & uv run chainlit run src/axiom/app.py -h --port 7860 --host 0.0.0.0"]
LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ MIT License
2
+
3
+ Copyright (c) 2024 LangChain
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
chainlit.md CHANGED
@@ -1,10 +1,13 @@
1
  # Axiom - A Docs Expert Agent
2
 
3
- An AI-powered documentation assistant built with LangGraph, MCP Docs, Chainlit and Gemini, designed to help users create different projects using natural language.
4
 
5
  ## Features
6
 
7
  - 🤖 Interactive chat interface
 
 
 
8
  - 📚 Access to multiple documentation sources
9
  - 🎨 Support for image processing and analysis
10
  - 📈 Use images and graphs to create production-ready code
@@ -32,3 +35,5 @@ The agent has access to following documentations:
32
  You can access the GitHub repository here:
33
 
34
  🔹[Axiom](https://github.com/aasherkamal216/Axiom)
 
 
 
1
  # Axiom - A Docs Expert Agent
2
 
3
+ Axiom is AI Agent specialized in modern AI frameworks, libraries and tools. It can assist in creating AI Agents, RAG systems, chatbots, authentication mechanisms, and even full-stack development. It is built with LangGraph, MCP Docs Server, Chainlit and Gemini, designed to help users create different projects using natural language instructions.
4
 
5
  ## Features
6
 
7
  - 🤖 Interactive chat interface
8
+ - 🧪 Supports two modes:
9
+ - **Agent Mode:** Ideal for complex tasks like brainstorming, code generation, and web apps creation.
10
+ - **Chat Mode:** Suited for quick information retrieval and answering questions from the provided documentations.
11
  - 📚 Access to multiple documentation sources
12
  - 🎨 Support for image processing and analysis
13
  - 📈 Use images and graphs to create production-ready code
 
35
  You can access the GitHub repository here:
36
 
37
  🔹[Axiom](https://github.com/aasherkamal216/Axiom)
38
+
39
+ ---
public/msg_icons/usb.png CHANGED
pyproject.toml CHANGED
@@ -1,5 +1,5 @@
1
  [project]
2
- name = "docs-agent-mcp"
3
  version = "0.1.0"
4
  description = "Add your description here"
5
  readme = "README.md"
@@ -14,3 +14,43 @@ dependencies = [
14
  "python-dotenv>=1.0.1",
15
  "websockets>=15.0.1",
16
  ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  [project]
2
+ name = "axiom-agent"
3
  version = "0.1.0"
4
  description = "Add your description here"
5
  readme = "README.md"
 
14
  "python-dotenv>=1.0.1",
15
  "websockets>=15.0.1",
16
  ]
17
+
18
+ [project.optional-dependencies]
19
+ dev = ["mypy>=1.11.1", "ruff>=0.6.1"]
20
+
21
+ [build-system]
22
+ requires = ["setuptools>=73.0.0", "wheel"]
23
+ build-backend = "setuptools.build_meta"
24
+
25
+ [tool.setuptools]
26
+ packages = ["axiom"]
27
+ [tool.setuptools.package-dir]
28
+ "axiom" = "src/axiom"
29
+
30
+ [tool.setuptools.package-data]
31
+ "*" = ["py.typed"]
32
+
33
+
34
+ [tool.ruff]
35
+ lint.select = [
36
+ "E", # pycodestyle
37
+ "F", # pyflakes
38
+ "I", # isort
39
+ "D", # pydocstyle
40
+ "D401", # First line should be in imperative mood
41
+ "T201",
42
+ "UP",
43
+ ]
44
+ lint.ignore = [
45
+ "UP006",
46
+ "UP007",
47
+ # We actually do want to import from typing_extensions
48
+ "UP035",
49
+ # Relax the convention by _not_ requiring documentation for every function parameter.
50
+ "D417",
51
+ "E501",
52
+ ]
53
+ [tool.ruff.lint.per-file-ignores]
54
+ "tests/*" = ["D", "UP"]
55
+ [tool.ruff.lint.pydocstyle]
56
+ convention = "google"
src/axiom/__init__.py ADDED
File without changes
agent.py → src/axiom/agent.py RENAMED
File without changes
app.py → src/axiom/app.py RENAMED
@@ -58,6 +58,9 @@ async def set_starters():
58
 
59
  ]
60
 
 
 
 
61
  @cl.set_chat_profiles
62
  async def chat_profile():
63
  return [
@@ -73,7 +76,6 @@ async def chat_profile():
73
  ),
74
  ]
75
 
76
-
77
  #################################
78
  # Chat Settings
79
  #################################
@@ -124,7 +126,6 @@ async def on_message(message: cl.Message):
124
  # Get model & chat profile from session
125
  model = cl.user_session.get("model", "gemini-2.0-flash")
126
  answer_mode = cl.user_session.get("chat_profile", "Agent Mode")
127
- print("=======", type(answer_mode))
128
 
129
  # Prepare the content list for the current message
130
  content = []
 
58
 
59
  ]
60
 
61
+ #################################
62
+ # Response modes for Axiom
63
+ #################################
64
  @cl.set_chat_profiles
65
  async def chat_profile():
66
  return [
 
76
  ),
77
  ]
78
 
 
79
  #################################
80
  # Chat Settings
81
  #################################
 
126
  # Get model & chat profile from session
127
  model = cl.user_session.get("model", "gemini-2.0-flash")
128
  answer_mode = cl.user_session.get("chat_profile", "Agent Mode")
 
129
 
130
  # Prepare the content list for the current message
131
  content = []
prompts.py → src/axiom/prompts.py RENAMED
File without changes
uv.lock CHANGED
@@ -50,6 +50,41 @@ wheels = [
50
  { url = "https://files.pythonhosted.org/packages/3e/4b/40a1dc52fc26695b1e80a9e67dfb0fe7e6ddc57bbc5b61348e40c0045abb/asyncer-0.0.7-py3-none-any.whl", hash = "sha256:f0d579d4f67c4ead52ede3a45c854f462cae569058a8a6a68a4ebccac1c335d8", size = 8476 },
51
  ]
52
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
  [[package]]
54
  name = "beautifulsoup4"
55
  version = "4.13.3"
@@ -247,33 +282,6 @@ wheels = [
247
  { url = "https://files.pythonhosted.org/packages/6e/c6/ac0b6c1e2d138f1002bcf799d330bd6d85084fece321e662a14223794041/Deprecated-1.2.18-py2.py3-none-any.whl", hash = "sha256:bd5011788200372a32418f888e326a09ff80d0214bd961147cfed01b5c018eec", size = 9998 },
248
  ]
249
 
250
- [[package]]
251
- name = "docs-agent-mcp"
252
- version = "0.1.0"
253
- source = { virtual = "." }
254
- dependencies = [
255
- { name = "chainlit" },
256
- { name = "langchain-core" },
257
- { name = "langchain-google-genai" },
258
- { name = "langchain-mcp-adapters" },
259
- { name = "langgraph" },
260
- { name = "mcpdoc" },
261
- { name = "python-dotenv" },
262
- { name = "websockets" },
263
- ]
264
-
265
- [package.metadata]
266
- requires-dist = [
267
- { name = "chainlit", specifier = ">=2.4.201" },
268
- { name = "langchain-core", specifier = ">=0.3.47" },
269
- { name = "langchain-google-genai", specifier = ">=2.1.0" },
270
- { name = "langchain-mcp-adapters", specifier = ">=0.0.5" },
271
- { name = "langgraph", specifier = ">=0.3.18" },
272
- { name = "mcpdoc", specifier = ">=0.0.4" },
273
- { name = "python-dotenv", specifier = ">=1.0.1" },
274
- { name = "websockets", specifier = ">=15.0.1" },
275
- ]
276
-
277
  [[package]]
278
  name = "fastapi"
279
  version = "0.115.11"
@@ -745,6 +753,31 @@ wheels = [
745
  { url = "https://files.pythonhosted.org/packages/b6/bc/8bd826dd03e022153bfa1766dcdec4976d6c818865ed54223d71f07862b3/msgpack-1.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:bce7d9e614a04d0883af0b3d4d501171fbfca038f12c77fa838d9f198147a23f", size = 75140 },
746
  ]
747
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
748
  [[package]]
749
  name = "mypy-extensions"
750
  version = "1.0.0"
@@ -1195,6 +1228,31 @@ wheels = [
1195
  { url = "https://files.pythonhosted.org/packages/49/97/fa78e3d2f65c02c8e1268b9aba606569fe97f6c8f7c2d74394553347c145/rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7", size = 34315 },
1196
  ]
1197
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1198
  [[package]]
1199
  name = "shellingham"
1200
  version = "1.5.4"
 
50
  { url = "https://files.pythonhosted.org/packages/3e/4b/40a1dc52fc26695b1e80a9e67dfb0fe7e6ddc57bbc5b61348e40c0045abb/asyncer-0.0.7-py3-none-any.whl", hash = "sha256:f0d579d4f67c4ead52ede3a45c854f462cae569058a8a6a68a4ebccac1c335d8", size = 8476 },
51
  ]
52
 
53
+ [[package]]
54
+ name = "axiom-agent"
55
+ version = "0.1.0"
56
+ source = { editable = "." }
57
+ dependencies = [
58
+ { name = "chainlit" },
59
+ { name = "langchain-core" },
60
+ { name = "langchain-google-genai" },
61
+ { name = "langchain-mcp-adapters" },
62
+ { name = "langgraph" },
63
+ { name = "mcpdoc" },
64
+ { name = "python-dotenv" },
65
+ { name = "websockets" },
66
+ ]
67
+
68
+ [package.optional-dependencies]
69
+ dev = [
70
+ { name = "mypy" },
71
+ { name = "ruff" },
72
+ ]
73
+
74
+ [package.metadata]
75
+ requires-dist = [
76
+ { name = "chainlit", specifier = ">=2.4.201" },
77
+ { name = "langchain-core", specifier = ">=0.3.47" },
78
+ { name = "langchain-google-genai", specifier = ">=2.1.0" },
79
+ { name = "langchain-mcp-adapters", specifier = ">=0.0.5" },
80
+ { name = "langgraph", specifier = ">=0.3.18" },
81
+ { name = "mcpdoc", specifier = ">=0.0.4" },
82
+ { name = "mypy", marker = "extra == 'dev'", specifier = ">=1.11.1" },
83
+ { name = "python-dotenv", specifier = ">=1.0.1" },
84
+ { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.6.1" },
85
+ { name = "websockets", specifier = ">=15.0.1" },
86
+ ]
87
+
88
  [[package]]
89
  name = "beautifulsoup4"
90
  version = "4.13.3"
 
282
  { url = "https://files.pythonhosted.org/packages/6e/c6/ac0b6c1e2d138f1002bcf799d330bd6d85084fece321e662a14223794041/Deprecated-1.2.18-py2.py3-none-any.whl", hash = "sha256:bd5011788200372a32418f888e326a09ff80d0214bd961147cfed01b5c018eec", size = 9998 },
283
  ]
284
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
285
  [[package]]
286
  name = "fastapi"
287
  version = "0.115.11"
 
753
  { url = "https://files.pythonhosted.org/packages/b6/bc/8bd826dd03e022153bfa1766dcdec4976d6c818865ed54223d71f07862b3/msgpack-1.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:bce7d9e614a04d0883af0b3d4d501171fbfca038f12c77fa838d9f198147a23f", size = 75140 },
754
  ]
755
 
756
+ [[package]]
757
+ name = "mypy"
758
+ version = "1.15.0"
759
+ source = { registry = "https://pypi.org/simple" }
760
+ dependencies = [
761
+ { name = "mypy-extensions" },
762
+ { name = "typing-extensions" },
763
+ ]
764
+ sdist = { url = "https://files.pythonhosted.org/packages/ce/43/d5e49a86afa64bd3839ea0d5b9c7103487007d728e1293f52525d6d5486a/mypy-1.15.0.tar.gz", hash = "sha256:404534629d51d3efea5c800ee7c42b72a6554d6c400e6a79eafe15d11341fd43", size = 3239717 }
765
+ wheels = [
766
+ { url = "https://files.pythonhosted.org/packages/98/3a/03c74331c5eb8bd025734e04c9840532226775c47a2c39b56a0c8d4f128d/mypy-1.15.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:aea39e0583d05124836ea645f412e88a5c7d0fd77a6d694b60d9b6b2d9f184fd", size = 10793981 },
767
+ { url = "https://files.pythonhosted.org/packages/f0/1a/41759b18f2cfd568848a37c89030aeb03534411eef981df621d8fad08a1d/mypy-1.15.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2f2147ab812b75e5b5499b01ade1f4a81489a147c01585cda36019102538615f", size = 9749175 },
768
+ { url = "https://files.pythonhosted.org/packages/12/7e/873481abf1ef112c582db832740f4c11b2bfa510e829d6da29b0ab8c3f9c/mypy-1.15.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ce436f4c6d218a070048ed6a44c0bbb10cd2cc5e272b29e7845f6a2f57ee4464", size = 11455675 },
769
+ { url = "https://files.pythonhosted.org/packages/b3/d0/92ae4cde706923a2d3f2d6c39629134063ff64b9dedca9c1388363da072d/mypy-1.15.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8023ff13985661b50a5928fc7a5ca15f3d1affb41e5f0a9952cb68ef090b31ee", size = 12410020 },
770
+ { url = "https://files.pythonhosted.org/packages/46/8b/df49974b337cce35f828ba6fda228152d6db45fed4c86ba56ffe442434fd/mypy-1.15.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1124a18bc11a6a62887e3e137f37f53fbae476dc36c185d549d4f837a2a6a14e", size = 12498582 },
771
+ { url = "https://files.pythonhosted.org/packages/13/50/da5203fcf6c53044a0b699939f31075c45ae8a4cadf538a9069b165c1050/mypy-1.15.0-cp312-cp312-win_amd64.whl", hash = "sha256:171a9ca9a40cd1843abeca0e405bc1940cd9b305eaeea2dda769ba096932bb22", size = 9366614 },
772
+ { url = "https://files.pythonhosted.org/packages/6a/9b/fd2e05d6ffff24d912f150b87db9e364fa8282045c875654ce7e32fffa66/mypy-1.15.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:93faf3fdb04768d44bf28693293f3904bbb555d076b781ad2530214ee53e3445", size = 10788592 },
773
+ { url = "https://files.pythonhosted.org/packages/74/37/b246d711c28a03ead1fd906bbc7106659aed7c089d55fe40dd58db812628/mypy-1.15.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:811aeccadfb730024c5d3e326b2fbe9249bb7413553f15499a4050f7c30e801d", size = 9753611 },
774
+ { url = "https://files.pythonhosted.org/packages/a6/ac/395808a92e10cfdac8003c3de9a2ab6dc7cde6c0d2a4df3df1b815ffd067/mypy-1.15.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:98b7b9b9aedb65fe628c62a6dc57f6d5088ef2dfca37903a7d9ee374d03acca5", size = 11438443 },
775
+ { url = "https://files.pythonhosted.org/packages/d2/8b/801aa06445d2de3895f59e476f38f3f8d610ef5d6908245f07d002676cbf/mypy-1.15.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c43a7682e24b4f576d93072216bf56eeff70d9140241f9edec0c104d0c515036", size = 12402541 },
776
+ { url = "https://files.pythonhosted.org/packages/c7/67/5a4268782eb77344cc613a4cf23540928e41f018a9a1ec4c6882baf20ab8/mypy-1.15.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:baefc32840a9f00babd83251560e0ae1573e2f9d1b067719479bfb0e987c6357", size = 12494348 },
777
+ { url = "https://files.pythonhosted.org/packages/83/3e/57bb447f7bbbfaabf1712d96f9df142624a386d98fb026a761532526057e/mypy-1.15.0-cp313-cp313-win_amd64.whl", hash = "sha256:b9378e2c00146c44793c98b8d5a61039a048e31f429fb0eb546d93f4b000bedf", size = 9373648 },
778
+ { url = "https://files.pythonhosted.org/packages/09/4e/a7d65c7322c510de2c409ff3828b03354a7c43f5a8ed458a7a131b41c7b9/mypy-1.15.0-py3-none-any.whl", hash = "sha256:5469affef548bd1895d86d3bf10ce2b44e33d86923c29e4d675b3e323437ea3e", size = 2221777 },
779
+ ]
780
+
781
  [[package]]
782
  name = "mypy-extensions"
783
  version = "1.0.0"
 
1228
  { url = "https://files.pythonhosted.org/packages/49/97/fa78e3d2f65c02c8e1268b9aba606569fe97f6c8f7c2d74394553347c145/rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7", size = 34315 },
1229
  ]
1230
 
1231
+ [[package]]
1232
+ name = "ruff"
1233
+ version = "0.11.2"
1234
+ source = { registry = "https://pypi.org/simple" }
1235
+ sdist = { url = "https://files.pythonhosted.org/packages/90/61/fb87430f040e4e577e784e325351186976516faef17d6fcd921fe28edfd7/ruff-0.11.2.tar.gz", hash = "sha256:ec47591497d5a1050175bdf4e1a4e6272cddff7da88a2ad595e1e326041d8d94", size = 3857511 }
1236
+ wheels = [
1237
+ { url = "https://files.pythonhosted.org/packages/62/99/102578506f0f5fa29fd7e0df0a273864f79af044757aef73d1cae0afe6ad/ruff-0.11.2-py3-none-linux_armv6l.whl", hash = "sha256:c69e20ea49e973f3afec2c06376eb56045709f0212615c1adb0eda35e8a4e477", size = 10113146 },
1238
+ { url = "https://files.pythonhosted.org/packages/74/ad/5cd4ba58ab602a579997a8494b96f10f316e874d7c435bcc1a92e6da1b12/ruff-0.11.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:2c5424cc1c4eb1d8ecabe6d4f1b70470b4f24a0c0171356290b1953ad8f0e272", size = 10867092 },
1239
+ { url = "https://files.pythonhosted.org/packages/fc/3e/d3f13619e1d152c7b600a38c1a035e833e794c6625c9a6cea6f63dbf3af4/ruff-0.11.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:ecf20854cc73f42171eedb66f006a43d0a21bfb98a2523a809931cda569552d9", size = 10224082 },
1240
+ { url = "https://files.pythonhosted.org/packages/90/06/f77b3d790d24a93f38e3806216f263974909888fd1e826717c3ec956bbcd/ruff-0.11.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0c543bf65d5d27240321604cee0633a70c6c25c9a2f2492efa9f6d4b8e4199bb", size = 10394818 },
1241
+ { url = "https://files.pythonhosted.org/packages/99/7f/78aa431d3ddebfc2418cd95b786642557ba8b3cb578c075239da9ce97ff9/ruff-0.11.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:20967168cc21195db5830b9224be0e964cc9c8ecf3b5a9e3ce19876e8d3a96e3", size = 9952251 },
1242
+ { url = "https://files.pythonhosted.org/packages/30/3e/f11186d1ddfaca438c3bbff73c6a2fdb5b60e6450cc466129c694b0ab7a2/ruff-0.11.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:955a9ce63483999d9f0b8f0b4a3ad669e53484232853054cc8b9d51ab4c5de74", size = 11563566 },
1243
+ { url = "https://files.pythonhosted.org/packages/22/6c/6ca91befbc0a6539ee133d9a9ce60b1a354db12c3c5d11cfdbf77140f851/ruff-0.11.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:86b3a27c38b8fce73bcd262b0de32e9a6801b76d52cdb3ae4c914515f0cef608", size = 12208721 },
1244
+ { url = "https://files.pythonhosted.org/packages/19/b0/24516a3b850d55b17c03fc399b681c6a549d06ce665915721dc5d6458a5c/ruff-0.11.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a3b66a03b248c9fcd9d64d445bafdf1589326bee6fc5c8e92d7562e58883e30f", size = 11662274 },
1245
+ { url = "https://files.pythonhosted.org/packages/d7/65/76be06d28ecb7c6070280cef2bcb20c98fbf99ff60b1c57d2fb9b8771348/ruff-0.11.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0397c2672db015be5aa3d4dac54c69aa012429097ff219392c018e21f5085147", size = 13792284 },
1246
+ { url = "https://files.pythonhosted.org/packages/ce/d2/4ceed7147e05852876f3b5f3fdc23f878ce2b7e0b90dd6e698bda3d20787/ruff-0.11.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:869bcf3f9abf6457fbe39b5a37333aa4eecc52a3b99c98827ccc371a8e5b6f1b", size = 11327861 },
1247
+ { url = "https://files.pythonhosted.org/packages/c4/78/4935ecba13706fd60ebe0e3dc50371f2bdc3d9bc80e68adc32ff93914534/ruff-0.11.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:2a2b50ca35457ba785cd8c93ebbe529467594087b527a08d487cf0ee7b3087e9", size = 10276560 },
1248
+ { url = "https://files.pythonhosted.org/packages/81/7f/1b2435c3f5245d410bb5dc80f13ec796454c21fbda12b77d7588d5cf4e29/ruff-0.11.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:7c69c74bf53ddcfbc22e6eb2f31211df7f65054bfc1f72288fc71e5f82db3eab", size = 9945091 },
1249
+ { url = "https://files.pythonhosted.org/packages/39/c4/692284c07e6bf2b31d82bb8c32f8840f9d0627d92983edaac991a2b66c0a/ruff-0.11.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:6e8fb75e14560f7cf53b15bbc55baf5ecbe373dd5f3aab96ff7aa7777edd7630", size = 10977133 },
1250
+ { url = "https://files.pythonhosted.org/packages/94/cf/8ab81cb7dd7a3b0a3960c2769825038f3adcd75faf46dd6376086df8b128/ruff-0.11.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:842a472d7b4d6f5924e9297aa38149e5dcb1e628773b70e6387ae2c97a63c58f", size = 11378514 },
1251
+ { url = "https://files.pythonhosted.org/packages/d9/3a/a647fa4f316482dacf2fd68e8a386327a33d6eabd8eb2f9a0c3d291ec549/ruff-0.11.2-py3-none-win32.whl", hash = "sha256:aca01ccd0eb5eb7156b324cfaa088586f06a86d9e5314b0eb330cb48415097cc", size = 10319835 },
1252
+ { url = "https://files.pythonhosted.org/packages/86/54/3c12d3af58012a5e2cd7ebdbe9983f4834af3f8cbea0e8a8c74fa1e23b2b/ruff-0.11.2-py3-none-win_amd64.whl", hash = "sha256:3170150172a8f994136c0c66f494edf199a0bbea7a409f649e4bc8f4d7084080", size = 11373713 },
1253
+ { url = "https://files.pythonhosted.org/packages/d6/d4/dd813703af8a1e2ac33bf3feb27e8a5ad514c9f219df80c64d69807e7f71/ruff-0.11.2-py3-none-win_arm64.whl", hash = "sha256:52933095158ff328f4c77af3d74f0379e34fd52f175144cefc1b192e7ccd32b4", size = 10441990 },
1254
+ ]
1255
+
1256
  [[package]]
1257
  name = "shellingham"
1258
  version = "1.5.4"