thomfoolery commited on
Commit
ddaa426
·
1 Parent(s): 6a52c11

fullstack solution chatface

Browse files
.gitignore ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Logs
2
+ logs
3
+ *.log
4
+ npm-debug.log*
5
+ yarn-debug.log*
6
+ yarn-error.log*
7
+ pnpm-debug.log*
8
+ lerna-debug.log*
9
+
10
+ node_modules
11
+ dist
12
+ dist-ssr
13
+ *.local
14
+
15
+ # Editor directories and files
16
+ .vscode/*
17
+ !.vscode/extensions.json
18
+ .idea
19
+ .DS_Store
20
+ *.suo
21
+ *.ntvs*
22
+ *.njsproj
23
+ *.sln
24
+ *.sw?
25
+ .env
BuildingAChainlitApp.md CHANGED
@@ -10,7 +10,7 @@ Well - we'll cover exactly that here!
10
 
11
  The primary method of customizing and interacting with the Chainlit UI is through a few critical [decorators](https://blog.hubspot.com/website/decorators-in-python).
12
 
13
- > NOTE: Simply put, the decorators (in Chainlit) are just ways we can "plug-in" to the functionality in Chainlit.
14
 
15
  We'll be concerning ourselves with three main scopes:
16
 
@@ -22,7 +22,7 @@ Let's dig into each scope and see what we're doing!
22
 
23
  ## On Application Start:
24
 
25
- The first thing you'll notice is that we have the traditional "wall of imports" this is to ensure we have everything we need to run our application.
26
 
27
  ```python
28
  import os
@@ -40,7 +40,7 @@ from aimakerspace.openai_utils.chatmodel import ChatOpenAI
40
  import chainlit as cl
41
  ```
42
 
43
- Next up, we have some prompt templates. As all sessions will use the same prompt templates without modification, and we don't need these templates to be specific per template - we can set them up here - at the application scope.
44
 
45
  ```python
46
  system_template = """\
@@ -59,7 +59,7 @@ user_role_prompt = UserRolePrompt(user_prompt_template)
59
 
60
  > NOTE: You'll notice that these are the exact same prompt templates we used from the Pythonic RAG Notebook in Week 1 Day 2!
61
 
62
- Following that - we can create the Python Class definition for our RAG pipeline - or *chain*, as we'll refer to it in the rest of this walkthrough.
63
 
64
  Let's look at the definition first:
65
 
@@ -93,12 +93,12 @@ class RetrievalAugmentedQAPipeline:
93
 
94
  Notice a few things:
95
 
96
- 1. We have modified this `RetrievalAugmentedQAPipeline` from the initial notebook to support streaming.
97
- 2. In essence, our pipeline is *chaining* a few events together:
98
- 1. We take our user query, and chain it into our Vector Database to collect related chunks
99
- 2. We take those contexts and our user's questions and chain them into the prompt templates
100
- 3. We take that prompt template and chain it into our LLM call
101
- 4. We chain the response of the LLM call to the user
102
  3. We are using a lot of `async` again!
103
 
104
  Now, we're going to create a helper function for processing uploaded text files.
@@ -131,13 +131,16 @@ Simply put, this downloads the file as a temp file, we load it in with `TextFile
131
 
132
  #### QUESTION #1:
133
 
134
- Why do we want to support streaming? What about streaming is important, or useful?
 
 
 
135
 
136
  ## On Chat Start:
137
 
138
  The next scope is where "the magic happens". On Chat Start is when a user begins a chat session. This will happen whenever a user opens a new chat window, or refreshes an existing chat window.
139
 
140
- You'll see that our code is set-up to immediately show the user a chat box requesting them to upload a file.
141
 
142
  ```python
143
  while files == None:
@@ -169,11 +172,15 @@ retrieval_augmented_qa_pipeline = RetrievalAugmentedQAPipeline(
169
 
170
  Now, we'll save that into our user session!
171
 
172
- > NOTE: Chainlit has some great documentation about [User Session](https://docs.chainlit.io/concepts/user-session).
 
 
173
 
174
- ### QUESTION #2:
 
 
175
 
176
- Why are we using User Session here? What about Python makes us need to use this? Why not just store everything in a global variable?
177
 
178
  ## On Message
179
 
@@ -203,12 +210,7 @@ For an extra challenge - modify the behaviour of your applciation by integrating
203
 
204
  If you're still looking for a challenge, or didn't make any modifications to your Pythonic RAG notebook:
205
 
206
- 1) Allow users to upload PDFs (this will require you to build a PDF parser as well)
207
- 2) Modify the VectorStore to leverage [Qdrant](https://python-client.qdrant.tech/)
208
-
209
- > NOTE: The motivation for these challenges is simple - the beginning of the course is extremely information dense, and people come from all kinds of different technical backgrounds. In order to ensure that all learners are able to engage with the content confidently and comfortably, we want to focus on the basic units of technical competency required. This leads to a situation where some learners, who came in with more robust technical skills, find the introductory material to be too simple - and these open-ended challenges help us do this!
210
-
211
-
212
-
213
-
214
 
 
 
10
 
11
  The primary method of customizing and interacting with the Chainlit UI is through a few critical [decorators](https://blog.hubspot.com/website/decorators-in-python).
12
 
13
+ > NOTE: Simply put, the decorators (in Chainlit) are just ways we can "plug-in" to the functionality in Chainlit.
14
 
15
  We'll be concerning ourselves with three main scopes:
16
 
 
22
 
23
  ## On Application Start:
24
 
25
+ The first thing you'll notice is that we have the traditional "wall of imports" this is to ensure we have everything we need to run our application.
26
 
27
  ```python
28
  import os
 
40
  import chainlit as cl
41
  ```
42
 
43
+ Next up, we have some prompt templates. As all sessions will use the same prompt templates without modification, and we don't need these templates to be specific per template - we can set them up here - at the application scope.
44
 
45
  ```python
46
  system_template = """\
 
59
 
60
  > NOTE: You'll notice that these are the exact same prompt templates we used from the Pythonic RAG Notebook in Week 1 Day 2!
61
 
62
+ Following that - we can create the Python Class definition for our RAG pipeline - or _chain_, as we'll refer to it in the rest of this walkthrough.
63
 
64
  Let's look at the definition first:
65
 
 
93
 
94
  Notice a few things:
95
 
96
+ 1. We have modified this `RetrievalAugmentedQAPipeline` from the initial notebook to support streaming.
97
+ 2. In essence, our pipeline is _chaining_ a few events together:
98
+ 1. We take our user query, and chain it into our Vector Database to collect related chunks
99
+ 2. We take those contexts and our user's questions and chain them into the prompt templates
100
+ 3. We take that prompt template and chain it into our LLM call
101
+ 4. We chain the response of the LLM call to the user
102
  3. We are using a lot of `async` again!
103
 
104
  Now, we're going to create a helper function for processing uploaded text files.
 
131
 
132
  #### QUESTION #1:
133
 
134
+ Why do we want to support streaming?
135
+ What about streaming is important, or useful?
136
+
137
+ A: Perceived performance. If we didn't have streaming, the user would have to wait for the LLM to finish processing the request before they could see the response. This would be a very slow experience.
138
 
139
  ## On Chat Start:
140
 
141
  The next scope is where "the magic happens". On Chat Start is when a user begins a chat session. This will happen whenever a user opens a new chat window, or refreshes an existing chat window.
142
 
143
+ You'll see that our code is set-up to immediately show the user a chat box requesting them to upload a file.
144
 
145
  ```python
146
  while files == None:
 
172
 
173
  Now, we'll save that into our user session!
174
 
175
+ > NOTE: Chainlit has some great documentation about [User Session](https://docs.chainlit.io/concepts/user-session).
176
+
177
+ ### QUESTION #2:
178
 
179
+ Why are we using User Session here?
180
+ What about Python makes us need to use this?
181
+ Why not just store everything in a global variable?
182
 
183
+ A: User Session allows us to store a user's conversation independently of each other. This enables users to have separate conversations with an LLM using different documents. It also prevents confidential information from being leaked to other users.
184
 
185
  ## On Message
186
 
 
210
 
211
  If you're still looking for a challenge, or didn't make any modifications to your Pythonic RAG notebook:
212
 
213
+ 1. Allow users to upload PDFs (this will require you to build a PDF parser as well)
214
+ 2. Modify the VectorStore to leverage [Qdrant](https://python-client.qdrant.tech/)
 
 
 
 
 
 
215
 
216
+ > NOTE: The motivation for these challenges is simple - the beginning of the course is extremely information dense, and people come from all kinds of different technical backgrounds. In order to ensure that all learners are able to engage with the content confidently and comfortably, we want to focus on the basic units of technical competency required. This leads to a situation where some learners, who came in with more robust technical skills, find the introductory material to be too simple - and these open-ended challenges help us do this!
Dockerfile CHANGED
@@ -1,31 +1,52 @@
1
-
2
  # Get a distribution that has uv already installed
3
  FROM ghcr.io/astral-sh/uv:python3.13-bookworm-slim
4
 
 
 
 
 
 
 
 
 
 
 
5
  # Add user - this is the user that will run the app
6
- # If you do not set user, the app will run as root (undesirable)
7
  RUN useradd -m -u 1000 user
8
  USER user
9
 
10
  # Set the home directory and path
11
  ENV HOME=/home/user \
12
- PATH=/home/user/.local/bin:$PATH
 
 
13
 
14
- ENV UVICORN_WS_PROTOCOL=websockets
 
 
 
15
 
 
 
16
 
17
  # Set the working directory
18
  WORKDIR $HOME/app
19
 
20
- # Copy the app to the container
21
- COPY --chown=user . $HOME/app
 
 
 
 
 
 
22
 
23
- # Install the dependencies
24
- # RUN uv sync --frozen
25
- RUN uv sync
26
 
27
  # Expose the port
28
  EXPOSE 7860
29
 
30
  # Run the app
31
- CMD ["uv", "run", "chainlit", "run", "app.py", "--host", "0.0.0.0", "--port", "7860"]
 
 
1
  # Get a distribution that has uv already installed
2
  FROM ghcr.io/astral-sh/uv:python3.13-bookworm-slim
3
 
4
+ # Install system dependencies
5
+ RUN apt-get update && apt-get install -y \
6
+ curl \
7
+ build-essential \
8
+ && curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \
9
+ && apt-get install -y nodejs \
10
+ && npm install -g yarn \
11
+ && apt-get clean \
12
+ && rm -rf /var/lib/apt/lists/*
13
+
14
  # Add user - this is the user that will run the app
 
15
  RUN useradd -m -u 1000 user
16
  USER user
17
 
18
  # Set the home directory and path
19
  ENV HOME=/home/user \
20
+ PATH=/home/user/.local/bin:/home/user/.cargo/bin:$PATH \
21
+ PATH=$HOME/app/node_modules/.bin:$PATH \
22
+ PATH=$HOME/app/.venv/bin:$PATH
23
 
24
+ # Install Rust for the user and set up shell
25
+ RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y \
26
+ && echo 'source $HOME/.cargo/env' >> $HOME/.bashrc \
27
+ && /bin/bash -c 'source $HOME/.cargo/env'
28
 
29
+ # Use bash as the default shell
30
+ SHELL ["/bin/bash", "-c"]
31
 
32
  # Set the working directory
33
  WORKDIR $HOME/app
34
 
35
+ # Copy package files first
36
+ COPY --chown=user package.json yarn.lock ./
37
+
38
+ # Install dependencies
39
+ RUN yarn install
40
+
41
+ # Copy the rest of the app
42
+ COPY --chown=user . .
43
 
44
+ # Install Python dependencies
45
+ RUN source $HOME/.cargo/env && uv sync --frozen
46
+ RUN source .venv/bin/activate
47
 
48
  # Expose the port
49
  EXPOSE 7860
50
 
51
  # Run the app
52
+ CMD yarn build && uv run uvicorn server:app --host 0.0.0.0 --port 7860
README.md CHANGED
@@ -12,7 +12,7 @@ license: apache-2.0
12
 
13
  In today's breakout rooms, we will be following the process that you saw during the challenge.
14
 
15
- Today, we will repeat the same process - but powered by our Pythonic RAG implementation we created last week.
16
 
17
  You'll notice a few differences in the `app.py` logic - as well as a few changes to the `aimakerspace` package to get things working smoothly with Chainlit.
18
 
@@ -28,7 +28,7 @@ You'll notice a few differences in the `app.py` logic - as well as a few changes
28
 
29
  The primary method of customizing and interacting with the Chainlit UI is through a few critical [decorators](https://blog.hubspot.com/website/decorators-in-python).
30
 
31
- > NOTE: Simply put, the decorators (in Chainlit) are just ways we can "plug-in" to the functionality in Chainlit.
32
 
33
  We'll be concerning ourselves with three main scopes:
34
 
@@ -40,7 +40,7 @@ Let's dig into each scope and see what we're doing!
40
 
41
  ### On Application Start:
42
 
43
- The first thing you'll notice is that we have the traditional "wall of imports" this is to ensure we have everything we need to run our application.
44
 
45
  ```python
46
  import os
@@ -58,7 +58,7 @@ from aimakerspace.openai_utils.chatmodel import ChatOpenAI
58
  import chainlit as cl
59
  ```
60
 
61
- Next up, we have some prompt templates. As all sessions will use the same prompt templates without modification, and we don't need these templates to be specific per template - we can set them up here - at the application scope.
62
 
63
  ```python
64
  system_template = """\
@@ -77,7 +77,7 @@ user_role_prompt = UserRolePrompt(user_prompt_template)
77
 
78
  > NOTE: You'll notice that these are the exact same prompt templates we used from the Pythonic RAG Notebook in Week 1 Day 2!
79
 
80
- Following that - we can create the Python Class definition for our RAG pipeline - or *chain*, as we'll refer to it in the rest of this walkthrough.
81
 
82
  Let's look at the definition first:
83
 
@@ -111,12 +111,12 @@ class RetrievalAugmentedQAPipeline:
111
 
112
  Notice a few things:
113
 
114
- 1. We have modified this `RetrievalAugmentedQAPipeline` from the initial notebook to support streaming.
115
- 2. In essence, our pipeline is *chaining* a few events together:
116
- 1. We take our user query, and chain it into our Vector Database to collect related chunks
117
- 2. We take those contexts and our user's questions and chain them into the prompt templates
118
- 3. We take that prompt template and chain it into our LLM call
119
- 4. We chain the response of the LLM call to the user
120
  3. We are using a lot of `async` again!
121
 
122
  Now, we're going to create a helper function for processing uploaded text files.
@@ -133,22 +133,22 @@ Now we can define our helper.
133
  def process_file(file: AskFileResponse):
134
  import tempfile
135
  import shutil
136
-
137
  print(f"Processing file: {file.name}")
138
-
139
  # Create a temporary file with the correct extension
140
  suffix = f".{file.name.split('.')[-1]}"
141
  with tempfile.NamedTemporaryFile(delete=False, suffix=suffix) as temp_file:
142
  # Copy the uploaded file content to the temporary file
143
  shutil.copyfile(file.path, temp_file.name)
144
  print(f"Created temporary file at: {temp_file.name}")
145
-
146
  # Create appropriate loader
147
  if file.name.lower().endswith('.pdf'):
148
  loader = PDFLoader(temp_file.name)
149
  else:
150
  loader = TextFileLoader(temp_file.name)
151
-
152
  try:
153
  # Load and process the documents
154
  documents = loader.load_documents()
@@ -168,11 +168,13 @@ Simply put, this downloads the file as a temp file, we load it in with `TextFile
168
 
169
  Why do we want to support streaming? What about streaming is important, or useful?
170
 
 
 
171
  ### On Chat Start:
172
 
173
  The next scope is where "the magic happens". On Chat Start is when a user begins a chat session. This will happen whenever a user opens a new chat window, or refreshes an existing chat window.
174
 
175
- You'll see that our code is set-up to immediately show the user a chat box requesting them to upload a file.
176
 
177
  ```python
178
  while files == None:
@@ -204,12 +206,14 @@ retrieval_augmented_qa_pipeline = RetrievalAugmentedQAPipeline(
204
 
205
  Now, we'll save that into our user session!
206
 
207
- > NOTE: Chainlit has some great documentation about [User Session](https://docs.chainlit.io/concepts/user-session).
208
 
209
- #### ❓ QUESTION #2:
210
 
211
  Why are we using User Session here? What about Python makes us need to use this? Why not just store everything in a global variable?
212
 
 
 
213
  ### On Message
214
 
215
  First, we load our chain from the user session:
@@ -258,7 +262,7 @@ Due to the way the repository is created - it should be straightforward to deplo
258
  <details>
259
  <summary>Adding this Repository to the Newly Created Space</summary>
260
 
261
- 1. Collect the SSH address from the newly created Space.
262
 
263
  ![image](https://i.imgur.com/Oag0m8E.png)
264
 
@@ -276,9 +280,9 @@ git remote add hf HF_SPACE_SSH_ADDRESS_HERE
276
  git pull hf main --no-rebase --allow-unrelated-histories -X ours
277
  ```
278
 
279
- 4. Use the command:
280
 
281
- ```bash
282
  git add .
283
  ```
284
 
@@ -288,7 +292,7 @@ git add .
288
  git commit -m "Deploying Pythonic RAG"
289
  ```
290
 
291
- 6. Use the command:
292
 
293
  ```bash
294
  git push hf main
@@ -307,7 +311,7 @@ git push hf main
307
 
308
  ![image](https://i.imgur.com/zh0a2By.png)
309
 
310
- 2. Navigate to `Variables and secrets` on the Settings page and click `New secret`:
311
 
312
  ![image](https://i.imgur.com/g2KlZdz.png)
313
 
@@ -330,10 +334,47 @@ Try uploading a text file and asking some questions!
330
  Upload a PDF file of the recent DeepSeek-R1 paper and ask the following questions:
331
 
332
  1. What is RL and how does it help reasoning?
 
 
 
 
 
 
 
333
  2. What is the difference between DeepSeek-R1 and DeepSeek-R1-Zero?
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
334
  3. What is this paper about?
335
 
336
- Does this application pass your vibe check? Are there any immediate pitfalls you're noticing?
 
 
 
 
 
 
 
 
 
 
337
 
338
  ## 🚧 CHALLENGE MODE 🚧
339
 
 
12
 
13
  In today's breakout rooms, we will be following the process that you saw during the challenge.
14
 
15
+ Today, we will repeat the same process - but powered by our Pythonic RAG implementation we created last week.
16
 
17
  You'll notice a few differences in the `app.py` logic - as well as a few changes to the `aimakerspace` package to get things working smoothly with Chainlit.
18
 
 
28
 
29
  The primary method of customizing and interacting with the Chainlit UI is through a few critical [decorators](https://blog.hubspot.com/website/decorators-in-python).
30
 
31
+ > NOTE: Simply put, the decorators (in Chainlit) are just ways we can "plug-in" to the functionality in Chainlit.
32
 
33
  We'll be concerning ourselves with three main scopes:
34
 
 
40
 
41
  ### On Application Start:
42
 
43
+ The first thing you'll notice is that we have the traditional "wall of imports" this is to ensure we have everything we need to run our application.
44
 
45
  ```python
46
  import os
 
58
  import chainlit as cl
59
  ```
60
 
61
+ Next up, we have some prompt templates. As all sessions will use the same prompt templates without modification, and we don't need these templates to be specific per template - we can set them up here - at the application scope.
62
 
63
  ```python
64
  system_template = """\
 
77
 
78
  > NOTE: You'll notice that these are the exact same prompt templates we used from the Pythonic RAG Notebook in Week 1 Day 2!
79
 
80
+ Following that - we can create the Python Class definition for our RAG pipeline - or _chain_, as we'll refer to it in the rest of this walkthrough.
81
 
82
  Let's look at the definition first:
83
 
 
111
 
112
  Notice a few things:
113
 
114
+ 1. We have modified this `RetrievalAugmentedQAPipeline` from the initial notebook to support streaming.
115
+ 2. In essence, our pipeline is _chaining_ a few events together:
116
+ 1. We take our user query, and chain it into our Vector Database to collect related chunks
117
+ 2. We take those contexts and our user's questions and chain them into the prompt templates
118
+ 3. We take that prompt template and chain it into our LLM call
119
+ 4. We chain the response of the LLM call to the user
120
  3. We are using a lot of `async` again!
121
 
122
  Now, we're going to create a helper function for processing uploaded text files.
 
133
  def process_file(file: AskFileResponse):
134
  import tempfile
135
  import shutil
136
+
137
  print(f"Processing file: {file.name}")
138
+
139
  # Create a temporary file with the correct extension
140
  suffix = f".{file.name.split('.')[-1]}"
141
  with tempfile.NamedTemporaryFile(delete=False, suffix=suffix) as temp_file:
142
  # Copy the uploaded file content to the temporary file
143
  shutil.copyfile(file.path, temp_file.name)
144
  print(f"Created temporary file at: {temp_file.name}")
145
+
146
  # Create appropriate loader
147
  if file.name.lower().endswith('.pdf'):
148
  loader = PDFLoader(temp_file.name)
149
  else:
150
  loader = TextFileLoader(temp_file.name)
151
+
152
  try:
153
  # Load and process the documents
154
  documents = loader.load_documents()
 
168
 
169
  Why do we want to support streaming? What about streaming is important, or useful?
170
 
171
+ A: Perceived performance. If we didn't have streaming, the user would have to wait for the LLM to finish processing the request before they could see the response. This would be a very slow experience and there is a chance the user might leave before the response is returned.
172
+
173
  ### On Chat Start:
174
 
175
  The next scope is where "the magic happens". On Chat Start is when a user begins a chat session. This will happen whenever a user opens a new chat window, or refreshes an existing chat window.
176
 
177
+ You'll see that our code is set-up to immediately show the user a chat box requesting them to upload a file.
178
 
179
  ```python
180
  while files == None:
 
206
 
207
  Now, we'll save that into our user session!
208
 
209
+ > NOTE: Chainlit has some great documentation about [User Session](https://docs.chainlit.io/concepts/user-session).
210
 
211
+ #### ❓ QUESTION #2:
212
 
213
  Why are we using User Session here? What about Python makes us need to use this? Why not just store everything in a global variable?
214
 
215
+ A: User Session allows us to store a user's conversation independently of each other. This enables users to have separate conversations with an LLM using different documents. It also prevents confidential information from being leaked to other users.
216
+
217
  ### On Message
218
 
219
  First, we load our chain from the user session:
 
262
  <details>
263
  <summary>Adding this Repository to the Newly Created Space</summary>
264
 
265
+ 1. Collect the SSH address from the newly created Space.
266
 
267
  ![image](https://i.imgur.com/Oag0m8E.png)
268
 
 
280
  git pull hf main --no-rebase --allow-unrelated-histories -X ours
281
  ```
282
 
283
+ 4. Use the command:
284
 
285
+ ```bash
286
  git add .
287
  ```
288
 
 
292
  git commit -m "Deploying Pythonic RAG"
293
  ```
294
 
295
+ 6. Use the command:
296
 
297
  ```bash
298
  git push hf main
 
311
 
312
  ![image](https://i.imgur.com/zh0a2By.png)
313
 
314
+ 2. Navigate to `Variables and secrets` on the Settings page and click `New secret`:
315
 
316
  ![image](https://i.imgur.com/g2KlZdz.png)
317
 
 
334
  Upload a PDF file of the recent DeepSeek-R1 paper and ask the following questions:
335
 
336
  1. What is RL and how does it help reasoning?
337
+
338
+ A: Reinforcement Learning (RL) is a type of machine learning technique where an agent learns to make decisions by interacting with an environment. The agent takes actions in the environment and receives feedback in the form of rewards or penalties based on the actions it takes. The goal of the agent is to learn the optimal strategy or policy that maximizes the cumulative reward over time.
339
+
340
+ In the context of reasoning tasks, RL can help improve reasoning capabilities in language models by allowing the model to learn through trial and error without the need for large amounts of supervised data. By using RL, the model can explore different reasoning behaviors and strategies, gradually improving its performance on reasoning tasks. RL enables the model to adapt and learn from its interactions with the environment, leading to the development of more sophisticated reasoning capabilities over time.
341
+
342
+ In the research mentioned, RL is used to train language models like DeepSeek-R1-Zero and DeepSeek-R1 to enhance their reasoning abilities. By applying RL directly to the base model or starting from a fine-tuned checkpoint, the models are able to exhibit powerful reasoning behaviors and achieve performance comparable to state-of-the-art models like OpenAI-o1 series. RL helps the models to evolve and improve their reasoning skills through self-learning and exploration, ultimately enhancing their performance on reasoning tasks.
343
+
344
  2. What is the difference between DeepSeek-R1 and DeepSeek-R1-Zero?
345
+
346
+ A: The main difference between DeepSeek-R1 and DeepSeek-R1-Zero lies in their approach to reasoning tasks and the use of data.
347
+
348
+ ##### DeepSeek-R1-Zero:
349
+
350
+ - DeepSeek-R1-Zero is a model that autonomously develops reasoning behaviors using reinforcement learning.
351
+ - It struggles with challenges like poor readability and language mixing.
352
+ - It undergoes a self-evolution process driven by RL, improving its reasoning capabilities autonomously.
353
+ - It achieves competitive performance on reasoning tasks, surpassing OpenAI-o1-0912.
354
+ - It demonstrates expert-level performance in code competition tasks and excels in benchmarks like MMLU, MMLU-Pro, and GPQA Diamond.
355
+
356
+ ##### DeepSeek-R1:
357
+
358
+ - DeepSeek-R1 is a method that utilizes reinforcement learning with human-friendly cold-start data.
359
+ - It aims to make reasoning processes more readable and share them with the open community.
360
+ - It explores the incorporation of a small amount of high-quality data as a cold start to potentially improve reasoning performance and accelerate convergence.
361
+ - It outperforms DeepSeek-V3 in engineering-related tasks and achieves outstanding results on benchmarks like MMLU, MMLU-Pro, and GPQA Diamond.
362
+
363
+ In summary, DeepSeek-R1-Zero focuses on autonomous reasoning behavior development through RL, while DeepSeek-R1 emphasizes the use of human-friendly cold-start data to enhance reasoning processes.
364
+
365
  3. What is this paper about?
366
 
367
+ The paper is about a specific topic or research area related to language models, mathematical reasoning, reinforcement learning, or other related fields. To determine the exact topic of the paper, we need to carefully read the title, abstract, introduction, and key sections of the paper. By analyzing the content, methodology, results, and conclusions presented in the paper, we can identify the main focus and contribution of the research.
368
+
369
+ Does this application pass your vibe check?
370
+
371
+ A: Yes. It does very well at answering specific questions about the paper.
372
+
373
+ Are there any immediate pitfalls you're noticing?
374
+
375
+ A: It does not do well at answering general or summary type questions about the paper. I believe this is because it is answering with only the context provided through the vector store retriever. So unless the paper contains a summary section and those embeddings are returned and provided to the LLM, it will not be able to answer these kinds of questions without a different approach.
376
+
377
+ One approach would be to identify these kinds of general or summary type questions and opt out of retrieving embeddings from a vector store and instead, either feed the LLM the entire document if there's enough context room or, split the document into several large chunks and summarize each chunk and then summarize the summaries.
378
 
379
  ## 🚧 CHALLENGE MODE 🚧
380
 
__pycache__/app.cpython-313.pyc ADDED
Binary file (7 kB). View file
 
__pycache__/chatface.cpython-313.pyc ADDED
Binary file (6.17 kB). View file
 
__pycache__/server.cpython-313.pyc ADDED
Binary file (7.2 kB). View file
 
chainlit.md DELETED
@@ -1,3 +0,0 @@
1
- # Welcome to Chat with Your Text File
2
-
3
- With this application, you can chat with an uploaded text file that is smaller than 2MB!
 
 
 
 
app.py → chainlit.py RENAMED
File without changes
eslint.config.js ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import js from '@eslint/js'
2
+ import globals from 'globals'
3
+ import reactHooks from 'eslint-plugin-react-hooks'
4
+ import reactRefresh from 'eslint-plugin-react-refresh'
5
+ import tseslint from 'typescript-eslint'
6
+
7
+ export default tseslint.config(
8
+ { ignores: ['dist'] },
9
+ {
10
+ extends: [js.configs.recommended, ...tseslint.configs.recommended],
11
+ files: ['**/*.{ts,tsx}'],
12
+ languageOptions: {
13
+ ecmaVersion: 2020,
14
+ globals: globals.browser,
15
+ },
16
+ plugins: {
17
+ 'react-hooks': reactHooks,
18
+ 'react-refresh': reactRefresh,
19
+ },
20
+ rules: {
21
+ ...reactHooks.configs.recommended.rules,
22
+ 'react-refresh/only-export-components': [
23
+ 'warn',
24
+ { allowConstantExport: true },
25
+ ],
26
+ },
27
+ },
28
+ )
index.html ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <link rel="icon" type="image/svg+xml" href="/vite.svg" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+ <title>Vite + React + TS</title>
8
+ <script src="https://unpkg.com/@tailwindcss/browser@4"></script>
9
+ </head>
10
+ <body class="bg-gray-100">
11
+ <div id="root"></div>
12
+ <script type="module" src="/src/main.tsx"></script>
13
+ </body>
14
+ </html>
package.json ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "chatface",
3
+ "private": true,
4
+ "version": "0.0.0",
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "vite & uvicorn server:app --reload",
8
+ "build": "tsc -b && vite build",
9
+ "lint": "eslint .",
10
+ "preview": "vite preview"
11
+ },
12
+ "dependencies": {
13
+ "react": "^18.3.1",
14
+ "react-dom": "^18.3.1"
15
+ },
16
+ "devDependencies": {
17
+ "@eslint/js": "^9.17.0",
18
+ "@types/react": "^18.3.18",
19
+ "@types/react-dom": "^18.3.5",
20
+ "@vitejs/plugin-react": "^4.3.4",
21
+ "eslint": "^9.17.0",
22
+ "eslint-plugin-react-hooks": "^5.0.0",
23
+ "eslint-plugin-react-refresh": "^0.4.16",
24
+ "globals": "^15.14.0",
25
+ "tsc": "^2.0.4",
26
+ "typescript": "~5.6.2",
27
+ "typescript-eslint": "^8.18.2",
28
+ "vite": "^6.0.5"
29
+ }
30
+ }
public/assets/index-B3Y9MGSu.js ADDED
The diff for this file is too large to render. See raw diff
 
