layers2024 commited on
Commit
5950f01
·
verified ·
1 Parent(s): 18e3522

Upload folder using huggingface_hub

Browse files
Files changed (4) hide show
  1. .gitignore +136 -0
  2. README.md +179 -7
  3. app.py +32 -0
  4. requirements.txt +380 -0
.gitignore ADDED
@@ -0,0 +1,136 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ *.egg-info/
24
+ .installed.cfg
25
+ *.egg
26
+ MANIFEST
27
+
28
+ # PyInstaller files
29
+ *.manifest
30
+ *.spec
31
+
32
+ # Installer logs
33
+ pip-log.txt
34
+ pip-delete-this-directory.txt
35
+
36
+ # Unit test / coverage reports
37
+ htmlcov/
38
+ .tox/
39
+ .nox/
40
+ .coverage
41
+ .coverage.*
42
+ .cache
43
+ nosetests.xml
44
+ coverage.xml
45
+ *.cover
46
+ .hypothesis/
47
+ .pytest_cache/
48
+
49
+ # Translations
50
+ *.mo
51
+ *.pot
52
+
53
+ # Django specific
54
+ *.log
55
+ local_settings.py
56
+ db.sqlite3
57
+ db.sqlite3-journal
58
+
59
+ # Flask specific
60
+ instance/
61
+ .webassets-cache
62
+
63
+ # Scrapy
64
+ .scrapy
65
+
66
+ # Documentation builds
67
+ docs/_build/
68
+
69
+ # PyBuilder
70
+ .pybuilder/
71
+ target/
72
+
73
+ # Jupyter Notebooks
74
+ .ipynb_checkpoints
75
+
76
+ # IPython
77
+ profile_default/
78
+ ipython_config.py
79
+
80
+ # pyenv
81
+ .python-version
82
+
83
+ # Environment directories
84
+ .env
85
+ .envrc
86
+ .venv
87
+ env/
88
+ venv/
89
+ ENV/
90
+ env.bak/
91
+ venv.bak/
92
+
93
+ # PEP 582
94
+ __pypackages__/
95
+
96
+ # Celery
97
+ celerybeat-schedule
98
+ celerybeat.pid
99
+
100
+ # SageMath
101
+ *.sage.py
102
+
103
+ # IDE / Editor directories
104
+ .idea/
105
+ .vscode/
106
+ *.sublime-project
107
+ *.sublime-workspace
108
+
109
+ # Spyder
110
+ .spyderproject
111
+ .spyproject
112
+
113
+ # Rope
114
+ .ropeproject
115
+
116
+ # mkdocs
117
+ /site
118
+
119
+ # mypy
120
+ .mypy_cache/
121
+ .dmypy.json
122
+ dmypy.json
123
+
124
+ # Pyre
125
+ .pyre/
126
+
127
+ # pytype
128
+ .pytype/
129
+
130
+ # Cython debug symbols
131
+ cython_debug/
132
+
133
+ # Logs and misc
134
+ *.log
135
+ *.sqlite
136
+ *.db
README.md CHANGED
@@ -1,12 +1,184 @@
1
  ---
2
- title: Gradio Test
3
- emoji:
4
- colorFrom: gray
5
- colorTo: purple
6
  sdk: gradio
7
  sdk_version: 5.42.0
8
- app_file: app.py
9
- pinned: false
10
  ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
 
12
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
  ---
2
+ title: gradio-test
3
+ app_file: app.py
 
 
4
  sdk: gradio
5
  sdk_version: 5.42.0
 
 
6
  ---
