aiqtoolkit 1.1.0a20250503__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of aiqtoolkit might be problematic. Click here for more details.

Files changed (314) hide show
  1. aiq/agent/__init__.py +0 -0
  2. aiq/agent/base.py +76 -0
  3. aiq/agent/dual_node.py +67 -0
  4. aiq/agent/react_agent/__init__.py +0 -0
  5. aiq/agent/react_agent/agent.py +322 -0
  6. aiq/agent/react_agent/output_parser.py +104 -0
  7. aiq/agent/react_agent/prompt.py +46 -0
  8. aiq/agent/react_agent/register.py +148 -0
  9. aiq/agent/reasoning_agent/__init__.py +0 -0
  10. aiq/agent/reasoning_agent/reasoning_agent.py +224 -0
  11. aiq/agent/register.py +23 -0
  12. aiq/agent/rewoo_agent/__init__.py +0 -0
  13. aiq/agent/rewoo_agent/agent.py +410 -0
  14. aiq/agent/rewoo_agent/prompt.py +108 -0
  15. aiq/agent/rewoo_agent/register.py +158 -0
  16. aiq/agent/tool_calling_agent/__init__.py +0 -0
  17. aiq/agent/tool_calling_agent/agent.py +123 -0
  18. aiq/agent/tool_calling_agent/register.py +105 -0
  19. aiq/builder/__init__.py +0 -0
  20. aiq/builder/builder.py +223 -0
  21. aiq/builder/component_utils.py +303 -0
  22. aiq/builder/context.py +212 -0
  23. aiq/builder/embedder.py +24 -0
  24. aiq/builder/eval_builder.py +116 -0
  25. aiq/builder/evaluator.py +29 -0
  26. aiq/builder/framework_enum.py +24 -0
  27. aiq/builder/front_end.py +73 -0
  28. aiq/builder/function.py +297 -0
  29. aiq/builder/function_base.py +376 -0
  30. aiq/builder/function_info.py +627 -0
  31. aiq/builder/intermediate_step_manager.py +127 -0
  32. aiq/builder/llm.py +25 -0
  33. aiq/builder/retriever.py +25 -0
  34. aiq/builder/user_interaction_manager.py +71 -0
  35. aiq/builder/workflow.py +143 -0
  36. aiq/builder/workflow_builder.py +749 -0
  37. aiq/cli/__init__.py +14 -0
  38. aiq/cli/cli_utils/__init__.py +0 -0
  39. aiq/cli/cli_utils/config_override.py +233 -0
  40. aiq/cli/cli_utils/validation.py +37 -0
  41. aiq/cli/commands/__init__.py +0 -0
  42. aiq/cli/commands/configure/__init__.py +0 -0
  43. aiq/cli/commands/configure/channel/__init__.py +0 -0
  44. aiq/cli/commands/configure/channel/add.py +28 -0
  45. aiq/cli/commands/configure/channel/channel.py +36 -0
  46. aiq/cli/commands/configure/channel/remove.py +30 -0
  47. aiq/cli/commands/configure/channel/update.py +30 -0
  48. aiq/cli/commands/configure/configure.py +33 -0
  49. aiq/cli/commands/evaluate.py +139 -0
  50. aiq/cli/commands/info/__init__.py +14 -0
  51. aiq/cli/commands/info/info.py +37 -0
  52. aiq/cli/commands/info/list_channels.py +32 -0
  53. aiq/cli/commands/info/list_components.py +129 -0
  54. aiq/cli/commands/registry/__init__.py +14 -0
  55. aiq/cli/commands/registry/publish.py +88 -0
  56. aiq/cli/commands/registry/pull.py +118 -0
  57. aiq/cli/commands/registry/registry.py +38 -0
  58. aiq/cli/commands/registry/remove.py +108 -0
  59. aiq/cli/commands/registry/search.py +155 -0
  60. aiq/cli/commands/start.py +250 -0
  61. aiq/cli/commands/uninstall.py +83 -0
  62. aiq/cli/commands/validate.py +47 -0
  63. aiq/cli/commands/workflow/__init__.py +14 -0
  64. aiq/cli/commands/workflow/templates/__init__.py.j2 +0 -0
  65. aiq/cli/commands/workflow/templates/config.yml.j2 +16 -0
  66. aiq/cli/commands/workflow/templates/pyproject.toml.j2 +22 -0
  67. aiq/cli/commands/workflow/templates/register.py.j2 +5 -0
  68. aiq/cli/commands/workflow/templates/workflow.py.j2 +36 -0
  69. aiq/cli/commands/workflow/workflow.py +37 -0
  70. aiq/cli/commands/workflow/workflow_commands.py +313 -0
  71. aiq/cli/entrypoint.py +133 -0
  72. aiq/cli/main.py +44 -0
  73. aiq/cli/register_workflow.py +408 -0
  74. aiq/cli/type_registry.py +879 -0
  75. aiq/data_models/__init__.py +14 -0
  76. aiq/data_models/api_server.py +588 -0
  77. aiq/data_models/common.py +143 -0
  78. aiq/data_models/component.py +46 -0
  79. aiq/data_models/component_ref.py +135 -0
  80. aiq/data_models/config.py +349 -0
  81. aiq/data_models/dataset_handler.py +122 -0
  82. aiq/data_models/discovery_metadata.py +269 -0
  83. aiq/data_models/embedder.py +26 -0
  84. aiq/data_models/evaluate.py +104 -0
  85. aiq/data_models/evaluator.py +26 -0
  86. aiq/data_models/front_end.py +26 -0
  87. aiq/data_models/function.py +30 -0
  88. aiq/data_models/function_dependencies.py +64 -0
  89. aiq/data_models/interactive.py +237 -0
  90. aiq/data_models/intermediate_step.py +269 -0
  91. aiq/data_models/invocation_node.py +38 -0
  92. aiq/data_models/llm.py +26 -0
  93. aiq/data_models/logging.py +26 -0
  94. aiq/data_models/memory.py +26 -0
  95. aiq/data_models/profiler.py +53 -0
  96. aiq/data_models/registry_handler.py +26 -0
  97. aiq/data_models/retriever.py +30 -0
  98. aiq/data_models/step_adaptor.py +64 -0
  99. aiq/data_models/streaming.py +33 -0
  100. aiq/data_models/swe_bench_model.py +54 -0
  101. aiq/data_models/telemetry_exporter.py +26 -0
  102. aiq/embedder/__init__.py +0 -0
  103. aiq/embedder/langchain_client.py +41 -0
  104. aiq/embedder/nim_embedder.py +58 -0
  105. aiq/embedder/openai_embedder.py +42 -0
  106. aiq/embedder/register.py +24 -0
  107. aiq/eval/__init__.py +14 -0
  108. aiq/eval/config.py +42 -0
  109. aiq/eval/dataset_handler/__init__.py +0 -0
  110. aiq/eval/dataset_handler/dataset_downloader.py +106 -0
  111. aiq/eval/dataset_handler/dataset_filter.py +52 -0
  112. aiq/eval/dataset_handler/dataset_handler.py +169 -0
  113. aiq/eval/evaluate.py +323 -0
  114. aiq/eval/evaluator/__init__.py +14 -0
  115. aiq/eval/evaluator/evaluator_model.py +44 -0
  116. aiq/eval/intermediate_step_adapter.py +93 -0
  117. aiq/eval/rag_evaluator/__init__.py +0 -0
  118. aiq/eval/rag_evaluator/evaluate.py +138 -0
  119. aiq/eval/rag_evaluator/register.py +138 -0
  120. aiq/eval/register.py +23 -0
  121. aiq/eval/remote_workflow.py +128 -0
  122. aiq/eval/runtime_event_subscriber.py +52 -0
  123. aiq/eval/swe_bench_evaluator/__init__.py +0 -0
  124. aiq/eval/swe_bench_evaluator/evaluate.py +215 -0
  125. aiq/eval/swe_bench_evaluator/register.py +36 -0
  126. aiq/eval/trajectory_evaluator/__init__.py +0 -0
  127. aiq/eval/trajectory_evaluator/evaluate.py +118 -0
  128. aiq/eval/trajectory_evaluator/register.py +40 -0
  129. aiq/eval/tunable_rag_evaluator/__init__.py +0 -0
  130. aiq/eval/tunable_rag_evaluator/evaluate.py +263 -0
  131. aiq/eval/tunable_rag_evaluator/register.py +50 -0
  132. aiq/eval/utils/__init__.py +0 -0
  133. aiq/eval/utils/output_uploader.py +131 -0
  134. aiq/eval/utils/tqdm_position_registry.py +40 -0
  135. aiq/front_ends/__init__.py +14 -0
  136. aiq/front_ends/console/__init__.py +14 -0
  137. aiq/front_ends/console/console_front_end_config.py +32 -0
  138. aiq/front_ends/console/console_front_end_plugin.py +107 -0
  139. aiq/front_ends/console/register.py +25 -0
  140. aiq/front_ends/cron/__init__.py +14 -0
  141. aiq/front_ends/fastapi/__init__.py +14 -0
  142. aiq/front_ends/fastapi/fastapi_front_end_config.py +150 -0
  143. aiq/front_ends/fastapi/fastapi_front_end_plugin.py +103 -0
  144. aiq/front_ends/fastapi/fastapi_front_end_plugin_worker.py +607 -0
  145. aiq/front_ends/fastapi/intermediate_steps_subscriber.py +80 -0
  146. aiq/front_ends/fastapi/job_store.py +161 -0
  147. aiq/front_ends/fastapi/main.py +70 -0
  148. aiq/front_ends/fastapi/message_handler.py +279 -0
  149. aiq/front_ends/fastapi/message_validator.py +345 -0
  150. aiq/front_ends/fastapi/register.py +25 -0
  151. aiq/front_ends/fastapi/response_helpers.py +195 -0
  152. aiq/front_ends/fastapi/step_adaptor.py +315 -0
  153. aiq/front_ends/fastapi/websocket.py +148 -0
  154. aiq/front_ends/mcp/__init__.py +14 -0
  155. aiq/front_ends/mcp/mcp_front_end_config.py +32 -0
  156. aiq/front_ends/mcp/mcp_front_end_plugin.py +93 -0
  157. aiq/front_ends/mcp/register.py +27 -0
  158. aiq/front_ends/mcp/tool_converter.py +242 -0
  159. aiq/front_ends/register.py +22 -0
  160. aiq/front_ends/simple_base/__init__.py +14 -0
  161. aiq/front_ends/simple_base/simple_front_end_plugin_base.py +52 -0
  162. aiq/llm/__init__.py +0 -0
  163. aiq/llm/nim_llm.py +45 -0
  164. aiq/llm/openai_llm.py +45 -0
  165. aiq/llm/register.py +22 -0
  166. aiq/llm/utils/__init__.py +14 -0
  167. aiq/llm/utils/env_config_value.py +94 -0
  168. aiq/llm/utils/error.py +17 -0
  169. aiq/memory/__init__.py +20 -0
  170. aiq/memory/interfaces.py +183 -0
  171. aiq/memory/models.py +102 -0
  172. aiq/meta/module_to_distro.json +3 -0
  173. aiq/meta/pypi.md +59 -0
  174. aiq/observability/__init__.py +0 -0
  175. aiq/observability/async_otel_listener.py +433 -0
  176. aiq/observability/register.py +99 -0
  177. aiq/plugins/.namespace +1 -0
  178. aiq/profiler/__init__.py +0 -0
  179. aiq/profiler/callbacks/__init__.py +0 -0
  180. aiq/profiler/callbacks/agno_callback_handler.py +295 -0
  181. aiq/profiler/callbacks/base_callback_class.py +20 -0
  182. aiq/profiler/callbacks/langchain_callback_handler.py +278 -0
  183. aiq/profiler/callbacks/llama_index_callback_handler.py +205 -0
  184. aiq/profiler/callbacks/semantic_kernel_callback_handler.py +238 -0
  185. aiq/profiler/callbacks/token_usage_base_model.py +27 -0
  186. aiq/profiler/data_frame_row.py +51 -0
  187. aiq/profiler/decorators/__init__.py +0 -0
  188. aiq/profiler/decorators/framework_wrapper.py +131 -0
  189. aiq/profiler/decorators/function_tracking.py +254 -0
  190. aiq/profiler/forecasting/__init__.py +0 -0
  191. aiq/profiler/forecasting/config.py +18 -0
  192. aiq/profiler/forecasting/model_trainer.py +75 -0
  193. aiq/profiler/forecasting/models/__init__.py +22 -0
  194. aiq/profiler/forecasting/models/forecasting_base_model.py +40 -0
  195. aiq/profiler/forecasting/models/linear_model.py +196 -0
  196. aiq/profiler/forecasting/models/random_forest_regressor.py +268 -0
  197. aiq/profiler/inference_metrics_model.py +25 -0
  198. aiq/profiler/inference_optimization/__init__.py +0 -0
  199. aiq/profiler/inference_optimization/bottleneck_analysis/__init__.py +0 -0
  200. aiq/profiler/inference_optimization/bottleneck_analysis/nested_stack_analysis.py +452 -0
  201. aiq/profiler/inference_optimization/bottleneck_analysis/simple_stack_analysis.py +258 -0
  202. aiq/profiler/inference_optimization/data_models.py +386 -0
  203. aiq/profiler/inference_optimization/experimental/__init__.py +0 -0
  204. aiq/profiler/inference_optimization/experimental/concurrency_spike_analysis.py +468 -0
  205. aiq/profiler/inference_optimization/experimental/prefix_span_analysis.py +405 -0
  206. aiq/profiler/inference_optimization/llm_metrics.py +212 -0
  207. aiq/profiler/inference_optimization/prompt_caching.py +163 -0
  208. aiq/profiler/inference_optimization/token_uniqueness.py +107 -0
  209. aiq/profiler/inference_optimization/workflow_runtimes.py +72 -0
  210. aiq/profiler/intermediate_property_adapter.py +102 -0
  211. aiq/profiler/profile_runner.py +433 -0
  212. aiq/profiler/utils.py +184 -0
  213. aiq/registry_handlers/__init__.py +0 -0
  214. aiq/registry_handlers/local/__init__.py +0 -0
  215. aiq/registry_handlers/local/local_handler.py +176 -0
  216. aiq/registry_handlers/local/register_local.py +37 -0
  217. aiq/registry_handlers/metadata_factory.py +60 -0
  218. aiq/registry_handlers/package_utils.py +198 -0
  219. aiq/registry_handlers/pypi/__init__.py +0 -0
  220. aiq/registry_handlers/pypi/pypi_handler.py +251 -0
  221. aiq/registry_handlers/pypi/register_pypi.py +40 -0
  222. aiq/registry_handlers/register.py +21 -0
  223. aiq/registry_handlers/registry_handler_base.py +157 -0
  224. aiq/registry_handlers/rest/__init__.py +0 -0
  225. aiq/registry_handlers/rest/register_rest.py +56 -0
  226. aiq/registry_handlers/rest/rest_handler.py +237 -0
  227. aiq/registry_handlers/schemas/__init__.py +0 -0
  228. aiq/registry_handlers/schemas/headers.py +42 -0
  229. aiq/registry_handlers/schemas/package.py +68 -0
  230. aiq/registry_handlers/schemas/publish.py +63 -0
  231. aiq/registry_handlers/schemas/pull.py +82 -0
  232. aiq/registry_handlers/schemas/remove.py +36 -0
  233. aiq/registry_handlers/schemas/search.py +91 -0
  234. aiq/registry_handlers/schemas/status.py +47 -0
  235. aiq/retriever/__init__.py +0 -0
  236. aiq/retriever/interface.py +37 -0
  237. aiq/retriever/milvus/__init__.py +14 -0
  238. aiq/retriever/milvus/register.py +81 -0
  239. aiq/retriever/milvus/retriever.py +228 -0
  240. aiq/retriever/models.py +74 -0
  241. aiq/retriever/nemo_retriever/__init__.py +14 -0
  242. aiq/retriever/nemo_retriever/register.py +60 -0
  243. aiq/retriever/nemo_retriever/retriever.py +190 -0
  244. aiq/retriever/register.py +22 -0
  245. aiq/runtime/__init__.py +14 -0
  246. aiq/runtime/loader.py +188 -0
  247. aiq/runtime/runner.py +176 -0
  248. aiq/runtime/session.py +136 -0
  249. aiq/runtime/user_metadata.py +131 -0
  250. aiq/settings/__init__.py +0 -0
  251. aiq/settings/global_settings.py +318 -0
  252. aiq/test/.namespace +1 -0
  253. aiq/tool/__init__.py +0 -0
  254. aiq/tool/code_execution/__init__.py +0 -0
  255. aiq/tool/code_execution/code_sandbox.py +188 -0
  256. aiq/tool/code_execution/local_sandbox/Dockerfile.sandbox +60 -0
  257. aiq/tool/code_execution/local_sandbox/__init__.py +13 -0
  258. aiq/tool/code_execution/local_sandbox/local_sandbox_server.py +79 -0
  259. aiq/tool/code_execution/local_sandbox/sandbox.requirements.txt +4 -0
  260. aiq/tool/code_execution/local_sandbox/start_local_sandbox.sh +25 -0
  261. aiq/tool/code_execution/register.py +70 -0
  262. aiq/tool/code_execution/utils.py +100 -0
  263. aiq/tool/datetime_tools.py +42 -0
  264. aiq/tool/document_search.py +141 -0
  265. aiq/tool/github_tools/__init__.py +0 -0
  266. aiq/tool/github_tools/create_github_commit.py +133 -0
  267. aiq/tool/github_tools/create_github_issue.py +87 -0
  268. aiq/tool/github_tools/create_github_pr.py +106 -0
  269. aiq/tool/github_tools/get_github_file.py +106 -0
  270. aiq/tool/github_tools/get_github_issue.py +166 -0
  271. aiq/tool/github_tools/get_github_pr.py +256 -0
  272. aiq/tool/github_tools/update_github_issue.py +100 -0
  273. aiq/tool/mcp/__init__.py +14 -0
  274. aiq/tool/mcp/mcp_client.py +220 -0
  275. aiq/tool/mcp/mcp_tool.py +76 -0
  276. aiq/tool/memory_tools/__init__.py +0 -0
  277. aiq/tool/memory_tools/add_memory_tool.py +67 -0
  278. aiq/tool/memory_tools/delete_memory_tool.py +67 -0
  279. aiq/tool/memory_tools/get_memory_tool.py +72 -0
  280. aiq/tool/nvidia_rag.py +95 -0
  281. aiq/tool/register.py +36 -0
  282. aiq/tool/retriever.py +89 -0
  283. aiq/utils/__init__.py +0 -0
  284. aiq/utils/data_models/__init__.py +0 -0
  285. aiq/utils/data_models/schema_validator.py +58 -0
  286. aiq/utils/debugging_utils.py +43 -0
  287. aiq/utils/exception_handlers/__init__.py +0 -0
  288. aiq/utils/exception_handlers/schemas.py +114 -0
  289. aiq/utils/io/__init__.py +0 -0
  290. aiq/utils/io/yaml_tools.py +119 -0
  291. aiq/utils/metadata_utils.py +74 -0
  292. aiq/utils/optional_imports.py +142 -0
  293. aiq/utils/producer_consumer_queue.py +178 -0
  294. aiq/utils/reactive/__init__.py +0 -0
  295. aiq/utils/reactive/base/__init__.py +0 -0
  296. aiq/utils/reactive/base/observable_base.py +65 -0
  297. aiq/utils/reactive/base/observer_base.py +55 -0
  298. aiq/utils/reactive/base/subject_base.py +79 -0
  299. aiq/utils/reactive/observable.py +59 -0
  300. aiq/utils/reactive/observer.py +76 -0
  301. aiq/utils/reactive/subject.py +131 -0
  302. aiq/utils/reactive/subscription.py +49 -0
  303. aiq/utils/settings/__init__.py +0 -0
  304. aiq/utils/settings/global_settings.py +197 -0
  305. aiq/utils/type_converter.py +232 -0
  306. aiq/utils/type_utils.py +397 -0
  307. aiq/utils/url_utils.py +27 -0
  308. aiqtoolkit-1.1.0a20250503.dist-info/METADATA +330 -0
  309. aiqtoolkit-1.1.0a20250503.dist-info/RECORD +314 -0
  310. aiqtoolkit-1.1.0a20250503.dist-info/WHEEL +5 -0
  311. aiqtoolkit-1.1.0a20250503.dist-info/entry_points.txt +17 -0
  312. aiqtoolkit-1.1.0a20250503.dist-info/licenses/LICENSE-3rd-party.txt +3686 -0
  313. aiqtoolkit-1.1.0a20250503.dist-info/licenses/LICENSE.md +201 -0
  314. aiqtoolkit-1.1.0a20250503.dist-info/top_level.txt +1 -0
