Rishabh2095 commited on
Commit
8349858
·
1 Parent(s): 916328a

"Modified Dockerfile for HF Deployement, Made changes to main graph and intermediate graph states"

Browse files
.gitignore CHANGED
@@ -35,7 +35,14 @@ __pycache__/
35
  *.py[cod]
36
  *.pyc
37
 
38
- # Git backup
39
- src/.git_backup
40
  src/job_writing_agent.egg-info/*
41
-
 
 
 
 
 
 
 
 
35
  *.py[cod]
36
  *.pyc
37
 
38
+ .vscode/*
39
+ .cursor/*
40
  src/job_writing_agent.egg-info/*
41
+ pyrightconfig.json
42
+ app_env/*
43
+ requirements.txt
44
+ .langgraph_api/*
45
+ .src/job_writing_agent/logs/*
46
+ docker-compose.override.example.yml
47
+ DOCKERFILE_EXPLANATION.md
48
+ DEPLOYMENT_GUIDE.md
Dockerfile CHANGED
@@ -1,41 +1,32 @@
 
1
  FROM langchain/langgraph-api:3.12
2
 
 
 
 
3
 
 
4
 
 
 
5
 
 
 
 
 
 
 
6
 
 
 
 
 
7
 
 
 
 
8
 
9
- # -- Adding local package . --
10
- ADD . /deps/job_writer
11
- # -- End of local package . --
12
 
13
-
14
-
15
- # -- Installing all local dependencies --
16
-
17
- RUN for dep in /deps/*; do echo "Installing $dep"; if [ -d "$dep" ]; then echo "Installing $dep"; (cd "$dep" && PYTHONDONTWRITEBYTECODE=1 uv pip install --system --no-cache-dir -c /api/constraints.txt -e .); fi; done
18
-
19
- # -- End of local dependencies install --
20
-
21
- ENV LANGSERVE_GRAPHS='{"job_app_graph": "/deps/job_writer/src/job_writing_agent/workflow.py:job_app_graph", "research_workflow": "/deps/job_writer/src/job_writing_agent/nodes/research_workflow.py:research_workflow", "data_loading_workflow": "/deps/job_writer/src/job_writing_agent/nodes/initializing.py:data_loading_workflow"}'
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
- # -- Ensure user deps didn't inadvertently overwrite langgraph-api
30
- RUN mkdir -p /api/langgraph_api /api/langgraph_runtime /api/langgraph_license && touch /api/langgraph_api/__init__.py /api/langgraph_runtime/__init__.py /api/langgraph_license/__init__.py
31
- RUN PYTHONDONTWRITEBYTECODE=1 uv pip install --system --no-cache-dir --no-deps -e /api
32
- # -- End of ensuring user deps didn't inadvertently overwrite langgraph-api --
33
- # -- Removing build deps from the final image ~<:===~~~ --
34
- RUN pip uninstall -y pip setuptools wheel
35
- RUN rm -rf /usr/local/lib/python*/site-packages/pip* /usr/local/lib/python*/site-packages/setuptools* /usr/local/lib/python*/site-packages/wheel* && find /usr/local/bin -name "pip*" -delete || true
36
- RUN rm -rf /usr/lib/python*/site-packages/pip* /usr/lib/python*/site-packages/setuptools* /usr/lib/python*/site-packages/wheel* && find /usr/bin -name "pip*" -delete || true
37
- RUN uv pip uninstall --system pip setuptools wheel && rm /usr/bin/uv /usr/bin/uvx
38
-
39
-
40
-
41
- WORKDIR /deps/job_writer
 
1
+ # syntax=docker/dockerfile:1.4
2
  FROM langchain/langgraph-api:3.12
3
 
4
+ # HuggingFace Spaces requires port 7860
5
+ ENV PORT=7860
6
+ ENV LANGGRAPH_PORT=7860
7
 
8
+ ENV LANGSERVE_GRAPHS='{"job_app_graph": "/deps/job_writer/src/job_writing_agent/workflow.py:job_app_graph", "research_workflow": "/deps/job_writer/src/job_writing_agent/nodes/research_workflow.py:research_workflow", "data_loading_workflow": "/deps/job_writer/src/job_writing_agent/nodes/data_loading_workflow.py:data_loading_workflow"}'
9
 
10
+ COPY pyproject.toml langgraph.json /deps/job_writer/
11
+ COPY src/ /deps/job_writer/src/
12
 