7
+ ## Gradio MCP Integration
8
+
9
+ Gradio allows developers to create UIs for their models with just a few lines of Python code. It's particularly useful for:
10
+
11
+ - Creating demos and prototypes
12
+ - Sharing models with non-technical users
13
+ - Testing and debugging model behavior
14
+
15
+ With the addition of MCP support, Gradio now offers a straigntforward way to expose AI model capabilities through standardized MCP protocol.
16
+
17
+ ### Preqrequisites
18
+
19
+ Install Gradio with the MCP extra:
20
+
21
+ ```bash
22
+ pip install "gradio[mcp]"
23
+ ```
24
+
25
+ You'll also need an LLM application that supports tool calling using the MCP protocol, such as Cursor (known as "MCP Hosts").
26
+
27
+ ### Creating a MCP Server with Gradio
28
+
29
+ 1. Set up the virtual environment:
30
+
31
+ ```bash
32
+ python -m venv .venv
33
+ ```
34
+
35
+ 2. Start the virtual environment:
36
+
37
+ ```bash
38
+ source .venv/bin/activate
39
+ ```
40
+
41
+ 3. Install Gradio with the mcp extra:
42
+
43
+ ```bash
44
+ pip install "gradio[mcp]"
45
+ ```
46
+
47
+ 4. Run the Gradio app with the MCP server:
48
+
49
+ ```bash
50
+ python app.py
51
+ ```
52
+
53
+ The server will return something like this:
54
+
55
+ ```bash
56
+ * Running on local URL: http://127.0.0.1:7860
57
+ * To create a public link, set `share=True` in `launch()`.
58
+
59
+ 🔨 Launching MCP server:
60
+ ** Streamable HTTP URL: http://127.0.0.1:7860/gradio_api/mcp/
61
+ * [Deprecated] SSE URL: http://127.0.0.1:7860/gradio_api/mcp/sse
62
+ ```
63
+
64
+ With this setup, your letter counter function is now accessible through:
65
+
66
+ 1. A traditional Gradio web interface for direct human interaction
67
+ 2. An MCP Server that can be connected to compatible clients
68
+
69
+ The MCP server will be accessibile at:
70
+
71
+ ```bash
72
+ http://your-server:port/gradio_api/mcp/sse
73
+ ```
74
+
75
+ #### How It Works Behind the Scenes
76
+
77
+ When you set 'mcp_server=True' in 'launch()', several things happen:
78
+
79
+ 1. Gradio functions are automatically converted to MCP Tools
80
+ 2. Input components map to toll argument schemas
81
+ 3. Output components determine the response format
82
+ 4. The Gradio server now also listens for MCP protocol messages
83
+ 5. JSON-RPC over HTTP+SSE is set up for client-server communication
84
+
85
+ #### Key Features of the Gradio <> MCP Integration
86
+
87
+ 1. Tool Conversion: Each API endpoint in your Gradio app is automatically converted into an MCP tool with a corresponding name, description, and input schema. To view the tools and schemas, visit 'http://your-server:port/gradio_api/mcp/schema' or go to the "View API" link in the footer of your Gradio app, and then click on "MCP".
88
+
89
+ - You will see a URL like this:
90
+ 'https://abidlabs-mcp-tools.hf.space/gradio_api/mcp/sse'
91
+
92
+ - To add this MCP to clients that support SSE (e.g. Cursor, Windsurf, Cline), simply add the following configuration to your MCP config:
93
+
94
+ ```json
95
+ {
96
+ "mcpServers": {
97
+ "gradio": {
98
+ "url": "https://abidlabs-mcp-tools.hf.space/gradio_api/mcp/sse"
99
+ }
100
+ }
101
+ }
102
+ ```
103
+
104
+ - You can also run the server locally:
105
+
106
+ ```bash
107
+ python app.py
108
+ ```
109
+
110
+ And set up:
111
+
112
+ ```json
113
+ {
114
+ "mcpServers": {
115
+ "Gradio MCP Server": {
116
+ "type": "http",
117
+ "url": "http://127.0.0.1:7860/gradio_api/mcp/"
118
+ }
119
+ }
120
+ }
121
+ ```
122
+
123
+ - The url with 'sse' also works:
124
+ 'http://127.0.0.1:7860/gradio_api/mcp/sse'
125
+
126
+ - Experimental stdio support: For clients that only support stdio, first install Node.js. Then, you can use the following command:
127
+
128
+ ```json
129
+ {
130
+ "mcpServers": {
131
+ "gradio": {
132
+ "command": "npx",
133
+ "args": ["mcp-remote", "https://abidlabs-mcp-tools.hf.space/gradio_api/mcp/sse"]
134
+ }
135
+ }
136
+ }
137
+ ```
138
+
139
+ NOTE: This configuration did not work on Cursor. The MCP server does not load its tools.
140
+
141
+ 2. Environment Variable Support: There are two ways to enable the MCP server functionality:
142
+
143
+ - Using the 'mcp_server" parameter in launch():
144
+
145
+ ```python
146
+ demo.launch(mcp_server=True)
147
+ ```
148
+
149
+ - Using environment variables:
150
+
151
+ ```python
152
+ export GRADIO_MCP_SERVER=True
153
+ ```
154
+
155
+ 3. File Handling: The server automatically handles file data conversions, including:
156
+
157
+ - Converting base64-encoded strings to file data
158
+ - Processing image files and returning them in the correct format
159
+ - Managing temporary file storage
160
+
161
+ It is strongly recommended that input images and files be passed as full URLs ("http://..." or "https://...") as MCP Clients do not always handle local files correctly.
162
+
163
+ 4. Hosted MCP Servers on Hugging Face Spaces: You can publish your Gradio application for free on Hugging Face Spaces, which allow you to have a free hosted MCP server. Here's an example of such a Space: [https://huggingface.co/spaces/abidlabs/mcp-tools](https://huggingface.co/spaces/abidlabs/mcp-tools)
164
+
165
+ #### Troubleshooting timestamp
166
+
167
+ 1. Type Hints and Docstrings: Ensure you provide type hints and valid docstrings for your functions. The docstring should include "Args:" block with indented parameters names.
168
+
169
+ 2. String Input: When in doubt, accept input arguments as str and covert them to the desired type inside the function.
170
+
171
+ 3. SSE Support: Some MCP Hosts don't support SSE-based MCP Servers. In those cases, you can use mcp-remote:
172
+
173
+ ```json
174
+ {
175
+ "mcpServers": {
176
+ "gradio": {
177
+ "command": "npx",
178
+ "args": ["mcp-remote", "http://your-server:port/gradio_api/mcp/sse"]
179
+ }
180
+ }
181
+ }
182
+ ```
183
 