public/index.html ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <link rel="icon" type="image/svg+xml" href="/vite.svg" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+ <title>Vite + React + TS</title>
8
+ <script src="https://unpkg.com/@tailwindcss/browser@4"></script>
9
+ <script type="module" crossorigin src="/assets/index-B3Y9MGSu.js"></script>
10
+ </head>
11
+ <body class="bg-gray-100">
12
+ <div id="root"></div>
13
+ </body>
14
+ </html>
public/vite.svg ADDED
pyproject.toml CHANGED
@@ -6,9 +6,13 @@ readme = "README.md"
6
  requires-python = ">=3.13"
7
  dependencies = [
8
  "chainlit>=2.0.4",
 
 
9
  "numpy>=2.2.2",
10
  "openai>=1.59.9",
11
  "pydantic==2.10.1",
12
  "pypdf2>=3.0.1",
 
 
13
  "websockets>=14.2",
14
  ]
 
6
  requires-python = ">=3.13"
7
  dependencies = [
8
  "chainlit>=2.0.4",
9
+ "fastapi[standard]>=0.115.6",
10
+ "fastembed>=0.5.1",
11
  "numpy>=2.2.2",
12
  "openai>=1.59.9",
13
  "pydantic==2.10.1",
14
  "pypdf2>=3.0.1",
15
+ "qdrant-client>=1.13.2",
16
+ "uvicorn>=0.34.0",
17
  "websockets>=14.2",
18
  ]
server.py ADDED
@@ -0,0 +1,160 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import uvicorn
3
+ import tempfile
4
+ from openai import AsyncOpenAI
5
+ from fastapi import FastAPI, Body, UploadFile, File, Depends, HTTPException
6
+ from fastapi.staticfiles import StaticFiles
7
+ from fastapi.responses import StreamingResponse, JSONResponse
8
+ from aimakerspace.openai_utils.prompts import (
9
+ UserRolePrompt,
10
+ SystemRolePrompt,
11
+ )
12
+ from aimakerspace.text_utils import CharacterTextSplitter, TextFileLoader, PDFLoader
13
+ from qdrant_client import QdrantClient
14
+ from fastapi.security import APIKeyHeader
15
+ import uuid
16
+ from typing import Dict, Optional
17
+
18
+ system_template = """\
19
+ Use the following context to answer a users question.
20
+ If you cannot find the answer in the context, say you don't know the answer.
21
+ """
22
+ system_role_prompt = SystemRolePrompt(system_template)
23
+
24
+ user_prompt_template = """\
25
+ Context:
26
+ {context}
27
+
28
+ Question:
29
+ {question}
30
+ """
31
+ user_role_prompt = UserRolePrompt(user_prompt_template)
32
+
33
+ app = FastAPI()
34
+ openai = AsyncOpenAI()
35
+ vector_db = QdrantClient(":memory:")
36
+ text_splitter = CharacterTextSplitter()
37
+
38
+ sessions: Dict[str, dict] = {}
39
+ api_key_header = APIKeyHeader(name="X-Session-ID", auto_error=False)
40
+
41
+ async def get_session(session_id: Optional[str] = Depends(api_key_header)):
42
+ if not session_id:
43
+ # Create new session
44
+ session_id = str(uuid.uuid4())
45
+ sessions[session_id] = {
46
+ "vector_db": None,
47
+ "vector_db_retriever": None,
48
+ }
49
+ elif session_id not in sessions:
50
+ raise HTTPException(status_code=404, detail="Session not found")
51
+ return session_id, sessions[session_id]
52
+
53
+ def process_file(file: UploadFile):
54
+ print(f"Processing file: {file.filename}")
55
+
56
+ # Create a temporary file with the correct extension
57
+ suffix = f".{file.filename.split('.')[-1]}"
58
+ with tempfile.NamedTemporaryFile(delete=False, suffix=suffix) as temp_file:
59
+ # Write the uploaded file content to the temporary file
60
+ content = file.file.read()
61
+ temp_file.write(content)
62
+ temp_file.flush()
63
+ print(f"Created temporary file at: {temp_file.name}")
64
+
65
+ # Create appropriate loader
66
+ if file.filename.lower().endswith('.pdf'):
67
+ loader = PDFLoader(temp_file.name)
68
+ else:
69
+ loader = TextFileLoader(temp_file.name)
70
+
71
+ try:
72
+ # Load and process the documents
73
+ documents = loader.load_documents()
74
+ texts = text_splitter.split_texts(documents)
75
+ return texts
76
+ finally:
77
+ # Clean up the temporary file
78
+ try:
79
+ os.unlink(temp_file.name)
80
+ except Exception as e:
81
+ print(f"Error cleaning up temporary file: {e}")
82
+
83
+ async def get_response(msg: str, session_id: str, vector_db: QdrantClient):
84
+ context_list = vector_db.query(
85
+ collection_name=session_id,
86
+ query_text=msg,
87
+ limit=4,
88
+ )
89
+
90
+ context_prompt = ""
91
+ for context in context_list:
92
+ context_prompt += context.document + "\n"
93
+
94
+ formatted_system_prompt = system_role_prompt.create_message()
95
+ formatted_user_prompt = user_role_prompt.create_message(question=msg, context=context_prompt)
96
+
97
+ openai_stream = await openai.chat.completions.create(
98
+ model="gpt-3.5-turbo",
99
+ messages=[
100
+ formatted_system_prompt,
101
+ formatted_user_prompt,
102
+ ],
103
+ temperature=0.0,
104
+ stream=True,
105
+ )
106
+
107
+ async def generate_response():
108
+ async for chunk in openai_stream:
109
+ if chunk.choices[0].delta.content is not None:
110
+ yield chunk.choices[0].delta.content
111
+ yield ""
112
+
113
+ return StreamingResponse(generate_response(), media_type="text/event-stream")
114
+
115
+ @app.post("/api/chat")
116
+ async def get_bot_response(
117
+ msg: str = Body(...),
118
+ session_data: tuple = Depends(get_session)
119
+ ):
120
+ session_id, _ = session_data
121
+ print(f"Session ID: {session_id}")
122
+
123
+ response = await get_response(msg, session_id, vector_db)
124
+ return response
125
+
126
+ @app.post("/api/file")
127
+ async def get_file_response(
128
+ file: UploadFile = File(..., description="A text file to process"),
129
+ session_data: tuple = Depends(get_session)
130
+ ):
131
+ session_id, _ = session_data
132
+
133
+ print(f"Session ID: {session_id}")
134
+
135
+ if not file.filename:
136
+ return {"error": "No file uploaded"}
137
+
138
+ try:
139
+ chunks = process_file(file)
140
+ vector_db.add(
141
+ collection_name=session_id,
142
+ documents=chunks,
143
+ )
144
+
145
+ return {
146
+ "message": "File processed successfully",
147
+ "session_id": session_id
148
+ }
149
+
150
+ except Exception as e:
151
+ return JSONResponse(
152
+ status_code=422,
153
+ content={"detail": str(e)}
154
+ )
155
+
156
+ app.mount("/", StaticFiles(directory="dist", html=True), name="static")
157
+ app.get("/")(StaticFiles(directory="dist", html=True))
158
+
159
+ if __name__ == "__main__":
160
+ uvicorn.run("server:app")
src/components/App.tsx ADDED
@@ -0,0 +1,251 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { useEffect, useRef, useState } from "react";
2
+ import { FileUpload } from "./FileUpload";
3
+
4
+ function Message({ message, role }: Message) {
5
+ return (
6
+ <pre
7
+ className={`p-4 mb-4 rounded-3xl shadow-md whitespace-pre-wrap ${
8
+ role === "user"
9
+ ? "bg-blue-200 text-blue-800 ml-20 self-end"
10
+ : "bg-green-200 text-green-800 mr-20 self-start"
11
+ }`}
12
+ >
13
+ {message}
14
+ </pre>
15
+ );
16
+ }
17
+
18
+ interface Message {
19
+ message: string;
20
+ role: "user" | "assistant";
21
+ }
22
+
23
+ function App() {
24
+ const scrollUpRef = useRef(false);
25
+ const [result, setResult] = useState("");
26
+ const [error, setError] = useState("");
27
+ const [isStreaming, setIsStreaming] = useState(false);
28
+ const [messages, setMessages] = useState<Message[]>([]);
29
+ const [isFileUploaded, setIsFileUploaded] = useState(false);
30
+
31
+ useEffect(() => {
32
+ function handleWheel(event: WheelEvent) {
33
+ if (isStreaming && event.deltaY < 0) {
34
+ scrollUpRef.current = true;
35
+ }
36
+ }
37
+
38
+ document.body.addEventListener("wheel", handleWheel);
39
+
40
+ return () => {
41
+ document.body.removeEventListener("wheel", handleWheel);
42
+ };
43
+ }, [isStreaming]);
44
+
45
+ const onKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {
46
+ if (e.key === "Enter" && !e.shiftKey) {
47
+ e.preventDefault();
48
+ e.currentTarget.form?.requestSubmit();
49
+ }
50
+ };
51
+
52
+ async function onSubmit(e: React.FormEvent<HTMLFormElement>) {
53
+ e.preventDefault();
54
+ const form = e.currentTarget;
55
+ const formData = new FormData(form);
56
+ const msg = formData.get("msg") as string;
57
+ const scrollingElement = document.scrollingElement;
58
+
59
+ if (msg.trim() === "") return;
60
+
61
+ scrollUpRef.current = false;
62
+ scrollingElement?.scrollTo({
63
+ behavior: "smooth",
64
+ top: scrollingElement?.scrollHeight,
65
+ });
66
+
67
+ setIsStreaming(true);
68
+ setMessages((prev) => [
69
+ ...prev,
70
+ {
71
+ message: msg,
72
+ role: "user",
73
+ },
74
+ ]);
75
+
76
+ try {
77
+ const session_id = sessionStorage.getItem("session_id");
78
+ const response = await fetch(form.action, {
79
+ method: "POST",
80
+ headers: session_id
81
+ ? {
82
+ "X-Session-ID": session_id,
83
+ }
84
+ : undefined,
85
+ body: msg,
86
+ });
87
+
88
+ let result = "";
89
+ const reader = response.body?.getReader();
90
+ const decoder = new TextDecoder();
91
+
92
+ form.msg.value = "";
93
+
94
+ await reader?.read().then(function processText(msg): Promise<void> {
95
+ const { value, done } = msg;
96
+ const chunk = decoder.decode(value, { stream: true });
97
+ const scrollingElement = document.scrollingElement;
98
+
99
+ if (done) {
100
+ setResult("");
101
+ setMessages((prev) => [
102
+ ...prev,
103
+ {
104
+ message: result,
105
+ role: "assistant",
106
+ },
107
+ ]);
108
+
109
+ if (scrollingElement) {
110
+ scrollingElement.scrollTop = scrollingElement?.scrollHeight;
111
+ }
112
+
113
+ return Promise.resolve();
114
+ }
115
+
116
+ result += chunk;
117
+ setResult(result);
118
+
119
+ if (!scrollUpRef.current && scrollingElement) {
120
+ scrollingElement.scrollTop = scrollingElement.scrollHeight;
121
+ }
122
+
123
+ // Read some more, and call this function again
124
+ return reader.read().then(processText);
125
+ });
126
+ } catch (error) {
127
+ setError("Error submitting message");
128
+ console.error("Error submitting message", error);
129
+ } finally {
130
+ setIsStreaming(false);
131
+ }
132
+ }
133
+
134
+ return (
135
+ <div className="max-w-prose flex flex-col items-center justify-end min-h-screen pb-4 mx-auto">
136
+ {!isFileUploaded && (
137
+ <div className="w-full min-h-screen flex flex-col items-center justify-center">
138
+ <h1 className="text-5xl font-bold mb-2">DocTalk</h1>
139
+ <p className="text-xl text-gray-500 mb-10 text-center">
140
+ Talk to your documents.
141
+ </p>
142
+ <FileUpload
143
+ isFileUploaded={isFileUploaded}
144
+ setIsFileUploaded={setIsFileUploaded}
145
+ />
146
+ <div className="text-xs text-center text-gray-500 mt-4">
147
+ Built with{" "}
148
+ <a
149
+ target="_blank"
150
+ href="https://openai.com/"
151
+ rel="noopener noreferrer"
152
+ className="underline text-blue-500"
153
+ >
154
+ OpenAI
155
+ </a>
156
+ ,{" "}
157
+ <a
158
+ target="_blank"
159
+ href="https://fastapi.tiangolo.com/"
160
+ rel="noopener noreferrer"
161
+ className="underline text-blue-500"
162
+ >
163
+ FastAPI
164
+ </a>
165
+ ,{" "}
166
+ <a
167
+ target="_blank"
168
+ href="https://qdrant.tech/"
169
+ rel="noopener noreferrer"
170
+ className="underline text-blue-500"
171
+ >
172
+ Qdrant
173
+ </a>
174
+ ,{" "}
175
+ <a
176
+ target="_blank"
177
+ href="https://react.dev/"
178
+ rel="noopener noreferrer"
179
+ className="underline text-blue-500"
180
+ >
181
+ React
182
+ </a>
183
+ ,{" "}
184
+ <a
185
+ target="_blank"
186
+ href="https://vitejs.dev/"
187
+ rel="noopener noreferrer"
188
+ className="underline text-blue-500"
189
+ >
190
+ Vite
191
+ </a>
192
+ , and{" "}
193
+ <a
194
+ target="_blank"
195
+ href="https://tailwindcss.com/"
196
+ rel="noopener noreferrer"
197
+ className="underline text-blue-500"
198
+ >
199
+ TailwindCSS
200
+ </a>
201
+ </div>
202
+ </div>
203
+ )}
204
+
205
+ <div className="w-full flex flex-col justify-end">
206
+ {messages.map(({ message, role }) => (
207
+ <Message message={message} role={role} key={`${message}-${role}`} />
208
+ ))}
209
+ {result && <Message message={result} role="assistant" />}
210
+ {error && <p className="text-red-500 text-center mb-4">{error}</p>}
211
+ </div>
212
+
213
+ {isFileUploaded && (
214
+ <form
215
+ method="post"
216
+ action="/api/chat"
217
+ onSubmit={onSubmit}
218
+ className="relative w-full"
219
+ >
220
+ <textarea
221
+ id="msg"
222
+ name="msg"
223
+ rows={3}
224
+ onKeyDown={onKeyDown}
225
+ disabled={isStreaming}
226
+ placeholder="Ask me anything about the document's contents..."
227
+ className="block bg-white w-full p-4 pr-20 m-0 rounded-3xl shadow-md text-xl disabled:opacity-50 disabled:cursor-not-allowed resize-none"
228
+ ></textarea>
229
+
230
+ <button
231
+ type="submit"
232
+ disabled={isStreaming}
233
+ aria-label="Send message"
234
+ className="absolute right-0 bottom-0 bg-blue-500 text-white p-2 m-2 rounded-full shadow-md hover:bg-blue-600 focus:bg-blue-600 cursor-pointer transition-colors duration-300 disabled:opacity-50 disabled:cursor-not-allowed"
235
+ >
236
+ <svg
237
+ xmlns="http://www.w3.org/2000/svg"
238
+ viewBox="0 0 24 24"
239
+ fill="currentColor"
240
+ className="w-6 h-6"
241
+ >
242
+ <path d="M3.478 2.404a.75.75 0 0 0-.926.941l2.432 7.905H13.5a.75.75 0 0 1 0 1.5H4.984l-2.432 7.905a.75.75 0 0 0 .926.94 60.519 60.519 0 0 0 18.445-8.986.75.75 0 0 0 0-1.218A60.517 60.517 0 0 0 3.478 2.404Z" />
243
+ </svg>
244
+ </button>
245
+ </form>
246
+ )}
247
+ </div>
248
+ );
249
+ }
250
+
251
+ export default App;
src/components/FileUpload.tsx ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { useState } from "react";
2
+
3
+ interface FileUploadProps {
4
+ isFileUploaded: boolean;
5
+ setIsFileUploaded: (isFileUploaded: boolean) => void;
6
+ }
7
+
8
+ function FileUpload({ isFileUploaded, setIsFileUploaded }: FileUploadProps) {
9
+ const [error, setError] = useState("");
10
+ const [isLoading, setIsLoading] = useState(false);
11
+
12
+ const onSubmitFile = async (e: React.FormEvent<HTMLFormElement>) => {
13
+ e.preventDefault();
14
+
15
+ const form = e.currentTarget;
16
+ const formData = new FormData(form);
17
+ const file = formData.get("file") as File;
18
+
19
+ if (!file) {
20
+ setError("Please choose a file");
21
+ return;
22
+ }
23
+
24
+ // if file is not a text or pdf file, set error
25
+ if (!file.name.endsWith(".txt") && !file.name.endsWith(".pdf")) {
26
+ setError("Please choose a text or PDF file");
27
+ return;
28
+ }
29
+
30
+ setIsLoading(true);
31
+
32
+ try {
33
+ const response = await fetch(form.action, {
34
+ method: "POST",
35
+ body: formData,
36
+ });
37
+
38
+ if (!response.ok) {
39
+ throw new Error(`HTTP error! status: ${response.status}`);
40
+ }
41
+
42
+ const data = await response.json();
43
+
44
+ if (data.session_id) {
45
+ sessionStorage.setItem("session_id", data.session_id);
46
+ }
47
+
48
+ console.log("response", response);
49
+ setIsFileUploaded(true);
50
+ } catch (error) {
51
+ setError("Error uploading file");
52
+ console.error("Error uploading file", error);
53
+ } finally {
54
+ form.reset();
55
+ setIsLoading(false);
56
+ }
57
+ };
58
+
59
+ const onChangeFile = (e: React.ChangeEvent<HTMLInputElement>) => {
60
+ e.currentTarget.form?.requestSubmit();
61
+ };
62
+
63
+ return !isFileUploaded ? (
64
+ <>
65
+ {isLoading && (
66
+ <div className="flex flex-col items-center justify-center w-full">
67
+ <p className="text-gray-500 text-center mb-4">Loading...</p>
68
+ <div className="w-40 h-40 border-4 border-gray-300 border-t-blue-500 rounded-full animate-spin"></div>
69
+ </div>
70
+ )}
71
+ {!isLoading && (
72
+ <form
73
+ method="post"
74
+ action="/api/file"
75
+ onSubmit={onSubmitFile}
76
+ encType="multipart/form-data"
77
+ className="w-full"
78
+ >
79
+ {error && <p className="text-red-500 text-center mb-4">{error}</p>}
80
+ <div className="bg-white relative w-full h-40 flex items-center justify-center text-gray-500 rounded-3xl relative border border-transparent hover:border-blue-500 hover:text-blue-500 transition-colors duration-300 shadow-md">
81
+ <input
82
+ type="file"
83
+ name="file"
84
+ onChange={onChangeFile}
85
+ placeholder="Upload a file"
86
+ className="absolute inset-0 opacity-0 cursor-pointer"
87
+ />
88
+ <p className="text-center">
89
+ <span className="font-bold text-xl">Drop a .pdf or .txt</span>
90
+ <br />
91
+ or click to upload
92
+ </p>
93
+ </div>
94
+ </form>
95
+ )}
96
+ </>
97
+ ) : null;
98
+ }
99
+
100
+ export { FileUpload };
src/main.tsx ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ import { StrictMode } from "react";
2
+ import { createRoot } from "react-dom/client";
3
+ import App from "./components/App.tsx";
4
+
5
+ createRoot(document.getElementById("root")!).render(
6
+ <StrictMode>
7
+ <App />
8
+ </StrictMode>
9
+ );
src/vite-env.d.ts ADDED
@@ -0,0 +1 @@
 
 
1
+ /// <reference types="vite/client" />
tsconfig.app.json ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "compilerOptions": {
3
+ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
4
+ "target": "ES2020",
5
+ "useDefineForClassFields": true,
6
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
7
+ "module": "ESNext",
8
+ "skipLibCheck": true,
9
+
10
+ /* Bundler mode */
11
+ "moduleResolution": "bundler",
12
+ "allowImportingTsExtensions": true,
13
+ "isolatedModules": true,
14
+ "moduleDetection": "force",
15
+ "noEmit": true,
16
+ "jsx": "react-jsx",
17
+
18
+ /* Linting */
19
+ "strict": true,
20
+ "noUnusedLocals": true,
21
+ "noUnusedParameters": true,
22
+ "noFallthroughCasesInSwitch": true,
23
+ "noUncheckedSideEffectImports": true
24
+ },
25
+ "include": ["src"]
26
+ }
tsconfig.json ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ {
2
+ "files": [],
3
+ "references": [
4
+ { "path": "./tsconfig.app.json" },
5
+ { "path": "./tsconfig.node.json" }
6
+ ]
7
+ }
tsconfig.node.json ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "compilerOptions": {
3
+ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
4
+ "target": "ES2022",
5
+ "lib": ["ES2023"],
6
+ "module": "ESNext",
7
+ "skipLibCheck": true,
8
+
9
+ /* Bundler mode */
10
+ "moduleResolution": "bundler",
11
+ "allowImportingTsExtensions": true,
12
+ "isolatedModules": true,
13
+ "moduleDetection": "force",
14
+ "noEmit": true,
15
+
16
+ /* Linting */
17
+ "strict": true,
18
+ "noUnusedLocals": true,
19
+ "noUnusedParameters": true,
20
+ "noFallthroughCasesInSwitch": true,
21
+ "noUncheckedSideEffectImports": true
22
+ },
23
+ "include": ["vite.config.ts"]
24
+ }
uv.lock CHANGED
@@ -7,20 +7,28 @@ version = "0.1.0"
7
  source = { virtual = "." }