13
+ RUN for dep in /deps/*; do \
14
+ if [ -d "$dep" ]; then \
15
+ echo "Installing $dep"; \
16
+ (cd "$dep" && PYTHONDONTWRITEBYTECODE=1 uv pip install --system --no-cache-dir -c /api/constraints.txt -e .); \
17
+ fi; \
18
+ done
19
 
20
+ # Use cache mount for Playwright - browsers persist between builds!
21
+ RUN --mount=type=cache,target=/root/.cache/ms-playwright \
22
+ playwright install chromium && \
23
+ playwright install-deps
24
 
25
+ RUN mkdir -p /api/langgraph_api /api/langgraph_runtime /api/langgraph_license && \
26
+ touch /api/langgraph_api/__init__.py /api/langgraph_runtime/__init__.py /api/langgraph_license/__init__.py && \
27
+ PYTHONDONTWRITEBYTECODE=1 uv pip install --system --no-cache-dir --no-deps -e /api
28
 
29
+ WORKDIR /deps/job_writer
 
 
30
 
31
+ # Expose port for HuggingFace Spaces
32
+ EXPOSE 7860
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
README.md CHANGED
@@ -1,3 +1,13 @@
 
 
 
 
 
 
 
 
 
 
1
  # Job Writer Module
2
 
3
  A modular, well-structured package for creating tailored job applications using LangChain and LangGraph with LangSmith observability.
 
1
+ ---
2
+ title: Job Application Writer
3
+ emoji: 📝
4
+ colorFrom: blue
5
+ colorTo: purple
6
+ sdk: docker
7
+ app_port: 7860
8
+ pinned: false
9
+ ---
10
+
11
  # Job Writer Module
12
 
13
  A modular, well-structured package for creating tailored job applications using LangChain and LangGraph with LangSmith observability.
docker-compose.yml CHANGED
@@ -39,10 +39,14 @@ services:
39
  image: job-app-workflow:latest
40
  container_name: job-app-agent
41
  ports:
42
- - "8000:8000"
43
  environment:
44
- - REDIS_URL=redis://redis:6379
45
- - POSTGRES_URL=postgresql://postgres:postgres@postgres:5432/postgres
 
 
 
 
46
  depends_on:
47
  redis:
48
  condition: service_healthy
 
39
  image: job-app-workflow:latest
40
  container_name: job-app-agent
41
  ports:
42
+ - "7860:7860"
43
  environment:
44
+ - PORT=7860
45
+ - LANGGRAPH_PORT=7860
46
+ - REDIS_URI=redis://redis:6379
47
+ - DATABASE_URI=postgresql://postgres:postgres@postgres:5432/postgres
48
+ env_file:
49
+ - .docker_env
50
  depends_on:
51
  redis:
52
  condition: service_healthy
langgraph.json CHANGED
@@ -1,11 +1,9 @@
1
  {
2
- "dependencies": [
3
- "."
4
- ],
5
  "graphs": {
6
- "job_app_graph": "./src/job_writing_agent/workflow.py:job_app_graph",
7
- "research_workflow": "./src/job_writing_agent/nodes/research_workflow.py:research_workflow",
8
- "data_loading_workflow": "./src/job_writing_agent/nodes/data_loading_workflow.py:data_loading_workflow"
9
  },
10
  "env": "./app_env",
11
  "python_version": "3.12"
 
1
  {
2
+ "dependencies": ["."],
 
 
3
  "graphs": {
4
+ "job_app_graph": "src/job_writing_agent/workflow.py:job_app_graph",
5
+ "research_workflow": "src/job_writing_agent/nodes/research_workflow.py:research_workflow",
6
+ "data_loading_workflow": "src/job_writing_agent/nodes/data_loading_workflow.py:data_loading_workflow"
7
  },
8
  "env": "./app_env",
9
  "python_version": "3.12"
src/job_writing_agent/__init__.py CHANGED
@@ -8,7 +8,7 @@ using LangChain and LangGraph with LangSmith observability.
8
  __version__ = "0.1.0"
9
 
10
  import os
11
- from getpass import getpass
12
  import logging
13
  from pathlib import Path
14
  from dotenv import load_dotenv
@@ -28,148 +28,20 @@ logger.info(
28
  env_path = Path(__file__).parent / ".env"
29
 
30
 
31
- def _set_env(var: str):
32
- if not os.environ.get(var):
33
- os.environ[var] = getpass(f"{var}: ")
34
- logger.info(f"{var} set to {os.environ[var]}")
35
-
36
-
37
- if env_path.exists():
38
- logger.info("Loading environment variables from %s", env_path)
39
- load_dotenv(dotenv_path=env_path, override=True)
40
- else:
41
- logger.warning(
42
- ".env file not found at %s. Using system environment variables.", env_path
43
- )
44
-
45
- # Check for critical environment variables
46
- if not os.getenv("TAVILY_API_KEY"):
47
- logger.warning(
48
- "TAVILY_API_KEY environment variable is not set."
49
- " Failed to get TAVILY_API_KEY at Path %s",
50
- env_path,
51
- )
52
- _set_env("TAVILY_API_KEY")
53
-
54
-
55
- if not os.getenv("GEMINI_API_KEY"):
56
- logger.warning(
57
- "GEMINI_API_KEY environment variable is not set. "
58
- "Failed to get GEMINI_API_KEY at Path %s",
59
- env_path,
60
- )
61
- _set_env("GEMINI_API_KEY")
62
-
63
-
64
- if not os.getenv("PINECONE_API_KEY"):
65
- logger.warning(
66
- "PINECONE_API_KEY environment variable is not set."
67
- " Failed to get PINECONE_API_KEY at Path %s",
68
- env_path,
69
- )
70
- _set_env("PINECONE_API_KEY")
71
-
72
- if not os.getenv("LANGFUSE_PUBLIC_KEY"):
73
- logger.warning(
74
- "LANGFUSE_PUBLIC_KEY environment variable is not set."
75
- " Failed to get LANGFUSE_PUBLIC_KEY at Path %s",
76
- env_path,
77
- )
78
- _set_env("LANGFUSE_PUBLIC_KEY")
79
-
80
- if not os.getenv("LANGFUSE_SECRET_KEY"):
81
- logger.warning(
82
- "LANGFUSE_SECRET_KEY environment variable is not set."
83
- " Failed to get LANGFUSE_SECRET_KEY at Path %s",
84
- env_path,
85
- )
86
- _set_env("LANGFUSE_SECRET_KEY")
87
-
88
- if not os.getenv("LANGSMITH_API_KEY"):
89
- logger.warning(
90
- "LANGSMITH_API_KEY environment variable is not set."
91
- " Failed to get LANGSMITH_API_KEY at Path %s",
92
- env_path,
93
- )
94
- _set_env("LANGSMITH_API_KEY")
95
-
96
- if not os.getenv("OPENROUTER_API_KEY"):
97
- logger.warning(
98
- "OPENROUTER_API_KEY environment variable is not set."
99
- " Failed to get OPENROUTER_API_KEY at Path %s",
100
- env_path,
101
- )
102
- _set_env("OPENROUTER_API_KEY")
103
-
104
- if not os.getenv("LANGSMITH_PROJECT"):
105
- logger.warning(
106
- "LANGSMITH_PROJECT environment variable is not set."
107
- " Failed to get LANGSMITH_PROJECT at Path %s",
108
- env_path,
109
- )
110
- _set_env("LANGSMITH_PROJECT")
111
-
112
- if not os.getenv("LANGSMITH_ENDPOINT"):
113
- logger.warning(
114
- "LANGSMITH_ENDPOINT environment variable is not set."
115
- " Failed to get LANGSMITH_ENDPOINT at Path %s",
116
- env_path,
117
- )
118
- _set_env("LANGSMITH_ENDPOINT")
119
-
120
- if not os.getenv("CEREBRAS_API_KEY"):
121
- logger.warning(
122
- "CEREBRAS_API_KEY environment variable is not set."
123
- " Failed to get CEREBRAS_API_KEY at Path %s",
124
- env_path,
125
- )
126
- _set_env("CEREBRAS_API_KEY")
127
-
128
- os.environ["LANGSMITH_TRACING"] = "true"
129
-
130
- __all__: list[str] = ["job_app_graph", "workflows/research_workflow"]
131
-
132
-
133
- """
134
- Job Application Writer Package
135
-
136
- A modular, well-structured package for creating tailored job applications
137
- using LangChain and LangGraph with LangSmith observability.
138
- """
139
-
140
- __version__ = "0.1.0"
141
-
142
- import os
143
- import getpass
144
- import logging
145
- from pathlib import Path
146
- from dotenv import load_dotenv
147
-
148
- logger = logging.getLogger(__name__)
149
- logger.setLevel(logging.INFO)
150
- log_dir = Path(__file__).parent / "logs"
151
- log_dir.mkdir(exist_ok=True)
152
- logger.addHandler(logging.FileHandler(log_dir / "job_writer.log", mode="a"))
153
- logger.info(
154
- "Logger initialized. Writing to %s", Path(__file__).parent / "job_writer.log"
155
- )
156
-
157
- env_path = Path(__file__).parent / ".env"
158
 
159
 
160
  def _set_env(var: str):
 
161
  if not os.environ.get(var):
162
- os.environ[var] = getpass.getpass(f"{var}: ")
163
- logger.info(f"{var} set to {os.environ[var]}")
164
-
165
-
166
- def load_environment_variables(key_array):
167
- for key in key_array:
168
- if not os.getenv(key):
169
- logger.warning(
170
- f"{key} environment variable is not set. Failed to get {key} at Path {env_path}"
171
- )
172
- _set_env(key)
173
 
174
 
175
  if env_path.exists():
@@ -181,14 +53,39 @@ else:
181
  )
182
 
183
 
 
184
  environment_key_array = [
185
  "TAVILY_API_KEY",
186
  "GEMINI_API_KEY",
187
  "PINECONE_API_KEY",
188
  "LANGFUSE_PUBLIC_KEY",
189
  "LANGFUSE_SECRET_KEY",
 
 
 
 
 
190
  ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
191
  # Check for critical environment variables
192
  load_environment_variables(environment_key_array)
193
 
 
 
 
 
194
  __all__ = ["job_app_graph", "workflows/research_workflow"]
 
8
  __version__ = "0.1.0"
9
 
10
  import os
11
+ import sys
12
  import logging
13
  from pathlib import Path
14
  from dotenv import load_dotenv
 
28
  env_path = Path(__file__).parent / ".env"
29
 
30
 
31
+ def _is_interactive():
32
+ """Check if we're running in an interactive environment."""
33
+ return sys.stdin.isatty()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
 
35
 
36
  def _set_env(var: str):
37
+ """Set environment variable - only prompt if running interactively."""
38
  if not os.environ.get(var):
39
+ if _is_interactive():
40
+ from getpass import getpass
41
+ os.environ[var] = getpass(f"{var}: ")
42
+ logger.info(f"{var} set interactively")
43
+ else:
44
+ logger.warning(f"{var} is not set and running non-interactively. Skipping.")
 
 
 
 
 
45
 
46
 
47
  if env_path.exists():
 
53
  )
54
 
55
 
56
+ # List of environment variables to check
57
  environment_key_array = [
58
  "TAVILY_API_KEY",
59
  "GEMINI_API_KEY",
60
  "PINECONE_API_KEY",
61
  "LANGFUSE_PUBLIC_KEY",
62
  "LANGFUSE_SECRET_KEY",
63
+ "LANGSMITH_API_KEY",
64
+ "OPENROUTER_API_KEY",
65
+ "LANGSMITH_PROJECT",
66
+ "LANGSMITH_ENDPOINT",
67
+ "CEREBRAS_API_KEY",
68
  ]
69
+
70
+
71
+ def load_environment_variables(key_array):
72
+ """Load environment variables, warn if missing."""
73
+ missing_keys = []
74
+ for key in key_array:
75
+ if not os.getenv(key):
76
+ logger.warning(f"{key} environment variable is not set.")
77
+ missing_keys.append(key)
78
+ _set_env(key)
79
+
80
+ if missing_keys and not _is_interactive():
81
+ logger.warning(f"Missing environment variables (non-interactive mode): {missing_keys}")
82
+
83
+
84
  # Check for critical environment variables
85
  load_environment_variables(environment_key_array)
86
 
87
+ # Enable LangSmith tracing if API key is set
88
+ if os.getenv("LANGSMITH_API_KEY"):
89
+ os.environ["LANGSMITH_TRACING"] = "true"
90
+
91
  __all__ = ["job_app_graph", "workflows/research_workflow"]
src/job_writing_agent/agents/nodes.py CHANGED
@@ -8,13 +8,14 @@ writer workflow graph, each handling a specific step in the process.
8
  # Standard library imports
9
  import logging
10
  from datetime import datetime
 
11
 
12
  # Third-party imports
13
  from langchain_core.messages import SystemMessage
14
  from langchain_core.prompts import ChatPromptTemplate, HumanMessagePromptTemplate
15
 
16
  # Local imports
17
- from ..classes.classes import AppState, DataLoadState, ResearchState, ResultState
18
  from ..prompts.templates import (
19
  BULLET_POINTS_PROMPT,
20
  COVER_LETTER_PROMPT,
@@ -40,7 +41,7 @@ def create_draft(state: ResearchState) -> ResultState:
40
  # Create LLM inside function (lazy initialization)
41
  llm_provider = LLMFactory()
42
  llm = llm_provider.create_langchain(
43
- "cognitivecomputations/dolphin-mistral-24b-venice-edition:free",
44
  provider="openrouter",
45
  temperature=0.3,
46
  )
@@ -97,7 +98,6 @@ def create_draft(state: ResearchState) -> ResultState:
97
  feedback="",
98
  critique_feedback="",
99
  current_node="create_draft",
100
- company_research_data=company_background_information,
101
  output_data={},
102
  )
103
 
@@ -118,6 +118,7 @@ def critique_draft(state: ResultState) -> ResultState:
118
  draft_content = str(state.get("draft", ""))
119
  feedback = state.get("feedback", "")
120
  output_data = state.get("output_data", "")
 
121
 
122
  # Debug logging to verify values
123
  logger.debug(f"Job description length: {len(job_description)}")
@@ -126,19 +127,12 @@ def critique_draft(state: ResultState) -> ResultState:
126
  # Early return if required fields are missing
127
  if not job_description or not draft_content:
128
  logger.warning("Missing job_description or draft in state")
129
- return ResultState(
130
- draft=draft_content,
131
- feedback=feedback,
132
- critique_feedback="",
133
- current_node="critique",
134
- company_research_data=company_research_data,
135
- output_data=output_data,
136
- )
137
 
138
  # Create LLM inside function (lazy initialization)
139
  llm_provider = LLMFactory()
140
  llm = llm_provider.create_langchain(
141
- "cognitivecomputations/dolphin-mistral-24b-venice-edition:free",
142
  provider="openrouter",
143
  temperature=0.3,
144
  )
@@ -160,20 +154,20 @@ def critique_draft(state: ResultState) -> ResultState:
160
  # Append HumanMessagePromptTemplate with variables (like line 97-124 in create_draft)
161
  critique_context_message = HumanMessagePromptTemplate.from_template(
162
  """
163
- # Job Description
164
- {job_description}
165
 
166
- # Current Draft
167
- {draft}
168
 
169
- Critique this draft and suggest specific improvements. Focus on:
170
- 1. How well it targets the job requirements
171
- 2. Professional tone and language
172
- 3. Clarity and impact
173
- 4. Grammar and style
174
 
175
- Return your critique in a constructive, actionable format.
176
- """,
177
  input_variables=["job_description", "draft"],
178
  )
179
 
@@ -204,12 +198,7 @@ def critique_draft(state: ResultState) -> ResultState:
204
 
205
  # Store the critique - using validated variables from top of function
206
  return ResultState(
207
- draft=draft_content,
208
- feedback=feedback,
209
- critique_feedback=critique_content,
210
- current_node="critique",
211
- company_research_data=company_research_data,
212
- output_data=output_data,
213
  )
214
 
215
  except Exception as e:
@@ -223,8 +212,6 @@ def human_approval(state: ResultState) -> ResultState:
223
  # Validate and extract all required state fields once
224
  draft_content = state.get("draft", "")
225
  critique_feedback_content = state.get("critique_feedback", "No critique available")
226
- company_research_data = state.get("company_research_data", {})
227
- output_data = state.get("output_data", "")
228
 
229
  # Display draft and critique for review
230
  print("\n" + "=" * 80)
@@ -236,25 +223,24 @@ def human_approval(state: ResultState) -> ResultState:
236
  print("\nPlease provide your feedback (press Enter to continue with no changes):")
237
 
238
  # In a real implementation, this would be handled by the UI
239
- human_feedback = input()
240
-
241
- return ResultState(
242
- draft=draft_content,
243
- feedback=human_feedback,
244
- critique_feedback=critique_feedback_content,
245
- current_node="human_approval",
246
- company_research_data=company_research_data,
247
- output_data=output_data,
248
  )
249
 
 
250
 
251
- def finalize_document(state: ResultState) -> DataLoadState:
 
 
 
252
  """Incorporate feedback and finalize the document."""
253
  # Validate and extract all required state fields once
254
  draft_content = state.get("draft", "")
255
  feedback_content = state.get("feedback", "")
256
  critique_feedback_content = state.get("critique_feedback", "")
257
- company_research_data = state.get("company_research_data", {})
258
 
259
  if not draft_content:
260
  logger.warning("Missing draft in state for finalization")
@@ -262,7 +248,7 @@ def finalize_document(state: ResultState) -> DataLoadState:
262
  # Create LLM inside function (lazy initialization)
263
  llm_provider = LLMFactory()
264
  llm = llm_provider.create_langchain(
265
- "cognitivecomputations/dolphin-mistral-24b-venice-edition:free",
266
  provider="openrouter",
267
  temperature=0.3,
268
  )
@@ -287,16 +273,21 @@ def finalize_document(state: ResultState) -> DataLoadState:
287
  }
288
  )
289
 
 
 
 
 
290
  # Return final state using validated variables
291
- return DataLoadState(
292
  draft=draft_content,
293
  feedback=feedback_content,
294
  critique_feedback=critique_feedback_content,
295
- company_research_data=company_research_data,
296
  current_node="finalize",
297
- output_data=final_content.content
298
- if hasattr(final_content, "content")
299
- else str(final_content),
 
 
300
  )
301
 
302
 
 
8
  # Standard library imports
9
  import logging
10
  from datetime import datetime
11
+ from langgraph.types import interrupt
12
 
13
  # Third-party imports
14
  from langchain_core.messages import SystemMessage
15
  from langchain_core.prompts import ChatPromptTemplate, HumanMessagePromptTemplate
16
 
17
  # Local imports
18
+ from ..classes.classes import AppState, ResearchState, ResultState
19
  from ..prompts.templates import (
20
  BULLET_POINTS_PROMPT,
21
  COVER_LETTER_PROMPT,
 
41
  # Create LLM inside function (lazy initialization)
42
  llm_provider = LLMFactory()
43
  llm = llm_provider.create_langchain(
44
+ "mistralai/devstral-2512:free",
45
  provider="openrouter",
46
  temperature=0.3,
47
  )
 
98
  feedback="",
99
  critique_feedback="",
100
  current_node="create_draft",
 
101
  output_data={},
102
  )
103
 
 
118
  draft_content = str(state.get("draft", ""))
119
  feedback = state.get("feedback", "")
120
  output_data = state.get("output_data", "")
121
+ current_node = state.get("current_node", "")
122
 
123
  # Debug logging to verify values
124
  logger.debug(f"Job description length: {len(job_description)}")
 
127
  # Early return if required fields are missing
128
  if not job_description or not draft_content:
129
  logger.warning("Missing job_description or draft in state")
130
+ return ResultState(**state, current_node=current_node)
 
 
 
 
 
 
 
131
 
132
  # Create LLM inside function (lazy initialization)
133
  llm_provider = LLMFactory()
134
  llm = llm_provider.create_langchain(
135
+ "mistralai/devstral-2512:free",
136
  provider="openrouter",
137
  temperature=0.3,
138
  )
 
154
  # Append HumanMessagePromptTemplate with variables (like line 97-124 in create_draft)
155
  critique_context_message = HumanMessagePromptTemplate.from_template(
156
  """
157
+ # Job Description
158
+ {job_description}
159
 
160
+ # Current Draft
161
+ {draft}
162
 
163
+ Critique this draft and suggest specific improvements. Focus on:
164
+ 1. How well it targets the job requirements
165
+ 2. Professional tone and language
166
+ 3. Clarity and impact
167
+ 4. Grammar and style
168
 
169
+ Return your critique in a constructive, actionable format.
170
+ """,
171
  input_variables=["job_description", "draft"],
172
  )
173
 
 
198
 
199
  # Store the critique - using validated variables from top of function
200
  return ResultState(
201
+ **state, critique_feedback=critique_content, current_node=current_node
 
 
 
 
 
202
  )
203
 
204
  except Exception as e:
 
212
  # Validate and extract all required state fields once
213
  draft_content = state.get("draft", "")
214
  critique_feedback_content = state.get("critique_feedback", "No critique available")
 
 
215
 
216
  # Display draft and critique for review
217
  print("\n" + "=" * 80)
 
223
  print("\nPlease provide your feedback (press Enter to continue with no changes):")
224
 
225
  # In a real implementation, this would be handled by the UI
226
+ human_feedback = interrupt(
227
+ {
228
+ "draft": draft_content,
229
+ "message": "Please review the draft and provide feedback (empty string to approve as-is)",
230
+ }
 
 
 
 
231
  )
232
 
233
+ print(f"Human feedback: {human_feedback}")
234
 
235
+ return ResultState(**state, feedback=human_feedback, current_node="human_approval")
236
+
237
+
238
+ def finalize_document(state: ResultState) -> ResultState:
239
  """Incorporate feedback and finalize the document."""
240
  # Validate and extract all required state fields once
241
  draft_content = state.get("draft", "")
242
  feedback_content = state.get("feedback", "")
243
  critique_feedback_content = state.get("critique_feedback", "")
 
244
 
245
  if not draft_content:
246
  logger.warning("Missing draft in state for finalization")
 
248
  # Create LLM inside function (lazy initialization)
249
  llm_provider = LLMFactory()
250
  llm = llm_provider.create_langchain(
251
+ "mistralai/devstral-2512:free",
252
  provider="openrouter",
253
  temperature=0.3,
254
  )
 
273
  }
274
  )
275
 
276
+ print(
277
+ f"Final content: {final_content.content if hasattr(final_content, 'content') else final_content}"
278
+ )
279
+
280
  # Return final state using validated variables
281
+ return ResultState(
282
  draft=draft_content,
283
  feedback=feedback_content,
284
  critique_feedback=critique_feedback_content,
 
285
  current_node="finalize",
286
+ output_data=(
287
+ final_content.content
288
+ if hasattr(final_content, "content")
289
+ else final_content
290
+ ),
291
  )
292
 
293
 
src/job_writing_agent/classes/__init__.py CHANGED
@@ -1,3 +1,17 @@
1
- from .classes import AppState, ResearchState, DataLoadState, ResultState
 
 
 
 
 
 
 
2
 
3
- __all__ = ["AppState", "ResearchState", "DataLoadState", "ResultState"]
 
 
 
 
 
 
 
 
1
+ from .classes import (
2
+ AppState,
3
+ ResearchState,
4
+ DataLoadState,
5
+ ResultState,
6
+ FormField,
7
+ FormFieldsExtraction,
8
+ )
9
 
10
+ __all__ = [
11
+ "AppState",
12
+ "ResearchState",
13
+ "DataLoadState",
14
+ "ResultState",
15
+ "FormField",
16
+ "FormFieldsExtraction",
17
+ ]
src/job_writing_agent/nodes/research_workflow.py CHANGED
@@ -150,7 +150,7 @@ def company_research_data_summary(state: ResearchState) -> ResearchState:
150
 
151
  llm_provider = LLMFactory()
152
  llm = llm_provider.create_dspy(
153
- model="cognitivecomputations/dolphin-mistral-24b-venice-edition:free",
154
  provider="openrouter",
155
  temperature=0.3,
156
  )
 
150
 
151
  llm_provider = LLMFactory()
152
  llm = llm_provider.create_dspy(
153
+ model="mistralai/devstral-2512:free",
154
  provider="openrouter",
155
  temperature=0.3,
156
  )
src/job_writing_agent/tools/SearchTool.py CHANGED
@@ -37,7 +37,7 @@ class TavilyResearchTool:
37
  job_description,
38
  company_name,
39
  max_results=5,
40
- model_name="cognitivecomputations/dolphin-mistral-24b-venice-edition:free",
41
  ):
42
  # Create LLM inside __init__ (lazy initialization)
43
  llm_provider = LLMFactory()
 
37
  job_description,
38
  company_name,
39
  max_results=5,
40
+ model_name="mistralai/devstral-2512:free",
41
  ):
42
  # Create LLM inside __init__ (lazy initialization)
43
  llm_provider = LLMFactory()
src/job_writing_agent/workflow.py CHANGED
@@ -143,7 +143,7 @@ class JobWorkflow:
143
  )
144
 
145
  @cached_property
146
- def job_app_graph(self) -> StateGraph:
147
  """
148
  Build and configure the job application workflow graph.
149
 
@@ -197,7 +197,9 @@ class JobWorkflow:
197
  agent_workflow_graph.add_edge("critique", "human_approval")
198
  agent_workflow_graph.add_edge("human_approval", "finalize")
199
 
200
- return agent_workflow_graph
 
 
201
 
202
  def _get_callbacks(self) -> list:
203
  """
@@ -258,7 +260,7 @@ class JobWorkflow:
258
  in the "output_data" field, or None if execution fails.
259
  """
260
  try:
261
- compiled_graph = self.compile()
262
  except Exception as e:
263
  logger.error("Error compiling graph: %s", e, exc_info=True)
264
  return None
@@ -308,24 +310,72 @@ class JobWorkflow:
308
  logger.error("Error running graph: %s", e, exc_info=True)
309
  return None
310
 
311
- @log_execution
312
- @log_errors
313
- def compile(self) -> CompiledStateGraph:
314
- """
315
- Compile the workflow graph into an executable state machine.
316
 
317
- Returns
318
- -------
319
- CompiledStateGraph
320
- Compiled LangGraph state machine ready for execution.
321
 
322
- Raises
323
- ------
324
- Exception
325
- If graph compilation fails (e.g., invalid edges, missing nodes).
326
- """
327
- compiled_graph = self.job_app_graph.compile()
328
- return compiled_graph
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
329
 
330
 
331
  def main():
@@ -336,12 +386,12 @@ def main():
336
  content=args.content_type,
337
  )
338
  result = asyncio.run(workflow.run())
339
- if result:
340
- print_result(args.content_type, result["output_data"])
341
- save_result(args.content_type, result["output_data"])
342
  print("Workflow completed successfully.")
343
  else:
344
- print("Error running workflow.")
345
  sys.exit(1)
346
 
347
 
 
143
  )
144
 
145
  @cached_property
146
+ def job_app_graph(self) -> CompiledStateGraph:
147
  """
148
  Build and configure the job application workflow graph.
149
 
 
197
  agent_workflow_graph.add_edge("critique", "human_approval")
198
  agent_workflow_graph.add_edge("human_approval", "finalize")
199
 
200
+ job_app_graph = agent_workflow_graph.compile()
201
+
202
+ return job_app_graph
203
 
204
  def _get_callbacks(self) -> list:
205
  """
 
260
  in the "output_data" field, or None if execution fails.
261
  """
262
  try:
263
+ compiled_graph = self.job_app_graph
264
  except Exception as e:
265
  logger.error("Error compiling graph: %s", e, exc_info=True)
266
  return None
 
310
  logger.error("Error running graph: %s", e, exc_info=True)
311
  return None
312
 
 
 
 
 
 
313
 
314
+ # At the bottom of workflow.py, after the JobWorkflow class definition
 
 
 
315
 
316
+
317
+ def build_job_app_graph() -> CompiledStateGraph:
318
+ """
319
+ Build and compile the job application workflow graph.
320
+
321
+ This function creates the graph structure independent of runtime inputs.
322
+ Actual runtime values (resume, job description) come from the state
323
+ passed during invocation.
324
+ """
325
+
326
+ # Helper function for the adapter (since we can't use instance methods)
327
+ def dataload_to_research_adapter(state: DataLoadState) -> ResearchState:
328
+ logger.info("Adapter for converting DataLoadState to ResearchState")
329
+ return ResearchState(
330
+ company_research_data=state.get("company_research_data", {}),
331
+ attempted_search_queries=[],
332
+ current_node="",
333
+ content_category=state.get("content_category", ""),
334
+ messages=state.get("messages", []),
335
+ )
336
+
337
+ # Helper function for routing
338
+ def route_after_load(state: DataLoadState) -> str:
339
+ next_node = state.get("next_node", "research")
340
+ logger.info(f"Routing after load: {next_node}")
341
+ return next_node
342
+
343
+ # Build the graph
344
+ agent_workflow_graph = StateGraph(DataLoadState)
345
+
346
+ # Add nodes
347
+ agent_workflow_graph.add_node("load", data_loading_workflow)
348
+ agent_workflow_graph.add_node("to_research_adapter", dataload_to_research_adapter)
349
+ agent_workflow_graph.add_node("research", research_workflow)
350
+ agent_workflow_graph.add_node("create_draft", create_draft)
351
+ agent_workflow_graph.add_node("critique", critique_draft)
352
+ agent_workflow_graph.add_node("human_approval", human_approval)
353
+ agent_workflow_graph.add_node("finalize", finalize_document)
354
+
355
+ # Set entry and exit
356
+ agent_workflow_graph.set_entry_point("load")
357
+ agent_workflow_graph.set_finish_point("finalize")
358
+
359
+ # Add edges
360
+ agent_workflow_graph.add_conditional_edges(
361
+ "load",
362
+ route_after_load,
363
+ {
364
+ "load": "load",
365
+ "research": "to_research_adapter",
366
+ },
367
+ )
368
+ agent_workflow_graph.add_edge("to_research_adapter", "research")
369
+ agent_workflow_graph.add_edge("research", "create_draft")
370
+ agent_workflow_graph.add_edge("create_draft", "critique")
371
+ agent_workflow_graph.add_edge("critique", "human_approval")
372
+ agent_workflow_graph.add_edge("human_approval", "finalize")
373
+
374
+ return agent_workflow_graph.compile()
375
+
376
+
377
+ # Export at module level for LangGraph deployment
378
+ job_app_graph = build_job_app_graph()
379
 
380
 
381
  def main():
 
386
  content=args.content_type,
387
  )
388
  result = asyncio.run(workflow.run())
389
+ if result and hasattr(result, "output_data"):
390
+ print_result(args.content_type, result.get("output_data", ""))
391
+ save_result(args.content_type, result.get("output_data", ""))
392
  print("Workflow completed successfully.")
393
  else:
394
+ print("Error running workflow. No output data available.")
395
  sys.exit(1)
396
 
397
 
uv.lock CHANGED
@@ -1909,7 +1909,6 @@ dependencies = [
1909
  { name = "langfuse" },
1910
  { name = "langgraph" },
1911
  { name = "langgraph-api" },
1912
- { name = "langgraph-checkpoint" },
1913
  { name = "langgraph-cli" },
1914
  { name = "langgraph-prebuilt" },
1915
  { name = "langgraph-runtime-inmem" },
@@ -2149,20 +2148,19 @@ requires-dist = [
2149
  { name = "jsonschema-specifications", specifier = "==2025.9.1" },
2150
  { name = "justext", specifier = "==3.0.2" },
2151
  { name = "kiwisolver", specifier = "==1.4.9" },
2152
- { name = "langchain", specifier = "==0.3.27" },
2153
- { name = "langchain-cerebras", specifier = "==0.5.0" },
2154
- { name = "langchain-community", specifier = "==0.3.30" },
2155
- { name = "langchain-core", specifier = "==0.3.78" },
2156
- { name = "langchain-ollama", specifier = "==0.3.10" },
2157
- { name = "langchain-openai", specifier = "==0.3.34" },
2158
- { name = "langchain-tavily", specifier = "==0.2.12" },
2159
- { name = "langchain-text-splitters", specifier = "==0.3.11" },
2160
  { name = "langfuse", specifier = "==3.6.1" },
2161
- { name = "langgraph", specifier = "==0.6.8" },
2162
- { name = "langgraph-api", specifier = "==0.4.46" },
2163
- { name = "langgraph-checkpoint", specifier = "==2.1.1" },
2164
- { name = "langgraph-cli", specifier = "==0.4.4" },
2165
- { name = "langgraph-prebuilt", specifier = "==0.6.4" },
2166
  { name = "langgraph-runtime-inmem", specifier = "==0.14.1" },
2167
  { name = "langgraph-sdk", specifier = "==0.2.9" },
2168
  { name = "langsmith", specifier = "==0.4.32" },
@@ -2214,8 +2212,8 @@ requires-dist = [
2214
  { name = "opentelemetry-sdk", specifier = "==1.37.0" },
2215
  { name = "opentelemetry-semantic-conventions", specifier = "==0.58b0" },
2216
  { name = "optuna", specifier = "==4.5.0" },
2217
- { name = "orjson", specifier = "==3.11.3" },
2218
- { name = "ormsgpack", specifier = "==1.10.0" },
2219
  { name = "packaging", specifier = "==25.0" },
2220
  { name = "pandas", specifier = "==2.3.3" },
2221
  { name = "parse", specifier = "==1.20.2" },
@@ -2535,33 +2533,29 @@ wheels = [
2535
 
2536
  [[package]]
2537
  name = "langchain"
2538
- version = "0.3.27"
2539
  source = { registry = "https://pypi.org/simple" }
2540
  dependencies = [
2541
  { name = "langchain-core" },
2542
- { name = "langchain-text-splitters" },
2543
- { name = "langsmith" },
2544
  { name = "pydantic" },
2545
- { name = "pyyaml" },
2546
- { name = "requests" },
2547
- { name = "sqlalchemy" },
2548
  ]
2549
- sdist = { url = "https://files.pythonhosted.org/packages/83/f6/f4f7f3a56626fe07e2bb330feb61254dbdf06c506e6b59a536a337da51cf/langchain-0.3.27.tar.gz", hash = "sha256:aa6f1e6274ff055d0fd36254176770f356ed0a8994297d1df47df341953cec62", size = 10233809 }
2550
  wheels = [
2551
- { url = "https://files.pythonhosted.org/packages/f6/d5/4861816a95b2f6993f1360cfb605aacb015506ee2090433a71de9cca8477/langchain-0.3.27-py3-none-any.whl", hash = "sha256:7b20c4f338826acb148d885b20a73a16e410ede9ee4f19bb02011852d5f98798", size = 1018194 },
2552
  ]
2553
 
2554
  [[package]]
2555
  name = "langchain-cerebras"
2556
- version = "0.5.0"
2557
  source = { registry = "https://pypi.org/simple" }
2558
  dependencies = [
2559
  { name = "langchain-core" },
2560
  { name = "langchain-openai" },
2561
  ]
2562
- sdist = { url = "https://files.pythonhosted.org/packages/42/61/9a4cb075d2c400690fc7738fa936193461f9d0b92dea2d5e27fd44244546/langchain_cerebras-0.5.0.tar.gz", hash = "sha256:24cfe76358cd8c779f33c77708df08cc5fec81ed13797830396be0f52abdd80a", size = 7402 }
2563
  wheels = [
2564
- { url = "https://files.pythonhosted.org/packages/bf/78/1dacd83bd324c5c64b88367facb86ad9e5e5d89dfd0dceaed3d444c42df6/langchain_cerebras-0.5.0-py3-none-any.whl", hash = "sha256:f129df699d6eb71d8e2602d7abe9ae75c289168b2e52d33cdefe5d4982e027b9", size = 7839 },
2565
  ]
2566
 
2567
  [[package]]
@@ -2589,7 +2583,7 @@ wheels = [
2589
 
2590
  [[package]]
2591
  name = "langchain-core"
2592
- version = "0.3.78"
2593
  source = { registry = "https://pypi.org/simple" }
2594
  dependencies = [
2595
  { name = "jsonpatch" },
@@ -2599,10 +2593,11 @@ dependencies = [
2599
  { name = "pyyaml" },
2600
  { name = "tenacity" },
2601
  { name = "typing-extensions" },
 
2602
  ]
2603
- sdist = { url = "https://files.pythonhosted.org/packages/a8/04/0035bd1df8d0fb534afceabe3ba0a87c5af8c5020177650e9aa79aca3495/langchain_core-0.3.78.tar.gz", hash = "sha256:a174a2061f8659b916fd2b1c7d174b3ddd07be7ca45a07aaec442696df5101b6", size = 580473 }
2604
  wheels = [
2605
- { url = "https://files.pythonhosted.org/packages/9c/a7/ff35c108c4863c1bb99724a4253ff2324aea5789d689dd59424c07df1199/langchain_core-0.3.78-py3-none-any.whl", hash = "sha256:dafc4f7e9fd008f680bf0ffe5904dbaa45992abdb92627b68eccb7b4089cbbf0", size = 449610 },
2606
  ]
2607
 
2608
  [[package]]
@@ -2620,16 +2615,16 @@ wheels = [
2620
 
2621
  [[package]]
2622
  name = "langchain-openai"
2623
- version = "0.3.34"
2624
  source = { registry = "https://pypi.org/simple" }
2625
  dependencies = [
2626
  { name = "langchain-core" },
2627
  { name = "openai" },
2628
  { name = "tiktoken" },
2629
  ]
2630
- sdist = { url = "https://files.pythonhosted.org/packages/75/23/91461c6c2b1c8ceeadd6fefe453a03b1537afeff4ace3c118d7e7659f5a7/langchain_openai-0.3.34.tar.gz", hash = "sha256:57916d462be5b8fd19e5cb2f00d4e5cf0465266a292d583de2fc693a55ba190e", size = 785924 }
2631
  wheels = [
2632
- { url = "https://files.pythonhosted.org/packages/66/94/132aff5a1ed4ebfe7b4d3e4dbf30b9f70ce2bd2ac3470d0c0e742845afb1/langchain_openai-0.3.34-py3-none-any.whl", hash = "sha256:08d61d68a6d869c70d542171e149b9065668dedfc4fafcd4de8aeb5b933030a9", size = 75605 },
2633
  ]
2634
 
2635
  [[package]]
@@ -2681,7 +2676,7 @@ wheels = [
2681
 
2682
  [[package]]
2683
  name = "langgraph"
2684
- version = "0.6.8"
2685
  source = { registry = "https://pypi.org/simple" }
2686
  dependencies = [
2687
  { name = "langchain-core" },
@@ -2691,9 +2686,9 @@ dependencies = [
2691
  { name = "pydantic" },
2692
  { name = "xxhash" },
2693
  ]
2694
- sdist = { url = "https://files.pythonhosted.org/packages/c3/3f/96e7458522b04397b03a8e715e578b9529fa428a51ebd1c7b3bee9d1a9b1/langgraph-0.6.8.tar.gz", hash = "sha256:bdb824bf29e98c3bda73f06eda8f44d10fe766a977f252c92e58ee1a0a83973d", size = 490725 }
2695
  wheels = [
2696
- { url = "https://files.pythonhosted.org/packages/c8/7e/0ae1eb99e0bb9a58dd255af9fa0a843eea06206e917a96bf95249e11f632/langgraph-0.6.8-py3-none-any.whl", hash = "sha256:d4f2cab0f66a26fad2ec66e177704982526528fc99b66edd048391a066e97bad", size = 154783 },
2697
  ]
2698
 
2699
  [[package]]
@@ -2760,15 +2755,15 @@ wheels = [
2760
 
2761
  [[package]]
2762
  name = "langgraph-prebuilt"
2763
- version = "0.6.4"
2764
  source = { registry = "https://pypi.org/simple" }
2765
  dependencies = [
2766
  { name = "langchain-core" },
2767
  { name = "langgraph-checkpoint" },
2768
  ]
2769
- sdist = { url = "https://files.pythonhosted.org/packages/d6/21/9b198d11732101ee8cdf30af98d0b4f11254c768de15173e57f5260fd14b/langgraph_prebuilt-0.6.4.tar.gz", hash = "sha256:e9e53b906ee5df46541d1dc5303239e815d3ec551e52bb03dd6463acc79ec28f", size = 125695 }
2770
  wheels = [
2771
- { url = "https://files.pythonhosted.org/packages/0a/7f/973b0d9729d9693d6e5b4bc5f3ae41138d194cb7b16b0ed230020beeb13a/langgraph_prebuilt-0.6.4-py3-none-any.whl", hash = "sha256:819f31d88b84cb2729ff1b79db2d51e9506b8fb7aaacfc0d359d4fe16e717344", size = 28025 },
2772
  ]
2773
 
2774
  [[package]]
@@ -3969,98 +3964,98 @@ wheels = [
3969
 
3970
  [[package]]
3971
  name = "orjson"
3972
- version = "3.11.3"
3973
- source = { registry = "https://pypi.org/simple" }
3974
- sdist = { url = "https://files.pythonhosted.org/packages/be/4d/8df5f83256a809c22c4d6792ce8d43bb503be0fb7a8e4da9025754b09658/orjson-3.11.3.tar.gz", hash = "sha256:1c0603b1d2ffcd43a411d64797a19556ef76958aef1c182f22dc30860152a98a", size = 5482394 }
3975
- wheels = [
3976
- { url = "https://files.pythonhosted.org/packages/cd/8b/360674cd817faef32e49276187922a946468579fcaf37afdfb6c07046e92/orjson-3.11.3-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9d2ae0cc6aeb669633e0124531f342a17d8e97ea999e42f12a5ad4adaa304c5f", size = 238238 },
3977
- { url = "https://files.pythonhosted.org/packages/05/3d/5fa9ea4b34c1a13be7d9046ba98d06e6feb1d8853718992954ab59d16625/orjson-3.11.3-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:ba21dbb2493e9c653eaffdc38819b004b7b1b246fb77bfc93dc016fe664eac91", size = 127713 },
3978
- { url = "https://files.pythonhosted.org/packages/e5/5f/e18367823925e00b1feec867ff5f040055892fc474bf5f7875649ecfa586/orjson-3.11.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00f1a271e56d511d1569937c0447d7dce5a99a33ea0dec76673706360a051904", size = 123241 },
3979
- { url = "https://files.pythonhosted.org/packages/0f/bd/3c66b91c4564759cf9f473251ac1650e446c7ba92a7c0f9f56ed54f9f0e6/orjson-3.11.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b67e71e47caa6680d1b6f075a396d04fa6ca8ca09aafb428731da9b3ea32a5a6", size = 127895 },
3980
- { url = "https://files.pythonhosted.org/packages/82/b5/dc8dcd609db4766e2967a85f63296c59d4722b39503e5b0bf7fd340d387f/orjson-3.11.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d7d012ebddffcce8c85734a6d9e5f08180cd3857c5f5a3ac70185b43775d043d", size = 130303 },
3981
- { url = "https://files.pythonhosted.org/packages/48/c2/d58ec5fd1270b2aa44c862171891adc2e1241bd7dab26c8f46eb97c6c6f1/orjson-3.11.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd759f75d6b8d1b62012b7f5ef9461d03c804f94d539a5515b454ba3a6588038", size = 132366 },
3982
- { url = "https://files.pythonhosted.org/packages/73/87/0ef7e22eb8dd1ef940bfe3b9e441db519e692d62ed1aae365406a16d23d0/orjson-3.11.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6890ace0809627b0dff19cfad92d69d0fa3f089d3e359a2a532507bb6ba34efb", size = 135180 },
3983
- { url = "https://files.pythonhosted.org/packages/bb/6a/e5bf7b70883f374710ad74faf99bacfc4b5b5a7797c1d5e130350e0e28a3/orjson-3.11.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9d4a5e041ae435b815e568537755773d05dac031fee6a57b4ba70897a44d9d2", size = 132741 },
3984
- { url = "https://files.pythonhosted.org/packages/bd/0c/4577fd860b6386ffaa56440e792af01c7882b56d2766f55384b5b0e9d39b/orjson-3.11.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2d68bf97a771836687107abfca089743885fb664b90138d8761cce61d5625d55", size = 131104 },
3985
- { url = "https://files.pythonhosted.org/packages/66/4b/83e92b2d67e86d1c33f2ea9411742a714a26de63641b082bdbf3d8e481af/orjson-3.11.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:bfc27516ec46f4520b18ef645864cee168d2a027dbf32c5537cb1f3e3c22dac1", size = 403887 },
3986
- { url = "https://files.pythonhosted.org/packages/6d/e5/9eea6a14e9b5ceb4a271a1fd2e1dec5f2f686755c0fab6673dc6ff3433f4/orjson-3.11.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f66b001332a017d7945e177e282a40b6997056394e3ed7ddb41fb1813b83e824", size = 145855 },
3987
- { url = "https://files.pythonhosted.org/packages/45/78/8d4f5ad0c80ba9bf8ac4d0fc71f93a7d0dc0844989e645e2074af376c307/orjson-3.11.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:212e67806525d2561efbfe9e799633b17eb668b8964abed6b5319b2f1cfbae1f", size = 135361 },
3988
- { url = "https://files.pythonhosted.org/packages/0b/5f/16386970370178d7a9b438517ea3d704efcf163d286422bae3b37b88dbb5/orjson-3.11.3-cp311-cp311-win32.whl", hash = "sha256:6e8e0c3b85575a32f2ffa59de455f85ce002b8bdc0662d6b9c2ed6d80ab5d204", size = 136190 },
3989
- { url = "https://files.pythonhosted.org/packages/09/60/db16c6f7a41dd8ac9fb651f66701ff2aeb499ad9ebc15853a26c7c152448/orjson-3.11.3-cp311-cp311-win_amd64.whl", hash = "sha256:6be2f1b5d3dc99a5ce5ce162fc741c22ba9f3443d3dd586e6a1211b7bc87bc7b", size = 131389 },
3990
- { url = "https://files.pythonhosted.org/packages/3e/2a/bb811ad336667041dea9b8565c7c9faf2f59b47eb5ab680315eea612ef2e/orjson-3.11.3-cp311-cp311-win_arm64.whl", hash = "sha256:fafb1a99d740523d964b15c8db4eabbfc86ff29f84898262bf6e3e4c9e97e43e", size = 126120 },
3991
- { url = "https://files.pythonhosted.org/packages/3d/b0/a7edab2a00cdcb2688e1c943401cb3236323e7bfd2839815c6131a3742f4/orjson-3.11.3-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:8c752089db84333e36d754c4baf19c0e1437012242048439c7e80eb0e6426e3b", size = 238259 },
3992
- { url = "https://files.pythonhosted.org/packages/e1/c6/ff4865a9cc398a07a83342713b5932e4dc3cb4bf4bc04e8f83dedfc0d736/orjson-3.11.3-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:9b8761b6cf04a856eb544acdd82fc594b978f12ac3602d6374a7edb9d86fd2c2", size = 127633 },
3993
- { url = "https://files.pythonhosted.org/packages/6e/e6/e00bea2d9472f44fe8794f523e548ce0ad51eb9693cf538a753a27b8bda4/orjson-3.11.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b13974dc8ac6ba22feaa867fc19135a3e01a134b4f7c9c28162fed4d615008a", size = 123061 },
3994
- { url = "https://files.pythonhosted.org/packages/54/31/9fbb78b8e1eb3ac605467cb846e1c08d0588506028b37f4ee21f978a51d4/orjson-3.11.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f83abab5bacb76d9c821fd5c07728ff224ed0e52d7a71b7b3de822f3df04e15c", size = 127956 },
3995
- { url = "https://files.pythonhosted.org/packages/36/88/b0604c22af1eed9f98d709a96302006915cfd724a7ebd27d6dd11c22d80b/orjson-3.11.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e6fbaf48a744b94091a56c62897b27c31ee2da93d826aa5b207131a1e13d4064", size = 130790 },
3996
- { url = "https://files.pythonhosted.org/packages/0e/9d/1c1238ae9fffbfed51ba1e507731b3faaf6b846126a47e9649222b0fd06f/orjson-3.11.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bc779b4f4bba2847d0d2940081a7b6f7b5877e05408ffbb74fa1faf4a136c424", size = 132385 },
3997
- { url = "https://files.pythonhosted.org/packages/a3/b5/c06f1b090a1c875f337e21dd71943bc9d84087f7cdf8c6e9086902c34e42/orjson-3.11.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bd4b909ce4c50faa2192da6bb684d9848d4510b736b0611b6ab4020ea6fd2d23", size = 135305 },
3998
- { url = "https://files.pythonhosted.org/packages/a0/26/5f028c7d81ad2ebbf84414ba6d6c9cac03f22f5cd0d01eb40fb2d6a06b07/orjson-3.11.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:524b765ad888dc5518bbce12c77c2e83dee1ed6b0992c1790cc5fb49bb4b6667", size = 132875 },
3999
- { url = "https://files.pythonhosted.org/packages/fe/d4/b8df70d9cfb56e385bf39b4e915298f9ae6c61454c8154a0f5fd7efcd42e/orjson-3.11.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:84fd82870b97ae3cdcea9d8746e592b6d40e1e4d4527835fc520c588d2ded04f", size = 130940 },
4000
- { url = "https://files.pythonhosted.org/packages/da/5e/afe6a052ebc1a4741c792dd96e9f65bf3939d2094e8b356503b68d48f9f5/orjson-3.11.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:fbecb9709111be913ae6879b07bafd4b0785b44c1eb5cac8ac76da048b3885a1", size = 403852 },
4001
- { url = "https://files.pythonhosted.org/packages/f8/90/7bbabafeb2ce65915e9247f14a56b29c9334003536009ef5b122783fe67e/orjson-3.11.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9dba358d55aee552bd868de348f4736ca5a4086d9a62e2bfbbeeb5629fe8b0cc", size = 146293 },
4002
- { url = "https://files.pythonhosted.org/packages/27/b3/2d703946447da8b093350570644a663df69448c9d9330e5f1d9cce997f20/orjson-3.11.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:eabcf2e84f1d7105f84580e03012270c7e97ecb1fb1618bda395061b2a84a049", size = 135470 },
4003
- { url = "https://files.pythonhosted.org/packages/38/70/b14dcfae7aff0e379b0119c8a812f8396678919c431efccc8e8a0263e4d9/orjson-3.11.3-cp312-cp312-win32.whl", hash = "sha256:3782d2c60b8116772aea8d9b7905221437fdf53e7277282e8d8b07c220f96cca", size = 136248 },
4004
- { url = "https://files.pythonhosted.org/packages/35/b8/9e3127d65de7fff243f7f3e53f59a531bf6bb295ebe5db024c2503cc0726/orjson-3.11.3-cp312-cp312-win_amd64.whl", hash = "sha256:79b44319268af2eaa3e315b92298de9a0067ade6e6003ddaef72f8e0bedb94f1", size = 131437 },
4005
- { url = "https://files.pythonhosted.org/packages/51/92/a946e737d4d8a7fd84a606aba96220043dcc7d6988b9e7551f7f6d5ba5ad/orjson-3.11.3-cp312-cp312-win_arm64.whl", hash = "sha256:0e92a4e83341ef79d835ca21b8bd13e27c859e4e9e4d7b63defc6e58462a3710", size = 125978 },
4006
- { url = "https://files.pythonhosted.org/packages/fc/79/8932b27293ad35919571f77cb3693b5906cf14f206ef17546052a241fdf6/orjson-3.11.3-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:af40c6612fd2a4b00de648aa26d18186cd1322330bd3a3cc52f87c699e995810", size = 238127 },
4007
- { url = "https://files.pythonhosted.org/packages/1c/82/cb93cd8cf132cd7643b30b6c5a56a26c4e780c7a145db6f83de977b540ce/orjson-3.11.3-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:9f1587f26c235894c09e8b5b7636a38091a9e6e7fe4531937534749c04face43", size = 127494 },
4008
- { url = "https://files.pythonhosted.org/packages/a4/b8/2d9eb181a9b6bb71463a78882bcac1027fd29cf62c38a40cc02fc11d3495/orjson-3.11.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:61dcdad16da5bb486d7227a37a2e789c429397793a6955227cedbd7252eb5a27", size = 123017 },
4009
- { url = "https://files.pythonhosted.org/packages/b4/14/a0e971e72d03b509190232356d54c0f34507a05050bd026b8db2bf2c192c/orjson-3.11.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:11c6d71478e2cbea0a709e8a06365fa63da81da6498a53e4c4f065881d21ae8f", size = 127898 },
4010
- { url = "https://files.pythonhosted.org/packages/8e/af/dc74536722b03d65e17042cc30ae586161093e5b1f29bccda24765a6ae47/orjson-3.11.3-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff94112e0098470b665cb0ed06efb187154b63649403b8d5e9aedeb482b4548c", size = 130742 },
4011
- { url = "https://files.pythonhosted.org/packages/62/e6/7a3b63b6677bce089fe939353cda24a7679825c43a24e49f757805fc0d8a/orjson-3.11.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae8b756575aaa2a855a75192f356bbda11a89169830e1439cfb1a3e1a6dde7be", size = 132377 },
4012
- { url = "https://files.pythonhosted.org/packages/fc/cd/ce2ab93e2e7eaf518f0fd15e3068b8c43216c8a44ed82ac2b79ce5cef72d/orjson-3.11.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c9416cc19a349c167ef76135b2fe40d03cea93680428efee8771f3e9fb66079d", size = 135313 },
4013
- { url = "https://files.pythonhosted.org/packages/d0/b4/f98355eff0bd1a38454209bbc73372ce351ba29933cb3e2eba16c04b9448/orjson-3.11.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b822caf5b9752bc6f246eb08124c3d12bf2175b66ab74bac2ef3bbf9221ce1b2", size = 132908 },
4014
- { url = "https://files.pythonhosted.org/packages/eb/92/8f5182d7bc2a1bed46ed960b61a39af8389f0ad476120cd99e67182bfb6d/orjson-3.11.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:414f71e3bdd5573893bf5ecdf35c32b213ed20aa15536fe2f588f946c318824f", size = 130905 },
4015
- { url = "https://files.pythonhosted.org/packages/1a/60/c41ca753ce9ffe3d0f67b9b4c093bdd6e5fdb1bc53064f992f66bb99954d/orjson-3.11.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:828e3149ad8815dc14468f36ab2a4b819237c155ee1370341b91ea4c8672d2ee", size = 403812 },
4016
- { url = "https://files.pythonhosted.org/packages/dd/13/e4a4f16d71ce1868860db59092e78782c67082a8f1dc06a3788aef2b41bc/orjson-3.11.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ac9e05f25627ffc714c21f8dfe3a579445a5c392a9c8ae7ba1d0e9fb5333f56e", size = 146277 },
4017
- { url = "https://files.pythonhosted.org/packages/8d/8b/bafb7f0afef9344754a3a0597a12442f1b85a048b82108ef2c956f53babd/orjson-3.11.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e44fbe4000bd321d9f3b648ae46e0196d21577cf66ae684a96ff90b1f7c93633", size = 135418 },
4018
- { url = "https://files.pythonhosted.org/packages/60/d4/bae8e4f26afb2c23bea69d2f6d566132584d1c3a5fe89ee8c17b718cab67/orjson-3.11.3-cp313-cp313-win32.whl", hash = "sha256:2039b7847ba3eec1f5886e75e6763a16e18c68a63efc4b029ddf994821e2e66b", size = 136216 },
4019
- { url = "https://files.pythonhosted.org/packages/88/76/224985d9f127e121c8cad882cea55f0ebe39f97925de040b75ccd4b33999/orjson-3.11.3-cp313-cp313-win_amd64.whl", hash = "sha256:29be5ac4164aa8bdcba5fa0700a3c9c316b411d8ed9d39ef8a882541bd452fae", size = 131362 },
4020
- { url = "https://files.pythonhosted.org/packages/e2/cf/0dce7a0be94bd36d1346be5067ed65ded6adb795fdbe3abd234c8d576d01/orjson-3.11.3-cp313-cp313-win_arm64.whl", hash = "sha256:18bd1435cb1f2857ceb59cfb7de6f92593ef7b831ccd1b9bfb28ca530e539dce", size = 125989 },
4021
- { url = "https://files.pythonhosted.org/packages/ef/77/d3b1fef1fc6aaeed4cbf3be2b480114035f4df8fa1a99d2dac1d40d6e924/orjson-3.11.3-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:cf4b81227ec86935568c7edd78352a92e97af8da7bd70bdfdaa0d2e0011a1ab4", size = 238115 },
4022
- { url = "https://files.pythonhosted.org/packages/e4/6d/468d21d49bb12f900052edcfbf52c292022d0a323d7828dc6376e6319703/orjson-3.11.3-cp314-cp314-macosx_15_0_arm64.whl", hash = "sha256:bc8bc85b81b6ac9fc4dae393a8c159b817f4c2c9dee5d12b773bddb3b95fc07e", size = 127493 },
4023
- { url = "https://files.pythonhosted.org/packages/67/46/1e2588700d354aacdf9e12cc2d98131fb8ac6f31ca65997bef3863edb8ff/orjson-3.11.3-cp314-cp314-manylinux_2_34_aarch64.whl", hash = "sha256:88dcfc514cfd1b0de038443c7b3e6a9797ffb1b3674ef1fd14f701a13397f82d", size = 122998 },
4024
- { url = "https://files.pythonhosted.org/packages/3b/94/11137c9b6adb3779f1b34fd98be51608a14b430dbc02c6d41134fbba484c/orjson-3.11.3-cp314-cp314-manylinux_2_34_x86_64.whl", hash = "sha256:d61cd543d69715d5fc0a690c7c6f8dcc307bc23abef9738957981885f5f38229", size = 132915 },
4025
- { url = "https://files.pythonhosted.org/packages/10/61/dccedcf9e9bcaac09fdabe9eaee0311ca92115699500efbd31950d878833/orjson-3.11.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:2b7b153ed90ababadbef5c3eb39549f9476890d339cf47af563aea7e07db2451", size = 130907 },
4026
- { url = "https://files.pythonhosted.org/packages/0e/fd/0e935539aa7b08b3ca0f817d73034f7eb506792aae5ecc3b7c6e679cdf5f/orjson-3.11.3-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:7909ae2460f5f494fecbcd10613beafe40381fd0316e35d6acb5f3a05bfda167", size = 403852 },
4027
- { url = "https://files.pythonhosted.org/packages/4a/2b/50ae1a5505cd1043379132fdb2adb8a05f37b3e1ebffe94a5073321966fd/orjson-3.11.3-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:2030c01cbf77bc67bee7eef1e7e31ecf28649353987775e3583062c752da0077", size = 146309 },
4028
- { url = "https://files.pythonhosted.org/packages/cd/1d/a473c158e380ef6f32753b5f39a69028b25ec5be331c2049a2201bde2e19/orjson-3.11.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:a0169ebd1cbd94b26c7a7ad282cf5c2744fce054133f959e02eb5265deae1872", size = 135424 },
4029
- { url = "https://files.pythonhosted.org/packages/da/09/17d9d2b60592890ff7382e591aa1d9afb202a266b180c3d4049b1ec70e4a/orjson-3.11.3-cp314-cp314-win32.whl", hash = "sha256:0c6d7328c200c349e3a4c6d8c83e0a5ad029bdc2d417f234152bf34842d0fc8d", size = 136266 },
4030
- { url = "https://files.pythonhosted.org/packages/15/58/358f6846410a6b4958b74734727e582ed971e13d335d6c7ce3e47730493e/orjson-3.11.3-cp314-cp314-win_amd64.whl", hash = "sha256:317bbe2c069bbc757b1a2e4105b64aacd3bc78279b66a6b9e51e846e4809f804", size = 131351 },
4031
- { url = "https://files.pythonhosted.org/packages/28/01/d6b274a0635be0468d4dbd9cafe80c47105937a0d42434e805e67cd2ed8b/orjson-3.11.3-cp314-cp314-win_arm64.whl", hash = "sha256:e8f6a7a27d7b7bec81bd5924163e9af03d49bbb63013f107b48eb5d16db711bc", size = 125985 },
4032
  ]
4033
 
4034
  [[package]]
4035
  name = "ormsgpack"
4036
- version = "1.10.0"
4037
- source = { registry = "https://pypi.org/simple" }
4038
- sdist = { url = "https://files.pythonhosted.org/packages/92/36/44eed5ef8ce93cded76a576780bab16425ce7876f10d3e2e6265e46c21ea/ormsgpack-1.10.0.tar.gz", hash = "sha256:7f7a27efd67ef22d7182ec3b7fa7e9d147c3ad9be2a24656b23c989077e08b16", size = 58629 }
4039
- wheels = [
4040
- { url = "https://files.pythonhosted.org/packages/30/27/7da748bc0d7d567950a378dee5a32477ed5d15462ab186918b5f25cac1ad/ormsgpack-1.10.0-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:4bb7df307e17b36cbf7959cd642c47a7f2046ae19408c564e437f0ec323a7775", size = 376275 },
4041
- { url = "https://files.pythonhosted.org/packages/7b/65/c082cc8c74a914dbd05af0341c761c73c3d9960b7432bbf9b8e1e20811af/ormsgpack-1.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8817ae439c671779e1127ee62f0ac67afdeaeeacb5f0db45703168aa74a2e4af", size = 204335 },
4042
- { url = "https://files.pythonhosted.org/packages/46/62/17ef7e5d9766c79355b9c594cc9328c204f1677bc35da0595cc4e46449f0/ormsgpack-1.10.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2f345f81e852035d80232e64374d3a104139d60f8f43c6c5eade35c4bac5590e", size = 215372 },
4043
- { url = "https://files.pythonhosted.org/packages/4e/92/7c91e8115fc37e88d1a35e13200fda3054ff5d2e5adf017345e58cea4834/ormsgpack-1.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21de648a1c7ef692bdd287fb08f047bd5371d7462504c0a7ae1553c39fee35e3", size = 216470 },
4044
- { url = "https://files.pythonhosted.org/packages/2c/86/ce053c52e2517b90e390792d83e926a7a523c1bce5cc63d0a7cd05ce6cf6/ormsgpack-1.10.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3a7d844ae9cbf2112c16086dd931b2acefce14cefd163c57db161170c2bfa22b", size = 384591 },
4045
- { url = "https://files.pythonhosted.org/packages/07/e8/2ad59f2ab222c6029e500bc966bfd2fe5cb099f8ab6b7ebeb50ddb1a6fe5/ormsgpack-1.10.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:e4d80585403d86d7f800cf3d0aafac1189b403941e84e90dd5102bb2b92bf9d5", size = 478892 },
4046
- { url = "https://files.pythonhosted.org/packages/f4/73/f55e4b47b7b18fd8e7789680051bf830f1e39c03f1d9ed993cd0c3e97215/ormsgpack-1.10.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:da1de515a87e339e78a3ccf60e39f5fb740edac3e9e82d3c3d209e217a13ac08", size = 390122 },
4047
- { url = "https://files.pythonhosted.org/packages/f7/87/073251cdb93d4c6241748568b3ad1b2a76281fb2002eed16a3a4043d61cf/ormsgpack-1.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:57c4601812684024132cbb32c17a7d4bb46ffc7daf2fddf5b697391c2c4f142a", size = 121197 },
4048
- { url = "https://files.pythonhosted.org/packages/99/95/f3ab1a7638f6aa9362e87916bb96087fbbc5909db57e19f12ad127560e1e/ormsgpack-1.10.0-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:4e159d50cd4064d7540e2bc6a0ab66eab70b0cc40c618b485324ee17037527c0", size = 376806 },
4049
- { url = "https://files.pythonhosted.org/packages/6c/2b/42f559f13c0b0f647b09d749682851d47c1a7e48308c43612ae6833499c8/ormsgpack-1.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eeb47c85f3a866e29279d801115b554af0fefc409e2ed8aa90aabfa77efe5cc6", size = 204433 },
4050
- { url = "https://files.pythonhosted.org/packages/45/42/1ca0cb4d8c80340a89a4af9e6d8951fb8ba0d076a899d2084eadf536f677/ormsgpack-1.10.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c28249574934534c9bd5dce5485c52f21bcea0ee44d13ece3def6e3d2c3798b5", size = 215547 },
4051
- { url = "https://files.pythonhosted.org/packages/0a/38/184a570d7c44c0260bc576d1daaac35b2bfd465a50a08189518505748b9a/ormsgpack-1.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1957dcadbb16e6a981cd3f9caef9faf4c2df1125e2a1b702ee8236a55837ce07", size = 216746 },
4052
- { url = "https://files.pythonhosted.org/packages/69/2f/1aaffd08f6b7fdc2a57336a80bdfb8df24e6a65ada5aa769afecfcbc6cc6/ormsgpack-1.10.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3b29412558c740bf6bac156727aa85ac67f9952cd6f071318f29ee72e1a76044", size = 384783 },
4053
- { url = "https://files.pythonhosted.org/packages/a9/63/3e53d6f43bb35e00c98f2b8ab2006d5138089ad254bc405614fbf0213502/ormsgpack-1.10.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:6933f350c2041ec189fe739f0ba7d6117c8772f5bc81f45b97697a84d03020dd", size = 479076 },
4054
- { url = "https://files.pythonhosted.org/packages/b8/19/fa1121b03b61402bb4d04e35d164e2320ef73dfb001b57748110319dd014/ormsgpack-1.10.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9a86de06d368fcc2e58b79dece527dc8ca831e0e8b9cec5d6e633d2777ec93d0", size = 390447 },
4055
- { url = "https://files.pythonhosted.org/packages/b0/0d/73143ecb94ac4a5dcba223402139240a75dee0cc6ba8a543788a5646407a/ormsgpack-1.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:35fa9f81e5b9a0dab42e09a73f7339ecffdb978d6dbf9deb2ecf1e9fc7808722", size = 121401 },
4056
- { url = "https://files.pythonhosted.org/packages/61/f8/ec5f4e03268d0097545efaab2893aa63f171cf2959cb0ea678a5690e16a1/ormsgpack-1.10.0-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:8d816d45175a878993b7372bd5408e0f3ec5a40f48e2d5b9d8f1cc5d31b61f1f", size = 376806 },
4057
- { url = "https://files.pythonhosted.org/packages/c1/19/b3c53284aad1e90d4d7ed8c881a373d218e16675b8b38e3569d5b40cc9b8/ormsgpack-1.10.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a90345ccb058de0f35262893751c603b6376b05f02be2b6f6b7e05d9dd6d5643", size = 204433 },
4058
- { url = "https://files.pythonhosted.org/packages/09/0b/845c258f59df974a20a536c06cace593698491defdd3d026a8a5f9b6e745/ormsgpack-1.10.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:144b5e88f1999433e54db9d637bae6fe21e935888be4e3ac3daecd8260bd454e", size = 215549 },
4059
- { url = "https://files.pythonhosted.org/packages/61/56/57fce8fb34ca6c9543c026ebebf08344c64dbb7b6643d6ddd5355d37e724/ormsgpack-1.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2190b352509d012915921cca76267db136cd026ddee42f1b0d9624613cc7058c", size = 216747 },
4060
- { url = "https://files.pythonhosted.org/packages/b8/3f/655b5f6a2475c8d209f5348cfbaaf73ce26237b92d79ef2ad439407dd0fa/ormsgpack-1.10.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:86fd9c1737eaba43d3bb2730add9c9e8b5fbed85282433705dd1b1e88ea7e6fb", size = 384785 },
4061
- { url = "https://files.pythonhosted.org/packages/4b/94/687a0ad8afd17e4bce1892145d6a1111e58987ddb176810d02a1f3f18686/ormsgpack-1.10.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:33afe143a7b61ad21bb60109a86bb4e87fec70ef35db76b89c65b17e32da7935", size = 479076 },
4062
- { url = "https://files.pythonhosted.org/packages/c8/34/68925232e81e0e062a2f0ac678f62aa3b6f7009d6a759e19324dbbaebae7/ormsgpack-1.10.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f23d45080846a7b90feabec0d330a9cc1863dc956728412e4f7986c80ab3a668", size = 390446 },
4063
- { url = "https://files.pythonhosted.org/packages/12/ad/f4e1a36a6d1714afb7ffb74b3ababdcb96529cf4e7a216f9f7c8eda837b6/ormsgpack-1.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:534d18acb805c75e5fba09598bf40abe1851c853247e61dda0c01f772234da69", size = 121399 },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4064
  ]
4065
 
4066
  [[package]]
@@ -5836,6 +5831,35 @@ wheels = [
5836
  { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795 },
5837
  ]
5838
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5839
  [[package]]
5840
  name = "uvicorn"
5841
  version = "0.37.0"
 
1909
  { name = "langfuse" },
1910
  { name = "langgraph" },
1911
  { name = "langgraph-api" },
 
1912
  { name = "langgraph-cli" },
1913
  { name = "langgraph-prebuilt" },
1914
  { name = "langgraph-runtime-inmem" },
 
2148
  { name = "jsonschema-specifications", specifier = "==2025.9.1" },
2149
  { name = "justext", specifier = "==3.0.2" },
2150
  { name = "kiwisolver", specifier = "==1.4.9" },
2151
+ { name = "langchain" },
2152
+ { name = "langchain-cerebras" },
2153
+ { name = "langchain-community" },
2154
+ { name = "langchain-core", specifier = ">=1.0.0" },
2155
+ { name = "langchain-ollama" },
2156
+ { name = "langchain-openai" },
2157
+ { name = "langchain-tavily" },
2158
+ { name = "langchain-text-splitters" },
2159
  { name = "langfuse", specifier = "==3.6.1" },
2160
+ { name = "langgraph" },
2161
+ { name = "langgraph-api" },
2162
+ { name = "langgraph-cli" },
2163
+ { name = "langgraph-prebuilt" },
 
2164
  { name = "langgraph-runtime-inmem", specifier = "==0.14.1" },
2165
  { name = "langgraph-sdk", specifier = "==0.2.9" },
2166
  { name = "langsmith", specifier = "==0.4.32" },
 
2212
  { name = "opentelemetry-sdk", specifier = "==1.37.0" },
2213
  { name = "opentelemetry-semantic-conventions", specifier = "==0.58b0" },
2214
  { name = "optuna", specifier = "==4.5.0" },
2215
+ { name = "orjson", specifier = ">=3.9.7,<3.10.17" },
2216
+ { name = "ormsgpack", specifier = ">=1.12.0" },
2217
  { name = "packaging", specifier = "==25.0" },
2218
  { name = "pandas", specifier = "==2.3.3" },
2219
  { name = "parse", specifier = "==1.20.2" },
 
2533
 
2534
  [[package]]
2535
  name = "langchain"
2536
+ version = "1.2.0"
2537
  source = { registry = "https://pypi.org/simple" }
2538
  dependencies = [
2539
  { name = "langchain-core" },
2540
+ { name = "langgraph" },
 
2541
  { name = "pydantic" },
 
 
 
2542
  ]
2543
+ sdist = { url = "https://files.pythonhosted.org/packages/b1/12/3a74c22abdfddd877dfc2ee666d516f9132877fcd25eb4dd694835c59c79/langchain-1.2.0.tar.gz", hash = "sha256:a087d1e2b2969819e29a91a6d5f98302aafe31bd49ba377ecee3bf5a5dcfe14a", size = 536126 }
2544
  wheels = [
2545
+ { url = "https://files.pythonhosted.org/packages/23/00/4e3fa0d90f5a5c376ccb8ca983d0f0f7287783dfac48702e18f01d24673b/langchain-1.2.0-py3-none-any.whl", hash = "sha256:82f0d17aa4fbb11560b30e1e7d4aeb75e3ad71ce09b85c90ab208b181a24ffac", size = 102828 },
2546
  ]
2547
 
2548
  [[package]]
2549
  name = "langchain-cerebras"
2550
+ version = "0.8.2"
2551
  source = { registry = "https://pypi.org/simple" }
2552
  dependencies = [
2553
  { name = "langchain-core" },
2554
  { name = "langchain-openai" },
2555
  ]
2556
+ sdist = { url = "https://files.pythonhosted.org/packages/64/d8/76356d5361b3dd6e1febcc62cc83acc01a88f7fca43b836d4e3a72434a37/langchain_cerebras-0.8.2.tar.gz", hash = "sha256:1594f87d08955a141269d48527d9a636827f6cb60167c447d8c5969eeaa9c8c7", size = 11267 }
2557
  wheels = [
2558
+ { url = "https://files.pythonhosted.org/packages/fc/f9/239509fccf433f7cb34f8d2cf15885e4eda5e04f1f3110da295543fbaec5/langchain_cerebras-0.8.2-py3-none-any.whl", hash = "sha256:ca956bd8906e4760d903d3b9c614913488a87e44ee61522fafd66267dfb6582f", size = 9961 },
2559
  ]
2560
 
2561
  [[package]]
 
2583
 
2584
  [[package]]
2585
  name = "langchain-core"
2586
+ version = "1.2.6"
2587
  source = { registry = "https://pypi.org/simple" }
2588
  dependencies = [
2589
  { name = "jsonpatch" },
 
2593
  { name = "pyyaml" },
2594
  { name = "tenacity" },
2595
  { name = "typing-extensions" },
2596
+ { name = "uuid-utils" },
2597
  ]
2598
+ sdist = { url = "https://files.pythonhosted.org/packages/b9/ce/ba5ed5ea6df22965b2893c2ed28ebb456204962723d408904c4acfa5e942/langchain_core-1.2.6.tar.gz", hash = "sha256:b4e7841dd7f8690375aa07c54739178dc2c635147d475e0c2955bf82a1afa498", size = 833343 }
2599
  wheels = [
2600
+ { url = "https://files.pythonhosted.org/packages/6f/40/0655892c245d8fbe6bca6d673ab5927e5c3ab7be143de40b52289a0663bc/langchain_core-1.2.6-py3-none-any.whl", hash = "sha256:aa6ed954b4b1f4504937fe75fdf674317027e9a91ba7a97558b0de3dc8004e34", size = 489096 },
2601
  ]
2602
 
2603
  [[package]]
 
2615
 
2616
  [[package]]
2617
  name = "langchain-openai"
2618
+ version = "1.1.6"
2619
  source = { registry = "https://pypi.org/simple" }
2620
  dependencies = [
2621
  { name = "langchain-core" },
2622
  { name = "openai" },
2623
  { name = "tiktoken" },
2624
  ]
2625
+ sdist = { url = "https://files.pythonhosted.org/packages/ae/67/228dc28b4498ea16422577013b5bb4ba35a1b99f8be975d6747c7a9f7e6a/langchain_openai-1.1.6.tar.gz", hash = "sha256:e306612654330ae36fb6bbe36db91c98534312afade19e140c3061fe4208dac8", size = 1038310 }
2626
  wheels = [
2627
+ { url = "https://files.pythonhosted.org/packages/db/5b/1f6521df83c1a8e8d3f52351883b59683e179c0aa1bec75d0a77a394c9e7/langchain_openai-1.1.6-py3-none-any.whl", hash = "sha256:c42d04a67a85cee1d994afe400800d2b09ebf714721345f0b651eb06a02c3948", size = 84701 },
2628
  ]
2629
 
2630
  [[package]]
 
2676
 
2677
  [[package]]
2678
  name = "langgraph"
2679
+ version = "1.0.4"
2680
  source = { registry = "https://pypi.org/simple" }
2681
  dependencies = [
2682
  { name = "langchain-core" },
 
2686
  { name = "pydantic" },
2687
  { name = "xxhash" },
2688
  ]
2689
+ sdist = { url = "https://files.pythonhosted.org/packages/d6/3c/af87902d300c1f467165558c8966d8b1e1f896dace271d3f35a410a5c26a/langgraph-1.0.4.tar.gz", hash = "sha256:86d08e25d7244340f59c5200fa69fdd11066aa999b3164b531e2a20036fac156", size = 484397 }
2690
  wheels = [
2691
+ { url = "https://files.pythonhosted.org/packages/14/52/4eb25a3f60399da34ba34adff1b3e324cf0d87eb7a08cebf1882a9b5e0d5/langgraph-1.0.4-py3-none-any.whl", hash = "sha256:b1a835ceb0a8d69b9db48075e1939e28b1ad70ee23fa3fa8f90149904778bacf", size = 157271 },
2692
  ]
2693
 
2694
  [[package]]
 
2755
 
2756
  [[package]]
2757
  name = "langgraph-prebuilt"
2758
+ version = "1.0.5"
2759
  source = { registry = "https://pypi.org/simple" }
2760
  dependencies = [
2761
  { name = "langchain-core" },
2762
  { name = "langgraph-checkpoint" },
2763
  ]
2764
+ sdist = { url = "https://files.pythonhosted.org/packages/46/f9/54f8891b32159e4542236817aea2ee83de0de18bce28e9bdba08c7f93001/langgraph_prebuilt-1.0.5.tar.gz", hash = "sha256:85802675ad778cc7240fd02d47db1e0b59c0c86d8369447d77ce47623845db2d", size = 144453 }
2765
  wheels = [
2766
+ { url = "https://files.pythonhosted.org/packages/87/5e/aeba4a5b39fe6e874e0dd003a82da71c7153e671312671a8dacc5cb7c1af/langgraph_prebuilt-1.0.5-py3-none-any.whl", hash = "sha256:22369563e1848862ace53fbc11b027c28dd04a9ac39314633bb95f2a7e258496", size = 35072 },
2767
  ]
2768
 
2769
  [[package]]
 
3964
 
3965
  [[package]]
3966
  name = "orjson"
3967
+ version = "3.10.16"
3968
+ source = { registry = "https://pypi.org/simple" }
3969
+ sdist = { url = "https://files.pythonhosted.org/packages/98/c7/03913cc4332174071950acf5b0735463e3f63760c80585ef369270c2b372/orjson-3.10.16.tar.gz", hash = "sha256:d2aaa5c495e11d17b9b93205f5fa196737ee3202f000aaebf028dc9a73750f10", size = 5410415 }
3970
+ wheels = [
3971
+ { url = "https://files.pythonhosted.org/packages/97/29/43f91a5512b5d2535594438eb41c5357865fd5e64dec745d90a588820c75/orjson-3.10.16-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:44fcbe1a1884f8bc9e2e863168b0f84230c3d634afe41c678637d2728ea8e739", size = 249180 },
3972
+ { url = "https://files.pythonhosted.org/packages/0c/36/2a72d55e266473c19a86d97b7363bb8bf558ab450f75205689a287d5ce61/orjson-3.10.16-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78177bf0a9d0192e0b34c3d78bcff7fe21d1b5d84aeb5ebdfe0dbe637b885225", size = 138510 },
3973
+ { url = "https://files.pythonhosted.org/packages/bb/ad/f86d6f55c1a68b57ff6ea7966bce5f4e5163f2e526ddb7db9fc3c2c8d1c4/orjson-3.10.16-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:12824073a010a754bb27330cad21d6e9b98374f497f391b8707752b96f72e741", size = 132373 },
3974
+ { url = "https://files.pythonhosted.org/packages/5e/8b/d18f2711493a809f3082a88fda89342bc8e16767743b909cd3c34989fba3/orjson-3.10.16-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ddd41007e56284e9867864aa2f29f3136bb1dd19a49ca43c0b4eda22a579cf53", size = 136773 },
3975
+ { url = "https://files.pythonhosted.org/packages/a1/dc/ce025f002f8e0749e3f057c4d773a4d4de32b7b4c1fc5a50b429e7532586/orjson-3.10.16-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0877c4d35de639645de83666458ca1f12560d9fa7aa9b25d8bb8f52f61627d14", size = 138029 },
3976
+ { url = "https://files.pythonhosted.org/packages/0e/1b/cf9df85852b91160029d9f26014230366a2b4deb8cc51fabe68e250a8c1a/orjson-3.10.16-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9a09a539e9cc3beead3e7107093b4ac176d015bec64f811afb5965fce077a03c", size = 142677 },
3977
+ { url = "https://files.pythonhosted.org/packages/92/18/5b1e1e995bffad49dc4311a0bdfd874bc6f135fd20f0e1f671adc2c9910e/orjson-3.10.16-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31b98bc9b40610fec971d9a4d67bb2ed02eec0a8ae35f8ccd2086320c28526ca", size = 132800 },
3978
+ { url = "https://files.pythonhosted.org/packages/d6/eb/467f25b580e942fcca1344adef40633b7f05ac44a65a63fc913f9a805d58/orjson-3.10.16-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0ce243f5a8739f3a18830bc62dc2e05b69a7545bafd3e3249f86668b2bcd8e50", size = 135451 },
3979
+ { url = "https://files.pythonhosted.org/packages/8d/4b/9d10888038975cb375982e9339d9495bac382d5c976c500b8d6f2c8e2e4e/orjson-3.10.16-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:64792c0025bae049b3074c6abe0cf06f23c8e9f5a445f4bab31dc5ca23dbf9e1", size = 412358 },
3980
+ { url = "https://files.pythonhosted.org/packages/3b/e2/cfbcfcc4fbe619e0ca9bdbbfccb2d62b540bbfe41e0ee77d44a628594f59/orjson-3.10.16-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ea53f7e68eec718b8e17e942f7ca56c6bd43562eb19db3f22d90d75e13f0431d", size = 152772 },
3981
+ { url = "https://files.pythonhosted.org/packages/b9/d6/627a1b00569be46173007c11dde3da4618c9bfe18409325b0e3e2a82fe29/orjson-3.10.16-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a741ba1a9488c92227711bde8c8c2b63d7d3816883268c808fbeada00400c164", size = 137225 },
3982
+ { url = "https://files.pythonhosted.org/packages/0a/7b/a73c67b505021af845b9f05c7c848793258ea141fa2058b52dd9b067c2b4/orjson-3.10.16-cp311-cp311-win32.whl", hash = "sha256:c7ed2c61bb8226384c3fdf1fb01c51b47b03e3f4536c985078cccc2fd19f1619", size = 141733 },
3983
+ { url = "https://files.pythonhosted.org/packages/f4/22/5e8217c48d68c0adbfb181e749d6a733761074e598b083c69a1383d18147/orjson-3.10.16-cp311-cp311-win_amd64.whl", hash = "sha256:cd67d8b3e0e56222a2e7b7f7da9031e30ecd1fe251c023340b9f12caca85ab60", size = 133784 },
3984
+ { url = "https://files.pythonhosted.org/packages/5d/15/67ce9d4c959c83f112542222ea3b9209c1d424231d71d74c4890ea0acd2b/orjson-3.10.16-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:6d3444abbfa71ba21bb042caa4b062535b122248259fdb9deea567969140abca", size = 249325 },
3985
+ { url = "https://files.pythonhosted.org/packages/da/2c/1426b06f30a1b9ada74b6f512c1ddf9d2760f53f61cdb59efeb9ad342133/orjson-3.10.16-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:30245c08d818fdcaa48b7d5b81499b8cae09acabb216fe61ca619876b128e184", size = 133621 },
3986
+ { url = "https://files.pythonhosted.org/packages/9e/88/18d26130954bc73bee3be10f95371ea1dfb8679e0e2c46b0f6d8c6289402/orjson-3.10.16-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0ba1d0baa71bf7579a4ccdcf503e6f3098ef9542106a0eca82395898c8a500a", size = 138270 },
3987
+ { url = "https://files.pythonhosted.org/packages/4f/f9/6d8b64fcd58fae072e80ee7981be8ba0d7c26ace954e5cd1d027fc80518f/orjson-3.10.16-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb0beefa5ef3af8845f3a69ff2a4aa62529b5acec1cfe5f8a6b4141033fd46ef", size = 132346 },
3988
+ { url = "https://files.pythonhosted.org/packages/16/3f/2513fd5bc786f40cd12af569c23cae6381aeddbefeed2a98f0a666eb5d0d/orjson-3.10.16-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6daa0e1c9bf2e030e93c98394de94506f2a4d12e1e9dadd7c53d5e44d0f9628e", size = 136845 },
3989
+ { url = "https://files.pythonhosted.org/packages/6d/42/b0e7b36720f5ab722b48e8ccf06514d4f769358dd73c51abd8728ef58d0b/orjson-3.10.16-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9da9019afb21e02410ef600e56666652b73eb3e4d213a0ec919ff391a7dd52aa", size = 138078 },
3990
+ { url = "https://files.pythonhosted.org/packages/a3/a8/d220afb8a439604be74fc755dbc740bded5ed14745ca536b304ed32eb18a/orjson-3.10.16-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:daeb3a1ee17b69981d3aae30c3b4e786b0f8c9e6c71f2b48f1aef934f63f38f4", size = 142712 },
3991
+ { url = "https://files.pythonhosted.org/packages/8c/88/7e41e9883c00f84f92fe357a8371edae816d9d7ef39c67b5106960c20389/orjson-3.10.16-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80fed80eaf0e20a31942ae5d0728849862446512769692474be5e6b73123a23b", size = 133136 },
3992
+ { url = "https://files.pythonhosted.org/packages/e9/ca/61116095307ad0be828ea26093febaf59e38596d84a9c8d765c3c5e4934f/orjson-3.10.16-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:73390ed838f03764540a7bdc4071fe0123914c2cc02fb6abf35182d5fd1b7a42", size = 135258 },
3993
+ { url = "https://files.pythonhosted.org/packages/dc/1b/09493cf7d801505f094c9295f79c98c1e0af2ac01c7ed8d25b30fcb19ada/orjson-3.10.16-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:a22bba012a0c94ec02a7768953020ab0d3e2b884760f859176343a36c01adf87", size = 412326 },
3994
+ { url = "https://files.pythonhosted.org/packages/ea/02/125d7bbd7f7a500190ddc8ae5d2d3c39d87ed3ed28f5b37cfe76962c678d/orjson-3.10.16-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5385bbfdbc90ff5b2635b7e6bebf259652db00a92b5e3c45b616df75b9058e88", size = 152800 },
3995
+ { url = "https://files.pythonhosted.org/packages/f9/09/7658a9e3e793d5b3b00598023e0fb6935d0e7bbb8ff72311c5415a8ce677/orjson-3.10.16-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:02c6279016346e774dd92625d46c6c40db687b8a0d685aadb91e26e46cc33e1e", size = 137516 },
3996
+ { url = "https://files.pythonhosted.org/packages/29/87/32b7a4831e909d347278101a48d4cf9f3f25901b2295e7709df1651f65a1/orjson-3.10.16-cp312-cp312-win32.whl", hash = "sha256:7ca55097a11426db80f79378e873a8c51f4dde9ffc22de44850f9696b7eb0e8c", size = 141759 },
3997
+ { url = "https://files.pythonhosted.org/packages/35/ce/81a27e7b439b807bd393585271364cdddf50dc281fc57c4feef7ccb186a6/orjson-3.10.16-cp312-cp312-win_amd64.whl", hash = "sha256:86d127efdd3f9bf5f04809b70faca1e6836556ea3cc46e662b44dab3fe71f3d6", size = 133944 },
3998
+ { url = "https://files.pythonhosted.org/packages/87/b9/ff6aa28b8c86af9526160905593a2fe8d004ac7a5e592ee0b0ff71017511/orjson-3.10.16-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:148a97f7de811ba14bc6dbc4a433e0341ffd2cc285065199fb5f6a98013744bd", size = 249289 },
3999
+ { url = "https://files.pythonhosted.org/packages/6c/81/6d92a586149b52684ab8fd70f3623c91d0e6a692f30fd8c728916ab2263c/orjson-3.10.16-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:1d960c1bf0e734ea36d0adc880076de3846aaec45ffad29b78c7f1b7962516b8", size = 133640 },
4000
+ { url = "https://files.pythonhosted.org/packages/c2/88/b72443f4793d2e16039ab85d0026677932b15ab968595fb7149750d74134/orjson-3.10.16-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a318cd184d1269f68634464b12871386808dc8b7c27de8565234d25975a7a137", size = 138286 },
4001
+ { url = "https://files.pythonhosted.org/packages/c3/3c/72a22d4b28c076c4016d5a52bd644a8e4d849d3bb0373d9e377f9e3b2250/orjson-3.10.16-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:df23f8df3ef9223d1d6748bea63fca55aae7da30a875700809c500a05975522b", size = 132307 },
4002
+ { url = "https://files.pythonhosted.org/packages/8a/a2/f1259561bdb6ad7061ff1b95dab082fe32758c4bc143ba8d3d70831f0a06/orjson-3.10.16-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b94dda8dd6d1378f1037d7f3f6b21db769ef911c4567cbaa962bb6dc5021cf90", size = 136739 },
4003
+ { url = "https://files.pythonhosted.org/packages/3d/af/c7583c4b34f33d8b8b90cfaab010ff18dd64e7074cc1e117a5f1eff20dcf/orjson-3.10.16-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f12970a26666a8775346003fd94347d03ccb98ab8aa063036818381acf5f523e", size = 138076 },
4004
+ { url = "https://files.pythonhosted.org/packages/d7/59/d7fc7fbdd3d4a64c2eae4fc7341a5aa39cf9549bd5e2d7f6d3c07f8b715b/orjson-3.10.16-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:15a1431a245d856bd56e4d29ea0023eb4d2c8f71efe914beb3dee8ab3f0cd7fb", size = 142643 },
4005
+ { url = "https://files.pythonhosted.org/packages/92/0e/3bd8f2197d27601f16b4464ae948826da2bcf128af31230a9dbbad7ceb57/orjson-3.10.16-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c83655cfc247f399a222567d146524674a7b217af7ef8289c0ff53cfe8db09f0", size = 133168 },
4006
+ { url = "https://files.pythonhosted.org/packages/af/a8/351fd87b664b02f899f9144d2c3dc848b33ac04a5df05234cbfb9e2a7540/orjson-3.10.16-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fa59ae64cb6ddde8f09bdbf7baf933c4cd05734ad84dcf4e43b887eb24e37652", size = 135271 },
4007
+ { url = "https://files.pythonhosted.org/packages/ba/b0/a6d42a7d412d867c60c0337d95123517dd5a9370deea705ea1be0f89389e/orjson-3.10.16-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:ca5426e5aacc2e9507d341bc169d8af9c3cbe88f4cd4c1cf2f87e8564730eb56", size = 412444 },
4008
+ { url = "https://files.pythonhosted.org/packages/79/ec/7572cd4e20863f60996f3f10bc0a6da64a6fd9c35954189a914cec0b7377/orjson-3.10.16-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:6fd5da4edf98a400946cd3a195680de56f1e7575109b9acb9493331047157430", size = 152737 },
4009
+ { url = "https://files.pythonhosted.org/packages/a9/19/ceb9e8fed5403b2e76a8ac15f581b9d25780a3be3c9b3aa54b7777a210d5/orjson-3.10.16-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:980ecc7a53e567169282a5e0ff078393bac78320d44238da4e246d71a4e0e8f5", size = 137482 },
4010
+ { url = "https://files.pythonhosted.org/packages/1b/78/a78bb810f3786579dbbbd94768284cbe8f2fd65167cd7020260679665c17/orjson-3.10.16-cp313-cp313-win32.whl", hash = "sha256:28f79944dd006ac540a6465ebd5f8f45dfdf0948ff998eac7a908275b4c1add6", size = 141714 },
4011
+ { url = "https://files.pythonhosted.org/packages/81/9c/b66ce9245ff319df2c3278acd351a3f6145ef34b4a2d7f4b0f739368370f/orjson-3.10.16-cp313-cp313-win_amd64.whl", hash = "sha256:fe0a145e96d51971407cb8ba947e63ead2aa915db59d6631a355f5f2150b56b7", size = 133954 },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4012
  ]
4013
 
4014
  [[package]]
4015
  name = "ormsgpack"
4016
+ version = "1.12.1"
4017
+ source = { registry = "https://pypi.org/simple" }
4018
+ sdist = { url = "https://files.pythonhosted.org/packages/fe/96/34c40d621996c2f377a18decbd3c59f031dde73c3ba47d1e1e8f29a05aaa/ormsgpack-1.12.1.tar.gz", hash = "sha256:a3877fde1e4f27a39f92681a0aab6385af3a41d0c25375d33590ae20410ea2ac", size = 39476 }
4019
+ wheels = [
4020
+ { url = "https://files.pythonhosted.org/packages/57/e2/f5b89365c8dc8025c27d31316038f1c103758ddbf87dc0fa8e3f78f66907/ormsgpack-1.12.1-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:4038f59ae0e19dac5e5d9aae4ec17ff84a79e046342ee73ccdecf3547ecf0d34", size = 376180 },
4021
+ { url = "https://files.pythonhosted.org/packages/ca/87/3f694e06f5e32c6d65066f53b4a025282a5072b6b336c17560b00e04606d/ormsgpack-1.12.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16c63b0c5a3eec467e4bb33a14dabba076b7d934dff62898297b5c0b5f7c3cb3", size = 202338 },
4022
+ { url = "https://files.pythonhosted.org/packages/e5/f5/6d95d7b7c11f97a92522082fc7e5d1ab34537929f1e13f4c369f392f19d0/ormsgpack-1.12.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:74fd6a8e037eb310dda865298e8d122540af00fe5658ec18b97a1d34f4012e4d", size = 210720 },
4023
+ { url = "https://files.pythonhosted.org/packages/2b/9d/9a49a2686f8b7165dcb2342b8554951263c30c0f0825f1fcc2d56e736a6b/ormsgpack-1.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58ad60308e233dd824a1859eabb5fe092e123e885eafa4ad5789322329c80fb5", size = 211264 },
4024
+ { url = "https://files.pythonhosted.org/packages/02/31/2fdc36eaeca2182900b96fc7b19755f293283fe681750e3d295733d62f0e/ormsgpack-1.12.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:35127464c941c1219acbe1a220e48d55e7933373d12257202f4042f7044b4c90", size = 386081 },
4025
+ { url = "https://files.pythonhosted.org/packages/f0/65/0a765432f08ae26b4013c6a9aed97be17a9ef85f1600948a474b518e27dd/ormsgpack-1.12.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:c48d1c50794692d1e6e3f8c3bb65f5c3acfaae9347e506484a65d60b3d91fb50", size = 479572 },
4026
+ { url = "https://files.pythonhosted.org/packages/4e/4f/f2f15ebef786ad71cea420bf8692448fbddf04d1bf3feaa68bd5ee3172e6/ormsgpack-1.12.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b512b2ad6feaaefdc26e05431ed2843e42483041e354e167c53401afaa83d919", size = 387862 },
4027
+ { url = "https://files.pythonhosted.org/packages/15/eb/86fbef1d605fa91ecef077f93f9d0e34fc39b23475dfe3ffb92f6c8db28d/ormsgpack-1.12.1-cp311-cp311-win_amd64.whl", hash = "sha256:93f30db95e101a9616323bfc50807ad00e7f6197cea2216d2d24af42afc77d88", size = 115900 },
4028
+ { url = "https://files.pythonhosted.org/packages/5b/67/7ba1a46e6a6e263fc42a4fafc24afc1ab21a66116553cad670426f0bd9ef/ormsgpack-1.12.1-cp311-cp311-win_arm64.whl", hash = "sha256:d75b5fa14f6abffce2c392ee03b4731199d8a964c81ee8645c4c79af0e80fd50", size = 109868 },
4029
+ { url = "https://files.pythonhosted.org/packages/17/fe/ab9167ca037406b5703add24049cf3e18021a3b16133ea20615b1f160ea4/ormsgpack-1.12.1-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:4d7fb0e1b6fbc701d75269f7405a4f79230a6ce0063fb1092e4f6577e312f86d", size = 376725 },
4030
+ { url = "https://files.pythonhosted.org/packages/c7/ea/2820e65f506894c459b840d1091ae6e327fde3d5a3f3b002a11a1b9bdf7d/ormsgpack-1.12.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:43a9353e2db5b024c91a47d864ef15eaa62d81824cfc7740fed4cef7db738694", size = 202466 },
4031
+ { url = "https://files.pythonhosted.org/packages/45/8b/def01c13339c5bbec2ee1469ef53e7fadd66c8d775df974ee4def1572515/ormsgpack-1.12.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fc8fe866b7706fc25af0adf1f600bc06ece5b15ca44e34641327198b821e5c3c", size = 210748 },
4032
+ { url = "https://files.pythonhosted.org/packages/5d/d2/bf350c92f7f067dd9484499705f2d8366d8d9008a670e3d1d0add1908f85/ormsgpack-1.12.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:813755b5f598a78242042e05dfd1ada4e769e94b98c9ab82554550f97ff4d641", size = 211510 },
4033
+ { url = "https://files.pythonhosted.org/packages/74/92/9d689bcb95304a6da26c4d59439c350940c25d1b35f146d402ccc6344c51/ormsgpack-1.12.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8eea2a13536fae45d78f93f2cc846c9765c7160c85f19cfefecc20873c137cdd", size = 386237 },
4034
+ { url = "https://files.pythonhosted.org/packages/17/fe/bd3107547f8b6129265dd957f40b9cd547d2445db2292aacb13335a7ea89/ormsgpack-1.12.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:7a02ebda1a863cbc604740e76faca8eee1add322db2dcbe6cf32669fffdff65c", size = 479589 },
4035
+ { url = "https://files.pythonhosted.org/packages/c1/7c/e8e5cc9edb967d44f6f85e9ebdad440b59af3fae00b137a4327dc5aed9bb/ormsgpack-1.12.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3c0bd63897c439931cdf29348e5e6e8c330d529830e848d10767615c0f3d1b82", size = 388077 },
4036
+ { url = "https://files.pythonhosted.org/packages/35/6b/5031797e43b58506f28a8760b26dc23f2620fb4f2200c4c1b3045603e67e/ormsgpack-1.12.1-cp312-cp312-win_amd64.whl", hash = "sha256:362f2e812f8d7035dc25a009171e09d7cc97cb30d3c9e75a16aeae00ca3c1dcf", size = 116190 },
4037
+ { url = "https://files.pythonhosted.org/packages/1e/fd/9f43ea6425e383a6b2dbfafebb06fd60e8d68c700ef715adfbcdb499f75d/ormsgpack-1.12.1-cp312-cp312-win_arm64.whl", hash = "sha256:6190281e381db2ed0045052208f47a995ccf61eed48f1215ae3cce3fbccd59c5", size = 109990 },
4038
+ { url = "https://files.pythonhosted.org/packages/11/42/f110dfe7cf23a52a82e23eb23d9a6a76ae495447d474686dfa758f3d71d6/ormsgpack-1.12.1-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:9663d6b3ecc917c063d61a99169ce196a80f3852e541ae404206836749459279", size = 376746 },
4039
+ { url = "https://files.pythonhosted.org/packages/11/76/b386e508a8ae207daec240201a81adb26467bf99b163560724e86bd9ff33/ormsgpack-1.12.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32e85cfbaf01a94a92520e7fe7851cfcfe21a5698299c28ab86194895f9b9233", size = 202489 },
4040
+ { url = "https://files.pythonhosted.org/packages/ea/0e/5db7a63f387149024572daa3d9512fe8fb14bf4efa0722d6d491bed280e7/ormsgpack-1.12.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dabfd2c24b59c7c69870a5ecee480dfae914a42a0c2e7c9d971cf531e2ba471a", size = 210757 },
4041
+ { url = "https://files.pythonhosted.org/packages/64/79/3a9899e57cb57430bd766fc1b4c9ad410cb2ba6070bc8cf6301e7d385768/ormsgpack-1.12.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51bbf2b64afeded34ccd8e25402e4bca038757913931fa0d693078d75563f6f9", size = 211518 },
4042
+ { url = "https://files.pythonhosted.org/packages/d7/cd/4f41710ae9fe50d7fcbe476793b3c487746d0e1cc194cc0fee42ff6d989b/ormsgpack-1.12.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9959a71dde1bd0ced84af17facc06a8afada495a34e9cb1bad8e9b20d4c59cef", size = 386251 },
4043
+ { url = "https://files.pythonhosted.org/packages/bf/54/ba0c97d6231b1f01daafaa520c8cce1e1b7fceaae6fdc1c763925874a7de/ormsgpack-1.12.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:e9be0e3b62d758f21f5b20e0e06b3a240ec546c4a327bf771f5825462aa74714", size = 479607 },
4044
+ { url = "https://files.pythonhosted.org/packages/18/75/19a9a97a462776d525baf41cfb7072734528775f0a3d5fbfab3aa7756b9b/ormsgpack-1.12.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a29d49ab7fdd77ea787818e60cb4ef491708105b9c4c9b0f919201625eb036b5", size = 388062 },
4045
+ { url = "https://files.pythonhosted.org/packages/a8/6a/ec26e3f44e9632ecd2f43638b7b37b500eaea5d79cab984ad0b94be14f82/ormsgpack-1.12.1-cp313-cp313-win_amd64.whl", hash = "sha256:c418390b47a1d367e803f6c187f77e4d67c7ae07ba962e3a4a019001f4b0291a", size = 116195 },
4046
+ { url = "https://files.pythonhosted.org/packages/7d/64/bfa5f4a34d0f15c6aba1b73e73f7441a66d635bd03249d334a4796b7a924/ormsgpack-1.12.1-cp313-cp313-win_arm64.whl", hash = "sha256:cfa22c91cffc10a7fbd43729baff2de7d9c28cef2509085a704168ae31f02568", size = 109986 },
4047
+ { url = "https://files.pythonhosted.org/packages/87/0e/78e5697164e3223b9b216c13e99f1acbc1ee9833490d68842b13da8ba883/ormsgpack-1.12.1-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:b93c91efb1a70751a1902a5b43b27bd8fd38e0ca0365cf2cde2716423c15c3a6", size = 376758 },
4048
+ { url = "https://files.pythonhosted.org/packages/2c/0e/3a3cbb64703263d7bbaed7effa3ce78cb9add360a60aa7c544d7df28b641/ormsgpack-1.12.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cf0ea0389167b5fa8d2933dd3f33e887ec4ba68f89c25214d7eec4afd746d22", size = 202487 },
4049
+ { url = "https://files.pythonhosted.org/packages/d7/2c/807ebe2b77995599bbb1dec8c3f450d5d7dddee14ce3e1e71dc60e2e2a74/ormsgpack-1.12.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f4c29af837f35af3375070689e781161e7cf019eb2f7cd641734ae45cd001c0d", size = 210853 },
4050
+ { url = "https://files.pythonhosted.org/packages/25/57/2cdfc354e3ad8e847628f511f4d238799d90e9e090941e50b9d5ba955ae2/ormsgpack-1.12.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:336fc65aa0fe65896a3dabaae31e332a0a98b4a00ad7b0afde21a7505fd23ff3", size = 211545 },
4051
+ { url = "https://files.pythonhosted.org/packages/76/1d/c6fda560e4a8ff865b3aec8a86f7c95ab53f4532193a6ae4ab9db35f85aa/ormsgpack-1.12.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:940f60aabfefe71dd6b82cb33f4ff10b2e7f5fcfa5f103cdb0a23b6aae4c713c", size = 386333 },
4052
+ { url = "https://files.pythonhosted.org/packages/fc/3e/715081b36fceb8b497c68b87d384e1cc6d9c9c130ce3b435634d3d785b86/ormsgpack-1.12.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:596ad9e1b6d4c95595c54aaf49b1392609ca68f562ce06f4f74a5bc4053bcda4", size = 479701 },
4053
+ { url = "https://files.pythonhosted.org/packages/6d/cf/01ad04def42b3970fc1a302c07f4b46339edf62ef9650247097260471f40/ormsgpack-1.12.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:575210e8fcbc7b0375026ba040a5eef223e9f66a4453d9623fc23282ae09c3c8", size = 388148 },
4054
+ { url = "https://files.pythonhosted.org/packages/15/91/1fff2fc2b5943c740028f339154e7103c8f2edf1a881d9fbba2ce11c3b1d/ormsgpack-1.12.1-cp314-cp314-win_amd64.whl", hash = "sha256:647daa3718572280893456be44c60aea6690b7f2edc54c55648ee66e8f06550f", size = 116201 },
4055
+ { url = "https://files.pythonhosted.org/packages/ed/66/142b542aed3f96002c7d1c33507ca6e1e0d0a42b9253ab27ef7ed5793bd9/ormsgpack-1.12.1-cp314-cp314-win_arm64.whl", hash = "sha256:a8b3ab762a6deaf1b6490ab46dda0c51528cf8037e0246c40875c6fe9e37b699", size = 110029 },
4056
+ { url = "https://files.pythonhosted.org/packages/38/b3/ef4494438c90359e1547eaed3c5ec46e2c431d59a3de2af4e70ebd594c49/ormsgpack-1.12.1-cp314-cp314t-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:12087214e436c1f6c28491949571abea759a63111908c4f7266586d78144d7a8", size = 376777 },
4057
+ { url = "https://files.pythonhosted.org/packages/05/a0/1149a7163f8b0dfbc64bf9099b6f16d102ad3b03bcc11afee198d751da2d/ormsgpack-1.12.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e6d54c14cf86ef13f10ccade94d1e7de146aa9b17d371e18b16e95f329393b7", size = 202490 },
4058
+ { url = "https://files.pythonhosted.org/packages/68/82/f2ec5e758d6a7106645cca9bb7137d98bce5d363789fa94075be6572057c/ormsgpack-1.12.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f3584d07882b7ea2a1a589f795a3af97fe4c2932b739408e6d1d9d286cad862", size = 211733 },
4059
  ]
4060
 
4061
  [[package]]
 
5831
  { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795 },
5832
  ]
5833
 
5834
+ [[package]]
5835
+ name = "uuid-utils"
5836
+ version = "0.12.0"
5837
+ source = { registry = "https://pypi.org/simple" }
5838
+ sdist = { url = "https://files.pythonhosted.org/packages/0b/0e/512fb221e4970c2f75ca9dae412d320b7d9ddc9f2b15e04ea8e44710396c/uuid_utils-0.12.0.tar.gz", hash = "sha256:252bd3d311b5d6b7f5dfce7a5857e27bb4458f222586bb439463231e5a9cbd64", size = 20889 }
5839
+ wheels = [
5840
+ { url = "https://files.pythonhosted.org/packages/8a/43/de5cd49a57b6293b911b6a9a62fc03e55db9f964da7d5882d9edbee1e9d2/uuid_utils-0.12.0-cp39-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:3b9b30707659292f207b98f294b0e081f6d77e1fbc760ba5b41331a39045f514", size = 603197 },
5841
+ { url = "https://files.pythonhosted.org/packages/02/fa/5fd1d8c9234e44f0c223910808cde0de43bb69f7df1349e49b1afa7f2baa/uuid_utils-0.12.0-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:add3d820c7ec14ed37317375bea30249699c5d08ff4ae4dbee9fc9bce3bfbf65", size = 305168 },
5842
+ { url = "https://files.pythonhosted.org/packages/c8/c6/8633ac9942bf9dc97a897b5154e5dcffa58816ec4dd780b3b12b559ff05c/uuid_utils-0.12.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b8fce83ecb3b16af29c7809669056c4b6e7cc912cab8c6d07361645de12dd79", size = 340580 },
5843
+ { url = "https://files.pythonhosted.org/packages/f3/88/8a61307b04b4da1c576373003e6d857a04dade52ab035151d62cb84d5cb5/uuid_utils-0.12.0-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ec921769afcb905035d785582b0791d02304a7850fbd6ce924c1a8976380dfc6", size = 346771 },
5844
+ { url = "https://files.pythonhosted.org/packages/1c/fb/aab2dcf94b991e62aa167457c7825b9b01055b884b888af926562864398c/uuid_utils-0.12.0-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6f3b060330f5899a92d5c723547dc6a95adef42433e9748f14c66859a7396664", size = 474781 },
5845
+ { url = "https://files.pythonhosted.org/packages/5a/7a/dbd5e49c91d6c86dba57158bbfa0e559e1ddf377bb46dcfd58aea4f0d567/uuid_utils-0.12.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:908dfef7f0bfcf98d406e5dc570c25d2f2473e49b376de41792b6e96c1d5d291", size = 343685 },
5846
+ { url = "https://files.pythonhosted.org/packages/1a/19/8c4b1d9f450159733b8be421a4e1fb03533709b80ed3546800102d085572/uuid_utils-0.12.0-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4c6a24148926bd0ca63e8a2dabf4cc9dc329a62325b3ad6578ecd60fbf926506", size = 366482 },
5847
+ { url = "https://files.pythonhosted.org/packages/82/43/c79a6e45687647f80a159c8ba34346f287b065452cc419d07d2212d38420/uuid_utils-0.12.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:64a91e632669f059ef605f1771d28490b1d310c26198e46f754e8846dddf12f4", size = 523132 },
5848
+ { url = "https://files.pythonhosted.org/packages/5a/a2/b2d75a621260a40c438aa88593827dfea596d18316520a99e839f7a5fb9d/uuid_utils-0.12.0-cp39-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:93c082212470bb4603ca3975916c205a9d7ef1443c0acde8fbd1e0f5b36673c7", size = 614218 },
5849
+ { url = "https://files.pythonhosted.org/packages/13/6b/ba071101626edd5a6dabf8525c9a1537ff3d885dbc210540574a03901fef/uuid_utils-0.12.0-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:431b1fb7283ba974811b22abd365f2726f8f821ab33f0f715be389640e18d039", size = 546241 },
5850
+ { url = "https://files.pythonhosted.org/packages/01/12/9a942b81c0923268e6d85bf98d8f0a61fcbcd5e432fef94fdf4ce2ef8748/uuid_utils-0.12.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2ffd7838c40149100299fa37cbd8bab5ee382372e8e65a148002a37d380df7c8", size = 511842 },
5851
+ { url = "https://files.pythonhosted.org/packages/a9/a7/c326f5163dd48b79368b87d8a05f5da4668dd228a3f5ca9d79d5fee2fc40/uuid_utils-0.12.0-cp39-abi3-win32.whl", hash = "sha256:487f17c0fee6cbc1d8b90fe811874174a9b1b5683bf2251549e302906a50fed3", size = 179088 },
5852
+ { url = "https://files.pythonhosted.org/packages/38/92/41c8734dd97213ee1d5ae435cf4499705dc4f2751e3b957fd12376f61784/uuid_utils-0.12.0-cp39-abi3-win_amd64.whl", hash = "sha256:9598e7c9da40357ae8fffc5d6938b1a7017f09a1acbcc95e14af8c65d48c655a", size = 183003 },
5853
+ { url = "https://files.pythonhosted.org/packages/c9/f9/52ab0359618987331a1f739af837d26168a4b16281c9c3ab46519940c628/uuid_utils-0.12.0-cp39-abi3-win_arm64.whl", hash = "sha256:c9bea7c5b2aa6f57937ebebeee4d4ef2baad10f86f1b97b58a3f6f34c14b4e84", size = 182975 },
5854
+ { url = "https://files.pythonhosted.org/packages/ef/f7/6c55b7722cede3b424df02ed5cddb25c19543abda2f95fa4cfc34a892ae5/uuid_utils-0.12.0-pp311-pypy311_pp73-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:e2209d361f2996966ab7114f49919eb6aaeabc6041672abbbbf4fdbb8ec1acc0", size = 593065 },
5855
+ { url = "https://files.pythonhosted.org/packages/b8/40/ce5fe8e9137dbd5570e0016c2584fca43ad81b11a1cef809a1a1b4952ab7/uuid_utils-0.12.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:d9636bcdbd6cfcad2b549c352b669412d0d1eb09be72044a2f13e498974863cd", size = 300047 },
5856
+ { url = "https://files.pythonhosted.org/packages/fb/9b/31c5d0736d7b118f302c50214e581f40e904305d8872eb0f0c921d50e138/uuid_utils-0.12.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8cd8543a3419251fb78e703ce3b15fdfafe1b7c542cf40caf0775e01db7e7674", size = 335165 },
5857
+ { url = "https://files.pythonhosted.org/packages/f6/5c/d80b4d08691c9d7446d0ad58fd41503081a662cfd2c7640faf68c64d8098/uuid_utils-0.12.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e98db2d8977c052cb307ae1cb5cc37a21715e8d415dbc65863b039397495a013", size = 341437 },
5858
+ { url = "https://files.pythonhosted.org/packages/f6/b3/9dccdc6f3c22f6ef5bd381ae559173f8a1ae185ae89ed1f39f499d9d8b02/uuid_utils-0.12.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8f2bdf5e4ffeb259ef6d15edae92aed60a1d6f07cbfab465d836f6b12b48da8", size = 469123 },
5859
+ { url = "https://files.pythonhosted.org/packages/fd/90/6c35ef65fbc49f8189729839b793a4a74a7dd8c5aa5eb56caa93f8c97732/uuid_utils-0.12.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c3ec53c0cb15e1835870c139317cc5ec06e35aa22843e3ed7d9c74f23f23898", size = 335892 },
5860
+ { url = "https://files.pythonhosted.org/packages/6b/c7/e3f3ce05c5af2bf86a0938d22165affe635f4dcbfd5687b1dacc042d3e0e/uuid_utils-0.12.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:84e5c0eba209356f7f389946a3a47b2cc2effd711b3fc7c7f155ad9f7d45e8a3", size = 360693 },
5861
+ ]
5862
+
5863
  [[package]]
5864
  name = "uvicorn"
5865
  version = "0.37.0"