ryomo commited on
Commit
87f911f
·
1 Parent(s): 9a14f40

Implement a simple AI chat with Modal

Browse files
Files changed (9) hide show
  1. .gitignore +18 -0
  2. .python-version +1 -0
  3. README.md +85 -2
  4. app.py +104 -0
  5. modal/invoke.py +44 -0
  6. modal/main.py +187 -0
  7. pyproject.toml +20 -0
  8. requirements.txt +951 -0
  9. uv.lock +0 -0
.gitignore ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Python-generated files
2
+ __pycache__/
3
+ *.py[oc]
4
+ build/
5
+ dist/
6
+ wheels/
7
+ *.egg-info
8
+
9
+ # Virtual environments
10
+ .venv
11
+
12
+ # Environment variables
13
+ .env
14
+
15
+ # misc
16
+ MEMO.md
17
+
18
+ !.gitkeep
.python-version ADDED
@@ -0,0 +1 @@
 
 
1
+ 3.12
README.md CHANGED
@@ -1,14 +1,97 @@
1
  ---
2
- title: Who Is The Liar
3
  emoji: 📚
4
  colorFrom: pink
5
  colorTo: gray
6
  sdk: gradio
7
  sdk_version: 5.33.0
 
8
  app_file: app.py
9
  pinned: false
10
  license: mit
11
  short_description: WIP
12
  ---
13
 
14
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
+ title: Novel Heroes
3
  emoji: 📚
4
  colorFrom: pink
5
  colorTo: gray
6
  sdk: gradio
7
  sdk_version: 5.33.0
8
+ python_version: 3.12
9
  app_file: app.py
10
  pinned: false
11
  license: mit
12
  short_description: WIP
13
  ---
14
 