@@ -0,0 +1,103 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: Apache-2.0
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ import os
17
+ import tempfile
18
+ import typing
19
+
20
+ from aiq.builder.front_end import FrontEndBase
21
+ from aiq.front_ends.fastapi.fastapi_front_end_config import FastApiFrontEndConfig
22
+ from aiq.front_ends.fastapi.fastapi_front_end_plugin_worker import FastApiFrontEndPluginWorkerBase
23
+ from aiq.front_ends.fastapi.main import get_app
24
+ from aiq.utils.io.yaml_tools import yaml_dump
25
+
26
+
27
+ class FastApiFrontEndPlugin(FrontEndBase[FastApiFrontEndConfig]):
28
+
29
+ def get_worker_class(self) -> type[FastApiFrontEndPluginWorkerBase]:
30
+ from aiq.front_ends.fastapi.fastapi_front_end_plugin_worker import FastApiFrontEndPluginWorker
31
+
32
+ return FastApiFrontEndPluginWorker
33
+
34
+ @typing.final
35
+ def get_worker_class_name(self) -> str:
36
+
37
+ if (self.front_end_config.runner_class):
38
+ return self.front_end_config.runner_class
39
+
40
+ worker_class = self.get_worker_class()
41
+
42
+ return f"{worker_class.__module__}.{worker_class.__qualname__}"
43
+
44
+ async def run(self):
45
+
46
+ # Write the entire config to a temporary file
47
+ with tempfile.NamedTemporaryFile(mode="w", prefix="aiq_config", suffix=".yml", delete=True) as config_file:
48
+
49
+ # Get as dict
50
+ config_dict = self.full_config.model_dump(mode="json", by_alias=True, round_trip=True)
51
+
52
+ # Write to YAML file
53
+ yaml_dump(config_dict, config_file)
54
+
55
+ # Set the config file in the environment
56
+ os.environ["AIQ_CONFIG_FILE"] = str(config_file.name)
57
+
58
+ # Set the worker class in the environment
59
+ os.environ["AIQ_FRONT_END_WORKER"] = self.get_worker_class_name()
60
+
61
+ if not self.front_end_config.use_gunicorn:
62
+ import uvicorn
63
+
64
+ reload_excludes = ["./.*"]
65
+
66
+ uvicorn.run("aiq.front_ends.fastapi.main:get_app",
67
+ host=self.front_end_config.host,
68
+ port=self.front_end_config.port,
69
+ workers=self.front_end_config.workers,
70
+ reload=self.front_end_config.reload,
71
+ factory=True,
72
+ reload_excludes=reload_excludes)
73
+
74
+ else:
75
+ app = get_app()
76
+
77
+ from gunicorn.app.wsgiapp import WSGIApplication
78
+
79
+ class StandaloneApplication(WSGIApplication):
80
+
81
+ def __init__(self, app, options=None):
82
+ self.options = options or {}
83
+ self.app = app
84
+ super().__init__()
85
+
86
+ def load_config(self):
87
+ config = {
88
+ key: value
89
+ for key, value in self.options.items() if key in self.cfg.settings and value is not None
90
+ }
91
+ for key, value in config.items():
92
+ self.cfg.set(key.lower(), value)
93
+
94
+ def load(self):
95
+ return self.app
96
+
97
+ options = {
98
+ "bind": f"{self.front_end_config.host}:{self.front_end_config.port}",
99
+ "workers": self.front_end_config.workers,
100
+ "worker_class": "uvicorn.workers.UvicornWorker",
101
+ }
102
+
103
+ StandaloneApplication(app, options=options).run()