8
  dependencies = [
9
  { name = "chainlit" },
 
 
10
  { name = "numpy" },
11
  { name = "openai" },
12
  { name = "pydantic" },
13
  { name = "pypdf2" },
 
 
14
  { name = "websockets" },
15
  ]
16
 
17
  [package.metadata]
18
  requires-dist = [
19
  { name = "chainlit", specifier = ">=2.0.4" },
 
 
20
  { name = "numpy", specifier = ">=2.2.2" },
21
  { name = "openai", specifier = ">=1.59.9" },
22
  { name = "pydantic", specifier = "==2.10.1" },
23
  { name = "pypdf2", specifier = ">=3.0.1" },
 
 
24
  { name = "websockets", specifier = ">=14.2" },
25
  ]
26
 
@@ -154,7 +162,7 @@ name = "click"
154
  version = "8.1.8"
155
  source = { registry = "https://pypi.org/simple" }
156
  dependencies = [
157
- { name = "colorama", marker = "platform_system == 'Windows'" },
158
  ]
159
  sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593 }
160
  wheels = [
@@ -170,6 +178,18 @@ wheels = [
170
  { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 },
171
  ]
172
 
 
 
 
 
 
 
 
 
 
 
 
 
173
  [[package]]
174
  name = "dataclasses-json"
175
  version = "0.6.7"
@@ -204,6 +224,28 @@ wheels = [
204
  { url = "https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2", size = 20277 },
205
  ]
206
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
207
  [[package]]
208
  name = "fastapi"
209
  version = "0.115.6"
@@ -218,6 +260,65 @@ wheels = [
218
  { url = "https://files.pythonhosted.org/packages/52/b3/7e4df40e585df024fac2f80d1a2d579c854ac37109675db2b0cc22c0bb9e/fastapi-0.115.6-py3-none-any.whl", hash = "sha256:e9240b29e36fa8f4bb7290316988e90c381e5092e0cbe84e7818cc3713bcf305", size = 94843 },
219
  ]
220
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
221
  [[package]]
222
  name = "filetype"
223
  version = "1.2.0"
@@ -227,6 +328,24 @@ wheels = [
227
  { url = "https://files.pythonhosted.org/packages/18/79/1b8fa1bb3568781e84c9200f951c735f3f157429f44be0495da55894d620/filetype-1.2.0-py2.py3-none-any.whl", hash = "sha256:7ce71b6880181241cf7ac8697a2f1eb6a8bd9b429f7ad6d27b8db9ba5f1c2d25", size = 19970 },
228
  ]
229
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
230
  [[package]]
231
  name = "googleapis-common-protos"
232
  version = "1.66.0"
@@ -256,6 +375,28 @@ wheels = [
256
  { url = "https://files.pythonhosted.org/packages/5d/04/11329e6ca1ceeb276df2d9c316b5e170835a687a4d0f778dba8294657e36/grpcio-1.69.0-cp313-cp313-win_amd64.whl", hash = "sha256:028337786f11fecb5d7b7fa660475a06aabf7e5e52b5ac2df47414878c0ce7ea", size = 4399968 },
257
  ]
258
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
259
  [[package]]
260
  name = "h11"
261
  version = "0.14.0"
@@ -265,6 +406,28 @@ wheels = [
265
  { url = "https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761", size = 58259 },
266
  ]
267
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
268
  [[package]]
269
  name = "httpcore"
270
  version = "1.0.7"
@@ -278,6 +441,21 @@ wheels = [
278
  { url = "https://files.pythonhosted.org/packages/87/f5/72347bc88306acb359581ac4d52f23c0ef445b57157adedb9aee0cd689d2/httpcore-1.0.7-py3-none-any.whl", hash = "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd", size = 78551 },
279
  ]
280
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
281
  [[package]]
282
  name = "httpx"
283
  version = "0.28.1"
@@ -293,6 +471,50 @@ wheels = [
293
  { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517 },
294
  ]
295
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
296
  [[package]]
297
  name = "idna"
298
  version = "3.10"
@@ -314,6 +536,18 @@ wheels = [
314
  { url = "https://files.pythonhosted.org/packages/a0/d9/a1e041c5e7caa9a05c925f4bdbdfb7f006d1f74996af53467bc394c97be7/importlib_metadata-8.5.0-py3-none-any.whl", hash = "sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b", size = 26514 },
315
  ]
316
 
 
 
 
 
 
 
 
 
 
 
 
 
317
  [[package]]
318
  name = "jiter"
319
  version = "0.8.2"
@@ -358,6 +592,59 @@ dependencies = [
358
  ]
359
  sdist = { url = "https://files.pythonhosted.org/packages/fc/fc/628b39e31b368aacbca51721ba7a66a4d140e9be916a0c7396664fdaed7a/literalai-0.1.103.tar.gz", hash = "sha256:060e86e63c0f53041a737b2183354ac092ee8cd9faec817dc95df639bb263a7d", size = 62540 }
360
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
361
  [[package]]
362
  name = "marshmallow"
363
  version = "3.25.1"
@@ -370,6 +657,30 @@ wheels = [
370
  { url = "https://files.pythonhosted.org/packages/8e/25/5b300f0400078d9783fbe44d30fedd849a130fc3aff01f18278c12342b6f/marshmallow-3.25.1-py3-none-any.whl", hash = "sha256:ec5d00d873ce473b7f2ffcb7104286a376c354cab0c2fa12f5573dab03e87210", size = 49624 },
371
  ]
372
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
373
  [[package]]
374
  name = "mypy-extensions"
375
  version = "1.0.0"
@@ -416,6 +727,27 @@ wheels = [
416
  { url = "https://files.pythonhosted.org/packages/80/94/cd9e9b04012c015cb6320ab3bf43bc615e248dddfeb163728e800a5d96f0/numpy-2.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:97b974d3ba0fb4612b77ed35d7627490e8e3dff56ab41454d9e8b23448940576", size = 12696208 },
417
  ]
418
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
419
  [[package]]
420
  name = "openai"
421
  version = "1.59.9"
@@ -572,6 +904,37 @@ wheels = [
572
  { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451 },
573
  ]
574
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
575
  [[package]]
576
  name = "protobuf"
577
  version = "5.29.3"
@@ -586,6 +949,12 @@ wheels = [
586
  { url = "https://files.pythonhosted.org/packages/fd/b2/ab07b09e0f6d143dfb839693aa05765257bceaa13d03bf1a696b78323e7a/protobuf-5.29.3-py3-none-any.whl", hash = "sha256:0a18ed4a24198528f2333802eb075e59dea9d679ab7a6c5efb017a59004d849f", size = 172550 },
587
  ]
588
 
 
 
 
 
 
 
589
  [[package]]
590
  name = "pydantic"
591
  version = "2.10.1"
@@ -625,6 +994,15 @@ wheels = [
625
  { url = "https://files.pythonhosted.org/packages/df/c3/b15fb833926d91d982fde29c0624c9f225da743c7af801dace0d4e187e71/pydantic_core-2.27.1-cp313-none-win_arm64.whl", hash = "sha256:45cf8588c066860b623cd11c4ba687f8d7175d5f7ef65f7129df8a394c502de5", size = 1882983 },
626
  ]
627
 
 
 
 
 
 
 
 
 
 
628
  [[package]]
629
  name = "pyjwt"
630
  version = "2.10.1"
@@ -643,6 +1021,15 @@ wheels = [
643
  { url = "https://files.pythonhosted.org/packages/8e/5e/c86a5643653825d3c913719e788e41386bee415c2b87b4f955432f2de6b2/pypdf2-3.0.1-py3-none-any.whl", hash = "sha256:d16e4205cfee272fbdc0568b68d82be796540b1537508cef59388f839c191928", size = 232572 },
644
  ]
645
 
 
 
 
 
 
 
 
 
 
646
  [[package]]
647
  name = "python-dotenv"
648
  version = "1.0.1"
@@ -686,6 +1073,51 @@ wheels = [
686
  { url = "https://files.pythonhosted.org/packages/8a/a3/c69806f30dd81df5a99d592e7db4c930c3a9b098555aa97b0eb866b20b11/python_socketio-5.12.1-py3-none-any.whl", hash = "sha256:24a0ea7cfff0e021eb28c68edbf7914ee4111bdf030b95e4d250c4dc9af7a386", size = 76947 },
687
  ]
688
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
689
  [[package]]
690
  name = "requests"
691
  version = "2.32.3"
@@ -701,6 +1133,51 @@ wheels = [
701
  { url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928 },
702
  ]
703
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
704
  [[package]]
705
  name = "simple-websocket"
706
  version = "1.1.0"
@@ -734,12 +1211,49 @@ wheels = [
734
  { url = "https://files.pythonhosted.org/packages/96/00/2b325970b3060c7cecebab6d295afe763365822b1306a12eeab198f74323/starlette-0.41.3-py3-none-any.whl", hash = "sha256:44cedb2b7c77a9de33a8b74b2b90e9f50d11fcf25d8270ea525ad71a25374ff7", size = 73225 },
735
  ]
736
 
 
 
 
 
 
 
 
 
 
 
 
 
737
  [[package]]
738
  name = "syncer"
739
  version = "2.0.3"
740
  source = { registry = "https://pypi.org/simple" }
741
  sdist = { url = "https://files.pythonhosted.org/packages/8d/dd/d4dd75843692690d81f0a4b929212a1614b25d4896aa7c72f4c3546c7e3d/syncer-2.0.3.tar.gz", hash = "sha256:4340eb54b54368724a78c5c0763824470201804fe9180129daf3635cb500550f", size = 11512 }
742
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
743
  [[package]]
744
  name = "tomli"
745
  version = "2.2.1"
@@ -764,13 +1278,28 @@ name = "tqdm"
764
  version = "4.67.1"
765
  source = { registry = "https://pypi.org/simple" }
766
  dependencies = [
767
- { name = "colorama", marker = "platform_system == 'Windows'" },
768
  ]
769
  sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737 }
770
  wheels = [
771
  { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540 },
772
  ]
773
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
774
  [[package]]
775
  name = "typing-extensions"
776
  version = "4.12.2"
@@ -830,6 +1359,31 @@ wheels = [
830
  { url = "https://files.pythonhosted.org/packages/61/14/33a3a1352cfa71812a3a21e8c9bfb83f60b0011f5e36f2b1399d51928209/uvicorn-0.34.0-py3-none-any.whl", hash = "sha256:023dc038422502fa28a09c7a30bf2b6991512da7dcdb8fd35fe57cfc154126f4", size = 62315 },
831
  ]
832
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
833
  [[package]]
834
  name = "watchfiles"
835
  version = "0.20.0"
@@ -874,6 +1428,15 @@ wheels = [
874
  { url = "https://files.pythonhosted.org/packages/7b/c8/d529f8a32ce40d98309f4470780631e971a5a842b60aec864833b3615786/websockets-14.2-py3-none-any.whl", hash = "sha256:7a6ceec4ea84469f15cf15807a747e9efe57e369c384fa86e022b3bea679b79b", size = 157416 },
875
  ]
876
 
 
 
 
 
 
 
 
 
 
877
  [[package]]
878
  name = "wrapt"
879
  version = "1.17.2"
 
7
  source = { virtual = "." }
8
  dependencies = [
9
  { name = "chainlit" },
10
+ { name = "fastapi", extra = ["standard"] },
11
+ { name = "fastembed" },
12
  { name = "numpy" },
13
  { name = "openai" },
14
  { name = "pydantic" },
15
  { name = "pypdf2" },
16
+ { name = "qdrant-client" },
17
+ { name = "uvicorn" },
18
  { name = "websockets" },
19
  ]
20
 
21
  [package.metadata]
22
  requires-dist = [
23
  { name = "chainlit", specifier = ">=2.0.4" },
24
+ { name = "fastapi", extras = ["standard"], specifier = ">=0.115.6" },
25
+ { name = "fastembed", specifier = ">=0.5.1" },
26
  { name = "numpy", specifier = ">=2.2.2" },
27
  { name = "openai", specifier = ">=1.59.9" },
28
  { name = "pydantic", specifier = "==2.10.1" },
29
  { name = "pypdf2", specifier = ">=3.0.1" },
30
+ { name = "qdrant-client", specifier = ">=1.13.2" },
31
+ { name = "uvicorn", specifier = ">=0.34.0" },
32
  { name = "websockets", specifier = ">=14.2" },
33
  ]
34
 
 
162
  version = "8.1.8"
163
  source = { registry = "https://pypi.org/simple" }
164
  dependencies = [
165
+ { name = "colorama", marker = "sys_platform == 'win32'" },
166
  ]
167
  sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593 }
168
  wheels = [
 
178
  { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 },
179
  ]
180
 
181
+ [[package]]
182
+ name = "coloredlogs"
183
+ version = "15.0.1"
184
+ source = { registry = "https://pypi.org/simple" }
185
+ dependencies = [
186
+ { name = "humanfriendly" },
187
+ ]
188
+ sdist = { url = "https://files.pythonhosted.org/packages/cc/c7/eed8f27100517e8c0e6b923d5f0845d0cb99763da6fdee00478f91db7325/coloredlogs-15.0.1.tar.gz", hash = "sha256:7c991aa71a4577af2f82600d8f8f3a89f936baeaf9b50a9c197da014e5bf16b0", size = 278520 }
189
+ wheels = [
190
+ { url = "https://files.pythonhosted.org/packages/a7/06/3d6badcf13db419e25b07041d9c7b4a2c331d3f4e7134445ec5df57714cd/coloredlogs-15.0.1-py2.py3-none-any.whl", hash = "sha256:612ee75c546f53e92e70049c9dbfcc18c935a2b9a53b66085ce9ef6a6e5c0934", size = 46018 },
191
+ ]
192
+
193
  [[package]]
194
  name = "dataclasses-json"
195
  version = "0.6.7"
 
224
  { url = "https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2", size = 20277 },
225
  ]
226
 
227
+ [[package]]
228
+ name = "dnspython"
229
+ version = "2.7.0"
230
+ source = { registry = "https://pypi.org/simple" }
231
+ sdist = { url = "https://files.pythonhosted.org/packages/b5/4a/263763cb2ba3816dd94b08ad3a33d5fdae34ecb856678773cc40a3605829/dnspython-2.7.0.tar.gz", hash = "sha256:ce9c432eda0dc91cf618a5cedf1a4e142651196bbcd2c80e89ed5a907e5cfaf1", size = 345197 }
232
+ wheels = [
233
+ { url = "https://files.pythonhosted.org/packages/68/1b/e0a87d256e40e8c888847551b20a017a6b98139178505dc7ffb96f04e954/dnspython-2.7.0-py3-none-any.whl", hash = "sha256:b4c34b7d10b51bcc3a5071e7b8dee77939f1e878477eeecc965e9835f63c6c86", size = 313632 },
234
+ ]
235
+
236
+ [[package]]
237
+ name = "email-validator"
238
+ version = "2.2.0"
239
+ source = { registry = "https://pypi.org/simple" }
240
+ dependencies = [
241
+ { name = "dnspython" },
242
+ { name = "idna" },
243
+ ]
244
+ sdist = { url = "https://files.pythonhosted.org/packages/48/ce/13508a1ec3f8bb981ae4ca79ea40384becc868bfae97fd1c942bb3a001b1/email_validator-2.2.0.tar.gz", hash = "sha256:cb690f344c617a714f22e66ae771445a1ceb46821152df8e165c5f9a364582b7", size = 48967 }
245
+ wheels = [
246
+ { url = "https://files.pythonhosted.org/packages/d7/ee/bf0adb559ad3c786f12bcbc9296b3f5675f529199bef03e2df281fa1fadb/email_validator-2.2.0-py3-none-any.whl", hash = "sha256:561977c2d73ce3611850a06fa56b414621e0c8faa9d66f2611407d87465da631", size = 33521 },
247
+ ]
248
+
249
  [[package]]
250
  name = "fastapi"
251
  version = "0.115.6"
 
260
  { url = "https://files.pythonhosted.org/packages/52/b3/7e4df40e585df024fac2f80d1a2d579c854ac37109675db2b0cc22c0bb9e/fastapi-0.115.6-py3-none-any.whl", hash = "sha256:e9240b29e36fa8f4bb7290316988e90c381e5092e0cbe84e7818cc3713bcf305", size = 94843 },
261
  ]
262
 
263
+ [package.optional-dependencies]
264
+ standard = [
265
+ { name = "email-validator" },
266
+ { name = "fastapi-cli", extra = ["standard"] },
267
+ { name = "httpx" },
268
+ { name = "jinja2" },
269
+ { name = "python-multipart" },
270
+ { name = "uvicorn", extra = ["standard"] },
271
+ ]
272
+
273
+ [[package]]
274
+ name = "fastapi-cli"
275
+ version = "0.0.7"
276
+ source = { registry = "https://pypi.org/simple" }
277
+ dependencies = [
278
+ { name = "rich-toolkit" },
279
+ { name = "typer" },
280
+ { name = "uvicorn", extra = ["standard"] },
281
+ ]
282
+ sdist = { url = "https://files.pythonhosted.org/packages/fe/73/82a5831fbbf8ed75905bacf5b2d9d3dfd6f04d6968b29fe6f72a5ae9ceb1/fastapi_cli-0.0.7.tar.gz", hash = "sha256:02b3b65956f526412515907a0793c9094abd4bfb5457b389f645b0ea6ba3605e", size = 16753 }
283
+ wheels = [
284
+ { url = "https://files.pythonhosted.org/packages/a1/e6/5daefc851b514ce2287d8f5d358ae4341089185f78f3217a69d0ce3a390c/fastapi_cli-0.0.7-py3-none-any.whl", hash = "sha256:d549368ff584b2804336c61f192d86ddea080c11255f375959627911944804f4", size = 10705 },
285
+ ]
286
+
287
+ [package.optional-dependencies]
288
+ standard = [
289
+ { name = "uvicorn", extra = ["standard"] },
290
+ ]
291
+
292
+ [[package]]
293
+ name = "fastembed"
294
+ version = "0.5.1"
295
+ source = { registry = "https://pypi.org/simple" }
296
+ dependencies = [
297
+ { name = "huggingface-hub" },
298
+ { name = "loguru" },
299
+ { name = "mmh3" },
300
+ { name = "numpy" },
301
+ { name = "onnxruntime" },
302
+ { name = "pillow" },
303
+ { name = "py-rust-stemmers" },
304
+ { name = "requests" },
305
+ { name = "tokenizers" },
306
+ { name = "tqdm" },
307
+ ]
308
+ sdist = { url = "https://files.pythonhosted.org/packages/27/bf/baa846b1169da667d5f6cf730b460b153028f9674bee309729533a427980/fastembed-0.5.1.tar.gz", hash = "sha256:93ccdbead9daadde6af37862c53b92fd15fa3115d20bbddb258faa0a5eb36718", size = 41950 }
309
+ wheels = [
310
+ { url = "https://files.pythonhosted.org/packages/59/b3/ecd4f3763286492a23b26ccc328d39540c16801e91586aaa7b0b2e81d949/fastembed-0.5.1-py3-none-any.whl", hash = "sha256:93dc5a0d0e39b4a38f1525c97624e97bfc0d879fea0e92779ec4606046fe91cb", size = 69708 },
311
+ ]
312
+
313
+ [[package]]
314
+ name = "filelock"
315
+ version = "3.17.0"
316
+ source = { registry = "https://pypi.org/simple" }
317
+ sdist = { url = "https://files.pythonhosted.org/packages/dc/9c/0b15fb47b464e1b663b1acd1253a062aa5feecb07d4e597daea542ebd2b5/filelock-3.17.0.tar.gz", hash = "sha256:ee4e77401ef576ebb38cd7f13b9b28893194acc20a8e68e18730ba9c0e54660e", size = 18027 }
318
+ wheels = [
319
+ { url = "https://files.pythonhosted.org/packages/89/ec/00d68c4ddfedfe64159999e5f8a98fb8442729a63e2077eb9dcd89623d27/filelock-3.17.0-py3-none-any.whl", hash = "sha256:533dc2f7ba78dc2f0f531fc6c4940addf7b70a481e269a5a3b93be94ffbe8338", size = 16164 },
320
+ ]
321
+
322
  [[package]]
