burtenshaw
commited on
Commit
·
fb723d2
1
Parent(s):
20a0363
switch to fast mcp implementation
Browse files- .python-version +1 -0
- README.md +508 -12
- mcp_server.py +309 -0
- pyproject.toml +11 -0
- requirements.txt +3 -0
- uv.lock +620 -0
.python-version
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
3.11
|
README.md
CHANGED
@@ -1,12 +1,508 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# ⚡ Inference Providers FastMCP Server
|
2 |
+
|
3 |
+
A **FastMCP Server** for Hugging Face Inference Providers, built with [FastMCP](https://github.com/jlowin/fastmcp) - the fast, Pythonic way to build MCP servers. This allows LLMs and AI assistants to access multiple AI providers and language models through the Model Context Protocol.
|
4 |
+
|
5 |
+
## ✨ Features
|
6 |
+
|
7 |
+
- **⚡ FastMCP**: Built with FastMCP for optimal performance and simplicity
|
8 |
+
- **🚀 UV-Powered**: Uses UV/UVX for fast, modern Python dependency management
|
9 |
+
- **🤖 MCP Server**: Native MCP server with tools, resources, and prompts
|
10 |
+
- **🎯 Multi-Provider Support**: Access 14+ inference providers including Cerebras, Cohere, Fal AI, Fireworks, Groq, and more
|
11 |
+
- **💬 Chat Completion**: Interactive conversations with LLMs and Vision Language Models
|
12 |
+
- **📊 Resources**: Access provider information and popular model recommendations
|
13 |
+
- **🔍 Context Logging**: Rich logging and error handling through MCP context
|
14 |
+
- **🔧 Easy Integration**: Simple configuration for Cursor, Claude Desktop, and other MCP clients
|
15 |
+
|
16 |
+
## 🚀 Supported Providers
|
17 |
+
|
18 |
+
| Provider | Chat Completion | Vision Language Models |
|
19 |
+
|----------|----------------|------------------------|
|
20 |
+
| Cerebras | ✅ | ❌ |
|
21 |
+
| Cohere | ✅ | ✅ |
|
22 |
+
| Fal AI | ✅ | ✅ |
|
23 |
+
| Featherless AI | ✅ | ✅ |
|
24 |
+
| Fireworks | ✅ | ✅ |
|
25 |
+
| Groq | ✅ | ❌ |
|
26 |
+
| HF Inference | ✅ | ✅ |
|
27 |
+
| Hyperbolic | ✅ | ✅ |
|
28 |
+
| Nebius | ✅ | ✅ |
|
29 |
+
| Novita | ✅ | ✅ |
|
30 |
+
| Nscale | ✅ | ✅ |
|
31 |
+
| Replicate | ✅ | ✅ |
|
32 |
+
| SambaNova | ✅ | ✅ |
|
33 |
+
| Together | ✅ | ✅ |
|
34 |
+
|
35 |
+
## 🛠️ Quick Start
|
36 |
+
|
37 |
+
### 1. Get a Hugging Face Token
|
38 |
+
|
39 |
+
1. Go to [https://huggingface.co/settings/tokens](https://huggingface.co/settings/tokens)
|
40 |
+
2. Create a new token with **Inference Providers** scope
|
41 |
+
3. Copy the token (starts with `hf_`)
|
42 |
+
|
43 |
+
### 2. Install Dependencies
|
44 |
+
|
45 |
+
```bash
|
46 |
+
# Clone the repository
|
47 |
+
git clone <repository-url>
|
48 |
+
cd inference-providers-mcp
|
49 |
+
|
50 |
+
# Install dependencies
|
51 |
+
pip install -r requirements.txt
|
52 |
+
```
|
53 |
+
|
54 |
+
### 3. Set Environment Variables
|
55 |
+
|
56 |
+
Create a `.env` file in your project directory:
|
57 |
+
|
58 |
+
```bash
|
59 |
+
# .env file
|
60 |
+
HF_TOKEN=hf_your_actual_token_here
|
61 |
+
```
|
62 |
+
|
63 |
+
Or set it globally:
|
64 |
+
|
65 |
+
```bash
|
66 |
+
# Linux/macOS
|
67 |
+
export HF_TOKEN=hf_your_actual_token_here
|
68 |
+
|
69 |
+
# Windows
|
70 |
+
set HF_TOKEN=hf_your_actual_token_here
|
71 |
+
```
|
72 |
+
|
73 |
+
### 4. Test the Server
|
74 |
+
|
75 |
+
```bash
|
76 |
+
# Test the server works (using UV - recommended)
|
77 |
+
uvx test_mcp.py
|
78 |
+
|
79 |
+
# Or test with Python
|
80 |
+
python test_mcp.py
|
81 |
+
|
82 |
+
# Run the server manually (optional)
|
83 |
+
uvx mcp_server.py
|
84 |
+
# Or: python mcp_server.py
|
85 |
+
```
|
86 |
+
|
87 |
+
## 🎯 Cursor IDE Integration
|
88 |
+
|
89 |
+
There are several ways to integrate this FastMCP server with Cursor IDE. Choose the method that works best for your setup.
|
90 |
+
|
91 |
+
> **✅ Your Current Configuration is Already Optimal!**
|
92 |
+
>
|
93 |
+
> Looking at your `.cursor/mcp.json`, you're already using `uvx` which is the recommended approach. Your configuration with `uvx` + `mcp_server.py` is perfect for modern FastMCP development!
|
94 |
+
|
95 |
+
### Method 1: Cursor Settings UI (Recommended)
|
96 |
+
|
97 |
+
This is the easiest method for beginners:
|
98 |
+
|
99 |
+
1. **Open Cursor Settings**:
|
100 |
+
- Go to `Settings → Cursor Settings → Features → Model Context Protocol`
|
101 |
+
- OR use `Cmd/Ctrl + ,` and search for "MCP"
|
102 |
+
|
103 |
+
2. **Add New MCP Server**:
|
104 |
+
- Click **"Add New MCP Server"**
|
105 |
+
- Fill in the configuration:
|
106 |
+
|
107 |
+
```
|
108 |
+
Name: inference-providers
|
109 |
+
Command: uvx
|
110 |
+
Arguments: mcp_server.py
|
111 |
+
Environment Variables:
|
112 |
+
HF_TOKEN: hf_your_actual_token_here
|
113 |
+
```
|
114 |
+
|
115 |
+
**Why UV/UVX?** ✨
|
116 |
+
- **Faster**: UV is significantly faster than pip for dependency management
|
117 |
+
- **Auto-manages dependencies**: Automatically handles virtual environments and packages
|
118 |
+
- **Modern**: The recommended approach for Python tooling in 2025
|
119 |
+
- **No setup required**: Works without manual virtual environment creation
|
120 |
+
|
121 |
+
3. **Save and Test**:
|
122 |
+
- Click **"Add"** to save
|
123 |
+
- Restart Cursor
|
124 |
+
- Open a new chat and try: *"Use the chat completion tool to ask Groq about Python"*
|
125 |
+
|
126 |
+
### Method 2: Project-Specific Configuration (Recommended)
|
127 |
+
|
128 |
+
Create a `.cursor/mcp.json` file in your project root:
|
129 |
+
|
130 |
+
```json
|
131 |
+
{
|
132 |
+
"mcpServers": {
|
133 |
+
"inference-providers": {
|
134 |
+
"command": "uvx",
|
135 |
+
"args": ["mcp_server.py"],
|
136 |
+
"env": {
|
137 |
+
"HF_TOKEN": "hf_your_actual_token_here"
|
138 |
+
}
|
139 |
+
}
|
140 |
+
}
|
141 |
+
}
|
142 |
+
```
|
143 |
+
|
144 |
+
**Advantages**:
|
145 |
+
- ✅ Project-specific (only available in this project)
|
146 |
+
- ✅ Can be version controlled (but **don't commit tokens!**)
|
147 |
+
- ✅ Automatic activation when opening the project
|
148 |
+
- ✅ UV automatically handles dependencies from `pyproject.toml`
|
149 |
+
|
150 |
+
### Method 3: Global Configuration
|
151 |
+
|
152 |
+
Create a global configuration file:
|
153 |
+
|
154 |
+
**Linux/macOS**: `~/.cursor/mcp.json`
|
155 |
+
**Windows**: `%USERPROFILE%\.cursor\mcp.json`
|
156 |
+
|
157 |
+
```json
|
158 |
+
{
|
159 |
+
"mcpServers": {
|
160 |
+
"inference-providers": {
|
161 |
+
"command": "uvx",
|
162 |
+
"args": ["/full/path/to/your/project/mcp_server.py"],
|
163 |
+
"env": {
|
164 |
+
"HF_TOKEN": "hf_your_actual_token_here"
|
165 |
+
}
|
166 |
+
}
|
167 |
+
}
|
168 |
+
}
|
169 |
+
```
|
170 |
+
|
171 |
+
**Advantages**:
|
172 |
+
- ✅ Available across all Cursor projects
|
173 |
+
- ✅ Set once, use everywhere
|
174 |
+
|
175 |
+
### Method 4: Environment Variables (Most Secure)
|
176 |
+
|
177 |
+
If you have `HF_TOKEN` set as a system environment variable, you can use:
|
178 |
+
|
179 |
+
```json
|
180 |
+
{
|
181 |
+
"mcpServers": {
|
182 |
+
"inference-providers": {
|
183 |
+
"command": "uvx",
|
184 |
+
"args": ["mcp_server.py"]
|
185 |
+
}
|
186 |
+
}
|
187 |
+
}
|
188 |
+
```
|
189 |
+
|
190 |
+
The server will automatically pick up `HF_TOKEN` from your environment.
|
191 |
+
|
192 |
+
## 🔄 UV vs Python: When to Use Which?
|
193 |
+
|
194 |
+
| Approach | Best For | Pros | Cons |
|
195 |
+
|----------|----------|------|------|
|
196 |
+
| **`uvx` (Recommended)** | Most users, development | ⚡ Fast, auto-manages deps, modern | Requires UV installation |
|
197 |
+
| **`python`** | System restrictions, debugging | 🔧 Universal, explicit control | Manual venv management |
|
198 |
+
| **`uv run`** | Local development | 🎯 Project-aware, consistent | Must be in project directory |
|
199 |
+
|
200 |
+
### UV Installation
|
201 |
+
|
202 |
+
If you don't have UV installed:
|
203 |
+
|
204 |
+
```bash
|
205 |
+
# macOS/Linux
|
206 |
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
207 |
+
|
208 |
+
# Windows
|
209 |
+
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
|
210 |
+
|
211 |
+
# Alternative: pip install
|
212 |
+
pip install uv
|
213 |
+
```
|
214 |
+
|
215 |
+
## 🎮 Using the Server in Cursor
|
216 |
+
|
217 |
+
Once configured, you can use the server in several ways:
|
218 |
+
|
219 |
+
### 1. Let Cursor Auto-Select Tools
|
220 |
+
|
221 |
+
Simply describe what you want:
|
222 |
+
|
223 |
+
```
|
224 |
+
"Help me compare language models for code generation"
|
225 |
+
"Get recommendations for the best chat models"
|
226 |
+
"I need to chat with a model about Python best practices"
|
227 |
+
```
|
228 |
+
|
229 |
+
Cursor will automatically detect and use the appropriate tools.
|
230 |
+
|
231 |
+
### 2. Explicitly Request Tools
|
232 |
+
|
233 |
+
Be more specific about which tool to use:
|
234 |
+
|
235 |
+
```
|
236 |
+
"Use the chat_completion tool with DeepSeek V3 via Novita to explain machine learning"
|
237 |
+
"Call the inference providers chat tool to ask Groq about async programming"
|
238 |
+
```
|
239 |
+
|
240 |
+
### 3. Access Resources
|
241 |
+
|
242 |
+
Get information about providers and models:
|
243 |
+
|
244 |
+
```
|
245 |
+
"Show me the available inference providers"
|
246 |
+
"What are the popular models I can use?"
|
247 |
+
"Get the provider capabilities information"
|
248 |
+
```
|
249 |
+
|
250 |
+
### 4. Generate Prompts
|
251 |
+
|
252 |
+
Use the prompt generation feature:
|
253 |
+
|
254 |
+
```
|
255 |
+
"Generate a prompt to compare chat providers"
|
256 |
+
"Create a comparison prompt for vision language models"
|
257 |
+
```
|
258 |
+
|
259 |
+
## 🎪 Example Conversations
|
260 |
+
|
261 |
+
### Basic Chat Example
|
262 |
+
|
263 |
+
```
|
264 |
+
You: "Use the chat completion tool with Groq and Llama 3.1 70B to explain async/await in Python"
|
265 |
+
|
266 |
+
Cursor: [Calls chat_completion tool]
|
267 |
+
- Provider: groq
|
268 |
+
- Model: meta-llama/Llama-3.1-70B-Instruct
|
269 |
+
- Message: "Explain async/await in Python with examples"
|
270 |
+
|
271 |
+
Response: [Detailed explanation of async/await...]
|
272 |
+
```
|
273 |
+
|
274 |
+
### Provider Comparison Example
|
275 |
+
|
276 |
+
```
|
277 |
+
You: "Help me choose between Groq and Together AI for coding tasks"
|
278 |
+
|
279 |
+
Cursor: [Uses provider comparison prompt and chat completion]
|
280 |
+
Response: [Detailed comparison of providers with recommendations...]
|
281 |
+
```
|
282 |
+
|
283 |
+
### Model Recommendations
|
284 |
+
|
285 |
+
```
|
286 |
+
You: "What are good models for vision tasks?"
|
287 |
+
|
288 |
+
Cursor: [Accesses models/popular resource]
|
289 |
+
Response: Here are the recommended vision models:
|
290 |
+
- meta-llama/Llama-3.2-11B-Vision-Instruct (Together)
|
291 |
+
- microsoft/Phi-3.5-vision-instruct (HF Inference)
|
292 |
+
- command-r-plus-vision (Cohere)
|
293 |
+
```
|
294 |
+
|
295 |
+
## 🔧 Advanced Configuration
|
296 |
+
|
297 |
+
### Running as Remote Server
|
298 |
+
|
299 |
+
For team usage or remote development:
|
300 |
+
|
301 |
+
```bash
|
302 |
+
# Option 1: Using UV (Recommended)
|
303 |
+
uvx mcp_server.py --transport=sse --host=0.0.0.0 --port=8000
|
304 |
+
|
305 |
+
# Option 2: Using Python directly
|
306 |
+
python -c "
|
307 |
+
from mcp_server import mcp
|
308 |
+
mcp.run(transport='sse', host='0.0.0.0', port=8000)
|
309 |
+
"
|
310 |
+
```
|
311 |
+
|
312 |
+
Then configure Cursor to connect remotely:
|
313 |
+
|
314 |
+
```json
|
315 |
+
{
|
316 |
+
"mcpServers": {
|
317 |
+
"inference-providers": {
|
318 |
+
"command": "npx",
|
319 |
+
"args": [
|
320 |
+
"-y",
|
321 |
+
"@modelcontextprotocol/client-remote",
|
322 |
+
"http://your-server:8000/sse"
|
323 |
+
],
|
324 |
+
"env": {
|
325 |
+
"HF_TOKEN": "hf_your_token_here"
|
326 |
+
}
|
327 |
+
}
|
328 |
+
}
|
329 |
+
}
|
330 |
+
```
|
331 |
+
|
332 |
+
### Alternative UV Commands
|
333 |
+
|
334 |
+
Different ways to run with UV:
|
335 |
+
|
336 |
+
```json
|
337 |
+
{
|
338 |
+
"mcpServers": {
|
339 |
+
"inference-providers-uvx": {
|
340 |
+
"command": "uvx",
|
341 |
+
"args": ["mcp_server.py"],
|
342 |
+
"env": {"HF_TOKEN": "hf_your_token_here"}
|
343 |
+
},
|
344 |
+
"inference-providers-uv-run": {
|
345 |
+
"command": "uv",
|
346 |
+
"args": ["run", "mcp_server.py"],
|
347 |
+
"env": {"HF_TOKEN": "hf_your_token_here"}
|
348 |
+
},
|
349 |
+
"inference-providers-uv-tool": {
|
350 |
+
"command": "uv",
|
351 |
+
"args": ["tool", "run", "mcp_server.py"],
|
352 |
+
"env": {"HF_TOKEN": "hf_your_token_here"}
|
353 |
+
}
|
354 |
+
}
|
355 |
+
}
|
356 |
+
```
|
357 |
+
|
358 |
+
**Differences:**
|
359 |
+
- **`uvx`**: Installs and runs in isolated environment (recommended)
|
360 |
+
- **`uv run`**: Runs using project's pyproject.toml (project-aware)
|
361 |
+
- **`uv tool run`**: Explicit tool execution (most explicit)
|
362 |
+
|
363 |
+
## 🚨 Troubleshooting
|
364 |
+
|
365 |
+
### Server Not Appearing in Cursor
|
366 |
+
|
367 |
+
1. **Check Configuration Syntax**:
|
368 |
+
```bash
|
369 |
+
# Validate JSON syntax
|
370 |
+
python -c "import json; print(json.load(open('.cursor/mcp.json')))"
|
371 |
+
```
|
372 |
+
|
373 |
+
2. **Verify Command Works**:
|
374 |
+
```bash
|
375 |
+
# Test with UV (recommended)
|
376 |
+
uvx mcp_server.py
|
377 |
+
|
378 |
+
# Or test with Python
|
379 |
+
python mcp_server.py
|
380 |
+
```
|
381 |
+
|
382 |
+
3. **Check UV Installation**:
|
383 |
+
```bash
|
384 |
+
# Verify UV is installed
|
385 |
+
uv --version
|
386 |
+
uvx --version
|
387 |
+
```
|
388 |
+
|
389 |
+
4. **Check Token Format**:
|
390 |
+
- Token should start with `hf_`
|
391 |
+
- No quotes in environment variables
|
392 |
+
- Token has "Inference Providers" scope
|
393 |
+
|
394 |
+
### Tool Not Working
|
395 |
+
|
396 |
+
1. **Check Cursor Logs**:
|
397 |
+
- Go to `Help → Show Logs`
|
398 |
+
- Look for MCP-related errors
|
399 |
+
|
400 |
+
2. **Test Server Manually**:
|
401 |
+
```bash
|
402 |
+
# Test with UV
|
403 |
+
uvx test_mcp.py
|
404 |
+
|
405 |
+
# Or with Python
|
406 |
+
python test_mcp.py
|
407 |
+
```
|
408 |
+
|
409 |
+
3. **Verify Dependencies**:
|
410 |
+
```bash
|
411 |
+
# UV automatically handles dependencies, but you can check:
|
412 |
+
uv pip list
|
413 |
+
```
|
414 |
+
|
415 |
+
4. **Verify Token Permissions**:
|
416 |
+
- Go to [HF Settings](https://huggingface.co/settings/tokens)
|
417 |
+
- Ensure token has "Inference Providers" access
|
418 |
+
|
419 |
+
### Common Error Messages
|
420 |
+
|
421 |
+
| Error | Solution |
|
422 |
+
|-------|----------|
|
423 |
+
| `HF_TOKEN is required` | Set HF_TOKEN environment variable |
|
424 |
+
| `Unknown provider: xyz` | Check provider name spelling |
|
425 |
+
| `Import "fastmcp" could not be resolved` | Run `uv add fastmcp` or `pip install fastmcp` |
|
426 |
+
| `Server failed to start` | Check UV/Python path and permissions |
|
427 |
+
| `uvx: command not found` | Install UV: `curl -LsSf https://astral.sh/uv/install.sh \| sh` |
|
428 |
+
| `Permission denied` | Check file permissions: `chmod +x mcp_server.py` |
|
429 |
+
|
430 |
+
### Getting Help
|
431 |
+
|
432 |
+
If you're still having issues:
|
433 |
+
|
434 |
+
1. **Check our test script**: `python test_mcp.py`
|
435 |
+
2. **Review Cursor MCP docs**: [https://docs.cursor.com/context/model-context-protocol](https://docs.cursor.com/context/model-context-protocol)
|
436 |
+
3. **Check FastMCP docs**: [https://github.com/jlowin/fastmcp](https://github.com/jlowin/fastmcp)
|
437 |
+
4. **Cursor Community**: [https://forum.cursor.com](https://forum.cursor.com)
|
438 |
+
|
439 |
+
## 🤖 Available MCP Capabilities
|
440 |
+
|
441 |
+
### 🛠️ Tools
|
442 |
+
|
443 |
+
**`chat_completion`** - Generate chat completions using Hugging Face Inference Providers
|
444 |
+
|
445 |
+
Parameters:
|
446 |
+
- `provider`: Inference provider (cerebras, cohere, groq, novita, etc.)
|
447 |
+
- `model`: Model ID from Hugging Face Hub
|
448 |
+
- `messages`: Chat messages (JSON array or plain text)
|
449 |
+
- `temperature`: Response randomness (0.0-2.0, default 0.7)
|
450 |
+
- `max_tokens`: Maximum response length (1-4096, default 512)
|
451 |
+
- `top_p`: Nucleus sampling (0.0-1.0, default 0.9)
|
452 |
+
- `stream`: Stream response (boolean, default False)
|
453 |
+
- `stop_sequences`: Stop sequences (comma-separated)
|
454 |
+
- `frequency_penalty`: Frequency penalty (-2.0 to 2.0)
|
455 |
+
- `presence_penalty`: Presence penalty (-2.0 to 2.0)
|
456 |
+
- `hf_token`: Your Hugging Face token (optional, uses env var)
|
457 |
+
|
458 |
+
### 📊 Resources
|
459 |
+
|
460 |
+
**`providers`** - Get list of available inference providers and capabilities
|
461 |
+
**`models/popular`** - Get curated recommendations for popular models
|
462 |
+
|
463 |
+
### 💭 Prompts
|
464 |
+
|
465 |
+
**`generate_provider_comparison_prompt`** - Generate prompts for comparing providers
|
466 |
+
|
467 |
+
## 🚀 FastMCP Features Used
|
468 |
+
|
469 |
+
- **@mcp.tool**: Exposes the chat completion function as an MCP tool
|
470 |
+
- **@mcp.resource**: Provides access to provider and model information
|
471 |
+
- **@mcp.prompt**: Generates helpful prompts for provider comparison
|
472 |
+
- **Context**: Rich logging, error handling, and progress reporting
|
473 |
+
- **Multiple Transports**: Supports stdio, SSE, and HTTP transports
|
474 |
+
|
475 |
+
## 🎯 Popular Models to Try
|
476 |
+
|
477 |
+
**Chat Models:**
|
478 |
+
- `deepseek-ai/DeepSeek-V3-0324` (Novita)
|
479 |
+
- `meta-llama/Llama-3.1-70B-Instruct` (Groq)
|
480 |
+
- `mistralai/Mixtral-8x7B-Instruct-v0.1` (Together)
|
481 |
+
- `google/gemma-2-27b-it` (HF Inference)
|
482 |
+
|
483 |
+
**Vision Language Models:**
|
484 |
+
- `meta-llama/Llama-3.2-11B-Vision-Instruct` (Together)
|
485 |
+
- `microsoft/Phi-3.5-vision-instruct` (HF Inference)
|
486 |
+
|
487 |
+
## 📖 Technical Details
|
488 |
+
|
489 |
+
This MCP server is built using:
|
490 |
+
- **FastMCP v2+** - The fast, Pythonic way to build MCP servers
|
491 |
+
- **Model Context Protocol (MCP)** - For standardized tool exposure
|
492 |
+
- **Hugging Face Inference Providers** - For model access across providers
|
493 |
+
- **Async/Await** - For efficient request handling
|
494 |
+
- **Rich Context Logging** - For detailed operation tracking
|
495 |
+
|
496 |
+
## 🔗 Links
|
497 |
+
|
498 |
+
- [FastMCP GitHub](https://github.com/jlowin/fastmcp)
|
499 |
+
- [FastMCP Documentation](https://gofastmcp.com)
|
500 |
+
- [Cursor MCP Docs](https://docs.cursor.com/context/model-context-protocol)
|
501 |
+
- [Model Context Protocol](https://modelcontextprotocol.io/)
|
502 |
+
- [Inference Providers Documentation](https://huggingface.co/docs/inference-providers)
|
503 |
+
- [Get HF Token](https://huggingface.co/settings/tokens)
|
504 |
+
- [Cursor Community Forum](https://forum.cursor.com)
|
505 |
+
|
506 |
+
## 📝 License
|
507 |
+
|
508 |
+
This project is open source and available under the MIT License.
|
mcp_server.py
ADDED
@@ -0,0 +1,309 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import os
|
2 |
+
import json
|
3 |
+
import requests
|
4 |
+
from typing import Dict, Any, Optional
|
5 |
+
from fastmcp import FastMCP, Context
|
6 |
+
|
7 |
+
# Initialize FastMCP server
|
8 |
+
mcp = FastMCP("Inference Providers MCP Server")
|
9 |
+
|
10 |
+
# Inference Providers configuration
|
11 |
+
PROVIDERS = {
|
12 |
+
"cerebras": {
|
13 |
+
"name": "Cerebras",
|
14 |
+
"tasks": ["chat-completion"],
|
15 |
+
"base_url": "https://router.huggingface.co/cerebras",
|
16 |
+
},
|
17 |
+
"cohere": {
|
18 |
+
"name": "Cohere",
|
19 |
+
"tasks": ["chat-completion", "chat-completion-vlm"],
|
20 |
+
"base_url": "https://router.huggingface.co/cohere",
|
21 |
+
},
|
22 |
+
"fal-ai": {
|
23 |
+
"name": "Fal AI",
|
24 |
+
"tasks": ["chat-completion", "chat-completion-vlm"],
|
25 |
+
"base_url": "https://router.huggingface.co/fal-ai",
|
26 |
+
},
|
27 |
+
"featherless-ai": {
|
28 |
+
"name": "Featherless AI",
|
29 |
+
"tasks": ["chat-completion", "chat-completion-vlm"],
|
30 |
+
"base_url": "https://router.huggingface.co/featherless-ai",
|
31 |
+
},
|
32 |
+
"fireworks-ai": {
|
33 |
+
"name": "Fireworks",
|
34 |
+
"tasks": ["chat-completion", "chat-completion-vlm"],
|
35 |
+
"base_url": "https://router.huggingface.co/fireworks-ai",
|
36 |
+
},
|
37 |
+
"groq": {
|
38 |
+
"name": "Groq",
|
39 |
+
"tasks": ["chat-completion"],
|
40 |
+
"base_url": "https://router.huggingface.co/groq",
|
41 |
+
},
|
42 |
+
"hf-inference": {
|
43 |
+
"name": "HF Inference",
|
44 |
+
"tasks": ["chat-completion", "chat-completion-vlm"],
|
45 |
+
"base_url": "https://router.huggingface.co/hf-inference",
|
46 |
+
},
|
47 |
+
"hyperbolic": {
|
48 |
+
"name": "Hyperbolic",
|
49 |
+
"tasks": ["chat-completion", "chat-completion-vlm"],
|
50 |
+
"base_url": "https://router.huggingface.co/hyperbolic",
|
51 |
+
},
|
52 |
+
"nebius": {
|
53 |
+
"name": "Nebius",
|
54 |
+
"tasks": ["chat-completion", "chat-completion-vlm"],
|
55 |
+
"base_url": "https://router.huggingface.co/nebius",
|
56 |
+
},
|
57 |
+
"novita": {
|
58 |
+
"name": "Novita",
|
59 |
+
"tasks": ["chat-completion", "chat-completion-vlm"],
|
60 |
+
"base_url": "https://router.huggingface.co/novita",
|
61 |
+
},
|
62 |
+
"nscale": {
|
63 |
+
"name": "Nscale",
|
64 |
+
"tasks": ["chat-completion", "chat-completion-vlm"],
|
65 |
+
"base_url": "https://router.huggingface.co/nscale",
|
66 |
+
},
|
67 |
+
"replicate": {
|
68 |
+
"name": "Replicate",
|
69 |
+
"tasks": ["chat-completion", "chat-completion-vlm"],
|
70 |
+
"base_url": "https://router.huggingface.co/replicate",
|
71 |
+
},
|
72 |
+
"sambanova": {
|
73 |
+
"name": "SambaNova",
|
74 |
+
"tasks": ["chat-completion", "chat-completion-vlm"],
|
75 |
+
"base_url": "https://router.huggingface.co/sambanova",
|
76 |
+
},
|
77 |
+
"together": {
|
78 |
+
"name": "Together",
|
79 |
+
"tasks": ["chat-completion", "chat-completion-vlm"],
|
80 |
+
"base_url": "https://router.huggingface.co/together",
|
81 |
+
},
|
82 |
+
}
|
83 |
+
|
84 |
+
|
85 |
+
async def make_request(
|
86 |
+
provider: str,
|
87 |
+
endpoint: str,
|
88 |
+
payload: Dict[str, Any],
|
89 |
+
hf_token: str,
|
90 |
+
ctx: Optional[Context] = None,
|
91 |
+
) -> Dict[str, Any]:
|
92 |
+
"""Make a request to the inference provider"""
|
93 |
+
if not hf_token:
|
94 |
+
error_msg = (
|
95 |
+
"HF_TOKEN is required. Please set it in the environment or provide it."
|
96 |
+
)
|
97 |
+
if ctx:
|
98 |
+
await ctx.error(error_msg)
|
99 |
+
return {"error": error_msg}
|
100 |
+
|
101 |
+
provider_config = PROVIDERS.get(provider)
|
102 |
+
if not provider_config:
|
103 |
+
error_msg = f"Unknown provider: {provider}"
|
104 |
+
if ctx:
|
105 |
+
await ctx.error(error_msg)
|
106 |
+
return {"error": error_msg}
|
107 |
+
|
108 |
+
url = f"{provider_config['base_url']}/{endpoint}"
|
109 |
+
headers = {
|
110 |
+
"Authorization": f"Bearer {hf_token}",
|
111 |
+
"Content-Type": "application/json",
|
112 |
+
}
|
113 |
+
|
114 |
+
if ctx:
|
115 |
+
await ctx.info(f"Making request to {provider} ({url})")
|
116 |
+
|
117 |
+
try:
|
118 |
+
response = requests.post(url, headers=headers, json=payload, timeout=60)
|
119 |
+
response.raise_for_status()
|
120 |
+
|
121 |
+
if ctx:
|
122 |
+
await ctx.info(f"Request successful to {provider}")
|
123 |
+
|
124 |
+
return response.json()
|
125 |
+
except requests.exceptions.RequestException as e:
|
126 |
+
error_msg = f"Request failed: {str(e)}"
|
127 |
+
if ctx:
|
128 |
+
await ctx.error(error_msg)
|
129 |
+
return {"error": error_msg}
|
130 |
+
|
131 |
+
|
132 |
+
@mcp.tool()
|
133 |
+
async def chat_completion(
|
134 |
+
provider: str,
|
135 |
+
model: str,
|
136 |
+
messages: str,
|
137 |
+
ctx: Context,
|
138 |
+
temperature: float = 0.7,
|
139 |
+
max_tokens: int = 512,
|
140 |
+
top_p: float = 0.9,
|
141 |
+
stream: bool = False,
|
142 |
+
stop_sequences: str = "",
|
143 |
+
frequency_penalty: float = 0.0,
|
144 |
+
presence_penalty: float = 0.0,
|
145 |
+
hf_token: Optional[str] = None,
|
146 |
+
) -> str:
|
147 |
+
"""Generate chat completions using Hugging Face Inference Providers.
|
148 |
+
|
149 |
+
This tool allows you to chat with various language models through
|
150 |
+
different inference providers including Cerebras, Cohere, Fireworks,
|
151 |
+
Groq, and others.
|
152 |
+
|
153 |
+
Args:
|
154 |
+
provider: The inference provider to use (cerebras, cohere, fal-ai,
|
155 |
+
featherless-ai, fireworks-ai, groq, hf-inference,
|
156 |
+
hyperbolic, nebius, novita, nscale, replicate, sambanova,
|
157 |
+
together)
|
158 |
+
model: The model ID from Hugging Face Hub
|
159 |
+
(e.g., 'deepseek-ai/DeepSeek-V3-0324')
|
160 |
+
messages: Either a JSON array of messages in OpenAI format or
|
161 |
+
plain text for simple queries
|
162 |
+
temperature: Controls response randomness (0.0-2.0, default 0.7)
|
163 |
+
max_tokens: Maximum tokens in response (1-4096, default 512)
|
164 |
+
top_p: Nucleus sampling parameter (0.0-1.0, default 0.9)
|
165 |
+
stream: Whether to stream the response (default False)
|
166 |
+
stop_sequences: Comma-separated stop sequences (optional)
|
167 |
+
frequency_penalty: Penalize frequent tokens (-2.0 to 2.0)
|
168 |
+
presence_penalty: Penalize present tokens (-2.0 to 2.0)
|
169 |
+
hf_token: Your Hugging Face token with Inference Providers access
|
170 |
+
(falls back to HF_TOKEN environment variable)
|
171 |
+
|
172 |
+
Returns:
|
173 |
+
The generated text response from the language model
|
174 |
+
"""
|
175 |
+
# Get HF token from parameter or environment
|
176 |
+
token = hf_token or os.getenv("HF_TOKEN")
|
177 |
+
if not token:
|
178 |
+
await ctx.error("HF_TOKEN not provided and not found in environment")
|
179 |
+
return "Error: HF_TOKEN is required but not provided"
|
180 |
+
|
181 |
+
await ctx.info(f"Starting chat completion with {provider} provider")
|
182 |
+
await ctx.info(f"Model: {model}")
|
183 |
+
|
184 |
+
try:
|
185 |
+
# Parse messages
|
186 |
+
if messages.strip().startswith("["):
|
187 |
+
parsed_messages = json.loads(messages)
|
188 |
+
await ctx.info(f"Parsed {len(parsed_messages)} messages from JSON")
|
189 |
+
else:
|
190 |
+
parsed_messages = [{"role": "user", "content": messages}]
|
191 |
+
await ctx.info("Created single user message")
|
192 |
+
|
193 |
+
payload = {
|
194 |
+
"model": model,
|
195 |
+
"messages": parsed_messages,
|
196 |
+
"temperature": temperature,
|
197 |
+
"max_tokens": max_tokens,
|
198 |
+
"top_p": top_p,
|
199 |
+
"stream": stream,
|
200 |
+
}
|
201 |
+
|
202 |
+
# Add optional parameters
|
203 |
+
if stop_sequences.strip():
|
204 |
+
payload["stop"] = [s.strip() for s in stop_sequences.split(",")]
|
205 |
+
await ctx.info(f"Added stop sequences: {payload['stop']}")
|
206 |
+
|
207 |
+
if frequency_penalty != 0:
|
208 |
+
payload["frequency_penalty"] = frequency_penalty
|
209 |
+
|
210 |
+
if presence_penalty != 0:
|
211 |
+
payload["presence_penalty"] = presence_penalty
|
212 |
+
|
213 |
+
result = await make_request(
|
214 |
+
provider, "v1/chat/completions", payload, token, ctx
|
215 |
+
)
|
216 |
+
|
217 |
+
if "error" in result:
|
218 |
+
await ctx.error(f"API Error: {result['error']}")
|
219 |
+
return f"Error: {result['error']}"
|
220 |
+
|
221 |
+
if "choices" in result and len(result["choices"]) > 0:
|
222 |
+
response_text = result["choices"][0]["message"]["content"]
|
223 |
+
await ctx.info(f"Generated response with {len(response_text)} characters")
|
224 |
+
return response_text
|
225 |
+
else:
|
226 |
+
await ctx.warning("Unexpected response format")
|
227 |
+
return json.dumps(result, indent=2)
|
228 |
+
|
229 |
+
except json.JSONDecodeError as e:
|
230 |
+
error_msg = f"Invalid JSON format for messages: {str(e)}"
|
231 |
+
await ctx.error(error_msg)
|
232 |
+
return f"Error: {error_msg}"
|
233 |
+
except Exception as e:
|
234 |
+
error_msg = f"Unexpected error: {str(e)}"
|
235 |
+
await ctx.error(error_msg)
|
236 |
+
return f"Error: {error_msg}"
|
237 |
+
|
238 |
+
|
239 |
+
@mcp.resource("file://providers")
|
240 |
+
async def get_providers() -> str:
|
241 |
+
"""Get the list of available inference providers and their capabilities.
|
242 |
+
|
243 |
+
Returns JSON information about all supported providers including their
|
244 |
+
supported tasks and base URLs.
|
245 |
+
"""
|
246 |
+
return json.dumps(PROVIDERS, indent=2)
|
247 |
+
|
248 |
+
|
249 |
+
@mcp.resource("file://models/popular")
|
250 |
+
async def get_popular_models() -> str:
|
251 |
+
"""Get a list of popular models for each provider.
|
252 |
+
|
253 |
+
Returns curated recommendations for models to try with each provider.
|
254 |
+
"""
|
255 |
+
popular_models = {
|
256 |
+
"chat_models": {
|
257 |
+
"cerebras": ["llama3.1-70b"],
|
258 |
+
"cohere": ["command-r-plus"],
|
259 |
+
"groq": ["meta-llama/Llama-3.1-70B-Instruct"],
|
260 |
+
"novita": ["deepseek-ai/DeepSeek-V3-0324"],
|
261 |
+
"together": ["mistralai/Mixtral-8x7B-Instruct-v0.1"],
|
262 |
+
"hf-inference": ["google/gemma-2-27b-it"],
|
263 |
+
},
|
264 |
+
"vision_models": {
|
265 |
+
"cohere": ["command-r-plus-vision"],
|
266 |
+
"together": ["meta-llama/Llama-3.2-11B-Vision-Instruct"],
|
267 |
+
"hf-inference": ["microsoft/Phi-3.5-vision-instruct"],
|
268 |
+
},
|
269 |
+
}
|
270 |
+
return json.dumps(popular_models, indent=2)
|
271 |
+
|
272 |
+
|
273 |
+
@mcp.prompt()
|
274 |
+
def generate_provider_comparison_prompt(task: str = "chat") -> str:
|
275 |
+
"""Generate a prompt to help compare different inference providers.
|
276 |
+
|
277 |
+
Args:
|
278 |
+
task: The type of task to compare providers for (default: "chat")
|
279 |
+
|
280 |
+
Returns:
|
281 |
+
A prompt that can be used to get comparative analysis of providers
|
282 |
+
"""
|
283 |
+
available_providers = [
|
284 |
+
name
|
285 |
+
for name, config in PROVIDERS.items()
|
286 |
+
if f"{task}-completion" in config["tasks"]
|
287 |
+
]
|
288 |
+
|
289 |
+
providers_list = ", ".join(available_providers)
|
290 |
+
|
291 |
+
return f"""Please compare the following inference providers for {task} tasks:
|
292 |
+
|
293 |
+
Providers: {providers_list}
|
294 |
+
|
295 |
+
Consider factors like:
|
296 |
+
- Model selection and capabilities
|
297 |
+
- Performance and speed
|
298 |
+
- Pricing (if known)
|
299 |
+
- Special features or limitations
|
300 |
+
- Use case recommendations
|
301 |
+
|
302 |
+
Provide a balanced comparison that helps choose the right provider."""
|
303 |
+
|
304 |
+
|
305 |
+
if __name__ == "__main__":
|
306 |
+
# Run the MCP server
|
307 |
+
# Default: stdio transport for local development
|
308 |
+
# For production, use: mcp.run(transport="sse", host="0.0.0.0", port=8000)
|
309 |
+
mcp.run()
|
pyproject.toml
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
[project]
|
2 |
+
name = "inference-providers-mcp"
|
3 |
+
version = "0.1.0"
|
4 |
+
description = "FastMCP Server for Hugging Face Inference Providers"
|
5 |
+
readme = "README.md"
|
6 |
+
requires-python = ">=3.11"
|
7 |
+
dependencies = [
|
8 |
+
"fastmcp>=2.0.0",
|
9 |
+
"requests>=2.31.0",
|
10 |
+
"python-dotenv>=1.0.0"
|
11 |
+
]
|
requirements.txt
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
fastmcp>=2.0.0
|
2 |
+
requests>=2.31.0
|
3 |
+
python-dotenv>=1.0.0
|
uv.lock
ADDED
@@ -0,0 +1,620 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
version = 1
|
2 |
+
requires-python = ">=3.11"
|
3 |
+
resolution-markers = [
|
4 |
+
"python_full_version < '3.12'",
|
5 |
+
"python_full_version == '3.12.*'",
|
6 |
+
"python_full_version >= '3.13'",
|
7 |
+
]
|
8 |
+
|
9 |
+
[[package]]
|
10 |
+
name = "annotated-types"
|
11 |
+
version = "0.7.0"
|
12 |
+
source = { registry = "https://pypi.org/simple" }
|
13 |
+
sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081 }
|
14 |
+
wheels = [
|
15 |
+
{ url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643 },
|
16 |
+
]
|
17 |
+
|
18 |
+
[[package]]
|
19 |
+
name = "anyio"
|
20 |
+
version = "4.9.0"
|
21 |
+
source = { registry = "https://pypi.org/simple" }
|
22 |
+
dependencies = [
|
23 |
+
{ name = "idna" },
|
24 |
+
{ name = "sniffio" },
|
25 |
+
{ name = "typing-extensions", marker = "python_full_version < '3.13'" },
|
26 |
+
]
|
27 |
+
sdist = { url = "https://files.pythonhosted.org/packages/95/7d/4c1bd541d4dffa1b52bd83fb8527089e097a106fc90b467a7313b105f840/anyio-4.9.0.tar.gz", hash = "sha256:673c0c244e15788651a4ff38710fea9675823028a6f08a5eda409e0c9840a028", size = 190949 }
|
28 |
+
wheels = [
|
29 |
+
{ url = "https://files.pythonhosted.org/packages/a1/ee/48ca1a7c89ffec8b6a0c5d02b89c305671d5ffd8d3c94acf8b8c408575bb/anyio-4.9.0-py3-none-any.whl", hash = "sha256:9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c", size = 100916 },
|
30 |
+
]
|
31 |
+
|
32 |
+
[[package]]
|
33 |
+
name = "authlib"
|
34 |
+
version = "1.6.0"
|
35 |
+
source = { registry = "https://pypi.org/simple" }
|
36 |
+
dependencies = [
|
37 |
+
{ name = "cryptography" },
|
38 |
+
]
|
39 |
+
sdist = { url = "https://files.pythonhosted.org/packages/a2/9d/b1e08d36899c12c8b894a44a5583ee157789f26fc4b176f8e4b6217b56e1/authlib-1.6.0.tar.gz", hash = "sha256:4367d32031b7af175ad3a323d571dc7257b7099d55978087ceae4a0d88cd3210", size = 158371 }
|
40 |
+
wheels = [
|
41 |
+
{ url = "https://files.pythonhosted.org/packages/84/29/587c189bbab1ccc8c86a03a5d0e13873df916380ef1be461ebe6acebf48d/authlib-1.6.0-py2.py3-none-any.whl", hash = "sha256:91685589498f79e8655e8a8947431ad6288831d643f11c55c2143ffcc738048d", size = 239981 },
|
42 |
+
]
|
43 |
+
|
44 |
+
[[package]]
|
45 |
+
name = "certifi"
|
46 |
+
version = "2025.6.15"
|
47 |
+
source = { registry = "https://pypi.org/simple" }
|
48 |
+
sdist = { url = "https://files.pythonhosted.org/packages/73/f7/f14b46d4bcd21092d7d3ccef689615220d8a08fb25e564b65d20738e672e/certifi-2025.6.15.tar.gz", hash = "sha256:d747aa5a8b9bbbb1bb8c22bb13e22bd1f18e9796defa16bab421f7f7a317323b", size = 158753 }
|
49 |
+
wheels = [
|
50 |
+
{ url = "https://files.pythonhosted.org/packages/84/ae/320161bd181fc06471eed047ecce67b693fd7515b16d495d8932db763426/certifi-2025.6.15-py3-none-any.whl", hash = "sha256:2e0c7ce7cb5d8f8634ca55d2ba7e6ec2689a2fd6537d8dec1296a477a4910057", size = 157650 },
|
51 |
+
]
|
52 |
+
|
53 |
+
[[package]]
|
54 |
+
name = "cffi"
|
55 |
+
version = "1.17.1"
|
56 |
+
source = { registry = "https://pypi.org/simple" }
|
57 |
+
dependencies = [
|
58 |
+
{ name = "pycparser" },
|
59 |
+
]
|
60 |
+
sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621 }
|
61 |
+
wheels = [
|
62 |
+
{ url = "https://files.pythonhosted.org/packages/6b/f4/927e3a8899e52a27fa57a48607ff7dc91a9ebe97399b357b85a0c7892e00/cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401", size = 182264 },
|
63 |
+
{ url = "https://files.pythonhosted.org/packages/6c/f5/6c3a8efe5f503175aaddcbea6ad0d2c96dad6f5abb205750d1b3df44ef29/cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf", size = 178651 },
|
64 |
+
{ url = "https://files.pythonhosted.org/packages/94/dd/a3f0118e688d1b1a57553da23b16bdade96d2f9bcda4d32e7d2838047ff7/cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4", size = 445259 },
|
65 |
+
{ url = "https://files.pythonhosted.org/packages/2e/ea/70ce63780f096e16ce8588efe039d3c4f91deb1dc01e9c73a287939c79a6/cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41", size = 469200 },
|
66 |
+
{ url = "https://files.pythonhosted.org/packages/1c/a0/a4fa9f4f781bda074c3ddd57a572b060fa0df7655d2a4247bbe277200146/cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1", size = 477235 },
|
67 |
+
{ url = "https://files.pythonhosted.org/packages/62/12/ce8710b5b8affbcdd5c6e367217c242524ad17a02fe5beec3ee339f69f85/cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6", size = 459721 },
|
68 |
+
{ url = "https://files.pythonhosted.org/packages/ff/6b/d45873c5e0242196f042d555526f92aa9e0c32355a1be1ff8c27f077fd37/cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d", size = 467242 },
|
69 |
+
{ url = "https://files.pythonhosted.org/packages/1a/52/d9a0e523a572fbccf2955f5abe883cfa8bcc570d7faeee06336fbd50c9fc/cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6", size = 477999 },
|
70 |
+
{ url = "https://files.pythonhosted.org/packages/44/74/f2a2460684a1a2d00ca799ad880d54652841a780c4c97b87754f660c7603/cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f", size = 454242 },
|
71 |
+
{ url = "https://files.pythonhosted.org/packages/f8/4a/34599cac7dfcd888ff54e801afe06a19c17787dfd94495ab0c8d35fe99fb/cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b", size = 478604 },
|
72 |
+
{ url = "https://files.pythonhosted.org/packages/34/33/e1b8a1ba29025adbdcda5fb3a36f94c03d771c1b7b12f726ff7fef2ebe36/cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655", size = 171727 },
|
73 |
+
{ url = "https://files.pythonhosted.org/packages/3d/97/50228be003bb2802627d28ec0627837ac0bf35c90cf769812056f235b2d1/cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0", size = 181400 },
|
74 |
+
{ url = "https://files.pythonhosted.org/packages/5a/84/e94227139ee5fb4d600a7a4927f322e1d4aea6fdc50bd3fca8493caba23f/cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", size = 183178 },
|
75 |
+
{ url = "https://files.pythonhosted.org/packages/da/ee/fb72c2b48656111c4ef27f0f91da355e130a923473bf5ee75c5643d00cca/cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", size = 178840 },
|
76 |
+
{ url = "https://files.pythonhosted.org/packages/cc/b6/db007700f67d151abadf508cbfd6a1884f57eab90b1bb985c4c8c02b0f28/cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", size = 454803 },
|
77 |
+
{ url = "https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", size = 478850 },
|
78 |
+
{ url = "https://files.pythonhosted.org/packages/28/c0/b31116332a547fd2677ae5b78a2ef662dfc8023d67f41b2a83f7c2aa78b1/cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", size = 485729 },
|
79 |
+
{ url = "https://files.pythonhosted.org/packages/91/2b/9a1ddfa5c7f13cab007a2c9cc295b70fbbda7cb10a286aa6810338e60ea1/cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", size = 471256 },
|
80 |
+
{ url = "https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", size = 479424 },
|
81 |
+
{ url = "https://files.pythonhosted.org/packages/0b/ac/2a28bcf513e93a219c8a4e8e125534f4f6db03e3179ba1c45e949b76212c/cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", size = 484568 },
|
82 |
+
{ url = "https://files.pythonhosted.org/packages/d4/38/ca8a4f639065f14ae0f1d9751e70447a261f1a30fa7547a828ae08142465/cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", size = 488736 },
|
83 |
+
{ url = "https://files.pythonhosted.org/packages/86/c5/28b2d6f799ec0bdecf44dced2ec5ed43e0eb63097b0f58c293583b406582/cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", size = 172448 },
|
84 |
+
{ url = "https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", size = 181976 },
|
85 |
+
{ url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989 },
|
86 |
+
{ url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802 },
|
87 |
+
{ url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792 },
|
88 |
+
{ url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893 },
|
89 |
+
{ url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810 },
|
90 |
+
{ url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200 },
|
91 |
+
{ url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447 },
|
92 |
+
{ url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358 },
|
93 |
+
{ url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469 },
|
94 |
+
{ url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475 },
|
95 |
+
{ url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009 },
|
96 |
+
]
|
97 |
+
|
98 |
+
[[package]]
|
99 |
+
name = "charset-normalizer"
|
100 |
+
version = "3.4.2"
|
101 |
+
source = { registry = "https://pypi.org/simple" }
|
102 |
+
sdist = { url = "https://files.pythonhosted.org/packages/e4/33/89c2ced2b67d1c2a61c19c6751aa8902d46ce3dacb23600a283619f5a12d/charset_normalizer-3.4.2.tar.gz", hash = "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63", size = 126367 }
|
103 |
+
wheels = [
|
104 |
+
{ url = "https://files.pythonhosted.org/packages/05/85/4c40d00dcc6284a1c1ad5de5e0996b06f39d8232f1031cd23c2f5c07ee86/charset_normalizer-3.4.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:be1e352acbe3c78727a16a455126d9ff83ea2dfdcbc83148d2982305a04714c2", size = 198794 },
|
105 |
+
{ url = "https://files.pythonhosted.org/packages/41/d9/7a6c0b9db952598e97e93cbdfcb91bacd89b9b88c7c983250a77c008703c/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa88ca0b1932e93f2d961bf3addbb2db902198dca337d88c89e1559e066e7645", size = 142846 },
|
106 |
+
{ url = "https://files.pythonhosted.org/packages/66/82/a37989cda2ace7e37f36c1a8ed16c58cf48965a79c2142713244bf945c89/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d524ba3f1581b35c03cb42beebab4a13e6cdad7b36246bd22541fa585a56cccd", size = 153350 },
|
107 |
+
{ url = "https://files.pythonhosted.org/packages/df/68/a576b31b694d07b53807269d05ec3f6f1093e9545e8607121995ba7a8313/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28a1005facc94196e1fb3e82a3d442a9d9110b8434fc1ded7a24a2983c9888d8", size = 145657 },
|
108 |
+
{ url = "https://files.pythonhosted.org/packages/92/9b/ad67f03d74554bed3aefd56fe836e1623a50780f7c998d00ca128924a499/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fdb20a30fe1175ecabed17cbf7812f7b804b8a315a25f24678bcdf120a90077f", size = 147260 },
|
109 |
+
{ url = "https://files.pythonhosted.org/packages/a6/e6/8aebae25e328160b20e31a7e9929b1578bbdc7f42e66f46595a432f8539e/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0f5d9ed7f254402c9e7d35d2f5972c9bbea9040e99cd2861bd77dc68263277c7", size = 149164 },
|
110 |
+
{ url = "https://files.pythonhosted.org/packages/8b/f2/b3c2f07dbcc248805f10e67a0262c93308cfa149a4cd3d1fe01f593e5fd2/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:efd387a49825780ff861998cd959767800d54f8308936b21025326de4b5a42b9", size = 144571 },
|
111 |
+
{ url = "https://files.pythonhosted.org/packages/60/5b/c3f3a94bc345bc211622ea59b4bed9ae63c00920e2e8f11824aa5708e8b7/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f0aa37f3c979cf2546b73e8222bbfa3dc07a641585340179d768068e3455e544", size = 151952 },
|
112 |
+
{ url = "https://files.pythonhosted.org/packages/e2/4d/ff460c8b474122334c2fa394a3f99a04cf11c646da895f81402ae54f5c42/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e70e990b2137b29dc5564715de1e12701815dacc1d056308e2b17e9095372a82", size = 155959 },
|
113 |
+
{ url = "https://files.pythonhosted.org/packages/a2/2b/b964c6a2fda88611a1fe3d4c400d39c66a42d6c169c924818c848f922415/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0c8c57f84ccfc871a48a47321cfa49ae1df56cd1d965a09abe84066f6853b9c0", size = 153030 },
|
114 |
+
{ url = "https://files.pythonhosted.org/packages/59/2e/d3b9811db26a5ebf444bc0fa4f4be5aa6d76fc6e1c0fd537b16c14e849b6/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6b66f92b17849b85cad91259efc341dce9c1af48e2173bf38a85c6329f1033e5", size = 148015 },
|
115 |
+
{ url = "https://files.pythonhosted.org/packages/90/07/c5fd7c11eafd561bb51220d600a788f1c8d77c5eef37ee49454cc5c35575/charset_normalizer-3.4.2-cp311-cp311-win32.whl", hash = "sha256:daac4765328a919a805fa5e2720f3e94767abd632ae410a9062dff5412bae65a", size = 98106 },
|
116 |
+
{ url = "https://files.pythonhosted.org/packages/a8/05/5e33dbef7e2f773d672b6d79f10ec633d4a71cd96db6673625838a4fd532/charset_normalizer-3.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:e53efc7c7cee4c1e70661e2e112ca46a575f90ed9ae3fef200f2a25e954f4b28", size = 105402 },
|
117 |
+
{ url = "https://files.pythonhosted.org/packages/d7/a4/37f4d6035c89cac7930395a35cc0f1b872e652eaafb76a6075943754f095/charset_normalizer-3.4.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7", size = 199936 },
|
118 |
+
{ url = "https://files.pythonhosted.org/packages/ee/8a/1a5e33b73e0d9287274f899d967907cd0bf9c343e651755d9307e0dbf2b3/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3", size = 143790 },
|
119 |
+
{ url = "https://files.pythonhosted.org/packages/66/52/59521f1d8e6ab1482164fa21409c5ef44da3e9f653c13ba71becdd98dec3/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a", size = 153924 },
|
120 |
+
{ url = "https://files.pythonhosted.org/packages/86/2d/fb55fdf41964ec782febbf33cb64be480a6b8f16ded2dbe8db27a405c09f/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214", size = 146626 },
|
121 |
+
{ url = "https://files.pythonhosted.org/packages/8c/73/6ede2ec59bce19b3edf4209d70004253ec5f4e319f9a2e3f2f15601ed5f7/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a", size = 148567 },
|
122 |
+
{ url = "https://files.pythonhosted.org/packages/09/14/957d03c6dc343c04904530b6bef4e5efae5ec7d7990a7cbb868e4595ee30/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd", size = 150957 },
|
123 |
+
{ url = "https://files.pythonhosted.org/packages/0d/c8/8174d0e5c10ccebdcb1b53cc959591c4c722a3ad92461a273e86b9f5a302/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981", size = 145408 },
|
124 |
+
{ url = "https://files.pythonhosted.org/packages/58/aa/8904b84bc8084ac19dc52feb4f5952c6df03ffb460a887b42615ee1382e8/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c", size = 153399 },
|
125 |
+
{ url = "https://files.pythonhosted.org/packages/c2/26/89ee1f0e264d201cb65cf054aca6038c03b1a0c6b4ae998070392a3ce605/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b", size = 156815 },
|
126 |
+
{ url = "https://files.pythonhosted.org/packages/fd/07/68e95b4b345bad3dbbd3a8681737b4338ff2c9df29856a6d6d23ac4c73cb/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d", size = 154537 },
|
127 |
+
{ url = "https://files.pythonhosted.org/packages/77/1a/5eefc0ce04affb98af07bc05f3bac9094513c0e23b0562d64af46a06aae4/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f", size = 149565 },
|
128 |
+
{ url = "https://files.pythonhosted.org/packages/37/a0/2410e5e6032a174c95e0806b1a6585eb21e12f445ebe239fac441995226a/charset_normalizer-3.4.2-cp312-cp312-win32.whl", hash = "sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c", size = 98357 },
|
129 |
+
{ url = "https://files.pythonhosted.org/packages/6c/4f/c02d5c493967af3eda9c771ad4d2bbc8df6f99ddbeb37ceea6e8716a32bc/charset_normalizer-3.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e", size = 105776 },
|
130 |
+
{ url = "https://files.pythonhosted.org/packages/ea/12/a93df3366ed32db1d907d7593a94f1fe6293903e3e92967bebd6950ed12c/charset_normalizer-3.4.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0", size = 199622 },
|
131 |
+
{ url = "https://files.pythonhosted.org/packages/04/93/bf204e6f344c39d9937d3c13c8cd5bbfc266472e51fc8c07cb7f64fcd2de/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf", size = 143435 },
|
132 |
+
{ url = "https://files.pythonhosted.org/packages/22/2a/ea8a2095b0bafa6c5b5a55ffdc2f924455233ee7b91c69b7edfcc9e02284/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e", size = 153653 },
|
133 |
+
{ url = "https://files.pythonhosted.org/packages/b6/57/1b090ff183d13cef485dfbe272e2fe57622a76694061353c59da52c9a659/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1", size = 146231 },
|
134 |
+
{ url = "https://files.pythonhosted.org/packages/e2/28/ffc026b26f441fc67bd21ab7f03b313ab3fe46714a14b516f931abe1a2d8/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c", size = 148243 },
|
135 |
+
{ url = "https://files.pythonhosted.org/packages/c0/0f/9abe9bd191629c33e69e47c6ef45ef99773320e9ad8e9cb08b8ab4a8d4cb/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691", size = 150442 },
|
136 |
+
{ url = "https://files.pythonhosted.org/packages/67/7c/a123bbcedca91d5916c056407f89a7f5e8fdfce12ba825d7d6b9954a1a3c/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0", size = 145147 },
|
137 |
+
{ url = "https://files.pythonhosted.org/packages/ec/fe/1ac556fa4899d967b83e9893788e86b6af4d83e4726511eaaad035e36595/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b", size = 153057 },
|
138 |
+
{ url = "https://files.pythonhosted.org/packages/2b/ff/acfc0b0a70b19e3e54febdd5301a98b72fa07635e56f24f60502e954c461/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff", size = 156454 },
|
139 |
+
{ url = "https://files.pythonhosted.org/packages/92/08/95b458ce9c740d0645feb0e96cea1f5ec946ea9c580a94adfe0b617f3573/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b", size = 154174 },
|
140 |
+
{ url = "https://files.pythonhosted.org/packages/78/be/8392efc43487ac051eee6c36d5fbd63032d78f7728cb37aebcc98191f1ff/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148", size = 149166 },
|
141 |
+
{ url = "https://files.pythonhosted.org/packages/44/96/392abd49b094d30b91d9fbda6a69519e95802250b777841cf3bda8fe136c/charset_normalizer-3.4.2-cp313-cp313-win32.whl", hash = "sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7", size = 98064 },
|
142 |
+
{ url = "https://files.pythonhosted.org/packages/e9/b0/0200da600134e001d91851ddc797809e2fe0ea72de90e09bec5a2fbdaccb/charset_normalizer-3.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980", size = 105641 },
|
143 |
+
{ url = "https://files.pythonhosted.org/packages/20/94/c5790835a017658cbfabd07f3bfb549140c3ac458cfc196323996b10095a/charset_normalizer-3.4.2-py3-none-any.whl", hash = "sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0", size = 52626 },
|
144 |
+
]
|
145 |
+
|
146 |
+
[[package]]
|
147 |
+
name = "click"
|
148 |
+
version = "8.2.1"
|
149 |
+
source = { registry = "https://pypi.org/simple" }
|
150 |
+
dependencies = [
|
151 |
+
{ name = "colorama", marker = "platform_system == 'Windows'" },
|
152 |
+
]
|
153 |
+
sdist = { url = "https://files.pythonhosted.org/packages/60/6c/8ca2efa64cf75a977a0d7fac081354553ebe483345c734fb6b6515d96bbc/click-8.2.1.tar.gz", hash = "sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202", size = 286342 }
|
154 |
+
wheels = [
|
155 |
+
{ url = "https://files.pythonhosted.org/packages/85/32/10bb5764d90a8eee674e9dc6f4db6a0ab47c8c4d0d83c27f7c39ac415a4d/click-8.2.1-py3-none-any.whl", hash = "sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b", size = 102215 },
|
156 |
+
]
|
157 |
+
|
158 |
+
[[package]]
|
159 |
+
name = "colorama"
|
160 |
+
version = "0.4.6"
|
161 |
+
source = { registry = "https://pypi.org/simple" }
|
162 |
+
sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 }
|
163 |
+
wheels = [
|
164 |
+
{ url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 },
|
165 |
+
]
|
166 |
+
|
167 |
+
[[package]]
|
168 |
+
name = "cryptography"
|
169 |
+
version = "45.0.4"
|
170 |
+
source = { registry = "https://pypi.org/simple" }
|
171 |
+
dependencies = [
|
172 |
+
{ name = "cffi", marker = "platform_python_implementation != 'PyPy'" },
|
173 |
+
]
|
174 |
+
sdist = { url = "https://files.pythonhosted.org/packages/fe/c8/a2a376a8711c1e11708b9c9972e0c3223f5fc682552c82d8db844393d6ce/cryptography-45.0.4.tar.gz", hash = "sha256:7405ade85c83c37682c8fe65554759800a4a8c54b2d96e0f8ad114d31b808d57", size = 744890 }
|
175 |
+
wheels = [
|
176 |
+
{ url = "https://files.pythonhosted.org/packages/cc/1c/92637793de053832523b410dbe016d3f5c11b41d0cf6eef8787aabb51d41/cryptography-45.0.4-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:425a9a6ac2823ee6e46a76a21a4e8342d8fa5c01e08b823c1f19a8b74f096069", size = 7055712 },
|
177 |
+
{ url = "https://files.pythonhosted.org/packages/ba/14/93b69f2af9ba832ad6618a03f8a034a5851dc9a3314336a3d71c252467e1/cryptography-45.0.4-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:680806cf63baa0039b920f4976f5f31b10e772de42f16310a6839d9f21a26b0d", size = 4205335 },
|
178 |
+
{ url = "https://files.pythonhosted.org/packages/67/30/fae1000228634bf0b647fca80403db5ca9e3933b91dd060570689f0bd0f7/cryptography-45.0.4-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4ca0f52170e821bc8da6fc0cc565b7bb8ff8d90d36b5e9fdd68e8a86bdf72036", size = 4431487 },
|
179 |
+
{ url = "https://files.pythonhosted.org/packages/6d/5a/7dffcf8cdf0cb3c2430de7404b327e3db64735747d641fc492539978caeb/cryptography-45.0.4-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:f3fe7a5ae34d5a414957cc7f457e2b92076e72938423ac64d215722f6cf49a9e", size = 4208922 },
|
180 |
+
{ url = "https://files.pythonhosted.org/packages/c6/f3/528729726eb6c3060fa3637253430547fbaaea95ab0535ea41baa4a6fbd8/cryptography-45.0.4-cp311-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:25eb4d4d3e54595dc8adebc6bbd5623588991d86591a78c2548ffb64797341e2", size = 3900433 },
|
181 |
+
{ url = "https://files.pythonhosted.org/packages/d9/4a/67ba2e40f619e04d83c32f7e1d484c1538c0800a17c56a22ff07d092ccc1/cryptography-45.0.4-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:ce1678a2ccbe696cf3af15a75bb72ee008d7ff183c9228592ede9db467e64f1b", size = 4464163 },
|
182 |
+
{ url = "https://files.pythonhosted.org/packages/7e/9a/b4d5aa83661483ac372464809c4b49b5022dbfe36b12fe9e323ca8512420/cryptography-45.0.4-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:49fe9155ab32721b9122975e168a6760d8ce4cffe423bcd7ca269ba41b5dfac1", size = 4208687 },
|
183 |
+
{ url = "https://files.pythonhosted.org/packages/db/b7/a84bdcd19d9c02ec5807f2ec2d1456fd8451592c5ee353816c09250e3561/cryptography-45.0.4-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:2882338b2a6e0bd337052e8b9007ced85c637da19ef9ecaf437744495c8c2999", size = 4463623 },
|
184 |
+
{ url = "https://files.pythonhosted.org/packages/d8/84/69707d502d4d905021cac3fb59a316344e9f078b1da7fb43ecde5e10840a/cryptography-45.0.4-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:23b9c3ea30c3ed4db59e7b9619272e94891f8a3a5591d0b656a7582631ccf750", size = 4332447 },
|
185 |
+
{ url = "https://files.pythonhosted.org/packages/f3/ee/d4f2ab688e057e90ded24384e34838086a9b09963389a5ba6854b5876598/cryptography-45.0.4-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b0a97c927497e3bc36b33987abb99bf17a9a175a19af38a892dc4bbb844d7ee2", size = 4572830 },
|
186 |
+
{ url = "https://files.pythonhosted.org/packages/70/d4/994773a261d7ff98034f72c0e8251fe2755eac45e2265db4c866c1c6829c/cryptography-45.0.4-cp311-abi3-win32.whl", hash = "sha256:e00a6c10a5c53979d6242f123c0a97cff9f3abed7f064fc412c36dc521b5f257", size = 2932769 },
|
187 |
+
{ url = "https://files.pythonhosted.org/packages/5a/42/c80bd0b67e9b769b364963b5252b17778a397cefdd36fa9aa4a5f34c599a/cryptography-45.0.4-cp311-abi3-win_amd64.whl", hash = "sha256:817ee05c6c9f7a69a16200f0c90ab26d23a87701e2a284bd15156783e46dbcc8", size = 3410441 },
|
188 |
+
{ url = "https://files.pythonhosted.org/packages/ce/0b/2488c89f3a30bc821c9d96eeacfcab6ff3accc08a9601ba03339c0fd05e5/cryptography-45.0.4-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:964bcc28d867e0f5491a564b7debb3ffdd8717928d315d12e0d7defa9e43b723", size = 7031836 },
|
189 |
+
{ url = "https://files.pythonhosted.org/packages/fe/51/8c584ed426093aac257462ae62d26ad61ef1cbf5b58d8b67e6e13c39960e/cryptography-45.0.4-cp37-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:6a5bf57554e80f75a7db3d4b1dacaa2764611ae166ab42ea9a72bcdb5d577637", size = 4195746 },
|
190 |
+
{ url = "https://files.pythonhosted.org/packages/5c/7d/4b0ca4d7af95a704eef2f8f80a8199ed236aaf185d55385ae1d1610c03c2/cryptography-45.0.4-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:46cf7088bf91bdc9b26f9c55636492c1cce3e7aaf8041bbf0243f5e5325cfb2d", size = 4424456 },
|
191 |
+
{ url = "https://files.pythonhosted.org/packages/1d/45/5fabacbc6e76ff056f84d9f60eeac18819badf0cefc1b6612ee03d4ab678/cryptography-45.0.4-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:7bedbe4cc930fa4b100fc845ea1ea5788fcd7ae9562e669989c11618ae8d76ee", size = 4198495 },
|
192 |
+
{ url = "https://files.pythonhosted.org/packages/55/b7/ffc9945b290eb0a5d4dab9b7636706e3b5b92f14ee5d9d4449409d010d54/cryptography-45.0.4-cp37-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:eaa3e28ea2235b33220b949c5a0d6cf79baa80eab2eb5607ca8ab7525331b9ff", size = 3885540 },
|
193 |
+
{ url = "https://files.pythonhosted.org/packages/7f/e3/57b010282346980475e77d414080acdcb3dab9a0be63071efc2041a2c6bd/cryptography-45.0.4-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:7ef2dde4fa9408475038fc9aadfc1fb2676b174e68356359632e980c661ec8f6", size = 4452052 },
|
194 |
+
{ url = "https://files.pythonhosted.org/packages/37/e6/ddc4ac2558bf2ef517a358df26f45bc774a99bf4653e7ee34b5e749c03e3/cryptography-45.0.4-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:6a3511ae33f09094185d111160fd192c67aa0a2a8d19b54d36e4c78f651dc5ad", size = 4198024 },
|
195 |
+
{ url = "https://files.pythonhosted.org/packages/3a/c0/85fa358ddb063ec588aed4a6ea1df57dc3e3bc1712d87c8fa162d02a65fc/cryptography-45.0.4-cp37-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:06509dc70dd71fa56eaa138336244e2fbaf2ac164fc9b5e66828fccfd2b680d6", size = 4451442 },
|
196 |
+
{ url = "https://files.pythonhosted.org/packages/33/67/362d6ec1492596e73da24e669a7fbbaeb1c428d6bf49a29f7a12acffd5dc/cryptography-45.0.4-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:5f31e6b0a5a253f6aa49be67279be4a7e5a4ef259a9f33c69f7d1b1191939872", size = 4325038 },
|
197 |
+
{ url = "https://files.pythonhosted.org/packages/53/75/82a14bf047a96a1b13ebb47fb9811c4f73096cfa2e2b17c86879687f9027/cryptography-45.0.4-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:944e9ccf67a9594137f942d5b52c8d238b1b4e46c7a0c2891b7ae6e01e7c80a4", size = 4560964 },
|
198 |
+
{ url = "https://files.pythonhosted.org/packages/cd/37/1a3cba4c5a468ebf9b95523a5ef5651244693dc712001e276682c278fc00/cryptography-45.0.4-cp37-abi3-win32.whl", hash = "sha256:c22fe01e53dc65edd1945a2e6f0015e887f84ced233acecb64b4daadb32f5c97", size = 2924557 },
|
199 |
+
{ url = "https://files.pythonhosted.org/packages/2a/4b/3256759723b7e66380397d958ca07c59cfc3fb5c794fb5516758afd05d41/cryptography-45.0.4-cp37-abi3-win_amd64.whl", hash = "sha256:627ba1bc94f6adf0b0a2e35d87020285ead22d9f648c7e75bb64f367375f3b22", size = 3395508 },
|
200 |
+
{ url = "https://files.pythonhosted.org/packages/ea/ba/cf442ae99ef363855ed84b39e0fb3c106ac66b7a7703f3c9c9cfe05412cb/cryptography-45.0.4-pp311-pypy311_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4828190fb6c4bcb6ebc6331f01fe66ae838bb3bd58e753b59d4b22eb444b996c", size = 3590512 },
|
201 |
+
{ url = "https://files.pythonhosted.org/packages/28/9a/a7d5bb87d149eb99a5abdc69a41e4e47b8001d767e5f403f78bfaafc7aa7/cryptography-45.0.4-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:03dbff8411206713185b8cebe31bc5c0eb544799a50c09035733716b386e61a4", size = 4146899 },
|
202 |
+
{ url = "https://files.pythonhosted.org/packages/17/11/9361c2c71c42cc5c465cf294c8030e72fb0c87752bacbd7a3675245e3db3/cryptography-45.0.4-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:51dfbd4d26172d31150d84c19bbe06c68ea4b7f11bbc7b3a5e146b367c311349", size = 4388900 },
|
203 |
+
{ url = "https://files.pythonhosted.org/packages/c0/76/f95b83359012ee0e670da3e41c164a0c256aeedd81886f878911581d852f/cryptography-45.0.4-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:0339a692de47084969500ee455e42c58e449461e0ec845a34a6a9b9bf7df7fb8", size = 4146422 },
|
204 |
+
{ url = "https://files.pythonhosted.org/packages/09/ad/5429fcc4def93e577a5407988f89cf15305e64920203d4ac14601a9dc876/cryptography-45.0.4-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:0cf13c77d710131d33e63626bd55ae7c0efb701ebdc2b3a7952b9b23a0412862", size = 4388475 },
|
205 |
+
{ url = "https://files.pythonhosted.org/packages/99/49/0ab9774f64555a1b50102757811508f5ace451cf5dc0a2d074a4b9deca6a/cryptography-45.0.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:bbc505d1dc469ac12a0a064214879eac6294038d6b24ae9f71faae1448a9608d", size = 3337594 },
|
206 |
+
]
|
207 |
+
|
208 |
+
[[package]]
|
209 |
+
name = "exceptiongroup"
|
210 |
+
version = "1.3.0"
|
211 |
+
source = { registry = "https://pypi.org/simple" }
|
212 |
+
dependencies = [
|
213 |
+
{ name = "typing-extensions", marker = "python_full_version < '3.13'" },
|
214 |
+
]
|
215 |
+
sdist = { url = "https://files.pythonhosted.org/packages/0b/9f/a65090624ecf468cdca03533906e7c69ed7588582240cfe7cc9e770b50eb/exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88", size = 29749 }
|
216 |
+
wheels = [
|
217 |
+
{ url = "https://files.pythonhosted.org/packages/36/f4/c6e662dade71f56cd2f3735141b265c3c79293c109549c1e6933b0651ffc/exceptiongroup-1.3.0-py3-none-any.whl", hash = "sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10", size = 16674 },
|
218 |
+
]
|
219 |
+
|
220 |
+
[[package]]
|
221 |
+
name = "fastmcp"
|
222 |
+
version = "2.8.1"
|
223 |
+
source = { registry = "https://pypi.org/simple" }
|
224 |
+
dependencies = [
|
225 |
+
{ name = "authlib" },
|
226 |
+
{ name = "exceptiongroup" },
|
227 |
+
{ name = "httpx" },
|
228 |
+
{ name = "mcp" },
|
229 |
+
{ name = "openapi-pydantic" },
|
230 |
+
{ name = "python-dotenv" },
|
231 |
+
{ name = "rich" },
|
232 |
+
{ name = "typer" },
|
233 |
+
]
|
234 |
+
sdist = { url = "https://files.pythonhosted.org/packages/04/76/d9b352dd632dbac9eea3255df7bba6d83b2def769b388ec332368d7b4638/fastmcp-2.8.1.tar.gz", hash = "sha256:c89d8ce8bf53a166eda444cfdcb2c638170e62445487229fbaf340aed31beeaf", size = 2559427 }
|
235 |
+
wheels = [
|
236 |
+
{ url = "https://files.pythonhosted.org/packages/0a/f9/ecb902857d634e81287f205954ef1c69637f27b487b109bf3b4b62d3dbe7/fastmcp-2.8.1-py3-none-any.whl", hash = "sha256:3b56a7bbab6bbac64d2a251a98b3dec5bb822ab1e4e9f20bb259add028b10d44", size = 138191 },
|
237 |
+
]
|
238 |
+
|
239 |
+
[[package]]
|
240 |
+
name = "h11"
|
241 |
+
version = "0.16.0"
|
242 |
+
source = { registry = "https://pypi.org/simple" }
|
243 |
+
sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250 }
|
244 |
+
wheels = [
|
245 |
+
{ url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515 },
|
246 |
+
]
|
247 |
+
|
248 |
+
[[package]]
|
249 |
+
name = "httpcore"
|
250 |
+
version = "1.0.9"
|
251 |
+
source = { registry = "https://pypi.org/simple" }
|
252 |
+
dependencies = [
|
253 |
+
{ name = "certifi" },
|
254 |
+
{ name = "h11" },
|
255 |
+
]
|
256 |
+
sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484 }
|
257 |
+
wheels = [
|
258 |
+
{ url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784 },
|
259 |
+
]
|
260 |
+
|
261 |
+
[[package]]
|
262 |
+
name = "httpx"
|
263 |
+
version = "0.28.1"
|
264 |
+
source = { registry = "https://pypi.org/simple" }
|
265 |
+
dependencies = [
|
266 |
+
{ name = "anyio" },
|
267 |
+
{ name = "certifi" },
|
268 |
+
{ name = "httpcore" },
|
269 |
+
{ name = "idna" },
|
270 |
+
]
|
271 |
+
sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406 }
|
272 |
+
wheels = [
|
273 |
+
{ url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517 },
|
274 |
+
]
|
275 |
+
|
276 |
+
[[package]]
|
277 |
+
name = "httpx-sse"
|
278 |
+
version = "0.4.0"
|
279 |
+
source = { registry = "https://pypi.org/simple" }
|
280 |
+
sdist = { url = "https://files.pythonhosted.org/packages/4c/60/8f4281fa9bbf3c8034fd54c0e7412e66edbab6bc74c4996bd616f8d0406e/httpx-sse-0.4.0.tar.gz", hash = "sha256:1e81a3a3070ce322add1d3529ed42eb5f70817f45ed6ec915ab753f961139721", size = 12624 }
|
281 |
+
wheels = [
|
282 |
+
{ url = "https://files.pythonhosted.org/packages/e1/9b/a181f281f65d776426002f330c31849b86b31fc9d848db62e16f03ff739f/httpx_sse-0.4.0-py3-none-any.whl", hash = "sha256:f329af6eae57eaa2bdfd962b42524764af68075ea87370a2de920af5341e318f", size = 7819 },
|
283 |
+
]
|
284 |
+
|
285 |
+
[[package]]
|
286 |
+
name = "idna"
|
287 |
+
version = "3.10"
|
288 |
+
source = { registry = "https://pypi.org/simple" }
|
289 |
+
sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 }
|
290 |
+
wheels = [
|
291 |
+
{ url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 },
|
292 |
+
]
|
293 |
+
|
294 |
+
[[package]]
|
295 |
+
name = "inference-providers-mcp"
|
296 |
+
version = "0.1.0"
|
297 |
+
source = { virtual = "." }
|
298 |
+
dependencies = [
|
299 |
+
{ name = "fastmcp" },
|
300 |
+
{ name = "python-dotenv" },
|
301 |
+
{ name = "requests" },
|
302 |
+
]
|
303 |
+
|
304 |
+
[package.metadata]
|
305 |
+
requires-dist = [
|
306 |
+
{ name = "fastmcp", specifier = ">=2.0.0" },
|
307 |
+
{ name = "python-dotenv", specifier = ">=1.0.0" },
|
308 |
+
{ name = "requests", specifier = ">=2.31.0" },
|
309 |
+
]
|
310 |
+
|
311 |
+
[[package]]
|
312 |
+
name = "markdown-it-py"
|
313 |
+
version = "3.0.0"
|
314 |
+
source = { registry = "https://pypi.org/simple" }
|
315 |
+
dependencies = [
|
316 |
+
{ name = "mdurl" },
|
317 |
+
]
|
318 |
+
sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596 }
|
319 |
+
wheels = [
|
320 |
+
{ url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528 },
|
321 |
+
]
|
322 |
+
|
323 |
+
[[package]]
|
324 |
+
name = "mcp"
|
325 |
+
version = "1.9.4"
|
326 |
+
source = { registry = "https://pypi.org/simple" }
|
327 |
+
dependencies = [
|
328 |
+
{ name = "anyio" },
|
329 |
+
{ name = "httpx" },
|
330 |
+
{ name = "httpx-sse" },
|
331 |
+
{ name = "pydantic" },
|
332 |
+
{ name = "pydantic-settings" },
|
333 |
+
{ name = "python-multipart" },
|
334 |
+
{ name = "sse-starlette" },
|
335 |
+
{ name = "starlette" },
|
336 |
+
{ name = "uvicorn", marker = "sys_platform != 'emscripten'" },
|
337 |
+
]
|
338 |
+
sdist = { url = "https://files.pythonhosted.org/packages/06/f2/dc2450e566eeccf92d89a00c3e813234ad58e2ba1e31d11467a09ac4f3b9/mcp-1.9.4.tar.gz", hash = "sha256:cfb0bcd1a9535b42edaef89947b9e18a8feb49362e1cc059d6e7fc636f2cb09f", size = 333294 }
|
339 |
+
wheels = [
|
340 |
+
{ url = "https://files.pythonhosted.org/packages/97/fc/80e655c955137393c443842ffcc4feccab5b12fa7cb8de9ced90f90e6998/mcp-1.9.4-py3-none-any.whl", hash = "sha256:7fcf36b62936adb8e63f89346bccca1268eeca9bf6dfb562ee10b1dfbda9dac0", size = 130232 },
|
341 |
+
]
|
342 |
+
|
343 |
+
[[package]]
|
344 |
+
name = "mdurl"
|
345 |
+
version = "0.1.2"
|
346 |
+
source = { registry = "https://pypi.org/simple" }
|
347 |
+
sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729 }
|
348 |
+
wheels = [
|
349 |
+
{ url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979 },
|
350 |
+
]
|
351 |
+
|
352 |
+
[[package]]
|
353 |
+
name = "openapi-pydantic"
|
354 |
+
version = "0.5.1"
|
355 |
+
source = { registry = "https://pypi.org/simple" }
|
356 |
+
dependencies = [
|
357 |
+
{ name = "pydantic" },
|
358 |
+
]
|
359 |
+
sdist = { url = "https://files.pythonhosted.org/packages/02/2e/58d83848dd1a79cb92ed8e63f6ba901ca282c5f09d04af9423ec26c56fd7/openapi_pydantic-0.5.1.tar.gz", hash = "sha256:ff6835af6bde7a459fb93eb93bb92b8749b754fc6e51b2f1590a19dc3005ee0d", size = 60892 }
|
360 |
+
wheels = [
|
361 |
+
{ url = "https://files.pythonhosted.org/packages/12/cf/03675d8bd8ecbf4445504d8071adab19f5f993676795708e36402ab38263/openapi_pydantic-0.5.1-py3-none-any.whl", hash = "sha256:a3a09ef4586f5bd760a8df7f43028b60cafb6d9f61de2acba9574766255ab146", size = 96381 },
|
362 |
+
]
|
363 |
+
|
364 |
+
[[package]]
|
365 |
+
name = "pycparser"
|
366 |
+
version = "2.22"
|
367 |
+
source = { registry = "https://pypi.org/simple" }
|
368 |
+
sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736 }
|
369 |
+
wheels = [
|
370 |
+
{ url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552 },
|
371 |
+
]
|
372 |
+
|
373 |
+
[[package]]
|
374 |
+
name = "pydantic"
|
375 |
+
version = "2.11.7"
|
376 |
+
source = { registry = "https://pypi.org/simple" }
|
377 |
+
dependencies = [
|
378 |
+
{ name = "annotated-types" },
|
379 |
+
{ name = "pydantic-core" },
|
380 |
+
{ name = "typing-extensions" },
|
381 |
+
{ name = "typing-inspection" },
|
382 |
+
]
|
383 |
+
sdist = { url = "https://files.pythonhosted.org/packages/00/dd/4325abf92c39ba8623b5af936ddb36ffcfe0beae70405d456ab1fb2f5b8c/pydantic-2.11.7.tar.gz", hash = "sha256:d989c3c6cb79469287b1569f7447a17848c998458d49ebe294e975b9baf0f0db", size = 788350 }
|
384 |
+
wheels = [
|
385 |
+
{ url = "https://files.pythonhosted.org/packages/6a/c0/ec2b1c8712ca690e5d61979dee872603e92b8a32f94cc1b72d53beab008a/pydantic-2.11.7-py3-none-any.whl", hash = "sha256:dde5df002701f6de26248661f6835bbe296a47bf73990135c7d07ce741b9623b", size = 444782 },
|
386 |
+
]
|
387 |
+
|
388 |
+
[[package]]
|
389 |
+
name = "pydantic-core"
|
390 |
+
version = "2.33.2"
|
391 |
+
source = { registry = "https://pypi.org/simple" }
|
392 |
+
dependencies = [
|
393 |
+
{ name = "typing-extensions" },
|
394 |
+
]
|
395 |
+
sdist = { url = "https://files.pythonhosted.org/packages/ad/88/5f2260bdfae97aabf98f1778d43f69574390ad787afb646292a638c923d4/pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc", size = 435195 }
|
396 |
+
wheels = [
|
397 |
+
{ url = "https://files.pythonhosted.org/packages/3f/8d/71db63483d518cbbf290261a1fc2839d17ff89fce7089e08cad07ccfce67/pydantic_core-2.33.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:4c5b0a576fb381edd6d27f0a85915c6daf2f8138dc5c267a57c08a62900758c7", size = 2028584 },
|
398 |
+
{ url = "https://files.pythonhosted.org/packages/24/2f/3cfa7244ae292dd850989f328722d2aef313f74ffc471184dc509e1e4e5a/pydantic_core-2.33.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e799c050df38a639db758c617ec771fd8fb7a5f8eaaa4b27b101f266b216a246", size = 1855071 },
|
399 |
+
{ url = "https://files.pythonhosted.org/packages/b3/d3/4ae42d33f5e3f50dd467761304be2fa0a9417fbf09735bc2cce003480f2a/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc46a01bf8d62f227d5ecee74178ffc448ff4e5197c756331f71efcc66dc980f", size = 1897823 },
|
400 |
+
{ url = "https://files.pythonhosted.org/packages/f4/f3/aa5976e8352b7695ff808599794b1fba2a9ae2ee954a3426855935799488/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a144d4f717285c6d9234a66778059f33a89096dfb9b39117663fd8413d582dcc", size = 1983792 },
|
401 |
+
{ url = "https://files.pythonhosted.org/packages/d5/7a/cda9b5a23c552037717f2b2a5257e9b2bfe45e687386df9591eff7b46d28/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:73cf6373c21bc80b2e0dc88444f41ae60b2f070ed02095754eb5a01df12256de", size = 2136338 },
|
402 |
+
{ url = "https://files.pythonhosted.org/packages/2b/9f/b8f9ec8dd1417eb9da784e91e1667d58a2a4a7b7b34cf4af765ef663a7e5/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3dc625f4aa79713512d1976fe9f0bc99f706a9dee21dfd1810b4bbbf228d0e8a", size = 2730998 },
|
403 |
+
{ url = "https://files.pythonhosted.org/packages/47/bc/cd720e078576bdb8255d5032c5d63ee5c0bf4b7173dd955185a1d658c456/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b21b5549499972441da4758d662aeea93f1923f953e9cbaff14b8b9565aef", size = 2003200 },
|
404 |
+
{ url = "https://files.pythonhosted.org/packages/ca/22/3602b895ee2cd29d11a2b349372446ae9727c32e78a94b3d588a40fdf187/pydantic_core-2.33.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bdc25f3681f7b78572699569514036afe3c243bc3059d3942624e936ec93450e", size = 2113890 },
|
405 |
+
{ url = "https://files.pythonhosted.org/packages/ff/e6/e3c5908c03cf00d629eb38393a98fccc38ee0ce8ecce32f69fc7d7b558a7/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fe5b32187cbc0c862ee201ad66c30cf218e5ed468ec8dc1cf49dec66e160cc4d", size = 2073359 },
|
406 |
+
{ url = "https://files.pythonhosted.org/packages/12/e7/6a36a07c59ebefc8777d1ffdaf5ae71b06b21952582e4b07eba88a421c79/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:bc7aee6f634a6f4a95676fcb5d6559a2c2a390330098dba5e5a5f28a2e4ada30", size = 2245883 },
|
407 |
+
{ url = "https://files.pythonhosted.org/packages/16/3f/59b3187aaa6cc0c1e6616e8045b284de2b6a87b027cce2ffcea073adf1d2/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:235f45e5dbcccf6bd99f9f472858849f73d11120d76ea8707115415f8e5ebebf", size = 2241074 },
|
408 |
+
{ url = "https://files.pythonhosted.org/packages/e0/ed/55532bb88f674d5d8f67ab121a2a13c385df382de2a1677f30ad385f7438/pydantic_core-2.33.2-cp311-cp311-win32.whl", hash = "sha256:6368900c2d3ef09b69cb0b913f9f8263b03786e5b2a387706c5afb66800efd51", size = 1910538 },
|
409 |
+
{ url = "https://files.pythonhosted.org/packages/fe/1b/25b7cccd4519c0b23c2dd636ad39d381abf113085ce4f7bec2b0dc755eb1/pydantic_core-2.33.2-cp311-cp311-win_amd64.whl", hash = "sha256:1e063337ef9e9820c77acc768546325ebe04ee38b08703244c1309cccc4f1bab", size = 1952909 },
|
410 |
+
{ url = "https://files.pythonhosted.org/packages/49/a9/d809358e49126438055884c4366a1f6227f0f84f635a9014e2deb9b9de54/pydantic_core-2.33.2-cp311-cp311-win_arm64.whl", hash = "sha256:6b99022f1d19bc32a4c2a0d544fc9a76e3be90f0b3f4af413f87d38749300e65", size = 1897786 },
|
411 |
+
{ url = "https://files.pythonhosted.org/packages/18/8a/2b41c97f554ec8c71f2a8a5f85cb56a8b0956addfe8b0efb5b3d77e8bdc3/pydantic_core-2.33.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a7ec89dc587667f22b6a0b6579c249fca9026ce7c333fc142ba42411fa243cdc", size = 2009000 },
|
412 |
+
{ url = "https://files.pythonhosted.org/packages/a1/02/6224312aacb3c8ecbaa959897af57181fb6cf3a3d7917fd44d0f2917e6f2/pydantic_core-2.33.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3c6db6e52c6d70aa0d00d45cdb9b40f0433b96380071ea80b09277dba021ddf7", size = 1847996 },
|
413 |
+
{ url = "https://files.pythonhosted.org/packages/d6/46/6dcdf084a523dbe0a0be59d054734b86a981726f221f4562aed313dbcb49/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025", size = 1880957 },
|
414 |
+
{ url = "https://files.pythonhosted.org/packages/ec/6b/1ec2c03837ac00886ba8160ce041ce4e325b41d06a034adbef11339ae422/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011", size = 1964199 },
|
415 |
+
{ url = "https://files.pythonhosted.org/packages/2d/1d/6bf34d6adb9debd9136bd197ca72642203ce9aaaa85cfcbfcf20f9696e83/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f", size = 2120296 },
|
416 |
+
{ url = "https://files.pythonhosted.org/packages/e0/94/2bd0aaf5a591e974b32a9f7123f16637776c304471a0ab33cf263cf5591a/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88", size = 2676109 },
|
417 |
+
{ url = "https://files.pythonhosted.org/packages/f9/41/4b043778cf9c4285d59742281a769eac371b9e47e35f98ad321349cc5d61/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1", size = 2002028 },
|
418 |
+
{ url = "https://files.pythonhosted.org/packages/cb/d5/7bb781bf2748ce3d03af04d5c969fa1308880e1dca35a9bd94e1a96a922e/pydantic_core-2.33.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b", size = 2100044 },
|
419 |
+
{ url = "https://files.pythonhosted.org/packages/fe/36/def5e53e1eb0ad896785702a5bbfd25eed546cdcf4087ad285021a90ed53/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1", size = 2058881 },
|
420 |
+
{ url = "https://files.pythonhosted.org/packages/01/6c/57f8d70b2ee57fc3dc8b9610315949837fa8c11d86927b9bb044f8705419/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6", size = 2227034 },
|
421 |
+
{ url = "https://files.pythonhosted.org/packages/27/b9/9c17f0396a82b3d5cbea4c24d742083422639e7bb1d5bf600e12cb176a13/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea", size = 2234187 },
|
422 |
+
{ url = "https://files.pythonhosted.org/packages/b0/6a/adf5734ffd52bf86d865093ad70b2ce543415e0e356f6cacabbc0d9ad910/pydantic_core-2.33.2-cp312-cp312-win32.whl", hash = "sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290", size = 1892628 },
|
423 |
+
{ url = "https://files.pythonhosted.org/packages/43/e4/5479fecb3606c1368d496a825d8411e126133c41224c1e7238be58b87d7e/pydantic_core-2.33.2-cp312-cp312-win_amd64.whl", hash = "sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2", size = 1955866 },
|
424 |
+
{ url = "https://files.pythonhosted.org/packages/0d/24/8b11e8b3e2be9dd82df4b11408a67c61bb4dc4f8e11b5b0fc888b38118b5/pydantic_core-2.33.2-cp312-cp312-win_arm64.whl", hash = "sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab", size = 1888894 },
|
425 |
+
{ url = "https://files.pythonhosted.org/packages/46/8c/99040727b41f56616573a28771b1bfa08a3d3fe74d3d513f01251f79f172/pydantic_core-2.33.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1082dd3e2d7109ad8b7da48e1d4710c8d06c253cbc4a27c1cff4fbcaa97a9e3f", size = 2015688 },
|
426 |
+
{ url = "https://files.pythonhosted.org/packages/3a/cc/5999d1eb705a6cefc31f0b4a90e9f7fc400539b1a1030529700cc1b51838/pydantic_core-2.33.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f517ca031dfc037a9c07e748cefd8d96235088b83b4f4ba8939105d20fa1dcd6", size = 1844808 },
|
427 |
+
{ url = "https://files.pythonhosted.org/packages/6f/5e/a0a7b8885c98889a18b6e376f344da1ef323d270b44edf8174d6bce4d622/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef", size = 1885580 },
|
428 |
+
{ url = "https://files.pythonhosted.org/packages/3b/2a/953581f343c7d11a304581156618c3f592435523dd9d79865903272c256a/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a", size = 1973859 },
|
429 |
+
{ url = "https://files.pythonhosted.org/packages/e6/55/f1a813904771c03a3f97f676c62cca0c0a4138654107c1b61f19c644868b/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916", size = 2120810 },
|
430 |
+
{ url = "https://files.pythonhosted.org/packages/aa/c3/053389835a996e18853ba107a63caae0b9deb4a276c6b472931ea9ae6e48/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a", size = 2676498 },
|
431 |
+
{ url = "https://files.pythonhosted.org/packages/eb/3c/f4abd740877a35abade05e437245b192f9d0ffb48bbbbd708df33d3cda37/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d", size = 2000611 },
|
432 |
+
{ url = "https://files.pythonhosted.org/packages/59/a7/63ef2fed1837d1121a894d0ce88439fe3e3b3e48c7543b2a4479eb99c2bd/pydantic_core-2.33.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56", size = 2107924 },
|
433 |
+
{ url = "https://files.pythonhosted.org/packages/04/8f/2551964ef045669801675f1cfc3b0d74147f4901c3ffa42be2ddb1f0efc4/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5", size = 2063196 },
|
434 |
+
{ url = "https://files.pythonhosted.org/packages/26/bd/d9602777e77fc6dbb0c7db9ad356e9a985825547dce5ad1d30ee04903918/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e", size = 2236389 },
|
435 |
+
{ url = "https://files.pythonhosted.org/packages/42/db/0e950daa7e2230423ab342ae918a794964b053bec24ba8af013fc7c94846/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162", size = 2239223 },
|
436 |
+
{ url = "https://files.pythonhosted.org/packages/58/4d/4f937099c545a8a17eb52cb67fe0447fd9a373b348ccfa9a87f141eeb00f/pydantic_core-2.33.2-cp313-cp313-win32.whl", hash = "sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849", size = 1900473 },
|
437 |
+
{ url = "https://files.pythonhosted.org/packages/a0/75/4a0a9bac998d78d889def5e4ef2b065acba8cae8c93696906c3a91f310ca/pydantic_core-2.33.2-cp313-cp313-win_amd64.whl", hash = "sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9", size = 1955269 },
|
438 |
+
{ url = "https://files.pythonhosted.org/packages/f9/86/1beda0576969592f1497b4ce8e7bc8cbdf614c352426271b1b10d5f0aa64/pydantic_core-2.33.2-cp313-cp313-win_arm64.whl", hash = "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9", size = 1893921 },
|
439 |
+
{ url = "https://files.pythonhosted.org/packages/a4/7d/e09391c2eebeab681df2b74bfe6c43422fffede8dc74187b2b0bf6fd7571/pydantic_core-2.33.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61c18fba8e5e9db3ab908620af374db0ac1baa69f0f32df4f61ae23f15e586ac", size = 1806162 },
|
440 |
+
{ url = "https://files.pythonhosted.org/packages/f1/3d/847b6b1fed9f8ed3bb95a9ad04fbd0b212e832d4f0f50ff4d9ee5a9f15cf/pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5", size = 1981560 },
|
441 |
+
{ url = "https://files.pythonhosted.org/packages/6f/9a/e73262f6c6656262b5fdd723ad90f518f579b7bc8622e43a942eec53c938/pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9", size = 1935777 },
|
442 |
+
{ url = "https://files.pythonhosted.org/packages/7b/27/d4ae6487d73948d6f20dddcd94be4ea43e74349b56eba82e9bdee2d7494c/pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:dd14041875d09cc0f9308e37a6f8b65f5585cf2598a53aa0123df8b129d481f8", size = 2025200 },
|
443 |
+
{ url = "https://files.pythonhosted.org/packages/f1/b8/b3cb95375f05d33801024079b9392a5ab45267a63400bf1866e7ce0f0de4/pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d87c561733f66531dced0da6e864f44ebf89a8fba55f31407b00c2f7f9449593", size = 1859123 },
|
444 |
+
{ url = "https://files.pythonhosted.org/packages/05/bc/0d0b5adeda59a261cd30a1235a445bf55c7e46ae44aea28f7bd6ed46e091/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f82865531efd18d6e07a04a17331af02cb7a651583c418df8266f17a63c6612", size = 1892852 },
|
445 |
+
{ url = "https://files.pythonhosted.org/packages/3e/11/d37bdebbda2e449cb3f519f6ce950927b56d62f0b84fd9cb9e372a26a3d5/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bfb5112df54209d820d7bf9317c7a6c9025ea52e49f46b6a2060104bba37de7", size = 2067484 },
|
446 |
+
{ url = "https://files.pythonhosted.org/packages/8c/55/1f95f0a05ce72ecb02a8a8a1c3be0579bbc29b1d5ab68f1378b7bebc5057/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:64632ff9d614e5eecfb495796ad51b0ed98c453e447a76bcbeeb69615079fc7e", size = 2108896 },
|
447 |
+
{ url = "https://files.pythonhosted.org/packages/53/89/2b2de6c81fa131f423246a9109d7b2a375e83968ad0800d6e57d0574629b/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f889f7a40498cc077332c7ab6b4608d296d852182211787d4f3ee377aaae66e8", size = 2069475 },
|
448 |
+
{ url = "https://files.pythonhosted.org/packages/b8/e9/1f7efbe20d0b2b10f6718944b5d8ece9152390904f29a78e68d4e7961159/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:de4b83bb311557e439b9e186f733f6c645b9417c84e2eb8203f3f820a4b988bf", size = 2239013 },
|
449 |
+
{ url = "https://files.pythonhosted.org/packages/3c/b2/5309c905a93811524a49b4e031e9851a6b00ff0fb668794472ea7746b448/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:82f68293f055f51b51ea42fafc74b6aad03e70e191799430b90c13d643059ebb", size = 2238715 },
|
450 |
+
{ url = "https://files.pythonhosted.org/packages/32/56/8a7ca5d2cd2cda1d245d34b1c9a942920a718082ae8e54e5f3e5a58b7add/pydantic_core-2.33.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:329467cecfb529c925cf2bbd4d60d2c509bc2fb52a20c1045bf09bb70971a9c1", size = 2066757 },
|
451 |
+
]
|
452 |
+
|
453 |
+
[[package]]
|
454 |
+
name = "pydantic-settings"
|
455 |
+
version = "2.10.0"
|
456 |
+
source = { registry = "https://pypi.org/simple" }
|
457 |
+
dependencies = [
|
458 |
+
{ name = "pydantic" },
|
459 |
+
{ name = "python-dotenv" },
|
460 |
+
{ name = "typing-inspection" },
|
461 |
+
]
|
462 |
+
sdist = { url = "https://files.pythonhosted.org/packages/c2/ef/3d61472b7801c896f9efd9bb8750977d9577098b05224c5c41820690155e/pydantic_settings-2.10.0.tar.gz", hash = "sha256:7a12e0767ba283954f3fd3fefdd0df3af21b28aa849c40c35811d52d682fa876", size = 172625 }
|
463 |
+
wheels = [
|
464 |
+
{ url = "https://files.pythonhosted.org/packages/7d/9e/fce9331fecf1d2761ff0516c5dceab8a5fd415e82943e727dc4c5fa84a90/pydantic_settings-2.10.0-py3-none-any.whl", hash = "sha256:33781dfa1c7405d5ed2b6f150830a93bb58462a847357bd8f162f8bacb77c027", size = 45232 },
|
465 |
+
]
|
466 |
+
|
467 |
+
[[package]]
|
468 |
+
name = "pygments"
|
469 |
+
version = "2.19.1"
|
470 |
+
source = { registry = "https://pypi.org/simple" }
|
471 |
+
sdist = { url = "https://files.pythonhosted.org/packages/7c/2d/c3338d48ea6cc0feb8446d8e6937e1408088a72a39937982cc6111d17f84/pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f", size = 4968581 }
|
472 |
+
wheels = [
|
473 |
+
{ url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c", size = 1225293 },
|
474 |
+
]
|
475 |
+
|
476 |
+
[[package]]
|
477 |
+
name = "python-dotenv"
|
478 |
+
version = "1.1.0"
|
479 |
+
source = { registry = "https://pypi.org/simple" }
|
480 |
+
sdist = { url = "https://files.pythonhosted.org/packages/88/2c/7bb1416c5620485aa793f2de31d3df393d3686aa8a8506d11e10e13c5baf/python_dotenv-1.1.0.tar.gz", hash = "sha256:41f90bc6f5f177fb41f53e87666db362025010eb28f60a01c9143bfa33a2b2d5", size = 39920 }
|
481 |
+
wheels = [
|
482 |
+
{ url = "https://files.pythonhosted.org/packages/1e/18/98a99ad95133c6a6e2005fe89faedf294a748bd5dc803008059409ac9b1e/python_dotenv-1.1.0-py3-none-any.whl", hash = "sha256:d7c01d9e2293916c18baf562d95698754b0dbbb5e74d457c45d4f6561fb9d55d", size = 20256 },
|
483 |
+
]
|
484 |
+
|
485 |
+
[[package]]
|
486 |
+
name = "python-multipart"
|
487 |
+
version = "0.0.20"
|
488 |
+
source = { registry = "https://pypi.org/simple" }
|
489 |
+
sdist = { url = "https://files.pythonhosted.org/packages/f3/87/f44d7c9f274c7ee665a29b885ec97089ec5dc034c7f3fafa03da9e39a09e/python_multipart-0.0.20.tar.gz", hash = "sha256:8dd0cab45b8e23064ae09147625994d090fa46f5b0d1e13af944c331a7fa9d13", size = 37158 }
|
490 |
+
wheels = [
|
491 |
+
{ url = "https://files.pythonhosted.org/packages/45/58/38b5afbc1a800eeea951b9285d3912613f2603bdf897a4ab0f4bd7f405fc/python_multipart-0.0.20-py3-none-any.whl", hash = "sha256:8a62d3a8335e06589fe01f2a3e178cdcc632f3fbe0d492ad9ee0ec35aab1f104", size = 24546 },
|
492 |
+
]
|
493 |
+
|
494 |
+
[[package]]
|
495 |
+
name = "requests"
|
496 |
+
version = "2.32.4"
|
497 |
+
source = { registry = "https://pypi.org/simple" }
|
498 |
+
dependencies = [
|
499 |
+
{ name = "certifi" },
|
500 |
+
{ name = "charset-normalizer" },
|
501 |
+
{ name = "idna" },
|
502 |
+
{ name = "urllib3" },
|
503 |
+
]
|
504 |
+
sdist = { url = "https://files.pythonhosted.org/packages/e1/0a/929373653770d8a0d7ea76c37de6e41f11eb07559b103b1c02cafb3f7cf8/requests-2.32.4.tar.gz", hash = "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422", size = 135258 }
|
505 |
+
wheels = [
|
506 |
+
{ url = "https://files.pythonhosted.org/packages/7c/e4/56027c4a6b4ae70ca9de302488c5ca95ad4a39e190093d6c1a8ace08341b/requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c", size = 64847 },
|
507 |
+
]
|
508 |
+
|
509 |
+
[[package]]
|
510 |
+
name = "rich"
|
511 |
+
version = "14.0.0"
|
512 |
+
source = { registry = "https://pypi.org/simple" }
|
513 |
+
dependencies = [
|
514 |
+
{ name = "markdown-it-py" },
|
515 |
+
{ name = "pygments" },
|
516 |
+
]
|
517 |
+
sdist = { url = "https://files.pythonhosted.org/packages/a1/53/830aa4c3066a8ab0ae9a9955976fb770fe9c6102117c8ec4ab3ea62d89e8/rich-14.0.0.tar.gz", hash = "sha256:82f1bc23a6a21ebca4ae0c45af9bdbc492ed20231dcb63f297d6d1021a9d5725", size = 224078 }
|
518 |
+
wheels = [
|
519 |
+
{ url = "https://files.pythonhosted.org/packages/0d/9b/63f4c7ebc259242c89b3acafdb37b41d1185c07ff0011164674e9076b491/rich-14.0.0-py3-none-any.whl", hash = "sha256:1c9491e1951aac09caffd42f448ee3d04e58923ffe14993f6e83068dc395d7e0", size = 243229 },
|
520 |
+
]
|
521 |
+
|
522 |
+
[[package]]
|
523 |
+
name = "shellingham"
|
524 |
+
version = "1.5.4"
|
525 |
+
source = { registry = "https://pypi.org/simple" }
|
526 |
+
sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310 }
|
527 |
+
wheels = [
|
528 |
+
{ url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755 },
|
529 |
+
]
|
530 |
+
|
531 |
+
[[package]]
|
532 |
+
name = "sniffio"
|
533 |
+
version = "1.3.1"
|
534 |
+
source = { registry = "https://pypi.org/simple" }
|
535 |
+
sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372 }
|
536 |
+
wheels = [
|
537 |
+
{ url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235 },
|
538 |
+
]
|
539 |
+
|
540 |
+
[[package]]
|
541 |
+
name = "sse-starlette"
|
542 |
+
version = "2.3.6"
|
543 |
+
source = { registry = "https://pypi.org/simple" }
|
544 |
+
dependencies = [
|
545 |
+
{ name = "anyio" },
|
546 |
+
]
|
547 |
+
sdist = { url = "https://files.pythonhosted.org/packages/8c/f4/989bc70cb8091eda43a9034ef969b25145291f3601703b82766e5172dfed/sse_starlette-2.3.6.tar.gz", hash = "sha256:0382336f7d4ec30160cf9ca0518962905e1b69b72d6c1c995131e0a703b436e3", size = 18284 }
|
548 |
+
wheels = [
|
549 |
+
{ url = "https://files.pythonhosted.org/packages/81/05/78850ac6e79af5b9508f8841b0f26aa9fd329a1ba00bf65453c2d312bcc8/sse_starlette-2.3.6-py3-none-any.whl", hash = "sha256:d49a8285b182f6e2228e2609c350398b2ca2c36216c2675d875f81e93548f760", size = 10606 },
|
550 |
+
]
|
551 |
+
|
552 |
+
[[package]]
|
553 |
+
name = "starlette"
|
554 |
+
version = "0.46.2"
|
555 |
+
source = { registry = "https://pypi.org/simple" }
|
556 |
+
dependencies = [
|
557 |
+
{ name = "anyio" },
|
558 |
+
]
|
559 |
+
sdist = { url = "https://files.pythonhosted.org/packages/ce/20/08dfcd9c983f6a6f4a1000d934b9e6d626cff8d2eeb77a89a68eef20a2b7/starlette-0.46.2.tar.gz", hash = "sha256:7f7361f34eed179294600af672f565727419830b54b7b084efe44bb82d2fccd5", size = 2580846 }
|
560 |
+
wheels = [
|
561 |
+
{ url = "https://files.pythonhosted.org/packages/8b/0c/9d30a4ebeb6db2b25a841afbb80f6ef9a854fc3b41be131d249a977b4959/starlette-0.46.2-py3-none-any.whl", hash = "sha256:595633ce89f8ffa71a015caed34a5b2dc1c0cdb3f0f1fbd1e69339cf2abeec35", size = 72037 },
|
562 |
+
]
|
563 |
+
|
564 |
+
[[package]]
|
565 |
+
name = "typer"
|
566 |
+
version = "0.16.0"
|
567 |
+
source = { registry = "https://pypi.org/simple" }
|
568 |
+
dependencies = [
|
569 |
+
{ name = "click" },
|
570 |
+
{ name = "rich" },
|
571 |
+
{ name = "shellingham" },
|
572 |
+
{ name = "typing-extensions" },
|
573 |
+
]
|
574 |
+
sdist = { url = "https://files.pythonhosted.org/packages/c5/8c/7d682431efca5fd290017663ea4588bf6f2c6aad085c7f108c5dbc316e70/typer-0.16.0.tar.gz", hash = "sha256:af377ffaee1dbe37ae9440cb4e8f11686ea5ce4e9bae01b84ae7c63b87f1dd3b", size = 102625 }
|
575 |
+
wheels = [
|
576 |
+
{ url = "https://files.pythonhosted.org/packages/76/42/3efaf858001d2c2913de7f354563e3a3a2f0decae3efe98427125a8f441e/typer-0.16.0-py3-none-any.whl", hash = "sha256:1f79bed11d4d02d4310e3c1b7ba594183bcedb0ac73b27a9e5f28f6fb5b98855", size = 46317 },
|
577 |
+
]
|
578 |
+
|
579 |
+
[[package]]
|
580 |
+
name = "typing-extensions"
|
581 |
+
version = "4.14.0"
|
582 |
+
source = { registry = "https://pypi.org/simple" }
|
583 |
+
sdist = { url = "https://files.pythonhosted.org/packages/d1/bc/51647cd02527e87d05cb083ccc402f93e441606ff1f01739a62c8ad09ba5/typing_extensions-4.14.0.tar.gz", hash = "sha256:8676b788e32f02ab42d9e7c61324048ae4c6d844a399eebace3d4979d75ceef4", size = 107423 }
|
584 |
+
wheels = [
|
585 |
+
{ url = "https://files.pythonhosted.org/packages/69/e0/552843e0d356fbb5256d21449fa957fa4eff3bbc135a74a691ee70c7c5da/typing_extensions-4.14.0-py3-none-any.whl", hash = "sha256:a1514509136dd0b477638fc68d6a91497af5076466ad0fa6c338e44e359944af", size = 43839 },
|
586 |
+
]
|
587 |
+
|
588 |
+
[[package]]
|
589 |
+
name = "typing-inspection"
|
590 |
+
version = "0.4.1"
|
591 |
+
source = { registry = "https://pypi.org/simple" }
|
592 |
+
dependencies = [
|
593 |
+
{ name = "typing-extensions" },
|
594 |
+
]
|
595 |
+
sdist = { url = "https://files.pythonhosted.org/packages/f8/b1/0c11f5058406b3af7609f121aaa6b609744687f1d158b3c3a5bf4cc94238/typing_inspection-0.4.1.tar.gz", hash = "sha256:6ae134cc0203c33377d43188d4064e9b357dba58cff3185f22924610e70a9d28", size = 75726 }
|
596 |
+
wheels = [
|
597 |
+
{ url = "https://files.pythonhosted.org/packages/17/69/cd203477f944c353c31bade965f880aa1061fd6bf05ded0726ca845b6ff7/typing_inspection-0.4.1-py3-none-any.whl", hash = "sha256:389055682238f53b04f7badcb49b989835495a96700ced5dab2d8feae4b26f51", size = 14552 },
|
598 |
+
]
|
599 |
+
|
600 |
+
[[package]]
|
601 |
+
name = "urllib3"
|
602 |
+
version = "2.5.0"
|
603 |
+
source = { registry = "https://pypi.org/simple" }
|
604 |
+
sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599c47dd506532914ce044817c7752a79b6a51286319bc/urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", size = 393185 }
|
605 |
+
wheels = [
|
606 |
+
{ url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795 },
|
607 |
+
]
|
608 |
+
|
609 |
+
[[package]]
|
610 |
+
name = "uvicorn"
|
611 |
+
version = "0.34.3"
|
612 |
+
source = { registry = "https://pypi.org/simple" }
|
613 |
+
dependencies = [
|
614 |
+
{ name = "click" },
|
615 |
+
{ name = "h11" },
|
616 |
+
]
|
617 |
+
sdist = { url = "https://files.pythonhosted.org/packages/de/ad/713be230bcda622eaa35c28f0d328c3675c371238470abdea52417f17a8e/uvicorn-0.34.3.tar.gz", hash = "sha256:35919a9a979d7a59334b6b10e05d77c1d0d574c50e0fc98b8b1a0f165708b55a", size = 76631 }
|
618 |
+
wheels = [
|
619 |
+
{ url = "https://files.pythonhosted.org/packages/6d/0d/8adfeaa62945f90d19ddc461c55f4a50c258af7662d34b6a3d5d1f8646f6/uvicorn-0.34.3-py3-none-any.whl", hash = "sha256:16246631db62bdfbf069b0645177d6e8a77ba950cfedbfd093acef9444e4d885", size = 62431 },
|
620 |
+
]
|