184
+ 4. Restart: If you encounter connection issues, try restarting both your MCP Client and MCP Server.
app.py ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+
3
+
4
+ def letter_counter(word: str, letter: str) -> int:
5
+ """
6
+ Count the number of occurrences of a letter in a word or text.
7
+
8
+ Args:
9
+ word (str): The input text to search through
10
+ letter (str): The letter to search for
11
+
12
+ Returns:
13
+ int: The number of times the letter appears in the text
14
+ """
15
+ word = word.lower()
16
+ letter = letter.lower()
17
+ count = word.count(letter)
18
+ return count
19
+
20
+
21
+ # Create a standard Gradio interface
22
+ demo = gr.Interface(
23
+ fn=letter_counter,
24
+ inputs=["textbox", "textbox"],
25
+ outputs="number",
26
+ title="Letter Counter",
27
+ description="Enter text and a letter to count how many times the letter appears in the text."
28
+ )
29
+
30
+ # Launch both the Gradio web interface and the MCP server
31
+ if __name__ == "__main__":
32
+ demo.launch(mcp_server=True)
requirements.txt ADDED
@@ -0,0 +1,380 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ aiofiles==24.1.0
2
+ aiohappyeyeballs==2.4.4
3
+ aiohttp==3.11.11
4
+ aiosignal==1.3.2
5
+ alembic==1.14.0
6
+ annotated-types==0.7.0
7
+ anyio==4.10.0
8
+ appdirs==1.4.4
9
+ apturl==0.5.2
10
+ argcomplete==1.8.1
11
+ argon2-cffi==23.1.0
12
+ argon2-cffi-bindings==21.2.0
13
+ arrow==1.3.0
14
+ asgiref==3.8.1
15
+ asttokens==2.4.1
16
+ async-lru==2.0.4
17
+ async-timeout==4.0.3
18
+ attrs==25.3.0
19
+ auth0-python==4.7.2
20
+ Babel==2.14.0
21
+ backoff==2.2.1
22
+ bcrypt==4.2.1
23
+ beautifulsoup4==4.12.3
24
+ bleach==6.1.0
25
+ blinker==1.4
26
+ Brlapi==0.8.3
27
+ Brotli==1.1.0
28
+ build==1.2.2.post1
29
+ cachetools==5.5.0
30
+ certifi==2025.8.3
31
+ cffi==1.16.0
32
+ chardet==4.0.0
33
+ charset-normalizer==3.3.2
34
+ chroma-hnswlib==0.7.6
35
+ chromadb==0.5.23
36
+ click==8.2.1
37
+ cohere==5.13.4
38
+ colorama==0.4.4
39
+ coloredlogs==15.0.1
40
+ comm==0.2.1
41
+ command-not-found==0.3
42
+ contourpy==1.2.0
43
+ coverage==7.6.0
44
+ crewai==0.86.0
45
+ crewai-tools==0.17.0
46
+ cryptography==43.0.3
47
+ cupshelpers==1.0
48
+ cycler==0.12.1
49
+ dataclasses-json==0.6.7
50
+ dbus-python==1.2.18
51
+ debugpy==1.8.1
52
+ decorator==5.1.1
53
+ defer==1.0.6
54
+ defusedxml==0.7.1
55
+ dell-recovery==0.0.0
56
+ Deprecated==1.2.15
57
+ deprecation==2.1.0
58
+ distlib==0.3.8
59
+ distro==1.7.0
60
+ distro-info==1.1+ubuntu0.2
61
+ docker==7.1.0
62
+ docker-compose==1.29.2
63
+ dockerpty==0.4.1
64
+ docopt==0.6.2
65
+ docstring_parser==0.16
66
+ docx2txt==0.8
67
+ duplicity==0.8.21
68
+ durationpy==0.9
69
+ embedchain==0.1.125
70
+ et_xmlfile==2.0.0
71
+ exceptiongroup==1.2.0
72
+ executing==2.0.1
73
+ fastapi==0.116.1
74
+ fastavro==1.10.0
75
+ fasteners==0.14.1
76
+ fastjsonschema==2.19.1
77
+ ffmpy==0.6.1
78
+ filelock==3.15.4
79
+ filetype==1.2.0
80
+ flatbuffers==24.3.25
81
+ fonttools==4.49.0
82
+ fqdn==1.5.1
83
+ frozenlist==1.5.0
84
+ fsspec==2024.12.0
85
+ future==0.18.2
86
+ google-ai-generativelanguage==0.6.10
87
+ google-api-core==2.24.0
88
+ google-api-python-client==2.156.0
89
+ google-auth==2.37.0
90
+ google-auth-httplib2==0.2.0
91
+ google-cloud-aiplatform==1.75.0
92
+ google-cloud-bigquery==3.27.0
93
+ google-cloud-core==2.4.1
94
+ google-cloud-resource-manager==1.14.0
95
+ google-cloud-storage==2.19.0
96
+ google-crc32c==1.6.0
97
+ google-generativeai==0.8.3
98
+ google-resumable-media==2.7.2
99
+ googleapis-common-protos==1.66.0
100
+ gptcache==0.1.44
101
+ gradio==5.42.0
102
+ gradio_client==1.11.1
103
+ greenlet==3.1.1
104
+ groovy==0.1.2
105
+ grpc-google-iam-v1==0.13.1
106
+ grpcio==1.68.1
107
+ grpcio-status==1.68.1
108
+ grpcio-tools==1.68.1
109
+ gyp==0.1
110
+ h11==0.16.0
111
+ h2==4.1.0
112
+ hf-xet==1.1.7
113
+ hpack==4.0.0
114
+ httpcore==1.0.9
115
+ httplib2==0.20.2
116
+ httptools==0.6.1
117
+ httpx==0.28.1
118
+ httpx-sse==0.4.1
119
+ huggingface-hub==0.34.4
120
+ humanfriendly==10.0
121
+ hyperframe==6.0.1
122
+ idna==3.10
123
+ imaplib2==3.5
124
+ importlib_metadata==8.5.0
125
+ importlib_resources==6.4.5
126
+ iniconfig==2.0.0
127
+ instructor==1.7.0
128
+ ipykernel==6.29.3
129
+ ipython==8.22.1
130
+ ipywidgets==8.1.2
131
+ isoduration==20.11.0
132
+ jedi==0.19.1
133
+ jeepney==0.7.1
134
+ Jinja2==3.1.5
135
+ jiter==0.6.1
136
+ json5==0.9.18
137
+ json_repair==0.32.0
138
+ jsonpatch==1.33
139
+ jsonpickle==4.0.1
140
+ jsonpointer==2.4
141
+ jsonref==1.1.0
142
+ jsonschema==4.25.0
143
+ jsonschema-specifications==2025.4.1
144
+ jupyter==1.0.0
145
+ jupyter-console==6.6.3
146
+ jupyter-events==0.9.0
147
+ jupyter-lsp==2.2.3
148
+ jupyter_client==8.6.0
149
+ jupyter_core==5.7.1
150
+ jupyter_server==2.12.5
151
+ jupyter_server_terminals==0.5.2
152
+ jupyterlab==4.1.2
153
+ jupyterlab_pygments==0.3.0
154
+ jupyterlab_server==2.25.3
155
+ jupyterlab_widgets==3.0.10
156
+ kaggle==1.6.17
157
+ keyring==23.5.0
158
+ kiwisolver==1.4.5
159
+ kubernetes==31.0.0
160
+ lancedb==0.17.0
161
+ langchain==0.3.13
162
+ langchain-cohere==0.3.4
163
+ langchain-community==0.3.13
164
+ langchain-core==0.3.28
165
+ langchain-experimental==0.3.4
166
+ langchain-google-genai==2.0.7
167
+ langchain-openai==0.2.14
168
+ langchain-text-splitters==0.3.4
169
+ langgraph-cli==0.2.5
170
+ langsmith==0.1.147
171
+ language-selector==0.1
172
+ launchpadlib==1.10.16
173
+ lazr.restfulclient==0.14.4
174
+ lazr.uri==1.0.6
175
+ litellm==1.55.9
176
+ livereload==2.6.3
177
+ lockfile==0.12.2
178
+ louis==3.20.0
179
+ macaroonbakery==1.3.1
180
+ Mako==1.1.3
181
+ Markdown==3.3.6
182
+ markdown-it-py==4.0.0
183
+ MarkupSafe==2.0.1
184
+ marshmallow==3.23.2
185
+ matplotlib==3.8.3
186
+ matplotlib-inline==0.1.6
187
+ mcp==1.10.1
188
+ mdurl==0.1.2
189
+ mem0ai==0.1.36
190
+ mistune==3.0.2
191
+ mkdocs==1.1.2
192
+ mmh3==5.0.1
193
+ monotonic==1.6
194
+ more-itertools==8.10.0
195
+ mpmath==1.3.0
196
+ multidict==6.1.0
197
+ mypy-extensions==1.0.0
198
+ nbclient==0.9.0
199
+ nbconvert==7.16.1
200
+ nbformat==5.9.2
201
+ nest-asyncio==1.6.0
202
+ netifaces==0.11.0
203
+ networkx==3.4.2
204
+ nodeenv==1.9.1
205
+ notebook==7.1.1
206
+ notebook_shim==0.2.4
207
+ numpy==1.26.4
208
+ oauthlib==3.2.2
209
+ olefile==0.46
210
+ ollama==0.4.4
211
+ onnxruntime==1.20.1
212
+ openai==1.58.1
213
+ openpyxl==3.1.5
214
+ opentelemetry-api==1.29.0
215
+ opentelemetry-exporter-otlp-proto-common==1.29.0
216
+ opentelemetry-exporter-otlp-proto-grpc==1.29.0
217
+ opentelemetry-exporter-otlp-proto-http==1.29.0
218
+ opentelemetry-instrumentation==0.50b0
219
+ opentelemetry-instrumentation-asgi==0.50b0
220
+ opentelemetry-instrumentation-fastapi==0.50b0
221
+ opentelemetry-proto==1.29.0
222
+ opentelemetry-sdk==1.29.0
223
+ opentelemetry-semantic-conventions==0.50b0
224
+ opentelemetry-util-http==0.50b0
225
+ orjson==3.10.12
226
+ outcome==1.3.0.post0
227
+ overrides==7.7.0
228
+ packaging==23.2
229
+ pandas==2.2.1
230
+ pandocfilters==1.5.1
231
+ parameterized==0.9.0
232
+ paramiko==2.9.3
233
+ parso==0.8.3
234
+ pdfminer.six==20231228
235
+ pdfplumber==0.11.4
236
+ pexpect==4.8.0
237
+ pillow==11.0.0
238
+ pipx==1.0.0
239
+ platformdirs==4.2.0
240
+ pluggy==1.5.0
241
+ portalocker==2.10.1
242
+ posthog==3.7.4
243
+ prometheus_client==0.20.0
244
+ prompt-toolkit==3.0.43
245
+ propcache==0.2.1
246
+ proto-plus==1.25.0
247
+ protobuf==5.29.2
248
+ psutil==5.9.8
249
+ ptyprocess==0.7.0
250
+ pure-eval==0.2.2
251
+ pyarrow==18.1.0
252
+ pyasn1==0.6.1
253
+ pyasn1_modules==0.4.1
254
+ pycairo==1.20.1
255
+ pycparser==2.21
256
+ pycups==2.0.1
257
+ pydantic==2.11.7
258
+ pydantic-settings==2.10.1
259
+ pydantic_core==2.33.2
260
+ pydub==0.25.1
261
+ Pygments==2.19.2
262
+ PyGObject==3.42.1
263
+ pyinotify==0.9.6
264
+ PyJWT==2.10.1
265
+ pylance==0.20.0
266
+ pymacaroons==0.13.0
267
+ PyNaCl==1.5.0
268
+ pyparsing==2.4.7
269
+ pypdf==5.1.0
270
+ pypdfium2==4.30.1
271
+ PyPika==0.48.9
272
+ pyproject_hooks==1.2.0
273
+ PyQt5==5.15.6
274
+ PyQt5-sip==12.9.1
275
+ PyQtWebEngine==5.15.5
276
+ pyRFC3339==1.1
277
+ pyright==1.1.391
278
+ pyrsistent==0.18.1
279
+ pysbd==0.3.4
280
+ PySocks==1.7.1
281
+ pytest==8.2.2
282
+ pytest-cov==5.0.0
283
+ python-apt==2.4.0+ubuntu4
284
+ python-dateutil==2.9.0.post0
285
+ python-debian==0.1.43+ubuntu1.1
286
+ python-dotenv==1.1.1
287
+ python-json-logger==2.0.7
288
+ python-multipart==0.0.20
289
+ python-slugify==8.0.4
290
+ pytube==15.0.0
291
+ pytz==2024.2
292
+ pyvis==0.3.2
293
+ pyxdg==0.27
294
+ PyYAML==6.0.2
295
+ pyzmq==25.1.2
296
+ qdrant-client==1.12.1
297
+ qtconsole==5.5.1
298
+ QtPy==2.4.1
299
+ referencing==0.36.2
300
+ regex==2024.11.6
301
+ reportlab==3.6.8
302
+ requests==2.32.3
303
+ requests-oauthlib==2.0.0
304
+ requests-toolbelt==1.0.0
305
+ rfc3339-validator==0.1.4
306
+ rfc3986-validator==0.1.1
307
+ rich==14.1.0
308
+ rpds-py==0.27.0
309
+ rsa==4.9
310
+ ruff==0.12.9
311
+ safehttpx==0.1.6
312
+ schema==0.7.7
313
+ screen-resolution-extra==0.0.0
314
+ SecretStorage==3.3.1
315
+ selenium==4.27.1
316
+ semantic-version==2.10.0
317
+ Send2Trash==1.8.2
318
+ shapely==2.0.6
319
+ shellingham==1.5.4
320
+ six==1.16.0
321
+ sniffio==1.3.1
322
+ sortedcontainers==2.4.0
323
+ soupsieve==2.5
324
+ SQLAlchemy==2.0.36
325
+ sse-starlette==3.0.2
326
+ stack-data==0.6.3
327
+ starlette==0.47.2
328
+ sympy==1.13.3
329
+ systemd-python==234
330
+ tabulate==0.9.0
331
+ tenacity==9.0.0
332
+ terminado==0.18.0
333
+ text-unidecode==1.3
334
+ texttable==1.6.4
335
+ tiktoken==0.7.0
336
+ tinycss2==1.2.1
337
+ tokenizers==0.20.3
338
+ tomli==2.2.1
339
+ tomli_w==1.1.0
340
+ tomlkit==0.13.3
341
+ tornado==6.4
342
+ tqdm==4.67.1
343
+ traitlets==5.14.1
344
+ trio==0.27.0
345
+ trio-websocket==0.11.1
346
+ typer==0.16.0
347
+ types-python-dateutil==2.8.19.20240106
348
+ types-requests==2.32.0.20241016
349
+ typing-inspect==0.9.0
350
+ typing-inspection==0.4.1
351
+ typing_extensions==4.14.1
352
+ tzdata==2024.1
353
+ ubuntu-drivers-common==0.0.0
354
+ ubuntu-pro-client==8001
355
+ ufw==0.36.1
356
+ unattended-upgrades==0.1
357
+ uri-template==1.3.0
358
+ uritemplate==4.1.1
359
+ urllib3==2.2.3
360
+ usb-creator==0.3.7
361
+ userpath==1.8.0
362
+ uv==0.5.11
363
+ uvicorn==0.35.0
364
+ uvloop==0.19.0
365
+ virtualenv==20.26.3
366
+ wadllib==1.3.6
367
+ watchfiles==0.21.0
368
+ wcwidth==0.2.13
369
+ webcolors==1.13
370
+ webencodings==0.5.1
371
+ websocket-client==1.8.0
372
+ websockets==12.0
373
+ widgetsnbextension==4.0.10
374
+ wrapt==1.17.0
375
+ wsproto==1.2.0
376
+ xdg==5
377
+ xkit==0.0.0
378
+ yamale==6.0.0
379
+ yarl==1.18.3
380
+ zipp==3.21.0