323
  name = "filetype"
324
  version = "1.2.0"
 
328
  { url = "https://files.pythonhosted.org/packages/18/79/1b8fa1bb3568781e84c9200f951c735f3f157429f44be0495da55894d620/filetype-1.2.0-py2.py3-none-any.whl", hash = "sha256:7ce71b6880181241cf7ac8697a2f1eb6a8bd9b429f7ad6d27b8db9ba5f1c2d25", size = 19970 },
329
  ]
330
 
331
+ [[package]]
332
+ name = "flatbuffers"
333
+ version = "25.1.24"
334
+ source = { registry = "https://pypi.org/simple" }
335
+ sdist = { url = "https://files.pythonhosted.org/packages/64/20/c380c311843318b577650286b2c7eaaac3a011fb982df0050bdbd7e453c5/flatbuffers-25.1.24.tar.gz", hash = "sha256:e0f7b7d806c0abdf166275492663130af40c11f89445045fbef0aa3c9a8643ad", size = 22155 }
336
+ wheels = [
337
+ { url = "https://files.pythonhosted.org/packages/0e/e2/b066e6e02d67bf5261a6d7539648c6da3365cc9eff3eb6d82009595d84d9/flatbuffers-25.1.24-py2.py3-none-any.whl", hash = "sha256:1abfebaf4083117225d0723087ea909896a34e3fec933beedb490d595ba24145", size = 30955 },
338
+ ]
339
+
340
+ [[package]]
341
+ name = "fsspec"
342
+ version = "2024.12.0"
343
+ source = { registry = "https://pypi.org/simple" }
344
+ sdist = { url = "https://files.pythonhosted.org/packages/ee/11/de70dee31455c546fbc88301971ec03c328f3d1138cfba14263f651e9551/fsspec-2024.12.0.tar.gz", hash = "sha256:670700c977ed2fb51e0d9f9253177ed20cbde4a3e5c0283cc5385b5870c8533f", size = 291600 }
345
+ wheels = [
346
+ { url = "https://files.pythonhosted.org/packages/de/86/5486b0188d08aa643e127774a99bac51ffa6cf343e3deb0583956dca5b22/fsspec-2024.12.0-py3-none-any.whl", hash = "sha256:b520aed47ad9804237ff878b504267a3b0b441e97508bd6d2d8774e3db85cee2", size = 183862 },
347
+ ]
348
+
349
  [[package]]
350
  name = "googleapis-common-protos"
351
  version = "1.66.0"
 
375
  { url = "https://files.pythonhosted.org/packages/5d/04/11329e6ca1ceeb276df2d9c316b5e170835a687a4d0f778dba8294657e36/grpcio-1.69.0-cp313-cp313-win_amd64.whl", hash = "sha256:028337786f11fecb5d7b7fa660475a06aabf7e5e52b5ac2df47414878c0ce7ea", size = 4399968 },
376
  ]
377
 
378
+ [[package]]
379
+ name = "grpcio-tools"
380
+ version = "1.69.0"
381
+ source = { registry = "https://pypi.org/simple" }
382
+ dependencies = [
383
+ { name = "grpcio" },
384
+ { name = "protobuf" },
385
+ { name = "setuptools" },
386
+ ]
387
+ sdist = { url = "https://files.pythonhosted.org/packages/64/ec/1c25136ca1697eaa09a02effe3e74959fd9fb6aba9960d7340dd6341c5ce/grpcio_tools-1.69.0.tar.gz", hash = "sha256:3e1a98f4d9decb84979e1ddd3deb09c0a33a84b6e3c0776d5bde4097e3ab66dd", size = 5323319 }
388
+ wheels = [
389
+ { url = "https://files.pythonhosted.org/packages/0c/ef/a9867f612e3aa5e69d299e47a72ea8dafa476b1f099462c9a1223cd6a83c/grpcio_tools-1.69.0-cp313-cp313-linux_armv7l.whl", hash = "sha256:8c320c4faa1431f2e1252ef2325a970ac23b2fd04ffef6c12f96dd4552c3445c", size = 2388281 },
390
+ { url = "https://files.pythonhosted.org/packages/4b/53/b2752d8ec338778e48d76845d605a0f8bca9e43a5f09428e5ed1a76e4e1d/grpcio_tools-1.69.0-cp313-cp313-macosx_10_14_universal2.whl", hash = "sha256:5f1224596ad74dd14444b20c37122b361c5d203b67e14e018b995f3c5d76eede", size = 5725856 },
391
+ { url = "https://files.pythonhosted.org/packages/83/dd/195d3639634c0c1d1e48b6693c074d66a64f16c748df2f40bcee74aa04e2/grpcio_tools-1.69.0-cp313-cp313-manylinux_2_17_aarch64.whl", hash = "sha256:965a0cf656a113bc32d15ac92ca51ed702a75d5370ae0afbdd36f818533a708a", size = 2350180 },
392
+ { url = "https://files.pythonhosted.org/packages/8c/18/c412884fa0e888d8a271f3e31d23e3765cde0efe2404653ab67971c411c2/grpcio_tools-1.69.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:978835768c11a7f28778b3b7c40f839d8a57f765c315e80c4246c23900d56149", size = 2726724 },
393
+ { url = "https://files.pythonhosted.org/packages/be/c7/dfb59b7e25d760bfdd93f0aef7dd0e2a37f8437ac3017b8b526c68764e2f/grpcio_tools-1.69.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:094c7cec9bd271a32dfb7c620d4a558c63fcb0122fd1651b9ed73d6afd4ae6fe", size = 2472127 },
394
+ { url = "https://files.pythonhosted.org/packages/f2/b6/af4edf0a181fd7b148a83d491f5677d7d1c9f86f03282f8f0209d9dfb793/grpcio_tools-1.69.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:b51bf4981b3d7e47c2569efadff08284787124eb3dea0f63f491d39703231d3c", size = 3344015 },
395
+ { url = "https://files.pythonhosted.org/packages/0a/9f/4c2b5ae642f7d3df73c16df6c7d53e9443cb0e49e1dcf2c8d1a49058e0b5/grpcio_tools-1.69.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ea7aaf0dc1a828e2133357a9e9553fd1bb4e766890d52a506cc132e40632acdc", size = 2952942 },
396
+ { url = "https://files.pythonhosted.org/packages/97/8e/6b707871db5927a17ad7475c070916bff4f32463a51552b424779236ab65/grpcio_tools-1.69.0-cp313-cp313-win32.whl", hash = "sha256:4320f11b79d3a148cc23bad1b81719ce1197808dc2406caa8a8ba0a5cfb0260d", size = 956242 },
397
+ { url = "https://files.pythonhosted.org/packages/27/e2/b419a02b50240143605f77cd50cb07f724caf0fd35a01540a4f044ae9f21/grpcio_tools-1.69.0-cp313-cp313-win_amd64.whl", hash = "sha256:e9bae733654e0eb8ca83aa1d0d6b6c2f4a3525ce70d5ffc07df68d28f6520137", size = 1113616 },
398
+ ]
399
+
400
  [[package]]
401
  name = "h11"
402
  version = "0.14.0"
 
406
  { url = "https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761", size = 58259 },
407
  ]
408
 
409
+ [[package]]
410
+ name = "h2"
411
+ version = "4.1.0"
412
+ source = { registry = "https://pypi.org/simple" }
413
+ dependencies = [
414
+ { name = "hpack" },
415
+ { name = "hyperframe" },
416
+ ]
417
+ sdist = { url = "https://files.pythonhosted.org/packages/2a/32/fec683ddd10629ea4ea46d206752a95a2d8a48c22521edd70b142488efe1/h2-4.1.0.tar.gz", hash = "sha256:a83aca08fbe7aacb79fec788c9c0bac936343560ed9ec18b82a13a12c28d2abb", size = 2145593 }
418
+ wheels = [
419
+ { url = "https://files.pythonhosted.org/packages/2a/e5/db6d438da759efbb488c4f3fbdab7764492ff3c3f953132efa6b9f0e9e53/h2-4.1.0-py3-none-any.whl", hash = "sha256:03a46bcf682256c95b5fd9e9a99c1323584c3eec6440d379b9903d709476bc6d", size = 57488 },
420
+ ]
421
+
422
+ [[package]]
423
+ name = "hpack"
424
+ version = "4.1.0"
425
+ source = { registry = "https://pypi.org/simple" }
426
+ sdist = { url = "https://files.pythonhosted.org/packages/2c/48/71de9ed269fdae9c8057e5a4c0aa7402e8bb16f2c6e90b3aa53327b113f8/hpack-4.1.0.tar.gz", hash = "sha256:ec5eca154f7056aa06f196a557655c5b009b382873ac8d1e66e79e87535f1dca", size = 51276 }
427
+ wheels = [
428
+ { url = "https://files.pythonhosted.org/packages/07/c6/80c95b1b2b94682a72cbdbfb85b81ae2daffa4291fbfa1b1464502ede10d/hpack-4.1.0-py3-none-any.whl", hash = "sha256:157ac792668d995c657d93111f46b4535ed114f0c9c8d672271bbec7eae1b496", size = 34357 },
429
+ ]
430
+
431
  [[package]]
432
  name = "httpcore"
433
  version = "1.0.7"
 
441
  { url = "https://files.pythonhosted.org/packages/87/f5/72347bc88306acb359581ac4d52f23c0ef445b57157adedb9aee0cd689d2/httpcore-1.0.7-py3-none-any.whl", hash = "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd", size = 78551 },
442
  ]
443
 
444
+ [[package]]
445
+ name = "httptools"
446
+ version = "0.6.4"
447
+ source = { registry = "https://pypi.org/simple" }
448
+ sdist = { url = "https://files.pythonhosted.org/packages/a7/9a/ce5e1f7e131522e6d3426e8e7a490b3a01f39a6696602e1c4f33f9e94277/httptools-0.6.4.tar.gz", hash = "sha256:4e93eee4add6493b59a5c514da98c939b244fce4a0d8879cd3f466562f4b7d5c", size = 240639 }
449
+ wheels = [
450
+ { url = "https://files.pythonhosted.org/packages/94/a3/9fe9ad23fd35f7de6b91eeb60848986058bd8b5a5c1e256f5860a160cc3e/httptools-0.6.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ade273d7e767d5fae13fa637f4d53b6e961fb7fd93c7797562663f0171c26660", size = 197214 },
451
+ { url = "https://files.pythonhosted.org/packages/ea/d9/82d5e68bab783b632023f2fa31db20bebb4e89dfc4d2293945fd68484ee4/httptools-0.6.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:856f4bc0478ae143bad54a4242fccb1f3f86a6e1be5548fecfd4102061b3a083", size = 102431 },
452
+ { url = "https://files.pythonhosted.org/packages/96/c1/cb499655cbdbfb57b577734fde02f6fa0bbc3fe9fb4d87b742b512908dff/httptools-0.6.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:322d20ea9cdd1fa98bd6a74b77e2ec5b818abdc3d36695ab402a0de8ef2865a3", size = 473121 },
453
+ { url = "https://files.pythonhosted.org/packages/af/71/ee32fd358f8a3bb199b03261f10921716990808a675d8160b5383487a317/httptools-0.6.4-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d87b29bd4486c0093fc64dea80231f7c7f7eb4dc70ae394d70a495ab8436071", size = 473805 },
454
+ { url = "https://files.pythonhosted.org/packages/8a/0a/0d4df132bfca1507114198b766f1737d57580c9ad1cf93c1ff673e3387be/httptools-0.6.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:342dd6946aa6bda4b8f18c734576106b8a31f2fe31492881a9a160ec84ff4bd5", size = 448858 },
455
+ { url = "https://files.pythonhosted.org/packages/1e/6a/787004fdef2cabea27bad1073bf6a33f2437b4dbd3b6fb4a9d71172b1c7c/httptools-0.6.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4b36913ba52008249223042dca46e69967985fb4051951f94357ea681e1f5dc0", size = 452042 },
456
+ { url = "https://files.pythonhosted.org/packages/4d/dc/7decab5c404d1d2cdc1bb330b1bf70e83d6af0396fd4fc76fc60c0d522bf/httptools-0.6.4-cp313-cp313-win_amd64.whl", hash = "sha256:28908df1b9bb8187393d5b5db91435ccc9c8e891657f9cbb42a2541b44c82fc8", size = 87682 },
457
+ ]
458
+
459
  [[package]]
460
  name = "httpx"
461
  version = "0.28.1"
 
471
  { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517 },
472
  ]
473
 
474
+ [package.optional-dependencies]
475
+ http2 = [
476
+ { name = "h2" },
477
+ ]
478
+
479
+ [[package]]
480
+ name = "huggingface-hub"
481
+ version = "0.27.1"
482
+ source = { registry = "https://pypi.org/simple" }
483
+ dependencies = [
484
+ { name = "filelock" },
485
+ { name = "fsspec" },
486
+ { name = "packaging" },
487
+ { name = "pyyaml" },
488
+ { name = "requests" },
489
+ { name = "tqdm" },
490
+ { name = "typing-extensions" },
491
+ ]
492
+ sdist = { url = "https://files.pythonhosted.org/packages/e1/d2/d6976de7542792fc077b498d64af64882b6d8bb40679284ec0bff77d5929/huggingface_hub-0.27.1.tar.gz", hash = "sha256:c004463ca870283909d715d20f066ebd6968c2207dae9393fdffb3c1d4d8f98b", size = 379407 }
493
+ wheels = [
494
+ { url = "https://files.pythonhosted.org/packages/6c/3f/50f6b25fafdcfb1c089187a328c95081abf882309afd86f4053951507cd1/huggingface_hub-0.27.1-py3-none-any.whl", hash = "sha256:1c5155ca7d60b60c2e2fc38cbb3ffb7f7c3adf48f824015b219af9061771daec", size = 450658 },
495
+ ]
496
+
497
+ [[package]]
498
+ name = "humanfriendly"
499
+ version = "10.0"
500
+ source = { registry = "https://pypi.org/simple" }
501
+ dependencies = [
502
+ { name = "pyreadline3", marker = "sys_platform == 'win32'" },
503
+ ]
504
+ sdist = { url = "https://files.pythonhosted.org/packages/cc/3f/2c29224acb2e2df4d2046e4c73ee2662023c58ff5b113c4c1adac0886c43/humanfriendly-10.0.tar.gz", hash = "sha256:6b0b831ce8f15f7300721aa49829fc4e83921a9a301cc7f606be6686a2288ddc", size = 360702 }
505
+ wheels = [
506
+ { url = "https://files.pythonhosted.org/packages/f0/0f/310fb31e39e2d734ccaa2c0fb981ee41f7bd5056ce9bc29b2248bd569169/humanfriendly-10.0-py2.py3-none-any.whl", hash = "sha256:1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477", size = 86794 },
507
+ ]
508
+
509
+ [[package]]
510
+ name = "hyperframe"
511
+ version = "6.1.0"
512
+ source = { registry = "https://pypi.org/simple" }
513
+ sdist = { url = "https://files.pythonhosted.org/packages/02/e7/94f8232d4a74cc99514c13a9f995811485a6903d48e5d952771ef6322e30/hyperframe-6.1.0.tar.gz", hash = "sha256:f630908a00854a7adeabd6382b43923a4c4cd4b821fcb527e6ab9e15382a3b08", size = 26566 }
514
+ wheels = [
515
+ { url = "https://files.pythonhosted.org/packages/48/30/47d0bf6072f7252e6521f3447ccfa40b421b6824517f82854703d0f5a98b/hyperframe-6.1.0-py3-none-any.whl", hash = "sha256:b03380493a519fce58ea5af42e4a42317bf9bd425596f7a0835ffce80f1a42e5", size = 13007 },
516
+ ]
517
+
518
  [[package]]
519
  name = "idna"
520
  version = "3.10"
 
536
  { url = "https://files.pythonhosted.org/packages/a0/d9/a1e041c5e7caa9a05c925f4bdbdfb7f006d1f74996af53467bc394c97be7/importlib_metadata-8.5.0-py3-none-any.whl", hash = "sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b", size = 26514 },
537
  ]
538
 
539
+ [[package]]
540
+ name = "jinja2"
541
+ version = "3.1.5"
542
+ source = { registry = "https://pypi.org/simple" }
543
+ dependencies = [
544
+ { name = "markupsafe" },
545
+ ]
546
+ sdist = { url = "https://files.pythonhosted.org/packages/af/92/b3130cbbf5591acf9ade8708c365f3238046ac7cb8ccba6e81abccb0ccff/jinja2-3.1.5.tar.gz", hash = "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb", size = 244674 }
547
+ wheels = [
548
+ { url = "https://files.pythonhosted.org/packages/bd/0f/2ba5fbcd631e3e88689309dbe978c5769e883e4b84ebfe7da30b43275c5a/jinja2-3.1.5-py3-none-any.whl", hash = "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb", size = 134596 },
549
+ ]
550
+
551
  [[package]]
552
  name = "jiter"
553
  version = "0.8.2"
 
592
  ]
593
  sdist = { url = "https://files.pythonhosted.org/packages/fc/fc/628b39e31b368aacbca51721ba7a66a4d140e9be916a0c7396664fdaed7a/literalai-0.1.103.tar.gz", hash = "sha256:060e86e63c0f53041a737b2183354ac092ee8cd9faec817dc95df639bb263a7d", size = 62540 }
594
 
595
+ [[package]]
596
+ name = "loguru"
597
+ version = "0.7.3"
598
+ source = { registry = "https://pypi.org/simple" }
599
+ dependencies = [
600
+ { name = "colorama", marker = "sys_platform == 'win32'" },
601
+ { name = "win32-setctime", marker = "sys_platform == 'win32'" },
602
+ ]
603
+ sdist = { url = "https://files.pythonhosted.org/packages/3a/05/a1dae3dffd1116099471c643b8924f5aa6524411dc6c63fdae648c4f1aca/loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6", size = 63559 }
604
+ wheels = [
605
+ { url = "https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c", size = 61595 },
606
+ ]
607
+
608
+ [[package]]
609
+ name = "markdown-it-py"
610
+ version = "3.0.0"
611
+ source = { registry = "https://pypi.org/simple" }
612
+ dependencies = [
613
+ { name = "mdurl" },
614
+ ]
615
+ sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596 }
616
+ wheels = [
617
+ { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528 },
618
+ ]
619
+
620
+ [[package]]
621
+ name = "markupsafe"
622
+ version = "3.0.2"
623
+ source = { registry = "https://pypi.org/simple" }
624
+ sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537 }
625
+ wheels = [
626
+ { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274 },
627
+ { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352 },
628
+ { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122 },
629
+ { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085 },
630
+ { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978 },
631
+ { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208 },
632
+ { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357 },
633
+ { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344 },
634
+ { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101 },
635
+ { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603 },
636
+ { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510 },
637
+ { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486 },
638
+ { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480 },
639
+ { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914 },
640
+ { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796 },
641
+ { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473 },
642
+ { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114 },
643
+ { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098 },
644
+ { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208 },
645
+ { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739 },
646
+ ]
647
+
648
  [[package]]
649
  name = "marshmallow"
650
  version = "3.25.1"
 
657
  { url = "https://files.pythonhosted.org/packages/8e/25/5b300f0400078d9783fbe44d30fedd849a130fc3aff01f18278c12342b6f/marshmallow-3.25.1-py3-none-any.whl", hash = "sha256:ec5d00d873ce473b7f2ffcb7104286a376c354cab0c2fa12f5573dab03e87210", size = 49624 },
658
  ]
659
 
660
+ [[package]]
661
+ name = "mdurl"
662
+ version = "0.1.2"
663
+ source = { registry = "https://pypi.org/simple" }
664
+ sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729 }
665
+ wheels = [
666
+ { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979 },
667
+ ]
668
+
669
+ [[package]]
670
+ name = "mmh3"
671
+ version = "4.1.0"
672
+ source = { registry = "https://pypi.org/simple" }
673
+ sdist = { url = "https://files.pythonhosted.org/packages/63/96/aa247e82878b123468f0079ce2ac77e948315bab91ce45d2934a62e0af95/mmh3-4.1.0.tar.gz", hash = "sha256:a1cf25348b9acd229dda464a094d6170f47d2850a1fcb762a3b6172d2ce6ca4a", size = 26357 }
674
+
675
+ [[package]]
676
+ name = "mpmath"
677
+ version = "1.3.0"
678
+ source = { registry = "https://pypi.org/simple" }
679
+ sdist = { url = "https://files.pythonhosted.org/packages/e0/47/dd32fa426cc72114383ac549964eecb20ecfd886d1e5ccf5340b55b02f57/mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f", size = 508106 }
680
+ wheels = [
681
+ { url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198 },
682
+ ]
683
+
684
  [[package]]
685
  name = "mypy-extensions"
686
  version = "1.0.0"
 
727
  { url = "https://files.pythonhosted.org/packages/80/94/cd9e9b04012c015cb6320ab3bf43bc615e248dddfeb163728e800a5d96f0/numpy-2.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:97b974d3ba0fb4612b77ed35d7627490e8e3dff56ab41454d9e8b23448940576", size = 12696208 },
728
  ]
729
 
