Commit
·
089cc3a
1
Parent(s):
a0b8f08
Setup from HF guide
Browse filesSigned-off-by: Aivin V. Solatorio <avsolatorio@gmail.com>
- gradio_mcp_server.py +50 -0
- mcp_client.py +280 -0
- pyproject.toml +1 -0
- uv.lock +104 -1
gradio_mcp_server.py
ADDED
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from mcp.server.fastmcp import FastMCP
|
2 |
+
import json
|
3 |
+
import sys
|
4 |
+
import io
|
5 |
+
import time
|
6 |
+
from gradio_client import Client
|
7 |
+
|
8 |
+
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8", errors="replace")
|
9 |
+
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding="utf-8", errors="replace")
|
10 |
+
|
11 |
+
mcp = FastMCP("huggingface_spaces_image_display")
|
12 |
+
|
13 |
+
|
14 |
+
@mcp.tool()
|
15 |
+
async def generate_image(prompt: str, width: int = 512, height: int = 512) -> str:
|
16 |
+
"""Generate an image using SanaSprint model.
|
17 |
+
|
18 |
+
Args:
|
19 |
+
prompt: Text prompt describing the image to generate
|
20 |
+
width: Image width (default: 512)
|
21 |
+
height: Image height (default: 512)
|
22 |
+
"""
|
23 |
+
client = Client("https://ysharma-sanasprint.hf.space/")
|
24 |
+
|
25 |
+
try:
|
26 |
+
result = client.predict(
|
27 |
+
prompt, "0.6B", 0, True, width, height, 4.0, 2, api_name="/infer"
|
28 |
+
)
|
29 |
+
|
30 |
+
if isinstance(result, list) and len(result) >= 1:
|
31 |
+
image_data = result[0]
|
32 |
+
if isinstance(image_data, dict) and "url" in image_data:
|
33 |
+
return json.dumps(
|
34 |
+
{
|
35 |
+
"type": "image",
|
36 |
+
"url": image_data["url"],
|
37 |
+
"message": f"Generated image for prompt: {prompt}",
|
38 |
+
}
|
39 |
+
)
|
40 |
+
|
41 |
+
return json.dumps({"type": "error", "message": "Failed to generate image"})
|
42 |
+
|
43 |
+
except Exception as e:
|
44 |
+
return json.dumps(
|
45 |
+
{"type": "error", "message": f"Error generating image: {str(e)}"}
|
46 |
+
)
|
47 |
+
|
48 |
+
|
49 |
+
if __name__ == "__main__":
|
50 |
+
mcp.run(transport="stdio")
|
mcp_client.py
ADDED
@@ -0,0 +1,280 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import asyncio
|
2 |
+
import os
|
3 |
+
import json
|
4 |
+
from typing import List, Dict, Any, Union
|
5 |
+
from contextlib import AsyncExitStack
|
6 |
+
|
7 |
+
import gradio as gr
|
8 |
+
from gradio.components.chatbot import ChatMessage
|
9 |
+
from mcp import ClientSession, StdioServerParameters
|
10 |
+
from mcp.client.stdio import stdio_client
|
11 |
+
from anthropic import Anthropic
|
12 |
+
from dotenv import load_dotenv
|
13 |
+
|
14 |
+
load_dotenv()
|
15 |
+
|
16 |
+
loop = asyncio.new_event_loop()
|
17 |
+
asyncio.set_event_loop(loop)
|
18 |
+
|
19 |
+
|
20 |
+
class MCPClientWrapper:
|
21 |
+
def __init__(self):
|
22 |
+
self.session = None
|
23 |
+
self.exit_stack = None
|
24 |
+
self.anthropic = Anthropic()
|
25 |
+
self.tools = []
|
26 |
+
|
27 |
+
def connect(self, server_path: str) -> str:
|
28 |
+
return loop.run_until_complete(self._connect(server_path))
|
29 |
+
|
30 |
+
async def _connect(self, server_path: str) -> str:
|
31 |
+
if self.exit_stack:
|
32 |
+
await self.exit_stack.aclose()
|
33 |
+
|
34 |
+
self.exit_stack = AsyncExitStack()
|
35 |
+
|
36 |
+
is_python = server_path.endswith(".py")
|
37 |
+
command = "python" if is_python else "node"
|
38 |
+
|
39 |
+
server_params = StdioServerParameters(
|
40 |
+
command=command,
|
41 |
+
args=[server_path],
|
42 |
+
env={"PYTHONIOENCODING": "utf-8", "PYTHONUNBUFFERED": "1"},
|
43 |
+
)
|
44 |
+
|
45 |
+
stdio_transport = await self.exit_stack.enter_async_context(
|
46 |
+
stdio_client(server_params)
|
47 |
+
)
|
48 |
+
self.stdio, self.write = stdio_transport
|
49 |
+
|
50 |
+
self.session = await self.exit_stack.enter_async_context(
|
51 |
+
ClientSession(self.stdio, self.write)
|
52 |
+
)
|
53 |
+
await self.session.initialize()
|
54 |
+
|
55 |
+
response = await self.session.list_tools()
|
56 |
+
self.tools = [
|
57 |
+
{
|
58 |
+
"name": tool.name,
|
59 |
+
"description": tool.description,
|
60 |
+
"input_schema": tool.inputSchema,
|
61 |
+
}
|
62 |
+
for tool in response.tools
|
63 |
+
]
|
64 |
+
|
65 |
+
tool_names = [tool["name"] for tool in self.tools]
|
66 |
+
return f"Connected to MCP server. Available tools: {', '.join(tool_names)}"
|
67 |
+
|
68 |
+
def process_message(
|
69 |
+
self, message: str, history: List[Union[Dict[str, Any], ChatMessage]]
|
70 |
+
) -> tuple:
|
71 |
+
if not self.session:
|
72 |
+
return history + [
|
73 |
+
{"role": "user", "content": message},
|
74 |
+
{
|
75 |
+
"role": "assistant",
|
76 |
+
"content": "Please connect to an MCP server first.",
|
77 |
+
},
|
78 |
+
], gr.Textbox(value="")
|
79 |
+
|
80 |
+
new_messages = loop.run_until_complete(self._process_query(message, history))
|
81 |
+
return history + [
|
82 |
+
{"role": "user", "content": message}
|
83 |
+
] + new_messages, gr.Textbox(value="")
|
84 |
+
|
85 |
+
async def _process_query(
|
86 |
+
self, message: str, history: List[Union[Dict[str, Any], ChatMessage]]
|
87 |
+
):
|
88 |
+
claude_messages = []
|
89 |
+
for msg in history:
|
90 |
+
if isinstance(msg, ChatMessage):
|
91 |
+
role, content = msg.role, msg.content
|
92 |
+
else:
|
93 |
+
role, content = msg.get("role"), msg.get("content")
|
94 |
+
|
95 |
+
if role in ["user", "assistant", "system"]:
|
96 |
+
claude_messages.append({"role": role, "content": content})
|
97 |
+
|
98 |
+
claude_messages.append({"role": "user", "content": message})
|
99 |
+
|
100 |
+
response = self.anthropic.messages.create(
|
101 |
+
model="claude-3-5-sonnet-20241022",
|
102 |
+
max_tokens=1000,
|
103 |
+
messages=claude_messages,
|
104 |
+
tools=self.tools,
|
105 |
+
)
|
106 |
+
|
107 |
+
result_messages = []
|
108 |
+
|
109 |
+
for content in response.content:
|
110 |
+
if content.type == "text":
|
111 |
+
result_messages.append({"role": "assistant", "content": content.text})
|
112 |
+
|
113 |
+
elif content.type == "tool_use":
|
114 |
+
tool_name = content.name
|
115 |
+
tool_args = content.input
|
116 |
+
|
117 |
+
result_messages.append(
|
118 |
+
{
|
119 |
+
"role": "assistant",
|
120 |
+
"content": f"I'll use the {tool_name} tool to help answer your question.",
|
121 |
+
"metadata": {
|
122 |
+
"title": f"Using tool: {tool_name}",
|
123 |
+
"log": f"Parameters: {json.dumps(tool_args, ensure_ascii=True)}",
|
124 |
+
"status": "pending",
|
125 |
+
"id": f"tool_call_{tool_name}",
|
126 |
+
},
|
127 |
+
}
|
128 |
+
)
|
129 |
+
|
130 |
+
result_messages.append(
|
131 |
+
{
|
132 |
+
"role": "assistant",
|
133 |
+
"content": "```json\n"
|
134 |
+
+ json.dumps(tool_args, indent=2, ensure_ascii=True)
|
135 |
+
+ "\n```",
|
136 |
+
"metadata": {
|
137 |
+
"parent_id": f"tool_call_{tool_name}",
|
138 |
+
"id": f"params_{tool_name}",
|
139 |
+
"title": "Tool Parameters",
|
140 |
+
},
|
141 |
+
}
|
142 |
+
)
|
143 |
+
|
144 |
+
result = await self.session.call_tool(tool_name, tool_args)
|
145 |
+
|
146 |
+
if result_messages and "metadata" in result_messages[-2]:
|
147 |
+
result_messages[-2]["metadata"]["status"] = "done"
|
148 |
+
|
149 |
+
result_messages.append(
|
150 |
+
{
|
151 |
+
"role": "assistant",
|
152 |
+
"content": "Here are the results from the tool:",
|
153 |
+
"metadata": {
|
154 |
+
"title": f"Tool Result for {tool_name}",
|
155 |
+
"status": "done",
|
156 |
+
"id": f"result_{tool_name}",
|
157 |
+
},
|
158 |
+
}
|
159 |
+
)
|
160 |
+
|
161 |
+
result_content = result.content
|
162 |
+
if isinstance(result_content, list):
|
163 |
+
result_content = "\n".join(str(item) for item in result_content)
|
164 |
+
|
165 |
+
try:
|
166 |
+
result_json = json.loads(result_content)
|
167 |
+
if isinstance(result_json, dict) and "type" in result_json:
|
168 |
+
if result_json["type"] == "image" and "url" in result_json:
|
169 |
+
result_messages.append(
|
170 |
+
{
|
171 |
+
"role": "assistant",
|
172 |
+
"content": {
|
173 |
+
"path": result_json["url"],
|
174 |
+
"alt_text": result_json.get(
|
175 |
+
"message", "Generated image"
|
176 |
+
),
|
177 |
+
},
|
178 |
+
"metadata": {
|
179 |
+
"parent_id": f"result_{tool_name}",
|
180 |
+
"id": f"image_{tool_name}",
|
181 |
+
"title": "Generated Image",
|
182 |
+
},
|
183 |
+
}
|
184 |
+
)
|
185 |
+
else:
|
186 |
+
result_messages.append(
|
187 |
+
{
|
188 |
+
"role": "assistant",
|
189 |
+
"content": "```\n" + result_content + "\n```",
|
190 |
+
"metadata": {
|
191 |
+
"parent_id": f"result_{tool_name}",
|
192 |
+
"id": f"raw_result_{tool_name}",
|
193 |
+
"title": "Raw Output",
|
194 |
+
},
|
195 |
+
}
|
196 |
+
)
|
197 |
+
except:
|
198 |
+
result_messages.append(
|
199 |
+
{
|
200 |
+
"role": "assistant",
|
201 |
+
"content": "```\n" + result_content + "\n```",
|
202 |
+
"metadata": {
|
203 |
+
"parent_id": f"result_{tool_name}",
|
204 |
+
"id": f"raw_result_{tool_name}",
|
205 |
+
"title": "Raw Output",
|
206 |
+
},
|
207 |
+
}
|
208 |
+
)
|
209 |
+
|
210 |
+
claude_messages.append(
|
211 |
+
{
|
212 |
+
"role": "user",
|
213 |
+
"content": f"Tool result for {tool_name}: {result_content}",
|
214 |
+
}
|
215 |
+
)
|
216 |
+
next_response = self.anthropic.messages.create(
|
217 |
+
model="claude-3-5-sonnet-20241022",
|
218 |
+
max_tokens=1000,
|
219 |
+
messages=claude_messages,
|
220 |
+
)
|
221 |
+
|
222 |
+
if next_response.content and next_response.content[0].type == "text":
|
223 |
+
result_messages.append(
|
224 |
+
{"role": "assistant", "content": next_response.content[0].text}
|
225 |
+
)
|
226 |
+
|
227 |
+
return result_messages
|
228 |
+
|
229 |
+
|
230 |
+
client = MCPClientWrapper()
|
231 |
+
|
232 |
+
|
233 |
+
def gradio_interface():
|
234 |
+
with gr.Blocks(title="MCP Weather Client") as demo:
|
235 |
+
gr.Markdown("# MCP Weather Assistant")
|
236 |
+
gr.Markdown("Connect to your MCP weather server and chat with the assistant")
|
237 |
+
|
238 |
+
with gr.Row(equal_height=True):
|
239 |
+
with gr.Column(scale=4):
|
240 |
+
server_path = gr.Textbox(
|
241 |
+
label="Server Script Path",
|
242 |
+
placeholder="Enter path to server script (e.g., weather.py)",
|
243 |
+
value="gradio_mcp_server.py",
|
244 |
+
)
|
245 |
+
with gr.Column(scale=1):
|
246 |
+
connect_btn = gr.Button("Connect")
|
247 |
+
|
248 |
+
status = gr.Textbox(label="Connection Status", interactive=False)
|
249 |
+
|
250 |
+
chatbot = gr.Chatbot(
|
251 |
+
value=[],
|
252 |
+
height=500,
|
253 |
+
type="messages",
|
254 |
+
show_copy_button=True,
|
255 |
+
avatar_images=("👤", "🤖"),
|
256 |
+
)
|
257 |
+
|
258 |
+
with gr.Row(equal_height=True):
|
259 |
+
msg = gr.Textbox(
|
260 |
+
label="Your Question",
|
261 |
+
placeholder="Ask about weather or alerts (e.g., What's the weather in New York?)",
|
262 |
+
scale=4,
|
263 |
+
)
|
264 |
+
clear_btn = gr.Button("Clear Chat", scale=1)
|
265 |
+
|
266 |
+
connect_btn.click(client.connect, inputs=server_path, outputs=status)
|
267 |
+
msg.submit(client.process_message, [msg, chatbot], [chatbot, msg])
|
268 |
+
clear_btn.click(lambda: [], None, chatbot)
|
269 |
+
|
270 |
+
return demo
|
271 |
+
|
272 |
+
|
273 |
+
if __name__ == "__main__":
|
274 |
+
if not os.getenv("ANTHROPIC_API_KEY"):
|
275 |
+
print(
|
276 |
+
"Warning: ANTHROPIC_API_KEY not found in environment. Please set it in your .env file."
|
277 |
+
)
|
278 |
+
|
279 |
+
interface = gradio_interface()
|
280 |
+
interface.launch(debug=True)
|
pyproject.toml
CHANGED
@@ -5,5 +5,6 @@ description = "Add your description here"
|
|
5 |
readme = "README.md"
|
6 |
requires-python = ">=3.10"
|
7 |
dependencies = [
|
|
|
8 |
"gradio[mcp]>=5.29.1",
|
9 |
]
|
|
|
5 |
readme = "README.md"
|
6 |
requires-python = ">=3.10"
|
7 |
dependencies = [
|
8 |
+
"anthropic>=0.51.0",
|
9 |
"gradio[mcp]>=5.29.1",
|
10 |
]
|
uv.lock
CHANGED
@@ -25,6 +25,24 @@ wheels = [
|
|
25 |
{ url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643 },
|
26 |
]
|
27 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
28 |
[[package]]
|
29 |
name = "anyio"
|
30 |
version = "4.9.0"
|
@@ -171,6 +189,15 @@ wheels = [
|
|
171 |
{ url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 },
|
172 |
]
|
173 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
174 |
[[package]]
|
175 |
name = "exceptiongroup"
|
176 |
version = "1.3.0"
|
@@ -381,6 +408,78 @@ wheels = [
|
|
381 |
{ url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899 },
|
382 |
]
|
383 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
384 |
[[package]]
|
385 |
name = "markdown-it-py"
|
386 |
version = "3.0.0"
|
@@ -1091,11 +1190,15 @@ name = "test-data-mcp-server"
|
|
1091 |
version = "0.1.0"
|
1092 |
source = { virtual = "." }
|
1093 |
dependencies = [
|
|
|
1094 |
{ name = "gradio", extra = ["mcp"] },
|
1095 |
]
|
1096 |
|
1097 |
[package.metadata]
|
1098 |
-
requires-dist = [
|
|
|
|
|
|
|
1099 |
|
1100 |
[[package]]
|
1101 |
name = "tomlkit"
|
|
|
25 |
{ url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643 },
|
26 |
]
|
27 |
|
28 |
+
[[package]]
|
29 |
+
name = "anthropic"
|
30 |
+
version = "0.51.0"
|
31 |
+
source = { registry = "https://pypi.org/simple" }
|
32 |
+
dependencies = [
|
33 |
+
{ name = "anyio" },
|
34 |
+
{ name = "distro" },
|
35 |
+
{ name = "httpx" },
|
36 |
+
{ name = "jiter" },
|
37 |
+
{ name = "pydantic" },
|
38 |
+
{ name = "sniffio" },
|
39 |
+
{ name = "typing-extensions" },
|
40 |
+
]
|
41 |
+
sdist = { url = "https://files.pythonhosted.org/packages/63/4a/96f99a61ae299f9e5aa3e765d7342d95ab2e2ba5b69a3ffedb00ef779651/anthropic-0.51.0.tar.gz", hash = "sha256:6f824451277992af079554430d5b2c8ff5bc059cc2c968cdc3f06824437da201", size = 219063 }
|
42 |
+
wheels = [
|
43 |
+
{ url = "https://files.pythonhosted.org/packages/8c/6e/9637122c5f007103bd5a259f4250bd8f1533dd2473227670fd10a1457b62/anthropic-0.51.0-py3-none-any.whl", hash = "sha256:b8b47d482c9aa1f81b923555cebb687c2730309a20d01be554730c8302e0f62a", size = 263957 },
|
44 |
+
]
|
45 |
+
|
46 |
[[package]]
|
47 |
name = "anyio"
|
48 |
version = "4.9.0"
|
|
|
189 |
{ url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 },
|
190 |
]
|
191 |
|
192 |
+
[[package]]
|
193 |
+
name = "distro"
|
194 |
+
version = "1.9.0"
|
195 |
+
source = { registry = "https://pypi.org/simple" }
|
196 |
+
sdist = { url = "https://files.pythonhosted.org/packages/fc/f8/98eea607f65de6527f8a2e8885fc8015d3e6f5775df186e443e0964a11c3/distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed", size = 60722 }
|
197 |
+
wheels = [
|
198 |
+
{ url = "https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2", size = 20277 },
|
199 |
+
]
|
200 |
+
|
201 |
[[package]]
|
202 |
name = "exceptiongroup"
|
203 |
version = "1.3.0"
|
|
|
408 |
{ url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899 },
|
409 |
]
|
410 |
|
411 |
+
[[package]]
|
412 |
+
name = "jiter"
|
413 |
+
version = "0.10.0"
|
414 |
+
source = { registry = "https://pypi.org/simple" }
|
415 |
+
sdist = { url = "https://files.pythonhosted.org/packages/ee/9d/ae7ddb4b8ab3fb1b51faf4deb36cb48a4fbbd7cb36bad6a5fca4741306f7/jiter-0.10.0.tar.gz", hash = "sha256:07a7142c38aacc85194391108dc91b5b57093c978a9932bd86a36862759d9500", size = 162759 }
|
416 |
+
wheels = [
|
417 |
+
{ url = "https://files.pythonhosted.org/packages/be/7e/4011b5c77bec97cb2b572f566220364e3e21b51c48c5bd9c4a9c26b41b67/jiter-0.10.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:cd2fb72b02478f06a900a5782de2ef47e0396b3e1f7d5aba30daeb1fce66f303", size = 317215 },
|
418 |
+
{ url = "https://files.pythonhosted.org/packages/8a/4f/144c1b57c39692efc7ea7d8e247acf28e47d0912800b34d0ad815f6b2824/jiter-0.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:32bb468e3af278f095d3fa5b90314728a6916d89ba3d0ffb726dd9bf7367285e", size = 322814 },
|
419 |
+
{ url = "https://files.pythonhosted.org/packages/63/1f/db977336d332a9406c0b1f0b82be6f71f72526a806cbb2281baf201d38e3/jiter-0.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa8b3e0068c26ddedc7abc6fac37da2d0af16b921e288a5a613f4b86f050354f", size = 345237 },
|
420 |
+
{ url = "https://files.pythonhosted.org/packages/d7/1c/aa30a4a775e8a672ad7f21532bdbfb269f0706b39c6ff14e1f86bdd9e5ff/jiter-0.10.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:286299b74cc49e25cd42eea19b72aa82c515d2f2ee12d11392c56d8701f52224", size = 370999 },
|
421 |
+
{ url = "https://files.pythonhosted.org/packages/35/df/f8257abc4207830cb18880781b5f5b716bad5b2a22fb4330cfd357407c5b/jiter-0.10.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6ed5649ceeaeffc28d87fb012d25a4cd356dcd53eff5acff1f0466b831dda2a7", size = 491109 },
|
422 |
+
{ url = "https://files.pythonhosted.org/packages/06/76/9e1516fd7b4278aa13a2cc7f159e56befbea9aa65c71586305e7afa8b0b3/jiter-0.10.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2ab0051160cb758a70716448908ef14ad476c3774bd03ddce075f3c1f90a3d6", size = 388608 },
|
423 |
+
{ url = "https://files.pythonhosted.org/packages/6d/64/67750672b4354ca20ca18d3d1ccf2c62a072e8a2d452ac3cf8ced73571ef/jiter-0.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03997d2f37f6b67d2f5c475da4412be584e1cec273c1cfc03d642c46db43f8cf", size = 352454 },
|
424 |
+
{ url = "https://files.pythonhosted.org/packages/96/4d/5c4e36d48f169a54b53a305114be3efa2bbffd33b648cd1478a688f639c1/jiter-0.10.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c404a99352d839fed80d6afd6c1d66071f3bacaaa5c4268983fc10f769112e90", size = 391833 },
|
425 |
+
{ url = "https://files.pythonhosted.org/packages/0b/de/ce4a6166a78810bd83763d2fa13f85f73cbd3743a325469a4a9289af6dae/jiter-0.10.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:66e989410b6666d3ddb27a74c7e50d0829704ede652fd4c858e91f8d64b403d0", size = 523646 },
|
426 |
+
{ url = "https://files.pythonhosted.org/packages/a2/a6/3bc9acce53466972964cf4ad85efecb94f9244539ab6da1107f7aed82934/jiter-0.10.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b532d3af9ef4f6374609a3bcb5e05a1951d3bf6190dc6b176fdb277c9bbf15ee", size = 514735 },
|
427 |
+
{ url = "https://files.pythonhosted.org/packages/b4/d8/243c2ab8426a2a4dea85ba2a2ba43df379ccece2145320dfd4799b9633c5/jiter-0.10.0-cp310-cp310-win32.whl", hash = "sha256:da9be20b333970e28b72edc4dff63d4fec3398e05770fb3205f7fb460eb48dd4", size = 210747 },
|
428 |
+
{ url = "https://files.pythonhosted.org/packages/37/7a/8021bd615ef7788b98fc76ff533eaac846322c170e93cbffa01979197a45/jiter-0.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:f59e533afed0c5b0ac3eba20d2548c4a550336d8282ee69eb07b37ea526ee4e5", size = 207484 },
|
429 |
+
{ url = "https://files.pythonhosted.org/packages/1b/dd/6cefc6bd68b1c3c979cecfa7029ab582b57690a31cd2f346c4d0ce7951b6/jiter-0.10.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:3bebe0c558e19902c96e99217e0b8e8b17d570906e72ed8a87170bc290b1e978", size = 317473 },
|
430 |
+
{ url = "https://files.pythonhosted.org/packages/be/cf/fc33f5159ce132be1d8dd57251a1ec7a631c7df4bd11e1cd198308c6ae32/jiter-0.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:558cc7e44fd8e507a236bee6a02fa17199ba752874400a0ca6cd6e2196cdb7dc", size = 321971 },
|
431 |
+
{ url = "https://files.pythonhosted.org/packages/68/a4/da3f150cf1d51f6c472616fb7650429c7ce053e0c962b41b68557fdf6379/jiter-0.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d613e4b379a07d7c8453c5712ce7014e86c6ac93d990a0b8e7377e18505e98d", size = 345574 },
|
432 |
+
{ url = "https://files.pythonhosted.org/packages/84/34/6e8d412e60ff06b186040e77da5f83bc158e9735759fcae65b37d681f28b/jiter-0.10.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f62cf8ba0618eda841b9bf61797f21c5ebd15a7a1e19daab76e4e4b498d515b2", size = 371028 },
|
433 |
+
{ url = "https://files.pythonhosted.org/packages/fb/d9/9ee86173aae4576c35a2f50ae930d2ccb4c4c236f6cb9353267aa1d626b7/jiter-0.10.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:919d139cdfa8ae8945112398511cb7fca58a77382617d279556b344867a37e61", size = 491083 },
|
434 |
+
{ url = "https://files.pythonhosted.org/packages/d9/2c/f955de55e74771493ac9e188b0f731524c6a995dffdcb8c255b89c6fb74b/jiter-0.10.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13ddbc6ae311175a3b03bd8994881bc4635c923754932918e18da841632349db", size = 388821 },
|
435 |
+
{ url = "https://files.pythonhosted.org/packages/81/5a/0e73541b6edd3f4aada586c24e50626c7815c561a7ba337d6a7eb0a915b4/jiter-0.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c440ea003ad10927a30521a9062ce10b5479592e8a70da27f21eeb457b4a9c5", size = 352174 },
|
436 |
+
{ url = "https://files.pythonhosted.org/packages/1c/c0/61eeec33b8c75b31cae42be14d44f9e6fe3ac15a4e58010256ac3abf3638/jiter-0.10.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dc347c87944983481e138dea467c0551080c86b9d21de6ea9306efb12ca8f606", size = 391869 },
|
437 |
+
{ url = "https://files.pythonhosted.org/packages/41/22/5beb5ee4ad4ef7d86f5ea5b4509f680a20706c4a7659e74344777efb7739/jiter-0.10.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:13252b58c1f4d8c5b63ab103c03d909e8e1e7842d302473f482915d95fefd605", size = 523741 },
|
438 |
+
{ url = "https://files.pythonhosted.org/packages/ea/10/768e8818538e5817c637b0df52e54366ec4cebc3346108a4457ea7a98f32/jiter-0.10.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7d1bbf3c465de4a24ab12fb7766a0003f6f9bce48b8b6a886158c4d569452dc5", size = 514527 },
|
439 |
+
{ url = "https://files.pythonhosted.org/packages/73/6d/29b7c2dc76ce93cbedabfd842fc9096d01a0550c52692dfc33d3cc889815/jiter-0.10.0-cp311-cp311-win32.whl", hash = "sha256:db16e4848b7e826edca4ccdd5b145939758dadf0dc06e7007ad0e9cfb5928ae7", size = 210765 },
|
440 |
+
{ url = "https://files.pythonhosted.org/packages/c2/c9/d394706deb4c660137caf13e33d05a031d734eb99c051142e039d8ceb794/jiter-0.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:9c9c1d5f10e18909e993f9641f12fe1c77b3e9b533ee94ffa970acc14ded3812", size = 209234 },
|
441 |
+
{ url = "https://files.pythonhosted.org/packages/6d/b5/348b3313c58f5fbfb2194eb4d07e46a35748ba6e5b3b3046143f3040bafa/jiter-0.10.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:1e274728e4a5345a6dde2d343c8da018b9d4bd4350f5a472fa91f66fda44911b", size = 312262 },
|
442 |
+
{ url = "https://files.pythonhosted.org/packages/9c/4a/6a2397096162b21645162825f058d1709a02965606e537e3304b02742e9b/jiter-0.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7202ae396446c988cb2a5feb33a543ab2165b786ac97f53b59aafb803fef0744", size = 320124 },
|
443 |
+
{ url = "https://files.pythonhosted.org/packages/2a/85/1ce02cade7516b726dd88f59a4ee46914bf79d1676d1228ef2002ed2f1c9/jiter-0.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23ba7722d6748b6920ed02a8f1726fb4b33e0fd2f3f621816a8b486c66410ab2", size = 345330 },
|
444 |
+
{ url = "https://files.pythonhosted.org/packages/75/d0/bb6b4f209a77190ce10ea8d7e50bf3725fc16d3372d0a9f11985a2b23eff/jiter-0.10.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:371eab43c0a288537d30e1f0b193bc4eca90439fc08a022dd83e5e07500ed026", size = 369670 },
|
445 |
+
{ url = "https://files.pythonhosted.org/packages/a0/f5/a61787da9b8847a601e6827fbc42ecb12be2c925ced3252c8ffcb56afcaf/jiter-0.10.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c675736059020365cebc845a820214765162728b51ab1e03a1b7b3abb70f74c", size = 489057 },
|
446 |
+
{ url = "https://files.pythonhosted.org/packages/12/e4/6f906272810a7b21406c760a53aadbe52e99ee070fc5c0cb191e316de30b/jiter-0.10.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0c5867d40ab716e4684858e4887489685968a47e3ba222e44cde6e4a2154f959", size = 389372 },
|
447 |
+
{ url = "https://files.pythonhosted.org/packages/e2/ba/77013b0b8ba904bf3762f11e0129b8928bff7f978a81838dfcc958ad5728/jiter-0.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:395bb9a26111b60141757d874d27fdea01b17e8fac958b91c20128ba8f4acc8a", size = 352038 },
|
448 |
+
{ url = "https://files.pythonhosted.org/packages/67/27/c62568e3ccb03368dbcc44a1ef3a423cb86778a4389e995125d3d1aaa0a4/jiter-0.10.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6842184aed5cdb07e0c7e20e5bdcfafe33515ee1741a6835353bb45fe5d1bd95", size = 391538 },
|
449 |
+
{ url = "https://files.pythonhosted.org/packages/c0/72/0d6b7e31fc17a8fdce76164884edef0698ba556b8eb0af9546ae1a06b91d/jiter-0.10.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:62755d1bcea9876770d4df713d82606c8c1a3dca88ff39046b85a048566d56ea", size = 523557 },
|
450 |
+
{ url = "https://files.pythonhosted.org/packages/2f/09/bc1661fbbcbeb6244bd2904ff3a06f340aa77a2b94e5a7373fd165960ea3/jiter-0.10.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:533efbce2cacec78d5ba73a41756beff8431dfa1694b6346ce7af3a12c42202b", size = 514202 },
|
451 |
+
{ url = "https://files.pythonhosted.org/packages/1b/84/5a5d5400e9d4d54b8004c9673bbe4403928a00d28529ff35b19e9d176b19/jiter-0.10.0-cp312-cp312-win32.whl", hash = "sha256:8be921f0cadd245e981b964dfbcd6fd4bc4e254cdc069490416dd7a2632ecc01", size = 211781 },
|
452 |
+
{ url = "https://files.pythonhosted.org/packages/9b/52/7ec47455e26f2d6e5f2ea4951a0652c06e5b995c291f723973ae9e724a65/jiter-0.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:a7c7d785ae9dda68c2678532a5a1581347e9c15362ae9f6e68f3fdbfb64f2e49", size = 206176 },
|
453 |
+
{ url = "https://files.pythonhosted.org/packages/2e/b0/279597e7a270e8d22623fea6c5d4eeac328e7d95c236ed51a2b884c54f70/jiter-0.10.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:e0588107ec8e11b6f5ef0e0d656fb2803ac6cf94a96b2b9fc675c0e3ab5e8644", size = 311617 },
|
454 |
+
{ url = "https://files.pythonhosted.org/packages/91/e3/0916334936f356d605f54cc164af4060e3e7094364add445a3bc79335d46/jiter-0.10.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cafc4628b616dc32530c20ee53d71589816cf385dd9449633e910d596b1f5c8a", size = 318947 },
|
455 |
+
{ url = "https://files.pythonhosted.org/packages/6a/8e/fd94e8c02d0e94539b7d669a7ebbd2776e51f329bb2c84d4385e8063a2ad/jiter-0.10.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:520ef6d981172693786a49ff5b09eda72a42e539f14788124a07530f785c3ad6", size = 344618 },
|
456 |
+
{ url = "https://files.pythonhosted.org/packages/6f/b0/f9f0a2ec42c6e9c2e61c327824687f1e2415b767e1089c1d9135f43816bd/jiter-0.10.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:554dedfd05937f8fc45d17ebdf298fe7e0c77458232bcb73d9fbbf4c6455f5b3", size = 368829 },
|
457 |
+
{ url = "https://files.pythonhosted.org/packages/e8/57/5bbcd5331910595ad53b9fd0c610392ac68692176f05ae48d6ce5c852967/jiter-0.10.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5bc299da7789deacf95f64052d97f75c16d4fc8c4c214a22bf8d859a4288a1c2", size = 491034 },
|
458 |
+
{ url = "https://files.pythonhosted.org/packages/9b/be/c393df00e6e6e9e623a73551774449f2f23b6ec6a502a3297aeeece2c65a/jiter-0.10.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5161e201172de298a8a1baad95eb85db4fb90e902353b1f6a41d64ea64644e25", size = 388529 },
|
459 |
+
{ url = "https://files.pythonhosted.org/packages/42/3e/df2235c54d365434c7f150b986a6e35f41ebdc2f95acea3036d99613025d/jiter-0.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e2227db6ba93cb3e2bf67c87e594adde0609f146344e8207e8730364db27041", size = 350671 },
|
460 |
+
{ url = "https://files.pythonhosted.org/packages/c6/77/71b0b24cbcc28f55ab4dbfe029f9a5b73aeadaba677843fc6dc9ed2b1d0a/jiter-0.10.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:15acb267ea5e2c64515574b06a8bf393fbfee6a50eb1673614aa45f4613c0cca", size = 390864 },
|
461 |
+
{ url = "https://files.pythonhosted.org/packages/6a/d3/ef774b6969b9b6178e1d1e7a89a3bd37d241f3d3ec5f8deb37bbd203714a/jiter-0.10.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:901b92f2e2947dc6dfcb52fd624453862e16665ea909a08398dde19c0731b7f4", size = 522989 },
|
462 |
+
{ url = "https://files.pythonhosted.org/packages/0c/41/9becdb1d8dd5d854142f45a9d71949ed7e87a8e312b0bede2de849388cb9/jiter-0.10.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:d0cb9a125d5a3ec971a094a845eadde2db0de85b33c9f13eb94a0c63d463879e", size = 513495 },
|
463 |
+
{ url = "https://files.pythonhosted.org/packages/9c/36/3468e5a18238bdedae7c4d19461265b5e9b8e288d3f86cd89d00cbb48686/jiter-0.10.0-cp313-cp313-win32.whl", hash = "sha256:48a403277ad1ee208fb930bdf91745e4d2d6e47253eedc96e2559d1e6527006d", size = 211289 },
|
464 |
+
{ url = "https://files.pythonhosted.org/packages/7e/07/1c96b623128bcb913706e294adb5f768fb7baf8db5e1338ce7b4ee8c78ef/jiter-0.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:75f9eb72ecb640619c29bf714e78c9c46c9c4eaafd644bf78577ede459f330d4", size = 205074 },
|
465 |
+
{ url = "https://files.pythonhosted.org/packages/54/46/caa2c1342655f57d8f0f2519774c6d67132205909c65e9aa8255e1d7b4f4/jiter-0.10.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:28ed2a4c05a1f32ef0e1d24c2611330219fed727dae01789f4a335617634b1ca", size = 318225 },
|
466 |
+
{ url = "https://files.pythonhosted.org/packages/43/84/c7d44c75767e18946219ba2d703a5a32ab37b0bc21886a97bc6062e4da42/jiter-0.10.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14a4c418b1ec86a195f1ca69da8b23e8926c752b685af665ce30777233dfe070", size = 350235 },
|
467 |
+
{ url = "https://files.pythonhosted.org/packages/01/16/f5a0135ccd968b480daad0e6ab34b0c7c5ba3bc447e5088152696140dcb3/jiter-0.10.0-cp313-cp313t-win_amd64.whl", hash = "sha256:d7bfed2fe1fe0e4dda6ef682cee888ba444b21e7a6553e03252e4feb6cf0adca", size = 207278 },
|
468 |
+
{ url = "https://files.pythonhosted.org/packages/1c/9b/1d646da42c3de6c2188fdaa15bce8ecb22b635904fc68be025e21249ba44/jiter-0.10.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:5e9251a5e83fab8d87799d3e1a46cb4b7f2919b895c6f4483629ed2446f66522", size = 310866 },
|
469 |
+
{ url = "https://files.pythonhosted.org/packages/ad/0e/26538b158e8a7c7987e94e7aeb2999e2e82b1f9d2e1f6e9874ddf71ebda0/jiter-0.10.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:023aa0204126fe5b87ccbcd75c8a0d0261b9abdbbf46d55e7ae9f8e22424eeb8", size = 318772 },
|
470 |
+
{ url = "https://files.pythonhosted.org/packages/7b/fb/d302893151caa1c2636d6574d213e4b34e31fd077af6050a9c5cbb42f6fb/jiter-0.10.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c189c4f1779c05f75fc17c0c1267594ed918996a231593a21a5ca5438445216", size = 344534 },
|
471 |
+
{ url = "https://files.pythonhosted.org/packages/01/d8/5780b64a149d74e347c5128d82176eb1e3241b1391ac07935693466d6219/jiter-0.10.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:15720084d90d1098ca0229352607cd68256c76991f6b374af96f36920eae13c4", size = 369087 },
|
472 |
+
{ url = "https://files.pythonhosted.org/packages/e8/5b/f235a1437445160e777544f3ade57544daf96ba7e96c1a5b24a6f7ac7004/jiter-0.10.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e4f2fb68e5f1cfee30e2b2a09549a00683e0fde4c6a2ab88c94072fc33cb7426", size = 490694 },
|
473 |
+
{ url = "https://files.pythonhosted.org/packages/85/a9/9c3d4617caa2ff89cf61b41e83820c27ebb3f7b5fae8a72901e8cd6ff9be/jiter-0.10.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ce541693355fc6da424c08b7edf39a2895f58d6ea17d92cc2b168d20907dee12", size = 388992 },
|
474 |
+
{ url = "https://files.pythonhosted.org/packages/68/b1/344fd14049ba5c94526540af7eb661871f9c54d5f5601ff41a959b9a0bbd/jiter-0.10.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31c50c40272e189d50006ad5c73883caabb73d4e9748a688b216e85a9a9ca3b9", size = 351723 },
|
475 |
+
{ url = "https://files.pythonhosted.org/packages/41/89/4c0e345041186f82a31aee7b9d4219a910df672b9fef26f129f0cda07a29/jiter-0.10.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fa3402a2ff9815960e0372a47b75c76979d74402448509ccd49a275fa983ef8a", size = 392215 },
|
476 |
+
{ url = "https://files.pythonhosted.org/packages/55/58/ee607863e18d3f895feb802154a2177d7e823a7103f000df182e0f718b38/jiter-0.10.0-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:1956f934dca32d7bb647ea21d06d93ca40868b505c228556d3373cbd255ce853", size = 522762 },
|
477 |
+
{ url = "https://files.pythonhosted.org/packages/15/d0/9123fb41825490d16929e73c212de9a42913d68324a8ce3c8476cae7ac9d/jiter-0.10.0-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:fcedb049bdfc555e261d6f65a6abe1d5ad68825b7202ccb9692636c70fcced86", size = 513427 },
|
478 |
+
{ url = "https://files.pythonhosted.org/packages/d8/b3/2bd02071c5a2430d0b70403a34411fc519c2f227da7b03da9ba6a956f931/jiter-0.10.0-cp314-cp314-win32.whl", hash = "sha256:ac509f7eccca54b2a29daeb516fb95b6f0bd0d0d8084efaf8ed5dfc7b9f0b357", size = 210127 },
|
479 |
+
{ url = "https://files.pythonhosted.org/packages/03/0c/5fe86614ea050c3ecd728ab4035534387cd41e7c1855ef6c031f1ca93e3f/jiter-0.10.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5ed975b83a2b8639356151cef5c0d597c68376fc4922b45d0eb384ac058cfa00", size = 318527 },
|
480 |
+
{ url = "https://files.pythonhosted.org/packages/b3/4a/4175a563579e884192ba6e81725fc0448b042024419be8d83aa8a80a3f44/jiter-0.10.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3aa96f2abba33dc77f79b4cf791840230375f9534e5fac927ccceb58c5e604a5", size = 354213 },
|
481 |
+
]
|
482 |
+
|
483 |
[[package]]
|
484 |
name = "markdown-it-py"
|
485 |
version = "3.0.0"
|
|
|
1190 |
version = "0.1.0"
|
1191 |
source = { virtual = "." }
|
1192 |
dependencies = [
|
1193 |
+
{ name = "anthropic" },
|
1194 |
{ name = "gradio", extra = ["mcp"] },
|
1195 |
]
|
1196 |
|
1197 |
[package.metadata]
|
1198 |
+
requires-dist = [
|
1199 |
+
{ name = "anthropic", specifier = ">=0.51.0" },
|
1200 |
+
{ name = "gradio", extras = ["mcp"], specifier = ">=5.29.1" },
|
1201 |
+
]
|
1202 |
|
1203 |
[[package]]
|
1204 |
name = "tomlkit"
|