15
+ <!-- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference -->
16
+
17
+
18
+ # Novel Heroes
19
+
20
+ ## What is this?
21
+
22
+
23
+ ## Development
24
+
25
+ After cloning the repository, you can run the following command to install the dependencies:
26
+
27
+ ```sh
28
+ uv sync --frozen
29
+ ```
30
+
31
+ - If you don't need to develop Modal integration, you can add `--no-dev` to the command above to skip installing the development dependencies.
32
+
33
+
34
+ ## Gradio
35
+
36
+
37
+ ### Run locally
38
+
39
+ ```sh
40
+ uv run gradio app.py
41
+ ```
42
+
43
+ ### Deploy
44
+
45
+ ```sh
46
+ uv export --format requirements-txt --no-dev > requirements.txt
47
+ git add requirements.txt
48
+ git commit -m "Update requirements.txt"
49
+ git push
50
+ ```
51
+
52
+
53
+ ## Modal
54
+
55
+ ### Setup Modal Tokens
56
+
57
+ 1. Open "Settings" page in Modal dashboard.
58
+ 2. Open "API Tokens" page and create a new token.
59
+ - Note: You need to stay open the page until you run the command on the page.
60
+ 3. Go to Hugging Face Spaces and open the "Settings" page.
61
+ 4. Add "New secret" with the name `MODAL_TOKEN_ID` and `MODAL_TOKEN_SECRET` and paste the tokens you created in step 2.
62
+
63
+ ### Setup Hugging Face Tokens
64
+
65
+ 1. Open "Settings" page in Hugging Face, go to "Access Tokens" page.
66
+ 2. Create a new token. The token should have `read` access.
67
+ 3. Go to Modal dashboard and open "Secrets" page.
68
+ 4. Create a new secret with the choice of `Custom` with the following.
69
+ - Name: "huggingface-secret"
70
+ - Environment Variable:
71
+ - Key: `HUGGINGFACE_TOKEN`, Value: `<your-huggingface-token>`
72
+
73
+
74
+ ### Run on Modal:
75
+
76
+ This command will run the `main.py` only once on Modal.
77
+
78
+ ```sh
79
+ uv run modal run modal/main.py
80
+ ```
81
+
82
+ ### Deploy to Modal:
83
+
84
+ This command will deploy the `main.py` to Modal, allowing it to run continuously.
85
+
86
+ ```sh
87
+ uv run modal deploy modal/main.py
88
+ ```
89
+
90
+ ### Run deployed modal app:
91
+
92
+ This command will run the `invoke.py` file, which is used to invoke the deployed Modal app.
93
+ This is useful for testing the deployed app.
94
+
95
+ ```sh
96
+ uv run modal/invoke.py
97
+ ```
app.py ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import modal
3
+ from rich.themes import DEFAULT
4
+
5
+ MODAL_APP_NAME = "llm-server"
6
+
7
+ DEFAULT_SYSTEM_PROMPT = (
8
+ "You are a friendly Chatbot. Please respond in the same language as the user."
9
+ )
10
+
11
+
12
+ def respond(
13
+ message,
14
+ history: list,
15
+ system_prompt,
16
+ ):
17
+ # Convert Gradio history to Gemma3 history
18
+ def gradio_to_gemma3(hist, system_prompt):
19
+ gemma3_hist = []
20
+ if not hist:
21
+ # Add system prompt at the beginning
22
+ gemma3_hist.append(
23
+ {"role": "system", "content": [{"type": "text", "text": system_prompt}]}
24
+ )
25
+ for h in hist:
26
+ # Gradio: {'role': ..., 'content': ..., ...}
27
+ # Gemma3: {'role': ..., 'content': [{'type': 'text', 'text': ...}]}
28
+ if isinstance(h.get("content"), list):
29
+ # If already in Gemma3 format, keep as is
30
+ gemma3_hist.append({"role": h.get("role"), "content": h.get("content")})
31
+ else:
32
+ gemma3_hist.append(
33
+ {
34
+ "role": h.get("role"),
35
+ "content": [{"type": "text", "text": h.get("content", "")}],
36
+ }
37
+ )
38
+ # Add current user input
39
+ gemma3_hist.append(
40
+ {"role": "user", "content": [{"type": "text", "text": message}]}
41
+ )
42
+ return gemma3_hist
43
+
44
+ gemma_formatted_history = gradio_to_gemma3(history, system_prompt)
45
+
46
+ model = modal.Cls.from_name(MODAL_APP_NAME, "VLLMModel")()
47
+
48
+ response = ""
49
+ for chunk in model.generate_stream.remote_gen(gemma_formatted_history):
50
+ response += chunk
51
+ yield response
52
+
53
+ # Add to Gradio history
54
+ history.append({"role": "assistant", "content": response})
55
+
56
+
57
+ def letter_counter(word, letter) -> int:
58
+ """Count the occurrences of a letter in a word."""
59
+ return word.lower().count(letter.lower())
60
+
61
+
62
+ def reverse_text(text) -> str:
63
+ """Reverse the input text."""
64
+ return text[::-1]
65
+
66
+
67
+ if gr.NO_RELOAD:
68
+ """
69
+ Skip the auto-reloading here.
70
+ https://www.gradio.app/guides/developing-faster-with-reload-mode#controlling-the-reload
71
+ """
72
+ pass
73
+
74
+
75
+ with gr.Blocks() as demo:
76
+
77
+ with gr.Tab("Chat"):
78
+ gr.Markdown(
79
+ "⚠️ **Note:** Cold start may take up to 4 minutes. Please wait patiently for the initial response."
80
+ )
81
+ gr.ChatInterface(
82
+ fn=respond,
83
+ type="messages",
84
+ additional_inputs=[
85
+ gr.Textbox(value=DEFAULT_SYSTEM_PROMPT, label="System Prompt"),
86
+ ],
87
+ )
88
+
89
+ with gr.Tab("Letter Counter"):
90
+ word = gr.Textbox(label="Word")
91
+ letter = gr.Textbox(label="Letter")
92
+ count = gr.Number(label="Count")
93
+ btn = gr.Button("Count")
94
+ btn.click(letter_counter, [word, letter], count)
95
+
96
+ with gr.Tab("Reverse Text"):
97
+ input_text = gr.Textbox(label="Text")
98
+ output_text = gr.Textbox(label="Reversed")
99
+ btn2 = gr.Button("Reverse")
100
+ btn2.click(reverse_text, input_text, output_text)
101
+
102
+ if __name__ == "__main__":
103
+ # Launch the Gradio app with MCP server enabled
104
+ demo.launch(mcp_server=True)
modal/invoke.py ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import modal
2
+
3
+ APP_NAME = "llm-server"
4
+
5
+ ENABLE_STREAMING = True
6
+ SYSTEM_PROMPT = "You are a friendly Chatbot. Please respond in the same language as the user."
7
+
8
+
9
+ VLLMModel = modal.Cls.from_name(APP_NAME, "VLLMModel")
10
+ model = VLLMModel()
11
+
12
+ chat_history = []
13
+ chat_history.append(
14
+ {"role": "system", "content": [{"type": "text", "text": SYSTEM_PROMPT}]}
15
+ )
16
+
17
+ # User prompt
18
+ user_prompt = "Hi!"
19
+ print(f"USER: {user_prompt}\n")
20
+ chat_history.append(
21
+ {"role": "user", "content": [{"type": "text", "text": user_prompt}]}
22
+ )
23
+
24
+ print("Calling chat function...")
25
+
26
+ # AI response
27
+ if ENABLE_STREAMING:
28
+ """Streaming version"""
29
+ print("AI: ", end="", flush=True)
30
+ response = ""
31
+ for chunk in model.generate_stream.remote_gen(chat_history):
32
+ print(chunk, end="", flush=True)
33
+ response += chunk
34
+ print()
35
+
36
+ else:
37
+ """Non-streaming version"""
38
+ response = model.chat.remote(chat_history)
39
+ print("AI:", response)
40
+
41
+
42
+ chat_history.append(
43
+ {"role": "assistant", "content": [{"type": "text", "text": response}]}
44
+ )
modal/main.py ADDED
@@ -0,0 +1,187 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import subprocess
3
+
4
+ from huggingface_hub import snapshot_download
5
+ from vllm import LLM, SamplingParams
6
+
7
+ import modal
8
+
9
+ image = (
10
+ # https//hub.docker.com/layers/nvidia/cuda/12.8.1-devel-ubuntu24.04/images/sha256-4b9ed5fa8361736996499f64ecebf25d4ec37ff56e4d11323ccde10aa36e0c43
11
+ modal.Image.from_registry(
12
+ "nvidia/cuda:12.8.1-devel-ubuntu24.04", add_python="3.12"
13
+ ).pip_install(
14
+ [
15
+ "accelerate>=1.7.0",
16
+ "bitsandbytes>=0.46.0",
17
+ "sentencepiece>=0.2.0",
18
+ "torch==2.7.0", # torch2.7.1 is not compatible with vllm
19
+ "transformers>=4.52.4",
20
+ "vllm>=0.9.0.1",
21
+ ]
22
+ )
23
+ )
24
+
25
+ APP_NAME = "llm-server"
26
+
27
+ # Model identifier for the Hugging Face model and GPU memory usage in comments
28
+ MODEL_IDENTIFIER = "google/gemma-3-4b-it" # 10GB
29
+ # MODEL_IDENTIFIER = "google/gemma-3-12b-it"
30
+ # MODEL_IDENTIFIER = "google/gemma-3-27b-it"
31
+
32
+ # https://modal.com/docs/guide/gpu#specifying-gpu-type
33
+ GPU_NAME = "L4"
34
+ GPU_NUM = 1 # Number of GPUs to use
35
+ GPU = f"{GPU_NAME}:{GPU_NUM}"
36
+
37
+ # https://modal.com/pricing
38
+ # | GPU | Memory | Price |
39
+ # |-----------|--------|----------|
40
+ # | B200 | 180 GB | $6.25 /h |
41
+ # | H200 | 141 GB | $4.54 /h |
42
+ # | H100 | 80 GB | $3.95 /h |
43
+ # | A100-80GB | 80 GB | $2.50 /h |
44
+ # | A100-40GB | 40 GB | $2.10 /h |
45
+ # | L40S | 48 GB | $1.95 /h |
46
+ # | A10G | 24 GB | $1.10 /h |
47
+ # | L4 | 24 GB | $0.80 /h |
48
+ # | T4 | 16 GB | $0.59 /h |
49
+
50
+ VOLUME_NAME = APP_NAME + "-volume"
51
+ MOUNT_VOLUME = modal.Volume.from_name(VOLUME_NAME, create_if_missing=True)
52
+
53
+ MOUNT_DIR = "/data"
54
+ MODEL_SNAPSHOT = MOUNT_DIR + "/" + MODEL_IDENTIFIER.split("/")[-1] + "/snapshot"
55
+ MODEL_CACHE = MOUNT_DIR + "/" + MODEL_IDENTIFIER.split("/")[-1] + "/cache"
56
+
57
+ app = modal.App(APP_NAME, image=image)
58
+
59
+ # NOTE: `@app.cls`, `@modal.enter()`, and `@modal.method()` are used like `@app.function()`
60
+ # https://modal.com/docs/guide/lifecycle-functions
61
+
62
+
63
+ @app.cls(
64
+ gpu=GPU,
65
+ image=image,
66
+ volumes={MOUNT_DIR: MOUNT_VOLUME},
67
+ secrets=[modal.Secret.from_name("huggingface-secret")],
68
+ scaledown_window=15 * 60,
69
+ timeout=30 * 60,
70
+ )
71
+ class VLLMModel:
72
+
73
+ @modal.enter()
74
+ def setup(self):
75
+ self._download_model(repo_id=MODEL_IDENTIFIER)
76
+ self._load_model()
77
+
78
+ def _download_model(self, repo_id: str):
79
+
80
+ print(f"🦙 downloading model from {repo_id} if not present")
81
+
82
+ huggingface_token = os.environ.get("HUGGINGFACE_TOKEN")
83
+
84
+ snapshot_download(
85
+ repo_id=repo_id,
86
+ local_dir=MODEL_SNAPSHOT,
87
+ token=huggingface_token,
88
+ )
89
+
90
+ MOUNT_VOLUME.commit() # ensure other Modal Functions can see our writes before we quit
91
+
92
+ def _load_model(self):
93
+ # vLLM requires "HF_TOKEN" environment variable to access Hugging Face models
94
+ huggingface_token = os.environ.get("HUGGINGFACE_TOKEN")
95
+ if huggingface_token:
96
+ os.environ["HF_TOKEN"] = huggingface_token
97
+
98
+ self.llm = LLM(
99
+ model=MODEL_IDENTIFIER,
100
+ tensor_parallel_size=1,
101
+ dtype="bfloat16",
102
+ max_model_len=2048, # Input 1024 + Output 512 + Margin
103
+ gpu_memory_utilization=0.9,
104
+ trust_remote_code=True,
105
+ download_dir=MODEL_CACHE,
106
+ )
107
+
108
+ # Show GPU information
109
+ subprocess.run(["nvidia-smi"])
110
+
111
+ @modal.method()
112
+ def generate(self, chat_history):
113
+ """Generate a response using vLLM"""
114
+
115
+ tokenizer = self.llm.get_tokenizer()
116
+
117
+ formatted_text = tokenizer.apply_chat_template(
118
+ chat_history,
119
+ tokenize=False,
120
+ add_generation_prompt=True,
121
+ )
122
+
123
+ sampling_params = SamplingParams(
124
+ temperature=1.0,
125
+ top_k=50,
126
+ top_p=1.0,
127
+ max_tokens=512,
128
+ )
129
+
130
+ outputs = self.llm.generate([formatted_text], sampling_params)
131
+ response = outputs[0].outputs[0].text
132
+
133
+ return response
134
+
135
+ @modal.method()
136
+ def generate_stream(self, chat_history):
137
+ """Generate a streaming response using vLLM"""
138
+
139
+ tokenizer = self.llm.get_tokenizer()
140
+ formatted_text = tokenizer.apply_chat_template(
141
+ chat_history,
142
+ tokenize=False,
143
+ add_generation_prompt=True,
144
+ )
145
+
146
+ sampling_params = SamplingParams(
147
+ temperature=1.0,
148
+ top_k=50,
149
+ top_p=1.0,
150
+ max_tokens=512,
151
+ )
152
+
153
+ # Streaming generation with vLLM
154
+ for output in self.llm.generate([formatted_text], sampling_params):
155
+ for completion_output in output.outputs:
156
+ yield completion_output.text
157
+
158
+
159
+ @app.local_entrypoint()
160
+ def main():
161
+ SYSTEM_PROMPT = "You are a friendly Chatbot. Please respond in the same language as the user."
162
+
163
+ # Initialize chat history list
164
+ chat_history = []
165
+ chat_history.append(
166
+ {"role": "system", "content": [{"type": "text", "text": SYSTEM_PROMPT}]},
167
+ )
168
+
169
+ user_prompt = "Hi!"
170
+ print(f"USER: {user_prompt}\n")
171
+ chat_history.append(
172
+ {
173
+ "role": "user",
174
+ "content": [
175
+ # {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"},
176
+ {"type": "text", "text": user_prompt}
177
+ ],
178
+ }
179
+ )
180
+
181
+ model = VLLMModel()
182
+ response = model.generate.remote(chat_history)
183
+
184
+ print("AI:", response)
185
+ chat_history.append(
186
+ {"role": "assistant", "content": [{"type": "text", "text": response}]}
187
+ )
pyproject.toml ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [project]
2
+ name = "novel-heroes"
3
+ version = "0.1.0"
4
+ description = "Add your description here"
5
+ readme = "README.md"
6
+ requires-python = ">=3.12"
7
+ dependencies = [
8
+ "gradio[mcp]>=5.33.0",
9
+ "modal>=1.0.3",
10
+ ]
11
+
12
+ [dependency-groups]
13
+ dev = [
14
+ "accelerate>=1.7.0",
15
+ "bitsandbytes>=0.46.0",
16
+ "sentencepiece>=0.2.0",
17
+ "torch==2.7.0", # torch2.7.1 is not compatible with vllm
18
+ "transformers>=4.52.4",
19
+ "vllm>=0.9.0.1",
20
+ ]
requirements.txt ADDED
@@ -0,0 +1,951 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # This file was autogenerated by uv via the following command:
2
+ # uv export --format requirements-txt --no-dev
3
+ aiofiles==24.1.0 \
4
+ --hash=sha256:22a075c9e5a3810f0c2e48f3008c94d68c65d763b9b03857924c99e57355166c \
5
+ --hash=sha256:b4ec55f4195e3eb5d7abd1bf7e061763e864dd4954231fb8539a0ef8bb8260e5
6
+ # via gradio
7
+ aiohappyeyeballs==2.6.1 \
8
+ --hash=sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558 \
9
+ --hash=sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8
10
+ # via aiohttp
11
+ aiohttp==3.12.9 \
12
+ --hash=sha256:00369db59f09860e0e26c75035f80f92881103e90f5858c18f29eb4f8cb8970f \
13
+ --hash=sha256:0575d7ae9a9c206276a6aaa3ce364b467f29f0497c0db4449de060dc341d88d6 \
14
+ --hash=sha256:0bd0e06c8626361027f69df510c8484e17568ba2f91b2de51ea055f86ed3b071 \
15
+ --hash=sha256:11b5bf453056b6ac4924ede1188d01e8b8d4801a6aa5351da3a7dbdbc03cb44e \
16
+ --hash=sha256:16627b4caf6a36b605e3e1c4847e6d14af8e8d6b7dad322935be43237d4eb10d \
17
+ --hash=sha256:1a3f20a1b72643a0be5c9fcb97eb22607fcca32f1ca497f09a88d1ec3109daae \
18
+ --hash=sha256:20f8a6d3af13f043a09726add6d096b533f180cf8b43970a8d9c9ca978bf45c5 \
19
+ --hash=sha256:2c9914c8914ff40b68c6e4ed5da33e88d4e8f368fddd03ceb0eb3175905ca782 \
20
+ --hash=sha256:3647dd1da43d595a52c5071b68fd8d39c0fd25b80f2cdd83eaabd9d59cd1f139 \
21
+ --hash=sha256:4a1f72b2560beaa949b5d3b324fc07b66846d39a8e7cc106ca450312a5771e3e \
22
+ --hash=sha256:4cfa37e0797510fdb20ab0ee3ad483ae7cfacb27c6fb8de872a998705ad2286a \
23
+ --hash=sha256:55197e86994682a332e8943eb01b462ae25630b10f245812e517251d7a922f25 \
24
+ --hash=sha256:5cade22a0f0a4665003ded2bc4d43bb69fde790e5a287187569509c33333a3ab \
25
+ --hash=sha256:64e22f12dd940a6e7b923637b10b611b752f6117bc3a780b7e61cc43c9e04892 \
26
+ --hash=sha256:74e87ea6c832311b18a32b06baa6fee90a83dd630de951cca1aa175c3c9fa1ce \
27
+ --hash=sha256:7ae744b61b395e04b3d1acbbd301d98249397333f49419039517226ff32f3aa7 \
28
+ --hash=sha256:7ccc5a5a4ccfa0ef0191dad2926e9752c37f368d846a70e40095a8529c5fb6eb \
29
+ --hash=sha256:80fa1efc71d423be25db9dddefe8dcd90e487fbc9351a59549521b66405e71de \
30
+ --hash=sha256:94d0cf6606ed9f2373565b8d0005bb070afbb81525ef6fa6e0725b8aec0c0843 \
31
+ --hash=sha256:970bae350cedbabb7c9d0fc8564b004a547d4a27cf12dc986be0abf7d8cc8d81 \
32
+ --hash=sha256:97b036ce251825fd5ab69d302ca8a99d3352af1c616cf40b2306fdb734cd6d30 \
33
+ --hash=sha256:995b5640969b1250e37be6fc92d185e523e8df446f8bfa723b347e52d7ae80f9 \
34
+ --hash=sha256:998e323c107c3f6396c1f9de72289009057c611942771f24114ae78a76af0af5 \
35
+ --hash=sha256:9f44a4ebd717cc39796c4647495bc2901d0c168c71cd0132691ae3d0312215a9 \
36
+ --hash=sha256:ba7a8b5f02c2826eb29e8d6c38f1bc509efb506a2862131079b5b8d880ed4b62 \
37
+ --hash=sha256:bf6fac88666d7e4c6cfe649d133fcedbc68e37a4472e8662d98a7cf576207303 \
38
+ --hash=sha256:bfe590ddb0dca3cdb601787079276545f00cfb9493f73f00fa011e71dae6f5fd \
39
+ --hash=sha256:ccb1931cc8b4dc6d7a2d83db39db18c3f9ac3d46a59289cea301acbad57f3d12 \
40
+ --hash=sha256:d467a2049c4405853799dea41474b0ea9852fd465e7e2df819d3a33ac53214e8 \
41
+ --hash=sha256:d4a0fe3cd45cf6fb18222deef92af1c3efe090b7f43d477de61b2360c90a4b32 \
42
+ --hash=sha256:e429fce99ac3fd6423622713d2474a5911f24816ccdaf9a74c3ece854b7375c1 \
43
+ --hash=sha256:eeac3a965552dbf79bcc0b9b963b5f7d6364b1542eb609937278d70d27ae997f \
44
+ --hash=sha256:f9cdadfe84beb8ceafa98ab676e8c0caf1e5d60e8b33c385c11259ee0f7f2587 \
45
+ --hash=sha256:fc441aba05efec5c72127393f56206d0f3fb113aadcd1685033c10da1ff582ad \
46
+ --hash=sha256:fdbd04e9b05885eaaefdb81c163b6dc1431eb13ee2da16d82ee980d4dd123890
47
+ # via modal
48
+ aiosignal==1.3.2 \
49
+ --hash=sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5 \
50
+ --hash=sha256:a8c255c66fafb1e499c9351d0bf32ff2d8a0321595ebac3b93713656d2436f54
51
+ # via aiohttp
52
+ annotated-types==0.7.0 \
53
+ --hash=sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53 \
54
+ --hash=sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89
55
+ # via pydantic
56
+ anyio==4.9.0 \
57
+ --hash=sha256:673c0c244e15788651a4ff38710fea9675823028a6f08a5eda409e0c9840a028 \
58
+ --hash=sha256:9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c
59
+ # via
60
+ # gradio
61
+ # httpx
62
+ # mcp
63
+ # sse-starlette
64
+ # starlette
65
+ # watchfiles
66
+ attrs==25.3.0 \
67
+ --hash=sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3 \
68
+ --hash=sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b
69
+ # via
70
+ # aiohttp
71
+ # sigtools
72
+ audioop-lts==0.2.1 ; python_full_version >= '3.13' \
73
+ --hash=sha256:05da64e73837f88ee5c6217d732d2584cf638003ac72df124740460531e95e47 \
74
+ --hash=sha256:120678b208cca1158f0a12d667af592e067f7a50df9adc4dc8f6ad8d065a93fb \
75
+ --hash=sha256:161249db9343b3c9780ca92c0be0d1ccbfecdbccac6844f3d0d44b9c4a00a17f \
76
+ --hash=sha256:2aeb6f96f7f6da80354330470b9134d81b4cf544cdd1c549f2f45fe964d28059 \
77
+ --hash=sha256:2bdb3b7912ccd57ea53197943f1bbc67262dcf29802c4a6df79ec1c715d45a78 \
78
+ --hash=sha256:3827e3fce6fee4d69d96a3d00cd2ab07f3c0d844cb1e44e26f719b34a5b15455 \
79
+ --hash=sha256:4a8dd6a81770f6ecf019c4b6d659e000dc26571b273953cef7cd1d5ce2ff3ae6 \
80
+ --hash=sha256:534ce808e6bab6adb65548723c8cbe189a3379245db89b9d555c4210b4aaa9b6 \
81
+ --hash=sha256:54cd4520fc830b23c7d223693ed3e1b4d464997dd3abc7c15dce9a1f9bd76ab2 \
82
+ --hash=sha256:56b7a0a4dba8e353436f31a932f3045d108a67b5943b30f85a5563f4d8488d77 \
83
+ --hash=sha256:5b7b4ff9de7a44e0ad2618afdc2ac920b91f4a6d3509520ee65339d4acde5abf \
84
+ --hash=sha256:64562c5c771fb0a8b6262829b9b4f37a7b886c01b4d3ecdbae1d629717db08b4 \
85
+ --hash=sha256:6e899eb8874dc2413b11926b5fb3857ec0ab55222840e38016a6ba2ea9b7d5e3 \
86
+ --hash=sha256:72e37f416adb43b0ced93419de0122b42753ee74e87070777b53c5d2241e7fab \
87
+ --hash=sha256:78bfb3703388c780edf900be66e07de5a3d4105ca8e8720c5c4d67927e0b15d0 \
88
+ --hash=sha256:a351af79edefc2a1bd2234bfd8b339935f389209943043913a919df4b0f13300 \
89
+ --hash=sha256:c45317debeb64002e980077642afbd977773a25fa3dfd7ed0c84dccfc1fafcb0 \
90
+ --hash=sha256:c589f06407e8340e81962575fcffbba1e92671879a221186c3d4662de9fe804e \
91
+ --hash=sha256:d1cd3c0b6f2ca25c7d2b1c3adeecbe23e65689839ba73331ebc7d893fcda7ffe \
92
+ --hash=sha256:d2d5434717f33117f29b5691fbdf142d36573d751716249a288fbb96ba26a281 \
93
+ --hash=sha256:d2de9b6fb8b1cf9f03990b299a9112bfdf8b86b6987003ca9e8a6c4f56d39543 \
94
+ --hash=sha256:d6bd20c7a10abcb0fb3d8aaa7508c0bf3d40dfad7515c572014da4b979d3310a \
95
+ --hash=sha256:e175350da05d2087e12cea8e72a70a1a8b14a17e92ed2022952a4419689ede5e \
96
+ --hash=sha256:e1af3ff32b8c38a7d900382646e91f2fc515fd19dea37e9392275a5cbfdbff63 \
97
+ --hash=sha256:e81268da0baa880431b68b1308ab7257eb33f356e57a5f9b1f915dfb13dd1387 \
98
+ --hash=sha256:f0ed1ad9bd862539ea875fb339ecb18fcc4148f8d9908f4502df28f94d23491a \
99
+ --hash=sha256:f0f2f336aa2aee2bce0b0dcc32bbba9178995454c7b979cf6ce086a8801e14c7 \
100
+ --hash=sha256:f24865991b5ed4b038add5edbf424639d1358144f4e2a3e7a84bc6ba23e35074 \
101
+ --hash=sha256:f51bb55122a89f7a0817d7ac2319744b4640b5b446c4c3efcea5764ea99ae509 \
102
+ --hash=sha256:f626a01c0a186b08f7ff61431c01c055961ee28769591efa8800beadd27a2959 \
103
+ --hash=sha256:fbae5d6925d7c26e712f0beda5ed69ebb40e14212c185d129b8dfbfcc335eb48 \
104
+ --hash=sha256:fd1345ae99e17e6910f47ce7d52673c6a1a70820d78b67de1b7abb3af29c426a \
105
+ --hash=sha256:ff3f97b3372c97782e9c6d3d7fdbe83bce8f70de719605bd7ee1839cd1ab360a
106
+ # via gradio
107
+ certifi==2025.4.26 \
108
+ --hash=sha256:0a816057ea3cdefcef70270d2c515e4506bbc954f417fa5ade2021213bb8f0c6 \
109
+ --hash=sha256:30350364dfe371162649852c63336a15c70c6510c2ad5015b21c2345311805f3
110
+ # via
111
+ # httpcore
112
+ # httpx
113
+ # modal
114
+ # requests
115
+ charset-normalizer==3.4.2 \
116
+ --hash=sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7 \
117
+ --hash=sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0 \
118
+ --hash=sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b \
119
+ --hash=sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff \
120
+ --hash=sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e \
121
+ --hash=sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148 \
122
+ --hash=sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a \
123
+ --hash=sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e \
124
+ --hash=sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63 \
125
+ --hash=sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c \
126
+ --hash=sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b \
127
+ --hash=sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0 \
128
+ --hash=sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0 \
129
+ --hash=sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1 \
130
+ --hash=sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981 \
131
+ --hash=sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c \
132
+ --hash=sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980 \
133
+ --hash=sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7 \
134
+ --hash=sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d \
135
+ --hash=sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3 \
136
+ --hash=sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd \
137
+ --hash=sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214 \
138
+ --hash=sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c \
139
+ --hash=sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f \
140
+ --hash=sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691 \
141
+ --hash=sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf \
142
+ --hash=sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b \
143
+ --hash=sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a
144
+ # via requests
145
+ click==8.1.8 \
146
+ --hash=sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2 \
147
+ --hash=sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a
148
+ # via
149
+ # modal
150
+ # typer
151
+ # uvicorn
152
+ colorama==0.4.6 ; sys_platform == 'win32' \
153
+ --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \
154
+ --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6
155
+ # via
156
+ # click
157
+ # tqdm
158
+ fastapi==0.115.12 \
159
+ --hash=sha256:1e2c2a2646905f9e83d32f04a3f86aff4a286669c6c950ca95b5fd68c2602681 \
160
+ --hash=sha256:e94613d6c05e27be7ffebdd6ea5f388112e5e430c8f7d6494a9d1d88d43e814d
161
+ # via gradio
162
+ ffmpy==0.6.0 \
163
+ --hash=sha256:332dd93198a162db61e527e866a04578d3713e577bfe68f2ed26ba9d09dbc948 \
164
+ --hash=sha256:c8369bf45f8bd5285ebad94c4a789a79e7af86eded74c1f8c36eccf57aaea58c
165
+ # via gradio
166
+ filelock==3.18.0 \
167
+ --hash=sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2 \
168
+ --hash=sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de
169
+ # via huggingface-hub
170
+ frozenlist==1.6.2 \
171
+ --hash=sha256:12af99e6023851b36578e5bcc60618b5b30f4650340e29e565cd1936326dbea7 \
172
+ --hash=sha256:15c33f665faa9b8f8e525b987eeaae6641816e0f6873e8a9c4d224338cebbb55 \
173
+ --hash=sha256:16263bd677a31fe1a5dc2b803b564e349c96f804a81706a62b8698dd14dbba50 \
174
+ --hash=sha256:207f717fd5e65fddb77d33361ab8fa939f6d89195f11307e073066886b33f2b8 \
175
+ --hash=sha256:2ad8851ae1f6695d735f8646bf1e68675871789756f7f7e8dc8224a74eabb9d0 \
176
+ --hash=sha256:2e51b2054886ff7db71caf68285c2cd936eb7a145a509965165a2aae715c92a7 \
177
+ --hash=sha256:2e5e7564d232a782baa3089b25a0d979e2e4d6572d3c7231fcceacc5c22bf0f7 \
178
+ --hash=sha256:30155cc481f73f92f47ab1e858a7998f7b1207f9b5cf3b3cba90ec65a7f224f5 \
179
+ --hash=sha256:301eb2f898d863031f8c5a56c88a6c5d976ba11a4a08a1438b96ee3acb5aea80 \
180
+ --hash=sha256:324a4cf4c220ddb3db1f46ade01e48432c63fa8c26812c710006e7f6cfba4a08 \
181
+ --hash=sha256:38544cae535ed697960891131731b33bb865b7d197ad62dc380d2dbb1bceff48 \
182
+ --hash=sha256:3bd12d727cd616387d50fe283abebb2db93300c98f8ff1084b68460acd551926 \
183
+ --hash=sha256:47396898f98fae5c9b9bb409c3d2cf6106e409730f35a0926aad09dd7acf1ef5 \
184
+ --hash=sha256:48544d07404d7fcfccb6cc091922ae10de4d9e512c537c710c063ae8f5662b85 \
185
+ --hash=sha256:4fbce985c7fe7bafb4d9bf647c835dbe415b465a897b0c79d1bdf0f3fae5fe50 \
186
+ --hash=sha256:53835d8a6929c2f16e02616f8b727bd140ce8bf0aeddeafdb290a67c136ca8ad \
187
+ --hash=sha256:55dc289a064c04819d669e6e8a85a1c0416e6c601782093bdc749ae14a2f39da \
188
+ --hash=sha256:56de277a0e0ad26a1dcdc99802b4f5becd7fd890807b68e3ecff8ced01d58132 \
189
+ --hash=sha256:61bae4d345a26550d0ed9f2c9910ea060f89dbfc642b7b96e9510a95c3a33b3c \
190
+ --hash=sha256:65eb9e8a973161bdac5fa06ea6bd261057947adc4f47a7a6ef3d6db30c78c5b4 \
191
+ --hash=sha256:695284e51458dabb89af7f7dc95c470aa51fd259207aba5378b187909297feef \
192
+ --hash=sha256:6c5c3c575148aa7308a38709906842039d7056bf225da6284b7a11cf9275ac5d \
193
+ --hash=sha256:6ee0cf89e7638de515c0bb2e8be30e8e2e48f3be9b6c2f7127bca4a1f35dff45 \
194
+ --hash=sha256:6f01620444a674eaad900a3263574418e99c49e2a5d6e5330753857363b5d59f \
195
+ --hash=sha256:6fcd8d56880dccdd376afb18f483ab55a0e24036adc9a83c914d4b7bb5729d4e \
196
+ --hash=sha256:76857098ee17258df1a61f934f2bae052b8542c9ea6b187684a737b2e3383a65 \
197
+ --hash=sha256:82b94c8948341512306ca8ccc702771600b442c6abe5f8ee017e00e452a209e8 \
198
+ --hash=sha256:84105cb0f3479dfa20b85f459fb2db3b0ee52e2f84e86d447ea8b0de1fb7acdd \
199
+ --hash=sha256:84d918b01781c6ebb5b776c18a87dd3016ff979eb78626aaca928bae69a640c3 \
200
+ --hash=sha256:88b1b79ae86fdacc4bf842a4e0456540947abba64a84e61b5ae24c87adb089db \
201
+ --hash=sha256:90e5a84016d0d2fb828f770ede085b5d89155fcb9629b8a3237c960c41c120c3 \
202
+ --hash=sha256:947abfcc8c42a329bbda6df97a4b9c9cdb4e12c85153b3b57b9d2f02aa5877dc \
203
+ --hash=sha256:9b679187cba0a99f1162c7ec1b525e34bdc5ca246857544d16c1ed234562df80 \
204
+ --hash=sha256:9cb386dd69ae91be586aa15cb6f39a19b5f79ffc1511371eca8ff162721c4867 \
205
+ --hash=sha256:9ccbeb1c8dda4f42d0678076aa5cbde941a232be71c67b9d8ca89fbaf395807c \
206
+ --hash=sha256:a400fe775a41b6d7a3fef00d88f10cbae4f0074c9804e282013d7797671ba58d \
207
+ --hash=sha256:ae1785b76f641cce4efd7e6f49ca4ae456aa230383af5ab0d4d3922a7e37e763 \
208
+ --hash=sha256:b79bcf97ca03c95b044532a4fef6e5ae106a2dd863875b75fde64c553e3f4820 \
209
+ --hash=sha256:bbd2225d7218e7d386f4953d11484b0e38e5d134e85c91f0a6b0f30fb6ae25c4 \
210
+ --hash=sha256:bceb7bd48849d4b76eac070a6d508aa3a529963f5d9b0a6840fd41fb381d5a09 \
211
+ --hash=sha256:c06a88daba7e891add42f9278cdf7506a49bc04df9b1648be54da1bf1c79b4c6 \
212
+ --hash=sha256:cbbdf62fcc1864912c592a1ec748fee94f294c6b23215d5e8e9569becb7723ee \
213
+ --hash=sha256:cc49f2277e8173abf028d744f8b7d69fe8cc26bffc2de97d47a3b529599fbf50 \
214
+ --hash=sha256:cc8b25b321863ed46992558a29bb09b766c41e25f31461666d501be0f893bada \
215
+ --hash=sha256:cd2d5abc0ccd99a2a5b437987f3b1e9c265c1044d2855a09ac68f09bbb8082ca \
216
+ --hash=sha256:d10d835f8ce8571fd555db42d3aef325af903535dad7e6faa7b9c8abe191bffc \
217
+ --hash=sha256:d3e6c0681783723bb472b6b8304e61ecfcb4c2b11cf7f243d923813c21ae5d2a \
218
+ --hash=sha256:e084d838693d73c0fe87d212b91af80c18068c95c3d877e294f165056cedfa58 \
219
+ --hash=sha256:e1a1d82f2eb3d2875a8d139ae3f5026f7797f9de5dce44f53811ab0a883e85e7 \
220
+ --hash=sha256:e2892d9ab060a847f20fab83fdb886404d0f213f648bdeaebbe76a6134f0973d \
221
+ --hash=sha256:eecc861bd30bc5ee3b04a1e6ebf74ed0451f596d91606843f3edbd2f273e2fe3 \
222
+ --hash=sha256:effc641518696471cf4962e8e32050133bc1f7b2851ae8fd0cb8797dd70dc202 \
223
+ --hash=sha256:f83992722642ee0db0333b1dbf205b1a38f97d51a7382eb304ba414d8c3d1e05
224
+ # via
225
+ # aiohttp
226
+ # aiosignal
227
+ fsspec==2025.5.1 \
228
+ --hash=sha256:24d3a2e663d5fc735ab256263c4075f374a174c3410c0b25e5bd1970bceaa462 \
229
+ --hash=sha256:2e55e47a540b91843b755e83ded97c6e897fa0942b11490113f09e9c443c2475
230
+ # via
231
+ # gradio-client
232
+ # huggingface-hub
233
+ gradio==5.33.0 \
234
+ --hash=sha256:0cba3a1596fda6cb0048dd7ddc2d57e6238a047c0df9dee5a4a0e5c2a74e8e50 \
235
+ --hash=sha256:165e412e1510a22471901744722f99a52cb56465a7e9609f1e400cac9999e9d8
236
+ # via novel-heroes
237
+ gradio-client==1.10.2 \
238
+ --hash=sha256:6de67b6224123d264c7887caa0586b2a9e2c369ec32ca38927cf8a841694edcd \
239
+ --hash=sha256:bf71ba95714784fa77ca0cfb20189ad91c55e563c2dc71722d023a97f1815d7f
240
+ # via gradio
241
+ groovy==0.1.2 \
242
+ --hash=sha256:25c1dc09b3f9d7e292458aa762c6beb96ea037071bf5e917fc81fb78d2231083 \
243
+ --hash=sha256:7f7975bab18c729a257a8b1ae9dcd70b7cafb1720481beae47719af57c35fa64
244
+ # via gradio
245
+ grpclib==0.4.7 \
246
+ --hash=sha256:2988ef57c02b22b7a2e8e961792c41ccf97efc2ace91ae7a5b0de03c363823c3
247
+ # via modal
248
+ h11==0.16.0 \
249
+ --hash=sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1 \
250
+ --hash=sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86
251
+ # via
252
+ # httpcore
253
+ # uvicorn
254
+ h2==4.2.0 \
255
+ --hash=sha256:479a53ad425bb29af087f3458a61d30780bc818e4ebcf01f0b536ba916462ed0 \
256
+ --hash=sha256:c8a52129695e88b1a0578d8d2cc6842bbd79128ac685463b887ee278126ad01f
257
+ # via grpclib
258
+ hf-xet==1.1.3 ; platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64' \
259
+ --hash=sha256:30c575a5306f8e6fda37edb866762140a435037365eba7a17ce7bd0bc0216a8b \
260
+ --hash=sha256:7c1a6aa6abed1f696f8099aa9796ca04c9ee778a58728a115607de9cc4638ff1 \
261
+ --hash=sha256:8203f52827e3df65981984936654a5b390566336956f65765a8aa58c362bb841 \
262
+ --hash=sha256:a5f09b1dd24e6ff6bcedb4b0ddab2d81824098bb002cf8b4ffa780545fa348c3 \
263
+ --hash=sha256:b578ae5ac9c056296bb0df9d018e597c8dc6390c5266f35b5c44696003cde9f3 \
264
+ --hash=sha256:b788a61977fbe6b5186e66239e2a329a3f0b7e7ff50dad38984c0c74f44aeca1 \
265
+ --hash=sha256:c3b508b5f583a75641aebf732853deb058953370ce8184f5dabc49f803b0819b \
266
+ --hash=sha256:fd2da210856444a34aad8ada2fc12f70dabed7cc20f37e90754d1d9b43bc0534
267
+ # via huggingface-hub
268
+ hpack==4.1.0 \
269
+ --hash=sha256:157ac792668d995c657d93111f46b4535ed114f0c9c8d672271bbec7eae1b496 \
270
+ --hash=sha256:ec5eca154f7056aa06f196a557655c5b009b382873ac8d1e66e79e87535f1dca
271
+ # via h2
272
+ httpcore==1.0.9 \
273
+ --hash=sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55 \
274
+ --hash=sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8
275
+ # via httpx
276
+ httpx==0.28.1 \
277
+ --hash=sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc \
278
+ --hash=sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad
279
+ # via
280
+ # gradio
281
+ # gradio-client
282
+ # mcp
283
+ # safehttpx
284
+ httpx-sse==0.4.0 \
285
+ --hash=sha256:1e81a3a3070ce322add1d3529ed42eb5f70817f45ed6ec915ab753f961139721 \
286
+ --hash=sha256:f329af6eae57eaa2bdfd962b42524764af68075ea87370a2de920af5341e318f
287
+ # via mcp
288
+ huggingface-hub==0.32.4 \
289
+ --hash=sha256:37abf8826b38d971f60d3625229221c36e53fe58060286db9baf619cfbf39767 \
290
+ --hash=sha256:f61d45cd338736f59fb0e97550b74c24ee771bcc92c05ae0766b9116abe720be
291
+ # via
292
+ # gradio
293
+ # gradio-client
294
+ hyperframe==6.1.0 \
295
+ --hash=sha256:b03380493a519fce58ea5af42e4a42317bf9bd425596f7a0835ffce80f1a42e5 \
296
+ --hash=sha256:f630908a00854a7adeabd6382b43923a4c4cd4b821fcb527e6ab9e15382a3b08
297
+ # via h2
298
+ idna==3.10 \
299
+ --hash=sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9 \
300
+ --hash=sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3
301
+ # via
302
+ # anyio
303
+ # httpx
304
+ # requests
305
+ # yarl
306
+ jinja2==3.1.6 \
307
+ --hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \
308
+ --hash=sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67
309
+ # via gradio
310
+ markdown-it-py==3.0.0 \
311
+ --hash=sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1 \
312
+ --hash=sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb
313
+ # via rich
314
+ markupsafe==3.0.2 \
315
+ --hash=sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30 \
316
+ --hash=sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9 \
317
+ --hash=sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396 \
318
+ --hash=sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028 \
319
+ --hash=sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557 \
320
+ --hash=sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a \
321
+ --hash=sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c \
322
+ --hash=sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c \
323
+ --hash=sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22 \
324
+ --hash=sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094 \
325
+ --hash=sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5 \
326
+ --hash=sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225 \
327
+ --hash=sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c \
328
+ --hash=sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87 \
329
+ --hash=sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf \
330
+ --hash=sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb \
331
+ --hash=sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48 \
332
+ --hash=sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c \
333
+ --hash=sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6 \
334
+ --hash=sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd \
335
+ --hash=sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1 \
336
+ --hash=sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d \
337
+ --hash=sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca \
338
+ --hash=sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a \
339
+ --hash=sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe \
340
+ --hash=sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8 \
341
+ --hash=sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f \
342
+ --hash=sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f \
343
+ --hash=sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0 \
344
+ --hash=sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79 \
345
+ --hash=sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430
346
+ # via
347
+ # gradio
348
+ # jinja2
349
+ mcp==1.9.0 \
350
+ --hash=sha256:905d8d208baf7e3e71d70c82803b89112e321581bcd2530f9de0fe4103d28749 \
351
+ --hash=sha256:9dfb89c8c56f742da10a5910a1f64b0d2ac2c3ed2bd572ddb1cfab7f35957178
352
+ # via gradio
353
+ mdurl==0.1.2 \
354
+ --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \
355
+ --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba
356
+ # via markdown-it-py
357
+ modal==1.0.3 \
358
+ --hash=sha256:16cc4f98f755cfc0d0c84b069a0239eb4a9a634e105d38bfa0666301e918544d \
359
+ --hash=sha256:7f27553c93529f5ac27f3d2ab2f7c0c2c0053314a35984ad25ebf8ede193ad14
360
+ # via novel-heroes
361
+ multidict==6.4.4 \
362
+ --hash=sha256:058cc59b9e9b143cc56715e59e22941a5d868c322242278d28123a5d09cdf6b0 \
363
+ --hash=sha256:0d2b9712211b860d123815a80b859075d86a4d54787e247d7fbee9db6832cf1c \
364
+ --hash=sha256:169c4ba7858176b797fe551d6e99040c531c775d2d57b31bcf4de6d7a669847f \
365
+ --hash=sha256:1d0121ccce8c812047d8d43d691a1ad7641f72c4f730474878a5aeae1b8ead8c \
366
+ --hash=sha256:329ae97fc2f56f44d91bc47fe0972b1f52d21c4b7a2ac97040da02577e2daca2 \
367
+ --hash=sha256:3312f63261b9df49be9d57aaa6abf53a6ad96d93b24f9cc16cf979956355ce6e \
368
+ --hash=sha256:3e9f1cd61a0ab857154205fb0b1f3d3ace88d27ebd1409ab7af5096e409614cd \
369
+ --hash=sha256:50855d03e9e4d66eab6947ba688ffb714616f985838077bc4b490e769e48da51 \
370
+ --hash=sha256:530d86827a2df6504526106b4c104ba19044594f8722d3e87714e847c74a0275 \
371
+ --hash=sha256:5883d6ee0fd9d8a48e9174df47540b7545909841ac82354c7ae4cbe9952603bd \
372
+ --hash=sha256:5bce06b83be23225be1905dcdb6b789064fae92499fbc458f59a8c0e68718601 \
373
+ --hash=sha256:5e2bcda30d5009996ff439e02a9f2b5c3d64a20151d34898c000a6281faa3781 \
374
+ --hash=sha256:622f26ea6a7e19b7c48dd9228071f571b2fbbd57a8cd71c061e848f281550e6b \
375
+ --hash=sha256:632a3bf8f1787f7ef7d3c2f68a7bde5be2f702906f8b5842ad6da9d974d0aab3 \
376
+ --hash=sha256:66ed0731f8e5dfd8369a883b6e564aca085fb9289aacabd9decd70568b9a30de \
377
+ --hash=sha256:69133376bc9a03f8c47343d33f91f74a99c339e8b58cea90433d8e24bb298031 \
378
+ --hash=sha256:69ee9e6ba214b5245031b76233dd95408a0fd57fdb019ddcc1ead4790932a8e8 \
379
+ --hash=sha256:6a2f58a66fe2c22615ad26156354005391e26a2f3721c3621504cd87c1ea87bf \
380
+ --hash=sha256:6a602151dbf177be2450ef38966f4be3467d41a86c6a845070d12e17c858a156 \
381
+ --hash=sha256:6ed5ae5605d4ad5a049fad2a28bb7193400700ce2f4ae484ab702d1e3749c3f9 \
382
+ --hash=sha256:7cf3bd54c56aa16fdb40028d545eaa8d051402b61533c21e84046e05513d5780 \
383
+ --hash=sha256:7f3d3b3c34867579ea47cbd6c1f2ce23fbfd20a273b6f9e3177e256584f1eacc \
384
+ --hash=sha256:82ffabefc8d84c2742ad19c37f02cde5ec2a1ee172d19944d380f920a340e4b9 \
385
+ --hash=sha256:83ec4967114295b8afd120a8eec579920c882831a3e4c3331d591a8e5bfbbc0f \
386
+ --hash=sha256:87a728af265e08f96b6318ebe3c0f68b9335131f461efab2fc64cc84a44aa6ed \
387
+ --hash=sha256:8cd8f81f1310182362fb0c7898145ea9c9b08a71081c5963b40ee3e3cac589b1 \
388
+ --hash=sha256:8ffb40b74400e4455785c2fa37eba434269149ec525fc8329858c862e4b35373 \
389
+ --hash=sha256:98af87593a666f739d9dba5d0ae86e01b0e1a9cfcd2e30d2d361fbbbd1a9162d \
390
+ --hash=sha256:995f985e2e268deaf17867801b859a282e0448633f1310e3704b30616d269d69 \
391
+ --hash=sha256:9abcf56a9511653fa1d052bfc55fbe53dbee8f34e68bd6a5a038731b0ca42d15 \
392
+ --hash=sha256:9f193eeda1857f8e8d3079a4abd258f42ef4a4bc87388452ed1e1c4d2b0c8740 \
393
+ --hash=sha256:a145c550900deb7540973c5cdb183b0d24bed6b80bf7bddf33ed8f569082535e \
394
+ --hash=sha256:a887b77f51d3d41e6e1a63cf3bc7ddf24de5939d9ff69441387dfefa58ac2e26 \
395
+ --hash=sha256:a920f9cf2abdf6e493c519492d892c362007f113c94da4c239ae88429835bad1 \
396
+ --hash=sha256:aff4cafea2d120327d55eadd6b7f1136a8e5a0ecf6fb3b6863e8aca32cd8e50a \
397
+ --hash=sha256:b0f1987787f5f1e2076b59692352ab29a955b09ccc433c1f6b8e8e18666f608b \
398
+ --hash=sha256:b9eb4c59c54421a32b3273d4239865cb14ead53a606db066d7130ac80cc8ec93 \
399
+ --hash=sha256:ba852168d814b2c73333073e1c7116d9395bea69575a01b0b3c89d2d5a87c8fb \
400
+ --hash=sha256:bbfcb60396f9bcfa63e017a180c3105b8c123a63e9d1428a36544e7d37ca9e20 \
401
+ --hash=sha256:bd4557071b561a8b3b6075c3ce93cf9bfb6182cb241805c3d66ced3b75eff4ac \
402
+ --hash=sha256:be06e73c06415199200e9a2324a11252a3d62030319919cde5e6950ffeccf72e \
403
+ --hash=sha256:c27e5dcf520923d6474d98b96749e6805f7677e93aaaf62656005b8643f907ab \
404
+ --hash=sha256:c93a6fb06cc8e5d3628b2b5fda215a5db01e8f08fc15fadd65662d9b857acbe4 \
405
+ --hash=sha256:cbebaa076aaecad3d4bb4c008ecc73b09274c952cf6a1b78ccfd689e51f5a5b0 \
406
+ --hash=sha256:cc5d83c6619ca5c9672cb78b39ed8542f1975a803dee2cda114ff73cbb076edd \
407
+ --hash=sha256:d21c1212171cf7da703c5b0b7a0e85be23b720818aef502ad187d627316d5645 \
408
+ --hash=sha256:d2fa86af59f8fc1972e121ade052145f6da22758f6996a197d69bb52f8204e7e \
409
+ --hash=sha256:d6b15c55721b1b115c5ba178c77104123745b1417527ad9641a4c5e2047450f0 \
410
+ --hash=sha256:d832c608f94b9f92a0ec8b7e949be7792a642b6e535fcf32f3e28fab69eeb046 \
411
+ --hash=sha256:dc388f75a1c00000824bf28b7633e40854f4127ede80512b44c3cfeeea1839a2 \
412
+ --hash=sha256:dc8c9736d8574b560634775ac0def6bdc1661fc63fa27ffdfc7264c565bcb4f2 \
413
+ --hash=sha256:ecde56ea2439b96ed8a8d826b50c57364612ddac0438c39e473fafad7ae1c23b \
414
+ --hash=sha256:f682c42003c7264134bfe886376299db4cc0c6cd06a3295b41b347044bcb5482
415
+ # via
416
+ # aiohttp
417
+ # grpclib
418
+ # yarl
419
+ numpy==2.2.6 \
420
+ --hash=sha256:038613e9fb8c72b0a41f025a7e4c3f0b7a1b5d768ece4796b674c8f3fe13efff \
421
+ --hash=sha256:0811bb762109d9708cca4d0b13c4f67146e3c3b7cf8d34018c722adb2d957c84 \
422
+ --hash=sha256:0bca768cd85ae743b2affdc762d617eddf3bcf8724435498a1e80132d04879e6 \
423
+ --hash=sha256:1bc23a79bfabc5d056d106f9befb8d50c31ced2fbc70eedb8155aec74a45798f \
424
+ --hash=sha256:287cc3162b6f01463ccd86be154f284d0893d2b3ed7292439ea97eafa8170e0b \
425
+ --hash=sha256:37c0ca431f82cd5fa716eca9506aefcabc247fb27ba69c5062a6d3ade8cf8f49 \
426
+ --hash=sha256:389d771b1623ec92636b0786bc4ae56abafad4a4c513d36a55dce14bd9ce8571 \
427
+ --hash=sha256:41c5a21f4a04fa86436124d388f6ed60a9343a6f767fced1a8a71c3fbca038ff \
428
+ --hash=sha256:4eeaae00d789f66c7a25ac5f34b71a7035bb474e679f410e5e1a94deb24cf2d4 \
429
+ --hash=sha256:55a4d33fa519660d69614a9fad433be87e5252f4b03850642f88993f7b2ca566 \
430
+ --hash=sha256:5bd4fc3ac8926b3819797a7c0e2631eb889b4118a9898c84f585a54d475b7e40 \
431
+ --hash=sha256:5beb72339d9d4fa36522fc63802f469b13cdbe4fdab4a288f0c441b74272ebfd \
432
+ --hash=sha256:6031dd6dfecc0cf9f668681a37648373bddd6421fff6c66ec1624eed0180ee06 \
433
+ --hash=sha256:71594f7c51a18e728451bb50cc60a3ce4e6538822731b2933209a1f3614e9282 \
434
+ --hash=sha256:894b3a42502226a1cac872f840030665f33326fc3dac8e57c607905773cdcde3 \
435
+ --hash=sha256:8e9ace4a37db23421249ed236fdcdd457d671e25146786dfc96835cd951aa7c1 \
436
+ --hash=sha256:b0544343a702fa80c95ad5d3d608ea3599dd54d4632df855e4c8d24eb6ecfa1c \
437
+ --hash=sha256:b4f13750ce79751586ae2eb824ba7e1e8dba64784086c98cdbbcc6a42112ce0d \
438
+ --hash=sha256:c1f9540be57940698ed329904db803cf7a402f3fc200bfe599334c9bd84a40b2 \
439
+ --hash=sha256:de749064336d37e340f640b05f24e9e3dd678c57318c7289d222a8a2f543e90c \
440
+ --hash=sha256:e1dda9c7e08dc141e0247a5b8f49cf05984955246a327d4c48bda16821947b2f \
441
+ --hash=sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd \
442
+ --hash=sha256:e3143e4451880bed956e706a3220b4e5cf6172ef05fcc397f6f36a550b1dd868 \
443
+ --hash=sha256:f1372f041402e37e5e633e586f62aa53de2eac8d98cbfb822806ce4bbefcb74d \
444
+ --hash=sha256:f2618db89be1b4e05f7a1a847a9c1c0abd63e63a1607d892dd54668dd92faf87 \
445
+ --hash=sha256:f447e6acb680fd307f40d3da4852208af94afdfab89cf850986c3ca00562f4fa \
446
+ --hash=sha256:f92729c95468a2f4f15e9bb94c432a9229d0d50de67304399627a943201baa2f \
447
+ --hash=sha256:fc0c5673685c508a142ca65209b4e79ed6740a4ed6b2267dbba90f34b0b3cfda \
448
+ --hash=sha256:fd83c01228a688733f1ded5201c678f0c53ecc1006ffbc404db9f7a899ac6249 \
449
+ --hash=sha256:fe27749d33bb772c80dcd84ae7e8df2adc920ae8297400dabec45f0dedb3f6de \
450
+ --hash=sha256:fee4236c876c4e8369388054d02d0e9bb84821feb1a64dd59e137e6511a551f8
451
+ # via
452
+ # gradio
453
+ # pandas
454
+ orjson==3.10.18 \
455
+ --hash=sha256:0315317601149c244cb3ecef246ef5861a64824ccbcb8018d32c66a60a84ffbc \
456
+ --hash=sha256:187ec33bbec58c76dbd4066340067d9ece6e10067bb0cc074a21ae3300caa84e \
457
+ --hash=sha256:1ebeda919725f9dbdb269f59bc94f861afbe2a27dce5608cdba2d92772364d1c \
458
+ --hash=sha256:22748de2a07fcc8781a70edb887abf801bb6142e6236123ff93d12d92db3d406 \
459
+ --hash=sha256:2d808e34ddb24fc29a4d4041dcfafbae13e129c93509b847b14432717d94b44f \
460
+ --hash=sha256:303565c67a6c7b1f194c94632a4a39918e067bd6176a48bec697393865ce4f06 \
461
+ --hash=sha256:356b076f1662c9813d5fa56db7d63ccceef4c271b1fb3dd522aca291375fcf17 \
462
+ --hash=sha256:3a83c9954a4107b9acd10291b7f12a6b29e35e8d43a414799906ea10e75438e6 \
463
+ --hash=sha256:3d600be83fe4514944500fa8c2a0a77099025ec6482e8087d7659e891f23058a \
464
+ --hash=sha256:50c15557afb7f6d63bc6d6348e0337a880a04eaa9cd7c9d569bcb4e760a24753 \
465
+ --hash=sha256:559eb40a70a7494cd5beab2d73657262a74a2c59aff2068fdba8f0424ec5b39d \
466
+ --hash=sha256:5adf5f4eed520a4959d29ea80192fa626ab9a20b2ea13f8f6dc58644f6927103 \
467
+ --hash=sha256:6612787e5b0756a171c7d81ba245ef63a3533a637c335aa7fcb8e665f4a0966f \
468
+ --hash=sha256:69c34b9441b863175cc6a01f2935de994025e773f814412030f269da4f7be147 \
469
+ --hash=sha256:7592bb48a214e18cd670974f289520f12b7aed1fa0b2e2616b8ed9e069e08595 \
470
+ --hash=sha256:7ac6bd7be0dcab5b702c9d43d25e70eb456dfd2e119d512447468f6405b4a69c \
471
+ --hash=sha256:86314fdb5053a2f5a5d881f03fca0219bfdf832912aa88d18676a5175c6916b5 \
472
+ --hash=sha256:8e4b2ae732431127171b875cb2668f883e1234711d3c147ffd69fe5be51a8012 \
473
+ --hash=sha256:9dca85398d6d093dd41dc0983cbf54ab8e6afd1c547b6b8a311643917fbf4e0c \
474
+ --hash=sha256:9f72f100cee8dde70100406d5c1abba515a7df926d4ed81e20a9730c062fe9ad \
475
+ --hash=sha256:ad8eacbb5d904d5591f27dee4031e2c1db43d559edb8f91778efd642d70e6bea \
476
+ --hash=sha256:aed411bcb68bf62e85588f2a7e03a6082cc42e5a2796e06e72a962d7c6310b52 \
477
+ --hash=sha256:bb70d489bc79b7519e5803e2cc4c72343c9dc1154258adf2f8925d0b60da7c58 \
478
+ --hash=sha256:c382a5c0b5931a5fc5405053d36c1ce3fd561694738626c77ae0b1dfc0242ca1 \
479
+ --hash=sha256:e0da26957e77e9e55a6c2ce2e7182a36a6f6b180ab7189315cb0995ec362e049 \
480
+ --hash=sha256:e8da3947d92123eda795b68228cafe2724815621fe35e8e320a9e9593a4bcd53 \
481
+ --hash=sha256:e9e86a6af31b92299b00736c89caf63816f70a4001e750bda179e15564d7a034 \
482
+ --hash=sha256:f3c29eb9a81e2fbc6fd7ddcfba3e101ba92eaff455b8d602bf7511088bbc0eae \
483
+ --hash=sha256:f54c1385a0e6aba2f15a40d703b858bedad36ded0491e55d35d905b2c34a4cc3 \
484
+ --hash=sha256:f872bef9f042734110642b7a11937440797ace8c87527de25e0c53558b579ccc \
485
+ --hash=sha256:f9f94cf6d3f9cd720d641f8399e390e7411487e493962213390d1ae45c7814fc
486
+ # via gradio
487
+ packaging==25.0 \
488
+ --hash=sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484 \
489
+ --hash=sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f
490
+ # via
491
+ # gradio
492
+ # gradio-client
493
+ # huggingface-hub
494
+ pandas==2.3.0 \
495
+ --hash=sha256:094e271a15b579650ebf4c5155c05dcd2a14fd4fdd72cf4854b2f7ad31ea30be \
496
+ --hash=sha256:1a881bc1309f3fce34696d07b00f13335c41f5f5a8770a33b09ebe23261cfc67 \
497
+ --hash=sha256:1d2b33e68d0ce64e26a4acc2e72d747292084f4e8db4c847c6f5f6cbe56ed6d8 \
498
+ --hash=sha256:213cd63c43263dbb522c1f8a7c9d072e25900f6975596f883f4bebd77295d4f3 \
499
+ --hash=sha256:2c7e2fc25f89a49a11599ec1e76821322439d90820108309bf42130d2f36c983 \
500
+ --hash=sha256:2eb4728a18dcd2908c7fccf74a982e241b467d178724545a48d0caf534b38ebf \
501
+ --hash=sha256:34600ab34ebf1131a7613a260a61dbe8b62c188ec0ea4c296da7c9a06b004133 \
502
+ --hash=sha256:404d681c698e3c8a40a61d0cd9412cc7364ab9a9cc6e144ae2992e11a2e77a20 \
503
+ --hash=sha256:430a63bae10b5086995db1b02694996336e5a8ac9a96b4200572b413dfdfccb9 \
504
+ --hash=sha256:4930255e28ff5545e2ca404637bcc56f031893142773b3468dc021c6c32a1390 \
505
+ --hash=sha256:6021910b086b3ca756755e86ddc64e0ddafd5e58e076c72cb1585162e5ad259b \
506
+ --hash=sha256:951805d146922aed8357e4cc5671b8b0b9be1027f0619cea132a9f3f65f2f09c \
507
+ --hash=sha256:9ff730713d4c4f2f1c860e36c005c7cefc1c7c80c21c0688fd605aa43c9fcf09 \
508
+ --hash=sha256:b9d8c3187be7479ea5c3d30c32a5d73d62a621166675063b2edd21bc47614027 \
509
+ --hash=sha256:ba24af48643b12ffe49b27065d3babd52702d95ab70f50e1b34f71ca703e2c0d \
510
+ --hash=sha256:bb32dc743b52467d488e7a7c8039b821da2826a9ba4f85b89ea95274f863280f \
511
+ --hash=sha256:bb3be958022198531eb7ec2008cfc78c5b1eed51af8600c6c5d9160d89d8d249 \
512
+ --hash=sha256:c6da97aeb6a6d233fb6b17986234cc723b396b50a3c6804776351994f2a658fd \
513
+ --hash=sha256:e1991bbb96f4050b09b5f811253c4f3cf05ee89a589379aa36cd623f21a31d6f \
514
+ --hash=sha256:e78ad363ddb873a631e92a3c063ade1ecfb34cae71e9a2be6ad100f875ac1042 \
515
+ --hash=sha256:f925f1ef673b4bd0271b1809b72b3270384f2b7d9d14a189b12b7fc02574d575
516
+ # via gradio
517
+ pillow==11.2.1 \
518
+ --hash=sha256:062b7a42d672c45a70fa1f8b43d1d38ff76b63421cbbe7f88146b39e8a558d91 \
519
+ --hash=sha256:0c7b29dbd4281923a2bfe562acb734cee96bbb129e96e6972d315ed9f232bef4 \
520
+ --hash=sha256:14e33b28bf17c7a38eede290f77db7c664e4eb01f7869e37fa98a5aa95978941 \
521
+ --hash=sha256:191955c55d8a712fab8934a42bfefbf99dd0b5875078240943f913bb66d46d9f \
522
+ --hash=sha256:1d535df14716e7f8776b9e7fee118576d65572b4aad3ed639be9e4fa88a1cad3 \
523
+ --hash=sha256:21e1470ac9e5739ff880c211fc3af01e3ae505859392bf65458c224d0bf283eb \
524
+ --hash=sha256:225c832a13326e34f212d2072982bb1adb210e0cc0b153e688743018c94a2681 \
525
+ --hash=sha256:25a5f306095c6780c52e6bbb6109624b95c5b18e40aab1c3041da3e9e0cd3e2d \
526
+ --hash=sha256:31df6e2d3d8fc99f993fd253e97fae451a8db2e7207acf97859732273e108406 \
527
+ --hash=sha256:36d6b82164c39ce5482f649b437382c0fb2395eabc1e2b1702a6deb8ad647d6e \
528
+ --hash=sha256:3e645b020f3209a0181a418bffe7b4a93171eef6c4ef6cc20980b30bebf17b7d \
529
+ --hash=sha256:3fe735ced9a607fee4f481423a9c36701a39719252a9bb251679635f99d0f7d2 \
530
+ --hash=sha256:4eb92eca2711ef8be42fd3f67533765d9fd043b8c80db204f16c8ea62ee1a751 \
531
+ --hash=sha256:5119225c622403afb4b44bad4c1ca6c1f98eed79db8d3bc6e4e160fc6339d66c \
532
+ --hash=sha256:598174aef4589af795f66f9caab87ba4ff860ce08cd5bb447c6fc553ffee603c \
533
+ --hash=sha256:63b5dff3a68f371ea06025a1a6966c9a1e1ee452fc8020c2cd0ea41b83e9037b \
534
+ --hash=sha256:74ee3d7ecb3f3c05459ba95eed5efa28d6092d751ce9bf20e3e253a4e497e691 \
535
+ --hash=sha256:750f96efe0597382660d8b53e90dd1dd44568a8edb51cb7f9d5d918b80d4de14 \
536
+ --hash=sha256:78092232a4ab376a35d68c4e6d5e00dfd73454bd12b230420025fbe178ee3b0b \
537
+ --hash=sha256:78afba22027b4accef10dbd5eed84425930ba41b3ea0a86fa8d20baaf19d807f \
538
+ --hash=sha256:7bdb5e09068332578214cadd9c05e3d64d99e0e87591be22a324bdbc18925be0 \
539
+ --hash=sha256:8ce2e8411c7aaef53e6bb29fe98f28cd4fbd9a1d9be2eeea434331aac0536b22 \
540
+ --hash=sha256:9622e3b6c1d8b551b6e6f21873bdcc55762b4b2126633014cea1803368a9aa16 \
541
+ --hash=sha256:9ee66787e095127116d91dea2143db65c7bb1e232f617aa5957c0d9d2a3f23a7 \
542
+ --hash=sha256:a64dd61998416367b7ef979b73d3a85853ba9bec4c2925f74e588879a58716b6 \
543
+ --hash=sha256:ad275964d52e2243430472fc5d2c2334b4fc3ff9c16cb0a19254e25efa03a155 \
544
+ --hash=sha256:b0e130705d568e2f43a17bcbe74d90958e8a16263868a12c3e0d9c8162690830 \
545
+ --hash=sha256:b2dbea1012ccb784a65349f57bbc93730b96e85b42e9bf7b01ef40443db720b4 \
546
+ --hash=sha256:d189ba1bebfbc0c0e529159631ec72bb9e9bc041f01ec6d3233d6d82eb823bc1 \
547
+ --hash=sha256:da3104c57bbd72948d75f6a9389e6727d2ab6333c3617f0a89d72d4940aa0443 \
548
+ --hash=sha256:e0b55f27f584ed623221cfe995c912c61606be8513bfa0e07d2c674b4516d9dd \
549
+ --hash=sha256:f91ebf30830a48c825590aede79376cb40f110b387c17ee9bd59932c961044f9 \
550
+ --hash=sha256:fdec757fea0b793056419bca3e9932eb2b0ceec90ef4813ea4c1e072c389eb28 \
551
+ --hash=sha256:fe15238d3798788d00716637b3d4e7bb6bde18b26e5d08335a96e88564a36b6b
552
+ # via gradio
553
+ propcache==0.3.1 \
554
+ --hash=sha256:050b571b2e96ec942898f8eb46ea4bfbb19bd5502424747e83badc2d4a99a44e \
555
+ --hash=sha256:05543250deac8e61084234d5fc54f8ebd254e8f2b39a16b1dce48904f45b744b \
556
+ --hash=sha256:09400e98545c998d57d10035ff623266927cb784d13dd2b31fd33b8a5316b85b \
557
+ --hash=sha256:0fbe94666e62ebe36cd652f5fc012abfbc2342de99b523f8267a678e4dfdee3c \
558
+ --hash=sha256:17d1c688a443355234f3c031349da69444be052613483f3e4158eef751abcd8a \
559
+ --hash=sha256:19a06db789a4bd896ee91ebc50d059e23b3639c25d58eb35be3ca1cbe967c3bf \
560
+ --hash=sha256:1c5c7ab7f2bb3f573d1cb921993006ba2d39e8621019dffb1c5bc94cdbae81e8 \
561
+ --hash=sha256:359e81a949a7619802eb601d66d37072b79b79c2505e6d3fd8b945538411400d \
562
+ --hash=sha256:3a02a28095b5e63128bcae98eb59025924f121f048a62393db682f049bf4ac24 \
563
+ --hash=sha256:3e584b6d388aeb0001d6d5c2bd86b26304adde6d9bb9bfa9c4889805021b96de \
564
+ --hash=sha256:40d980c33765359098837527e18eddefc9a24cea5b45e078a7f3bb5b032c6ecf \
565
+ --hash=sha256:4114c4ada8f3181af20808bedb250da6bae56660e4b8dfd9cd95d4549c0962f7 \
566
+ --hash=sha256:563f9d8c03ad645597b8d010ef4e9eab359faeb11a0a2ac9f7b4bc8c28ebef25 \
567
+ --hash=sha256:5a0a9898fdb99bf11786265468571e628ba60af80dc3f6eb89a3545540c6b0ef \
568
+ --hash=sha256:5aed8d8308215089c0734a2af4f2e95eeb360660184ad3912686c181e500b2e7 \
569
+ --hash=sha256:5cb5918253912e088edbf023788de539219718d3b10aef334476b62d2b53de53 \
570
+ --hash=sha256:5ced33d827625d0a589e831126ccb4f5c29dfdf6766cac441d23995a65825dcb \
571
+ --hash=sha256:6d8e309ff9a0503ef70dc9a0ebd3e69cf7b3894c9ae2ae81fc10943c37762458 \
572
+ --hash=sha256:7d2d5a0028d920738372630870e7d9644ce437142197f8c827194fca404bf03b \
573
+ --hash=sha256:813fbb8b6aea2fc9659815e585e548fe706d6f663fa73dff59a1677d4595a037 \
574
+ --hash=sha256:87380fb1f3089d2a0b8b00f006ed12bd41bd858fabfa7330c954c70f50ed8757 \
575
+ --hash=sha256:88c423efef9d7a59dae0614eaed718449c09a5ac79a5f224a8b9664d603f04a3 \
576
+ --hash=sha256:89498dd49c2f9a026ee057965cdf8192e5ae070ce7d7a7bd4b66a8e257d0c976 \
577
+ --hash=sha256:8a17583515a04358b034e241f952f1715243482fc2c2945fd99a1b03a0bd77d6 \
578
+ --hash=sha256:975af16f406ce48f1333ec5e912fe11064605d5c5b3f6746969077cc3adeb120 \
579
+ --hash=sha256:9a8ecf38de50a7f518c21568c80f985e776397b902f1ce0b01f799aba1608b40 \
580
+ --hash=sha256:9cec3239c85ed15bfaded997773fdad9fb5662b0a7cbc854a43f291eb183179e \
581
+ --hash=sha256:9f64d91b751df77931336b5ff7bafbe8845c5770b06630e27acd5dbb71e1931c \
582
+ --hash=sha256:a0ab8cf8cdd2194f8ff979a43ab43049b1df0b37aa64ab7eca04ac14429baeb7 \
583
+ --hash=sha256:a110205022d077da24e60b3df8bcee73971be9575dec5573dd17ae5d81751111 \
584
+ --hash=sha256:a34aa3a1abc50740be6ac0ab9d594e274f59960d3ad253cd318af76b996dd654 \
585
+ --hash=sha256:a444192f20f5ce8a5e52761a031b90f5ea6288b1eef42ad4c7e64fef33540b8f \
586
+ --hash=sha256:aa8efd8c5adc5a2c9d3b952815ff8f7710cefdcaf5f2c36d26aff51aeca2f12f \
587
+ --hash=sha256:aca63103895c7d960a5b9b044a83f544b233c95e0dcff114389d64d762017af7 \
588
+ --hash=sha256:b655032b202028a582d27aeedc2e813299f82cb232f969f87a4fde491a233f11 \
589
+ --hash=sha256:bef100c88d8692864651b5f98e871fb090bd65c8a41a1cb0ff2322db39c96c27 \
590
+ --hash=sha256:c2fe5c910f6007e716a06d269608d307b4f36e7babee5f36533722660e8c4a70 \
591
+ --hash=sha256:d249609e547c04d190e820d0d4c8ca03ed4582bcf8e4e160a6969ddfb57b62e5 \
592
+ --hash=sha256:dc1915ec523b3b494933b5424980831b636fe483d7d543f7afb7b3bf00f0c10f \
593
+ --hash=sha256:e1c4d24b804b3a87e9350f79e2371a705a188d292fd310e663483af6ee6718ee \
594
+ --hash=sha256:e474fc718e73ba5ec5180358aa07f6aded0ff5f2abe700e3115c37d75c947e18 \
595
+ --hash=sha256:e4fe2a6d5ce975c117a6bb1e8ccda772d1e7029c1cca1acd209f91d30fa72815 \
596
+ --hash=sha256:e7fb9a84c9abbf2b2683fa3e7b0d7da4d8ecf139a1c635732a8bda29c5214b0e \
597
+ --hash=sha256:ec314cde7314d2dd0510c6787326bbffcbdc317ecee6b7401ce218b3099075a7 \
598
+ --hash=sha256:f011f104db880f4e2166bcdcf7f58250f7a465bc6b068dc84c824a3d4a5c94dc \
599
+ --hash=sha256:f1528ec4374617a7a753f90f20e2f551121bb558fcb35926f99e3c42367164b8 \
600
+ --hash=sha256:f3bbecd2f34d0e6d3c543fdb3b15d6b60dd69970c2b4c822379e5ec8f6f621d5 \
601
+ --hash=sha256:f78eb8422acc93d7b69964012ad7048764bb45a54ba7a39bb9e146c72ea29723 \
602
+ --hash=sha256:fb6e0faf8cb6b4beea5d6ed7b5a578254c6d7df54c36ccd3d8b3eb00d6770277 \
603
+ --hash=sha256:feccd282de1f6322f56f6845bf1207a537227812f0a9bf5571df52bb418d79d5
604
+ # via
605
+ # aiohttp
606
+ # yarl
607
+ protobuf==5.29.5 \
608
+ --hash=sha256:3f1c6468a2cfd102ff4703976138844f78ebd1fb45f49011afc5139e9e283079 \
609
+ --hash=sha256:3f76e3a3675b4a4d867b52e4a5f5b78a2ef9565549d4037e06cf7b0942b1d3fc \
610
+ --hash=sha256:63848923da3325e1bf7e9003d680ce6e14b07e55d0473253a690c3a8b8fd6e61 \
611
+ --hash=sha256:6cf42630262c59b2d8de33954443d94b746c952b01434fc58a417fdbd2e84bd5 \
612
+ --hash=sha256:bc1463bafd4b0929216c35f437a8e28731a2b7fe3d98bb77a600efced5a15c84 \
613
+ --hash=sha256:e38c5add5a311f2a6eb0340716ef9b039c1dfa428b28f25a7838ac329204a671 \
614
+ --hash=sha256:fa18533a299d7ab6c55a238bf8629311439995f2e7eca5caaff08663606e9015
615
+ # via modal
616
+ pydantic==2.11.5 \
617
+ --hash=sha256:7f853db3d0ce78ce8bbb148c401c2cdd6431b3473c0cdff2755c7690952a7b7a \
618
+ --hash=sha256:f9c26ba06f9747749ca1e5c94d6a85cb84254577553c8785576fd38fa64dc0f7
619
+ # via
620
+ # fastapi
621
+ # gradio
622
+ # mcp
623
+ # pydantic-settings
624
+ pydantic-core==2.33.2 \
625
+ --hash=sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56 \
626
+ --hash=sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef \
627
+ --hash=sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a \
628
+ --hash=sha256:1082dd3e2d7109ad8b7da48e1d4710c8d06c253cbc4a27c1cff4fbcaa97a9e3f \
629
+ --hash=sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916 \
630
+ --hash=sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a \
631
+ --hash=sha256:3c6db6e52c6d70aa0d00d45cdb9b40f0433b96380071ea80b09277dba021ddf7 \
632
+ --hash=sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025 \
633
+ --hash=sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849 \
634
+ --hash=sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b \
635
+ --hash=sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e \
636
+ --hash=sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea \
637
+ --hash=sha256:61c18fba8e5e9db3ab908620af374db0ac1baa69f0f32df4f61ae23f15e586ac \
638
+ --hash=sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162 \
639
+ --hash=sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc \
640
+ --hash=sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1 \
641
+ --hash=sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5 \
642
+ --hash=sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88 \
643
+ --hash=sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290 \
644
+ --hash=sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d \
645
+ --hash=sha256:a7ec89dc587667f22b6a0b6579c249fca9026ce7c333fc142ba42411fa243cdc \
646
+ --hash=sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9 \
647
+ --hash=sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9 \
648
+ --hash=sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f \
649
+ --hash=sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5 \
650
+ --hash=sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab \
651
+ --hash=sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1 \
652
+ --hash=sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9 \
653
+ --hash=sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011 \
654
+ --hash=sha256:f517ca031dfc037a9c07e748cefd8d96235088b83b4f4ba8939105d20fa1dcd6 \
655
+ --hash=sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2 \
656
+ --hash=sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6
657
+ # via pydantic
658
+ pydantic-settings==2.9.1 \
659
+ --hash=sha256:59b4f431b1defb26fe620c71a7d3968a710d719f5f4cdbbdb7926edeb770f6ef \
660
+ --hash=sha256:c509bf79d27563add44e8446233359004ed85066cd096d8b510f715e6ef5d268
661
+ # via mcp
662
+ pydub==0.25.1 \
663
+ --hash=sha256:65617e33033874b59d87db603aa1ed450633288aefead953b30bded59cb599a6 \
664
+ --hash=sha256:980a33ce9949cab2a569606b65674d748ecbca4f0796887fd6f46173a7b0d30f
665
+ # via gradio
666
+ pygments==2.19.1 \
667
+ --hash=sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f \
668
+ --hash=sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c
669
+ # via rich
670
+ python-dateutil==2.9.0.post0 \
671
+ --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 \
672
+ --hash=sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427
673
+ # via pandas
674
+ python-dotenv==1.1.0 \
675
+ --hash=sha256:41f90bc6f5f177fb41f53e87666db362025010eb28f60a01c9143bfa33a2b2d5 \
676
+ --hash=sha256:d7c01d9e2293916c18baf562d95698754b0dbbb5e74d457c45d4f6561fb9d55d
677
+ # via pydantic-settings
678
+ python-multipart==0.0.20 \
679
+ --hash=sha256:8a62d3a8335e06589fe01f2a3e178cdcc632f3fbe0d492ad9ee0ec35aab1f104 \
680
+ --hash=sha256:8dd0cab45b8e23064ae09147625994d090fa46f5b0d1e13af944c331a7fa9d13
681
+ # via
682
+ # gradio
683
+ # mcp
684
+ pytz==2025.2 \
685
+ --hash=sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3 \
686
+ --hash=sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00
687
+ # via pandas
688
+ pyyaml==6.0.2 \
689
+ --hash=sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48 \
690
+ --hash=sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133 \
691
+ --hash=sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484 \
692
+ --hash=sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5 \
693
+ --hash=sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc \
694
+ --hash=sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1 \
695
+ --hash=sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652 \
696
+ --hash=sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5 \
697
+ --hash=sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8 \
698
+ --hash=sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476 \
699
+ --hash=sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563 \
700
+ --hash=sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b \
701
+ --hash=sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425 \
702
+ --hash=sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183 \
703
+ --hash=sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab \
704
+ --hash=sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725 \
705
+ --hash=sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e \
706
+ --hash=sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4 \
707
+ --hash=sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba
708
+ # via
709
+ # gradio
710
+ # huggingface-hub
711
+ requests==2.32.3 \
712
+ --hash=sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760 \
713
+ --hash=sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6
714
+ # via huggingface-hub
715
+ rich==14.0.0 \
716
+ --hash=sha256:1c9491e1951aac09caffd42f448ee3d04e58923ffe14993f6e83068dc395d7e0 \
717
+ --hash=sha256:82f1bc23a6a21ebca4ae0c45af9bdbc492ed20231dcb63f297d6d1021a9d5725
718
+ # via
719
+ # modal
720
+ # typer
721
+ ruff==0.11.13 ; sys_platform != 'emscripten' \
722
+ --hash=sha256:1808b3ed53e1a777c2ef733aca9051dc9bf7c99b26ece15cb59a0320fbdbd629 \
723
+ --hash=sha256:26816a218ca6ef02142343fd24c70f7cd8c5aa6c203bca284407adf675984432 \
724
+ --hash=sha256:26fa247dc68d1d4e72c179e08889a25ac0c7ba4d78aecfc835d49cbfd60bf514 \
725
+ --hash=sha256:29c3189895a8a6a657b7af4e97d330c8a3afd2c9c8f46c81e2fc5a31866517e3 \
726
+ --hash=sha256:4a9ddd3ec62a9a89578c85842b836e4ac832d4a2e0bfaad3b02243f930ceafcc \
727
+ --hash=sha256:4bdfbf1240533f40042ec00c9e09a3aade6f8c10b6414cf11b519488d2635d46 \
728
+ --hash=sha256:4ffbc82d70424b275b089166310448051afdc6e914fdab90e08df66c43bb5ca9 \
729
+ --hash=sha256:51c3f95abd9331dc5b87c47ac7f376db5616041173826dfd556cfe3d4977f492 \
730
+ --hash=sha256:53b15a9dfdce029c842e9a5aebc3855e9ab7771395979ff85b7c1dedb53ddc2b \
731
+ --hash=sha256:55e4bc3a77842da33c16d55b32c6cac1ec5fb0fbec9c8c513bdce76c4f922165 \
732
+ --hash=sha256:633bf2c6f35678c56ec73189ba6fa19ff1c5e4807a78bf60ef487b9dd272cc71 \
733
+ --hash=sha256:6c51f93029d54a910d3d24f7dd0bb909e31b6cd989a5e4ac513f4eb41629f0dc \
734
+ --hash=sha256:96c27935418e4e8e77a26bb05962817f28b8ef3843a6c6cc49d8783b5507f250 \
735
+ --hash=sha256:ab153241400789138d13f362c43f7edecc0edfffce2afa6a68434000ecd8f69a \
736
+ --hash=sha256:aef9c9ed1b5ca28bb15c7eac83b8670cf3b20b478195bd49c8d756ba0a36cf48 \
737
+ --hash=sha256:b4385285e9179d608ff1d2fb9922062663c658605819a6876d8beef0c30b7f3b \
738
+ --hash=sha256:d237a496e0778d719efb05058c64d28b757c77824e04ffe8796c7436e26712b7 \
739
+ --hash=sha256:d28ce58b5ecf0f43c1b71edffabe6ed7f245d5336b17805803312ec9bc665933
740
+ # via gradio
741
+ safehttpx==0.1.6 \
742
+ --hash=sha256:407cff0b410b071623087c63dd2080c3b44dc076888d8c5823c00d1e58cb381c \
743
+ --hash=sha256:b356bfc82cee3a24c395b94a2dbeabbed60aff1aa5fa3b5fe97c4f2456ebce42
744
+ # via gradio
745
+ semantic-version==2.10.0 \
746
+ --hash=sha256:bdabb6d336998cbb378d4b9db3a4b56a1e3235701dc05ea2690d9a997ed5041c \
747
+ --hash=sha256:de78a3b8e0feda74cabc54aab2da702113e33ac9d9eb9d2389bcf1f58b7d9177
748
+ # via gradio
749
+ shellingham==1.5.4 \
750
+ --hash=sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686 \
751
+ --hash=sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de
752
+ # via typer
753
+ sigtools==4.0.1 \
754
+ --hash=sha256:4b8e135a9cd4d2ea00da670c093372d74e672ba3abb87f4c98d8e73dea54445c \
755
+ --hash=sha256:d216b4cf920bbab0fce636ddc429ed8463a5b533d9e1492acb45a2a1bc36ac6c
756
+ # via synchronicity
757
+ six==1.17.0 \
758
+ --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \
759
+ --hash=sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81
760
+ # via python-dateutil
761
+ sniffio==1.3.1 \
762
+ --hash=sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2 \
763
+ --hash=sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc
764
+ # via anyio
765
+ sse-starlette==2.3.6 \
766
+ --hash=sha256:0382336f7d4ec30160cf9ca0518962905e1b69b72d6c1c995131e0a703b436e3 \
767
+ --hash=sha256:d49a8285b182f6e2228e2609c350398b2ca2c36216c2675d875f81e93548f760
768
+ # via mcp
769
+ starlette==0.46.2 \
770
+ --hash=sha256:595633ce89f8ffa71a015caed34a5b2dc1c0cdb3f0f1fbd1e69339cf2abeec35 \
771
+ --hash=sha256:7f7361f34eed179294600af672f565727419830b54b7b084efe44bb82d2fccd5
772
+ # via
773
+ # fastapi
774
+ # gradio
775
+ # mcp
776
+ synchronicity==0.9.13 \
777
+ --hash=sha256:2e59a1aee4c9c57ab780e69ce8f1fb3f182a5b1234c43599be18ff8420e75892 \
778
+ --hash=sha256:762bb5f84def464b2c7dbb944d4f19c3336a12ed7046bc5d9646f0b4a3f6a0d5
779
+ # via modal
780
+ toml==0.10.2 \
781
+ --hash=sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b \
782
+ --hash=sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f
783
+ # via modal
784
+ tomlkit==0.13.3 \
785
+ --hash=sha256:430cf247ee57df2b94ee3fbe588e71d362a941ebb545dec29b53961d61add2a1 \
786
+ --hash=sha256:c89c649d79ee40629a9fda55f8ace8c6a1b42deb912b2a8fd8d942ddadb606b0
787
+ # via gradio
788
+ tqdm==4.67.1 \
789
+ --hash=sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2 \
790
+ --hash=sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2
791
+ # via huggingface-hub
792
+ typer==0.16.0 \
793
+ --hash=sha256:1f79bed11d4d02d4310e3c1b7ba594183bcedb0ac73b27a9e5f28f6fb5b98855 \
794
+ --hash=sha256:af377ffaee1dbe37ae9440cb4e8f11686ea5ce4e9bae01b84ae7c63b87f1dd3b
795
+ # via
796
+ # gradio
797
+ # modal
798
+ types-certifi==2021.10.8.3 \
799
+ --hash=sha256:72cf7798d165bc0b76e1c10dd1ea3097c7063c42c21d664523b928e88b554a4f \
800
+ --hash=sha256:b2d1e325e69f71f7c78e5943d410e650b4707bb0ef32e4ddf3da37f54176e88a
801
+ # via modal
802
+ types-toml==0.10.8.20240310 \
803
+ --hash=sha256:3d41501302972436a6b8b239c850b26689657e25281b48ff0ec06345b8830331 \
804
+ --hash=sha256:627b47775d25fa29977d9c70dc0cbab3f314f32c8d8d0c012f2ef5de7aaec05d
805
+ # via modal
806
+ typing-extensions==4.14.0 \
807
+ --hash=sha256:8676b788e32f02ab42d9e7c61324048ae4c6d844a399eebace3d4979d75ceef4 \
808
+ --hash=sha256:a1514509136dd0b477638fc68d6a91497af5076466ad0fa6c338e44e359944af
809
+ # via
810
+ # anyio
811
+ # fastapi
812
+ # gradio
813
+ # gradio-client
814
+ # huggingface-hub
815
+ # modal
816
+ # pydantic
817
+ # pydantic-core
818
+ # synchronicity
819
+ # typer
820
+ # typing-inspection
821
+ typing-inspection==0.4.1 \
822
+ --hash=sha256:389055682238f53b04f7badcb49b989835495a96700ced5dab2d8feae4b26f51 \
823
+ --hash=sha256:6ae134cc0203c33377d43188d4064e9b357dba58cff3185f22924610e70a9d28
824
+ # via
825
+ # pydantic
826
+ # pydantic-settings
827
+ tzdata==2025.2 \
828
+ --hash=sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8 \
829
+ --hash=sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9
830
+ # via pandas
831
+ urllib3==2.4.0 \
832
+ --hash=sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466 \
833
+ --hash=sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813
834
+ # via
835
+ # gradio
836
+ # requests
837
+ uvicorn==0.34.3 ; sys_platform != 'emscripten' \
838
+ --hash=sha256:16246631db62bdfbf069b0645177d6e8a77ba950cfedbfd093acef9444e4d885 \
839
+ --hash=sha256:35919a9a979d7a59334b6b10e05d77c1d0d574c50e0fc98b8b1a0f165708b55a
840
+ # via
841
+ # gradio
842
+ # mcp
843
+ watchfiles==1.0.5 \
844
+ --hash=sha256:0125f91f70e0732a9f8ee01e49515c35d38ba48db507a50c5bdcad9503af5827 \
845
+ --hash=sha256:0a04059f4923ce4e856b4b4e5e783a70f49d9663d22a4c3b3298165996d1377f \
846
+ --hash=sha256:0b289572c33a0deae62daa57e44a25b99b783e5f7aed81b314232b3d3c81a11d \
847
+ --hash=sha256:10f6ae86d5cb647bf58f9f655fcf577f713915a5d69057a0371bc257e2553234 \
848
+ --hash=sha256:13bb21f8ba3248386337c9fa51c528868e6c34a707f729ab041c846d52a0c69a \
849
+ --hash=sha256:1a2902ede862969077b97523987c38db28abbe09fb19866e711485d9fbf0d417 \
850
+ --hash=sha256:1a7bac2bde1d661fb31f4d4e8e539e178774b76db3c2c17c4bb3e960a5de07a2 \
851
+ --hash=sha256:360a398c3a19672cf93527f7e8d8b60d8275119c5d900f2e184d32483117a705 \
852
+ --hash=sha256:3e380c89983ce6e6fe2dd1e1921b9952fb4e6da882931abd1824c092ed495dec \
853
+ --hash=sha256:4a8ec1e4e16e2d5bafc9ba82f7aaecfeec990ca7cd27e84fb6f191804ed2fcfc \
854
+ --hash=sha256:4ab626da2fc1ac277bbf752446470b367f84b50295264d2d313e28dc4405d663 \
855
+ --hash=sha256:839ebd0df4a18c5b3c1b890145b5a3f5f64063c2a0d02b13c76d78fe5de34936 \
856
+ --hash=sha256:894342d61d355446d02cd3988a7326af344143eb33a2fd5d38482a92072d9563 \
857
+ --hash=sha256:9f4571a783914feda92018ef3901dab8caf5b029325b5fe4558c074582815249 \
858
+ --hash=sha256:a056c2f692d65bf1e99c41045e3bdcaea3cb9e6b5a53dcaf60a5f3bd95fc9763 \
859
+ --hash=sha256:a0dbcb1c2d8f2ab6e0a81c6699b236932bd264d4cef1ac475858d16c403de74d \
860
+ --hash=sha256:a2014a2b18ad3ca53b1f6c23f8cd94a18ce930c1837bd891262c182640eb40a6 \
861
+ --hash=sha256:ab44e1580924d1ffd7b3938e02716d5ad190441965138b4aa1d1f31ea0877f04 \
862
+ --hash=sha256:b5eb568c2aa6018e26da9e6c86f3ec3fd958cee7f0311b35c2630fa4217d17f2 \
863
+ --hash=sha256:b7529b5dcc114679d43827d8c35a07c493ad6f083633d573d81c660abc5979e9 \
864
+ --hash=sha256:b9dca99744991fc9850d18015c4f0438865414e50069670f5f7eee08340d8b40 \
865
+ --hash=sha256:d6f9367b132078b2ceb8d066ff6c93a970a18c3029cea37bfd7b2d3dd2e5db8f \
866
+ --hash=sha256:ee0822ce1b8a14fe5a066f93edd20aada932acfe348bede8aa2149f1a4489512 \
867
+ --hash=sha256:f2e55a9b162e06e3f862fb61e399fe9f05d908d019d87bf5b496a04ef18a970a \
868
+ --hash=sha256:f436601594f15bf406518af922a89dcaab416568edb6f65c4e5bbbad1ea45c11 \
869
+ --hash=sha256:fe43139b2c0fdc4a14d4f8d5b5d967f7a2777fd3d38ecf5b1ec669b0d7e43c21
870
+ # via modal
871
+ websockets==15.0.1 \
872
+ --hash=sha256:0701bc3cfcb9164d04a14b149fd74be7347a530ad3bbf15ab2c678a2cd3dd9a2 \
873
+ --hash=sha256:0af68c55afbd5f07986df82831c7bff04846928ea8d1fd7f30052638788bc9b5 \
874
+ --hash=sha256:0f3c1e2ab208db911594ae5b4f79addeb3501604a165019dd221c0bdcabe4db8 \
875
+ --hash=sha256:229cf1d3ca6c1804400b0a9790dc66528e08a6a1feec0d5040e8b9eb14422375 \
876
+ --hash=sha256:3be571a8b5afed347da347bfcf27ba12b069d9d7f42cb8c7028b5e98bbb12597 \
877
+ --hash=sha256:3c714d2fc58b5ca3e285461a4cc0c9a66bd0e24c5da9911e30158286c9b5be7f \
878
+ --hash=sha256:3e90baa811a5d73f3ca0bcbf32064d663ed81318ab225ee4f427ad4e26e5aff3 \
879
+ --hash=sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4 \
880
+ --hash=sha256:592f1a9fe869c778694f0aa806ba0374e97648ab57936f092fd9d87f8bc03665 \
881
+ --hash=sha256:595b6c3969023ecf9041b2936ac3827e4623bfa3ccf007575f04c5a6aa318c22 \
882
+ --hash=sha256:5a939de6b7b4e18ca683218320fc67ea886038265fd1ed30173f5ce3f8e85675 \
883
+ --hash=sha256:5d54b09eba2bada6011aea5375542a157637b91029687eb4fdb2dab11059c1b4 \
884
+ --hash=sha256:64dee438fed052b52e4f98f76c5790513235efaa1ef7f3f2192c392cd7c91b65 \
885
+ --hash=sha256:746ee8dba912cd6fc889a8147168991d50ed70447bf18bcda7039f7d2e3d9151 \
886
+ --hash=sha256:756c56e867a90fb00177d530dca4b097dd753cde348448a1012ed6c5131f8b7d \
887
+ --hash=sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee \
888
+ --hash=sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa \
889
+ --hash=sha256:c338ffa0520bdb12fbc527265235639fb76e7bc7faafbb93f6ba80d9c06578a9 \
890
+ --hash=sha256:d5f6b181bb38171a8ad1d6aa58a67a6aa9d4b38d0f8c5f496b9e42561dfc62fe \
891
+ --hash=sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561 \
892
+ --hash=sha256:e8b56bdcdb4505c8078cb6c7157d9811a85790f2f2b3632c7d1462ab5783d215 \
893
+ --hash=sha256:ee443ef070bb3b6ed74514f5efaa37a252af57c90eb33b956d35c8e9c10a1931 \
894
+ --hash=sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f \
895
+ --hash=sha256:fcd5cf9e305d7b8338754470cf69cf81f420459dbae8a3b40cee57417f4614a7
896
+ # via gradio-client
897
+ yarl==1.20.0 \
898
+ --hash=sha256:04d8cfb12714158abf2618f792c77bc5c3d8c5f37353e79509608be4f18705c9 \
899
+ --hash=sha256:087e9731884621b162a3e06dc0d2d626e1542a617f65ba7cc7aeab279d55ad33 \
900
+ --hash=sha256:123393db7420e71d6ce40d24885a9e65eb1edefc7a5228db2d62bcab3386a5c0 \
901
+ --hash=sha256:18e321617de4ab170226cd15006a565d0fa0d908f11f724a2c9142d6b2812ab0 \
902
+ --hash=sha256:2137810a20b933b1b1b7e5cf06a64c3ed3b4747b0e5d79c9447c00db0e2f752f \
903
+ --hash=sha256:25b3bc0763a7aca16a0f1b5e8ef0f23829df11fb539a1b70476dcab28bd83da7 \
904
+ --hash=sha256:2a8f64df8ed5d04c51260dbae3cc82e5649834eebea9eadfd829837b8093eb00 \
905
+ --hash=sha256:33bb660b390a0554d41f8ebec5cd4475502d84104b27e9b42f5321c5192bfcd1 \
906
+ --hash=sha256:3b2992fe29002fd0d4cbaea9428b09af9b8686a9024c840b8a2b8f4ea4abc16f \
907
+ --hash=sha256:3b60a86551669c23dc5445010534d2c5d8a4e012163218fc9114e857c0586fdd \
908
+ --hash=sha256:3d7dbbe44b443b0c4aa0971cb07dcb2c2060e4a9bf8d1301140a33a93c98e18c \
909
+ --hash=sha256:3e429857e341d5e8e15806118e0294f8073ba9c4580637e59ab7b238afca836f \
910
+ --hash=sha256:42fbe577272c203528d402eec8bf4b2d14fd49ecfec92272334270b850e9cd7d \
911
+ --hash=sha256:4345f58719825bba29895011e8e3b545e6e00257abb984f9f27fe923afca2501 \
912
+ --hash=sha256:447c5eadd750db8389804030d15f43d30435ed47af1313303ed82a62388176d3 \
913
+ --hash=sha256:4a34c52ed158f89876cba9c600b2c964dfc1ca52ba7b3ab6deb722d1d8be6df2 \
914
+ --hash=sha256:4c43030e4b0af775a85be1fa0433119b1565673266a70bf87ef68a9d5ba3174c \
915
+ --hash=sha256:4c903e0b42aab48abfbac668b5a9d7b6938e721a6341751331bcd7553de2dcae \
916
+ --hash=sha256:4d9949eaf05b4d30e93e4034a7790634bbb41b8be2d07edd26754f2e38e491de \
917
+ --hash=sha256:53b2da3a6ca0a541c1ae799c349788d480e5144cac47dba0266c7cb6c76151fe \
918
+ --hash=sha256:54ac15a8b60382b2bcefd9a289ee26dc0920cf59b05368c9b2b72450751c6eb8 \
919
+ --hash=sha256:5d0fe6af927a47a230f31e6004621fd0959eaa915fc62acfafa67ff7229a3124 \
920
+ --hash=sha256:5d3d6d14754aefc7a458261027a562f024d4f6b8a798adb472277f675857b1eb \
921
+ --hash=sha256:5d9b980d7234614bc4674468ab173ed77d678349c860c3af83b1fffb6a837ddc \
922
+ --hash=sha256:65a4053580fe88a63e8e4056b427224cd01edfb5f951498bfefca4052f0ce0ac \
923
+ --hash=sha256:686d51e51ee5dfe62dec86e4866ee0e9ed66df700d55c828a615640adc885307 \
924
+ --hash=sha256:69df35468b66c1a6e6556248e6443ef0ec5f11a7a4428cf1f6281f1879220f58 \
925
+ --hash=sha256:6d12b8945250d80c67688602c891237994d203d42427cb14e36d1a732eda480e \
926
+ --hash=sha256:70e0c580a0292c7414a1cead1e076c9786f685c1fc4757573d2967689b370e62 \
927
+ --hash=sha256:737e9f171e5a07031cbee5e9180f6ce21a6c599b9d4b2c24d35df20a52fabf4b \
928
+ --hash=sha256:798a5074e656f06b9fad1a162be5a32da45237ce19d07884d0b67a0aa9d5fdda \
929
+ --hash=sha256:7dc63ad0d541c38b6ae2255aaa794434293964677d5c1ec5d0116b0e308031f5 \
930
+ --hash=sha256:839de4c574169b6598d47ad61534e6981979ca2c820ccb77bf70f4311dd2cc64 \
931
+ --hash=sha256:84aeb556cb06c00652dbf87c17838eb6d92cfd317799a8092cee0e570ee11229 \
932
+ --hash=sha256:866349da9d8c5290cfefb7fcc47721e94de3f315433613e01b435473be63daa6 \
933
+ --hash=sha256:8681700f4e4df891eafa4f69a439a6e7d480d64e52bf460918f58e443bd3da7d \
934
+ --hash=sha256:8a7f62f5dc70a6c763bec9ebf922be52aa22863d9496a9a30124d65b489ea672 \
935
+ --hash=sha256:91bc450c80a2e9685b10e34e41aef3d44ddf99b3a498717938926d05ca493f6a \
936
+ --hash=sha256:95fc9876f917cac7f757df80a5dda9de59d423568460fe75d128c813b9af558e \
937
+ --hash=sha256:9c2aa4387de4bc3a5fe158080757748d16567119bef215bec643716b4fbf53f9 \
938
+ --hash=sha256:9c366b254082d21cc4f08f522ac201d0d83a8b8447ab562732931d31d80eb2a5 \
939
+ --hash=sha256:ab47acc9332f3de1b39e9b702d9c916af7f02656b2a86a474d9db4e53ef8fd7a \
940
+ --hash=sha256:af4baa8a445977831cbaa91a9a84cc09debb10bc8391f128da2f7bd070fc351d \
941
+ --hash=sha256:b2586e36dc070fc8fad6270f93242124df68b379c3a251af534030a4a33ef594 \
942
+ --hash=sha256:b6c4c3d0d6a0ae9b281e492b1465c72de433b782e6b5001c8e7249e085b69051 \
943
+ --hash=sha256:b9ae2fbe54d859b3ade40290f60fe40e7f969d83d482e84d2c31b9bff03e359e \
944
+ --hash=sha256:bb769ae5760cd1c6a712135ee7915f9d43f11d9ef769cb3f75a23e398a92d384 \
945
+ --hash=sha256:bf099e2432131093cc611623e0b0bcc399b8cddd9a91eded8bfb50402ec35018 \
946
+ --hash=sha256:d2cbca6760a541189cf87ee54ff891e1d9ea6406079c66341008f7ef6ab61145 \
947
+ --hash=sha256:e06b9f6cdd772f9b665e5ba8161968e11e403774114420737f7884b5bd7bdf6f \
948
+ --hash=sha256:f106e75c454288472dbe615accef8248c686958c2e7dd3b8d8ee2669770d020f \
949
+ --hash=sha256:f166eafa78810ddb383e930d62e623d288fb04ec566d1b4790099ae0f31485f1 \
950
+ --hash=sha256:f9d02b591a64e4e6ca18c5e3d925f11b559c763b950184a64cf47d74d7e41877
951
+ # via aiohttp
uv.lock ADDED
The diff for this file is too large to render. See raw diff