730
+ [[package]]
731
+ name = "onnxruntime"
732
+ version = "1.20.1"
733
+ source = { registry = "https://pypi.org/simple" }
734
+ dependencies = [
735
+ { name = "coloredlogs" },
736
+ { name = "flatbuffers" },
737
+ { name = "numpy" },
738
+ { name = "packaging" },
739
+ { name = "protobuf" },
740
+ { name = "sympy" },
741
+ ]
742
+ wheels = [
743
+ { url = "https://files.pythonhosted.org/packages/f7/71/c5d980ac4189589267a06f758bd6c5667d07e55656bed6c6c0580733ad07/onnxruntime-1.20.1-cp313-cp313-macosx_13_0_universal2.whl", hash = "sha256:cc01437a32d0042b606f462245c8bbae269e5442797f6213e36ce61d5abdd8cc", size = 31007574 },
744
+ { url = "https://files.pythonhosted.org/packages/81/0d/13bbd9489be2a6944f4a940084bfe388f1100472f38c07080a46fbd4ab96/onnxruntime-1.20.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fb44b08e017a648924dbe91b82d89b0c105b1adcfe31e90d1dc06b8677ad37be", size = 11951459 },
745
+ { url = "https://files.pythonhosted.org/packages/c0/ea/4454ae122874fd52bbb8a961262de81c5f932edeb1b72217f594c700d6ef/onnxruntime-1.20.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bda6aebdf7917c1d811f21d41633df00c58aff2bef2f598f69289c1f1dabc4b3", size = 13331620 },
746
+ { url = "https://files.pythonhosted.org/packages/d8/e0/50db43188ca1c945decaa8fc2a024c33446d31afed40149897d4f9de505f/onnxruntime-1.20.1-cp313-cp313-win_amd64.whl", hash = "sha256:d30367df7e70f1d9fc5a6a68106f5961686d39b54d3221f760085524e8d38e16", size = 11331758 },
747
+ { url = "https://files.pythonhosted.org/packages/d8/55/3821c5fd60b52a6c82a00bba18531793c93c4addfe64fbf061e235c5617a/onnxruntime-1.20.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c9158465745423b2b5d97ed25aa7740c7d38d2993ee2e5c3bfacb0c4145c49d8", size = 11950342 },
748
+ { url = "https://files.pythonhosted.org/packages/14/56/fd990ca222cef4f9f4a9400567b9a15b220dee2eafffb16b2adbc55c8281/onnxruntime-1.20.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0df6f2df83d61f46e842dbcde610ede27218947c33e994545a22333491e72a3b", size = 13337040 },
749
+ ]
750
+
751
  [[package]]
752
  name = "openai"
753
  version = "1.59.9"
 
904
  { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451 },
905
  ]
906
 
907
+ [[package]]
908
+ name = "pillow"
909
+ version = "10.4.0"
910
+ source = { registry = "https://pypi.org/simple" }
911
+ sdist = { url = "https://files.pythonhosted.org/packages/cd/74/ad3d526f3bf7b6d3f408b73fde271ec69dfac8b81341a318ce825f2b3812/pillow-10.4.0.tar.gz", hash = "sha256:166c1cd4d24309b30d61f79f4a9114b7b2313d7450912277855ff5dfd7cd4a06", size = 46555059 }
912
+ wheels = [
913
+ { url = "https://files.pythonhosted.org/packages/c3/00/706cebe7c2c12a6318aabe5d354836f54adff7156fd9e1bd6c89f4ba0e98/pillow-10.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8bc1a764ed8c957a2e9cacf97c8b2b053b70307cf2996aafd70e91a082e70df3", size = 3525685 },
914
+ { url = "https://files.pythonhosted.org/packages/cf/76/f658cbfa49405e5ecbfb9ba42d07074ad9792031267e782d409fd8fe7c69/pillow-10.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6209bb41dc692ddfee4942517c19ee81b86c864b626dbfca272ec0f7cff5d9fb", size = 3374883 },
915
+ { url = "https://files.pythonhosted.org/packages/46/2b/99c28c4379a85e65378211971c0b430d9c7234b1ec4d59b2668f6299e011/pillow-10.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bee197b30783295d2eb680b311af15a20a8b24024a19c3a26431ff83eb8d1f70", size = 4339837 },
916
+ { url = "https://files.pythonhosted.org/packages/f1/74/b1ec314f624c0c43711fdf0d8076f82d9d802afd58f1d62c2a86878e8615/pillow-10.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ef61f5dd14c300786318482456481463b9d6b91ebe5ef12f405afbba77ed0be", size = 4455562 },
917
+ { url = "https://files.pythonhosted.org/packages/4a/2a/4b04157cb7b9c74372fa867096a1607e6fedad93a44deeff553ccd307868/pillow-10.4.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:297e388da6e248c98bc4a02e018966af0c5f92dfacf5a5ca22fa01cb3179bca0", size = 4366761 },
918
+ { url = "https://files.pythonhosted.org/packages/ac/7b/8f1d815c1a6a268fe90481232c98dd0e5fa8c75e341a75f060037bd5ceae/pillow-10.4.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:e4db64794ccdf6cb83a59d73405f63adbe2a1887012e308828596100a0b2f6cc", size = 4536767 },
919
+ { url = "https://files.pythonhosted.org/packages/e5/77/05fa64d1f45d12c22c314e7b97398ffb28ef2813a485465017b7978b3ce7/pillow-10.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bd2880a07482090a3bcb01f4265f1936a903d70bc740bfcb1fd4e8a2ffe5cf5a", size = 4477989 },
920
+ { url = "https://files.pythonhosted.org/packages/12/63/b0397cfc2caae05c3fb2f4ed1b4fc4fc878f0243510a7a6034ca59726494/pillow-10.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4b35b21b819ac1dbd1233317adeecd63495f6babf21b7b2512d244ff6c6ce309", size = 4610255 },
921
+ { url = "https://files.pythonhosted.org/packages/7b/f9/cfaa5082ca9bc4a6de66ffe1c12c2d90bf09c309a5f52b27759a596900e7/pillow-10.4.0-cp313-cp313-win32.whl", hash = "sha256:551d3fd6e9dc15e4c1eb6fc4ba2b39c0c7933fa113b220057a34f4bb3268a060", size = 2235603 },
922
+ { url = "https://files.pythonhosted.org/packages/01/6a/30ff0eef6e0c0e71e55ded56a38d4859bf9d3634a94a88743897b5f96936/pillow-10.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:030abdbe43ee02e0de642aee345efa443740aa4d828bfe8e2eb11922ea6a21ea", size = 2554972 },
923
+ { url = "https://files.pythonhosted.org/packages/48/2c/2e0a52890f269435eee38b21c8218e102c621fe8d8df8b9dd06fabf879ba/pillow-10.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:5b001114dd152cfd6b23befeb28d7aee43553e2402c9f159807bf55f33af8a8d", size = 2243375 },
924
+ ]
925
+
926
+ [[package]]
927
+ name = "portalocker"
928
+ version = "2.10.1"
929
+ source = { registry = "https://pypi.org/simple" }
930
+ dependencies = [
931
+ { name = "pywin32", marker = "sys_platform == 'win32'" },
932
+ ]
933
+ sdist = { url = "https://files.pythonhosted.org/packages/ed/d3/c6c64067759e87af98cc668c1cc75171347d0f1577fab7ca3749134e3cd4/portalocker-2.10.1.tar.gz", hash = "sha256:ef1bf844e878ab08aee7e40184156e1151f228f103aa5c6bd0724cc330960f8f", size = 40891 }
934
+ wheels = [
935
+ { url = "https://files.pythonhosted.org/packages/9b/fb/a70a4214956182e0d7a9099ab17d50bfcba1056188e9b14f35b9e2b62a0d/portalocker-2.10.1-py3-none-any.whl", hash = "sha256:53a5984ebc86a025552264b459b46a2086e269b21823cb572f8f28ee759e45bf", size = 18423 },
936
+ ]
937
+
938
  [[package]]
939
  name = "protobuf"
940
  version = "5.29.3"
 
949
  { url = "https://files.pythonhosted.org/packages/fd/b2/ab07b09e0f6d143dfb839693aa05765257bceaa13d03bf1a696b78323e7a/protobuf-5.29.3-py3-none-any.whl", hash = "sha256:0a18ed4a24198528f2333802eb075e59dea9d679ab7a6c5efb017a59004d849f", size = 172550 },
950
  ]
951
 
952
+ [[package]]
953
+ name = "py-rust-stemmers"
954
+ version = "0.1.3"
955
+ source = { registry = "https://pypi.org/simple" }
956
+ sdist = { url = "https://files.pythonhosted.org/packages/f4/8a/c7481c6e324da825f13bafb362dbca47dbf8a7dd1a3a3502f47cdb05bfa9/py_rust_stemmers-0.1.3.tar.gz", hash = "sha256:ad796d47874181a25addb505a04245e34620bd7a0c5055671f52d9ce993253e2", size = 8676 }
957
+
958
  [[package]]
959
  name = "pydantic"
960
  version = "2.10.1"
 
994
  { url = "https://files.pythonhosted.org/packages/df/c3/b15fb833926d91d982fde29c0624c9f225da743c7af801dace0d4e187e71/pydantic_core-2.27.1-cp313-none-win_arm64.whl", hash = "sha256:45cf8588c066860b623cd11c4ba687f8d7175d5f7ef65f7129df8a394c502de5", size = 1882983 },
995
  ]
996
 
997
+ [[package]]
998
+ name = "pygments"
999
+ version = "2.19.1"
1000
+ source = { registry = "https://pypi.org/simple" }
1001
+ sdist = { url = "https://files.pythonhosted.org/packages/7c/2d/c3338d48ea6cc0feb8446d8e6937e1408088a72a39937982cc6111d17f84/pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f", size = 4968581 }
1002
+ wheels = [
1003
+ { url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c", size = 1225293 },
1004
+ ]
1005
+
1006
  [[package]]
1007
  name = "pyjwt"
1008
  version = "2.10.1"
 
1021
  { url = "https://files.pythonhosted.org/packages/8e/5e/c86a5643653825d3c913719e788e41386bee415c2b87b4f955432f2de6b2/pypdf2-3.0.1-py3-none-any.whl", hash = "sha256:d16e4205cfee272fbdc0568b68d82be796540b1537508cef59388f839c191928", size = 232572 },
1022
  ]
1023
 
1024
+ [[package]]
1025
+ name = "pyreadline3"
1026
+ version = "3.5.4"
1027
+ source = { registry = "https://pypi.org/simple" }
1028
+ sdist = { url = "https://files.pythonhosted.org/packages/0f/49/4cea918a08f02817aabae639e3d0ac046fef9f9180518a3ad394e22da148/pyreadline3-3.5.4.tar.gz", hash = "sha256:8d57d53039a1c75adba8e50dd3d992b28143480816187ea5efbd5c78e6c885b7", size = 99839 }
1029
+ wheels = [
1030
+ { url = "https://files.pythonhosted.org/packages/5a/dc/491b7661614ab97483abf2056be1deee4dc2490ecbf7bff9ab5cdbac86e1/pyreadline3-3.5.4-py3-none-any.whl", hash = "sha256:eaf8e6cc3c49bcccf145fc6067ba8643d1df34d604a1ec0eccbf7a18e6d3fae6", size = 83178 },
1031
+ ]
1032
+
1033
  [[package]]
1034
  name = "python-dotenv"
1035
  version = "1.0.1"
 
1073
  { url = "https://files.pythonhosted.org/packages/8a/a3/c69806f30dd81df5a99d592e7db4c930c3a9b098555aa97b0eb866b20b11/python_socketio-5.12.1-py3-none-any.whl", hash = "sha256:24a0ea7cfff0e021eb28c68edbf7914ee4111bdf030b95e4d250c4dc9af7a386", size = 76947 },
1074
  ]
1075
 
1076
+ [[package]]
1077
+ name = "pywin32"
1078
+ version = "308"
1079
+ source = { registry = "https://pypi.org/simple" }
1080
+ wheels = [
1081
+ { url = "https://files.pythonhosted.org/packages/a9/a4/aa562d8935e3df5e49c161b427a3a2efad2ed4e9cf81c3de636f1fdddfd0/pywin32-308-cp313-cp313-win32.whl", hash = "sha256:1c44539a37a5b7b21d02ab34e6a4d314e0788f1690d65b48e9b0b89f31abbbed", size = 5938579 },
1082
+ { url = "https://files.pythonhosted.org/packages/c7/50/b0efb8bb66210da67a53ab95fd7a98826a97ee21f1d22949863e6d588b22/pywin32-308-cp313-cp313-win_amd64.whl", hash = "sha256:fd380990e792eaf6827fcb7e187b2b4b1cede0585e3d0c9e84201ec27b9905e4", size = 6542056 },
1083
+ { url = "https://files.pythonhosted.org/packages/26/df/2b63e3e4f2df0224f8aaf6d131f54fe4e8c96400eb9df563e2aae2e1a1f9/pywin32-308-cp313-cp313-win_arm64.whl", hash = "sha256:ef313c46d4c18dfb82a2431e3051ac8f112ccee1a34f29c263c583c568db63cd", size = 7974986 },
1084
+ ]
1085
+
1086
+ [[package]]
1087
+ name = "pyyaml"
1088
+ version = "6.0.2"
1089
+ source = { registry = "https://pypi.org/simple" }
1090
+ sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631 }
1091
+ wheels = [
1092
+ { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309 },
1093
+ { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679 },
1094
+ { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428 },
1095
+ { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361 },
1096
+ { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523 },
1097
+ { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660 },
1098
+ { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597 },
1099
+ { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527 },
1100
+ { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446 },
1101
+ ]
1102
+
1103
+ [[package]]
1104
+ name = "qdrant-client"
1105
+ version = "1.13.2"
1106
+ source = { registry = "https://pypi.org/simple" }
1107
+ dependencies = [
1108
+ { name = "grpcio" },
1109
+ { name = "grpcio-tools" },
1110
+ { name = "httpx", extra = ["http2"] },
1111
+ { name = "numpy" },
1112
+ { name = "portalocker" },
1113
+ { name = "pydantic" },
1114
+ { name = "urllib3" },
1115
+ ]
1116
+ sdist = { url = "https://files.pythonhosted.org/packages/1c/07/3eaf3777d524d555ba14e56a30c3e393ad78ed93f6c87c6a3ddc70ec2e49/qdrant_client-1.13.2.tar.gz", hash = "sha256:c8cce87ce67b006f49430a050a35c85b78e3b896c0c756dafc13bdeca543ec13", size = 266257 }
1117
+ wheels = [
1118
+ { url = "https://files.pythonhosted.org/packages/5f/26/89ebaee5fcbd99bf1c0a627a9447b440118b2d31dea423d074cb0481be5c/qdrant_client-1.13.2-py3-none-any.whl", hash = "sha256:db97e759bd3f8d483a383984ba4c2a158eef56f2188d83df7771591d43de2201", size = 306637 },
1119
+ ]
1120
+
1121
  [[package]]
1122
  name = "requests"
1123
  version = "2.32.3"
 
1133
  { url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928 },
1134
  ]
1135
 
1136
+ [[package]]
1137
+ name = "rich"
1138
+ version = "13.9.4"
1139
+ source = { registry = "https://pypi.org/simple" }
1140
+ dependencies = [
1141
+ { name = "markdown-it-py" },
1142
+ { name = "pygments" },
1143
+ ]
1144
+ sdist = { url = "https://files.pythonhosted.org/packages/ab/3a/0316b28d0761c6734d6bc14e770d85506c986c85ffb239e688eeaab2c2bc/rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098", size = 223149 }
1145
+ wheels = [
1146
+ { url = "https://files.pythonhosted.org/packages/19/71/39c7c0d87f8d4e6c020a393182060eaefeeae6c01dab6a84ec346f2567df/rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90", size = 242424 },
1147
+ ]
1148
+
1149
+ [[package]]
1150
+ name = "rich-toolkit"
1151
+ version = "0.13.2"
1152
+ source = { registry = "https://pypi.org/simple" }
1153
+ dependencies = [
1154
+ { name = "click" },
1155
+ { name = "rich" },
1156
+ { name = "typing-extensions" },
1157
+ ]
1158
+ sdist = { url = "https://files.pythonhosted.org/packages/5b/8a/71cfbf6bf6257ea785d1f030c22468f763eea1b3e5417620f2ba9abd6dca/rich_toolkit-0.13.2.tar.gz", hash = "sha256:fea92557530de7c28f121cbed572ad93d9e0ddc60c3ca643f1b831f2f56b95d3", size = 72288 }
1159
+ wheels = [
1160
+ { url = "https://files.pythonhosted.org/packages/7e/1b/1c2f43af46456050b27810a7a013af8a7e12bc545a0cdc00eb0df55eb769/rich_toolkit-0.13.2-py3-none-any.whl", hash = "sha256:f3f6c583e5283298a2f7dbd3c65aca18b7f818ad96174113ab5bec0b0e35ed61", size = 13566 },
1161
+ ]
1162
+
1163
+ [[package]]
1164
+ name = "setuptools"
1165
+ version = "75.8.0"
1166
+ source = { registry = "https://pypi.org/simple" }
1167
+ sdist = { url = "https://files.pythonhosted.org/packages/92/ec/089608b791d210aec4e7f97488e67ab0d33add3efccb83a056cbafe3a2a6/setuptools-75.8.0.tar.gz", hash = "sha256:c5afc8f407c626b8313a86e10311dd3f661c6cd9c09d4bf8c15c0e11f9f2b0e6", size = 1343222 }
1168
+ wheels = [
1169
+ { url = "https://files.pythonhosted.org/packages/69/8a/b9dc7678803429e4a3bc9ba462fa3dd9066824d3c607490235c6a796be5a/setuptools-75.8.0-py3-none-any.whl", hash = "sha256:e3982f444617239225d675215d51f6ba05f845d4eec313da4418fdbb56fb27e3", size = 1228782 },
1170
+ ]
1171
+
1172
+ [[package]]
1173
+ name = "shellingham"
1174
+ version = "1.5.4"
1175
+ source = { registry = "https://pypi.org/simple" }
1176
+ sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310 }
1177
+ wheels = [
1178
+ { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755 },
1179
+ ]
1180
+
1181
  [[package]]
1182
  name = "simple-websocket"
1183
  version = "1.1.0"
 
1211
  { url = "https://files.pythonhosted.org/packages/96/00/2b325970b3060c7cecebab6d295afe763365822b1306a12eeab198f74323/starlette-0.41.3-py3-none-any.whl", hash = "sha256:44cedb2b7c77a9de33a8b74b2b90e9f50d11fcf25d8270ea525ad71a25374ff7", size = 73225 },
1212
  ]
1213
 
1214
+ [[package]]
1215
+ name = "sympy"
1216
+ version = "1.13.3"
1217
+ source = { registry = "https://pypi.org/simple" }
1218
+ dependencies = [
1219
+ { name = "mpmath" },
1220
+ ]
1221
+ sdist = { url = "https://files.pythonhosted.org/packages/11/8a/5a7fd6284fa8caac23a26c9ddf9c30485a48169344b4bd3b0f02fef1890f/sympy-1.13.3.tar.gz", hash = "sha256:b27fd2c6530e0ab39e275fc9b683895367e51d5da91baa8d3d64db2565fec4d9", size = 7533196 }
1222
+ wheels = [
1223
+ { url = "https://files.pythonhosted.org/packages/99/ff/c87e0622b1dadea79d2fb0b25ade9ed98954c9033722eb707053d310d4f3/sympy-1.13.3-py3-none-any.whl", hash = "sha256:54612cf55a62755ee71824ce692986f23c88ffa77207b30c1368eda4a7060f73", size = 6189483 },
1224
+ ]
1225
+
1226
  [[package]]
1227
  name = "syncer"
1228
  version = "2.0.3"
1229
  source = { registry = "https://pypi.org/simple" }
1230
  sdist = { url = "https://files.pythonhosted.org/packages/8d/dd/d4dd75843692690d81f0a4b929212a1614b25d4896aa7c72f4c3546c7e3d/syncer-2.0.3.tar.gz", hash = "sha256:4340eb54b54368724a78c5c0763824470201804fe9180129daf3635cb500550f", size = 11512 }
1231
 
1232
+ [[package]]
1233
+ name = "tokenizers"
1234
+ version = "0.21.0"
1235
+ source = { registry = "https://pypi.org/simple" }
1236
+ dependencies = [
1237
+ { name = "huggingface-hub" },
1238
+ ]
1239
+ sdist = { url = "https://files.pythonhosted.org/packages/20/41/c2be10975ca37f6ec40d7abd7e98a5213bb04f284b869c1a24e6504fd94d/tokenizers-0.21.0.tar.gz", hash = "sha256:ee0894bf311b75b0c03079f33859ae4b2334d675d4e93f5a4132e1eae2834fe4", size = 343021 }
1240
+ wheels = [
1241
+ { url = "https://files.pythonhosted.org/packages/b0/5c/8b09607b37e996dc47e70d6a7b6f4bdd4e4d5ab22fe49d7374565c7fefaf/tokenizers-0.21.0-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:3c4c93eae637e7d2aaae3d376f06085164e1660f89304c0ab2b1d08a406636b2", size = 2647461 },
1242
+ { url = "https://files.pythonhosted.org/packages/22/7a/88e58bb297c22633ed1c9d16029316e5b5ac5ee44012164c2edede599a5e/tokenizers-0.21.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:f53ea537c925422a2e0e92a24cce96f6bc5046bbef24a1652a5edc8ba975f62e", size = 2563639 },
1243
+ { url = "https://files.pythonhosted.org/packages/f7/14/83429177c19364df27d22bc096d4c2e431e0ba43e56c525434f1f9b0fd00/tokenizers-0.21.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b177fb54c4702ef611de0c069d9169f0004233890e0c4c5bd5508ae05abf193", size = 2903304 },
1244
+ { url = "https://files.pythonhosted.org/packages/7e/db/3433eab42347e0dc5452d8fcc8da03f638c9accffefe5a7c78146666964a/tokenizers-0.21.0-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6b43779a269f4629bebb114e19c3fca0223296ae9fea8bb9a7a6c6fb0657ff8e", size = 2804378 },
1245
+ { url = "https://files.pythonhosted.org/packages/57/8b/7da5e6f89736c2ade02816b4733983fca1c226b0c42980b1ae9dc8fcf5cc/tokenizers-0.21.0-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9aeb255802be90acfd363626753fda0064a8df06031012fe7d52fd9a905eb00e", size = 3095488 },
1246
+ { url = "https://files.pythonhosted.org/packages/4d/f6/5ed6711093dc2c04a4e03f6461798b12669bc5a17c8be7cce1240e0b5ce8/tokenizers-0.21.0-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d8b09dbeb7a8d73ee204a70f94fc06ea0f17dcf0844f16102b9f414f0b7463ba", size = 3121410 },
1247
+ { url = "https://files.pythonhosted.org/packages/81/42/07600892d48950c5e80505b81411044a2d969368cdc0d929b1c847bf6697/tokenizers-0.21.0-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:400832c0904f77ce87c40f1a8a27493071282f785724ae62144324f171377273", size = 3388821 },
1248
+ { url = "https://files.pythonhosted.org/packages/22/06/69d7ce374747edaf1695a4f61b83570d91cc8bbfc51ccfecf76f56ab4aac/tokenizers-0.21.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e84ca973b3a96894d1707e189c14a774b701596d579ffc7e69debfc036a61a04", size = 3008868 },
1249
+ { url = "https://files.pythonhosted.org/packages/c8/69/54a0aee4d576045b49a0eb8bffdc495634309c823bf886042e6f46b80058/tokenizers-0.21.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:eb7202d231b273c34ec67767378cd04c767e967fda12d4a9e36208a34e2f137e", size = 8975831 },
1250
+ { url = "https://files.pythonhosted.org/packages/f7/f3/b776061e4f3ebf2905ba1a25d90380aafd10c02d406437a8ba22d1724d76/tokenizers-0.21.0-cp39-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:089d56db6782a73a27fd8abf3ba21779f5b85d4a9f35e3b493c7bbcbbf0d539b", size = 8920746 },
1251
+ { url = "https://files.pythonhosted.org/packages/d8/ee/ce83d5ec8b6844ad4c3ecfe3333d58ecc1adc61f0878b323a15355bcab24/tokenizers-0.21.0-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:c87ca3dc48b9b1222d984b6b7490355a6fdb411a2d810f6f05977258400ddb74", size = 9161814 },
1252
+ { url = "https://files.pythonhosted.org/packages/18/07/3e88e65c0ed28fa93aa0c4d264988428eef3df2764c3126dc83e243cb36f/tokenizers-0.21.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:4145505a973116f91bc3ac45988a92e618a6f83eb458f49ea0790df94ee243ff", size = 9357138 },
1253
+ { url = "https://files.pythonhosted.org/packages/15/b0/dc4572ca61555fc482ebc933f26cb407c6aceb3dc19c301c68184f8cad03/tokenizers-0.21.0-cp39-abi3-win32.whl", hash = "sha256:eb1702c2f27d25d9dd5b389cc1f2f51813e99f8ca30d9e25348db6585a97e24a", size = 2202266 },
1254
+ { url = "https://files.pythonhosted.org/packages/44/69/d21eb253fa91622da25585d362a874fa4710be600f0ea9446d8d0217cec1/tokenizers-0.21.0-cp39-abi3-win_amd64.whl", hash = "sha256:87841da5a25a3a5f70c102de371db120f41873b854ba65e52bccd57df5a3780c", size = 2389192 },
1255
+ ]
1256
+
1257
  [[package]]
1258
  name = "tomli"
1259
  version = "2.2.1"
 
1278
  version = "4.67.1"
1279
  source = { registry = "https://pypi.org/simple" }
1280
  dependencies = [
1281
+ { name = "colorama", marker = "sys_platform == 'win32'" },
1282
  ]
1283
  sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737 }
1284
  wheels = [
1285
  { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540 },
1286
  ]
1287
 
1288
+ [[package]]
1289
+ name = "typer"
1290
+ version = "0.15.1"
1291
+ source = { registry = "https://pypi.org/simple" }
1292
+ dependencies = [
1293
+ { name = "click" },
1294
+ { name = "rich" },
1295
+ { name = "shellingham" },
1296
+ { name = "typing-extensions" },
1297
+ ]
1298
+ sdist = { url = "https://files.pythonhosted.org/packages/cb/ce/dca7b219718afd37a0068f4f2530a727c2b74a8b6e8e0c0080a4c0de4fcd/typer-0.15.1.tar.gz", hash = "sha256:a0588c0a7fa68a1978a069818657778f86abe6ff5ea6abf472f940a08bfe4f0a", size = 99789 }
1299
+ wheels = [
1300
+ { url = "https://files.pythonhosted.org/packages/d0/cc/0a838ba5ca64dc832aa43f727bd586309846b0ffb2ce52422543e6075e8a/typer-0.15.1-py3-none-any.whl", hash = "sha256:7994fb7b8155b64d3402518560648446072864beefd44aa2dc36972a5972e847", size = 44908 },
1301
+ ]
1302
+
1303
  [[package]]
1304
  name = "typing-extensions"
1305
  version = "4.12.2"
 
1359
  { url = "https://files.pythonhosted.org/packages/61/14/33a3a1352cfa71812a3a21e8c9bfb83f60b0011f5e36f2b1399d51928209/uvicorn-0.34.0-py3-none-any.whl", hash = "sha256:023dc038422502fa28a09c7a30bf2b6991512da7dcdb8fd35fe57cfc154126f4", size = 62315 },
1360
  ]
1361
 
1362
+ [package.optional-dependencies]
1363
+ standard = [
1364
+ { name = "colorama", marker = "sys_platform == 'win32'" },
1365
+ { name = "httptools" },
1366
+ { name = "python-dotenv" },
1367
+ { name = "pyyaml" },
1368
+ { name = "uvloop", marker = "platform_python_implementation != 'PyPy' and sys_platform != 'cygwin' and sys_platform != 'win32'" },
1369
+ { name = "watchfiles" },
1370
+ { name = "websockets" },
1371
+ ]
1372
+
1373
+ [[package]]
1374
+ name = "uvloop"
1375
+ version = "0.21.0"
1376
+ source = { registry = "https://pypi.org/simple" }
1377
+ sdist = { url = "https://files.pythonhosted.org/packages/af/c0/854216d09d33c543f12a44b393c402e89a920b1a0a7dc634c42de91b9cf6/uvloop-0.21.0.tar.gz", hash = "sha256:3bf12b0fda68447806a7ad847bfa591613177275d35b6724b1ee573faa3704e3", size = 2492741 }
1378
+ wheels = [
1379
+ { url = "https://files.pythonhosted.org/packages/3f/8d/2cbef610ca21539f0f36e2b34da49302029e7c9f09acef0b1c3b5839412b/uvloop-0.21.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:bfd55dfcc2a512316e65f16e503e9e450cab148ef11df4e4e679b5e8253a5281", size = 1468123 },
1380
+ { url = "https://files.pythonhosted.org/packages/93/0d/b0038d5a469f94ed8f2b2fce2434a18396d8fbfb5da85a0a9781ebbdec14/uvloop-0.21.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:787ae31ad8a2856fc4e7c095341cccc7209bd657d0e71ad0dc2ea83c4a6fa8af", size = 819325 },
1381
+ { url = "https://files.pythonhosted.org/packages/50/94/0a687f39e78c4c1e02e3272c6b2ccdb4e0085fda3b8352fecd0410ccf915/uvloop-0.21.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ee4d4ef48036ff6e5cfffb09dd192c7a5027153948d85b8da7ff705065bacc6", size = 4582806 },
1382
+ { url = "https://files.pythonhosted.org/packages/d2/19/f5b78616566ea68edd42aacaf645adbf71fbd83fc52281fba555dc27e3f1/uvloop-0.21.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3df876acd7ec037a3d005b3ab85a7e4110422e4d9c1571d4fc89b0fc41b6816", size = 4701068 },
1383
+ { url = "https://files.pythonhosted.org/packages/47/57/66f061ee118f413cd22a656de622925097170b9380b30091b78ea0c6ea75/uvloop-0.21.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bd53ecc9a0f3d87ab847503c2e1552b690362e005ab54e8a48ba97da3924c0dc", size = 4454428 },
1384
+ { url = "https://files.pythonhosted.org/packages/63/9a/0962b05b308494e3202d3f794a6e85abe471fe3cafdbcf95c2e8c713aabd/uvloop-0.21.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a5c39f217ab3c663dc699c04cbd50c13813e31d917642d459fdcec07555cc553", size = 4660018 },
1385
+ ]
1386
+
1387
  [[package]]
1388
  name = "watchfiles"
1389
  version = "0.20.0"
 
1428
  { url = "https://files.pythonhosted.org/packages/7b/c8/d529f8a32ce40d98309f4470780631e971a5a842b60aec864833b3615786/websockets-14.2-py3-none-any.whl", hash = "sha256:7a6ceec4ea84469f15cf15807a747e9efe57e369c384fa86e022b3bea679b79b", size = 157416 },
1429
  ]
1430
 
1431
+ [[package]]
1432
+ name = "win32-setctime"
1433
+ version = "1.2.0"
1434
+ source = { registry = "https://pypi.org/simple" }
1435
+ sdist = { url = "https://files.pythonhosted.org/packages/b3/8f/705086c9d734d3b663af0e9bb3d4de6578d08f46b1b101c2442fd9aecaa2/win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0", size = 4867 }
1436
+ wheels = [
1437
+ { url = "https://files.pythonhosted.org/packages/e1/07/c6fe3ad3e685340704d314d765b7912993bcb8dc198f0e7a89382d37974b/win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390", size = 4083 },
1438
+ ]
1439
+
1440
  [[package]]
1441
  name = "wrapt"
1442
  version = "1.17.2"
vite.config.ts ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { defineConfig } from "vite";
2
+ import react from "@vitejs/plugin-react";
3
+
4
+ // https://vite.dev/config/
5
+ export default defineConfig({
6
+ plugins: [react()],
7
+ server: {
8
+ proxy: {
9
+ "/api": {
10
+ target: "http://localhost:8000/",
11
+ changeOrigin: true,
12
+ },
13
+ },
14
+ },
15
+ });
yarn.lock ADDED
@@ -0,0 +1,1517 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2
+ # yarn lockfile v1
3
+
4
+
5
+ "@ampproject/remapping@^2.2.0":
6
+ version "2.3.0"
7
+ resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4"
8
+ integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==
9
+ dependencies:
10
+ "@jridgewell/gen-mapping" "^0.3.5"
11
+ "@jridgewell/trace-mapping" "^0.3.24"
12
+
13
+ "@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0", "@babel/code-frame@^7.26.2":
14
+ version "7.26.2"
15
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85"
16
+ integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==
17
+ dependencies:
18
+ "@babel/helper-validator-identifier" "^7.25.9"
19
+ js-tokens "^4.0.0"
20
+ picocolors "^1.0.0"
21
+
22
+ "@babel/compat-data@^7.26.5":
23
+ version "7.26.5"
24
+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.5.tgz#df93ac37f4417854130e21d72c66ff3d4b897fc7"
25
+ integrity sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==
26
+
27
+ "@babel/core@^7.26.0":
28
+ version "7.26.0"
29
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.0.tgz#d78b6023cc8f3114ccf049eb219613f74a747b40"
30
+ integrity sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==
31
+ dependencies:
32
+ "@ampproject/remapping" "^2.2.0"
33
+ "@babel/code-frame" "^7.26.0"
34
+ "@babel/generator" "^7.26.0"
35
+ "@babel/helper-compilation-targets" "^7.25.9"
36
+ "@babel/helper-module-transforms" "^7.26.0"
37
+ "@babel/helpers" "^7.26.0"
38
+ "@babel/parser" "^7.26.0"
39
+ "@babel/template" "^7.25.9"
40
+ "@babel/traverse" "^7.25.9"
41
+ "@babel/types" "^7.26.0"
42
+ convert-source-map "^2.0.0"
43
+ debug "^4.1.0"
44
+ gensync "^1.0.0-beta.2"
45
+ json5 "^2.2.3"
46
+ semver "^6.3.1"
47
+
48
+ "@babel/generator@^7.26.0", "@babel/generator@^7.26.5":
49
+ version "7.26.5"
50
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.5.tgz#e44d4ab3176bbcaf78a5725da5f1dc28802a9458"
51
+ integrity sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==
52
+ dependencies:
53
+ "@babel/parser" "^7.26.5"
54
+ "@babel/types" "^7.26.5"
55
+ "@jridgewell/gen-mapping" "^0.3.5"
56
+ "@jridgewell/trace-mapping" "^0.3.25"
57
+ jsesc "^3.0.2"
58
+
59
+ "@babel/helper-compilation-targets@^7.25.9":
60
+ version "7.26.5"
61
+ resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz#75d92bb8d8d51301c0d49e52a65c9a7fe94514d8"
62
+ integrity sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==
63
+ dependencies:
64
+ "@babel/compat-data" "^7.26.5"
65
+ "@babel/helper-validator-option" "^7.25.9"
66
+ browserslist "^4.24.0"
67
+ lru-cache "^5.1.1"
68
+ semver "^6.3.1"
69
+
70
+ "@babel/helper-module-imports@^7.25.9":
71
+ version "7.25.9"
72
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715"
73
+ integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==
74
+ dependencies:
75
+ "@babel/traverse" "^7.25.9"
76
+ "@babel/types" "^7.25.9"
77
+
78
+ "@babel/helper-module-transforms@^7.26.0":
79
+ version "7.26.0"
80
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae"
81
+ integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==
82
+ dependencies:
83
+ "@babel/helper-module-imports" "^7.25.9"
84
+ "@babel/helper-validator-identifier" "^7.25.9"
85
+ "@babel/traverse" "^7.25.9"
86
+
87
+ "@babel/helper-plugin-utils@^7.25.9":
88
+ version "7.26.5"
89
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz#18580d00c9934117ad719392c4f6585c9333cc35"
90
+ integrity sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==
91
+
92
+ "@babel/helper-string-parser@^7.25.9":
93
+ version "7.25.9"
94
+ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c"
95
+ integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==
96
+
97
+ "@babel/helper-validator-identifier@^7.25.9":
98
+ version "7.25.9"
99
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7"
100
+ integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==
101
+
102
+ "@babel/helper-validator-option@^7.25.9":
103
+ version "7.25.9"
104
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72"
105
+ integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==
106
+
107
+ "@babel/helpers@^7.26.0":
108
+ version "7.26.0"
109
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.0.tgz#30e621f1eba5aa45fe6f4868d2e9154d884119a4"
110
+ integrity sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==
111
+ dependencies:
112
+ "@babel/template" "^7.25.9"
113
+ "@babel/types" "^7.26.0"
114
+
115
+ "@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.25.9", "@babel/parser@^7.26.0", "@babel/parser@^7.26.5":
116
+ version "7.26.5"
117
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.5.tgz#6fec9aebddef25ca57a935c86dbb915ae2da3e1f"
118
+ integrity sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw==
119
+ dependencies:
120
+ "@babel/types" "^7.26.5"
121
+
122
+ "@babel/plugin-transform-react-jsx-self@^7.25.9":
123
+ version "7.25.9"
124
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz#c0b6cae9c1b73967f7f9eb2fca9536ba2fad2858"
125
+ integrity sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==
126
+ dependencies:
127
+ "@babel/helper-plugin-utils" "^7.25.9"
128
+
129
+ "@babel/plugin-transform-react-jsx-source@^7.25.9":
130
+ version "7.25.9"
131
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz#4c6b8daa520b5f155b5fb55547d7c9fa91417503"
132
+ integrity sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==
133
+ dependencies:
134
+ "@babel/helper-plugin-utils" "^7.25.9"
135
+
136
+ "@babel/template@^7.25.9":
137
+ version "7.25.9"
138
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016"
139
+ integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==
140
+ dependencies:
141
+ "@babel/code-frame" "^7.25.9"
142
+ "@babel/parser" "^7.25.9"
143
+ "@babel/types" "^7.25.9"
144
+
145
+ "@babel/traverse@^7.25.9":
146
+ version "7.26.5"
147
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.5.tgz#6d0be3e772ff786456c1a37538208286f6e79021"
148
+ integrity sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ==
149
+ dependencies:
150
+ "@babel/code-frame" "^7.26.2"
151
+ "@babel/generator" "^7.26.5"
152
+ "@babel/parser" "^7.26.5"
153
+ "@babel/template" "^7.25.9"
154
+ "@babel/types" "^7.26.5"
155
+ debug "^4.3.1"
156
+ globals "^11.1.0"
157
+
158
+ "@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.25.9", "@babel/types@^7.26.0", "@babel/types@^7.26.5":
159
+ version "7.26.5"
160
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.5.tgz#7a1e1c01d28e26d1fe7f8ec9567b3b92b9d07747"
161
+ integrity sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg==
162
+ dependencies:
163
+ "@babel/helper-string-parser" "^7.25.9"
164
+ "@babel/helper-validator-identifier" "^7.25.9"
165
+
166
+ "@esbuild/[email protected]":
167
+ version "0.24.2"
168
+ resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz#38848d3e25afe842a7943643cbcd387cc6e13461"
169
+ integrity sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==
170
+
171
+ "@esbuild/[email protected]":
172
+ version "0.24.2"
173
+ resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz#f592957ae8b5643129fa889c79e69cd8669bb894"
174
+ integrity sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==
175
+
176
+ "@esbuild/[email protected]":
177
+ version "0.24.2"
178
+ resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.24.2.tgz#72d8a2063aa630308af486a7e5cbcd1e134335b3"
179
+ integrity sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==
180
+
181
+ "@esbuild/[email protected]":
182
+ version "0.24.2"
183
+ resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.24.2.tgz#9a7713504d5f04792f33be9c197a882b2d88febb"
184
+ integrity sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==
185
+
186
+ "@esbuild/[email protected]":
187
+ version "0.24.2"
188
+ resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz#02ae04ad8ebffd6e2ea096181b3366816b2b5936"
189
+ integrity sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==
190
+
191
+ "@esbuild/[email protected]":
192
+ version "0.24.2"
193
+ resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz#9ec312bc29c60e1b6cecadc82bd504d8adaa19e9"
194
+ integrity sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==
195
+
196
+ "@esbuild/[email protected]":
197
+ version "0.24.2"
198
+ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz#5e82f44cb4906d6aebf24497d6a068cfc152fa00"
199
+ integrity sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==
200
+
201
+ "@esbuild/[email protected]":
202
+ version "0.24.2"
203
+ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz#3fb1ce92f276168b75074b4e51aa0d8141ecce7f"
204
+ integrity sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==
205
+
206
+ "@esbuild/[email protected]":
207
+ version "0.24.2"
208
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz#856b632d79eb80aec0864381efd29de8fd0b1f43"
209
+ integrity sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==
210
+
211
+ "@esbuild/[email protected]":
212
+ version "0.24.2"
213
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz#c846b4694dc5a75d1444f52257ccc5659021b736"
214
+ integrity sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==
215
+
216
+ "@esbuild/[email protected]":
217
+ version "0.24.2"
218
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz#f8a16615a78826ccbb6566fab9a9606cfd4a37d5"
219
+ integrity sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==
220
+
221
+ "@esbuild/[email protected]":
222
+ version "0.24.2"
223
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz#1c451538c765bf14913512c76ed8a351e18b09fc"
224
+ integrity sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==
225
+
226
+ "@esbuild/[email protected]":
227
+ version "0.24.2"
228
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz#0846edeefbc3d8d50645c51869cc64401d9239cb"
229
+ integrity sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==
230
+
231
+ "@esbuild/[email protected]":
232
+ version "0.24.2"
233
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz#8e3fc54505671d193337a36dfd4c1a23b8a41412"
234
+ integrity sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==
235
+
236
+ "@esbuild/[email protected]":
237
+ version "0.24.2"
238
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz#6a1e92096d5e68f7bb10a0d64bb5b6d1daf9a694"
239
+ integrity sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==
240
+
241
+ "@esbuild/[email protected]":
242
+ version "0.24.2"
243
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz#ab18e56e66f7a3c49cb97d337cd0a6fea28a8577"
244
+ integrity sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==
245
+
246
+ "@esbuild/[email protected]":
247
+ version "0.24.2"
248
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz#8140c9b40da634d380b0b29c837a0b4267aff38f"
249
+ integrity sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==
250
+
251
+ "@esbuild/[email protected]":
252
+ version "0.24.2"
253
+ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz#65f19161432bafb3981f5f20a7ff45abb2e708e6"
254
+ integrity sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==
255
+
256
+ "@esbuild/[email protected]":
257
+ version "0.24.2"
258
+ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz#7a3a97d77abfd11765a72f1c6f9b18f5396bcc40"
259
+ integrity sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==
260
+
261
+ "@esbuild/[email protected]":
262
+ version "0.24.2"
263
+ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz#58b00238dd8f123bfff68d3acc53a6ee369af89f"
264
+ integrity sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==
265
+
266
+ "@esbuild/[email protected]":
267
+ version "0.24.2"
268
+ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz#0ac843fda0feb85a93e288842936c21a00a8a205"
269
+ integrity sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==
270
+
271
+ "@esbuild/[email protected]":
272
+ version "0.24.2"
273
+ resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz#8b7aa895e07828d36c422a4404cc2ecf27fb15c6"
274
+ integrity sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==
275
+
276
+ "@esbuild/[email protected]":
277
+ version "0.24.2"
278
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz#c023afb647cabf0c3ed13f0eddfc4f1d61c66a85"
279
+ integrity sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==
280
+
281
+ "@esbuild/[email protected]":
282
+ version "0.24.2"
283
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz#96c356132d2dda990098c8b8b951209c3cd743c2"
284
+ integrity sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==
285
+
286
+ "@esbuild/[email protected]":
287
+ version "0.24.2"
288
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz#34aa0b52d0fbb1a654b596acfa595f0c7b77a77b"
289
+ integrity sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==
290
+
291
+ "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0":
292
+ version "4.4.1"
293
+ resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz#d1145bf2c20132d6400495d6df4bf59362fd9d56"
294
+ integrity sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==
295
+ dependencies:
296
+ eslint-visitor-keys "^3.4.3"
297
+
298
+ "@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.12.1":
299
+ version "4.12.1"
300
+ resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0"
301
+ integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==
302
+
303
+ "@eslint/config-array@^0.19.0":
304
+ version "0.19.1"
305
+ resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.19.1.tgz#734aaea2c40be22bbb1f2a9dac687c57a6a4c984"
306
+ integrity sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==
307
+ dependencies:
308
+ "@eslint/object-schema" "^2.1.5"
309
+ debug "^4.3.1"
310
+ minimatch "^3.1.2"
311
+
312
+ "@eslint/core@^0.10.0":
313
+ version "0.10.0"
314
+ resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.10.0.tgz#23727063c21b335f752dbb3a16450f6f9cbc9091"
315
+ integrity sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==
316
+ dependencies:
317
+ "@types/json-schema" "^7.0.15"
318
+
319
+ "@eslint/eslintrc@^3.2.0":
320
+ version "3.2.0"
321
+ resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.2.0.tgz#57470ac4e2e283a6bf76044d63281196e370542c"
322
+ integrity sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==
323
+ dependencies:
324
+ ajv "^6.12.4"
325
+ debug "^4.3.2"
326
+ espree "^10.0.1"
327
+ globals "^14.0.0"
328
+ ignore "^5.2.0"
329
+ import-fresh "^3.2.1"
330
+ js-yaml "^4.1.0"
331
+ minimatch "^3.1.2"
332
+ strip-json-comments "^3.1.1"
333
+
334
+ "@eslint/[email protected]", "@eslint/js@^9.17.0":
335
+ version "9.18.0"
336
+ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.18.0.tgz#3356f85d18ed3627ab107790b53caf7e1e3d1e84"
337
+ integrity sha512-fK6L7rxcq6/z+AaQMtiFTkvbHkBLNlwyRxHpKawP0x3u9+NC6MQTnFW+AdpwC6gfHTW0051cokQgtTN2FqlxQA==
338
+
339
+ "@eslint/object-schema@^2.1.5":
340
+ version "2.1.5"
341
+ resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.5.tgz#8670a8f6258a2be5b2c620ff314a1d984c23eb2e"
342
+ integrity sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==
343
+
344
+ "@eslint/plugin-kit@^0.2.5":
345
+ version "0.2.5"
346
+ resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.2.5.tgz#ee07372035539e7847ef834e3f5e7b79f09e3a81"
347
+ integrity sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==
348
+ dependencies:
349
+ "@eslint/core" "^0.10.0"
350
+ levn "^0.4.1"
351
+
352
+ "@humanfs/core@^0.19.1":
353
+ version "0.19.1"
354
+ resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.1.tgz#17c55ca7d426733fe3c561906b8173c336b40a77"
355
+ integrity sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==
356
+
357
+ "@humanfs/node@^0.16.6":
358
+ version "0.16.6"
359
+ resolved "https://registry.yarnpkg.com/@humanfs/node/-/node-0.16.6.tgz#ee2a10eaabd1131987bf0488fd9b820174cd765e"
360
+ integrity sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==
361
+ dependencies:
362
+ "@humanfs/core" "^0.19.1"
363
+ "@humanwhocodes/retry" "^0.3.0"
364
+
365
+ "@humanwhocodes/module-importer@^1.0.1":
366
+ version "1.0.1"
367
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c"
368
+ integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
369
+
370
+ "@humanwhocodes/retry@^0.3.0":
371
+ version "0.3.1"
372
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.3.1.tgz#c72a5c76a9fbaf3488e231b13dc52c0da7bab42a"
373
+ integrity sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==
374
+
375
+ "@humanwhocodes/retry@^0.4.1":
376
+ version "0.4.1"
377
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.1.tgz#9a96ce501bc62df46c4031fbd970e3cc6b10f07b"
378
+ integrity sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==
379
+
380
+ "@jridgewell/gen-mapping@^0.3.5":
381
+ version "0.3.8"
382
+ resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142"
383
+ integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==
384
+ dependencies:
385
+ "@jridgewell/set-array" "^1.2.1"
386
+ "@jridgewell/sourcemap-codec" "^1.4.10"
387
+ "@jridgewell/trace-mapping" "^0.3.24"
388
+
389
+ "@jridgewell/resolve-uri@^3.1.0":
390
+ version "3.1.2"
391
+ resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6"
392
+ integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
393
+
394
+ "@jridgewell/set-array@^1.2.1":
395
+ version "1.2.1"
396
+ resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280"
397
+ integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==
398
+
399
+ "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14":
400
+ version "1.5.0"
401
+ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a"
402
+ integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==
403
+
404
+ "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25":
405
+ version "0.3.25"
406
+ resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0"
407
+ integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==
408
+ dependencies:
409
+ "@jridgewell/resolve-uri" "^3.1.0"
410
+ "@jridgewell/sourcemap-codec" "^1.4.14"
411
+
412
+ "@nodelib/[email protected]":
413
+ version "2.1.5"
414
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
415
+ integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
416
+ dependencies:
417
+ "@nodelib/fs.stat" "2.0.5"
418
+ run-parallel "^1.1.9"
419
+
420
+ "@nodelib/[email protected]", "@nodelib/fs.stat@^2.0.2":
421
+ version "2.0.5"
422
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
423
+ integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
424
+
425
+ "@nodelib/fs.walk@^1.2.3":
426
+ version "1.2.8"
427
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
428
+ integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
429
+ dependencies:
430
+ "@nodelib/fs.scandir" "2.1.5"
431
+ fastq "^1.6.0"
432
+
433
+ "@rollup/[email protected]":
434
+ version "4.31.0"
435
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.31.0.tgz#d4dd60da0075a6ce9a6c76d71b8204f3e1822285"
436
+ integrity sha512-9NrR4033uCbUBRgvLcBrJofa2KY9DzxL2UKZ1/4xA/mnTNyhZCWBuD8X3tPm1n4KxcgaraOYgrFKSgwjASfmlA==
437
+
438
+ "@rollup/[email protected]":
439
+ version "4.31.0"
440
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.31.0.tgz#25c4d33259a7a2ccd2f52a5ffcc0bb3ab3f0729d"
441
+ integrity sha512-iBbODqT86YBFHajxxF8ebj2hwKm1k8PTBQSojSt3d1FFt1gN+xf4CowE47iN0vOSdnd+5ierMHBbu/rHc7nq5g==
442
+
443
+ "@rollup/[email protected]":
444
+ version "4.31.0"
445
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.31.0.tgz#d137dff254b19163a6b52ac083a71cd055dae844"
446
+ integrity sha512-WHIZfXgVBX30SWuTMhlHPXTyN20AXrLH4TEeH/D0Bolvx9PjgZnn4H677PlSGvU6MKNsjCQJYczkpvBbrBnG6g==
447
+
448
+ "@rollup/[email protected]":
449
+ version "4.31.0"
450
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.31.0.tgz#58ff20b5dacb797d3adca19f02a21c532f9d55bf"
451
+ integrity sha512-hrWL7uQacTEF8gdrQAqcDy9xllQ0w0zuL1wk1HV8wKGSGbKPVjVUv/DEwT2+Asabf8Dh/As+IvfdU+H8hhzrQQ==
452
+
453
+ "@rollup/[email protected]":
454
+ version "4.31.0"
455
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.31.0.tgz#96ce1a241c591ec3e068f4af765d94eddb24e60c"
456
+ integrity sha512-S2oCsZ4hJviG1QjPY1h6sVJLBI6ekBeAEssYKad1soRFv3SocsQCzX6cwnk6fID6UQQACTjeIMB+hyYrFacRew==
457
+
458
+ "@rollup/[email protected]":
459
+ version "4.31.0"
460
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.31.0.tgz#e59e7ede505be41f0b4311b0b943f8eb44938467"
461
+ integrity sha512-pCANqpynRS4Jirn4IKZH4tnm2+2CqCNLKD7gAdEjzdLGbH1iO0zouHz4mxqg0uEMpO030ejJ0aA6e1PJo2xrPA==
462
+
463
+ "@rollup/[email protected]":
464
+ version "4.31.0"
465
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.31.0.tgz#e455ca6e4ff35bd46d62201c153352e717000a7b"
466
+ integrity sha512-0O8ViX+QcBd3ZmGlcFTnYXZKGbFu09EhgD27tgTdGnkcYXLat4KIsBBQeKLR2xZDCXdIBAlWLkiXE1+rJpCxFw==
467
+
468
+ "@rollup/[email protected]":
469
+ version "4.31.0"
470
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.31.0.tgz#bc1a93d807d19e70b1e343a5bfea43723bcd6327"
471
+ integrity sha512-w5IzG0wTVv7B0/SwDnMYmbr2uERQp999q8FMkKG1I+j8hpPX2BYFjWe69xbhbP6J9h2gId/7ogesl9hwblFwwg==
472
+
473
+ "@rollup/[email protected]":
474
+ version "4.31.0"
475
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.31.0.tgz#f38bf843f1dc3d5de680caf31084008846e3efae"
476
+ integrity sha512-JyFFshbN5xwy6fulZ8B/8qOqENRmDdEkcIMF0Zz+RsfamEW+Zabl5jAb0IozP/8UKnJ7g2FtZZPEUIAlUSX8cA==
477
+
478
+ "@rollup/[email protected]":
479
+ version "4.31.0"
480
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.31.0.tgz#b3987a96c18b7287129cf735be2dbf83e94d9d05"
481
+ integrity sha512-kpQXQ0UPFeMPmPYksiBL9WS/BDiQEjRGMfklVIsA0Sng347H8W2iexch+IEwaR7OVSKtr2ZFxggt11zVIlZ25g==
482
+
483
+ "@rollup/[email protected]":
484
+ version "4.31.0"
485
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.31.0.tgz#0f0324044e71c4f02e9f49e7ec4e347b655b34ee"
486
+ integrity sha512-pMlxLjt60iQTzt9iBb3jZphFIl55a70wexvo8p+vVFK+7ifTRookdoXX3bOsRdmfD+OKnMozKO6XM4zR0sHRrQ==
487
+
488
+ "@rollup/[email protected]":
489
+ version "4.31.0"
490
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.31.0.tgz#809479f27f1fd5b4eecd2aa732132ad952d454ba"
491
+ integrity sha512-D7TXT7I/uKEuWiRkEFbed1UUYZwcJDU4vZQdPTcepK7ecPhzKOYk4Er2YR4uHKme4qDeIh6N3XrLfpuM7vzRWQ==
492
+
493
+ "@rollup/[email protected]":
494
+ version "4.31.0"
495
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.31.0.tgz#7bc75c4f22db04d3c972f83431739cfa41c6a36e"
496
+ integrity sha512-wal2Tc8O5lMBtoePLBYRKj2CImUCJ4UNGJlLwspx7QApYny7K1cUYlzQ/4IGQBLmm+y0RS7dwc3TDO/pmcneTw==
497
+
498
+ "@rollup/[email protected]":
499
+ version "4.31.0"
500
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.31.0.tgz#cfe8052345c55864d83ae343362cf1912480170e"
501
+ integrity sha512-O1o5EUI0+RRMkK9wiTVpk2tyzXdXefHtRTIjBbmFREmNMy7pFeYXCFGbhKFwISA3UOExlo5GGUuuj3oMKdK6JQ==
502
+
503
+ "@rollup/[email protected]":
504
+ version "4.31.0"
505
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.31.0.tgz#c6b048f1e25f3fea5b4bd246232f4d07a159c5a0"
506
+ integrity sha512-zSoHl356vKnNxwOWnLd60ixHNPRBglxpv2g7q0Cd3Pmr561gf0HiAcUBRL3S1vPqRC17Zo2CX/9cPkqTIiai1g==
507
+
508
+ "@rollup/[email protected]":
509
+ version "4.31.0"
510
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.31.0.tgz#615273ac52d1a201f4de191cbd3389016a9d7d80"
511
+ integrity sha512-ypB/HMtcSGhKUQNiFwqgdclWNRrAYDH8iMYH4etw/ZlGwiTVxBz2tDrGRrPlfZu6QjXwtd+C3Zib5pFqID97ZA==
512
+
513
+ "@rollup/[email protected]":
514
+ version "4.31.0"
515
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.31.0.tgz#32ed85810c1b831c648eca999d68f01255b30691"
516
+ integrity sha512-JuhN2xdI/m8Hr+aVO3vspO7OQfUFO6bKLIRTAy0U15vmWjnZDLrEgCZ2s6+scAYaQVpYSh9tZtRijApw9IXyMw==
517
+
518
+ "@rollup/[email protected]":
519
+ version "4.31.0"
520
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.31.0.tgz#d47effada68bcbfdccd30c4a788d42e4542ff4d3"
521
+ integrity sha512-U1xZZXYkvdf5MIWmftU8wrM5PPXzyaY1nGCI4KI4BFfoZxHamsIe+BtnPLIvvPykvQWlVbqUXdLa4aJUuilwLQ==
522
+
523
+ "@rollup/[email protected]":
524
+ version "4.31.0"
525
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.31.0.tgz#7a2d89a82cf0388d60304964217dd7beac6de645"
526
+ integrity sha512-ul8rnCsUumNln5YWwz0ted2ZHFhzhRRnkpBZ+YRuHoRAlUji9KChpOUOndY7uykrPEPXVbHLlsdo6v5yXo/TXw==
527
+
528
+ "@types/babel__core@^7.20.5":
529
+ version "7.20.5"
530
+ resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017"
531
+ integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==
532
+ dependencies:
533
+ "@babel/parser" "^7.20.7"
534
+ "@babel/types" "^7.20.7"
535
+ "@types/babel__generator" "*"
536
+ "@types/babel__template" "*"
537
+ "@types/babel__traverse" "*"
538
+
539
+ "@types/babel__generator@*":
540
+ version "7.6.8"
541
+ resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab"
542
+ integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==
543
+ dependencies:
544
+ "@babel/types" "^7.0.0"
545
+
546
+ "@types/babel__template@*":
547
+ version "7.4.4"
548
+ resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f"
549
+ integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==
550
+ dependencies:
551
+ "@babel/parser" "^7.1.0"
552
+ "@babel/types" "^7.0.0"
553
+
554
+ "@types/babel__traverse@*":
555
+ version "7.20.6"
556
+ resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.6.tgz#8dc9f0ae0f202c08d8d4dab648912c8d6038e3f7"
557
+ integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==
558
+ dependencies:
559
+ "@babel/types" "^7.20.7"
560
+
561
+ "@types/[email protected]", "@types/estree@^1.0.6":
562
+ version "1.0.6"
563
+ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50"
564
+ integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==
565
+
566
+ "@types/json-schema@^7.0.15":
567
+ version "7.0.15"
568
+ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841"
569
+ integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==
570
+
571
+ "@types/prop-types@*":
572
+ version "15.7.14"
573
+ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.14.tgz#1433419d73b2a7ebfc6918dcefd2ec0d5cd698f2"
574
+ integrity sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==
575
+
576
+ "@types/react-dom@^18.3.5":
577
+ version "18.3.5"
578
+ resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.3.5.tgz#45f9f87398c5dcea085b715c58ddcf1faf65f716"
579
+ integrity sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==
580
+
581
+ "@types/react@^18.3.18":
582
+ version "18.3.18"
583
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.18.tgz#9b382c4cd32e13e463f97df07c2ee3bbcd26904b"
584
+ integrity sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==
585
+ dependencies:
586
+ "@types/prop-types" "*"
587
+ csstype "^3.0.2"
588
+
589
+ "@typescript-eslint/[email protected]":
590
+ version "8.21.0"
591
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.21.0.tgz#395014a75112ecdb81142b866ab6bb62e3be0f2a"
592
+ integrity sha512-eTH+UOR4I7WbdQnG4Z48ebIA6Bgi7WO8HvFEneeYBxG8qCOYgTOFPSg6ek9ITIDvGjDQzWHcoWHCDO2biByNzA==
593
+ dependencies:
594
+ "@eslint-community/regexpp" "^4.10.0"
595
+ "@typescript-eslint/scope-manager" "8.21.0"
596
+ "@typescript-eslint/type-utils" "8.21.0"
597
+ "@typescript-eslint/utils" "8.21.0"
598
+ "@typescript-eslint/visitor-keys" "8.21.0"
599
+ graphemer "^1.4.0"
600
+ ignore "^5.3.1"
601
+ natural-compare "^1.4.0"
602
+ ts-api-utils "^2.0.0"
603
+
604
+ "@typescript-eslint/[email protected]":
605
+ version "8.21.0"
606
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.21.0.tgz#312c638aaba4f640d45bfde7c6795a9d75deb088"
607
+ integrity sha512-Wy+/sdEH9kI3w9civgACwabHbKl+qIOu0uFZ9IMKzX3Jpv9og0ZBJrZExGrPpFAY7rWsXuxs5e7CPPP17A4eYA==
608
+ dependencies:
609
+ "@typescript-eslint/scope-manager" "8.21.0"
610
+ "@typescript-eslint/types" "8.21.0"
611
+ "@typescript-eslint/typescript-estree" "8.21.0"
612
+ "@typescript-eslint/visitor-keys" "8.21.0"
613
+ debug "^4.3.4"
614
+
615
+ "@typescript-eslint/[email protected]":
616
+ version "8.21.0"
617
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.21.0.tgz#d08d94e2a34b4ccdcc975543c25bb62917437500"
618
+ integrity sha512-G3IBKz0/0IPfdeGRMbp+4rbjfSSdnGkXsM/pFZA8zM9t9klXDnB/YnKOBQ0GoPmoROa4bCq2NeHgJa5ydsQ4mA==
619
+ dependencies:
620
+ "@typescript-eslint/types" "8.21.0"
621
+ "@typescript-eslint/visitor-keys" "8.21.0"
622
+
623
+ "@typescript-eslint/[email protected]":
624
+ version "8.21.0"
625
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.21.0.tgz#2e69d1a93cdbedc73fe694cd6ae4dfedd00430a0"
626
+ integrity sha512-95OsL6J2BtzoBxHicoXHxgk3z+9P3BEcQTpBKriqiYzLKnM2DeSqs+sndMKdamU8FosiadQFT3D+BSL9EKnAJQ==
627
+ dependencies:
628
+ "@typescript-eslint/typescript-estree" "8.21.0"
629
+ "@typescript-eslint/utils" "8.21.0"
630
+ debug "^4.3.4"
631
+ ts-api-utils "^2.0.0"
632
+
633
+ "@typescript-eslint/[email protected]":
634
+ version "8.21.0"
635
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.21.0.tgz#58f30aec8db8212fd886835dc5969cdf47cb29f5"
636
+ integrity sha512-PAL6LUuQwotLW2a8VsySDBwYMm129vFm4tMVlylzdoTybTHaAi0oBp7Ac6LhSrHHOdLM3efH+nAR6hAWoMF89A==
637
+
638
+ "@typescript-eslint/[email protected]":
639
+ version "8.21.0"
640
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.21.0.tgz#5ce71acdbed3b97b959f6168afba5a03c88f69a9"
641
+ integrity sha512-x+aeKh/AjAArSauz0GiQZsjT8ciadNMHdkUSwBB9Z6PrKc/4knM4g3UfHml6oDJmKC88a6//cdxnO/+P2LkMcg==
642
+ dependencies:
643
+ "@typescript-eslint/types" "8.21.0"
644
+ "@typescript-eslint/visitor-keys" "8.21.0"
645
+ debug "^4.3.4"
646
+ fast-glob "^3.3.2"
647
+ is-glob "^4.0.3"
648
+ minimatch "^9.0.4"
649
+ semver "^7.6.0"
650
+ ts-api-utils "^2.0.0"
651
+
652
+ "@typescript-eslint/[email protected]":
653
+ version "8.21.0"
654
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.21.0.tgz#bc4874fbc30feb3298b926e3b03d94570b3999c5"
655
+ integrity sha512-xcXBfcq0Kaxgj7dwejMbFyq7IOHgpNMtVuDveK7w3ZGwG9owKzhALVwKpTF2yrZmEwl9SWdetf3fxNzJQaVuxw==
656
+ dependencies:
657
+ "@eslint-community/eslint-utils" "^4.4.0"
658
+ "@typescript-eslint/scope-manager" "8.21.0"
659
+ "@typescript-eslint/types" "8.21.0"
660
+ "@typescript-eslint/typescript-estree" "8.21.0"
661
+
662
+ "@typescript-eslint/[email protected]":
663
+ version "8.21.0"
664
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.21.0.tgz#a89744c4cdc83b5c761eb5878befe6c33d1481b2"
665
+ integrity sha512-BkLMNpdV6prozk8LlyK/SOoWLmUFi+ZD+pcqti9ILCbVvHGk1ui1g4jJOc2WDLaeExz2qWwojxlPce5PljcT3w==
666
+ dependencies:
667
+ "@typescript-eslint/types" "8.21.0"
668
+ eslint-visitor-keys "^4.2.0"
669
+
670
+ "@vitejs/plugin-react@^4.3.4":
671
+ version "4.3.4"
672
+ resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-4.3.4.tgz#c64be10b54c4640135a5b28a2432330e88ad7c20"
673
+ integrity sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==
674
+ dependencies:
675
+ "@babel/core" "^7.26.0"
676
+ "@babel/plugin-transform-react-jsx-self" "^7.25.9"
677
+ "@babel/plugin-transform-react-jsx-source" "^7.25.9"
678
+ "@types/babel__core" "^7.20.5"
679
+ react-refresh "^0.14.2"
680
+
681
+ acorn-jsx@^5.3.2:
682
+ version "5.3.2"
683
+ resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
684
+ integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
685
+
686
+ acorn@^8.14.0:
687
+ version "8.14.0"
688
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0"
689
+ integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==
690
+
691
+ ajv@^6.12.4:
692
+ version "6.12.6"
693
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
694
+ integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
695
+ dependencies:
696
+ fast-deep-equal "^3.1.1"
697
+ fast-json-stable-stringify "^2.0.0"
698
+ json-schema-traverse "^0.4.1"
699
+ uri-js "^4.2.2"
700
+
701
+ ansi-styles@^4.1.0:
702
+ version "4.3.0"
703
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
704
+ integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
705
+ dependencies:
706
+ color-convert "^2.0.1"
707
+
708
+ argparse@^2.0.1:
709
+ version "2.0.1"
710
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
711
+ integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
712
+
713
+ balanced-match@^1.0.0:
714
+ version "1.0.2"
715
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
716
+ integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
717
+
718
+ brace-expansion@^1.1.7:
719
+ version "1.1.11"
720
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
721
+ integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
722
+ dependencies:
723
+ balanced-match "^1.0.0"
724
+ concat-map "0.0.1"
725
+
726
+ brace-expansion@^2.0.1:
727
+ version "2.0.1"
728
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
729
+ integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
730
+ dependencies:
731
+ balanced-match "^1.0.0"
732
+
733
+ braces@^3.0.3:
734
+ version "3.0.3"
735
+ resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789"
736
+ integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==
737
+ dependencies:
738
+ fill-range "^7.1.1"
739
+
740
+ browserslist@^4.24.0:
741
+ version "4.24.4"
742
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.4.tgz#c6b2865a3f08bcb860a0e827389003b9fe686e4b"
743
+ integrity sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==
744
+ dependencies:
745
+ caniuse-lite "^1.0.30001688"
746
+ electron-to-chromium "^1.5.73"
747
+ node-releases "^2.0.19"
748
+ update-browserslist-db "^1.1.1"
749
+
750
+ callsites@^3.0.0:
751
+ version "3.1.0"
752
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
753
+ integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
754
+
755
+ caniuse-lite@^1.0.30001688:
756
+ version "1.0.30001695"
757
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001695.tgz#39dfedd8f94851132795fdf9b79d29659ad9c4d4"
758
+ integrity sha512-vHyLade6wTgI2u1ec3WQBxv+2BrTERV28UXQu9LO6lZ9pYeMk34vjXFLOxo1A4UBA8XTL4njRQZdno/yYaSmWw==
759
+
760
+ chalk@^4.0.0:
761
+ version "4.1.2"
762
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
763
+ integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
764
+ dependencies:
765
+ ansi-styles "^4.1.0"
766
+ supports-color "^7.1.0"
767
+
768
+ color-convert@^2.0.1:
769
+ version "2.0.1"
770
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
771
+ integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
772
+ dependencies:
773
+ color-name "~1.1.4"
774
+
775
+ color-name@~1.1.4:
776
+ version "1.1.4"
777
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
778
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
779
+
780
781
+ version "0.0.1"
782
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
783
+ integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
784
+
785
+ convert-source-map@^2.0.0:
786
+ version "2.0.0"
787
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a"
788
+ integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==
789
+
790
+ cross-spawn@^7.0.6:
791
+ version "7.0.6"
792
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f"
793
+ integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==
794
+ dependencies:
795
+ path-key "^3.1.0"
796
+ shebang-command "^2.0.0"
797
+ which "^2.0.1"
798
+
799
+ csstype@^3.0.2:
800
+ version "3.1.3"
801
+ resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81"
802
+ integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==
803
+
804
+ debug@^4.1.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4:
805
+ version "4.4.0"
806
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a"
807
+ integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==
808
+ dependencies:
809
+ ms "^2.1.3"
810
+
811
+ deep-is@^0.1.3:
812
+ version "0.1.4"
813
+ resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
814
+ integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
815
+
816
+ electron-to-chromium@^1.5.73:
817
+ version "1.5.85"
818
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.85.tgz#07e8d80f5a05268b891e5366bf4f3ba91dfd6d0c"
819
+ integrity sha512-UgTI7ZHxtSjOUwV0vZLpqT604U1Z8L3bq8mAtAKtuRPlMZ/6dLFMYgYnLdXSi/urbVTP2ykDb9EDDUrdIzw4Qg==
820
+
821
+ esbuild@^0.24.2:
822
+ version "0.24.2"
823
+ resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.24.2.tgz#b5b55bee7de017bff5fb8a4e3e44f2ebe2c3567d"
824
+ integrity sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==
825
+ optionalDependencies:
826
+ "@esbuild/aix-ppc64" "0.24.2"
827
+ "@esbuild/android-arm" "0.24.2"
828
+ "@esbuild/android-arm64" "0.24.2"
829
+ "@esbuild/android-x64" "0.24.2"
830
+ "@esbuild/darwin-arm64" "0.24.2"
831
+ "@esbuild/darwin-x64" "0.24.2"
832
+ "@esbuild/freebsd-arm64" "0.24.2"
833
+ "@esbuild/freebsd-x64" "0.24.2"
834
+ "@esbuild/linux-arm" "0.24.2"
835
+ "@esbuild/linux-arm64" "0.24.2"
836
+ "@esbuild/linux-ia32" "0.24.2"
837
+ "@esbuild/linux-loong64" "0.24.2"
838
+ "@esbuild/linux-mips64el" "0.24.2"
839
+ "@esbuild/linux-ppc64" "0.24.2"
840
+ "@esbuild/linux-riscv64" "0.24.2"
841
+ "@esbuild/linux-s390x" "0.24.2"
842
+ "@esbuild/linux-x64" "0.24.2"
843
+ "@esbuild/netbsd-arm64" "0.24.2"
844
+ "@esbuild/netbsd-x64" "0.24.2"
845
+ "@esbuild/openbsd-arm64" "0.24.2"
846
+ "@esbuild/openbsd-x64" "0.24.2"
847
+ "@esbuild/sunos-x64" "0.24.2"
848
+ "@esbuild/win32-arm64" "0.24.2"
849
+ "@esbuild/win32-ia32" "0.24.2"
850
+ "@esbuild/win32-x64" "0.24.2"
851
+
852
+ escalade@^3.2.0:
853
+ version "3.2.0"
854
+ resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5"
855
+ integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==
856
+
857
+ escape-string-regexp@^4.0.0:
858
+ version "4.0.0"
859
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
860
+ integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
861
+
862
+ eslint-plugin-react-hooks@^5.0.0:
863
+ version "5.1.0"
864
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.1.0.tgz#3d34e37d5770866c34b87d5b499f5f0b53bf0854"
865
+ integrity sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==
866
+
867
+ eslint-plugin-react-refresh@^0.4.16:
868
+ version "0.4.18"
869
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.18.tgz#d2ae6dc8d48c87f7722f5304385b0cd8b3a32a54"
870
+ integrity sha512-IRGEoFn3OKalm3hjfolEWGqoF/jPqeEYFp+C8B0WMzwGwBMvlRDQd06kghDhF0C61uJ6WfSDhEZE/sAQjduKgw==
871
+
872
+ eslint-scope@^8.2.0:
873
+ version "8.2.0"
874
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.2.0.tgz#377aa6f1cb5dc7592cfd0b7f892fd0cf352ce442"
875
+ integrity sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==
876
+ dependencies:
877
+ esrecurse "^4.3.0"
878
+ estraverse "^5.2.0"
879
+
880
+ eslint-visitor-keys@^3.4.3:
881
+ version "3.4.3"
882
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
883
+ integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
884
+
885
+ eslint-visitor-keys@^4.2.0:
886
+ version "4.2.0"
887
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz#687bacb2af884fcdda8a6e7d65c606f46a14cd45"
888
+ integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==
889
+
890
+ eslint@^9.17.0:
891
+ version "9.18.0"
892
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.18.0.tgz#c95b24de1183e865de19f607fda6518b54827850"
893
+ integrity sha512-+waTfRWQlSbpt3KWE+CjrPPYnbq9kfZIYUqapc0uBXyjTp8aYXZDsUH16m39Ryq3NjAVP4tjuF7KaukeqoCoaA==
894
+ dependencies:
895
+ "@eslint-community/eslint-utils" "^4.2.0"
896
+ "@eslint-community/regexpp" "^4.12.1"
897
+ "@eslint/config-array" "^0.19.0"
898
+ "@eslint/core" "^0.10.0"
899
+ "@eslint/eslintrc" "^3.2.0"
900
+ "@eslint/js" "9.18.0"
901
+ "@eslint/plugin-kit" "^0.2.5"
902
+ "@humanfs/node" "^0.16.6"
903
+ "@humanwhocodes/module-importer" "^1.0.1"
904
+ "@humanwhocodes/retry" "^0.4.1"
905
+ "@types/estree" "^1.0.6"
906
+ "@types/json-schema" "^7.0.15"
907
+ ajv "^6.12.4"
908
+ chalk "^4.0.0"
909
+ cross-spawn "^7.0.6"
910
+ debug "^4.3.2"
911
+ escape-string-regexp "^4.0.0"
912
+ eslint-scope "^8.2.0"
913
+ eslint-visitor-keys "^4.2.0"
914
+ espree "^10.3.0"
915
+ esquery "^1.5.0"
916
+ esutils "^2.0.2"
917
+ fast-deep-equal "^3.1.3"
918
+ file-entry-cache "^8.0.0"
919
+ find-up "^5.0.0"
920
+ glob-parent "^6.0.2"
921
+ ignore "^5.2.0"
922
+ imurmurhash "^0.1.4"
923
+ is-glob "^4.0.0"
924
+ json-stable-stringify-without-jsonify "^1.0.1"
925
+ lodash.merge "^4.6.2"
926
+ minimatch "^3.1.2"
927
+ natural-compare "^1.4.0"
928
+ optionator "^0.9.3"
929
+
930
+ espree@^10.0.1, espree@^10.3.0:
931
+ version "10.3.0"
932
+ resolved "https://registry.yarnpkg.com/espree/-/espree-10.3.0.tgz#29267cf5b0cb98735b65e64ba07e0ed49d1eed8a"
933
+ integrity sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==
934
+ dependencies:
935
+ acorn "^8.14.0"
936
+ acorn-jsx "^5.3.2"
937
+ eslint-visitor-keys "^4.2.0"
938
+
939
+ esquery@^1.5.0:
940
+ version "1.6.0"
941
+ resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7"
942
+ integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==
943
+ dependencies:
944
+ estraverse "^5.1.0"
945
+
946
+ esrecurse@^4.3.0:
947
+ version "4.3.0"
948
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
949
+ integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
950
+ dependencies:
951
+ estraverse "^5.2.0"
952
+
953
+ estraverse@^5.1.0, estraverse@^5.2.0:
954
+ version "5.3.0"
955
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
956
+ integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
957
+
958
+ esutils@^2.0.2:
959
+ version "2.0.3"
960
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
961
+ integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
962
+
963
+ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
964
+ version "3.1.3"
965
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
966
+ integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
967
+
968
+ fast-glob@^3.3.2:
969
+ version "3.3.3"
970
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818"
971
+ integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==
972
+ dependencies:
973
+ "@nodelib/fs.stat" "^2.0.2"
974
+ "@nodelib/fs.walk" "^1.2.3"
975
+ glob-parent "^5.1.2"
976
+ merge2 "^1.3.0"
977
+ micromatch "^4.0.8"
978
+
979
+ fast-json-stable-stringify@^2.0.0:
980
+ version "2.1.0"
981
+ resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
982
+ integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
983
+
984
+ fast-levenshtein@^2.0.6:
985
+ version "2.0.6"
986
+ resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
987
+ integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
988
+
989
+ fastq@^1.6.0:
990
+ version "1.18.0"
991
+ resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.18.0.tgz#d631d7e25faffea81887fe5ea8c9010e1b36fee0"
992
+ integrity sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==
993
+ dependencies:
994
+ reusify "^1.0.4"
995
+
996
+ file-entry-cache@^8.0.0:
997
+ version "8.0.0"
998
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f"
999
+ integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==
1000
+ dependencies:
1001
+ flat-cache "^4.0.0"
1002
+
1003
+ fill-range@^7.1.1:
1004
+ version "7.1.1"
1005
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292"
1006
+ integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==
1007
+ dependencies:
1008
+ to-regex-range "^5.0.1"
1009
+
1010
+ find-up@^5.0.0:
1011
+ version "5.0.0"
1012
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
1013
+ integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
1014
+ dependencies:
1015
+ locate-path "^6.0.0"
1016
+ path-exists "^4.0.0"
1017
+
1018
+ flat-cache@^4.0.0:
1019
+ version "4.0.1"
1020
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c"
1021
+ integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==
1022
+ dependencies:
1023
+ flatted "^3.2.9"
1024
+ keyv "^4.5.4"
1025
+
1026
+ flatted@^3.2.9:
1027
+ version "3.3.2"
1028
+ resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.2.tgz#adba1448a9841bec72b42c532ea23dbbedef1a27"
1029
+ integrity sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==
1030
+
1031
+ fsevents@~2.3.2, fsevents@~2.3.3:
1032
+ version "2.3.3"
1033
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
1034
+ integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
1035
+
1036
+ gensync@^1.0.0-beta.2:
1037
+ version "1.0.0-beta.2"
1038
+ resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
1039
+ integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
1040
+
1041
+ glob-parent@^5.1.2:
1042
+ version "5.1.2"
1043
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
1044
+ integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
1045
+ dependencies:
1046
+ is-glob "^4.0.1"
1047
+
1048
+ glob-parent@^6.0.2:
1049
+ version "6.0.2"
1050
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"
1051
+ integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
1052
+ dependencies:
1053
+ is-glob "^4.0.3"
1054
+
1055
+ globals@^11.1.0:
1056
+ version "11.12.0"
1057
+ resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
1058
+ integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
1059
+
1060
+ globals@^14.0.0:
1061
+ version "14.0.0"
1062
+ resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e"
1063
+ integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==
1064
+
1065
+ globals@^15.14.0:
1066
+ version "15.14.0"
1067
+ resolved "https://registry.yarnpkg.com/globals/-/globals-15.14.0.tgz#b8fd3a8941ff3b4d38f3319d433b61bbb482e73f"
1068
+ integrity sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==
1069
+
1070
+ graphemer@^1.4.0:
1071
+ version "1.4.0"
1072
+ resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6"
1073
+ integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==
1074
+
1075
+ has-flag@^4.0.0:
1076
+ version "4.0.0"
1077
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
1078
+ integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
1079
+
1080
+ ignore@^5.2.0, ignore@^5.3.1:
1081
+ version "5.3.2"
1082
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5"
1083
+ integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==
1084
+
1085
+ import-fresh@^3.2.1:
1086
+ version "3.3.0"
1087
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
1088
+ integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
1089
+ dependencies:
1090
+ parent-module "^1.0.0"
1091
+ resolve-from "^4.0.0"
1092
+
1093
+ imurmurhash@^0.1.4:
1094
+ version "0.1.4"
1095
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
1096
+ integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
1097
+
1098
+ is-extglob@^2.1.1:
1099
+ version "2.1.1"
1100
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
1101
+ integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
1102
+
1103
+ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3:
1104
+ version "4.0.3"
1105
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
1106
+ integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
1107
+ dependencies:
1108
+ is-extglob "^2.1.1"
1109
+
1110
+ is-number@^7.0.0:
1111
+ version "7.0.0"
1112
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
1113
+ integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
1114
+
1115
+ isexe@^2.0.0:
1116
+ version "2.0.0"
1117
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
1118
+ integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
1119
+
1120
+ "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
1121
+ version "4.0.0"
1122
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
1123
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
1124
+
1125
+ js-yaml@^4.1.0:
1126
+ version "4.1.0"
1127
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
1128
+ integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
1129
+ dependencies:
1130
+ argparse "^2.0.1"
1131
+
1132
+ jsesc@^3.0.2:
1133
+ version "3.1.0"
1134
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d"
1135
+ integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==
1136
+
1137
1138
+ version "3.0.1"
1139
+ resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
1140
+ integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
1141
+
1142
+ json-schema-traverse@^0.4.1:
1143
+ version "0.4.1"
1144
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
1145
+ integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
1146
+
1147
+ json-stable-stringify-without-jsonify@^1.0.1:
1148
+ version "1.0.1"
1149
+ resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
1150
+ integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
1151
+
1152
+ json5@^2.2.3:
1153
+ version "2.2.3"
1154
+ resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
1155
+ integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
1156
+
1157
+ keyv@^4.5.4:
1158
+ version "4.5.4"
1159
+ resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"
1160
+ integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==
1161
+ dependencies:
1162
+ json-buffer "3.0.1"
1163
+
1164
+ levn@^0.4.1:
1165
+ version "0.4.1"
1166
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
1167
+ integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
1168
+ dependencies:
1169
+ prelude-ls "^1.2.1"
1170
+ type-check "~0.4.0"
1171
+
1172
+ locate-path@^6.0.0:
1173
+ version "6.0.0"
1174
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
1175
+ integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
1176
+ dependencies:
1177
+ p-locate "^5.0.0"
1178
+
1179
+ lodash.merge@^4.6.2:
1180
+ version "4.6.2"
1181
+ resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
1182
+ integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
1183
+
1184
+ loose-envify@^1.1.0:
1185
+ version "1.4.0"
1186
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
1187
+ integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
1188
+ dependencies:
1189
+ js-tokens "^3.0.0 || ^4.0.0"
1190
+
1191
+ lru-cache@^5.1.1:
1192
+ version "5.1.1"
1193
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
1194
+ integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
1195
+ dependencies:
1196
+ yallist "^3.0.2"
1197
+
1198
+ merge2@^1.3.0:
1199
+ version "1.4.1"
1200
+ resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
1201
+ integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
1202
+
1203
+ micromatch@^4.0.8:
1204
+ version "4.0.8"
1205
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202"
1206
+ integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==
1207
+ dependencies:
1208
+ braces "^3.0.3"
1209
+ picomatch "^2.3.1"
1210
+
1211
+ minimatch@^3.1.2:
1212
+ version "3.1.2"
1213
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
1214
+ integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
1215
+ dependencies:
1216
+ brace-expansion "^1.1.7"
1217
+
1218
+ minimatch@^9.0.4:
1219
+ version "9.0.5"
1220
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5"
1221
+ integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==
1222
+ dependencies:
1223
+ brace-expansion "^2.0.1"
1224
+
1225
+ ms@^2.1.3:
1226
+ version "2.1.3"
1227
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
1228
+ integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
1229
+
1230
+ nanoid@^3.3.8:
1231
+ version "3.3.8"
1232
+ resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf"
1233
+ integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==
1234
+
1235
+ natural-compare@^1.4.0:
1236
+ version "1.4.0"
1237
+ resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
1238
+ integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
1239
+
1240
+ node-releases@^2.0.19:
1241
+ version "2.0.19"
1242
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314"
1243
+ integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==
1244
+
1245
+ optionator@^0.9.3:
1246
+ version "0.9.4"
1247
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734"
1248
+ integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==
1249
+ dependencies:
1250
+ deep-is "^0.1.3"
1251
+ fast-levenshtein "^2.0.6"
1252
+ levn "^0.4.1"
1253
+ prelude-ls "^1.2.1"
1254
+ type-check "^0.4.0"
1255
+ word-wrap "^1.2.5"
1256
+
1257
+ p-limit@^3.0.2:
1258
+ version "3.1.0"
1259
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
1260
+ integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
1261
+ dependencies:
1262
+ yocto-queue "^0.1.0"
1263
+
1264
+ p-locate@^5.0.0:
1265
+ version "5.0.0"
1266
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
1267
+ integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
1268
+ dependencies:
1269
+ p-limit "^3.0.2"
1270
+
1271
+ parent-module@^1.0.0:
1272
+ version "1.0.1"
1273
+ resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
1274
+ integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
1275
+ dependencies:
1276
+ callsites "^3.0.0"
1277
+
1278
+ path-exists@^4.0.0:
1279
+ version "4.0.0"
1280
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
1281
+ integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
1282
+
1283
+ path-key@^3.1.0:
1284
+ version "3.1.1"
1285
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
1286
+ integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
1287
+
1288
+ picocolors@^1.0.0, picocolors@^1.1.1:
1289
+ version "1.1.1"
1290
+ resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
1291
+ integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
1292
+
1293
+ picomatch@^2.3.1:
1294
+ version "2.3.1"
1295
+ resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
1296
+ integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
1297
+
1298
+ postcss@^8.4.49:
1299
+ version "8.5.1"
1300
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.1.tgz#e2272a1f8a807fafa413218245630b5db10a3214"
1301
+ integrity sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==
1302
+ dependencies:
1303
+ nanoid "^3.3.8"
1304
+ picocolors "^1.1.1"
1305
+ source-map-js "^1.2.1"
1306
+
1307
+ prelude-ls@^1.2.1:
1308
+ version "1.2.1"
1309
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
1310
+ integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
1311
+
1312
+ punycode@^2.1.0:
1313
+ version "2.3.1"
1314
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
1315
+ integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
1316
+
1317
+ queue-microtask@^1.2.2:
1318
+ version "1.2.3"
1319
+ resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
1320
+ integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
1321
+
1322
+ react-dom@^18.3.1:
1323
+ version "18.3.1"
1324
+ resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4"
1325
+ integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==
1326
+ dependencies:
1327
+ loose-envify "^1.1.0"
1328
+ scheduler "^0.23.2"
1329
+
1330
+ react-refresh@^0.14.2:
1331
+ version "0.14.2"
1332
+ resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.2.tgz#3833da01ce32da470f1f936b9d477da5c7028bf9"
1333
+ integrity sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==
1334
+
1335
+ react@^18.3.1:
1336
+ version "18.3.1"
1337
+ resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891"
1338
+ integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==
1339
+ dependencies:
1340
+ loose-envify "^1.1.0"
1341
+
1342
+ resolve-from@^4.0.0:
1343
+ version "4.0.0"
1344
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
1345
+ integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
1346
+
1347
+ reusify@^1.0.4:
1348
+ version "1.0.4"
1349
+ resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
1350
+ integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
1351
+
1352
+ rollup@^4.23.0:
1353
+ version "4.31.0"
1354
+ resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.31.0.tgz#b84af969a0292cb047dce2c0ec5413a9457597a4"
1355
+ integrity sha512-9cCE8P4rZLx9+PjoyqHLs31V9a9Vpvfo4qNcs6JCiGWYhw2gijSetFbH6SSy1whnkgcefnUwr8sad7tgqsGvnw==
1356
+ dependencies:
1357
+ "@types/estree" "1.0.6"
1358
+ optionalDependencies:
1359
+ "@rollup/rollup-android-arm-eabi" "4.31.0"
1360
+ "@rollup/rollup-android-arm64" "4.31.0"
1361
+ "@rollup/rollup-darwin-arm64" "4.31.0"
1362
+ "@rollup/rollup-darwin-x64" "4.31.0"
1363
+ "@rollup/rollup-freebsd-arm64" "4.31.0"
1364
+ "@rollup/rollup-freebsd-x64" "4.31.0"
1365
+ "@rollup/rollup-linux-arm-gnueabihf" "4.31.0"
1366
+ "@rollup/rollup-linux-arm-musleabihf" "4.31.0"
1367
+ "@rollup/rollup-linux-arm64-gnu" "4.31.0"
1368
+ "@rollup/rollup-linux-arm64-musl" "4.31.0"
1369
+ "@rollup/rollup-linux-loongarch64-gnu" "4.31.0"
1370
+ "@rollup/rollup-linux-powerpc64le-gnu" "4.31.0"
1371
+ "@rollup/rollup-linux-riscv64-gnu" "4.31.0"
1372
+ "@rollup/rollup-linux-s390x-gnu" "4.31.0"
1373
+ "@rollup/rollup-linux-x64-gnu" "4.31.0"
1374
+ "@rollup/rollup-linux-x64-musl" "4.31.0"
1375
+ "@rollup/rollup-win32-arm64-msvc" "4.31.0"
1376
+ "@rollup/rollup-win32-ia32-msvc" "4.31.0"
1377
+ "@rollup/rollup-win32-x64-msvc" "4.31.0"
1378
+ fsevents "~2.3.2"
1379
+
1380
+ run-parallel@^1.1.9:
1381
+ version "1.2.0"
1382
+ resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
1383
+ integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
1384
+ dependencies:
1385
+ queue-microtask "^1.2.2"
1386
+
1387
+ scheduler@^0.23.2:
1388
+ version "0.23.2"
1389
+ resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3"
1390
+ integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==
1391
+ dependencies:
1392
+ loose-envify "^1.1.0"
1393
+
1394
+ semver@^6.3.1:
1395
+ version "6.3.1"
1396
+ resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
1397
+ integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
1398
+
1399
+ semver@^7.6.0:
1400
+ version "7.6.3"
1401
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143"
1402
+ integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==
1403
+
1404
+ shebang-command@^2.0.0:
1405
+ version "2.0.0"
1406
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
1407
+ integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
1408
+ dependencies:
1409
+ shebang-regex "^3.0.0"
1410
+
1411
+ shebang-regex@^3.0.0:
1412
+ version "3.0.0"
1413
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
1414
+ integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
1415
+
1416
+ source-map-js@^1.2.1:
1417
+ version "1.2.1"
1418
+ resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46"
1419
+ integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
1420
+
1421
+ strip-json-comments@^3.1.1:
1422
+ version "3.1.1"
1423
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
1424
+ integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
1425
+
1426
+ supports-color@^7.1.0:
1427
+ version "7.2.0"
1428
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
1429
+ integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
1430
+ dependencies:
1431
+ has-flag "^4.0.0"
1432
+
1433
+ to-regex-range@^5.0.1:
1434
+ version "5.0.1"
1435
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
1436
+ integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
1437
+ dependencies:
1438
+ is-number "^7.0.0"
1439
+
1440
+ ts-api-utils@^2.0.0:
1441
+ version "2.0.0"
1442
+ resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.0.0.tgz#b9d7d5f7ec9f736f4d0f09758b8607979044a900"
1443
+ integrity sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==
1444
+
1445
+ tsc@^2.0.4:
1446
+ version "2.0.4"
1447
+ resolved "https://registry.yarnpkg.com/tsc/-/tsc-2.0.4.tgz#5f6499146abea5dca4420b451fa4f2f9345238f5"
1448
+ integrity sha512-fzoSieZI5KKJVBYGvwbVZs/J5za84f2lSTLPYf6AGiIf43tZ3GNrI1QzTLcjtyDDP4aLxd46RTZq1nQxe7+k5Q==
1449
+
1450
+ type-check@^0.4.0, type-check@~0.4.0:
1451
+ version "0.4.0"
1452
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
1453
+ integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
1454
+ dependencies:
1455
+ prelude-ls "^1.2.1"
1456
+
1457
+ typescript-eslint@^8.18.2:
1458
+ version "8.21.0"
1459
+ resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.21.0.tgz#78bdb83a6d771f0312b128297d84a3111885fd08"
1460
+ integrity sha512-txEKYY4XMKwPXxNkN8+AxAdX6iIJAPiJbHE/FpQccs/sxw8Lf26kqwC3cn0xkHlW8kEbLhkhCsjWuMveaY9Rxw==
1461
+ dependencies:
1462
+ "@typescript-eslint/eslint-plugin" "8.21.0"
1463
+ "@typescript-eslint/parser" "8.21.0"
1464
+ "@typescript-eslint/utils" "8.21.0"
1465
+
1466
+ typescript@~5.6.2:
1467
+ version "5.6.3"
1468
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.3.tgz#5f3449e31c9d94febb17de03cc081dd56d81db5b"
1469
+ integrity sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==
1470
+
1471
+ update-browserslist-db@^1.1.1:
1472
+ version "1.1.2"
1473
+ resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz#97e9c96ab0ae7bcac08e9ae5151d26e6bc6b5580"
1474
+ integrity sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==
1475
+ dependencies:
1476
+ escalade "^3.2.0"
1477
+ picocolors "^1.1.1"
1478
+
1479
+ uri-js@^4.2.2:
1480
+ version "4.4.1"
1481
+ resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
1482
+ integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
1483
+ dependencies:
1484
+ punycode "^2.1.0"
1485
+
1486
+ vite@^6.0.5:
1487
+ version "6.0.11"
1488
+ resolved "https://registry.yarnpkg.com/vite/-/vite-6.0.11.tgz#224497e93e940b34c3357c9ebf2ec20803091ed8"
1489
+ integrity sha512-4VL9mQPKoHy4+FE0NnRE/kbY51TOfaknxAjt3fJbGJxhIpBZiqVzlZDEesWWsuREXHwNdAoOFZ9MkPEVXczHwg==
1490
+ dependencies:
1491
+ esbuild "^0.24.2"
1492
+ postcss "^8.4.49"
1493
+ rollup "^4.23.0"
1494
+ optionalDependencies:
1495
+ fsevents "~2.3.3"
1496
+
1497
+ which@^2.0.1:
1498
+ version "2.0.2"
1499
+ resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
1500
+ integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
1501
+ dependencies:
1502
+ isexe "^2.0.0"
1503
+
1504
+ word-wrap@^1.2.5:
1505
+ version "1.2.5"
1506
+ resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34"
1507
+ integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==
1508
+
1509
+ yallist@^3.0.2:
1510
+ version "3.1.1"
1511
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
1512
+ integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
1513
+
1514
+ yocto-queue@^0.1.0:
1515
+ version "0.1.0"
1516
+ resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
1517
+ integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==