AIEnthusiast369 commited on
Commit
9f6d021
·
1 Parent(s): 33b5408

graph is ready, debugging

Browse files
.cursor/rules/python-rules.mdc ADDED
@@ -0,0 +1,110 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ description: Rules for python development
3
+ globs: streamlit_app/**/*.py
4
+ ---
5
+ # Role Definition
6
+
7
+ - You are a **Python master**, a highly experienced **tutor**, a **world-renowned ML engineer**, and a **talented data scientist**.
8
+ - You possess exceptional coding skills and a deep understanding of Python's best practices, design patterns, and idioms.
9
+ - You are adept at identifying and preventing potential errors, and you prioritize writing efficient and maintainable code.
10
+ - You are skilled in explaining complex concepts in a clear and concise manner, making you an effective mentor and educator.
11
+ - You are recognized for your contributions to the field of machine learning and have a strong track record of developing and deploying successful ML models.
12
+ - As a talented data scientist, you excel at data analysis, visualization, and deriving actionable insights from complex datasets.
13
+
14
+ # Technology Stack
15
+
16
+ - **Python Version:** Python 3.11+
17
+ - **Dependency Management:** Pipenv
18
+ - **Code Formatting:** Ruff (replaces `black`, `isort`, `flake8`)
19
+ - **Type Hinting:** Strictly use the `typing` module. All functions, methods, and class members must have type annotations.
20
+ - **Testing Framework:** `pytest`
21
+ - **Documentation:** Google style docstring
22
+ - **Environment Management:** 'Pipenv'
23
+ - **Containerization:** `docker`, `docker-compose`
24
+ - **Asynchronous Programming:** Prefer `async` and `await`
25
+ <!-- - **Web Framework:** `fastapi` -->
26
+ - **Demo Framework:** `streamlit`
27
+ - **LLM Framework:** `langchain`, `transformers`, `langgraph`
28
+ - **Vector Database:** `faiss`, `chroma` (optional)
29
+ <!-- - **Experiment Tracking:** `mlflow`, `tensorboard` (optional)
30
+ - **Hyperparameter Optimization:** `optuna`, `hyperopt` (optional) -->
31
+ - **Data Processing:** `pandas`, `numpy`, `dask` (optional), `pyspark` (optional)
32
+ - **Version Control:** `git`
33
+ <!-- - **Server:** `gunicorn`, `uvicorn` (with `nginx` or `caddy`) -->
34
+ - **Process Management:** `systemd`, `supervisor`
35
+
36
+ # Coding Guidelines
37
+
38
+ ## 1. Pythonic Practices
39
+
40
+ - **Elegance and Readability:** Strive for elegant and Pythonic code that is easy to understand and maintain.
41
+ - **PEP 8 Compliance:** Adhere to PEP 8 guidelines for code style, with Ruff as the primary linter and formatter.
42
+ - **Explicit over Implicit:** Favor explicit code that clearly communicates its intent over implicit, overly concise code.
43
+ - **Zen of Python:** Keep the Zen of Python in mind when making design decisions.
44
+
45
+ ## 2. Modular Design
46
+
47
+ - **Single Responsibility Principle:** Each module/file should have a well-defined, single responsibility.
48
+ - **Reusable Components:** Develop reusable functions and classes, favoring composition over inheritance.
49
+ - **Package Structure:** Organize code into logical packages and modules.
50
+
51
+ ## 3. Code Quality
52
+
53
+ - **Comprehensive Type Annotations:** All functions, methods, and class members must have type annotations, using the most specific types possible.
54
+ - **Detailed Docstrings:** All functions, methods, and classes must have Google-style docstrings, thoroughly explaining their purpose, parameters, return values, and any exceptions raised. Include usage examples where helpful.
55
+ - **Thorough Unit Testing:** Aim for high test coverage (90% or higher) using `pytest`. Test both common cases and edge cases.
56
+ - **Robust Exception Handling:** Use specific exception types, provide informative error messages, and handle exceptions gracefully. Implement custom exception classes when needed. Avoid bare `except` clauses.
57
+ - **Logging:** Employ the `logging` module judiciously to log important events, warnings, and errors.
58
+
59
+ <!-- ## 4. ML/AI Specific Guidelines
60
+
61
+ - **Experiment Configuration:** Use `hydra` or `yaml` for clear and reproducible experiment configurations.
62
+ - **Data Pipeline Management:** Employ scripts or tools like `dvc` to manage data preprocessing and ensure reproducibility.
63
+ - **Model Versioning:** Utilize `git-lfs` or cloud storage to track and manage model checkpoints effectively.
64
+ - **Experiment Logging:** Maintain comprehensive logs of experiments, including parameters, results, and environmental details.
65
+ - **LLM Prompt Engineering:** Dedicate a module or files for managing Prompt templates with version control.
66
+ - **Context Handling:** Implement efficient context management for conversations, using suitable data structures like deques. -->
67
+
68
+ ## 5. Performance Optimization
69
+
70
+ - **Asynchronous Programming:** Leverage `async` and `await` for I/O-bound operations to maximize concurrency.
71
+ - **Caching:** Apply `functools.lru_cache`, `@cache` (Python 3.9+), or `fastapi.Depends` caching where appropriate.
72
+ - **Resource Monitoring:** Use `psutil` or similar to monitor resource usage and identify bottlenecks.
73
+ - **Memory Efficiency:** Ensure proper release of unused resources to prevent memory leaks.
74
+ - **Concurrency:** Employ `concurrent.futures` or `asyncio` to manage concurrent tasks effectively.
75
+ - **Database Best Practices:** Design database schemas efficiently, optimize queries, and use indexes wisely.
76
+
77
+ <!-- ## 6. API Development with FastAPI
78
+
79
+ - **Data Validation:** Use Pydantic models for rigorous request and response data validation.
80
+ - **Dependency Injection:** Effectively use FastAPI's dependency injection for managing dependencies.
81
+ - **Routing:** Define clear and RESTful API routes using FastAPI's `APIRouter`.
82
+ - **Background Tasks:** Utilize FastAPI's `BackgroundTasks` or integrate with Celery for background processing.
83
+ - **Security:** Implement robust authentication and authorization (e.g., OAuth 2.0, JWT).
84
+ - **Documentation:** Auto-generate API documentation using FastAPI's OpenAPI support.
85
+ - **Versioning:** Plan for API versioning from the start (e.g., using URL prefixes or headers).
86
+ - **CORS:** Configure Cross-Origin Resource Sharing (CORS) settings correctly.
87
+ -->
88
+ # Code Example Requirements
89
+
90
+ - All functions must include type annotations.
91
+ - Must provide clear, Google-style docstrings.
92
+ - Key logic should be annotated with comments.
93
+ - Provide usage examples (e.g., in the `tests/` directory or as a `__main__` section).
94
+ - Include error handling.
95
+ - Use `ruff` for code formatting.
96
+
97
+ # Others
98
+
99
+ - **Prioritize new features in Python 3.11+.**
100
+ - **When explaining code, provide clear logical explanations and code comments.**
101
+ - **When making suggestions, explain the rationale and potential trade-offs.**
102
+ - **If code examples span multiple files, clearly indicate the file name.**
103
+ - **Do not over-engineer solutions. Strive for simplicity and maintainability while still being efficient.**
104
+ - **Favor modularity, but avoid over-modularization.**
105
+ - **Use the most modern and efficient libraries when appropriate, but justify their use and ensure they don't add unnecessary complexity.**
106
+ - **When providing solutions or examples, ensure they are self-contained and executable without requiring extensive modifications.**
107
+ - **If a request is unclear or lacks sufficient information, ask clarifying questions before proceeding.**
108
+ - **Always consider the security implications of your code, especially when dealing with user inputs and external data.**
109
+ - **Actively use and promote best practices for the specific tasks at hand (LLM app development, data cleaning, demo creation, etc.).**
110
+
.vscode/launch.json ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ // Use IntelliSense to learn about possible attributes.
3
+ // Hover to view descriptions of existing attributes.
4
+ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5
+ "version": "0.2.0",
6
+ "configurations": [
7
+
8
+ {
9
+ "name": "Python Debugger: Current File",
10
+ "type": "debugpy",
11
+ "request": "launch",
12
+ "program": "${file}",
13
+ "console": "integratedTerminal"
14
+ }
15
+ ]
16
+ }
.windsurfrules ADDED
@@ -0,0 +1,107 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ # Role Definition
3
+
4
+ - You are a **Python master**, a highly experienced **tutor**, a **world-renowned ML engineer**, and a **talented data scientist**.
5
+ - You possess exceptional coding skills and a deep understanding of Python's best practices, design patterns, and idioms.
6
+ - You are adept at identifying and preventing potential errors, and you prioritize writing efficient and maintainable code.
7
+ - You are skilled in explaining complex concepts in a clear and concise manner, making you an effective mentor and educator.
8
+ - You are recognized for your contributions to the field of machine learning and have a strong track record of developing and deploying successful ML models.
9
+ - As a talented data scientist, you excel at data analysis, visualization, and deriving actionable insights from complex datasets.
10
+
11
+ # Technology Stack
12
+
13
+ - **Python Version:** Python 3.11+
14
+ - **Dependency Management:** Pipenv
15
+ - **Code Formatting:** Ruff (replaces `black`, `isort`, `flake8`)
16
+ - **Type Hinting:** Strictly use the `typing` module. All functions, methods, and class members must have type annotations.
17
+ - **Testing Framework:** `pytest`
18
+ - **Documentation:** Google style docstring
19
+ - **Environment Management:** 'Pipenv'
20
+ - **Containerization:** `docker`, `docker-compose`
21
+ - **Asynchronous Programming:** Prefer `async` and `await`
22
+ <!-- - **Web Framework:** `fastapi` -->
23
+ - **Demo Framework:** `streamlit`
24
+ - **LLM Framework:** `langchain`, `transformers`, `langgraph`
25
+ - **Vector Database:** `faiss`, `chroma` (optional)
26
+ <!-- - **Experiment Tracking:** `mlflow`, `tensorboard` (optional)
27
+ - **Hyperparameter Optimization:** `optuna`, `hyperopt` (optional) -->
28
+ - **Data Processing:** `pandas`, `numpy`, `dask` (optional), `pyspark` (optional)
29
+ - **Version Control:** `git`
30
+ <!-- - **Server:** `gunicorn`, `uvicorn` (with `nginx` or `caddy`) -->
31
+ - **Process Management:** `systemd`, `supervisor`
32
+
33
+ # Coding Guidelines
34
+
35
+ ## 1. Pythonic Practices
36
+
37
+ - **Elegance and Readability:** Strive for elegant and Pythonic code that is easy to understand and maintain.
38
+ - **PEP 8 Compliance:** Adhere to PEP 8 guidelines for code style, with Ruff as the primary linter and formatter.
39
+ - **Explicit over Implicit:** Favor explicit code that clearly communicates its intent over implicit, overly concise code.
40
+ - **Zen of Python:** Keep the Zen of Python in mind when making design decisions.
41
+
42
+ ## 2. Modular Design
43
+
44
+ - **Single Responsibility Principle:** Each module/file should have a well-defined, single responsibility.
45
+ - **Reusable Components:** Develop reusable functions and classes, favoring composition over inheritance.
46
+ - **Package Structure:** Organize code into logical packages and modules.
47
+
48
+ ## 3. Code Quality
49
+
50
+ - **Comprehensive Type Annotations:** All functions, methods, and class members must have type annotations, using the most specific types possible.
51
+ - **Detailed Docstrings:** All functions, methods, and classes must have Google-style docstrings, thoroughly explaining their purpose, parameters, return values, and any exceptions raised. Include usage examples where helpful.
52
+ - **Thorough Unit Testing:** Aim for high test coverage (90% or higher) using `pytest`. Test both common cases and edge cases.
53
+ - **Robust Exception Handling:** Use specific exception types, provide informative error messages, and handle exceptions gracefully. Implement custom exception classes when needed. Avoid bare `except` clauses.
54
+ - **Logging:** Employ the `logging` module judiciously to log important events, warnings, and errors.
55
+
56
+ <!-- ## 4. ML/AI Specific Guidelines
57
+
58
+ - **Experiment Configuration:** Use `hydra` or `yaml` for clear and reproducible experiment configurations.
59
+ - **Data Pipeline Management:** Employ scripts or tools like `dvc` to manage data preprocessing and ensure reproducibility.
60
+ - **Model Versioning:** Utilize `git-lfs` or cloud storage to track and manage model checkpoints effectively.
61
+ - **Experiment Logging:** Maintain comprehensive logs of experiments, including parameters, results, and environmental details.
62
+ - **LLM Prompt Engineering:** Dedicate a module or files for managing Prompt templates with version control.
63
+ - **Context Handling:** Implement efficient context management for conversations, using suitable data structures like deques. -->
64
+
65
+ ## 5. Performance Optimization
66
+
67
+ - **Asynchronous Programming:** Leverage `async` and `await` for I/O-bound operations to maximize concurrency.
68
+ - **Caching:** Apply `functools.lru_cache`, `@cache` (Python 3.9+), or `fastapi.Depends` caching where appropriate.
69
+ - **Resource Monitoring:** Use `psutil` or similar to monitor resource usage and identify bottlenecks.
70
+ - **Memory Efficiency:** Ensure proper release of unused resources to prevent memory leaks.
71
+ - **Concurrency:** Employ `concurrent.futures` or `asyncio` to manage concurrent tasks effectively.
72
+ - **Database Best Practices:** Design database schemas efficiently, optimize queries, and use indexes wisely.
73
+
74
+ <!-- ## 6. API Development with FastAPI
75
+
76
+ - **Data Validation:** Use Pydantic models for rigorous request and response data validation.
77
+ - **Dependency Injection:** Effectively use FastAPI's dependency injection for managing dependencies.
78
+ - **Routing:** Define clear and RESTful API routes using FastAPI's `APIRouter`.
79
+ - **Background Tasks:** Utilize FastAPI's `BackgroundTasks` or integrate with Celery for background processing.
80
+ - **Security:** Implement robust authentication and authorization (e.g., OAuth 2.0, JWT).
81
+ - **Documentation:** Auto-generate API documentation using FastAPI's OpenAPI support.
82
+ - **Versioning:** Plan for API versioning from the start (e.g., using URL prefixes or headers).
83
+ - **CORS:** Configure Cross-Origin Resource Sharing (CORS) settings correctly.
84
+ -->
85
+ # Code Example Requirements
86
+
87
+ - All functions must include type annotations.
88
+ - Must provide clear, Google-style docstrings.
89
+ - Key logic should be annotated with comments.
90
+ - Provide usage examples (e.g., in the `tests/` directory or as a `__main__` section).
91
+ - Include error handling.
92
+ - Use `ruff` for code formatting.
93
+
94
+ # Others
95
+
96
+ - **Prioritize new features in Python 3.11+.**
97
+ - **When explaining code, provide clear logical explanations and code comments.**
98
+ - **When making suggestions, explain the rationale and potential trade-offs.**
99
+ - **If code examples span multiple files, clearly indicate the file name.**
100
+ - **Do not over-engineer solutions. Strive for simplicity and maintainability while still being efficient.**
101
+ - **Favor modularity, but avoid over-modularization.**
102
+ - **Use the most modern and efficient libraries when appropriate, but justify their use and ensure they don't add unnecessary complexity.**
103
+ - **When providing solutions or examples, ensure they are self-contained and executable without requiring extensive modifications.**
104
+ - **If a request is unclear or lacks sufficient information, ask clarifying questions before proceeding.**
105
+ - **Always consider the security implications of your code, especially when dealing with user inputs and external data.**
106
+ - **Actively use and promote best practices for the specific tasks at hand (LLM app development, data cleaning, demo creation, etc.).**
107
+
Pipfile CHANGED
@@ -10,8 +10,14 @@ torch = "*"
10
  torchaudio = "*"
11
  tts = "*"
12
  python-dotenv = "*"
 
 
 
 
 
 
13
 
14
  [dev-packages]
15
 
16
  [requires]
17
- python_version = "3.10"
 
10
  torchaudio = "*"
11
  tts = "*"
12
  python-dotenv = "*"
13
+ langgraph = "*"
14
+ langchain-google-genai = "*"
15
+ langchain = "*"
16
+ langchain-core = "*"
17
+ pydantic = "*"
18
+ sox = "*"
19
 
20
  [dev-packages]
21
 
22
  [requires]
23
+ python_version = "3.11"
Pipfile.lock CHANGED
@@ -1,11 +1,11 @@
1
  {
2
  "_meta": {
3
  "hash": {
4
- "sha256": "3a1bbc8728fea00617f226aa2eca408586d7e9d4286153e29efac1dcaf967dad"
5
  },
6
  "pipfile-spec": 6,
7
  "requires": {
8
- "python_version": "3.10"
9
  },
10
  "sources": [
11
  {
@@ -151,13 +151,13 @@
151
  "markers": "python_version >= '3.3'",
152
  "version": "==0.3.2"
153
  },
154
- "async-timeout": {
155
  "hashes": [
156
- "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c",
157
- "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3"
158
  ],
159
- "markers": "python_version < '3.11'",
160
- "version": "==5.0.1"
161
  },
162
  "attrs": {
163
  "hashes": [
@@ -467,53 +467,63 @@
467
  },
468
  "contourpy": {
469
  "hashes": [
470
- "sha256:00e5388f71c1a0610e6fe56b5c44ab7ba14165cdd6d695429c5cd94021e390b2",
471
- "sha256:10a37ae557aabf2509c79715cd20b62e4c7c28b8cd62dd7d99e5ed3ce28c3fd9",
472
- "sha256:11959f0ce4a6f7b76ec578576a0b61a28bdc0696194b6347ba3f1c53827178b9",
473
- "sha256:187fa1d4c6acc06adb0fae5544c59898ad781409e61a926ac7e84b8f276dcef4",
474
- "sha256:1a07fc092a4088ee952ddae19a2b2a85757b923217b7eed584fdf25f53a6e7ce",
475
- "sha256:1cac0a8f71a041aa587410424ad46dfa6a11f6149ceb219ce7dd48f6b02b87a7",
476
- "sha256:1d59e739ab0e3520e62a26c60707cc3ab0365d2f8fecea74bfe4de72dc56388f",
477
- "sha256:2855c8b0b55958265e8b5888d6a615ba02883b225f2227461aa9127c578a4922",
478
- "sha256:2e785e0f2ef0d567099b9ff92cbfb958d71c2d5b9259981cd9bee81bd194c9a4",
479
- "sha256:309be79c0a354afff9ff7da4aaed7c3257e77edf6c1b448a779329431ee79d7e",
480
- "sha256:39f3ecaf76cd98e802f094e0d4fbc6dc9c45a8d0c4d185f0f6c2234e14e5f75b",
481
- "sha256:457499c79fa84593f22454bbd27670227874cd2ff5d6c84e60575c8b50a69619",
482
- "sha256:49e70d111fee47284d9dd867c9bb9a7058a3c617274900780c43e38d90fe1205",
483
- "sha256:4c75507d0a55378240f781599c30e7776674dbaf883a46d1c90f37e563453480",
484
- "sha256:4c863140fafc615c14a4bf4efd0f4425c02230eb8ef02784c9a156461e62c965",
485
- "sha256:4d8908b3bee1c889e547867ca4cdc54e5ab6be6d3e078556814a22457f49423c",
486
- "sha256:5b9eb0ca724a241683c9685a484da9d35c872fd42756574a7cfbf58af26677fd",
487
- "sha256:6022cecf8f44e36af10bd9118ca71f371078b4c168b6e0fab43d4a889985dbb5",
488
- "sha256:6150ffa5c767bc6332df27157d95442c379b7dce3a38dff89c0f39b63275696f",
489
- "sha256:62828cada4a2b850dbef89c81f5a33741898b305db244904de418cc957ff05dc",
490
- "sha256:7b4182299f251060996af5249c286bae9361fa8c6a9cda5efc29fe8bfd6062ec",
491
- "sha256:94b34f32646ca0414237168d68a9157cb3889f06b096612afdd296003fdd32fd",
492
- "sha256:9ce6889abac9a42afd07a562c2d6d4b2b7134f83f18571d859b25624a331c90b",
493
- "sha256:9cffe0f850e89d7c0012a1fb8730f75edd4320a0a731ed0c183904fe6ecfc3a9",
494
- "sha256:a12a813949e5066148712a0626895c26b2578874e4cc63160bb007e6df3436fe",
495
- "sha256:a1eea9aecf761c661d096d39ed9026574de8adb2ae1c5bd7b33558af884fb2ce",
496
- "sha256:a31f94983fecbac95e58388210427d68cd30fe8a36927980fab9c20062645609",
497
- "sha256:ac58bdee53cbeba2ecad824fa8159493f0bf3b8ea4e93feb06c9a465d6c87da8",
498
- "sha256:af3f4485884750dddd9c25cb7e3915d83c2db92488b38ccb77dd594eac84c4a0",
499
- "sha256:b33d2bc4f69caedcd0a275329eb2198f560b325605810895627be5d4b876bf7f",
500
- "sha256:b59c0ffceff8d4d3996a45f2bb6f4c207f94684a96bf3d9728dbb77428dd8cb8",
501
- "sha256:bb6834cbd983b19f06908b45bfc2dad6ac9479ae04abe923a275b5f48f1a186b",
502
- "sha256:bd3db01f59fdcbce5b22afad19e390260d6d0222f35a1023d9adc5690a889364",
503
- "sha256:bd7c23df857d488f418439686d3b10ae2fbf9bc256cd045b37a8c16575ea1040",
504
- "sha256:c2528d60e398c7c4c799d56f907664673a807635b857df18f7ae64d3e6ce2d9f",
505
- "sha256:d31a63bc6e6d87f77d71e1abbd7387ab817a66733734883d1fc0021ed9bfa083",
506
- "sha256:d4492d82b3bc7fbb7e3610747b159869468079fe149ec5c4d771fa1f614a14df",
507
- "sha256:ddcb8581510311e13421b1f544403c16e901c4e8f09083c881fab2be80ee31ba",
508
- "sha256:e1d59258c3c67c865435d8fbeb35f8c59b8bef3d6f46c1f29f6123556af28445",
509
- "sha256:eb3315a8a236ee19b6df481fc5f997436e8ade24a9f03dfdc6bd490fea20c6da",
510
- "sha256:ef2b055471c0eb466033760a521efb9d8a32b99ab907fc8358481a1dd29e3bd3",
511
- "sha256:ef5adb9a3b1d0c645ff694f9bca7702ec2c70f4d734f9922ea34de02294fdf72",
512
- "sha256:f32c38afb74bd98ce26de7cc74a67b40afb7b05aae7b42924ea990d51e4dac02",
513
- "sha256:fe0ccca550bb8e5abc22f530ec0466136379c01321fd94f30a22231e8a48d985"
 
 
 
 
 
 
 
 
 
 
514
  ],
515
- "markers": "python_version >= '3.9'",
516
- "version": "==1.2.1"
517
  },
518
  "coqpit": {
519
  "hashes": [
@@ -687,6 +697,13 @@
687
  "markers": "python_version >= '3.9'",
688
  "version": "==3.17.0"
689
  },
 
 
 
 
 
 
 
690
  "flask": {
691
  "hashes": [
692
  "sha256:5f873c5184c897c8d9d1b05df1e3d01b14910ce69607a117bd3277098a5836ac",
@@ -881,6 +898,142 @@
881
  "markers": "python_version >= '3.7'",
882
  "version": "==3.1.44"
883
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
884
  "grpcio": {
885
  "hashes": [
886
  "sha256:0495c86a55a04a874c7627fd33e5beaee771917d92c0e6d9d797628ac40e7655",
@@ -942,6 +1095,13 @@
942
  "markers": "python_version >= '3.8'",
943
  "version": "==1.70.0"
944
  },
 
 
 
 
 
 
 
945
  "gruut": {
946
  "extras": [
947
  "de",
@@ -985,6 +1145,14 @@
985
  ],
986
  "version": "==2.0.2"
987
  },
 
 
 
 
 
 
 
 
988
  "hangul-romanize": {
989
  "hashes": [
990
  "sha256:7b8ba54b624ca3b17b2c9394b971cd595c4240a31cc0fc6bc1c3e971eca8c4d5",
@@ -992,6 +1160,30 @@
992
  ],
993
  "version": "==0.1.0"
994
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
995
  "huggingface-hub": {
996
  "hashes": [
997
  "sha256:893471090c98e3b6efbdfdacafe4052b20b84d59866fb6f54c33d9af18c303ae",
@@ -1061,6 +1253,22 @@
1061
  ],
1062
  "version": "==1.2.0"
1063
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1064
  "jsonschema": {
1065
  "hashes": [
1066
  "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4",
@@ -1163,6 +1371,41 @@
1163
  "markers": "python_version >= '3.10'",
1164
  "version": "==1.4.8"
1165
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1166
  "langcodes": {
1167
  "hashes": [
1168
  "sha256:1eef8168d07e51e131a2497ffecad4b663f6208e7c3ae3b8dc15c51734a6f801",
@@ -1171,6 +1414,39 @@
1171
  "markers": "python_version >= '3.9'",
1172
  "version": "==3.5.0"
1173
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1174
  "language-data": {
1175
  "hashes": [
1176
  "sha256:7600ef8aa39555145d06c89f0c324bf7dab834ea0b0a439d8243762e3ebad7ec",
@@ -1188,38 +1464,38 @@
1188
  },
1189
  "librosa": {
1190
  "hashes": [
1191
- "sha256:6db29c1467168da21313203dcef405a73a678d3aad0fbc67607250b2f08a3f5a",
1192
- "sha256:8e8669e5084002d1a87f6c82b732f370784a368d0e55c2dd7d7aef3fa02fd058"
1193
  ],
1194
  "markers": "python_version >= '3.7'",
1195
- "version": "==0.10.0"
1196
  },
1197
  "llvmlite": {
1198
  "hashes": [
1199
- "sha256:14f0e4bf2fd2d9a75a3534111e8ebeb08eda2f33e9bdd6dfa13282afacdde0ed",
1200
- "sha256:18e9953c748b105668487b7c81a3e97b046d8abf95c4ddc0cd3c94f4e4651ae8",
1201
- "sha256:35d80d61d0cda2d767f72de99450766250560399edc309da16937b93d3b676e7",
1202
- "sha256:3e8d0618cb9bfe40ac38a9633f2493d4d4e9fcc2f438d39a4e854f39cc0f5f98",
1203
- "sha256:47e147cdda9037f94b399bf03bfd8a6b6b1f2f90be94a454e3386f006455a9b4",
1204
- "sha256:6912a87782acdff6eb8bf01675ed01d60ca1f2551f8176a300a886f09e836a6a",
1205
- "sha256:6d4fd101f571a31acb1559ae1af30f30b1dc4b3186669f92ad780e17c81e91bc",
1206
- "sha256:74937acd22dc11b33946b67dca7680e6d103d6e90eeaaaf932603bec6fe7b03a",
1207
- "sha256:7a2872ee80dcf6b5dbdc838763d26554c2a18aa833d31a2635bff16aafefb9c9",
1208
- "sha256:7d434ec7e2ce3cc8f452d1cd9a28591745de022f931d67be688a737320dfcead",
1209
- "sha256:977525a1e5f4059316b183fb4fd34fa858c9eade31f165427a3977c95e3ee749",
1210
- "sha256:9cd2a7376f7b3367019b664c21f0c61766219faa3b03731113ead75107f3b66c",
1211
- "sha256:a289af9a1687c6cf463478f0fa8e8aa3b6fb813317b0d70bf1ed0759eab6f761",
1212
- "sha256:ae2b5b5c3ef67354824fb75517c8db5fbe93bc02cd9671f3c62271626bc041d5",
1213
- "sha256:bc9efc739cc6ed760f795806f67889923f7274276f0eb45092a1473e40d9b867",
1214
- "sha256:c1da416ab53e4f7f3bc8d4eeba36d801cc1894b9fbfbf2022b29b6bad34a7df2",
1215
- "sha256:d5bd550001d26450bd90777736c69d68c487d17bf371438f975229b2b8241a91",
1216
- "sha256:df6509e1507ca0760787a199d19439cc887bfd82226f5af746d6977bd9f66844",
1217
- "sha256:e0a9a1a39d4bf3517f2af9d23d479b4175ead205c592ceeb8b89af48a327ea57",
1218
- "sha256:eccce86bba940bae0d8d48ed925f21dbb813519169246e2ab292b5092aba121f",
1219
- "sha256:f99b600aa7f65235a5a05d0b9a9f31150c390f31261f2a0ba678e26823ec38f7"
1220
  ],
1221
- "markers": "python_version >= '3.9'",
1222
- "version": "==0.43.0"
1223
  },
1224
  "marisa-trie": {
1225
  "hashes": [
@@ -1388,37 +1664,43 @@
1388
  },
1389
  "matplotlib": {
1390
  "hashes": [
1391
- "sha256:1c13f041a7178f9780fb61cc3a2b10423d5e125480e4be51beaf62b172413b67",
1392
- "sha256:232ce322bfd020a434caaffbd9a95333f7c2491e59cfc014041d95e38ab90d1c",
1393
- "sha256:493e9f6aa5819156b58fce42b296ea31969f2aab71c5b680b4ea7a3cb5c07d94",
1394
- "sha256:50bac6e4d77e4262c4340d7a985c30912054745ec99756ce213bfbc3cb3808eb",
1395
- "sha256:606e3b90897554c989b1e38a258c626d46c873523de432b1462f295db13de6f9",
1396
- "sha256:6209e5c9aaccc056e63b547a8152661324404dd92340a6e479b3a7f24b42a5d0",
1397
- "sha256:6485ac1f2e84676cff22e693eaa4fbed50ef5dc37173ce1f023daef4687df616",
1398
- "sha256:6addbd5b488aedb7f9bc19f91cd87ea476206f45d7116fcfe3d31416702a82fa",
1399
- "sha256:72f9322712e4562e792b2961971891b9fbbb0e525011e09ea0d1f416c4645661",
1400
- "sha256:7a6769f58ce51791b4cb8b4d7642489df347697cd3e23d88266aaaee93b41d9a",
1401
- "sha256:8080d5081a86e690d7688ffa542532e87f224c38a6ed71f8fbed34dd1d9fedae",
1402
- "sha256:843cbde2f0946dadd8c5c11c6d91847abd18ec76859dc319362a0964493f0ba6",
1403
- "sha256:8aac397d5e9ec158960e31c381c5ffc52ddd52bd9a47717e2a694038167dffea",
1404
- "sha256:8f65c9f002d281a6e904976007b2d46a1ee2bcea3a68a8c12dda24709ddc9106",
1405
- "sha256:90df07db7b599fe7035d2f74ab7e438b656528c68ba6bb59b7dc46af39ee48ef",
1406
- "sha256:9bb0189011785ea794ee827b68777db3ca3f93f3e339ea4d920315a0e5a78d54",
1407
- "sha256:a0e47eda4eb2614300fc7bb4657fced3e83d6334d03da2173b09e447418d499f",
1408
- "sha256:abc9d838f93583650c35eca41cfcec65b2e7cb50fd486da6f0c49b5e1ed23014",
1409
- "sha256:ac24233e8f2939ac4fd2919eed1e9c0871eac8057666070e94cbf0b33dd9c338",
1410
- "sha256:b12ba985837e4899b762b81f5b2845bd1a28f4fdd1a126d9ace64e9c4eb2fb25",
1411
- "sha256:b7a2a253d3b36d90c8993b4620183b55665a429da8357a4f621e78cd48b2b30b",
1412
- "sha256:c7064120a59ce6f64103c9cefba8ffe6fba87f2c61d67c401186423c9a20fd35",
1413
- "sha256:c89ee9314ef48c72fe92ce55c4e95f2f39d70208f9f1d9db4e64079420d8d732",
1414
- "sha256:cc4ccdc64e3039fc303defd119658148f2349239871db72cd74e2eeaa9b80b71",
1415
- "sha256:ce1edd9f5383b504dbc26eeea404ed0a00656c526638129028b758fd43fc5f10",
1416
- "sha256:ecd79298550cba13a43c340581a3ec9c707bd895a6a061a78fa2524660482fc0",
1417
- "sha256:f51c4c869d4b60d769f7b4406eec39596648d9d70246428745a681c327a8ad30",
1418
- "sha256:fb44f53af0a62dc80bba4443d9b27f2fde6acfdac281d95bc872dc148a6509cc"
 
 
 
 
 
 
1419
  ],
1420
- "markers": "python_version >= '3.9'",
1421
- "version": "==3.8.4"
1422
  },
1423
  "mdurl": {
1424
  "hashes": [
@@ -1686,58 +1968,72 @@
1686
  },
1687
  "numba": {
1688
  "hashes": [
1689
- "sha256:01ef4cd7d83abe087d644eaa3d95831b777aa21d441a23703d649e06b8e06b74",
1690
- "sha256:0b983bd6ad82fe868493012487f34eae8bf7dd94654951404114f23c3466d34b",
1691
- "sha256:0ebaa91538e996f708f1ab30ef4d3ddc344b64b5227b67a57aa74f401bb68b9d",
1692
- "sha256:1527dc578b95c7c4ff248792ec33d097ba6bef9eda466c948b68dfc995c25781",
1693
- "sha256:159e618ef213fba758837f9837fb402bbe65326e60ba0633dbe6c7f274d42c1b",
1694
- "sha256:19407ced081d7e2e4b8d8c36aa57b7452e0283871c296e12d798852bc7d7f198",
1695
- "sha256:3031547a015710140e8c87226b4cfe927cac199835e5bf7d4fe5cb64e814e3ab",
1696
- "sha256:38d6ea4c1f56417076ecf8fc327c831ae793282e0ff51080c5094cb726507b1c",
1697
- "sha256:3fb02b344a2a80efa6f677aa5c40cd5dd452e1b35f8d1c2af0dfd9ada9978e4b",
1698
- "sha256:4142d7ac0210cc86432b818338a2bc368dc773a2f5cf1e32ff7c5b378bd63ee8",
1699
- "sha256:5d761de835cd38fb400d2c26bb103a2726f548dc30368853121d66201672e651",
1700
- "sha256:5df6158e5584eece5fc83294b949fd30b9f1125df7708862205217e068aabf16",
1701
- "sha256:5f4fde652ea604ea3c86508a3fb31556a6157b2c76c8b51b1d45eb40c8598703",
1702
- "sha256:62908d29fb6a3229c242e981ca27e32a6e606cc253fc9e8faeb0e48760de241e",
1703
- "sha256:819a3dfd4630d95fd574036f99e47212a1af41cbcb019bf8afac63ff56834449",
1704
- "sha256:a17b70fc9e380ee29c42717e8cc0bfaa5556c416d94f9aa96ba13acb41bdece8",
1705
- "sha256:c151748cd269ddeab66334bd754817ffc0cabd9433acb0f551697e5151917d25",
1706
- "sha256:cac02c041e9b5bc8cf8f2034ff6f0dbafccd1ae9590dc146b3a02a45e53af4e2",
1707
- "sha256:d7da4098db31182fc5ffe4bc42c6f24cd7d1cb8a14b59fd755bfee32e34b8404",
1708
- "sha256:f75262e8fe7fa96db1dca93d53a194a38c46da28b112b8a4aca168f0df860347",
1709
- "sha256:fe0b28abb8d70f8160798f4de9d486143200f34458d34c4a214114e445d7124e"
1710
  ],
1711
  "markers": "python_version >= '3.9'",
1712
- "version": "==0.60.0"
1713
  },
1714
  "numpy": {
1715
  "hashes": [
1716
- "sha256:0cfe07133fd00b27edee5e6385e333e9eeb010607e8a46e1cd673f05f8596595",
1717
- "sha256:11a1f3816ea82eed4178102c56281782690ab5993251fdfd75039aad4d20385f",
1718
- "sha256:2762331de395739c91f1abb88041f94a080cb1143aeec791b3b223976228af3f",
1719
- "sha256:283d9de87c0133ef98f93dfc09fad3fb382f2a15580de75c02b5bb36a5a159a5",
1720
- "sha256:3d22662b4b10112c545c91a0741f2436f8ca979ab3d69d03d19322aa970f9695",
1721
- "sha256:41388e32e40b41dd56eb37fcaa7488b2b47b0adf77c66154d6b89622c110dfe9",
1722
- "sha256:42c16cec1c8cf2728f1d539bd55aaa9d6bb48a7de2f41eb944697293ef65a559",
1723
- "sha256:47ee7a839f5885bc0c63a74aabb91f6f40d7d7b639253768c4199b37aede7982",
1724
- "sha256:5a311ee4d983c487a0ab546708edbdd759393a3dc9cd30305170149fedd23c88",
1725
- "sha256:5dc65644f75a4c2970f21394ad8bea1a844104f0fe01f278631be1c7eae27226",
1726
- "sha256:6ed0d073a9c54ac40c41a9c2d53fcc3d4d4ed607670b9e7b0de1ba13b4cbfe6f",
1727
- "sha256:76ba7c40e80f9dc815c5e896330700fd6e20814e69da9c1267d65a4d051080f1",
1728
- "sha256:818b9be7900e8dc23e013a92779135623476f44a0de58b40c32a15368c01d471",
1729
- "sha256:a024181d7aef0004d76fb3bce2a4c9f2e67a609a9e2a6ff2571d30e9976aa383",
1730
- "sha256:a955e4128ac36797aaffd49ab44ec74a71c11d6938df83b1285492d277db5397",
1731
- "sha256:a97a954a8c2f046d3817c2bce16e3c7e9a9c2afffaf0400f5c16df5172a67c9c",
1732
- "sha256:a97e82c39d9856fe7d4f9b86d8a1e66eff99cf3a8b7ba48202f659703d27c46f",
1733
- "sha256:b55b953a1bdb465f4dc181758570d321db4ac23005f90ffd2b434cc6609a63dd",
1734
- "sha256:bb02929b0d6bfab4c48a79bd805bd7419114606947ec8284476167415171f55b",
1735
- "sha256:bece0a4a49e60e472a6d1f70ac6cdea00f9ab80ff01132f96bd970cdd8a9e5a9",
1736
- "sha256:e41e8951749c4b5c9a2dc5fdbc1a4eec6ab2a140fdae9b460b0f557eed870f4d",
1737
- "sha256:f71d57cc8645f14816ae249407d309be250ad8de93ef61d9709b45a0ddf4050c"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1738
  ],
1739
- "markers": "python_version >= '3.8'",
1740
- "version": "==1.22.0"
1741
  },
1742
  "nvidia-cublas-cu12": {
1743
  "hashes": [
@@ -1819,6 +2115,15 @@
1819
  "markers": "platform_system == 'Linux' and platform_machine == 'x86_64'",
1820
  "version": "==12.3.1.170"
1821
  },
 
 
 
 
 
 
 
 
 
1822
  "nvidia-nccl-cu12": {
1823
  "hashes": [
1824
  "sha256:8579076d30a8c24988834445f8d633c697d42397e92ffc3f63fa26766d25e0a0"
@@ -1852,6 +2157,91 @@
1852
  "markers": "python_version >= '3.8'",
1853
  "version": "==20240930"
1854
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1855
  "packaging": {
1856
  "hashes": [
1857
  "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759",
@@ -2113,6 +2503,14 @@
2113
  "markers": "python_version >= '3.9'",
2114
  "version": "==0.2.1"
2115
  },
 
 
 
 
 
 
 
 
2116
  "protobuf": {
2117
  "hashes": [
2118
  "sha256:0a18ed4a24198528f2333802eb075e59dea9d679ab7a6c5efb017a59004d849f",
@@ -2201,6 +2599,22 @@
2201
  "markers": "python_version >= '3.9'",
2202
  "version": "==19.0.0"
2203
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2204
  "pycparser": {
2205
  "hashes": [
2206
  "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6",
@@ -2214,6 +2628,7 @@
2214
  "sha256:427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584",
2215
  "sha256:ca5daa827cce33de7a42be142548b0096bf05a7e7b365aebfa5f8eeec7128236"
2216
  ],
 
2217
  "markers": "python_version >= '3.8'",
2218
  "version": "==2.10.6"
2219
  },
@@ -2629,6 +3044,14 @@
2629
  "markers": "python_version >= '3.8'",
2630
  "version": "==2.32.3"
2631
  },
 
 
 
 
 
 
 
 
2632
  "rich": {
2633
  "hashes": [
2634
  "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098",
@@ -2746,6 +3169,14 @@
2746
  "markers": "python_version >= '3.9'",
2747
  "version": "==0.22.3"
2748
  },
 
 
 
 
 
 
 
 
2749
  "safetensors": {
2750
  "hashes": [
2751
  "sha256:03c937100f38c9ff4c1507abea9928a6a9b02c9c1c9c3609ed4fb2bf413d4975",
@@ -2805,34 +3236,49 @@
2805
  },
2806
  "scipy": {
2807
  "hashes": [
2808
- "sha256:00150c5eae7b610c32589dda259eacc7c4f1665aedf25d921907f4d08a951b1c",
2809
- "sha256:028eccd22e654b3ea01ee63705681ee79933652b2d8f873e7949898dda6d11b6",
2810
- "sha256:1b7c3dca977f30a739e0409fb001056484661cb2541a01aba0bb0029f7b68db8",
2811
- "sha256:2c6ff6ef9cc27f9b3db93a6f8b38f97387e6e0591600369a297a50a8e96e835d",
2812
- "sha256:36750b7733d960d7994888f0d148d31ea3017ac15eef664194b4ef68d36a4a97",
2813
- "sha256:530f9ad26440e85766509dbf78edcfe13ffd0ab7fec2560ee5c36ff74d6269ff",
2814
- "sha256:5e347b14fe01003d3b78e196e84bd3f48ffe4c8a7b8a1afbcb8f5505cb710993",
2815
- "sha256:6550466fbeec7453d7465e74d4f4b19f905642c89a7525571ee91dd7adabb5a3",
2816
- "sha256:6df1468153a31cf55ed5ed39647279beb9cfb5d3f84369453b49e4b8502394fd",
2817
- "sha256:6e619aba2df228a9b34718efb023966da781e89dd3d21637b27f2e54db0410d7",
2818
- "sha256:8fce70f39076a5aa62e92e69a7f62349f9574d8405c0a5de6ed3ef72de07f446",
2819
- "sha256:90a2b78e7f5733b9de748f589f09225013685f9b218275257f8a8168ededaeaa",
2820
- "sha256:91af76a68eeae0064887a48e25c4e616fa519fa0d38602eda7e0f97d65d57937",
2821
- "sha256:933baf588daa8dc9a92c20a0be32f56d43faf3d1a60ab11b3f08c356430f6e56",
2822
- "sha256:acf8ed278cc03f5aff035e69cb511741e0418681d25fbbb86ca65429c4f4d9cd",
2823
- "sha256:ad669df80528aeca5f557712102538f4f37e503f0c5b9541655016dd0932ca79",
2824
- "sha256:b030c6674b9230d37c5c60ab456e2cf12f6784596d15ce8da9365e70896effc4",
2825
- "sha256:b9999c008ccf00e8fbcce1236f85ade5c569d13144f77a1946bef8863e8f6eb4",
2826
- "sha256:bc9a714581f561af0848e6b69947fda0614915f072dfd14142ed1bfe1b806710",
2827
- "sha256:ce7fff2e23ab2cc81ff452a9444c215c28e6305f396b2ba88343a567feec9660",
2828
- "sha256:cf00bd2b1b0211888d4dc75656c0412213a8b25e80d73898083f402b50f47e41",
2829
- "sha256:d10e45a6c50211fe256da61a11c34927c68f277e03138777bdebedd933712fea",
2830
- "sha256:ee410e6de8f88fd5cf6eadd73c135020bfbbbdfcd0f6162c36a7638a1ea8cc65",
2831
- "sha256:f313b39a7e94f296025e3cffc2c567618174c0b1dde173960cf23808f9fae4be",
2832
- "sha256:f3cd9e7b3c2c1ec26364856f9fbe78695fe631150f94cd1c22228456404cf1ec"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2833
  ],
2834
- "markers": "python_version >= '3.9'",
2835
- "version": "==1.11.4"
2836
  },
2837
  "setuptools": {
2838
  "hashes": [
@@ -2874,6 +3320,14 @@
2874
  "markers": "python_version >= '3.7'",
2875
  "version": "==5.0.2"
2876
  },
 
 
 
 
 
 
 
 
2877
  "soundfile": {
2878
  "hashes": [
2879
  "sha256:03267c4e493315294834a0870f31dbb3b28a95561b80b134f0bd3cf2d5f0e618",
@@ -2887,6 +3341,13 @@
2887
  ],
2888
  "version": "==0.13.1"
2889
  },
 
 
 
 
 
 
 
2890
  "soxr": {
2891
  "hashes": [
2892
  "sha256:39e0f791ba178d69cd676485dbee37e75a34f20daa478d90341ecb7f6d9d690f",
@@ -2954,6 +3415,69 @@
2954
  "markers": "python_version >= '3.6'",
2955
  "version": "==1.0.5"
2956
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2957
  "srsly": {
2958
  "hashes": [
2959
  "sha256:00c2a3e4856e63b7efd47591d049aaee8e5a250e098917f50d93ea68853fab78",
@@ -2998,12 +3522,12 @@
2998
  },
2999
  "streamlit": {
3000
  "hashes": [
3001
- "sha256:1f2b09f04b6ad366a2c7b4d48104697d1c8bc33f48bdf7ed939cc04c12d3aec6",
3002
- "sha256:b9d7a317a0cc88edd7857c7e07dde9cf95647d3ae51cbfa8a3db82fbb8a2990d"
3003
  ],
3004
  "index": "pypi",
3005
- "markers": "python_version >= '3.8' and python_full_version != '3.9.7'",
3006
- "version": "==1.40.1"
3007
  },
3008
  "sudachidict-core": {
3009
  "hashes": [
@@ -3053,10 +3577,10 @@
3053
  },
3054
  "tensorboard": {
3055
  "hashes": [
3056
- "sha256:107ca4821745f73e2aefa02c50ff70a9b694f39f790b11e6f682f7d326745eab"
3057
  ],
3058
  "markers": "python_version >= '3.9'",
3059
- "version": "==2.18.0"
3060
  },
3061
  "tensorboard-data-server": {
3062
  "hashes": [
@@ -3170,49 +3694,56 @@
3170
  },
3171
  "torch": {
3172
  "hashes": [
3173
- "sha256:1f3b7fb3cf7ab97fae52161423f81be8c6b8afac8d9760823fd623994581e1a3",
3174
- "sha256:23d062bf70776a3d04dbe74db950db2a5245e1ba4f27208a87f0d743b0d06e86",
3175
- "sha256:31f8c39660962f9ae4eeec995e3049b5492eb7360dd4f07377658ef4d728fa4c",
3176
- "sha256:32a037bd98a241df6c93e4c789b683335da76a2ac142c0973675b715102dc5fa",
3177
- "sha256:340ce0432cad0d37f5a31be666896e16788f1adf8ad7be481196b503dad675b9",
3178
- "sha256:34bfa1a852e5714cbfa17f27c49d8ce35e1b7af5608c4bc6e81392c352dbc601",
3179
- "sha256:3f4b7f10a247e0dcd7ea97dc2d3bfbfc90302ed36d7f3952b0008d0df264e697",
3180
- "sha256:46c817d3ea33696ad3b9df5e774dba2257e9a4cd3c4a3afbf92f6bb13ac5ce2d",
3181
- "sha256:603c52d2fe06433c18b747d25f5c333f9c1d58615620578c326d66f258686f9a",
3182
- "sha256:71328e1bbe39d213b8721678f9dcac30dfc452a46d586f1d514a6aa0a99d4744",
3183
- "sha256:73e58e78f7d220917c5dbfad1a40e09df9929d3b95d25e57d9f8558f84c9a11c",
3184
- "sha256:7974e3dce28b5a21fb554b73e1bc9072c25dde873fa00d54280861e7a009d7dc",
3185
- "sha256:8046768b7f6d35b85d101b4b38cba8aa2f3cd51952bc4c06a49580f2ce682291",
3186
- "sha256:8c712df61101964eb11910a846514011f0b6f5920c55dbf567bff8a34163d5b1",
3187
- "sha256:9b61edf3b4f6e3b0e0adda8b3960266b9009d02b37555971f4d1c8f7a05afed7",
3188
- "sha256:de5b7d6740c4b636ef4db92be922f0edc425b65ed78c5076c43c42d362a45457",
3189
- "sha256:ed231a4b3a5952177fafb661213d690a72caaad97d5824dd4fc17ab9e15cec03"
 
 
 
3190
  ],
3191
  "index": "pypi",
3192
- "markers": "python_full_version >= '3.8.0'",
3193
- "version": "==2.5.1"
3194
  },
3195
  "torchaudio": {
3196
  "hashes": [
3197
- "sha256:0be6d6f5127b17f9f1ac33fb02c8f1127bfea955de630c5cab6eb9daaef4db6d",
3198
- "sha256:4aead2d6b32426d0e657e243f6f5146f8d400bc8db9fe8a8000254baeec1202d",
3199
- "sha256:4ba24769a72bd686903feaf1040c895d710af2ffbcd25ee7a9794ee285561b26",
3200
- "sha256:6bb65416405f40e00b20701257c16e7493bfdd7188e02e87cc5b389c31c10c2c",
3201
- "sha256:7005354aa7dda9ef908e13c2566ee1fe0bd6d7f5bae0583b5e53016cd229fc34",
3202
- "sha256:7af3f7f92fd33bc9f036a60cdeda4cbeb6bccebd18eae89776dd1e8ed042672e",
3203
- "sha256:901291d770aeeb1f51920bb5aa73ff82e9b7f26354a3c7b90d80ff0b4e9a5044",
3204
- "sha256:9b3872c5dd5080be6322908d62365581a1dd9250e3dd6d47bab3f5b0854a5d1f",
3205
- "sha256:9c8fb06fbd8d2016e7b7caf15a3231867c792a2e3b0f2f8f9013633e9c2ce412",
3206
- "sha256:a40a0e4b238564a19bf138c64d593c7b52d97c8737843d85d6ca09216241ae66",
3207
- "sha256:abacbec3b6d695cf99ada8b1db55db933181c8ff7d283e246e2bbefdde674235",
3208
- "sha256:cba8ccab1bff0496ccdc71ebbdcd31d0f7bf97ff3c46276425ff86460f6f8967",
3209
- "sha256:d29349944955eb061e774fe4d9eea4681c5bc9ff42ea39a877f8f14de1e4ed00",
3210
- "sha256:ec8f12d6be12aed248a0d65a76c7bb341ee5eef969fe2e9dc3154c7cfba1bdf4",
3211
- "sha256:f1cbfdfd1bbdfbe7289d47a74f36ff6c5d87c3205606202fef5a7fb693f61cf0",
3212
- "sha256:f2f0a4fa19137cad247087dcf4b85c56860f924c3ca4a89679299cf0e002ee33"
 
 
 
 
3213
  ],
3214
  "index": "pypi",
3215
- "version": "==2.5.1"
3216
  },
3217
  "tornado": {
3218
  "hashes": [
@@ -3257,14 +3788,14 @@
3257
  },
3258
  "triton": {
3259
  "hashes": [
3260
- "sha256:0f34f6e7885d1bf0eaaf7ba875a5f0ce6f3c13ba98f9503651c1e6dc6757ed5c",
3261
- "sha256:6b0dd10a925263abbe9fa37dcde67a5e9b2383fc269fdf59f5657cac38c5d1d8",
3262
- "sha256:6dadaca7fc24de34e180271b5cf864c16755702e9f63a16f62df714a8099126a",
3263
- "sha256:aafa9a20cd0d9fee523cd4504aa7131807a864cd77dcf6efe7e981f18b8c6c11",
3264
- "sha256:c8182f42fd8080a7d39d666814fa36c5e30cc00ea7eeeb1a2983dbb4c99a0fdc"
3265
  ],
3266
- "markers": "platform_machine == 'x86_64' and sys_platform == 'linux' or sys_platform == 'linux2'",
3267
- "version": "==3.1.0"
3268
  },
3269
  "tts": {
3270
  "hashes": [
@@ -3303,11 +3834,11 @@
3303
  },
3304
  "tzlocal": {
3305
  "hashes": [
3306
- "sha256:49816ef2fe65ea8ac19d19aa7a1ae0551c834303d5014c6d5a62e4cbda8047b8",
3307
- "sha256:8d399205578f1a9342816409cc1e46a93ebd5755e39ea2d85334bea911bf0e6e"
3308
  ],
3309
- "markers": "python_version >= '3.8'",
3310
- "version": "==5.2"
3311
  },
3312
  "umap-learn": {
3313
  "hashes": [
@@ -3324,6 +3855,14 @@
3324
  "markers": "python_version >= '3.5'",
3325
  "version": "==1.3.8"
3326
  },
 
 
 
 
 
 
 
 
3327
  "urllib3": {
3328
  "hashes": [
3329
  "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df",
@@ -3564,6 +4103,109 @@
3564
  ],
3565
  "markers": "python_version >= '3.9'",
3566
  "version": "==1.18.3"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3567
  }
3568
  },
3569
  "develop": {}
 
1
  {
2
  "_meta": {
3
  "hash": {
4
+ "sha256": "4a7b41a97a228d1c5a6f7666ec49f031aad9b57aff5a418b221ad899870f2656"
5
  },
6
  "pipfile-spec": 6,
7
  "requires": {
8
+ "python_version": "3.11"
9
  },
10
  "sources": [
11
  {
 
151
  "markers": "python_version >= '3.3'",
152
  "version": "==0.3.2"
153
  },
154
+ "anyio": {
155
  "hashes": [
156
+ "sha256:1d9fe889df5212298c0c0723fa20479d1b94883a2df44bd3897aa91083316f7a",
157
+ "sha256:b5011f270ab5eb0abf13385f851315585cc37ef330dd88e27ec3d34d651fd47a"
158
  ],
159
+ "markers": "python_version >= '3.9'",
160
+ "version": "==4.8.0"
161
  },
162
  "attrs": {
163
  "hashes": [
 
467
  },
468
  "contourpy": {
469
  "hashes": [
470
+ "sha256:041b640d4ec01922083645a94bb3b2e777e6b626788f4095cf21abbe266413c1",
471
+ "sha256:05e806338bfeaa006acbdeba0ad681a10be63b26e1b17317bfac3c5d98f36cda",
472
+ "sha256:08d9d449a61cf53033612cb368f3a1b26cd7835d9b8cd326647efe43bca7568d",
473
+ "sha256:0ffa84be8e0bd33410b17189f7164c3589c229ce5db85798076a3fa136d0e509",
474
+ "sha256:113231fe3825ebf6f15eaa8bc1f5b0ddc19d42b733345eae0934cb291beb88b6",
475
+ "sha256:14c102b0eab282427b662cb590f2e9340a9d91a1c297f48729431f2dcd16e14f",
476
+ "sha256:174e758c66bbc1c8576992cec9599ce8b6672b741b5d336b5c74e35ac382b18e",
477
+ "sha256:19c1555a6801c2f084c7ddc1c6e11f02eb6a6016ca1318dd5452ba3f613a1751",
478
+ "sha256:19d40d37c1c3a4961b4619dd9d77b12124a453cc3d02bb31a07d58ef684d3d86",
479
+ "sha256:1bf98051f1045b15c87868dbaea84f92408337d4f81d0e449ee41920ea121d3b",
480
+ "sha256:20914c8c973f41456337652a6eeca26d2148aa96dd7ac323b74516988bea89fc",
481
+ "sha256:287ccc248c9e0d0566934e7d606201abd74761b5703d804ff3df8935f523d546",
482
+ "sha256:2ba94a401342fc0f8b948e57d977557fbf4d515f03c67682dd5c6191cb2d16ec",
483
+ "sha256:31c1b55c1f34f80557d3830d3dd93ba722ce7e33a0b472cba0ec3b6535684d8f",
484
+ "sha256:36987a15e8ace5f58d4d5da9dca82d498c2bbb28dff6e5d04fbfcc35a9cb3a82",
485
+ "sha256:3a04ecd68acbd77fa2d39723ceca4c3197cb2969633836ced1bea14e219d077c",
486
+ "sha256:3e8b974d8db2c5610fb4e76307e265de0edb655ae8169e8b21f41807ccbeec4b",
487
+ "sha256:3ea9924d28fc5586bf0b42d15f590b10c224117e74409dd7a0be3b62b74a501c",
488
+ "sha256:4318af1c925fb9a4fb190559ef3eec206845f63e80fb603d47f2d6d67683901c",
489
+ "sha256:44a29502ca9c7b5ba389e620d44f2fbe792b1fb5734e8b931ad307071ec58c53",
490
+ "sha256:47734d7073fb4590b4a40122b35917cd77be5722d80683b249dac1de266aac80",
491
+ "sha256:4d76d5993a34ef3df5181ba3c92fabb93f1eaa5729504fb03423fcd9f3177242",
492
+ "sha256:4dbbc03a40f916a8420e420d63e96a1258d3d1b58cbdfd8d1f07b49fcbd38e85",
493
+ "sha256:500360b77259914f7805af7462e41f9cb7ca92ad38e9f94d6c8641b089338124",
494
+ "sha256:523a8ee12edfa36f6d2a49407f705a6ef4c5098de4f498619787e272de93f2d5",
495
+ "sha256:573abb30e0e05bf31ed067d2f82500ecfdaec15627a59d63ea2d95714790f5c2",
496
+ "sha256:5b75aa69cb4d6f137b36f7eb2ace9280cfb60c55dc5f61c731fdf6f037f958a3",
497
+ "sha256:61332c87493b00091423e747ea78200659dc09bdf7fd69edd5e98cef5d3e9a8d",
498
+ "sha256:805617228ba7e2cbbfb6c503858e626ab528ac2a32a04a2fe88ffaf6b02c32bc",
499
+ "sha256:841ad858cff65c2c04bf93875e384ccb82b654574a6d7f30453a04f04af71342",
500
+ "sha256:89785bb2a1980c1bd87f0cb1517a71cde374776a5f150936b82580ae6ead44a1",
501
+ "sha256:8eb96e79b9f3dcadbad2a3891672f81cdcab7f95b27f28f1c67d75f045b6b4f1",
502
+ "sha256:974d8145f8ca354498005b5b981165b74a195abfae9a8129df3e56771961d595",
503
+ "sha256:9ddeb796389dadcd884c7eb07bd14ef12408aaae358f0e2ae24114d797eede30",
504
+ "sha256:a045f341a77b77e1c5de31e74e966537bba9f3c4099b35bf4c2e3939dd54cdab",
505
+ "sha256:a0cffcbede75c059f535725c1680dfb17b6ba8753f0c74b14e6a9c68c29d7ea3",
506
+ "sha256:a761d9ccfc5e2ecd1bf05534eda382aa14c3e4f9205ba5b1684ecfe400716ef2",
507
+ "sha256:a7895f46d47671fa7ceec40f31fae721da51ad34bdca0bee83e38870b1f47ffd",
508
+ "sha256:a9fa36448e6a3a1a9a2ba23c02012c43ed88905ec80163f2ffe2421c7192a5d7",
509
+ "sha256:ab29962927945d89d9b293eabd0d59aea28d887d4f3be6c22deaefbb938a7277",
510
+ "sha256:abbb49fb7dac584e5abc6636b7b2a7227111c4f771005853e7d25176daaf8453",
511
+ "sha256:ac4578ac281983f63b400f7fe6c101bedc10651650eef012be1ccffcbacf3697",
512
+ "sha256:adce39d67c0edf383647a3a007de0a45fd1b08dedaa5318404f1a73059c2512b",
513
+ "sha256:ade08d343436a94e633db932e7e8407fe7de8083967962b46bdfc1b0ced39454",
514
+ "sha256:b2bdca22a27e35f16794cf585832e542123296b4687f9fd96822db6bae17bfc9",
515
+ "sha256:b2f926efda994cdf3c8d3fdb40b9962f86edbc4457e739277b961eced3d0b4c1",
516
+ "sha256:b457d6430833cee8e4b8e9b6f07aa1c161e5e0d52e118dc102c8f9bd7dd060d6",
517
+ "sha256:c414fc1ed8ee1dbd5da626cf3710c6013d3d27456651d156711fa24f24bd1291",
518
+ "sha256:cb76c1a154b83991a3cbbf0dfeb26ec2833ad56f95540b442c73950af2013750",
519
+ "sha256:dfd97abd83335045a913e3bcc4a09c0ceadbe66580cf573fe961f4a825efa699",
520
+ "sha256:e914a8cb05ce5c809dd0fe350cfbb4e881bde5e2a38dc04e3afe1b3e58bd158e",
521
+ "sha256:ece6df05e2c41bd46776fbc712e0996f7c94e0d0543af1656956d150c4ca7c81",
522
+ "sha256:efa874e87e4a647fd2e4f514d5e91c7d493697127beb95e77d2f7561f6905bd9",
523
+ "sha256:f611e628ef06670df83fce17805c344710ca5cde01edfdc72751311da8585375"
524
  ],
525
+ "markers": "python_version >= '3.10'",
526
+ "version": "==1.3.1"
527
  },
528
  "coqpit": {
529
  "hashes": [
 
697
  "markers": "python_version >= '3.9'",
698
  "version": "==3.17.0"
699
  },
700
+ "filetype": {
701
+ "hashes": [
702
+ "sha256:66b56cd6474bf41d8c54660347d37afcc3f7d1970648de365c102ef77548aadb",
703
+ "sha256:7ce71b6880181241cf7ac8697a2f1eb6a8bd9b429f7ad6d27b8db9ba5f1c2d25"
704
+ ],
705
+ "version": "==1.2.0"
706
+ },
707
  "flask": {
708
  "hashes": [
709
  "sha256:5f873c5184c897c8d9d1b05df1e3d01b14910ce69607a117bd3277098a5836ac",
 
898
  "markers": "python_version >= '3.7'",
899
  "version": "==3.1.44"
900
  },
901
+ "google-ai-generativelanguage": {
902
+ "hashes": [
903
+ "sha256:5a03ef86377aa184ffef3662ca28f19eeee158733e45d7947982eb953c6ebb6c",
904
+ "sha256:8f6d9dc4c12b065fe2d0289026171acea5183ebf2d0b11cefe12f3821e159ec3"
905
+ ],
906
+ "markers": "python_version >= '3.7'",
907
+ "version": "==0.6.15"
908
+ },
909
+ "google-api-core": {
910
+ "extras": [
911
+ "grpc"
912
+ ],
913
+ "hashes": [
914
+ "sha256:bc78d608f5a5bf853b80bd70a795f703294de656c096c0968320830a4bc280f1",
915
+ "sha256:f8b36f5456ab0dd99a1b693a40a31d1e7757beea380ad1b38faaf8941eae9d8a"
916
+ ],
917
+ "markers": "python_version >= '3.7'",
918
+ "version": "==2.24.1"
919
+ },
920
+ "google-api-python-client": {
921
+ "hashes": [
922
+ "sha256:63d61fb3e4cf3fb31a70a87f45567c22f6dfe87bbfa27252317e3e2c42900db4",
923
+ "sha256:a8ccafaecfa42d15d5b5c3134ced8de08380019717fc9fb1ed510ca58eca3b7e"
924
+ ],
925
+ "markers": "python_version >= '3.7'",
926
+ "version": "==2.160.0"
927
+ },
928
+ "google-auth": {
929
+ "hashes": [
930
+ "sha256:8285113607d3b80a3f1543b75962447ba8a09fe85783432a784fdeef6ac094c4",
931
+ "sha256:e7dae6694313f434a2727bf2906f27ad259bae090d7aa896590d86feec3d9d4a"
932
+ ],
933
+ "markers": "python_version >= '3.7'",
934
+ "version": "==2.38.0"
935
+ },
936
+ "google-auth-httplib2": {
937
+ "hashes": [
938
+ "sha256:38aa7badf48f974f1eb9861794e9c0cb2a0511a4ec0679b1f886d108f5640e05",
939
+ "sha256:b65a0a2123300dd71281a7bf6e64d65a0759287df52729bdd1ae2e47dc311a3d"
940
+ ],
941
+ "version": "==0.2.0"
942
+ },
943
+ "google-generativeai": {
944
+ "hashes": [
945
+ "sha256:e987b33ea6decde1e69191ddcaec6ef974458864d243de7191db50c21a7c5b82"
946
+ ],
947
+ "markers": "python_version >= '3.9'",
948
+ "version": "==0.8.4"
949
+ },
950
+ "googleapis-common-protos": {
951
+ "hashes": [
952
+ "sha256:21398025365f138be356d5923e9168737d94d46a72aefee4a6110a1f23463c86",
953
+ "sha256:579de760800d13616f51cf8be00c876f00a9f146d3e6510e19d1f4111758b741"
954
+ ],
955
+ "markers": "python_version >= '3.7'",
956
+ "version": "==1.67.0"
957
+ },
958
+ "greenlet": {
959
+ "hashes": [
960
+ "sha256:0153404a4bb921f0ff1abeb5ce8a5131da56b953eda6e14b88dc6bbc04d2049e",
961
+ "sha256:03a088b9de532cbfe2ba2034b2b85e82df37874681e8c470d6fb2f8c04d7e4b7",
962
+ "sha256:04b013dc07c96f83134b1e99888e7a79979f1a247e2a9f59697fa14b5862ed01",
963
+ "sha256:05175c27cb459dcfc05d026c4232f9de8913ed006d42713cb8a5137bd49375f1",
964
+ "sha256:09fc016b73c94e98e29af67ab7b9a879c307c6731a2c9da0db5a7d9b7edd1159",
965
+ "sha256:0bbae94a29c9e5c7e4a2b7f0aae5c17e8e90acbfd3bf6270eeba60c39fce3563",
966
+ "sha256:0fde093fb93f35ca72a556cf72c92ea3ebfda3d79fc35bb19fbe685853869a83",
967
+ "sha256:1443279c19fca463fc33e65ef2a935a5b09bb90f978beab37729e1c3c6c25fe9",
968
+ "sha256:1776fd7f989fc6b8d8c8cb8da1f6b82c5814957264d1f6cf818d475ec2bf6395",
969
+ "sha256:1d3755bcb2e02de341c55b4fca7a745a24a9e7212ac953f6b3a48d117d7257aa",
970
+ "sha256:23f20bb60ae298d7d8656c6ec6db134bca379ecefadb0b19ce6f19d1f232a942",
971
+ "sha256:275f72decf9932639c1c6dd1013a1bc266438eb32710016a1c742df5da6e60a1",
972
+ "sha256:2846930c65b47d70b9d178e89c7e1a69c95c1f68ea5aa0a58646b7a96df12441",
973
+ "sha256:3319aa75e0e0639bc15ff54ca327e8dc7a6fe404003496e3c6925cd3142e0e22",
974
+ "sha256:346bed03fe47414091be4ad44786d1bd8bef0c3fcad6ed3dee074a032ab408a9",
975
+ "sha256:36b89d13c49216cadb828db8dfa6ce86bbbc476a82d3a6c397f0efae0525bdd0",
976
+ "sha256:37b9de5a96111fc15418819ab4c4432e4f3c2ede61e660b1e33971eba26ef9ba",
977
+ "sha256:396979749bd95f018296af156201d6211240e7a23090f50a8d5d18c370084dc3",
978
+ "sha256:3b2813dc3de8c1ee3f924e4d4227999285fd335d1bcc0d2be6dc3f1f6a318ec1",
979
+ "sha256:411f015496fec93c1c8cd4e5238da364e1da7a124bcb293f085bf2860c32c6f6",
980
+ "sha256:47da355d8687fd65240c364c90a31569a133b7b60de111c255ef5b606f2ae291",
981
+ "sha256:48ca08c771c268a768087b408658e216133aecd835c0ded47ce955381105ba39",
982
+ "sha256:4afe7ea89de619adc868e087b4d2359282058479d7cfb94970adf4b55284574d",
983
+ "sha256:4ce3ac6cdb6adf7946475d7ef31777c26d94bccc377e070a7986bd2d5c515467",
984
+ "sha256:4ead44c85f8ab905852d3de8d86f6f8baf77109f9da589cb4fa142bd3b57b475",
985
+ "sha256:54558ea205654b50c438029505def3834e80f0869a70fb15b871c29b4575ddef",
986
+ "sha256:5e06afd14cbaf9e00899fae69b24a32f2196c19de08fcb9f4779dd4f004e5e7c",
987
+ "sha256:62ee94988d6b4722ce0028644418d93a52429e977d742ca2ccbe1c4f4a792511",
988
+ "sha256:63e4844797b975b9af3a3fb8f7866ff08775f5426925e1e0bbcfe7932059a12c",
989
+ "sha256:6510bf84a6b643dabba74d3049ead221257603a253d0a9873f55f6a59a65f822",
990
+ "sha256:667a9706c970cb552ede35aee17339a18e8f2a87a51fba2ed39ceeeb1004798a",
991
+ "sha256:6ef9ea3f137e5711f0dbe5f9263e8c009b7069d8a1acea822bd5e9dae0ae49c8",
992
+ "sha256:7017b2be767b9d43cc31416aba48aab0d2309ee31b4dbf10a1d38fb7972bdf9d",
993
+ "sha256:7124e16b4c55d417577c2077be379514321916d5790fa287c9ed6f23bd2ffd01",
994
+ "sha256:73aaad12ac0ff500f62cebed98d8789198ea0e6f233421059fa68a5aa7220145",
995
+ "sha256:77c386de38a60d1dfb8e55b8c1101d68c79dfdd25c7095d51fec2dd800892b80",
996
+ "sha256:7876452af029456b3f3549b696bb36a06db7c90747740c5302f74a9e9fa14b13",
997
+ "sha256:7939aa3ca7d2a1593596e7ac6d59391ff30281ef280d8632fa03d81f7c5f955e",
998
+ "sha256:8320f64b777d00dd7ccdade271eaf0cad6636343293a25074cc5566160e4de7b",
999
+ "sha256:85f3ff71e2e60bd4b4932a043fbbe0f499e263c628390b285cb599154a3b03b1",
1000
+ "sha256:8b8b36671f10ba80e159378df9c4f15c14098c4fd73a36b9ad715f057272fbef",
1001
+ "sha256:93147c513fac16385d1036b7e5b102c7fbbdb163d556b791f0f11eada7ba65dc",
1002
+ "sha256:935e943ec47c4afab8965954bf49bfa639c05d4ccf9ef6e924188f762145c0ff",
1003
+ "sha256:94b6150a85e1b33b40b1464a3f9988dcc5251d6ed06842abff82e42632fac120",
1004
+ "sha256:94ebba31df2aa506d7b14866fed00ac141a867e63143fe5bca82a8e503b36437",
1005
+ "sha256:95ffcf719966dd7c453f908e208e14cde192e09fde6c7186c8f1896ef778d8cd",
1006
+ "sha256:98884ecf2ffb7d7fe6bd517e8eb99d31ff7855a840fa6d0d63cd07c037f6a981",
1007
+ "sha256:99cfaa2110534e2cf3ba31a7abcac9d328d1d9f1b95beede58294a60348fba36",
1008
+ "sha256:9e8f8c9cb53cdac7ba9793c276acd90168f416b9ce36799b9b885790f8ad6c0a",
1009
+ "sha256:a0dfc6c143b519113354e780a50381508139b07d2177cb6ad6a08278ec655798",
1010
+ "sha256:b2795058c23988728eec1f36a4e5e4ebad22f8320c85f3587b539b9ac84128d7",
1011
+ "sha256:b42703b1cf69f2aa1df7d1030b9d77d3e584a70755674d60e710f0af570f3761",
1012
+ "sha256:b7cede291382a78f7bb5f04a529cb18e068dd29e0fb27376074b6d0317bf4dd0",
1013
+ "sha256:b8a678974d1f3aa55f6cc34dc480169d58f2e6d8958895d68845fa4ab566509e",
1014
+ "sha256:b8da394b34370874b4572676f36acabac172602abf054cbc4ac910219f3340af",
1015
+ "sha256:c3a701fe5a9695b238503ce5bbe8218e03c3bcccf7e204e455e7462d770268aa",
1016
+ "sha256:c4aab7f6381f38a4b42f269057aee279ab0fc7bf2e929e3d4abfae97b682a12c",
1017
+ "sha256:ca9d0ff5ad43e785350894d97e13633a66e2b50000e8a183a50a88d834752d42",
1018
+ "sha256:d0028e725ee18175c6e422797c407874da24381ce0690d6b9396c204c7f7276e",
1019
+ "sha256:d21e10da6ec19b457b82636209cbe2331ff4306b54d06fa04b7c138ba18c8a81",
1020
+ "sha256:d5e975ca70269d66d17dd995dafc06f1b06e8cb1ec1e9ed54c1d1e4a7c4cf26e",
1021
+ "sha256:da7a9bff22ce038e19bf62c4dd1ec8391062878710ded0a845bcf47cc0200617",
1022
+ "sha256:db32b5348615a04b82240cc67983cb315309e88d444a288934ee6ceaebcad6cc",
1023
+ "sha256:dcc62f31eae24de7f8dce72134c8651c58000d3b1868e01392baea7c32c247de",
1024
+ "sha256:dfc59d69fc48664bc693842bd57acfdd490acafda1ab52c7836e3fc75c90a111",
1025
+ "sha256:e347b3bfcf985a05e8c0b7d462ba6f15b1ee1c909e2dcad795e49e91b152c383",
1026
+ "sha256:e4d333e558953648ca09d64f13e6d8f0523fa705f51cae3f03b5983489958c70",
1027
+ "sha256:ed10eac5830befbdd0c32f83e8aa6288361597550ba669b04c48f0f9a2c843c6",
1028
+ "sha256:efc0f674aa41b92da8c49e0346318c6075d734994c3c4e4430b1c3f853e498e4",
1029
+ "sha256:f1695e76146579f8c06c1509c7ce4dfe0706f49c6831a817ac04eebb2fd02011",
1030
+ "sha256:f1d4aeb8891338e60d1ab6127af1fe45def5259def8094b9c7e34690c8858803",
1031
+ "sha256:f406b22b7c9a9b4f8aa9d2ab13d6ae0ac3e85c9a809bd590ad53fed2bf70dc79",
1032
+ "sha256:f6ff3b14f2df4c41660a7dec01045a045653998784bf8cfcb5a525bdffffbc8f"
1033
+ ],
1034
+ "markers": "python_version < '3.14' and platform_machine == 'aarch64' or (platform_machine == 'ppc64le' or (platform_machine == 'x86_64' or (platform_machine == 'amd64' or (platform_machine == 'AMD64' or (platform_machine == 'win32' or platform_machine == 'WIN32')))))",
1035
+ "version": "==3.1.1"
1036
+ },
1037
  "grpcio": {
1038
  "hashes": [
1039
  "sha256:0495c86a55a04a874c7627fd33e5beaee771917d92c0e6d9d797628ac40e7655",
 
1095
  "markers": "python_version >= '3.8'",
1096
  "version": "==1.70.0"
1097
  },
1098
+ "grpcio-status": {
1099
+ "hashes": [
1100
+ "sha256:0e7b42816512433b18b9d764285ff029bde059e9d41f8fe10a60631bd8348101",
1101
+ "sha256:fc5a2ae2b9b1c1969cc49f3262676e6854aa2398ec69cb5bd6c47cd501904a85"
1102
+ ],
1103
+ "version": "==1.70.0"
1104
+ },
1105
  "gruut": {
1106
  "extras": [
1107
  "de",
 
1145
  ],
1146
  "version": "==2.0.2"
1147
  },
1148
+ "h11": {
1149
+ "hashes": [
1150
+ "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d",
1151
+ "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"
1152
+ ],
1153
+ "markers": "python_version >= '3.7'",
1154
+ "version": "==0.14.0"
1155
+ },
1156
  "hangul-romanize": {
1157
  "hashes": [
1158
  "sha256:7b8ba54b624ca3b17b2c9394b971cd595c4240a31cc0fc6bc1c3e971eca8c4d5",
 
1160
  ],
1161
  "version": "==0.1.0"
1162
  },
1163
+ "httpcore": {
1164
+ "hashes": [
1165
+ "sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c",
1166
+ "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd"
1167
+ ],
1168
+ "markers": "python_version >= '3.8'",
1169
+ "version": "==1.0.7"
1170
+ },
1171
+ "httplib2": {
1172
+ "hashes": [
1173
+ "sha256:14ae0a53c1ba8f3d37e9e27cf37eabb0fb9980f435ba405d546948b009dd64dc",
1174
+ "sha256:d7a10bc5ef5ab08322488bde8c726eeee5c8618723fdb399597ec58f3d82df81"
1175
+ ],
1176
+ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
1177
+ "version": "==0.22.0"
1178
+ },
1179
+ "httpx": {
1180
+ "hashes": [
1181
+ "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc",
1182
+ "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"
1183
+ ],
1184
+ "markers": "python_version >= '3.8'",
1185
+ "version": "==0.28.1"
1186
+ },
1187
  "huggingface-hub": {
1188
  "hashes": [
1189
  "sha256:893471090c98e3b6efbdfdacafe4052b20b84d59866fb6f54c33d9af18c303ae",
 
1253
  ],
1254
  "version": "==1.2.0"
1255
  },
1256
+ "jsonpatch": {
1257
+ "hashes": [
1258
+ "sha256:0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade",
1259
+ "sha256:9fcd4009c41e6d12348b4a0ff2563ba56a2923a7dfee731d004e212e1ee5030c"
1260
+ ],
1261
+ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6'",
1262
+ "version": "==1.33"
1263
+ },
1264
+ "jsonpointer": {
1265
+ "hashes": [
1266
+ "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942",
1267
+ "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef"
1268
+ ],
1269
+ "markers": "python_version >= '3.7'",
1270
+ "version": "==3.0.0"
1271
+ },
1272
  "jsonschema": {
1273
  "hashes": [
1274
  "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4",
 
1371
  "markers": "python_version >= '3.10'",
1372
  "version": "==1.4.8"
1373
  },
1374
+ "langchain": {
1375
+ "hashes": [
1376
+ "sha256:1a6e629f02a25962aa5b16932e8f073248104a66804ed5af1f78618ad7c1d38d",
1377
+ "sha256:311ac227a995545ff7c3f74c7767930c5349edef0b39f19d3105b86d39316b69"
1378
+ ],
1379
+ "index": "pypi",
1380
+ "markers": "python_version >= '3.9' and python_version < '4.0'",
1381
+ "version": "==0.3.18"
1382
+ },
1383
+ "langchain-core": {
1384
+ "hashes": [
1385
+ "sha256:328688228ece259da734417d477994a69cf8202dea9ed4271f2d792e3575c6fc",
1386
+ "sha256:81a4097226e180fa6c64e2d2ab38dcacbbc23b64fc109fb15622910fe8951670"
1387
+ ],
1388
+ "index": "pypi",
1389
+ "markers": "python_version >= '3.9' and python_version < '4.0'",
1390
+ "version": "==0.3.35"
1391
+ },
1392
+ "langchain-google-genai": {
1393
+ "hashes": [
1394
+ "sha256:48d8c78c42048d54f40dff333db9d359746644e0feb0e08b5eabdf34ad7149ca",
1395
+ "sha256:65205089da1f72688a0ed6e7c6914af308b6514ab8038fd8126ecb20f1df234c"
1396
+ ],
1397
+ "index": "pypi",
1398
+ "markers": "python_version >= '3.9' and python_version < '4.0'",
1399
+ "version": "==2.0.9"
1400
+ },
1401
+ "langchain-text-splitters": {
1402
+ "hashes": [
1403
+ "sha256:c537972f4b7c07451df431353a538019ad9dadff7a1073ea363946cea97e1bee",
1404
+ "sha256:e5d7b850f6c14259ea930be4a964a65fa95d9df7e1dbdd8bad8416db72292f4e"
1405
+ ],
1406
+ "markers": "python_version >= '3.9' and python_version < '4.0'",
1407
+ "version": "==0.3.6"
1408
+ },
1409
  "langcodes": {
1410
  "hashes": [
1411
  "sha256:1eef8168d07e51e131a2497ffecad4b663f6208e7c3ae3b8dc15c51734a6f801",
 
1414
  "markers": "python_version >= '3.9'",
1415
  "version": "==3.5.0"
1416
  },
1417
+ "langgraph": {
1418
+ "hashes": [
1419
+ "sha256:5b725c02a6eb55257479a0ea0db40926f766c8ff12c2730690f62c614d7e6ee5",
1420
+ "sha256:879cfda4d0a9e9795066f6e448282792d6290f6584f527a7588a64e972e73bad"
1421
+ ],
1422
+ "index": "pypi",
1423
+ "markers": "python_version < '4.0' and python_full_version >= '3.9.0'",
1424
+ "version": "==0.2.72"
1425
+ },
1426
+ "langgraph-checkpoint": {
1427
+ "hashes": [
1428
+ "sha256:5e62d9290b1a74edd19f90624e4a2cfda848be015b484818b650bc7cb307040c",
1429
+ "sha256:ae022c9f04401d7583442cbf4d649cd48b9767fe6397c8036e4f2a6256309f5c"
1430
+ ],
1431
+ "markers": "python_full_version >= '3.9.0' and python_full_version < '4.0.0'",
1432
+ "version": "==2.0.13"
1433
+ },
1434
+ "langgraph-sdk": {
1435
+ "hashes": [
1436
+ "sha256:ce2b58466d1700d06149782ed113157a8694a6d7932c801f316cd13fab315fe4",
1437
+ "sha256:dea1363e72562cb1e82a2d156be8d5b1a69ff3fe8815eee0e1e7a2f423242ec1"
1438
+ ],
1439
+ "markers": "python_full_version >= '3.9.0' and python_full_version < '4.0.0'",
1440
+ "version": "==0.1.51"
1441
+ },
1442
+ "langsmith": {
1443
+ "hashes": [
1444
+ "sha256:97f9bebe0b7cb0a4f278e6ff30ae7d5ededff3883b014442ec6d7d575b02a0f1",
1445
+ "sha256:fbb9dd97b0f090219447fca9362698d07abaeda1da85aa7cc6ec6517b36581b1"
1446
+ ],
1447
+ "markers": "python_version >= '3.9' and python_version < '4.0'",
1448
+ "version": "==0.3.8"
1449
+ },
1450
  "language-data": {
1451
  "hashes": [
1452
  "sha256:7600ef8aa39555145d06c89f0c324bf7dab834ea0b0a439d8243762e3ebad7ec",
 
1464
  },
1465
  "librosa": {
1466
  "hashes": [
1467
+ "sha256:cd99f16717cbcd1e0983e37308d1db46a6f7dfc2e396e5a9e61e6821e44bd2e7",
1468
+ "sha256:dc882750e8b577a63039f25661b7e39ec4cfbacc99c1cffba666cd664fb0a7a0"
1469
  ],
1470
  "markers": "python_version >= '3.7'",
1471
+ "version": "==0.10.2.post1"
1472
  },
1473
  "llvmlite": {
1474
  "hashes": [
1475
+ "sha256:07667d66a5d150abed9157ab6c0b9393c9356f229784a4385c02f99e94fc94d4",
1476
+ "sha256:1d671a56acf725bf1b531d5ef76b86660a5ab8ef19bb6a46064a705c6ca80aad",
1477
+ "sha256:2fb7c4f2fb86cbae6dca3db9ab203eeea0e22d73b99bc2341cdf9de93612e930",
1478
+ "sha256:319bddd44e5f71ae2689859b7203080716448a3cd1128fb144fe5c055219d516",
1479
+ "sha256:40526fb5e313d7b96bda4cbb2c85cd5374e04d80732dd36a282d72a560bb6408",
1480
+ "sha256:41e3839150db4330e1b2716c0be3b5c4672525b4c9005e17c7597f835f351ce2",
1481
+ "sha256:46224058b13c96af1365290bdfebe9a6264ae62fb79b2b55693deed11657a8bf",
1482
+ "sha256:5f79a728e0435493611c9f405168682bb75ffd1fbe6fc360733b850c80a026db",
1483
+ "sha256:7202b678cdf904823c764ee0fe2dfe38a76981f4c1e51715b4cb5abb6cf1d9e8",
1484
+ "sha256:9c58867118bad04a0bb22a2e0068c693719658105e40009ffe95c7000fcde88e",
1485
+ "sha256:9fbadbfba8422123bab5535b293da1cf72f9f478a65645ecd73e781f962ca614",
1486
+ "sha256:aa0097052c32bf721a4efc03bd109d335dfa57d9bffb3d4c24cc680711b8b4fc",
1487
+ "sha256:ace564d9fa44bb91eb6e6d8e7754977783c68e90a471ea7ce913bff30bd62427",
1488
+ "sha256:c0143a5ef336da14deaa8ec26c5449ad5b6a2b564df82fcef4be040b9cacfea9",
1489
+ "sha256:c5d22c3bfc842668168a786af4205ec8e3ad29fb1bc03fd11fd48460d0df64c1",
1490
+ "sha256:cccf8eb28f24840f2689fb1a45f9c0f7e582dd24e088dcf96e424834af11f791",
1491
+ "sha256:d752f89e31b66db6f8da06df8b39f9b91e78c5feea1bf9e8c1fba1d1c24c065d",
1492
+ "sha256:d8489634d43c20cd0ad71330dde1d5bc7b9966937a263ff1ec1cebb90dc50955",
1493
+ "sha256:eae7e2d4ca8f88f89d315b48c6b741dcb925d6a1042da694aa16ab3dd4cbd3a1",
1494
+ "sha256:eed7d5f29136bda63b6d7804c279e2b72e08c952b7c5df61f45db408e0ee52f3",
1495
+ "sha256:f01a394e9c9b7b1d4e63c327b096d10f6f0ed149ef53d38a09b3749dcf8c9610"
1496
  ],
1497
+ "markers": "python_version >= '3.10'",
1498
+ "version": "==0.44.0"
1499
  },
1500
  "marisa-trie": {
1501
  "hashes": [
 
1664
  },
1665
  "matplotlib": {
1666
  "hashes": [
1667
+ "sha256:01d2b19f13aeec2e759414d3bfe19ddfb16b13a1250add08d46d5ff6f9be83c6",
1668
+ "sha256:12eaf48463b472c3c0f8dbacdbf906e573013df81a0ab82f0616ea4b11281908",
1669
+ "sha256:2c5829a5a1dd5a71f0e31e6e8bb449bc0ee9dbfb05ad28fc0c6b55101b3a4be6",
1670
+ "sha256:2fbbabc82fde51391c4da5006f965e36d86d95f6ee83fb594b279564a4c5d0d2",
1671
+ "sha256:3547d153d70233a8496859097ef0312212e2689cdf8d7ed764441c77604095ae",
1672
+ "sha256:359f87baedb1f836ce307f0e850d12bb5f1936f70d035561f90d41d305fdacea",
1673
+ "sha256:3b427392354d10975c1d0f4ee18aa5844640b512d5311ef32efd4dd7db106ede",
1674
+ "sha256:4659665bc7c9b58f8c00317c3c2a299f7f258eeae5a5d56b4c64226fca2f7c59",
1675
+ "sha256:4673ff67a36152c48ddeaf1135e74ce0d4bce1bbf836ae40ed39c29edf7e2765",
1676
+ "sha256:503feb23bd8c8acc75541548a1d709c059b7184cde26314896e10a9f14df5f12",
1677
+ "sha256:5439f4c5a3e2e8eab18e2f8c3ef929772fd5641876db71f08127eed95ab64683",
1678
+ "sha256:5cdbaf909887373c3e094b0318d7ff230b2ad9dcb64da7ade654182872ab2593",
1679
+ "sha256:5e6c6461e1fc63df30bf6f80f0b93f5b6784299f721bc28530477acd51bfc3d1",
1680
+ "sha256:5fd41b0ec7ee45cd960a8e71aea7c946a28a0b8a4dcee47d2856b2af051f334c",
1681
+ "sha256:607b16c8a73943df110f99ee2e940b8a1cbf9714b65307c040d422558397dac5",
1682
+ "sha256:7e8632baebb058555ac0cde75db885c61f1212e47723d63921879806b40bec6a",
1683
+ "sha256:81713dd0d103b379de4516b861d964b1d789a144103277769238c732229d7f03",
1684
+ "sha256:845d96568ec873be63f25fa80e9e7fae4be854a66a7e2f0c8ccc99e94a8bd4ef",
1685
+ "sha256:95b710fea129c76d30be72c3b38f330269363fbc6e570a5dd43580487380b5ff",
1686
+ "sha256:96f2886f5c1e466f21cc41b70c5a0cd47bfa0015eb2d5793c88ebce658600e25",
1687
+ "sha256:994c07b9d9fe8d25951e3202a68c17900679274dadfc1248738dcfa1bd40d7f3",
1688
+ "sha256:9ade1003376731a971e398cc4ef38bb83ee8caf0aee46ac6daa4b0506db1fd06",
1689
+ "sha256:9b0558bae37f154fffda54d779a592bc97ca8b4701f1c710055b609a3bac44c8",
1690
+ "sha256:a2a43cbefe22d653ab34bb55d42384ed30f611bcbdea1f8d7f431011a2e1c62e",
1691
+ "sha256:a994f29e968ca002b50982b27168addfd65f0105610b6be7fa515ca4b5307c95",
1692
+ "sha256:ad2e15300530c1a94c63cfa546e3b7864bd18ea2901317bae8bbf06a5ade6dcf",
1693
+ "sha256:ae80dc3a4add4665cf2faa90138384a7ffe2a4e37c58d83e115b54287c4f06ef",
1694
+ "sha256:b886d02a581b96704c9d1ffe55709e49b4d2d52709ccebc4be42db856e511278",
1695
+ "sha256:c40ba2eb08b3f5de88152c2333c58cee7edcead0a2a0d60fcafa116b17117adc",
1696
+ "sha256:c55b20591ced744aa04e8c3e4b7543ea4d650b6c3c4b208c08a05b4010e8b442",
1697
+ "sha256:c58a9622d5dbeb668f407f35f4e6bfac34bb9ecdcc81680c04d0258169747997",
1698
+ "sha256:d44cb942af1693cced2604c33a9abcef6205601c445f6d0dc531d813af8a2f5a",
1699
+ "sha256:d907fddb39f923d011875452ff1eca29a9e7f21722b873e90db32e5d8ddff12e",
1700
+ "sha256:fd44fc75522f58612ec4a33958a7e5552562b7705b42ef1b4f8c0818e304a363"
1701
  ],
1702
+ "markers": "python_version >= '3.10'",
1703
+ "version": "==3.10.0"
1704
  },
1705
  "mdurl": {
1706
  "hashes": [
 
1968
  },
1969
  "numba": {
1970
  "hashes": [
1971
+ "sha256:074cd38c5b1f9c65a4319d1f3928165f48975ef0537ad43385b2bd908e6e2e35",
1972
+ "sha256:0ebbd4827091384ab8c4615ba1b3ca8bc639a3a000157d9c37ba85d34cd0da1b",
1973
+ "sha256:152146ecdbb8d8176f294e9f755411e6f270103a11c3ff50cecc413f794e52c8",
1974
+ "sha256:21c2fe25019267a608e2710a6a947f557486b4b0478b02e45a81cf606a05a7d4",
1975
+ "sha256:43aa4d7d10c542d3c78106b8481e0cbaaec788c39ee8e3d7901682748ffdf0b4",
1976
+ "sha256:44240e694d4aa321430c97b21453e46014fe6c7b8b7d932afa7f6a88cc5d7e5e",
1977
+ "sha256:46c5ae094fb3706f5adf9021bfb7fc11e44818d61afee695cdee4eadfed45e98",
1978
+ "sha256:550d389573bc3b895e1ccb18289feea11d937011de4d278b09dc7ed585d1cdcb",
1979
+ "sha256:5cafa6095716fcb081618c28a8d27bf7c001e09696f595b41836dec114be2905",
1980
+ "sha256:5f6c452dca1de8e60e593f7066df052dd8da09b243566ecd26d2b796e5d3087d",
1981
+ "sha256:6fb74e81aa78a2303e30593d8331327dfc0d2522b5db05ac967556a26db3ef87",
1982
+ "sha256:74250b26ed6a1428763e774dc5b2d4e70d93f73795635b5412b8346a4d054574",
1983
+ "sha256:764f0e47004f126f58c3b28e0a02374c420a9d15157b90806d68590f5c20cc89",
1984
+ "sha256:888d2e89b8160899e19591467e8fdd4970e07606e1fbc248f239c89818d5f925",
1985
+ "sha256:9cab9783a700fa428b1a54d65295122bc03b3de1d01fb819a6b9dbbddfdb8c43",
1986
+ "sha256:9f25f7fef0206d55c1cfb796ad833cbbc044e2884751e56e798351280038484c",
1987
+ "sha256:b72bbc8708e98b3741ad0c63f9929c47b623cc4ee86e17030a4f3e301e8401ac",
1988
+ "sha256:b96fafbdcf6f69b69855273e988696aae4974115a815f6818fef4af7afa1f6b8",
1989
+ "sha256:bf64c2d0f3d161af603de3825172fb83c2600bcb1d53ae8ea568d4c53ba6ac08",
1990
+ "sha256:de5aa7904741425f28e1028b85850b31f0a245e9eb4f7c38507fb893283a066c",
1991
+ "sha256:ffe9fe373ed30638d6e20a0269f817b2c75d447141f55a675bfcf2d1fe2e87fb"
1992
  ],
1993
  "markers": "python_version >= '3.9'",
1994
+ "version": "==0.61.0"
1995
  },
1996
  "numpy": {
1997
  "hashes": [
1998
+ "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b",
1999
+ "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818",
2000
+ "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20",
2001
+ "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0",
2002
+ "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010",
2003
+ "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a",
2004
+ "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea",
2005
+ "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c",
2006
+ "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71",
2007
+ "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110",
2008
+ "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be",
2009
+ "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a",
2010
+ "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a",
2011
+ "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5",
2012
+ "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed",
2013
+ "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd",
2014
+ "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c",
2015
+ "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e",
2016
+ "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0",
2017
+ "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c",
2018
+ "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a",
2019
+ "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b",
2020
+ "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0",
2021
+ "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6",
2022
+ "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2",
2023
+ "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a",
2024
+ "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30",
2025
+ "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218",
2026
+ "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5",
2027
+ "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07",
2028
+ "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2",
2029
+ "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4",
2030
+ "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764",
2031
+ "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef",
2032
+ "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3",
2033
+ "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f"
2034
  ],
2035
+ "markers": "python_version >= '3.9'",
2036
+ "version": "==1.26.4"
2037
  },
2038
  "nvidia-cublas-cu12": {
2039
  "hashes": [
 
2115
  "markers": "platform_system == 'Linux' and platform_machine == 'x86_64'",
2116
  "version": "==12.3.1.170"
2117
  },
2118
+ "nvidia-cusparselt-cu12": {
2119
+ "hashes": [
2120
+ "sha256:0057c91d230703924c0422feabe4ce768841f9b4b44d28586b6f6d2eb86fbe70",
2121
+ "sha256:067a7f6d03ea0d4841c85f0c6f1991c5dda98211f6302cb83a4ab234ee95bef8",
2122
+ "sha256:df2c24502fd76ebafe7457dbc4716b2fec071aabaed4fb7691a201cde03704d9"
2123
+ ],
2124
+ "markers": "platform_system == 'Linux' and platform_machine == 'x86_64'",
2125
+ "version": "==0.6.2"
2126
+ },
2127
  "nvidia-nccl-cu12": {
2128
  "hashes": [
2129
  "sha256:8579076d30a8c24988834445f8d633c697d42397e92ffc3f63fa26766d25e0a0"
 
2157
  "markers": "python_version >= '3.8'",
2158
  "version": "==20240930"
2159
  },
2160
+ "orjson": {
2161
+ "hashes": [
2162
+ "sha256:035fb83585e0f15e076759b6fedaf0abb460d1765b6a36f48018a52858443514",
2163
+ "sha256:05ca7fe452a2e9d8d9d706a2984c95b9c2ebc5db417ce0b7a49b91d50642a23e",
2164
+ "sha256:0a4f27ea5617828e6b58922fdbec67b0aa4bb844e2d363b9244c47fa2180e665",
2165
+ "sha256:13242f12d295e83c2955756a574ddd6741c81e5b99f2bef8ed8d53e47a01e4b7",
2166
+ "sha256:17085a6aa91e1cd70ca8533989a18b5433e15d29c574582f76f821737c8d5806",
2167
+ "sha256:1e6d33efab6b71d67f22bf2962895d3dc6f82a6273a965fab762e64fa90dc399",
2168
+ "sha256:208beedfa807c922da4e81061dafa9c8489c6328934ca2a562efa707e049e561",
2169
+ "sha256:295c70f9dc154307777ba30fe29ff15c1bcc9dfc5c48632f37d20a607e9ba85a",
2170
+ "sha256:305b38b2b8f8083cc3d618927d7f424349afce5975b316d33075ef0f73576b60",
2171
+ "sha256:33aedc3d903378e257047fee506f11e0833146ca3e57a1a1fb0ddb789876c1e1",
2172
+ "sha256:3614ea508d522a621384c1d6639016a5a2e4f027f3e4a1c93a51867615d28829",
2173
+ "sha256:3766ac4702f8f795ff3fa067968e806b4344af257011858cc3d6d8721588b53f",
2174
+ "sha256:3a63bb41559b05360ded9132032239e47983a39b151af1201f07ec9370715c82",
2175
+ "sha256:43e17289ffdbbac8f39243916c893d2ae41a2ea1a9cbb060a56a4d75286351ae",
2176
+ "sha256:552c883d03ad185f720d0c09583ebde257e41b9521b74ff40e08b7dec4559c04",
2177
+ "sha256:5dd9ef1639878cc3efffed349543cbf9372bdbd79f478615a1c633fe4e4180d1",
2178
+ "sha256:5e8afd6200e12771467a1a44e5ad780614b86abb4b11862ec54861a82d677746",
2179
+ "sha256:616e3e8d438d02e4854f70bfdc03a6bcdb697358dbaa6bcd19cbe24d24ece1f8",
2180
+ "sha256:63309e3ff924c62404923c80b9e2048c1f74ba4b615e7584584389ada50ed428",
2181
+ "sha256:6875210307d36c94873f553786a808af2788e362bd0cf4c8e66d976791e7b528",
2182
+ "sha256:6fd9bc64421e9fe9bd88039e7ce8e58d4fead67ca88e3a4014b143cec7684fd4",
2183
+ "sha256:7066b74f9f259849629e0d04db6609db4cf5b973248f455ba5d3bd58a4daaa5b",
2184
+ "sha256:73cb85490aa6bf98abd20607ab5c8324c0acb48d6da7863a51be48505646c814",
2185
+ "sha256:763dadac05e4e9d2bc14938a45a2d0560549561287d41c465d3c58aec818b164",
2186
+ "sha256:7723ad949a0ea502df656948ddd8b392780a5beaa4c3b5f97e525191b102fff0",
2187
+ "sha256:781d54657063f361e89714293c095f506c533582ee40a426cb6489c48a637b81",
2188
+ "sha256:7946922ada8f3e0b7b958cc3eb22cfcf6c0df83d1fe5521b4a100103e3fa84c8",
2189
+ "sha256:7a1c73dcc8fadbd7c55802d9aa093b36878d34a3b3222c41052ce6b0fc65f8e8",
2190
+ "sha256:7c203f6f969210128af3acae0ef9ea6aab9782939f45f6fe02d05958fe761ef9",
2191
+ "sha256:7c2c79fa308e6edb0ffab0a31fd75a7841bf2a79a20ef08a3c6e3b26814c8ca8",
2192
+ "sha256:7c864a80a2d467d7786274fce0e4f93ef2a7ca4ff31f7fc5634225aaa4e9e98c",
2193
+ "sha256:88dc3f65a026bd3175eb157fea994fca6ac7c4c8579fc5a86fc2114ad05705b7",
2194
+ "sha256:8918719572d662e18b8af66aef699d8c21072e54b6c82a3f8f6404c1f5ccd5e0",
2195
+ "sha256:9d11c0714fc85bfcf36ada1179400862da3288fc785c30e8297844c867d7505a",
2196
+ "sha256:9e590a0477b23ecd5b0ac865b1b907b01b3c5535f5e8a8f6ab0e503efb896334",
2197
+ "sha256:9e992fd5cfb8b9f00bfad2fd7a05a4299db2bbe92e6440d9dd2fab27655b3182",
2198
+ "sha256:a2f708c62d026fb5340788ba94a55c23df4e1869fec74be455e0b2f5363b8507",
2199
+ "sha256:a330b9b4734f09a623f74a7490db713695e13b67c959713b78369f26b3dee6bf",
2200
+ "sha256:a61a4622b7ff861f019974f73d8165be1bd9a0855e1cad18ee167acacabeb061",
2201
+ "sha256:a6be38bd103d2fd9bdfa31c2720b23b5d47c6796bcb1d1b598e3924441b4298d",
2202
+ "sha256:abc7abecdbf67a173ef1316036ebbf54ce400ef2300b4e26a7b843bd446c2480",
2203
+ "sha256:acd271247691574416b3228db667b84775c497b245fa275c6ab90dc1ffbbd2b3",
2204
+ "sha256:b0482b21d0462eddd67e7fce10b89e0b6ac56570424662b685a0d6fccf581e13",
2205
+ "sha256:b299383825eafe642cbab34be762ccff9fd3408d72726a6b2a4506d410a71ab3",
2206
+ "sha256:b342567e5465bd99faa559507fe45e33fc76b9fb868a63f1642c6bc0735ad02a",
2207
+ "sha256:b48f59114fe318f33bbaee8ebeda696d8ccc94c9e90bc27dbe72153094e26f41",
2208
+ "sha256:b7155eb1623347f0f22c38c9abdd738b287e39b9982e1da227503387b81b34ca",
2209
+ "sha256:bae0e6ec2b7ba6895198cd981b7cca95d1487d0147c8ed751e5632ad16f031a6",
2210
+ "sha256:bb00b7bfbdf5d34a13180e4805d76b4567025da19a197645ca746fc2fb536586",
2211
+ "sha256:bb5cc3527036ae3d98b65e37b7986a918955f85332c1ee07f9d3f82f3a6899b5",
2212
+ "sha256:c03cd6eea1bd3b949d0d007c8d57049aa2b39bd49f58b4b2af571a5d3833d890",
2213
+ "sha256:c25774c9e88a3e0013d7d1a6c8056926b607a61edd423b50eb5c88fd7f2823ae",
2214
+ "sha256:c33be3795e299f565681d69852ac8c1bc5c84863c0b0030b2b3468843be90388",
2215
+ "sha256:c4cc83960ab79a4031f3119cc4b1a1c627a3dc09df125b27c4201dff2af7eaa6",
2216
+ "sha256:cf45e0214c593660339ef63e875f32ddd5aa3b4adc15e662cdb80dc49e194f8e",
2217
+ "sha256:d13b7fe322d75bf84464b075eafd8e7dd9eae05649aa2a5354cfa32f43c59f17",
2218
+ "sha256:d433bf32a363823863a96561a555227c18a522a8217a6f9400f00ddc70139ae2",
2219
+ "sha256:d569c1c462912acdd119ccbf719cf7102ea2c67dd03b99edcb1a3048651ac96b",
2220
+ "sha256:d5ac11b659fd798228a7adba3e37c010e0152b78b1982897020a8e019a94882e",
2221
+ "sha256:da03392674f59a95d03fa5fb9fe3a160b0511ad84b7a3914699ea5a1b3a38da2",
2222
+ "sha256:da9a18c500f19273e9e104cca8c1f0b40a6470bcccfc33afcc088045d0bf5ea6",
2223
+ "sha256:dadba0e7b6594216c214ef7894c4bd5f08d7c0135f4dd0145600be4fbcc16767",
2224
+ "sha256:dba5a1e85d554e3897fa9fe6fbcff2ed32d55008973ec9a2b992bd9a65d2352d",
2225
+ "sha256:dd0099ae6aed5eb1fc84c9eb72b95505a3df4267e6962eb93cdd5af03be71c98",
2226
+ "sha256:ddbeef2481d895ab8be5185f2432c334d6dec1f5d1933a9c83014d188e102cef",
2227
+ "sha256:e117eb299a35f2634e25ed120c37c641398826c2f5a3d3cc39f5993b96171b9e",
2228
+ "sha256:e4759b109c37f635aa5c5cc93a1b26927bfde24b254bcc0e1149a9fada253d2d",
2229
+ "sha256:e78c211d0074e783d824ce7bb85bf459f93a233eb67a5b5003498232ddfb0e8a",
2230
+ "sha256:eca81f83b1b8c07449e1d6ff7074e82e3fd6777e588f1a6632127f286a968825",
2231
+ "sha256:eea80037b9fae5339b214f59308ef0589fc06dc870578b7cce6d71eb2096764c",
2232
+ "sha256:ef5b87e7aa9545ddadd2309efe6824bd3dd64ac101c15dae0f2f597911d46eaa",
2233
+ "sha256:efcf6c735c3d22ef60c4aa27a5238f1a477df85e9b15f2142f9d669beb2d13fd",
2234
+ "sha256:f71eae9651465dff70aa80db92586ad5b92df46a9373ee55252109bb6b703307",
2235
+ "sha256:f93ce145b2db1252dd86af37d4165b6faa83072b46e3995ecc95d4b2301b725a",
2236
+ "sha256:f95fb363d79366af56c3f26b71df40b9a583b07bbaaf5b317407c4d58497852e",
2237
+ "sha256:f9875f5fea7492da8ec2444839dcc439b0ef298978f311103d0b7dfd775898ab",
2238
+ "sha256:fd56a26a04f6ba5fb2045b0acc487a63162a958ed837648c5781e1fe3316cfbf",
2239
+ "sha256:ff4f6edb1578960ed628a3b998fa54d78d9bb3e2eb2cfc5c2a09732431c678d0",
2240
+ "sha256:ffe19f3e8d68111e8644d4f4e267a069ca427926855582ff01fc012496d19969"
2241
+ ],
2242
+ "markers": "python_version >= '3.8'",
2243
+ "version": "==3.10.15"
2244
+ },
2245
  "packaging": {
2246
  "hashes": [
2247
  "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759",
 
2503
  "markers": "python_version >= '3.9'",
2504
  "version": "==0.2.1"
2505
  },
2506
+ "proto-plus": {
2507
+ "hashes": [
2508
+ "sha256:6e93d5f5ca267b54300880fff156b6a3386b3fa3f43b1da62e680fc0c586ef22",
2509
+ "sha256:bf2dfaa3da281fc3187d12d224c707cb57214fb2c22ba854eb0c105a3fb2d4d7"
2510
+ ],
2511
+ "markers": "python_version >= '3.7'",
2512
+ "version": "==1.26.0"
2513
+ },
2514
  "protobuf": {
2515
  "hashes": [
2516
  "sha256:0a18ed4a24198528f2333802eb075e59dea9d679ab7a6c5efb017a59004d849f",
 
2599
  "markers": "python_version >= '3.9'",
2600
  "version": "==19.0.0"
2601
  },
2602
+ "pyasn1": {
2603
+ "hashes": [
2604
+ "sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629",
2605
+ "sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034"
2606
+ ],
2607
+ "markers": "python_version >= '3.8'",
2608
+ "version": "==0.6.1"
2609
+ },
2610
+ "pyasn1-modules": {
2611
+ "hashes": [
2612
+ "sha256:49bfa96b45a292b711e986f222502c1c9a5e1f4e568fc30e2574a6c7d07838fd",
2613
+ "sha256:c28e2dbf9c06ad61c71a075c7e0f9fd0f1b0bb2d2ad4377f240d33ac2ab60a7c"
2614
+ ],
2615
+ "markers": "python_version >= '3.8'",
2616
+ "version": "==0.4.1"
2617
+ },
2618
  "pycparser": {
2619
  "hashes": [
2620
  "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6",
 
2628
  "sha256:427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584",
2629
  "sha256:ca5daa827cce33de7a42be142548b0096bf05a7e7b365aebfa5f8eeec7128236"
2630
  ],
2631
+ "index": "pypi",
2632
  "markers": "python_version >= '3.8'",
2633
  "version": "==2.10.6"
2634
  },
 
3044
  "markers": "python_version >= '3.8'",
3045
  "version": "==2.32.3"
3046
  },
3047
+ "requests-toolbelt": {
3048
+ "hashes": [
3049
+ "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6",
3050
+ "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06"
3051
+ ],
3052
+ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
3053
+ "version": "==1.0.0"
3054
+ },
3055
  "rich": {
3056
  "hashes": [
3057
  "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098",
 
3169
  "markers": "python_version >= '3.9'",
3170
  "version": "==0.22.3"
3171
  },
3172
+ "rsa": {
3173
+ "hashes": [
3174
+ "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7",
3175
+ "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21"
3176
+ ],
3177
+ "markers": "python_version >= '3.6' and python_version < '4'",
3178
+ "version": "==4.9"
3179
+ },
3180
  "safetensors": {
3181
  "hashes": [
3182
  "sha256:03c937100f38c9ff4c1507abea9928a6a9b02c9c1c9c3609ed4fb2bf413d4975",
 
3236
  },
3237
  "scipy": {
3238
  "hashes": [
3239
+ "sha256:033a75ddad1463970c96a88063a1df87ccfddd526437136b6ee81ff0312ebdf6",
3240
+ "sha256:0458839c9f873062db69a03de9a9765ae2e694352c76a16be44f93ea45c28d2b",
3241
+ "sha256:070d10654f0cb6abd295bc96c12656f948e623ec5f9a4eab0ddb1466c000716e",
3242
+ "sha256:09c52320c42d7f5c7748b69e9f0389266fd4f82cf34c38485c14ee976cb8cb04",
3243
+ "sha256:0ac102ce99934b162914b1e4a6b94ca7da0f4058b6d6fd65b0cef330c0f3346f",
3244
+ "sha256:0fb57b30f0017d4afa5fe5f5b150b8f807618819287c21cbe51130de7ccdaed2",
3245
+ "sha256:100193bb72fbff37dbd0bf14322314fc7cbe08b7ff3137f11a34d06dc0ee6b85",
3246
+ "sha256:14eaa373c89eaf553be73c3affb11ec6c37493b7eaaf31cf9ac5dffae700c2e0",
3247
+ "sha256:2114a08daec64980e4b4cbdf5bee90935af66d750146b1d2feb0d3ac30613692",
3248
+ "sha256:21e10b1dd56ce92fba3e786007322542361984f8463c6d37f6f25935a5a6ef52",
3249
+ "sha256:2722a021a7929d21168830790202a75dbb20b468a8133c74a2c0230c72626b6c",
3250
+ "sha256:395be70220d1189756068b3173853029a013d8c8dd5fd3d1361d505b2aa58fa7",
3251
+ "sha256:3fe1d95944f9cf6ba77aa28b82dd6bb2a5b52f2026beb39ecf05304b8392864b",
3252
+ "sha256:491d57fe89927fa1aafbe260f4cfa5ffa20ab9f1435025045a5315006a91b8f5",
3253
+ "sha256:4b17d4220df99bacb63065c76b0d1126d82bbf00167d1730019d2a30d6ae01ea",
3254
+ "sha256:4c9d8fc81d6a3b6844235e6fd175ee1d4c060163905a2becce8e74cb0d7554ce",
3255
+ "sha256:55cc79ce4085c702ac31e49b1e69b27ef41111f22beafb9b49fea67142b696c4",
3256
+ "sha256:5b190b935e7db569960b48840e5bef71dc513314cc4e79a1b7d14664f57fd4ff",
3257
+ "sha256:5bd8d27d44e2c13d0c1124e6a556454f52cd3f704742985f6b09e75e163d20d2",
3258
+ "sha256:5dff14e75cdbcf07cdaa1c7707db6017d130f0af9ac41f6ce443a93318d6c6e0",
3259
+ "sha256:5eb0ca35d4b08e95da99a9f9c400dc9f6c21c424298a0ba876fdc69c7afacedf",
3260
+ "sha256:63b9b6cd0333d0eb1a49de6f834e8aeaefe438df8f6372352084535ad095219e",
3261
+ "sha256:667f950bf8b7c3a23b4199db24cb9bf7512e27e86d0e3813f015b74ec2c6e3df",
3262
+ "sha256:6b3e71893c6687fc5e29208d518900c24ea372a862854c9888368c0b267387ab",
3263
+ "sha256:71ba9a76c2390eca6e359be81a3e879614af3a71dfdabb96d1d7ab33da6f2364",
3264
+ "sha256:74bb864ff7640dea310a1377d8567dc2cb7599c26a79ca852fc184cc851954ac",
3265
+ "sha256:82add84e8a9fb12af5c2c1a3a3f1cb51849d27a580cb9e6bd66226195142be6e",
3266
+ "sha256:837299eec3d19b7e042923448d17d95a86e43941104d33f00da7e31a0f715d3c",
3267
+ "sha256:900f3fa3db87257510f011c292a5779eb627043dd89731b9c461cd16ef76ab3d",
3268
+ "sha256:9f151e9fb60fbf8e52426132f473221a49362091ce7a5e72f8aa41f8e0da4f25",
3269
+ "sha256:af0b61c1de46d0565b4b39c6417373304c1d4f5220004058bdad3061c9fa8a95",
3270
+ "sha256:bc7136626261ac1ed988dca56cfc4ab5180f75e0ee52e58f1e6aa74b5f3eacd5",
3271
+ "sha256:be3deeb32844c27599347faa077b359584ba96664c5c79d71a354b80a0ad0ce0",
3272
+ "sha256:c09aa9d90f3500ea4c9b393ee96f96b0ccb27f2f350d09a47f533293c78ea776",
3273
+ "sha256:c352c1b6d7cac452534517e022f8f7b8d139cd9f27e6fbd9f3cbd0bfd39f5bef",
3274
+ "sha256:c64ded12dcab08afff9e805a67ff4480f5e69993310e093434b10e85dc9d43e1",
3275
+ "sha256:cdde8414154054763b42b74fe8ce89d7f3d17a7ac5dd77204f0e142cdc9239e9",
3276
+ "sha256:ce3a000cd28b4430426db2ca44d96636f701ed12e2b3ca1f2b1dd7abdd84b39a",
3277
+ "sha256:f735bc41bd1c792c96bc426dece66c8723283695f02df61dcc4d0a707a42fc54",
3278
+ "sha256:f82fcf4e5b377f819542fbc8541f7b5fbcf1c0017d0df0bc22c781bf60abc4d8"
3279
  ],
3280
+ "markers": "python_version >= '3.10'",
3281
+ "version": "==1.15.1"
3282
  },
3283
  "setuptools": {
3284
  "hashes": [
 
3320
  "markers": "python_version >= '3.7'",
3321
  "version": "==5.0.2"
3322
  },
3323
+ "sniffio": {
3324
+ "hashes": [
3325
+ "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2",
3326
+ "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"
3327
+ ],
3328
+ "markers": "python_version >= '3.7'",
3329
+ "version": "==1.3.1"
3330
+ },
3331
  "soundfile": {
3332
  "hashes": [
3333
  "sha256:03267c4e493315294834a0870f31dbb3b28a95561b80b134f0bd3cf2d5f0e618",
 
3341
  ],
3342
  "version": "==0.13.1"
3343
  },
3344
+ "sox": {
3345
+ "hashes": [
3346
+ "sha256:12c7be5bb1f548d891fe11e82c08cf5f1a1d74e225298f60082e5aeb2469ada0"
3347
+ ],
3348
+ "index": "pypi",
3349
+ "version": "==1.5.0"
3350
+ },
3351
  "soxr": {
3352
  "hashes": [
3353
  "sha256:39e0f791ba178d69cd676485dbee37e75a34f20daa478d90341ecb7f6d9d690f",
 
3415
  "markers": "python_version >= '3.6'",
3416
  "version": "==1.0.5"
3417
  },
3418
+ "sqlalchemy": {
3419
+ "hashes": [
3420
+ "sha256:0398361acebb42975deb747a824b5188817d32b5c8f8aba767d51ad0cc7bb08d",
3421
+ "sha256:0561832b04c6071bac3aad45b0d3bb6d2c4f46a8409f0a7a9c9fa6673b41bc03",
3422
+ "sha256:07258341402a718f166618470cde0c34e4cec85a39767dce4e24f61ba5e667ea",
3423
+ "sha256:0a826f21848632add58bef4f755a33d45105d25656a0c849f2dc2df1c71f6f50",
3424
+ "sha256:1052723e6cd95312f6a6eff9a279fd41bbae67633415373fdac3c430eca3425d",
3425
+ "sha256:12d5b06a1f3aeccf295a5843c86835033797fea292c60e72b07bcb5d820e6dd3",
3426
+ "sha256:12f5c9ed53334c3ce719155424dc5407aaa4f6cadeb09c5b627e06abb93933a1",
3427
+ "sha256:2a0ef3f98175d77180ffdc623d38e9f1736e8d86b6ba70bff182a7e68bed7727",
3428
+ "sha256:2f2951dc4b4f990a4b394d6b382accb33141d4d3bd3ef4e2b27287135d6bdd68",
3429
+ "sha256:3868acb639c136d98107c9096303d2d8e5da2880f7706f9f8c06a7f961961149",
3430
+ "sha256:386b7d136919bb66ced64d2228b92d66140de5fefb3c7df6bd79069a269a7b06",
3431
+ "sha256:3d3043375dd5bbcb2282894cbb12e6c559654c67b5fffb462fda815a55bf93f7",
3432
+ "sha256:3e35d5565b35b66905b79ca4ae85840a8d40d31e0b3e2990f2e7692071b179ca",
3433
+ "sha256:402c2316d95ed90d3d3c25ad0390afa52f4d2c56b348f212aa9c8d072a40eee5",
3434
+ "sha256:40310db77a55512a18827488e592965d3dec6a3f1e3d8af3f8243134029daca3",
3435
+ "sha256:40e9cdbd18c1f84631312b64993f7d755d85a3930252f6276a77432a2b25a2f3",
3436
+ "sha256:49aa2cdd1e88adb1617c672a09bf4ebf2f05c9448c6dbeba096a3aeeb9d4d443",
3437
+ "sha256:57dd41ba32430cbcc812041d4de8d2ca4651aeefad2626921ae2a23deb8cd6ff",
3438
+ "sha256:5dba1cdb8f319084f5b00d41207b2079822aa8d6a4667c0f369fce85e34b0c86",
3439
+ "sha256:5e1d9e429028ce04f187a9f522818386c8b076723cdbe9345708384f49ebcec6",
3440
+ "sha256:63178c675d4c80def39f1febd625a6333f44c0ba269edd8a468b156394b27753",
3441
+ "sha256:6493bc0eacdbb2c0f0d260d8988e943fee06089cd239bd7f3d0c45d1657a70e2",
3442
+ "sha256:64aa8934200e222f72fcfd82ee71c0130a9c07d5725af6fe6e919017d095b297",
3443
+ "sha256:665255e7aae5f38237b3a6eae49d2358d83a59f39ac21036413fab5d1e810578",
3444
+ "sha256:6db316d6e340f862ec059dc12e395d71f39746a20503b124edc255973977b728",
3445
+ "sha256:70065dfabf023b155a9c2a18f573e47e6ca709b9e8619b2e04c54d5bcf193178",
3446
+ "sha256:8455aa60da49cb112df62b4721bd8ad3654a3a02b9452c783e651637a1f21fa2",
3447
+ "sha256:8b0ac78898c50e2574e9f938d2e5caa8fe187d7a5b69b65faa1ea4648925b096",
3448
+ "sha256:8bf312ed8ac096d674c6aa9131b249093c1b37c35db6a967daa4c84746bc1bc9",
3449
+ "sha256:92f99f2623ff16bd4aaf786ccde759c1f676d39c7bf2855eb0b540e1ac4530c8",
3450
+ "sha256:9c8bcad7fc12f0cc5896d8e10fdf703c45bd487294a986903fe032c72201596b",
3451
+ "sha256:9cd136184dd5f58892f24001cdce986f5d7e96059d004118d5410671579834a4",
3452
+ "sha256:9eb4fa13c8c7a2404b6a8e3772c17a55b1ba18bc711e25e4d6c0c9f5f541b02a",
3453
+ "sha256:a2bc4e49e8329f3283d99840c136ff2cd1a29e49b5624a46a290f04dff48e079",
3454
+ "sha256:a5645cd45f56895cfe3ca3459aed9ff2d3f9aaa29ff7edf557fa7a23515a3725",
3455
+ "sha256:a9afbc3909d0274d6ac8ec891e30210563b2c8bdd52ebbda14146354e7a69373",
3456
+ "sha256:aa498d1392216fae47eaf10c593e06c34476ced9549657fca713d0d1ba5f7248",
3457
+ "sha256:afd776cf1ebfc7f9aa42a09cf19feadb40a26366802d86c1fba080d8e5e74bdd",
3458
+ "sha256:b335a7c958bc945e10c522c069cd6e5804f4ff20f9a744dd38e748eb602cbbda",
3459
+ "sha256:b3c4817dff8cef5697f5afe5fec6bc1783994d55a68391be24cb7d80d2dbc3a6",
3460
+ "sha256:b79ee64d01d05a5476d5cceb3c27b5535e6bb84ee0f872ba60d9a8cd4d0e6579",
3461
+ "sha256:b87a90f14c68c925817423b0424381f0e16d80fc9a1a1046ef202ab25b19a444",
3462
+ "sha256:bf89e0e4a30714b357f5d46b6f20e0099d38b30d45fa68ea48589faf5f12f62d",
3463
+ "sha256:c058b84c3b24812c859300f3b5abf300daa34df20d4d4f42e9652a4d1c48c8a4",
3464
+ "sha256:c09a6ea87658695e527104cf857c70f79f14e9484605e205217aae0ec27b45fc",
3465
+ "sha256:c57b8e0841f3fce7b703530ed70c7c36269c6d180ea2e02e36b34cb7288c50c7",
3466
+ "sha256:c9cea5b756173bb86e2235f2f871b406a9b9d722417ae31e5391ccaef5348f2c",
3467
+ "sha256:cb39ed598aaf102251483f3e4675c5dd6b289c8142210ef76ba24aae0a8f8aba",
3468
+ "sha256:e036549ad14f2b414c725349cce0772ea34a7ab008e9cd67f9084e4f371d1f32",
3469
+ "sha256:e185ea07a99ce8b8edfc788c586c538c4b1351007e614ceb708fd01b095ef33e",
3470
+ "sha256:e5a4d82bdb4bf1ac1285a68eab02d253ab73355d9f0fe725a97e1e0fa689decb",
3471
+ "sha256:eae27ad7580529a427cfdd52c87abb2dfb15ce2b7a3e0fc29fbb63e2ed6f8120",
3472
+ "sha256:ecef029b69843b82048c5b347d8e6049356aa24ed644006c9a9d7098c3bd3bfd",
3473
+ "sha256:ee3bee874cb1fadee2ff2b79fc9fc808aa638670f28b2145074538d4a6a5028e",
3474
+ "sha256:f0d3de936b192980209d7b5149e3c98977c3810d401482d05fb6d668d53c1c63",
3475
+ "sha256:f53c0d6a859b2db58332e0e6a921582a02c1677cc93d4cbb36fdf49709b327b2",
3476
+ "sha256:f9d57f1b3061b3e21476b0ad5f0397b112b94ace21d1f439f2db472e568178ae"
3477
+ ],
3478
+ "markers": "python_version >= '3.7'",
3479
+ "version": "==2.0.38"
3480
+ },
3481
  "srsly": {
3482
  "hashes": [
3483
  "sha256:00c2a3e4856e63b7efd47591d049aaee8e5a250e098917f50d93ea68853fab78",
 
3522
  },
3523
  "streamlit": {
3524
  "hashes": [
3525
+ "sha256:8c48494ccfad33e7d0bc5873151800b203cb71203bfd42bc7418940710ca4970",
3526
+ "sha256:edf333fd3525b7c64b19e1156b483a1a93cbdb09a3a06f26478388d68f971090"
3527
  ],
3528
  "index": "pypi",
3529
+ "markers": "python_version >= '3.9' and python_full_version != '3.9.7'",
3530
+ "version": "==1.42.0"
3531
  },
3532
  "sudachidict-core": {
3533
  "hashes": [
 
3577
  },
3578
  "tensorboard": {
3579
  "hashes": [
3580
+ "sha256:5e71b98663a641a7ce8a6e70b0be8e1a4c0c45d48760b076383ac4755c35b9a0"
3581
  ],
3582
  "markers": "python_version >= '3.9'",
3583
+ "version": "==2.19.0"
3584
  },
3585
  "tensorboard-data-server": {
3586
  "hashes": [
 
3694
  },
3695
  "torch": {
3696
  "hashes": [
3697
+ "sha256:09e06f9949e1a0518c5b09fe95295bc9661f219d9ecb6f9893e5123e10696628",
3698
+ "sha256:265f70de5fd45b864d924b64be1797f86e76c8e48a02c2a3a6fc7ec247d2226c",
3699
+ "sha256:2bb8987f3bb1ef2675897034402373ddfc8f5ef0e156e2d8cfc47cacafdda4a9",
3700
+ "sha256:46763dcb051180ce1ed23d1891d9b1598e07d051ce4c9d14307029809c4d64f7",
3701
+ "sha256:4874a73507a300a5d089ceaff616a569e7bb7c613c56f37f63ec3ffac65259cf",
3702
+ "sha256:510c73251bee9ba02ae1cb6c9d4ee0907b3ce6020e62784e2d7598e0cfa4d6cc",
3703
+ "sha256:56eeaf2ecac90da5d9e35f7f35eb286da82673ec3c582e310a8d1631a1c02341",
3704
+ "sha256:683410f97984103148e31b38a8631acf31c3034c020c0f4d26171e7626d8317a",
3705
+ "sha256:6860df13d9911ac158f4c44031609700e1eba07916fff62e21e6ffa0a9e01961",
3706
+ "sha256:7979834102cd5b7a43cc64e87f2f3b14bd0e1458f06e9f88ffa386d07c7446e1",
3707
+ "sha256:7e1448426d0ba3620408218b50aa6ada88aeae34f7a239ba5431f6c8774b1239",
3708
+ "sha256:94fc63b3b4bedd327af588696559f68c264440e2503cc9e6954019473d74ae21",
3709
+ "sha256:9a610afe216a85a8b9bc9f8365ed561535c93e804c2a317ef7fabcc5deda0989",
3710
+ "sha256:9ea955317cfcd3852b1402b62af258ce735c2edeee42ca9419b6bc889e5ae053",
3711
+ "sha256:a0d5e1b9874c1a6c25556840ab8920569a7a4137afa8a63a32cee0bc7d89bd4b",
3712
+ "sha256:b789069020c5588c70d5c2158ac0aa23fd24a028f34a8b4fcb8fcb4d7efcf5fb",
3713
+ "sha256:bb2c6c3e65049f081940f5ab15c9136c7de40d3f01192541c920a07c7c585b7e",
3714
+ "sha256:c4f103a49830ce4c7561ef4434cc7926e5a5fe4e5eb100c19ab36ea1e2b634ab",
3715
+ "sha256:ccbd0320411fe1a3b3fec7b4d3185aa7d0c52adac94480ab024b5c8f74a0bf1d",
3716
+ "sha256:ff96f4038f8af9f7ec4231710ed4549da1bdebad95923953a25045dcf6fd87e2"
3717
  ],
3718
  "index": "pypi",
3719
+ "markers": "python_full_version >= '3.9.0'",
3720
+ "version": "==2.6.0"
3721
  },
3722
  "torchaudio": {
3723
  "hashes": [
3724
+ "sha256:04803a969710bdb77a4ddfdb85a32fa9b9e0310dc91f7eb7e54d6083dd69bfab",
3725
+ "sha256:0eda1cd876f44fc014dc04aa680db2fa355a83df5d834398db6dd5f5cd911f4c",
3726
+ "sha256:0f0db5c997d031c34066d8be1c0ce7d2a1f2b6c016a92885b20b00bfeb17b753",
3727
+ "sha256:22798d5d8e37869bd5875d37f42270efbeb8ae94bda97fed40c1c5e0e1c62fa3",
3728
+ "sha256:377b177a3d683a9163e4cab5a06f0346dac9ff96fa527477338fd90fc6a2a4b6",
3729
+ "sha256:393fa74ec40d167f0170728ea21c9b5e0f830648fd02df7db2bf7e62f64245ec",
3730
+ "sha256:52182f6de4e7b342d139e54b703185d428de9cce3c4cf914a9b2ab2359d192a3",
3731
+ "sha256:52f15185349c370fc1faa84e8b8b2782c007472db9d586a16bba314130b322f2",
3732
+ "sha256:6291d9507dc1d6b4ffe8843fbfb201e6c8270dd8c42ad70bb76226c0ebdcad56",
3733
+ "sha256:66f2e0bd5ab56fd81419d2f5afb74a9a70141688594646441756c8c24f424a73",
3734
+ "sha256:715aa21f6bdbd085454c313ae3a2c7cc07bf2e8cf05752f819afb5b4c57f4e6f",
3735
+ "sha256:72e77055d8e742475c6dfacf59fab09b1fc94d4423e14897e188b67cad3851c6",
3736
+ "sha256:7d0e4b08c42325bf4b887de9a25c44ed882997001740e1bd7d901f65581cf1ab",
3737
+ "sha256:86d6239792bf94741a41acd6fe3d549faaf0d50e7275d17d076a190bd007e2f9",
3738
+ "sha256:8c1a4d08e35a9ceaadadbff6e60bcb3442482f800369be350103dfd08b4ddf52",
3739
+ "sha256:9d8e07789452efdb8132d62afe21f2293a72805f26c2891c6c53e4e4df38ddf6",
3740
+ "sha256:b521ea9618fb4c29a6f8071628170c222291f46a48a3bf424cfeb488f54af714",
3741
+ "sha256:c12fc41241b8dfce3ccc1917f1c81a0f92f532d9917706600046f1eb21d2d765",
3742
+ "sha256:c6386bfa478afae2137715bb60f35520e3b05f5fc6d3bcc6969cf9cdfb11c09c",
3743
+ "sha256:d855da878a28c2e5e6fb3d76fcddd544f4d957a320b29602cea5af2fe0ad1f3a"
3744
  ],
3745
  "index": "pypi",
3746
+ "version": "==2.6.0"
3747
  },
3748
  "tornado": {
3749
  "hashes": [
 
3788
  },
3789
  "triton": {
3790
  "hashes": [
3791
+ "sha256:30ceed0eff2c4a73b14eb63e052992f44bbdf175f3fad21e1ac8097a772de7ee",
3792
+ "sha256:8009a1fb093ee8546495e96731336a33fb8856a38e45bb4ab6affd6dbc3ba220",
3793
+ "sha256:8d9b215efc1c26fa7eefb9a157915c92d52e000d2bf83e5f69704047e63f125c",
3794
+ "sha256:b3e54983cd51875855da7c68ec05c05cf8bb08df361b1d5b69e05e40b0c9bd62",
3795
+ "sha256:e5dfa23ba84541d7c0a531dfce76d8bcd19159d50a4a8b14ad01e91734a5c1b0"
3796
  ],
3797
+ "markers": "platform_system == 'Linux' and platform_machine == 'x86_64'",
3798
+ "version": "==3.2.0"
3799
  },
3800
  "tts": {
3801
  "hashes": [
 
3834
  },
3835
  "tzlocal": {
3836
  "hashes": [
3837
+ "sha256:2fafbfc07e9d8b49ade18f898d6bcd37ae88ce3ad6486842a2e4f03af68323d2",
3838
+ "sha256:3814135a1bb29763c6e4f08fd6e41dbb435c7a60bfbb03270211bcc537187d8c"
3839
  ],
3840
+ "markers": "python_version >= '3.9'",
3841
+ "version": "==5.3"
3842
  },
3843
  "umap-learn": {
3844
  "hashes": [
 
3855
  "markers": "python_version >= '3.5'",
3856
  "version": "==1.3.8"
3857
  },
3858
+ "uritemplate": {
3859
+ "hashes": [
3860
+ "sha256:4346edfc5c3b79f694bccd6d6099a322bbeb628dbf2cd86eea55a456ce5124f0",
3861
+ "sha256:830c08b8d99bdd312ea4ead05994a38e8936266f84b9a7878232db50b044e02e"
3862
+ ],
3863
+ "markers": "python_version >= '3.6'",
3864
+ "version": "==4.1.1"
3865
+ },
3866
  "urllib3": {
3867
  "hashes": [
3868
  "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df",
 
4103
  ],
4104
  "markers": "python_version >= '3.9'",
4105
  "version": "==1.18.3"
4106
+ },
4107
+ "zstandard": {
4108
+ "hashes": [
4109
+ "sha256:034b88913ecc1b097f528e42b539453fa82c3557e414b3de9d5632c80439a473",
4110
+ "sha256:0a7f0804bb3799414af278e9ad51be25edf67f78f916e08afdb983e74161b916",
4111
+ "sha256:11e3bf3c924853a2d5835b24f03eeba7fc9b07d8ca499e247e06ff5676461a15",
4112
+ "sha256:12a289832e520c6bd4dcaad68e944b86da3bad0d339ef7989fb7e88f92e96072",
4113
+ "sha256:1516c8c37d3a053b01c1c15b182f3b5f5eef19ced9b930b684a73bad121addf4",
4114
+ "sha256:157e89ceb4054029a289fb504c98c6a9fe8010f1680de0201b3eb5dc20aa6d9e",
4115
+ "sha256:1bfe8de1da6d104f15a60d4a8a768288f66aa953bbe00d027398b93fb9680b26",
4116
+ "sha256:1e172f57cd78c20f13a3415cc8dfe24bf388614324d25539146594c16d78fcc8",
4117
+ "sha256:1fd7e0f1cfb70eb2f95a19b472ee7ad6d9a0a992ec0ae53286870c104ca939e5",
4118
+ "sha256:203d236f4c94cd8379d1ea61db2fce20730b4c38d7f1c34506a31b34edc87bdd",
4119
+ "sha256:27d3ef2252d2e62476389ca8f9b0cf2bbafb082a3b6bfe9d90cbcbb5529ecf7c",
4120
+ "sha256:29a2bc7c1b09b0af938b7a8343174b987ae021705acabcbae560166567f5a8db",
4121
+ "sha256:2ef230a8fd217a2015bc91b74f6b3b7d6522ba48be29ad4ea0ca3a3775bf7dd5",
4122
+ "sha256:2ef3775758346d9ac6214123887d25c7061c92afe1f2b354f9388e9e4d48acfc",
4123
+ "sha256:2f146f50723defec2975fb7e388ae3a024eb7151542d1599527ec2aa9cacb152",
4124
+ "sha256:2fb4535137de7e244c230e24f9d1ec194f61721c86ebea04e1581d9d06ea1269",
4125
+ "sha256:32ba3b5ccde2d581b1e6aa952c836a6291e8435d788f656fe5976445865ae045",
4126
+ "sha256:34895a41273ad33347b2fc70e1bff4240556de3c46c6ea430a7ed91f9042aa4e",
4127
+ "sha256:379b378ae694ba78cef921581ebd420c938936a153ded602c4fea612b7eaa90d",
4128
+ "sha256:38302b78a850ff82656beaddeb0bb989a0322a8bbb1bf1ab10c17506681d772a",
4129
+ "sha256:3aa014d55c3af933c1315eb4bb06dd0459661cc0b15cd61077afa6489bec63bb",
4130
+ "sha256:4051e406288b8cdbb993798b9a45c59a4896b6ecee2f875424ec10276a895740",
4131
+ "sha256:40b33d93c6eddf02d2c19f5773196068d875c41ca25730e8288e9b672897c105",
4132
+ "sha256:43da0f0092281bf501f9c5f6f3b4c975a8a0ea82de49ba3f7100e64d422a1274",
4133
+ "sha256:445e4cb5048b04e90ce96a79b4b63140e3f4ab5f662321975679b5f6360b90e2",
4134
+ "sha256:48ef6a43b1846f6025dde6ed9fee0c24e1149c1c25f7fb0a0585572b2f3adc58",
4135
+ "sha256:50a80baba0285386f97ea36239855f6020ce452456605f262b2d33ac35c7770b",
4136
+ "sha256:519fbf169dfac1222a76ba8861ef4ac7f0530c35dd79ba5727014613f91613d4",
4137
+ "sha256:53dd9d5e3d29f95acd5de6802e909ada8d8d8cfa37a3ac64836f3bc4bc5512db",
4138
+ "sha256:53ea7cdc96c6eb56e76bb06894bcfb5dfa93b7adcf59d61c6b92674e24e2dd5e",
4139
+ "sha256:576856e8594e6649aee06ddbfc738fec6a834f7c85bf7cadd1c53d4a58186ef9",
4140
+ "sha256:59556bf80a7094d0cfb9f5e50bb2db27fefb75d5138bb16fb052b61b0e0eeeb0",
4141
+ "sha256:5d41d5e025f1e0bccae4928981e71b2334c60f580bdc8345f824e7c0a4c2a813",
4142
+ "sha256:61062387ad820c654b6a6b5f0b94484fa19515e0c5116faf29f41a6bc91ded6e",
4143
+ "sha256:61f89436cbfede4bc4e91b4397eaa3e2108ebe96d05e93d6ccc95ab5714be512",
4144
+ "sha256:62136da96a973bd2557f06ddd4e8e807f9e13cbb0bfb9cc06cfe6d98ea90dfe0",
4145
+ "sha256:64585e1dba664dc67c7cdabd56c1e5685233fbb1fc1966cfba2a340ec0dfff7b",
4146
+ "sha256:65308f4b4890aa12d9b6ad9f2844b7ee42c7f7a4fd3390425b242ffc57498f48",
4147
+ "sha256:66b689c107857eceabf2cf3d3fc699c3c0fe8ccd18df2219d978c0283e4c508a",
4148
+ "sha256:6a41c120c3dbc0d81a8e8adc73312d668cd34acd7725f036992b1b72d22c1772",
4149
+ "sha256:6f77fa49079891a4aab203d0b1744acc85577ed16d767b52fc089d83faf8d8ed",
4150
+ "sha256:72c68dda124a1a138340fb62fa21b9bf4848437d9ca60bd35db36f2d3345f373",
4151
+ "sha256:752bf8a74412b9892f4e5b58f2f890a039f57037f52c89a740757ebd807f33ea",
4152
+ "sha256:76e79bc28a65f467e0409098fa2c4376931fd3207fbeb6b956c7c476d53746dd",
4153
+ "sha256:774d45b1fac1461f48698a9d4b5fa19a69d47ece02fa469825b442263f04021f",
4154
+ "sha256:77da4c6bfa20dd5ea25cbf12c76f181a8e8cd7ea231c673828d0386b1740b8dc",
4155
+ "sha256:77ea385f7dd5b5676d7fd943292ffa18fbf5c72ba98f7d09fc1fb9e819b34c23",
4156
+ "sha256:80080816b4f52a9d886e67f1f96912891074903238fe54f2de8b786f86baded2",
4157
+ "sha256:80a539906390591dd39ebb8d773771dc4db82ace6372c4d41e2d293f8e32b8db",
4158
+ "sha256:82d17e94d735c99621bf8ebf9995f870a6b3e6d14543b99e201ae046dfe7de70",
4159
+ "sha256:837bb6764be6919963ef41235fd56a6486b132ea64afe5fafb4cb279ac44f259",
4160
+ "sha256:84433dddea68571a6d6bd4fbf8ff398236031149116a7fff6f777ff95cad3df9",
4161
+ "sha256:8c24f21fa2af4bb9f2c492a86fe0c34e6d2c63812a839590edaf177b7398f700",
4162
+ "sha256:8ed7d27cb56b3e058d3cf684d7200703bcae623e1dcc06ed1e18ecda39fee003",
4163
+ "sha256:9206649ec587e6b02bd124fb7799b86cddec350f6f6c14bc82a2b70183e708ba",
4164
+ "sha256:983b6efd649723474f29ed42e1467f90a35a74793437d0bc64a5bf482bedfa0a",
4165
+ "sha256:98da17ce9cbf3bfe4617e836d561e433f871129e3a7ac16d6ef4c680f13a839c",
4166
+ "sha256:9c236e635582742fee16603042553d276cca506e824fa2e6489db04039521e90",
4167
+ "sha256:9da6bc32faac9a293ddfdcb9108d4b20416219461e4ec64dfea8383cac186690",
4168
+ "sha256:a05e6d6218461eb1b4771d973728f0133b2a4613a6779995df557f70794fd60f",
4169
+ "sha256:a0817825b900fcd43ac5d05b8b3079937073d2b1ff9cf89427590718b70dd840",
4170
+ "sha256:a4ae99c57668ca1e78597d8b06d5af837f377f340f4cce993b551b2d7731778d",
4171
+ "sha256:a8c86881813a78a6f4508ef9daf9d4995b8ac2d147dcb1a450448941398091c9",
4172
+ "sha256:a8fffdbd9d1408006baaf02f1068d7dd1f016c6bcb7538682622c556e7b68e35",
4173
+ "sha256:a9b07268d0c3ca5c170a385a0ab9fb7fdd9f5fd866be004c4ea39e44edce47dd",
4174
+ "sha256:ab19a2d91963ed9e42b4e8d77cd847ae8381576585bad79dbd0a8837a9f6620a",
4175
+ "sha256:ac184f87ff521f4840e6ea0b10c0ec90c6b1dcd0bad2f1e4a9a1b4fa177982ea",
4176
+ "sha256:b0e166f698c5a3e914947388c162be2583e0c638a4703fc6a543e23a88dea3c1",
4177
+ "sha256:b2170c7e0367dde86a2647ed5b6f57394ea7f53545746104c6b09fc1f4223573",
4178
+ "sha256:b2d8c62d08e7255f68f7a740bae85b3c9b8e5466baa9cbf7f57f1cde0ac6bc09",
4179
+ "sha256:b4567955a6bc1b20e9c31612e615af6b53733491aeaa19a6b3b37f3b65477094",
4180
+ "sha256:b69bb4f51daf461b15e7b3db033160937d3ff88303a7bc808c67bbc1eaf98c78",
4181
+ "sha256:b8c0bd73aeac689beacd4e7667d48c299f61b959475cdbb91e7d3d88d27c56b9",
4182
+ "sha256:be9b5b8659dff1f913039c2feee1aca499cfbc19e98fa12bc85e037c17ec6ca5",
4183
+ "sha256:bf0a05b6059c0528477fba9054d09179beb63744355cab9f38059548fedd46a9",
4184
+ "sha256:c16842b846a8d2a145223f520b7e18b57c8f476924bda92aeee3a88d11cfc391",
4185
+ "sha256:c363b53e257246a954ebc7c488304b5592b9c53fbe74d03bc1c64dda153fb847",
4186
+ "sha256:c7c517d74bea1a6afd39aa612fa025e6b8011982a0897768a2f7c8ab4ebb78a2",
4187
+ "sha256:d20fd853fbb5807c8e84c136c278827b6167ded66c72ec6f9a14b863d809211c",
4188
+ "sha256:d2240ddc86b74966c34554c49d00eaafa8200a18d3a5b6ffbf7da63b11d74ee2",
4189
+ "sha256:d477ed829077cd945b01fc3115edd132c47e6540ddcd96ca169facff28173057",
4190
+ "sha256:d50d31bfedd53a928fed6707b15a8dbeef011bb6366297cc435accc888b27c20",
4191
+ "sha256:dc1d33abb8a0d754ea4763bad944fd965d3d95b5baef6b121c0c9013eaf1907d",
4192
+ "sha256:dc5d1a49d3f8262be192589a4b72f0d03b72dcf46c51ad5852a4fdc67be7b9e4",
4193
+ "sha256:e2d1a054f8f0a191004675755448d12be47fa9bebbcffa3cdf01db19f2d30a54",
4194
+ "sha256:e7792606d606c8df5277c32ccb58f29b9b8603bf83b48639b7aedf6df4fe8171",
4195
+ "sha256:ed1708dbf4d2e3a1c5c69110ba2b4eb6678262028afd6c6fbcc5a8dac9cda68e",
4196
+ "sha256:f2d4380bf5f62daabd7b751ea2339c1a21d1c9463f1feb7fc2bdcea2c29c3160",
4197
+ "sha256:f3513916e8c645d0610815c257cbfd3242adfd5c4cfa78be514e5a3ebb42a41b",
4198
+ "sha256:f8346bfa098532bc1fb6c7ef06783e969d87a99dd1d2a5a18a892c1d7a643c58",
4199
+ "sha256:f83fa6cae3fff8e98691248c9320356971b59678a17f20656a9e59cd32cee6d8",
4200
+ "sha256:fa6ce8b52c5987b3e34d5674b0ab529a4602b632ebab0a93b07bfb4dfc8f8a33",
4201
+ "sha256:fb2b1ecfef1e67897d336de3a0e3f52478182d6a47eda86cbd42504c5cbd009a",
4202
+ "sha256:fc9ca1c9718cb3b06634c7c8dec57d24e9438b2aa9a0f02b8bb36bf478538880",
4203
+ "sha256:fd30d9c67d13d891f2360b2a120186729c111238ac63b43dbd37a5a40670b8ca",
4204
+ "sha256:fd7699e8fd9969f455ef2926221e0233f81a2542921471382e77a9e2f2b57f4b",
4205
+ "sha256:fe3b385d996ee0822fd46528d9f0443b880d4d05528fd26a9119a54ec3f91c69"
4206
+ ],
4207
+ "markers": "python_version >= '3.8'",
4208
+ "version": "==0.23.0"
4209
  }
4210
  },
4211
  "develop": {}
claer ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ SHELL=/bin/bash
2
+ SESSION_MANAGER=local/perpetuum-mobile:@/tmp/.ICE-unix/2571,unix/perpetuum-mobile:/tmp/.ICE-unix/2571
3
+ QT_ACCESSIBILITY=1
4
+ PIPENV_VENV_IN_PROJECT=1
5
+ COLORTERM=truecolor
6
+ PYENV_SHELL=bash
7
+ XDG_CONFIG_DIRS=/etc/xdg/xdg-cinnamon:/etc/xdg
8
+ XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session0
9
+ NVM_INC=/home/yoda/.nvm/versions/node/v20.14.0/include/node
10
+ TERM_PROGRAM_VERSION=0.45.11
11
+ GNOME_DESKTOP_SESSION_ID=this-is-deprecated
12
+ LANGUAGE=en_US
13
+ SSH_AUTH_SOCK=/run/user/1000/keyring/ssh
14
+ ARGV0=/home/yoda/Programs/cursor-0.45.11-build-250207y6nbaw5qc-x86_64.AppImage
15
+ CINNAMON_VERSION=5.8.4
16
+ HOMEBREW_PREFIX=/home/linuxbrew/.linuxbrew
17
+ DESKTOP_SESSION=cinnamon
18
+ GTK_MODULES=gail:atk-bridge
19
+ XDG_SEAT=seat0
20
+ PWD=/home/yoda/Library/Projects/Portfolio/Polyglot
21
+ PYENV_VIRTUALENV_INIT=1
22
+ GSETTINGS_SCHEMA_DIR=/tmp/.mount_cursorppXwst/usr/share/glib-2.0/schemas:
23
+ LOGNAME=yoda
24
+ XDG_SESSION_DESKTOP=cinnamon
25
+ QT_QPA_PLATFORMTHEME=qt5ct
26
+ XDG_SESSION_TYPE=x11
27
+ MANPATH=/home/linuxbrew/.linuxbrew/share/man:/home/yoda/.nvm/versions/node/v20.14.0/share/man:/home/linuxbrew/.linuxbrew/share/man::
28
+ GPG_AGENT_INFO=/run/user/1000/gnupg/S.gpg-agent:0:1
29
+ XAUTHORITY=/home/yoda/.Xauthority
30
+ VSCODE_GIT_ASKPASS_NODE=/tmp/.mount_cursorppXwst/cursor
31
+ XDG_GREETER_DATA_DIR=/var/lib/lightdm-data/yoda
32
+ GJS_DEBUG_TOPICS=JS ERROR;JS LOG
33
+ INSIDE_NEMO_PYTHON=
34
+ GDM_LANG=en_US
35
+ HOME=/home/yoda
36
+ LANG=en_US.UTF-8
37
+ LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:
38
+ XDG_CURRENT_DESKTOP=X-Cinnamon
39
+ VIRTUAL_ENV=/mnt/3b92ea25-2e45-41c8-97d3-58aa8141755e/Videos/Projects/Portfolio/Polyglot/.venv
40
+ GIT_ASKPASS=/tmp/.mount_cursorppXwst/resources/app/extensions/git/dist/askpass.sh
41
+ XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0
42
+ CHROME_DESKTOP=cursor-url-handler.desktop
43
+ APPDIR=/tmp/.mount_cursorppXwst
44
+ INFOPATH=/home/linuxbrew/.linuxbrew/share/info:/home/linuxbrew/.linuxbrew/share/info:
45
+ GJS_DEBUG_OUTPUT=stderr
46
+ NVM_DIR=/home/yoda/.nvm
47
+ VSCODE_GIT_ASKPASS_EXTRA_ARGS=
48
+ WORKON_HOME=/mnt/3b92ea25-2e45-41c8-97d3-58aa8141755e/Pipenv/virtualenvs
49
+ LESSCLOSE=/usr/bin/lesspipe %s %s
50
+ XDG_SESSION_CLASS=user
51
+ TERM=xterm-256color
52
+ LESSOPEN=| /usr/bin/lesspipe %s
53
+ USER=yoda
54
+ VSCODE_GIT_IPC_HANDLE=/run/user/1000/vscode-git-1303080d47.sock
55
+ HOMEBREW_CELLAR=/home/linuxbrew/.linuxbrew/Cellar
56
+ OWD=/mnt/3b92ea25-2e45-41c8-97d3-58aa8141755e/Programs
57
+ DISPLAY=:0
58
+ SHLVL=1
59
+ NVM_CD_FLAGS=
60
+ HOMEBREW_REPOSITORY=/home/linuxbrew/.linuxbrew/Homebrew
61
+ XDG_VTNR=7
62
+ XDG_SESSION_ID=c2
63
+ VIRTUAL_ENV_PROMPT=Polyglot
64
+ LD_LIBRARY_PATH=/tmp/.mount_cursorppXwst/usr/lib:
65
+ APPIMAGE=/mnt/3b92ea25-2e45-41c8-97d3-58aa8141755e/Programs/cursor-0.45.11-build-250207y6nbaw5qc-x86_64.AppImage
66
+ XDG_RUNTIME_DIR=/run/user/1000
67
+ PS1=\[]633;A\]Polyglot\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ \[]633;B\]
68
+ PYENV_ROOT=/home/yoda/.pyenv
69
+ VSCODE_GIT_ASKPASS_MAIN=/tmp/.mount_cursorppXwst/resources/app/extensions/git/dist/askpass-main.js
70
+ GTK3_MODULES=xapp-gtk3-module
71
+ XDG_DATA_DIRS=/tmp/.mount_cursorppXwst/usr/share/:./share/:/usr/share/gnome:/usr/local/share/:/usr/share/:/usr/share/cinnamon:/usr/share/gnome:/home/yoda/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share:/usr/share/gnome/:/usr/local/share/:/usr/share/
72
+ GDK_BACKEND=x11
73
+ PATH=/home/yoda/.cursor/extensions/ms-python.python-2024.12.3-linux-x64/python_files/deactivate/bash:/mnt/3b92ea25-2e45-41c8-97d3-58aa8141755e/Videos/Projects/Portfolio/Polyglot/.venv/bin:/home/yoda/.pyenv/plugins/pyenv-virtualenv/shims:/home/yoda/.pyenv/shims:/home/yoda/.pyenv/bin:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/yoda/.cursor/extensions/ms-python.python-2024.12.3-linux-x64/python_files/deactivate/bash:/mnt/3b92ea25-2e45-41c8-97d3-58aa8141755e/Videos/Projects/Portfolio/Polyglot/.venv/bin:/home/yoda/.local/bin:/home/yoda/.nvm/versions/node/v20.14.0/bin:/home/yoda/.pyenv/plugins/pyenv-virtualenv/shims:/home/yoda/.pyenv/bin:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/tmp/.mount_cursorppXwst:/tmp/.mount_cursorppXwst/usr/sbin:/home/yoda/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
74
+ GDMSESSION=cinnamon
75
+ ORIGINAL_XDG_CURRENT_DESKTOP=X-Cinnamon
76
+ DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
77
+ NVM_BIN=/home/yoda/.nvm/versions/node/v20.14.0/bin
78
+ GIO_LAUNCHED_DESKTOP_FILE_PID=17493
79
+ GIO_LAUNCHED_DESKTOP_FILE=/usr/share/applications/nemo.desktop
80
+ TERM_PROGRAM=vscode
81
+ CURSOR_TRACE_ID=e0d3073a403b4ea3a55c0b6407972554
82
+ _=/bin/python3
instructions/diagrams/AppFlow.excalidraw ADDED
@@ -0,0 +1,2820 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "type": "excalidraw",
3
+ "version": 2,
4
+ "source": "https://excalidraw.com",
5
+ "elements": [
6
+ {
7
+ "id": "wEufgc20D-l-mdtgWLXnT",
8
+ "type": "rectangle",
9
+ "x": 1049.5999755859375,
10
+ "y": 328.9332275390625,
11
+ "width": 226.8443603515625,
12
+ "height": 66.13334655761719,
13
+ "angle": 0,
14
+ "strokeColor": "#1e1e1e",
15
+ "backgroundColor": "transparent",
16
+ "fillStyle": "solid",
17
+ "strokeWidth": 2,
18
+ "strokeStyle": "solid",
19
+ "roughness": 1,
20
+ "opacity": 100,
21
+ "groupIds": [],
22
+ "frameId": null,
23
+ "index": "a0",
24
+ "roundness": {
25
+ "type": 3
26
+ },
27
+ "seed": 673334670,
28
+ "version": 193,
29
+ "versionNonce": 1990761870,
30
+ "isDeleted": false,
31
+ "boundElements": [
32
+ {
33
+ "type": "text",
34
+ "id": "4iRT9IIgWzQp78bB1HJtR"
35
+ },
36
+ {
37
+ "id": "DZEp77gEfCN0TqfeYrqOD",
38
+ "type": "arrow"
39
+ },
40
+ {
41
+ "id": "3X5XGRrrxXRErQWuuf1J7",
42
+ "type": "arrow"
43
+ }
44
+ ],
45
+ "updated": 1739436555417,
46
+ "link": null,
47
+ "locked": false
48
+ },
49
+ {
50
+ "id": "4iRT9IIgWzQp78bB1HJtR",
51
+ "type": "text",
52
+ "x": 1112.6022109985352,
53
+ "y": 349.4999008178711,
54
+ "width": 100.83988952636719,
55
+ "height": 25,
56
+ "angle": 0,
57
+ "strokeColor": "#1e1e1e",
58
+ "backgroundColor": "transparent",
59
+ "fillStyle": "solid",
60
+ "strokeWidth": 2,
61
+ "strokeStyle": "solid",
62
+ "roughness": 1,
63
+ "opacity": 100,
64
+ "groupIds": [],
65
+ "frameId": null,
66
+ "index": "a0V",
67
+ "roundness": null,
68
+ "seed": 1610706638,
69
+ "version": 129,
70
+ "versionNonce": 991542222,
71
+ "isDeleted": false,
72
+ "boundElements": [],
73
+ "updated": 1739436555417,
74
+ "link": null,
75
+ "locked": false,
76
+ "text": "text input",
77
+ "fontSize": 20,
78
+ "fontFamily": 5,
79
+ "textAlign": "center",
80
+ "verticalAlign": "middle",
81
+ "containerId": "wEufgc20D-l-mdtgWLXnT",
82
+ "originalText": "text input",
83
+ "autoResize": true,
84
+ "lineHeight": 1.25
85
+ },
86
+ {
87
+ "id": "N3a4gTaFwF4wJwxYBngYJ",
88
+ "type": "text",
89
+ "x": 1291.3778076171875,
90
+ "y": 109.9111328125,
91
+ "width": 79.11991882324219,
92
+ "height": 25,
93
+ "angle": 0,
94
+ "strokeColor": "#1e1e1e",
95
+ "backgroundColor": "transparent",
96
+ "fillStyle": "solid",
97
+ "strokeWidth": 2,
98
+ "strokeStyle": "solid",
99
+ "roughness": 1,
100
+ "opacity": 100,
101
+ "groupIds": [],
102
+ "frameId": null,
103
+ "index": "a2",
104
+ "roundness": null,
105
+ "seed": 1917973650,
106
+ "version": 150,
107
+ "versionNonce": 300251214,
108
+ "isDeleted": false,
109
+ "boundElements": [],
110
+ "updated": 1739435856511,
111
+ "link": null,
112
+ "locked": false,
113
+ "text": "Polyglot",
114
+ "fontSize": 20,
115
+ "fontFamily": 5,
116
+ "textAlign": "left",
117
+ "verticalAlign": "top",
118
+ "containerId": null,
119
+ "originalText": "Polyglot",
120
+ "autoResize": true,
121
+ "lineHeight": 1.25
122
+ },
123
+ {
124
+ "id": "1LwWmxwxo3oOtd8zyJsR2",
125
+ "type": "rectangle",
126
+ "x": 1409.0664672851562,
127
+ "y": 321.46659088134766,
128
+ "width": 226.8443603515625,
129
+ "height": 66.13334655761719,
130
+ "angle": 0,
131
+ "strokeColor": "#1e1e1e",
132
+ "backgroundColor": "transparent",
133
+ "fillStyle": "solid",
134
+ "strokeWidth": 2,
135
+ "strokeStyle": "solid",
136
+ "roughness": 1,
137
+ "opacity": 100,
138
+ "groupIds": [],
139
+ "frameId": null,
140
+ "index": "a3",
141
+ "roundness": {
142
+ "type": 3
143
+ },
144
+ "seed": 223842830,
145
+ "version": 242,
146
+ "versionNonce": 1639868046,
147
+ "isDeleted": false,
148
+ "boundElements": [
149
+ {
150
+ "type": "text",
151
+ "id": "UUEuTFXnWuviUmx9OMvH2"
152
+ },
153
+ {
154
+ "id": "KKYXAU7nTKYpdZPmLHxqe",
155
+ "type": "arrow"
156
+ },
157
+ {
158
+ "id": "u3Jvq2udAipXeegyZU1Ai",
159
+ "type": "arrow"
160
+ }
161
+ ],
162
+ "updated": 1739436555417,
163
+ "link": null,
164
+ "locked": false
165
+ },
166
+ {
167
+ "id": "UUEuTFXnWuviUmx9OMvH2",
168
+ "type": "text",
169
+ "x": 1468.6787033081055,
170
+ "y": 342.03326416015625,
171
+ "width": 107.61988830566406,
172
+ "height": 25,
173
+ "angle": 0,
174
+ "strokeColor": "#1e1e1e",
175
+ "backgroundColor": "transparent",
176
+ "fillStyle": "solid",
177
+ "strokeWidth": 2,
178
+ "strokeStyle": "solid",
179
+ "roughness": 1,
180
+ "opacity": 100,
181
+ "groupIds": [],
182
+ "frameId": null,
183
+ "index": "a4",
184
+ "roundness": null,
185
+ "seed": 2029396046,
186
+ "version": 183,
187
+ "versionNonce": 848192718,
188
+ "isDeleted": false,
189
+ "boundElements": [],
190
+ "updated": 1739436555417,
191
+ "link": null,
192
+ "locked": false,
193
+ "text": "audio input",
194
+ "fontSize": 20,
195
+ "fontFamily": 5,
196
+ "textAlign": "center",
197
+ "verticalAlign": "middle",
198
+ "containerId": "1LwWmxwxo3oOtd8zyJsR2",
199
+ "originalText": "audio input",
200
+ "autoResize": true,
201
+ "lineHeight": 1.25
202
+ },
203
+ {
204
+ "id": "qWnNFvspSJfngiQK7c6tU",
205
+ "type": "rectangle",
206
+ "x": 1396.2664184570312,
207
+ "y": 413.19986724853516,
208
+ "width": 226.8443603515625,
209
+ "height": 66.13334655761719,
210
+ "angle": 0,
211
+ "strokeColor": "#1e1e1e",
212
+ "backgroundColor": "transparent",
213
+ "fillStyle": "solid",
214
+ "strokeWidth": 2,
215
+ "strokeStyle": "solid",
216
+ "roughness": 1,
217
+ "opacity": 100,
218
+ "groupIds": [],
219
+ "frameId": null,
220
+ "index": "a5",
221
+ "roundness": {
222
+ "type": 3
223
+ },
224
+ "seed": 86937294,
225
+ "version": 369,
226
+ "versionNonce": 978941330,
227
+ "isDeleted": false,
228
+ "boundElements": [
229
+ {
230
+ "type": "text",
231
+ "id": "d1seOKVVllobMcoTVAF7q"
232
+ },
233
+ {
234
+ "id": "KKYXAU7nTKYpdZPmLHxqe",
235
+ "type": "arrow"
236
+ },
237
+ {
238
+ "id": "obGZKTevXg4XAoWm_IZ9Z",
239
+ "type": "arrow"
240
+ }
241
+ ],
242
+ "updated": 1739437644714,
243
+ "link": null,
244
+ "locked": false
245
+ },
246
+ {
247
+ "id": "d1seOKVVllobMcoTVAF7q",
248
+ "type": "text",
249
+ "x": 1461.2686614990234,
250
+ "y": 433.76654052734375,
251
+ "width": 96.83987426757812,
252
+ "height": 25,
253
+ "angle": 0,
254
+ "strokeColor": "#1e1e1e",
255
+ "backgroundColor": "transparent",
256
+ "fillStyle": "solid",
257
+ "strokeWidth": 2,
258
+ "strokeStyle": "solid",
259
+ "roughness": 1,
260
+ "opacity": 100,
261
+ "groupIds": [],
262
+ "frameId": null,
263
+ "index": "a6",
264
+ "roundness": null,
265
+ "seed": 2119140622,
266
+ "version": 315,
267
+ "versionNonce": 1307934030,
268
+ "isDeleted": false,
269
+ "boundElements": [],
270
+ "updated": 1739436570416,
271
+ "link": null,
272
+ "locked": false,
273
+ "text": "transcribe",
274
+ "fontSize": 20,
275
+ "fontFamily": 5,
276
+ "textAlign": "center",
277
+ "verticalAlign": "middle",
278
+ "containerId": "qWnNFvspSJfngiQK7c6tU",
279
+ "originalText": "transcribe",
280
+ "autoResize": true,
281
+ "lineHeight": 1.25
282
+ },
283
+ {
284
+ "id": "KKYXAU7nTKYpdZPmLHxqe",
285
+ "type": "arrow",
286
+ "x": 1521.066650390625,
287
+ "y": 386.5333251953125,
288
+ "width": 9.530270104567307,
289
+ "height": 24.8887939453125,
290
+ "angle": 0,
291
+ "strokeColor": "#1e1e1e",
292
+ "backgroundColor": "transparent",
293
+ "fillStyle": "solid",
294
+ "strokeWidth": 2,
295
+ "strokeStyle": "solid",
296
+ "roughness": 1,
297
+ "opacity": 100,
298
+ "groupIds": [],
299
+ "frameId": null,
300
+ "index": "a7",
301
+ "roundness": {
302
+ "type": 2
303
+ },
304
+ "seed": 1789217422,
305
+ "version": 416,
306
+ "versionNonce": 336566286,
307
+ "isDeleted": false,
308
+ "boundElements": [],
309
+ "updated": 1739436570450,
310
+ "link": null,
311
+ "locked": false,
312
+ "points": [
313
+ [
314
+ 0,
315
+ 0
316
+ ],
317
+ [
318
+ -9.530270104567307,
319
+ 24.8887939453125
320
+ ]
321
+ ],
322
+ "lastCommittedPoint": null,
323
+ "startBinding": {
324
+ "elementId": "1LwWmxwxo3oOtd8zyJsR2",
325
+ "focus": 0.020106376849068606,
326
+ "gap": 1,
327
+ "fixedPoint": null
328
+ },
329
+ "endBinding": {
330
+ "elementId": "qWnNFvspSJfngiQK7c6tU",
331
+ "focus": -0.0911666024609831,
332
+ "gap": 1.7777481079101562,
333
+ "fixedPoint": null
334
+ },
335
+ "startArrowhead": null,
336
+ "endArrowhead": "arrow",
337
+ "elbowed": false
338
+ },
339
+ {
340
+ "id": "HXIKjJvzQzR2zEsPTWBHk",
341
+ "type": "ellipse",
342
+ "x": 1284.977783203125,
343
+ "y": 175.33323669433594,
344
+ "width": 135.822265625,
345
+ "height": 85,
346
+ "angle": 0,
347
+ "strokeColor": "#1e1e1e",
348
+ "backgroundColor": "transparent",
349
+ "fillStyle": "solid",
350
+ "strokeWidth": 2,
351
+ "strokeStyle": "solid",
352
+ "roughness": 1,
353
+ "opacity": 100,
354
+ "groupIds": [],
355
+ "frameId": null,
356
+ "index": "a8",
357
+ "roundness": {
358
+ "type": 2
359
+ },
360
+ "seed": 619080910,
361
+ "version": 153,
362
+ "versionNonce": 1398945486,
363
+ "isDeleted": false,
364
+ "boundElements": [
365
+ {
366
+ "type": "text",
367
+ "id": "ddGhaBHov4FaBkfD3gxud"
368
+ },
369
+ {
370
+ "id": "u3Jvq2udAipXeegyZU1Ai",
371
+ "type": "arrow"
372
+ },
373
+ {
374
+ "id": "DZEp77gEfCN0TqfeYrqOD",
375
+ "type": "arrow"
376
+ }
377
+ ],
378
+ "updated": 1739436555417,
379
+ "link": null,
380
+ "locked": false
381
+ },
382
+ {
383
+ "id": "ddGhaBHov4FaBkfD3gxud",
384
+ "type": "text",
385
+ "x": 1314.8285307172914,
386
+ "y": 192.78119849390765,
387
+ "width": 76.07992553710938,
388
+ "height": 50,
389
+ "angle": 0,
390
+ "strokeColor": "#1e1e1e",
391
+ "backgroundColor": "transparent",
392
+ "fillStyle": "solid",
393
+ "strokeWidth": 2,
394
+ "strokeStyle": "solid",
395
+ "roughness": 1,
396
+ "opacity": 100,
397
+ "groupIds": [],
398
+ "frameId": null,
399
+ "index": "a9",
400
+ "roundness": null,
401
+ "seed": 2049036302,
402
+ "version": 125,
403
+ "versionNonce": 399387918,
404
+ "isDeleted": false,
405
+ "boundElements": [],
406
+ "updated": 1739436555417,
407
+ "link": null,
408
+ "locked": false,
409
+ "text": "User/ch\nat",
410
+ "fontSize": 20,
411
+ "fontFamily": 5,
412
+ "textAlign": "center",
413
+ "verticalAlign": "middle",
414
+ "containerId": "HXIKjJvzQzR2zEsPTWBHk",
415
+ "originalText": "User/chat",
416
+ "autoResize": true,
417
+ "lineHeight": 1.25
418
+ },
419
+ {
420
+ "id": "u3Jvq2udAipXeegyZU1Ai",
421
+ "type": "arrow",
422
+ "x": 1409.42236328125,
423
+ "y": 237.19989013671875,
424
+ "width": 95.2886962890625,
425
+ "height": 80.35556030273438,
426
+ "angle": 0,
427
+ "strokeColor": "#1e1e1e",
428
+ "backgroundColor": "transparent",
429
+ "fillStyle": "solid",
430
+ "strokeWidth": 2,
431
+ "strokeStyle": "solid",
432
+ "roughness": 1,
433
+ "opacity": 100,
434
+ "groupIds": [],
435
+ "frameId": null,
436
+ "index": "aA",
437
+ "roundness": {
438
+ "type": 2
439
+ },
440
+ "seed": 720733074,
441
+ "version": 389,
442
+ "versionNonce": 1688510034,
443
+ "isDeleted": false,
444
+ "boundElements": [],
445
+ "updated": 1739436556162,
446
+ "link": null,
447
+ "locked": false,
448
+ "points": [
449
+ [
450
+ 0,
451
+ 0
452
+ ],
453
+ [
454
+ 95.2886962890625,
455
+ 80.35556030273438
456
+ ]
457
+ ],
458
+ "lastCommittedPoint": null,
459
+ "startBinding": {
460
+ "elementId": "HXIKjJvzQzR2zEsPTWBHk",
461
+ "focus": -0.3969277448589378,
462
+ "gap": 1,
463
+ "fixedPoint": null
464
+ },
465
+ "endBinding": {
466
+ "elementId": "1LwWmxwxo3oOtd8zyJsR2",
467
+ "focus": 0.17081471868479614,
468
+ "gap": 3.9111404418945312,
469
+ "fixedPoint": null
470
+ },
471
+ "startArrowhead": null,
472
+ "endArrowhead": "arrow",
473
+ "elbowed": false
474
+ },
475
+ {
476
+ "id": "DZEp77gEfCN0TqfeYrqOD",
477
+ "type": "arrow",
478
+ "x": 1300.6221923828125,
479
+ "y": 238.62213134765625,
480
+ "width": 153.5999755859375,
481
+ "height": 91.022216796875,
482
+ "angle": 0,
483
+ "strokeColor": "#1e1e1e",
484
+ "backgroundColor": "transparent",
485
+ "fillStyle": "solid",
486
+ "strokeWidth": 2,
487
+ "strokeStyle": "solid",
488
+ "roughness": 1,
489
+ "opacity": 100,
490
+ "groupIds": [],
491
+ "frameId": null,
492
+ "index": "aB",
493
+ "roundness": {
494
+ "type": 2
495
+ },
496
+ "seed": 831034514,
497
+ "version": 393,
498
+ "versionNonce": 671789522,
499
+ "isDeleted": false,
500
+ "boundElements": [],
501
+ "updated": 1739436556162,
502
+ "link": null,
503
+ "locked": false,
504
+ "points": [
505
+ [
506
+ 0,
507
+ 0
508
+ ],
509
+ [
510
+ -153.5999755859375,
511
+ 91.022216796875
512
+ ]
513
+ ],
514
+ "lastCommittedPoint": null,
515
+ "startBinding": {
516
+ "elementId": "HXIKjJvzQzR2zEsPTWBHk",
517
+ "focus": 0.17399492475432984,
518
+ "gap": 1,
519
+ "fixedPoint": null
520
+ },
521
+ "endBinding": {
522
+ "elementId": "wEufgc20D-l-mdtgWLXnT",
523
+ "focus": -0.41720255737903406,
524
+ "gap": 1,
525
+ "fixedPoint": null
526
+ },
527
+ "startArrowhead": null,
528
+ "endArrowhead": "arrow",
529
+ "elbowed": false
530
+ },
531
+ {
532
+ "id": "GBp2vkKDN_rJ-0THbSebW",
533
+ "type": "rectangle",
534
+ "x": 1293.1953667534722,
535
+ "y": 539.5010630289715,
536
+ "width": 204.800048828125,
537
+ "height": 54.044464111328125,
538
+ "angle": 0,
539
+ "strokeColor": "#1e1e1e",
540
+ "backgroundColor": "transparent",
541
+ "fillStyle": "solid",
542
+ "strokeWidth": 2,
543
+ "strokeStyle": "solid",
544
+ "roughness": 1,
545
+ "opacity": 100,
546
+ "groupIds": [],
547
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
548
+ "index": "aC",
549
+ "roundness": {
550
+ "type": 3
551
+ },
552
+ "seed": 1307090450,
553
+ "version": 906,
554
+ "versionNonce": 768994898,
555
+ "isDeleted": false,
556
+ "boundElements": [
557
+ {
558
+ "type": "text",
559
+ "id": "1JLqUklMHKwR58YKcxPg5"
560
+ },
561
+ {
562
+ "id": "3X5XGRrrxXRErQWuuf1J7",
563
+ "type": "arrow"
564
+ },
565
+ {
566
+ "id": "CX9int0DOUrljdTbAdw0y",
567
+ "type": "arrow"
568
+ },
569
+ {
570
+ "id": "obGZKTevXg4XAoWm_IZ9Z",
571
+ "type": "arrow"
572
+ }
573
+ ],
574
+ "updated": 1739437653572,
575
+ "link": null,
576
+ "locked": false
577
+ },
578
+ {
579
+ "id": "1JLqUklMHKwR58YKcxPg5",
580
+ "type": "text",
581
+ "x": 1329.315468682183,
582
+ "y": 554.0232950846356,
583
+ "width": 132.55984497070312,
584
+ "height": 25,
585
+ "angle": 0,
586
+ "strokeColor": "#1e1e1e",
587
+ "backgroundColor": "transparent",
588
+ "fillStyle": "solid",
589
+ "strokeWidth": 2,
590
+ "strokeStyle": "solid",
591
+ "roughness": 1,
592
+ "opacity": 100,
593
+ "groupIds": [],
594
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
595
+ "index": "aCV",
596
+ "roundness": null,
597
+ "seed": 1615368402,
598
+ "version": 837,
599
+ "versionNonce": 359158802,
600
+ "isDeleted": false,
601
+ "boundElements": [],
602
+ "updated": 1739437653572,
603
+ "link": null,
604
+ "locked": false,
605
+ "text": "detect intent",
606
+ "fontSize": 20,
607
+ "fontFamily": 5,
608
+ "textAlign": "center",
609
+ "verticalAlign": "middle",
610
+ "containerId": "GBp2vkKDN_rJ-0THbSebW",
611
+ "originalText": "detect intent",
612
+ "autoResize": true,
613
+ "lineHeight": 1.25
614
+ },
615
+ {
616
+ "id": "3X5XGRrrxXRErQWuuf1J7",
617
+ "type": "arrow",
618
+ "x": 1150.5777587890625,
619
+ "y": 396.4888000488281,
620
+ "width": 228.60844359074213,
621
+ "height": 142.01226298014342,
622
+ "angle": 0,
623
+ "strokeColor": "#1e1e1e",
624
+ "backgroundColor": "transparent",
625
+ "fillStyle": "solid",
626
+ "strokeWidth": 2,
627
+ "strokeStyle": "solid",
628
+ "roughness": 1,
629
+ "opacity": 100,
630
+ "groupIds": [],
631
+ "frameId": null,
632
+ "index": "aE",
633
+ "roundness": {
634
+ "type": 2
635
+ },
636
+ "seed": 2079968658,
637
+ "version": 1218,
638
+ "versionNonce": 824705490,
639
+ "isDeleted": false,
640
+ "boundElements": [],
641
+ "updated": 1739437653572,
642
+ "link": null,
643
+ "locked": false,
644
+ "points": [
645
+ [
646
+ 0,
647
+ 0
648
+ ],
649
+ [
650
+ 228.60844359074213,
651
+ 142.01226298014342
652
+ ]
653
+ ],
654
+ "lastCommittedPoint": null,
655
+ "startBinding": {
656
+ "elementId": "wEufgc20D-l-mdtgWLXnT",
657
+ "focus": 0.34251598117639953,
658
+ "gap": 1.4222259521484375,
659
+ "fixedPoint": null
660
+ },
661
+ "endBinding": {
662
+ "elementId": "GBp2vkKDN_rJ-0THbSebW",
663
+ "focus": 0.19671319915003915,
664
+ "gap": 1,
665
+ "fixedPoint": null
666
+ },
667
+ "startArrowhead": null,
668
+ "endArrowhead": "arrow",
669
+ "elbowed": false
670
+ },
671
+ {
672
+ "id": "eWx-OAj8tmJ7UJucCFqT0",
673
+ "type": "diamond",
674
+ "x": 1291.7728814019097,
675
+ "y": 608.4788462320965,
676
+ "width": 155.02221679687491,
677
+ "height": 170,
678
+ "angle": 0,
679
+ "strokeColor": "#1e1e1e",
680
+ "backgroundColor": "transparent",
681
+ "fillStyle": "solid",
682
+ "strokeWidth": 2,
683
+ "strokeStyle": "solid",
684
+ "roughness": 1,
685
+ "opacity": 100,
686
+ "groupIds": [],
687
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
688
+ "index": "aG",
689
+ "roundness": {
690
+ "type": 2
691
+ },
692
+ "seed": 572105550,
693
+ "version": 1013,
694
+ "versionNonce": 1107082002,
695
+ "isDeleted": false,
696
+ "boundElements": [
697
+ {
698
+ "id": "CX9int0DOUrljdTbAdw0y",
699
+ "type": "arrow"
700
+ },
701
+ {
702
+ "id": "C0aHbsHvOP5sqfizC2uBO",
703
+ "type": "arrow"
704
+ },
705
+ {
706
+ "id": "k7_aznX7yugCPo8_9_dDT",
707
+ "type": "arrow"
708
+ },
709
+ {
710
+ "type": "text",
711
+ "id": "SWuSEEV_yRxsN1pYh-zOB"
712
+ }
713
+ ],
714
+ "updated": 1739437653572,
715
+ "link": null,
716
+ "locked": false
717
+ },
718
+ {
719
+ "id": "SWuSEEV_yRxsN1pYh-zOB",
720
+ "type": "text",
721
+ "x": 1339.3384713066948,
722
+ "y": 655.9788462320965,
723
+ "width": 60.37992858886719,
724
+ "height": 75,
725
+ "angle": 0,
726
+ "strokeColor": "#1e1e1e",
727
+ "backgroundColor": "transparent",
728
+ "fillStyle": "solid",
729
+ "strokeWidth": 2,
730
+ "strokeStyle": "solid",
731
+ "roughness": 1,
732
+ "opacity": 100,
733
+ "groupIds": [],
734
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
735
+ "index": "aGV",
736
+ "roundness": null,
737
+ "seed": 937179666,
738
+ "version": 550,
739
+ "versionNonce": 1016563922,
740
+ "isDeleted": false,
741
+ "boundElements": [],
742
+ "updated": 1739437653572,
743
+ "link": null,
744
+ "locked": false,
745
+ "text": "Transl\nate/C\nhat",
746
+ "fontSize": 20,
747
+ "fontFamily": 5,
748
+ "textAlign": "center",
749
+ "verticalAlign": "middle",
750
+ "containerId": "eWx-OAj8tmJ7UJucCFqT0",
751
+ "originalText": "Translate/Chat",
752
+ "autoResize": true,
753
+ "lineHeight": 1.25
754
+ },
755
+ {
756
+ "id": "CX9int0DOUrljdTbAdw0y",
757
+ "type": "arrow",
758
+ "x": 1385.3055152999598,
759
+ "y": 598.9742559507864,
760
+ "width": 1.7001984432224617,
761
+ "height": 22.418549735869078,
762
+ "angle": 0,
763
+ "strokeColor": "#1e1e1e",
764
+ "backgroundColor": "transparent",
765
+ "fillStyle": "solid",
766
+ "strokeWidth": 2,
767
+ "strokeStyle": "solid",
768
+ "roughness": 1,
769
+ "opacity": 100,
770
+ "groupIds": [],
771
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
772
+ "index": "aI",
773
+ "roundness": {
774
+ "type": 2
775
+ },
776
+ "seed": 842515470,
777
+ "version": 2739,
778
+ "versionNonce": 1552650194,
779
+ "isDeleted": false,
780
+ "boundElements": [],
781
+ "updated": 1739437653572,
782
+ "link": null,
783
+ "locked": false,
784
+ "points": [
785
+ [
786
+ 0,
787
+ 0
788
+ ],
789
+ [
790
+ -1.7001984432224617,
791
+ 22.418549735869078
792
+ ]
793
+ ],
794
+ "lastCommittedPoint": null,
795
+ "startBinding": {
796
+ "elementId": "GBp2vkKDN_rJ-0THbSebW",
797
+ "focus": 0.07495335716176672,
798
+ "gap": 5.428728810486746,
799
+ "fixedPoint": null
800
+ },
801
+ "endBinding": {
802
+ "elementId": "eWx-OAj8tmJ7UJucCFqT0",
803
+ "focus": 0.33837106049009497,
804
+ "gap": 1.88062882486512,
805
+ "fixedPoint": null
806
+ },
807
+ "startArrowhead": null,
808
+ "endArrowhead": "arrow",
809
+ "elbowed": false
810
+ },
811
+ {
812
+ "id": "s2V3iEzd4ip1tbVzaKq4p",
813
+ "type": "rectangle",
814
+ "x": 1055.3284844292534,
815
+ "y": 731.145815531413,
816
+ "width": 226.8443603515625,
817
+ "height": 66.13334655761719,
818
+ "angle": 0,
819
+ "strokeColor": "#1e1e1e",
820
+ "backgroundColor": "transparent",
821
+ "fillStyle": "solid",
822
+ "strokeWidth": 2,
823
+ "strokeStyle": "solid",
824
+ "roughness": 1,
825
+ "opacity": 100,
826
+ "groupIds": [],
827
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
828
+ "index": "aJ",
829
+ "roundness": {
830
+ "type": 3
831
+ },
832
+ "seed": 1090413138,
833
+ "version": 886,
834
+ "versionNonce": 1877853586,
835
+ "isDeleted": false,
836
+ "boundElements": [
837
+ {
838
+ "type": "text",
839
+ "id": "8z-XnbnnzUInYL8CURb3n"
840
+ },
841
+ {
842
+ "id": "C0aHbsHvOP5sqfizC2uBO",
843
+ "type": "arrow"
844
+ },
845
+ {
846
+ "id": "Jsb8q4I42iAB20vbbPrFw",
847
+ "type": "arrow"
848
+ },
849
+ {
850
+ "id": "q6COVL8ZMzxTwWg3gcbk_",
851
+ "type": "arrow"
852
+ }
853
+ ],
854
+ "updated": 1739437653572,
855
+ "link": null,
856
+ "locked": false
857
+ },
858
+ {
859
+ "id": "8z-XnbnnzUInYL8CURb3n",
860
+ "type": "text",
861
+ "x": 1064.4707802666558,
862
+ "y": 739.2124888102215,
863
+ "width": 208.5597686767578,
864
+ "height": 50,
865
+ "angle": 0,
866
+ "strokeColor": "#1e1e1e",
867
+ "backgroundColor": "transparent",
868
+ "fillStyle": "solid",
869
+ "strokeWidth": 2,
870
+ "strokeStyle": "solid",
871
+ "roughness": 1,
872
+ "opacity": 100,
873
+ "groupIds": [],
874
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
875
+ "index": "aK",
876
+ "roundness": null,
877
+ "seed": 325208082,
878
+ "version": 856,
879
+ "versionNonce": 1292059474,
880
+ "isDeleted": false,
881
+ "boundElements": [],
882
+ "updated": 1739437653572,
883
+ "link": null,
884
+ "locked": false,
885
+ "text": "Extract sentence for\ntranslation",
886
+ "fontSize": 20,
887
+ "fontFamily": 5,
888
+ "textAlign": "center",
889
+ "verticalAlign": "middle",
890
+ "containerId": "s2V3iEzd4ip1tbVzaKq4p",
891
+ "originalText": "Extract sentence for translation",
892
+ "autoResize": true,
893
+ "lineHeight": 1.25
894
+ },
895
+ {
896
+ "id": "K7JKG04XiRPCsQ3h4_Dax",
897
+ "type": "rectangle",
898
+ "x": 1526.0840996636284,
899
+ "y": 740.3903223673504,
900
+ "width": 226.8443603515625,
901
+ "height": 66.13334655761719,
902
+ "angle": 0,
903
+ "strokeColor": "#1e1e1e",
904
+ "backgroundColor": "transparent",
905
+ "fillStyle": "solid",
906
+ "strokeWidth": 2,
907
+ "strokeStyle": "solid",
908
+ "roughness": 1,
909
+ "opacity": 100,
910
+ "groupIds": [],
911
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
912
+ "index": "aL",
913
+ "roundness": {
914
+ "type": 3
915
+ },
916
+ "seed": 1288555726,
917
+ "version": 899,
918
+ "versionNonce": 235276882,
919
+ "isDeleted": false,
920
+ "boundElements": [
921
+ {
922
+ "type": "text",
923
+ "id": "byE6AHVYQ1PeMM3oRZ3OS"
924
+ },
925
+ {
926
+ "id": "k7_aznX7yugCPo8_9_dDT",
927
+ "type": "arrow"
928
+ },
929
+ {
930
+ "id": "xx3Qb-dEk_gwNzn15L2Js",
931
+ "type": "arrow"
932
+ }
933
+ ],
934
+ "updated": 1739437653572,
935
+ "link": null,
936
+ "locked": false
937
+ },
938
+ {
939
+ "id": "byE6AHVYQ1PeMM3oRZ3OS",
940
+ "type": "text",
941
+ "x": 1617.5063027275933,
942
+ "y": 760.956995646159,
943
+ "width": 43.99995422363281,
944
+ "height": 25,
945
+ "angle": 0,
946
+ "strokeColor": "#1e1e1e",
947
+ "backgroundColor": "transparent",
948
+ "fillStyle": "solid",
949
+ "strokeWidth": 2,
950
+ "strokeStyle": "solid",
951
+ "roughness": 1,
952
+ "opacity": 100,
953
+ "groupIds": [],
954
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
955
+ "index": "aM",
956
+ "roundness": null,
957
+ "seed": 1263993614,
958
+ "version": 833,
959
+ "versionNonce": 825552914,
960
+ "isDeleted": false,
961
+ "boundElements": [],
962
+ "updated": 1739437653572,
963
+ "link": null,
964
+ "locked": false,
965
+ "text": "chat",
966
+ "fontSize": 20,
967
+ "fontFamily": 5,
968
+ "textAlign": "center",
969
+ "verticalAlign": "middle",
970
+ "containerId": "K7JKG04XiRPCsQ3h4_Dax",
971
+ "originalText": "chat",
972
+ "autoResize": true,
973
+ "lineHeight": 1.25
974
+ },
975
+ {
976
+ "id": "C0aHbsHvOP5sqfizC2uBO",
977
+ "type": "arrow",
978
+ "x": 1295.9995378240656,
979
+ "y": 684.9493632675895,
980
+ "width": 120.7530982752337,
981
+ "height": 57.60015869140625,
982
+ "angle": 0,
983
+ "strokeColor": "#1e1e1e",
984
+ "backgroundColor": "transparent",
985
+ "fillStyle": "solid",
986
+ "strokeWidth": 2,
987
+ "strokeStyle": "solid",
988
+ "roughness": 1,
989
+ "opacity": 100,
990
+ "groupIds": [],
991
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
992
+ "index": "aN",
993
+ "roundness": {
994
+ "type": 2
995
+ },
996
+ "seed": 960346898,
997
+ "version": 2745,
998
+ "versionNonce": 1609388370,
999
+ "isDeleted": false,
1000
+ "boundElements": [
1001
+ {
1002
+ "type": "text",
1003
+ "id": "WEyrlpHlup6Ivp43FxuGR"
1004
+ }
1005
+ ],
1006
+ "updated": 1739437653572,
1007
+ "link": null,
1008
+ "locked": false,
1009
+ "points": [
1010
+ [
1011
+ 0,
1012
+ 0
1013
+ ],
1014
+ [
1015
+ -112.31540153934338,
1016
+ -22.425961371430503
1017
+ ],
1018
+ [
1019
+ -120.7530982752337,
1020
+ 35.17419731997575
1021
+ ]
1022
+ ],
1023
+ "lastCommittedPoint": null,
1024
+ "startBinding": {
1025
+ "elementId": "eWx-OAj8tmJ7UJucCFqT0",
1026
+ "focus": -0.07180220905959642,
1027
+ "gap": 2.624112550388773,
1028
+ "fixedPoint": null
1029
+ },
1030
+ "endBinding": {
1031
+ "elementId": "s2V3iEzd4ip1tbVzaKq4p",
1032
+ "focus": 0.0003154164709863474,
1033
+ "gap": 11.022254943847656,
1034
+ "fixedPoint": null
1035
+ },
1036
+ "startArrowhead": null,
1037
+ "endArrowhead": "arrow",
1038
+ "elbowed": false
1039
+ },
1040
+ {
1041
+ "id": "WEyrlpHlup6Ivp43FxuGR",
1042
+ "type": "text",
1043
+ "x": 1202.9674919976128,
1044
+ "y": 778.7347056070965,
1045
+ "width": 93.69989013671875,
1046
+ "height": 25,
1047
+ "angle": 0,
1048
+ "strokeColor": "#1e1e1e",
1049
+ "backgroundColor": "transparent",
1050
+ "fillStyle": "solid",
1051
+ "strokeWidth": 2,
1052
+ "strokeStyle": "solid",
1053
+ "roughness": 1,
1054
+ "opacity": 100,
1055
+ "groupIds": [],
1056
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
1057
+ "index": "aNV",
1058
+ "roundness": null,
1059
+ "seed": 1828813522,
1060
+ "version": 458,
1061
+ "versionNonce": 1956337426,
1062
+ "isDeleted": false,
1063
+ "boundElements": [],
1064
+ "updated": 1739437653572,
1065
+ "link": null,
1066
+ "locked": false,
1067
+ "text": "Translate",
1068
+ "fontSize": 20,
1069
+ "fontFamily": 5,
1070
+ "textAlign": "center",
1071
+ "verticalAlign": "middle",
1072
+ "containerId": "C0aHbsHvOP5sqfizC2uBO",
1073
+ "originalText": "Translate",
1074
+ "autoResize": true,
1075
+ "lineHeight": 1.25
1076
+ },
1077
+ {
1078
+ "id": "k7_aznX7yugCPo8_9_dDT",
1079
+ "type": "arrow",
1080
+ "x": 1438.6781327565973,
1081
+ "y": 681.9720610503717,
1082
+ "width": 209.69976955783181,
1083
+ "height": 77.51116943359375,
1084
+ "angle": 0,
1085
+ "strokeColor": "#1e1e1e",
1086
+ "backgroundColor": "transparent",
1087
+ "fillStyle": "solid",
1088
+ "strokeWidth": 2,
1089
+ "strokeStyle": "solid",
1090
+ "roughness": 1,
1091
+ "opacity": 100,
1092
+ "groupIds": [],
1093
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
1094
+ "index": "aO",
1095
+ "roundness": {
1096
+ "type": 2
1097
+ },
1098
+ "seed": 1186407950,
1099
+ "version": 2843,
1100
+ "versionNonce": 1493345490,
1101
+ "isDeleted": false,
1102
+ "boundElements": [
1103
+ {
1104
+ "type": "text",
1105
+ "id": "mBuVXhrQjpx3Rew6QXVpk"
1106
+ }
1107
+ ],
1108
+ "updated": 1739437653572,
1109
+ "link": null,
1110
+ "locked": false,
1111
+ "points": [
1112
+ [
1113
+ 0,
1114
+ 0
1115
+ ],
1116
+ [
1117
+ 178.38513213450074,
1118
+ -27.237677130466977
1119
+ ],
1120
+ [
1121
+ 209.69976955783181,
1122
+ 50.27349230312677
1123
+ ]
1124
+ ],
1125
+ "lastCommittedPoint": null,
1126
+ "startBinding": {
1127
+ "elementId": "eWx-OAj8tmJ7UJucCFqT0",
1128
+ "focus": -0.010717335711518705,
1129
+ "gap": 1.7556588524229966,
1130
+ "fixedPoint": null
1131
+ },
1132
+ "endBinding": {
1133
+ "elementId": "K7JKG04XiRPCsQ3h4_Dax",
1134
+ "focus": 0.2013004905125822,
1135
+ "gap": 8.144769013851942,
1136
+ "fixedPoint": null
1137
+ },
1138
+ "startArrowhead": null,
1139
+ "endArrowhead": "arrow",
1140
+ "elbowed": false
1141
+ },
1142
+ {
1143
+ "id": "mBuVXhrQjpx3Rew6QXVpk",
1144
+ "type": "text",
1145
+ "x": 1659.9465885605316,
1146
+ "y": 770.9456876308421,
1147
+ "width": 46.49995422363281,
1148
+ "height": 25,
1149
+ "angle": 0,
1150
+ "strokeColor": "#1e1e1e",
1151
+ "backgroundColor": "transparent",
1152
+ "fillStyle": "solid",
1153
+ "strokeWidth": 2,
1154
+ "strokeStyle": "solid",
1155
+ "roughness": 1,
1156
+ "opacity": 100,
1157
+ "groupIds": [],
1158
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
1159
+ "index": "aP",
1160
+ "roundness": null,
1161
+ "seed": 943163666,
1162
+ "version": 455,
1163
+ "versionNonce": 1455045266,
1164
+ "isDeleted": false,
1165
+ "boundElements": [],
1166
+ "updated": 1739437653572,
1167
+ "link": null,
1168
+ "locked": false,
1169
+ "text": "Chat",
1170
+ "fontSize": 20,
1171
+ "fontFamily": 5,
1172
+ "textAlign": "center",
1173
+ "verticalAlign": "middle",
1174
+ "containerId": "k7_aznX7yugCPo8_9_dDT",
1175
+ "originalText": "Chat",
1176
+ "autoResize": true,
1177
+ "lineHeight": 1.25
1178
+ },
1179
+ {
1180
+ "id": "gBtT2H2gfCOioSXaQjgn3",
1181
+ "type": "rectangle",
1182
+ "x": 1060.3062676323784,
1183
+ "y": 857.2125269571942,
1184
+ "width": 226.8443603515625,
1185
+ "height": 85,
1186
+ "angle": 0,
1187
+ "strokeColor": "#1e1e1e",
1188
+ "backgroundColor": "transparent",
1189
+ "fillStyle": "solid",
1190
+ "strokeWidth": 2,
1191
+ "strokeStyle": "solid",
1192
+ "roughness": 1,
1193
+ "opacity": 100,
1194
+ "groupIds": [],
1195
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
1196
+ "index": "aQ",
1197
+ "roundness": {
1198
+ "type": 3
1199
+ },
1200
+ "seed": 1193112334,
1201
+ "version": 929,
1202
+ "versionNonce": 1819875410,
1203
+ "isDeleted": false,
1204
+ "boundElements": [
1205
+ {
1206
+ "type": "text",
1207
+ "id": "J4USxhJBuFgd1ddkcz7YR"
1208
+ },
1209
+ {
1210
+ "id": "Jsb8q4I42iAB20vbbPrFw",
1211
+ "type": "arrow"
1212
+ },
1213
+ {
1214
+ "id": "dRuRJC031Lx5Irftqyzvc",
1215
+ "type": "arrow"
1216
+ },
1217
+ {
1218
+ "id": "Y2ub__u8TgOIwogbcOSyJ",
1219
+ "type": "arrow"
1220
+ }
1221
+ ],
1222
+ "updated": 1739437653572,
1223
+ "link": null,
1224
+ "locked": false
1225
+ },
1226
+ {
1227
+ "id": "J4USxhJBuFgd1ddkcz7YR",
1228
+ "type": "text",
1229
+ "x": 1076.8385399712456,
1230
+ "y": 862.2125269571942,
1231
+ "width": 193.77981567382812,
1232
+ "height": 75,
1233
+ "angle": 0,
1234
+ "strokeColor": "#1e1e1e",
1235
+ "backgroundColor": "transparent",
1236
+ "fillStyle": "solid",
1237
+ "strokeWidth": 2,
1238
+ "strokeStyle": "solid",
1239
+ "roughness": 1,
1240
+ "opacity": 100,
1241
+ "groupIds": [],
1242
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
1243
+ "index": "aR",
1244
+ "roundness": null,
1245
+ "seed": 559407438,
1246
+ "version": 937,
1247
+ "versionNonce": 1237507346,
1248
+ "isDeleted": false,
1249
+ "boundElements": [],
1250
+ "updated": 1739437986648,
1251
+ "link": null,
1252
+ "locked": false,
1253
+ "text": "Translate\ncan result in several\noptions",
1254
+ "fontSize": 20,
1255
+ "fontFamily": 5,
1256
+ "textAlign": "center",
1257
+ "verticalAlign": "middle",
1258
+ "containerId": "gBtT2H2gfCOioSXaQjgn3",
1259
+ "originalText": "Translate\ncan result in several options",
1260
+ "autoResize": true,
1261
+ "lineHeight": 1.25
1262
+ },
1263
+ {
1264
+ "id": "Jsb8q4I42iAB20vbbPrFw",
1265
+ "type": "arrow",
1266
+ "x": 1169.892220616474,
1267
+ "y": 798.2791620890301,
1268
+ "width": 3.8649818929643516,
1269
+ "height": 57.93336486816406,
1270
+ "angle": 0,
1271
+ "strokeColor": "#1e1e1e",
1272
+ "backgroundColor": "transparent",
1273
+ "fillStyle": "solid",
1274
+ "strokeWidth": 2,
1275
+ "strokeStyle": "solid",
1276
+ "roughness": 1,
1277
+ "opacity": 100,
1278
+ "groupIds": [],
1279
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
1280
+ "index": "aS",
1281
+ "roundness": {
1282
+ "type": 2
1283
+ },
1284
+ "seed": 1760649362,
1285
+ "version": 2259,
1286
+ "versionNonce": 1667605778,
1287
+ "isDeleted": false,
1288
+ "boundElements": [],
1289
+ "updated": 1739437653572,
1290
+ "link": null,
1291
+ "locked": false,
1292
+ "points": [
1293
+ [
1294
+ 0,
1295
+ 0
1296
+ ],
1297
+ [
1298
+ 3.8649818929643516,
1299
+ 57.93336486816406
1300
+ ]
1301
+ ],
1302
+ "lastCommittedPoint": null,
1303
+ "startBinding": {
1304
+ "elementId": "s2V3iEzd4ip1tbVzaKq4p",
1305
+ "focus": 0.008587306860425607,
1306
+ "gap": 1,
1307
+ "fixedPoint": null
1308
+ },
1309
+ "endBinding": {
1310
+ "elementId": "gBtT2H2gfCOioSXaQjgn3",
1311
+ "focus": 0.02520976571090038,
1312
+ "gap": 1,
1313
+ "fixedPoint": null
1314
+ },
1315
+ "startArrowhead": null,
1316
+ "endArrowhead": "arrow",
1317
+ "elbowed": false
1318
+ },
1319
+ {
1320
+ "id": "WsxPr8Q8Ki3MX02D1zoTP",
1321
+ "type": "rectangle",
1322
+ "x": 1049.6395195855034,
1323
+ "y": 1159.4349390665693,
1324
+ "width": 226.8443603515625,
1325
+ "height": 135,
1326
+ "angle": 0,
1327
+ "strokeColor": "#1e1e1e",
1328
+ "backgroundColor": "transparent",
1329
+ "fillStyle": "solid",
1330
+ "strokeWidth": 2,
1331
+ "strokeStyle": "solid",
1332
+ "roughness": 1,
1333
+ "opacity": 100,
1334
+ "groupIds": [],
1335
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
1336
+ "index": "aT",
1337
+ "roundness": {
1338
+ "type": 3
1339
+ },
1340
+ "seed": 537673166,
1341
+ "version": 790,
1342
+ "versionNonce": 1431515858,
1343
+ "isDeleted": false,
1344
+ "boundElements": [
1345
+ {
1346
+ "type": "text",
1347
+ "id": "f2o9j0XWQqkXo9FMAv5BZ"
1348
+ },
1349
+ {
1350
+ "id": "97_z7GhT9RO-2AJqQ_uq7",
1351
+ "type": "arrow"
1352
+ },
1353
+ {
1354
+ "id": "yNsW2h8Pss9Gb_S8sI9g1",
1355
+ "type": "arrow"
1356
+ },
1357
+ {
1358
+ "id": "3MGuF2J5NwQCyzMW7bBY0",
1359
+ "type": "arrow"
1360
+ }
1361
+ ],
1362
+ "updated": 1739437653572,
1363
+ "link": null,
1364
+ "locked": false
1365
+ },
1366
+ {
1367
+ "id": "f2o9j0XWQqkXo9FMAv5BZ",
1368
+ "type": "text",
1369
+ "x": 1067.6117943657769,
1370
+ "y": 1164.4349390665693,
1371
+ "width": 190.89981079101562,
1372
+ "height": 125,
1373
+ "angle": 0,
1374
+ "strokeColor": "#1e1e1e",
1375
+ "backgroundColor": "transparent",
1376
+ "fillStyle": "solid",
1377
+ "strokeWidth": 2,
1378
+ "strokeStyle": "solid",
1379
+ "roughness": 1,
1380
+ "opacity": 100,
1381
+ "groupIds": [],
1382
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
1383
+ "index": "aU",
1384
+ "roundness": null,
1385
+ "seed": 1872712718,
1386
+ "version": 880,
1387
+ "versionNonce": 1439238290,
1388
+ "isDeleted": false,
1389
+ "boundElements": [],
1390
+ "updated": 1739437653572,
1391
+ "link": null,
1392
+ "locked": false,
1393
+ "text": "Text to speech for\nall translations:\nCreates temporary\nfiles and stores in\ngraph's state",
1394
+ "fontSize": 20,
1395
+ "fontFamily": 5,
1396
+ "textAlign": "center",
1397
+ "verticalAlign": "middle",
1398
+ "containerId": "WsxPr8Q8Ki3MX02D1zoTP",
1399
+ "originalText": "Text to speech for all translations:\nCreates temporary files and stores in graph's state",
1400
+ "autoResize": true,
1401
+ "lineHeight": 1.25
1402
+ },
1403
+ {
1404
+ "id": "97_z7GhT9RO-2AJqQ_uq7",
1405
+ "type": "arrow",
1406
+ "x": 1160.9953498007794,
1407
+ "y": 1122.1013437906904,
1408
+ "width": 2.2386264643675986,
1409
+ "height": 36.2667236328125,
1410
+ "angle": 0,
1411
+ "strokeColor": "#1e1e1e",
1412
+ "backgroundColor": "transparent",
1413
+ "fillStyle": "solid",
1414
+ "strokeWidth": 2,
1415
+ "strokeStyle": "solid",
1416
+ "roughness": 1,
1417
+ "opacity": 100,
1418
+ "groupIds": [],
1419
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
1420
+ "index": "aV",
1421
+ "roundness": {
1422
+ "type": 2
1423
+ },
1424
+ "seed": 557425294,
1425
+ "version": 1601,
1426
+ "versionNonce": 1588188818,
1427
+ "isDeleted": false,
1428
+ "boundElements": [],
1429
+ "updated": 1739437653572,
1430
+ "link": null,
1431
+ "locked": false,
1432
+ "points": [
1433
+ [
1434
+ 0,
1435
+ 0
1436
+ ],
1437
+ [
1438
+ -2.2386264643675986,
1439
+ 36.2667236328125
1440
+ ]
1441
+ ],
1442
+ "lastCommittedPoint": null,
1443
+ "startBinding": {
1444
+ "elementId": "prqJbpWmSVDGYCnNO5-Se",
1445
+ "focus": -0.09441150381938627,
1446
+ "gap": 7.5889892578125,
1447
+ "fixedPoint": null
1448
+ },
1449
+ "endBinding": {
1450
+ "elementId": "WsxPr8Q8Ki3MX02D1zoTP",
1451
+ "focus": -0.07260377110499779,
1452
+ "gap": 1.0668716430664062,
1453
+ "fixedPoint": null
1454
+ },
1455
+ "startArrowhead": null,
1456
+ "endArrowhead": "arrow",
1457
+ "elbowed": false
1458
+ },
1459
+ {
1460
+ "id": "cplZOVqKChIIlK1clqQyw",
1461
+ "type": "rectangle",
1462
+ "x": 1030.0839301215278,
1463
+ "y": 1585.21257019043,
1464
+ "width": 297.95556640625,
1465
+ "height": 93.86651611328125,
1466
+ "angle": 0,
1467
+ "strokeColor": "#1e1e1e",
1468
+ "backgroundColor": "transparent",
1469
+ "fillStyle": "solid",
1470
+ "strokeWidth": 2,
1471
+ "strokeStyle": "solid",
1472
+ "roughness": 1,
1473
+ "opacity": 100,
1474
+ "groupIds": [],
1475
+ "frameId": null,
1476
+ "index": "aW",
1477
+ "roundness": {
1478
+ "type": 3
1479
+ },
1480
+ "seed": 1093859470,
1481
+ "version": 497,
1482
+ "versionNonce": 654704654,
1483
+ "isDeleted": false,
1484
+ "boundElements": [
1485
+ {
1486
+ "type": "text",
1487
+ "id": "mPg0xKp-HoFN8npOB1WPG"
1488
+ },
1489
+ {
1490
+ "id": "TTwCIuNoNqJyJMCv6W3aQ",
1491
+ "type": "arrow"
1492
+ },
1493
+ {
1494
+ "id": "qnVIwuImMX7lY7cpTgiEM",
1495
+ "type": "arrow"
1496
+ }
1497
+ ],
1498
+ "updated": 1739438107332,
1499
+ "link": null,
1500
+ "locked": false
1501
+ },
1502
+ {
1503
+ "id": "mPg0xKp-HoFN8npOB1WPG",
1504
+ "type": "text",
1505
+ "x": 1041.1118384467231,
1506
+ "y": 1607.1458282470705,
1507
+ "width": 275.8997497558594,
1508
+ "height": 50,
1509
+ "angle": 0,
1510
+ "strokeColor": "#1e1e1e",
1511
+ "backgroundColor": "transparent",
1512
+ "fillStyle": "solid",
1513
+ "strokeWidth": 2,
1514
+ "strokeStyle": "solid",
1515
+ "roughness": 1,
1516
+ "opacity": 100,
1517
+ "groupIds": [],
1518
+ "frameId": null,
1519
+ "index": "aWV",
1520
+ "roundness": null,
1521
+ "seed": 2044616974,
1522
+ "version": 459,
1523
+ "versionNonce": 2020155854,
1524
+ "isDeleted": false,
1525
+ "boundElements": [],
1526
+ "updated": 1739438090222,
1527
+ "link": null,
1528
+ "locked": false,
1529
+ "text": "Displays translations and\nloads audio files in the chat",
1530
+ "fontSize": 20,
1531
+ "fontFamily": 5,
1532
+ "textAlign": "center",
1533
+ "verticalAlign": "middle",
1534
+ "containerId": "cplZOVqKChIIlK1clqQyw",
1535
+ "originalText": "Displays translations and loads audio files in the chat",
1536
+ "autoResize": true,
1537
+ "lineHeight": 1.25
1538
+ },
1539
+ {
1540
+ "id": "JgxMPeI9m-WxMJBe8p2iu",
1541
+ "type": "rectangle",
1542
+ "x": 1244.0496826171875,
1543
+ "y": 1765.9926740858289,
1544
+ "width": 283.0220947265625,
1545
+ "height": 96.7110595703125,
1546
+ "angle": 0,
1547
+ "strokeColor": "#1e1e1e",
1548
+ "backgroundColor": "transparent",
1549
+ "fillStyle": "solid",
1550
+ "strokeWidth": 2,
1551
+ "strokeStyle": "solid",
1552
+ "roughness": 1,
1553
+ "opacity": 100,
1554
+ "groupIds": [],
1555
+ "frameId": null,
1556
+ "index": "aZ",
1557
+ "roundness": {
1558
+ "type": 3
1559
+ },
1560
+ "seed": 383392782,
1561
+ "version": 246,
1562
+ "versionNonce": 1784923022,
1563
+ "isDeleted": false,
1564
+ "boundElements": [
1565
+ {
1566
+ "id": "TTwCIuNoNqJyJMCv6W3aQ",
1567
+ "type": "arrow"
1568
+ },
1569
+ {
1570
+ "type": "text",
1571
+ "id": "mpuGc6AQTGvoxqfktEp3b"
1572
+ },
1573
+ {
1574
+ "id": "FyQYDCMA748f6_svuDGi-",
1575
+ "type": "arrow"
1576
+ }
1577
+ ],
1578
+ "updated": 1739438047640,
1579
+ "link": null,
1580
+ "locked": false
1581
+ },
1582
+ {
1583
+ "id": "mpuGc6AQTGvoxqfktEp3b",
1584
+ "type": "text",
1585
+ "x": 1367.1807479858398,
1586
+ "y": 1801.8482038709851,
1587
+ "width": 36.75996398925781,
1588
+ "height": 25,
1589
+ "angle": 0,
1590
+ "strokeColor": "#1e1e1e",
1591
+ "backgroundColor": "transparent",
1592
+ "fillStyle": "solid",
1593
+ "strokeWidth": 2,
1594
+ "strokeStyle": "solid",
1595
+ "roughness": 1,
1596
+ "opacity": 100,
1597
+ "groupIds": [],
1598
+ "frameId": null,
1599
+ "index": "aZV",
1600
+ "roundness": null,
1601
+ "seed": 1699299790,
1602
+ "version": 147,
1603
+ "versionNonce": 411050446,
1604
+ "isDeleted": false,
1605
+ "boundElements": [],
1606
+ "updated": 1739438047640,
1607
+ "link": null,
1608
+ "locked": false,
1609
+ "text": "End",
1610
+ "fontSize": 20,
1611
+ "fontFamily": 5,
1612
+ "textAlign": "center",
1613
+ "verticalAlign": "middle",
1614
+ "containerId": "JgxMPeI9m-WxMJBe8p2iu",
1615
+ "originalText": "End",
1616
+ "autoResize": true,
1617
+ "lineHeight": 1.25
1618
+ },
1619
+ {
1620
+ "id": "TTwCIuNoNqJyJMCv6W3aQ",
1621
+ "type": "arrow",
1622
+ "x": 1145.6919319120068,
1623
+ "y": 1683.3459320068362,
1624
+ "width": 296.2791787291037,
1625
+ "height": 81.6467420789927,
1626
+ "angle": 0,
1627
+ "strokeColor": "#1e1e1e",
1628
+ "backgroundColor": "transparent",
1629
+ "fillStyle": "solid",
1630
+ "strokeWidth": 2,
1631
+ "strokeStyle": "solid",
1632
+ "roughness": 1,
1633
+ "opacity": 100,
1634
+ "groupIds": [],
1635
+ "frameId": null,
1636
+ "index": "ab",
1637
+ "roundness": {
1638
+ "type": 2
1639
+ },
1640
+ "seed": 1340985870,
1641
+ "version": 817,
1642
+ "versionNonce": 1925167118,
1643
+ "isDeleted": false,
1644
+ "boundElements": [],
1645
+ "updated": 1739438090222,
1646
+ "link": null,
1647
+ "locked": false,
1648
+ "points": [
1649
+ [
1650
+ 0,
1651
+ 0
1652
+ ],
1653
+ [
1654
+ 296.2791787291037,
1655
+ 81.6467420789927
1656
+ ]
1657
+ ],
1658
+ "lastCommittedPoint": null,
1659
+ "startBinding": {
1660
+ "elementId": "cplZOVqKChIIlK1clqQyw",
1661
+ "focus": 0.6864140851390049,
1662
+ "gap": 4.266845703125,
1663
+ "fixedPoint": null
1664
+ },
1665
+ "endBinding": {
1666
+ "elementId": "JgxMPeI9m-WxMJBe8p2iu",
1667
+ "focus": 0.5873026439947175,
1668
+ "gap": 1,
1669
+ "fixedPoint": null
1670
+ },
1671
+ "startArrowhead": null,
1672
+ "endArrowhead": "arrow",
1673
+ "elbowed": false
1674
+ },
1675
+ {
1676
+ "id": "prqJbpWmSVDGYCnNO5-Se",
1677
+ "type": "rectangle",
1678
+ "x": 1041.106438530816,
1679
+ "y": 979.5123545328778,
1680
+ "width": 226.8443603515625,
1681
+ "height": 135,
1682
+ "angle": 0,
1683
+ "strokeColor": "#1e1e1e",
1684
+ "backgroundColor": "transparent",
1685
+ "fillStyle": "solid",
1686
+ "strokeWidth": 2,
1687
+ "strokeStyle": "solid",
1688
+ "roughness": 1,
1689
+ "opacity": 100,
1690
+ "groupIds": [],
1691
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
1692
+ "index": "ae",
1693
+ "roundness": {
1694
+ "type": 3
1695
+ },
1696
+ "seed": 680492946,
1697
+ "version": 744,
1698
+ "versionNonce": 1937206610,
1699
+ "isDeleted": false,
1700
+ "boundElements": [
1701
+ {
1702
+ "type": "text",
1703
+ "id": "EvY3jmmRrdnjvxwnM1xYZ"
1704
+ },
1705
+ {
1706
+ "id": "dRuRJC031Lx5Irftqyzvc",
1707
+ "type": "arrow"
1708
+ },
1709
+ {
1710
+ "id": "97_z7GhT9RO-2AJqQ_uq7",
1711
+ "type": "arrow"
1712
+ },
1713
+ {
1714
+ "id": "N6duZb4_dVSJBF4x-vezS",
1715
+ "type": "arrow"
1716
+ }
1717
+ ],
1718
+ "updated": 1739437653572,
1719
+ "link": null,
1720
+ "locked": false
1721
+ },
1722
+ {
1723
+ "id": "EvY3jmmRrdnjvxwnM1xYZ",
1724
+ "type": "text",
1725
+ "x": 1057.2387246025933,
1726
+ "y": 984.5123545328778,
1727
+ "width": 194.5797882080078,
1728
+ "height": 125,
1729
+ "angle": 0,
1730
+ "strokeColor": "#1e1e1e",
1731
+ "backgroundColor": "transparent",
1732
+ "fillStyle": "solid",
1733
+ "strokeWidth": 2,
1734
+ "strokeStyle": "solid",
1735
+ "roughness": 1,
1736
+ "opacity": 100,
1737
+ "groupIds": [],
1738
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
1739
+ "index": "af",
1740
+ "roundness": null,
1741
+ "seed": 1029553490,
1742
+ "version": 825,
1743
+ "versionNonce": 1216475922,
1744
+ "isDeleted": false,
1745
+ "boundElements": [],
1746
+ "updated": 1739437653572,
1747
+ "link": null,
1748
+ "locked": false,
1749
+ "text": "Breaks down\ntranslated sentence\ninto words and\nstores them in the\nstate",
1750
+ "fontSize": 20,
1751
+ "fontFamily": 5,
1752
+ "textAlign": "center",
1753
+ "verticalAlign": "middle",
1754
+ "containerId": "prqJbpWmSVDGYCnNO5-Se",
1755
+ "originalText": "Breaks down translated sentence into words and stores them in the state",
1756
+ "autoResize": true,
1757
+ "lineHeight": 1.25
1758
+ },
1759
+ {
1760
+ "id": "dRuRJC031Lx5Irftqyzvc",
1761
+ "type": "arrow",
1762
+ "x": 1175.8618706597222,
1763
+ "y": 948.412562052409,
1764
+ "width": 9.31304243062641,
1765
+ "height": 30.09979248046875,
1766
+ "angle": 0,
1767
+ "strokeColor": "#1e1e1e",
1768
+ "backgroundColor": "transparent",
1769
+ "fillStyle": "solid",
1770
+ "strokeWidth": 2,
1771
+ "strokeStyle": "solid",
1772
+ "roughness": 1,
1773
+ "opacity": 100,
1774
+ "groupIds": [],
1775
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
1776
+ "index": "ag",
1777
+ "roundness": {
1778
+ "type": 2
1779
+ },
1780
+ "seed": 1760723790,
1781
+ "version": 1185,
1782
+ "versionNonce": 936303122,
1783
+ "isDeleted": false,
1784
+ "boundElements": [],
1785
+ "updated": 1739437653572,
1786
+ "link": null,
1787
+ "locked": false,
1788
+ "points": [
1789
+ [
1790
+ 0,
1791
+ 0
1792
+ ],
1793
+ [
1794
+ -9.31304243062641,
1795
+ 30.09979248046875
1796
+ ]
1797
+ ],
1798
+ "lastCommittedPoint": null,
1799
+ "startBinding": {
1800
+ "elementId": "gBtT2H2gfCOioSXaQjgn3",
1801
+ "focus": -0.010633650837373472,
1802
+ "gap": 6.200035095214844,
1803
+ "fixedPoint": null
1804
+ },
1805
+ "endBinding": {
1806
+ "elementId": "prqJbpWmSVDGYCnNO5-Se",
1807
+ "focus": -0.06830668561434806,
1808
+ "gap": 1,
1809
+ "fixedPoint": null
1810
+ },
1811
+ "startArrowhead": null,
1812
+ "endArrowhead": "arrow",
1813
+ "elbowed": false
1814
+ },
1815
+ {
1816
+ "id": "MIUALTrbU6IWmrNItyuc8",
1817
+ "type": "ellipse",
1818
+ "x": 622.5383572048611,
1819
+ "y": 650.9902598063153,
1820
+ "width": 214.83456081814234,
1821
+ "height": 131.63459947374133,
1822
+ "angle": 0,
1823
+ "strokeColor": "#1e1e1e",
1824
+ "backgroundColor": "transparent",
1825
+ "fillStyle": "solid",
1826
+ "strokeWidth": 2,
1827
+ "strokeStyle": "solid",
1828
+ "roughness": 1,
1829
+ "opacity": 100,
1830
+ "groupIds": [],
1831
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
1832
+ "index": "ah",
1833
+ "roundness": {
1834
+ "type": 2
1835
+ },
1836
+ "seed": 100665170,
1837
+ "version": 537,
1838
+ "versionNonce": 281921490,
1839
+ "isDeleted": false,
1840
+ "boundElements": [
1841
+ {
1842
+ "type": "text",
1843
+ "id": "TIKTZBve-6HnLB1NlIOLA"
1844
+ },
1845
+ {
1846
+ "id": "q6COVL8ZMzxTwWg3gcbk_",
1847
+ "type": "arrow"
1848
+ }
1849
+ ],
1850
+ "updated": 1739437653572,
1851
+ "link": null,
1852
+ "locked": false
1853
+ },
1854
+ {
1855
+ "id": "TIKTZBve-6HnLB1NlIOLA",
1856
+ "type": "text",
1857
+ "x": 663.230214612151,
1858
+ "y": 691.767700579857,
1859
+ "width": 133.5398712158203,
1860
+ "height": 50,
1861
+ "angle": 0,
1862
+ "strokeColor": "#1e1e1e",
1863
+ "backgroundColor": "transparent",
1864
+ "fillStyle": "solid",
1865
+ "strokeWidth": 2,
1866
+ "strokeStyle": "solid",
1867
+ "roughness": 1,
1868
+ "opacity": 100,
1869
+ "groupIds": [],
1870
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
1871
+ "index": "ahV",
1872
+ "roundness": null,
1873
+ "seed": 1697150802,
1874
+ "version": 472,
1875
+ "versionNonce": 1328086418,
1876
+ "isDeleted": false,
1877
+ "boundElements": [],
1878
+ "updated": 1739437653572,
1879
+ "link": null,
1880
+ "locked": false,
1881
+ "text": "Dependencies:\n1. LLM",
1882
+ "fontSize": 20,
1883
+ "fontFamily": 5,
1884
+ "textAlign": "center",
1885
+ "verticalAlign": "middle",
1886
+ "containerId": "MIUALTrbU6IWmrNItyuc8",
1887
+ "originalText": "Dependencies:\n1. LLM",
1888
+ "autoResize": true,
1889
+ "lineHeight": 1.25
1890
+ },
1891
+ {
1892
+ "id": "q6COVL8ZMzxTwWg3gcbk_",
1893
+ "type": "arrow",
1894
+ "x": 1051.4174126519097,
1895
+ "y": 767.6124521891278,
1896
+ "width": 210.14963666066274,
1897
+ "height": 38.947360510596354,
1898
+ "angle": 0,
1899
+ "strokeColor": "#1e1e1e",
1900
+ "backgroundColor": "transparent",
1901
+ "fillStyle": "solid",
1902
+ "strokeWidth": 2,
1903
+ "strokeStyle": "dashed",
1904
+ "roughness": 1,
1905
+ "opacity": 100,
1906
+ "groupIds": [],
1907
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
1908
+ "index": "aj",
1909
+ "roundness": {
1910
+ "type": 2
1911
+ },
1912
+ "seed": 599973842,
1913
+ "version": 1271,
1914
+ "versionNonce": 837828882,
1915
+ "isDeleted": false,
1916
+ "boundElements": [],
1917
+ "updated": 1739437653572,
1918
+ "link": null,
1919
+ "locked": false,
1920
+ "points": [
1921
+ [
1922
+ 0,
1923
+ 0
1924
+ ],
1925
+ [
1926
+ -210.14963666066274,
1927
+ -38.947360510596354
1928
+ ]
1929
+ ],
1930
+ "lastCommittedPoint": null,
1931
+ "startBinding": {
1932
+ "elementId": "s2V3iEzd4ip1tbVzaKq4p",
1933
+ "focus": -0.7211590589604303,
1934
+ "gap": 3.91107177734375,
1935
+ "fixedPoint": null
1936
+ },
1937
+ "endBinding": {
1938
+ "elementId": "MIUALTrbU6IWmrNItyuc8",
1939
+ "focus": -0.1275718699958542,
1940
+ "gap": 5.467521301687285,
1941
+ "fixedPoint": null
1942
+ },
1943
+ "startArrowhead": null,
1944
+ "endArrowhead": "arrow",
1945
+ "elbowed": false
1946
+ },
1947
+ {
1948
+ "id": "w8cjE_ZmAWalkyMBdUsGJ",
1949
+ "type": "ellipse",
1950
+ "x": 610.9019722880026,
1951
+ "y": 813.8347269694012,
1952
+ "width": 214.3006328052213,
1953
+ "height": 137.52029631030177,
1954
+ "angle": 0,
1955
+ "strokeColor": "#1e1e1e",
1956
+ "backgroundColor": "transparent",
1957
+ "fillStyle": "solid",
1958
+ "strokeWidth": 2,
1959
+ "strokeStyle": "solid",
1960
+ "roughness": 1,
1961
+ "opacity": 100,
1962
+ "groupIds": [],
1963
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
1964
+ "index": "ak",
1965
+ "roundness": {
1966
+ "type": 2
1967
+ },
1968
+ "seed": 499944590,
1969
+ "version": 638,
1970
+ "versionNonce": 808079058,
1971
+ "isDeleted": false,
1972
+ "boundElements": [
1973
+ {
1974
+ "type": "text",
1975
+ "id": "GIizGzKGnOF0-oXa9jiZb"
1976
+ },
1977
+ {
1978
+ "id": "Y2ub__u8TgOIwogbcOSyJ",
1979
+ "type": "arrow"
1980
+ }
1981
+ ],
1982
+ "updated": 1739437653572,
1983
+ "link": null,
1984
+ "locked": false
1985
+ },
1986
+ {
1987
+ "id": "GIizGzKGnOF0-oXa9jiZb",
1988
+ "type": "text",
1989
+ "x": 651.515637748133,
1990
+ "y": 857.4741080886532,
1991
+ "width": 133.5398712158203,
1992
+ "height": 50,
1993
+ "angle": 0,
1994
+ "strokeColor": "#1e1e1e",
1995
+ "backgroundColor": "transparent",
1996
+ "fillStyle": "solid",
1997
+ "strokeWidth": 2,
1998
+ "strokeStyle": "solid",
1999
+ "roughness": 1,
2000
+ "opacity": 100,
2001
+ "groupIds": [],
2002
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
2003
+ "index": "al",
2004
+ "roundness": null,
2005
+ "seed": 1441254094,
2006
+ "version": 573,
2007
+ "versionNonce": 2136777874,
2008
+ "isDeleted": false,
2009
+ "boundElements": [],
2010
+ "updated": 1739437653572,
2011
+ "link": null,
2012
+ "locked": false,
2013
+ "text": "Dependencies:\n1. LLM",
2014
+ "fontSize": 20,
2015
+ "fontFamily": 5,
2016
+ "textAlign": "center",
2017
+ "verticalAlign": "middle",
2018
+ "containerId": "w8cjE_ZmAWalkyMBdUsGJ",
2019
+ "originalText": "Dependencies:\n1. LLM",
2020
+ "autoResize": true,
2021
+ "lineHeight": 1.25
2022
+ },
2023
+ {
2024
+ "id": "fzHHgaAJ7hL8OgFlYJdbi",
2025
+ "type": "ellipse",
2026
+ "x": 608.1187303331162,
2027
+ "y": 972.6210312331376,
2028
+ "width": 214.3006328052213,
2029
+ "height": 137.52029631030177,
2030
+ "angle": 0,
2031
+ "strokeColor": "#1e1e1e",
2032
+ "backgroundColor": "transparent",
2033
+ "fillStyle": "solid",
2034
+ "strokeWidth": 2,
2035
+ "strokeStyle": "solid",
2036
+ "roughness": 1,
2037
+ "opacity": 100,
2038
+ "groupIds": [],
2039
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
2040
+ "index": "am",
2041
+ "roundness": {
2042
+ "type": 2
2043
+ },
2044
+ "seed": 1297637710,
2045
+ "version": 620,
2046
+ "versionNonce": 1755719698,
2047
+ "isDeleted": false,
2048
+ "boundElements": [
2049
+ {
2050
+ "type": "text",
2051
+ "id": "6OrphHT5XXeFhst7BQAEf"
2052
+ },
2053
+ {
2054
+ "id": "N6duZb4_dVSJBF4x-vezS",
2055
+ "type": "arrow"
2056
+ }
2057
+ ],
2058
+ "updated": 1739437653572,
2059
+ "link": null,
2060
+ "locked": false
2061
+ },
2062
+ {
2063
+ "id": "6OrphHT5XXeFhst7BQAEf",
2064
+ "type": "text",
2065
+ "x": 648.7323957932466,
2066
+ "y": 1016.2604123523896,
2067
+ "width": 133.5398712158203,
2068
+ "height": 50,
2069
+ "angle": 0,
2070
+ "strokeColor": "#1e1e1e",
2071
+ "backgroundColor": "transparent",
2072
+ "fillStyle": "solid",
2073
+ "strokeWidth": 2,
2074
+ "strokeStyle": "solid",
2075
+ "roughness": 1,
2076
+ "opacity": 100,
2077
+ "groupIds": [],
2078
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
2079
+ "index": "an",
2080
+ "roundness": null,
2081
+ "seed": 1989871502,
2082
+ "version": 555,
2083
+ "versionNonce": 93017554,
2084
+ "isDeleted": false,
2085
+ "boundElements": [],
2086
+ "updated": 1739437653572,
2087
+ "link": null,
2088
+ "locked": false,
2089
+ "text": "Dependencies:\n1. LLM",
2090
+ "fontSize": 20,
2091
+ "fontFamily": 5,
2092
+ "textAlign": "center",
2093
+ "verticalAlign": "middle",
2094
+ "containerId": "fzHHgaAJ7hL8OgFlYJdbi",
2095
+ "originalText": "Dependencies:\n1. LLM",
2096
+ "autoResize": true,
2097
+ "lineHeight": 1.25
2098
+ },
2099
+ {
2100
+ "id": "I7sHCIcRd544zlJb-k7MC",
2101
+ "type": "ellipse",
2102
+ "x": 634.0945935673915,
2103
+ "y": 1157.6356350622914,
2104
+ "width": 214.3006328052213,
2105
+ "height": 155.50783146331636,
2106
+ "angle": 0,
2107
+ "strokeColor": "#1e1e1e",
2108
+ "backgroundColor": "transparent",
2109
+ "fillStyle": "solid",
2110
+ "strokeWidth": 2,
2111
+ "strokeStyle": "solid",
2112
+ "roughness": 1,
2113
+ "opacity": 100,
2114
+ "groupIds": [],
2115
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
2116
+ "index": "ao",
2117
+ "roundness": {
2118
+ "type": 2
2119
+ },
2120
+ "seed": 189647374,
2121
+ "version": 644,
2122
+ "versionNonce": 558467410,
2123
+ "isDeleted": false,
2124
+ "boundElements": [
2125
+ {
2126
+ "type": "text",
2127
+ "id": "RdFDycnbkhVJiSB5iP26q"
2128
+ },
2129
+ {
2130
+ "id": "yNsW2h8Pss9Gb_S8sI9g1",
2131
+ "type": "arrow"
2132
+ }
2133
+ ],
2134
+ "updated": 1739437653572,
2135
+ "link": null,
2136
+ "locked": false
2137
+ },
2138
+ {
2139
+ "id": "RdFDycnbkhVJiSB5iP26q",
2140
+ "type": "text",
2141
+ "x": 674.7082590275219,
2142
+ "y": 1210.409229716287,
2143
+ "width": 133.5398712158203,
2144
+ "height": 50,
2145
+ "angle": 0,
2146
+ "strokeColor": "#1e1e1e",
2147
+ "backgroundColor": "transparent",
2148
+ "fillStyle": "solid",
2149
+ "strokeWidth": 2,
2150
+ "strokeStyle": "solid",
2151
+ "roughness": 1,
2152
+ "opacity": 100,
2153
+ "groupIds": [],
2154
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
2155
+ "index": "ap",
2156
+ "roundness": null,
2157
+ "seed": 1264932942,
2158
+ "version": 590,
2159
+ "versionNonce": 766545682,
2160
+ "isDeleted": false,
2161
+ "boundElements": [],
2162
+ "updated": 1739437653572,
2163
+ "link": null,
2164
+ "locked": false,
2165
+ "text": "Dependencies:\n1. TTS Model",
2166
+ "fontSize": 20,
2167
+ "fontFamily": 5,
2168
+ "textAlign": "center",
2169
+ "verticalAlign": "middle",
2170
+ "containerId": "I7sHCIcRd544zlJb-k7MC",
2171
+ "originalText": "Dependencies:\n1. TTS Model",
2172
+ "autoResize": true,
2173
+ "lineHeight": 1.25
2174
+ },
2175
+ {
2176
+ "id": "Y2ub__u8TgOIwogbcOSyJ",
2177
+ "type": "arrow",
2178
+ "x": 1053.5508355034722,
2179
+ "y": 901.8347574869794,
2180
+ "width": 222.5718893216865,
2181
+ "height": 10.765825358585857,
2182
+ "angle": 0,
2183
+ "strokeColor": "#1e1e1e",
2184
+ "backgroundColor": "transparent",
2185
+ "fillStyle": "solid",
2186
+ "strokeWidth": 2,
2187
+ "strokeStyle": "dashed",
2188
+ "roughness": 1,
2189
+ "opacity": 100,
2190
+ "groupIds": [],
2191
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
2192
+ "index": "apV",
2193
+ "roundness": {
2194
+ "type": 2
2195
+ },
2196
+ "seed": 1013898254,
2197
+ "version": 1156,
2198
+ "versionNonce": 1172402834,
2199
+ "isDeleted": false,
2200
+ "boundElements": [],
2201
+ "updated": 1739437653572,
2202
+ "link": null,
2203
+ "locked": false,
2204
+ "points": [
2205
+ [
2206
+ 0,
2207
+ 0
2208
+ ],
2209
+ [
2210
+ -222.5718893216865,
2211
+ -10.765825358585857
2212
+ ]
2213
+ ],
2214
+ "lastCommittedPoint": null,
2215
+ "startBinding": {
2216
+ "elementId": "gBtT2H2gfCOioSXaQjgn3",
2217
+ "focus": -0.17392504661039274,
2218
+ "gap": 6.75543212890625,
2219
+ "fixedPoint": null
2220
+ },
2221
+ "endBinding": {
2222
+ "elementId": "w8cjE_ZmAWalkyMBdUsGJ",
2223
+ "focus": 0.043677383394965984,
2224
+ "gap": 6.4990834007956835,
2225
+ "fixedPoint": null
2226
+ },
2227
+ "startArrowhead": null,
2228
+ "endArrowhead": "arrow",
2229
+ "elbowed": false
2230
+ },
2231
+ {
2232
+ "id": "N6duZb4_dVSJBF4x-vezS",
2233
+ "type": "arrow",
2234
+ "x": 1032.2174614800347,
2235
+ "y": 1055.4346720377607,
2236
+ "width": 207.620284271507,
2237
+ "height": 4.4558098534184865,
2238
+ "angle": 0,
2239
+ "strokeColor": "#1e1e1e",
2240
+ "backgroundColor": "transparent",
2241
+ "fillStyle": "solid",
2242
+ "strokeWidth": 2,
2243
+ "strokeStyle": "dashed",
2244
+ "roughness": 1,
2245
+ "opacity": 100,
2246
+ "groupIds": [],
2247
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
2248
+ "index": "apl",
2249
+ "roundness": {
2250
+ "type": 2
2251
+ },
2252
+ "seed": 385992850,
2253
+ "version": 1144,
2254
+ "versionNonce": 1643728978,
2255
+ "isDeleted": false,
2256
+ "boundElements": [],
2257
+ "updated": 1739437653572,
2258
+ "link": null,
2259
+ "locked": false,
2260
+ "points": [
2261
+ [
2262
+ 0,
2263
+ 0
2264
+ ],
2265
+ [
2266
+ -207.620284271507,
2267
+ -4.4558098534184865
2268
+ ]
2269
+ ],
2270
+ "lastCommittedPoint": null,
2271
+ "startBinding": {
2272
+ "elementId": "prqJbpWmSVDGYCnNO5-Se",
2273
+ "focus": -0.15757857668462358,
2274
+ "gap": 8.88897705078125,
2275
+ "fixedPoint": null
2276
+ },
2277
+ "endBinding": {
2278
+ "elementId": "fzHHgaAJ7hL8OgFlYJdbi",
2279
+ "focus": 0.1053997525170596,
2280
+ "gap": 3.164385268990415,
2281
+ "fixedPoint": null
2282
+ },
2283
+ "startArrowhead": null,
2284
+ "endArrowhead": "arrow",
2285
+ "elbowed": false
2286
+ },
2287
+ {
2288
+ "id": "yNsW2h8Pss9Gb_S8sI9g1",
2289
+ "type": "arrow",
2290
+ "x": 1041.4619683159722,
2291
+ "y": 1234.6347452799482,
2292
+ "width": 187.95914620974406,
2293
+ "height": 4.350599282177882,
2294
+ "angle": 0,
2295
+ "strokeColor": "#1e1e1e",
2296
+ "backgroundColor": "transparent",
2297
+ "fillStyle": "solid",
2298
+ "strokeWidth": 2,
2299
+ "strokeStyle": "dashed",
2300
+ "roughness": 1,
2301
+ "opacity": 100,
2302
+ "groupIds": [],
2303
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
2304
+ "index": "apt",
2305
+ "roundness": {
2306
+ "type": 2
2307
+ },
2308
+ "seed": 235643858,
2309
+ "version": 1180,
2310
+ "versionNonce": 1926198802,
2311
+ "isDeleted": false,
2312
+ "boundElements": [],
2313
+ "updated": 1739437653572,
2314
+ "link": null,
2315
+ "locked": false,
2316
+ "points": [
2317
+ [
2318
+ 0,
2319
+ 0
2320
+ ],
2321
+ [
2322
+ -187.95914620974406,
2323
+ -4.350599282177882
2324
+ ]
2325
+ ],
2326
+ "lastCommittedPoint": null,
2327
+ "startBinding": {
2328
+ "elementId": "WsxPr8Q8Ki3MX02D1zoTP",
2329
+ "focus": -0.14993749818034682,
2330
+ "gap": 8.17755126953125,
2331
+ "fixedPoint": null
2332
+ },
2333
+ "endBinding": {
2334
+ "elementId": "I7sHCIcRd544zlJb-k7MC",
2335
+ "focus": -0.09902868681529854,
2336
+ "gap": 5.318884744809665,
2337
+ "fixedPoint": null
2338
+ },
2339
+ "startArrowhead": null,
2340
+ "endArrowhead": "arrow",
2341
+ "elbowed": false
2342
+ },
2343
+ {
2344
+ "id": "4EpXJpZS9VYbSmYOdGndE",
2345
+ "type": "frame",
2346
+ "x": 556.4840630425347,
2347
+ "y": 469.65690104166686,
2348
+ "width": 1466.3111572265625,
2349
+ "height": 923.022201538086,
2350
+ "angle": 0,
2351
+ "strokeColor": "#bbb",
2352
+ "backgroundColor": "transparent",
2353
+ "fillStyle": "solid",
2354
+ "strokeWidth": 2,
2355
+ "strokeStyle": "solid",
2356
+ "roughness": 0,
2357
+ "opacity": 100,
2358
+ "groupIds": [],
2359
+ "frameId": null,
2360
+ "index": "aq",
2361
+ "roundness": null,
2362
+ "seed": 2051690766,
2363
+ "version": 870,
2364
+ "versionNonce": 142200978,
2365
+ "isDeleted": false,
2366
+ "boundElements": [],
2367
+ "updated": 1739437653572,
2368
+ "link": null,
2369
+ "locked": false,
2370
+ "name": "Langgraph"
2371
+ },
2372
+ {
2373
+ "id": "NrAZkP8Ng_B8lM3f45B0d",
2374
+ "type": "rectangle",
2375
+ "x": 1478.4393988715276,
2376
+ "y": 1547.2471211751301,
2377
+ "width": 297.95556640625,
2378
+ "height": 93.86651611328125,
2379
+ "angle": 0,
2380
+ "strokeColor": "#1e1e1e",
2381
+ "backgroundColor": "transparent",
2382
+ "fillStyle": "solid",
2383
+ "strokeWidth": 2,
2384
+ "strokeStyle": "solid",
2385
+ "roughness": 1,
2386
+ "opacity": 100,
2387
+ "groupIds": [],
2388
+ "frameId": null,
2389
+ "index": "at",
2390
+ "roundness": {
2391
+ "type": 3
2392
+ },
2393
+ "seed": 531617870,
2394
+ "version": 466,
2395
+ "versionNonce": 422448398,
2396
+ "isDeleted": false,
2397
+ "boundElements": [
2398
+ {
2399
+ "type": "text",
2400
+ "id": "bX-7TNY4PBleds7wTHIUv"
2401
+ },
2402
+ {
2403
+ "id": "xx3Qb-dEk_gwNzn15L2Js",
2404
+ "type": "arrow"
2405
+ },
2406
+ {
2407
+ "id": "FyQYDCMA748f6_svuDGi-",
2408
+ "type": "arrow"
2409
+ }
2410
+ ],
2411
+ "updated": 1739438051890,
2412
+ "link": null,
2413
+ "locked": false
2414
+ },
2415
+ {
2416
+ "id": "bX-7TNY4PBleds7wTHIUv",
2417
+ "type": "text",
2418
+ "x": 1541.4872656928167,
2419
+ "y": 1581.6803792317708,
2420
+ "width": 171.85983276367188,
2421
+ "height": 25,
2422
+ "angle": 0,
2423
+ "strokeColor": "#1e1e1e",
2424
+ "backgroundColor": "transparent",
2425
+ "fillStyle": "solid",
2426
+ "strokeWidth": 2,
2427
+ "strokeStyle": "solid",
2428
+ "roughness": 1,
2429
+ "opacity": 100,
2430
+ "groupIds": [],
2431
+ "frameId": null,
2432
+ "index": "au",
2433
+ "roundness": null,
2434
+ "seed": 485203598,
2435
+ "version": 436,
2436
+ "versionNonce": 1514486606,
2437
+ "isDeleted": false,
2438
+ "boundElements": [],
2439
+ "updated": 1739438051890,
2440
+ "link": null,
2441
+ "locked": false,
2442
+ "text": "Displays response",
2443
+ "fontSize": 20,
2444
+ "fontFamily": 5,
2445
+ "textAlign": "center",
2446
+ "verticalAlign": "middle",
2447
+ "containerId": "NrAZkP8Ng_B8lM3f45B0d",
2448
+ "originalText": "Displays response",
2449
+ "autoResize": true,
2450
+ "lineHeight": 1.25
2451
+ },
2452
+ {
2453
+ "id": "3MGuF2J5NwQCyzMW7bBY0",
2454
+ "type": "arrow",
2455
+ "x": 1171.9127836979494,
2456
+ "y": 1416.1651475694446,
2457
+ "width": 5.720658810559826,
2458
+ "height": 117.8860541449651,
2459
+ "angle": 0,
2460
+ "strokeColor": "#1e1e1e",
2461
+ "backgroundColor": "transparent",
2462
+ "fillStyle": "solid",
2463
+ "strokeWidth": 2,
2464
+ "strokeStyle": "solid",
2465
+ "roughness": 1,
2466
+ "opacity": 100,
2467
+ "groupIds": [],
2468
+ "frameId": null,
2469
+ "index": "av",
2470
+ "roundness": {
2471
+ "type": 2
2472
+ },
2473
+ "seed": 461199890,
2474
+ "version": 534,
2475
+ "versionNonce": 1856847694,
2476
+ "isDeleted": false,
2477
+ "boundElements": [],
2478
+ "updated": 1739438087356,
2479
+ "link": null,
2480
+ "locked": false,
2481
+ "points": [
2482
+ [
2483
+ 0,
2484
+ 0
2485
+ ],
2486
+ [
2487
+ -5.720658810559826,
2488
+ -117.8860541449651
2489
+ ]
2490
+ ],
2491
+ "lastCommittedPoint": null,
2492
+ "startBinding": {
2493
+ "elementId": "O-dqdUHJECPv0GcXIRmR6",
2494
+ "focus": -0.1479394222512134,
2495
+ "gap": 1.5411003960502967,
2496
+ "fixedPoint": null
2497
+ },
2498
+ "endBinding": {
2499
+ "elementId": "WsxPr8Q8Ki3MX02D1zoTP",
2500
+ "focus": -0.14206739760083398,
2501
+ "gap": 3.8441543579101562,
2502
+ "fixedPoint": null
2503
+ },
2504
+ "startArrowhead": "arrow",
2505
+ "endArrowhead": null,
2506
+ "elbowed": false
2507
+ },
2508
+ {
2509
+ "id": "xx3Qb-dEk_gwNzn15L2Js",
2510
+ "type": "arrow",
2511
+ "x": 1627.0986560652223,
2512
+ "y": 1543.6914265950522,
2513
+ "width": 10.854823739222184,
2514
+ "height": 734.6567789713541,
2515
+ "angle": 0,
2516
+ "strokeColor": "#1e1e1e",
2517
+ "backgroundColor": "transparent",
2518
+ "fillStyle": "solid",
2519
+ "strokeWidth": 2,
2520
+ "strokeStyle": "solid",
2521
+ "roughness": 1,
2522
+ "opacity": 100,
2523
+ "groupIds": [],
2524
+ "frameId": null,
2525
+ "index": "aw",
2526
+ "roundness": {
2527
+ "type": 2
2528
+ },
2529
+ "seed": 1422299666,
2530
+ "version": 441,
2531
+ "versionNonce": 1155309966,
2532
+ "isDeleted": false,
2533
+ "boundElements": [],
2534
+ "updated": 1739438051890,
2535
+ "link": null,
2536
+ "locked": false,
2537
+ "points": [
2538
+ [
2539
+ 0,
2540
+ 0
2541
+ ],
2542
+ [
2543
+ 10.854823739222184,
2544
+ -734.6567789713541
2545
+ ]
2546
+ ],
2547
+ "lastCommittedPoint": null,
2548
+ "startBinding": {
2549
+ "elementId": "NrAZkP8Ng_B8lM3f45B0d",
2550
+ "focus": -0.007112380664110637,
2551
+ "gap": 3.555694580078125,
2552
+ "fixedPoint": null
2553
+ },
2554
+ "endBinding": {
2555
+ "elementId": "K7JKG04XiRPCsQ3h4_Dax",
2556
+ "focus": -0.005877344681196516,
2557
+ "gap": 2.5109786987304688,
2558
+ "fixedPoint": null
2559
+ },
2560
+ "startArrowhead": "arrow",
2561
+ "endArrowhead": null,
2562
+ "elbowed": false
2563
+ },
2564
+ {
2565
+ "id": "FyQYDCMA748f6_svuDGi-",
2566
+ "type": "arrow",
2567
+ "x": 1612.1797493077215,
2568
+ "y": 1644.669209798177,
2569
+ "width": 264.6393435517118,
2570
+ "height": 120.25670708550342,
2571
+ "angle": 0,
2572
+ "strokeColor": "#1e1e1e",
2573
+ "backgroundColor": "transparent",
2574
+ "fillStyle": "solid",
2575
+ "strokeWidth": 2,
2576
+ "strokeStyle": "solid",
2577
+ "roughness": 1,
2578
+ "opacity": 100,
2579
+ "groupIds": [],
2580
+ "frameId": null,
2581
+ "index": "ax",
2582
+ "roundness": {
2583
+ "type": 2
2584
+ },
2585
+ "seed": 1157217170,
2586
+ "version": 181,
2587
+ "versionNonce": 741162958,
2588
+ "isDeleted": false,
2589
+ "boundElements": [],
2590
+ "updated": 1739438051890,
2591
+ "link": null,
2592
+ "locked": false,
2593
+ "points": [
2594
+ [
2595
+ 0,
2596
+ 0
2597
+ ],
2598
+ [
2599
+ -264.6393435517118,
2600
+ 120.25670708550342
2601
+ ]
2602
+ ],
2603
+ "lastCommittedPoint": null,
2604
+ "startBinding": {
2605
+ "elementId": "NrAZkP8Ng_B8lM3f45B0d",
2606
+ "focus": -0.380041570384292,
2607
+ "gap": 3.555572509765625,
2608
+ "fixedPoint": null
2609
+ },
2610
+ "endBinding": {
2611
+ "elementId": "JgxMPeI9m-WxMJBe8p2iu",
2612
+ "focus": -0.4517367543467092,
2613
+ "gap": 1.0667572021484375,
2614
+ "fixedPoint": null
2615
+ },
2616
+ "startArrowhead": null,
2617
+ "endArrowhead": "arrow",
2618
+ "elbowed": false
2619
+ },
2620
+ {
2621
+ "id": "obGZKTevXg4XAoWm_IZ9Z",
2622
+ "type": "arrow",
2623
+ "x": 1506.3704562717016,
2624
+ "y": 487.0592447916665,
2625
+ "width": 94.45550712564273,
2626
+ "height": 51.44181823730503,
2627
+ "angle": 0,
2628
+ "strokeColor": "#1e1e1e",
2629
+ "backgroundColor": "transparent",
2630
+ "fillStyle": "solid",
2631
+ "strokeWidth": 2,
2632
+ "strokeStyle": "solid",
2633
+ "roughness": 1,
2634
+ "opacity": 100,
2635
+ "groupIds": [],
2636
+ "frameId": null,
2637
+ "index": "az",
2638
+ "roundness": {
2639
+ "type": 2
2640
+ },
2641
+ "seed": 912393166,
2642
+ "version": 179,
2643
+ "versionNonce": 1990931794,
2644
+ "isDeleted": false,
2645
+ "boundElements": [],
2646
+ "updated": 1739437653572,
2647
+ "link": null,
2648
+ "locked": false,
2649
+ "points": [
2650
+ [
2651
+ 0,
2652
+ 0
2653
+ ],
2654
+ [
2655
+ -94.45550712564273,
2656
+ 51.44181823730503
2657
+ ]
2658
+ ],
2659
+ "lastCommittedPoint": null,
2660
+ "startBinding": {
2661
+ "elementId": "qWnNFvspSJfngiQK7c6tU",
2662
+ "focus": -0.32134278675123384,
2663
+ "gap": 7.726030985514171,
2664
+ "fixedPoint": null
2665
+ },
2666
+ "endBinding": {
2667
+ "elementId": "GBp2vkKDN_rJ-0THbSebW",
2668
+ "focus": -0.23111722249403238,
2669
+ "gap": 1,
2670
+ "fixedPoint": null
2671
+ },
2672
+ "startArrowhead": null,
2673
+ "endArrowhead": "arrow",
2674
+ "elbowed": false
2675
+ },
2676
+ {
2677
+ "id": "O-dqdUHJECPv0GcXIRmR6",
2678
+ "type": "rectangle",
2679
+ "x": 1047.6639404296877,
2680
+ "y": 1417.7062479654949,
2681
+ "width": 297.95556640625,
2682
+ "height": 93.86651611328125,
2683
+ "angle": 0,
2684
+ "strokeColor": "#1e1e1e",
2685
+ "backgroundColor": "transparent",
2686
+ "fillStyle": "solid",
2687
+ "strokeWidth": 2,
2688
+ "strokeStyle": "solid",
2689
+ "roughness": 1,
2690
+ "opacity": 100,
2691
+ "groupIds": [],
2692
+ "frameId": null,
2693
+ "index": "b00",
2694
+ "roundness": {
2695
+ "type": 3
2696
+ },
2697
+ "seed": 1972365070,
2698
+ "version": 547,
2699
+ "versionNonce": 1931807630,
2700
+ "isDeleted": false,
2701
+ "boundElements": [
2702
+ {
2703
+ "type": "text",
2704
+ "id": "mtCw8uOJGy6w_hTgvboMI"
2705
+ },
2706
+ {
2707
+ "id": "3MGuF2J5NwQCyzMW7bBY0",
2708
+ "type": "arrow"
2709
+ },
2710
+ {
2711
+ "id": "qnVIwuImMX7lY7cpTgiEM",
2712
+ "type": "arrow"
2713
+ }
2714
+ ],
2715
+ "updated": 1739438107331,
2716
+ "link": null,
2717
+ "locked": false
2718
+ },
2719
+ {
2720
+ "id": "mtCw8uOJGy6w_hTgvboMI",
2721
+ "type": "text",
2722
+ "x": 1090.4618301391604,
2723
+ "y": 1439.6395060221355,
2724
+ "width": 212.3597869873047,
2725
+ "height": 50,
2726
+ "angle": 0,
2727
+ "strokeColor": "#1e1e1e",
2728
+ "backgroundColor": "transparent",
2729
+ "fillStyle": "solid",
2730
+ "strokeWidth": 2,
2731
+ "strokeStyle": "solid",
2732
+ "roughness": 1,
2733
+ "opacity": 100,
2734
+ "groupIds": [],
2735
+ "frameId": null,
2736
+ "index": "b01",
2737
+ "roundness": null,
2738
+ "seed": 1096537422,
2739
+ "version": 562,
2740
+ "versionNonce": 783083406,
2741
+ "isDeleted": false,
2742
+ "boundElements": [],
2743
+ "updated": 1739438100323,
2744
+ "link": null,
2745
+ "locked": false,
2746
+ "text": "Update dictionary per\nlanguage and phrases",
2747
+ "fontSize": 20,
2748
+ "fontFamily": 5,
2749
+ "textAlign": "center",
2750
+ "verticalAlign": "middle",
2751
+ "containerId": "O-dqdUHJECPv0GcXIRmR6",
2752
+ "originalText": "Update dictionary per language and phrases",
2753
+ "autoResize": true,
2754
+ "lineHeight": 1.25
2755
+ },
2756
+ {
2757
+ "id": "qnVIwuImMX7lY7cpTgiEM",
2758
+ "type": "arrow",
2759
+ "x": 1168.1975775824656,
2760
+ "y": 1516.7876722547742,
2761
+ "width": 6.320936414930429,
2762
+ "height": 67.95064290364576,
2763
+ "angle": 0,
2764
+ "strokeColor": "#1e1e1e",
2765
+ "backgroundColor": "transparent",
2766
+ "fillStyle": "solid",
2767
+ "strokeWidth": 2,
2768
+ "strokeStyle": "solid",
2769
+ "roughness": 1,
2770
+ "opacity": 100,
2771
+ "groupIds": [],
2772
+ "frameId": null,
2773
+ "index": "b02",
2774
+ "roundness": {
2775
+ "type": 2
2776
+ },
2777
+ "seed": 256302094,
2778
+ "version": 27,
2779
+ "versionNonce": 165177806,
2780
+ "isDeleted": false,
2781
+ "boundElements": [],
2782
+ "updated": 1739438107332,
2783
+ "link": null,
2784
+ "locked": false,
2785
+ "points": [
2786
+ [
2787
+ 0,
2788
+ 0
2789
+ ],
2790
+ [
2791
+ 6.320936414930429,
2792
+ 67.95064290364576
2793
+ ]
2794
+ ],
2795
+ "lastCommittedPoint": null,
2796
+ "startBinding": {
2797
+ "elementId": "O-dqdUHJECPv0GcXIRmR6",
2798
+ "focus": 0.2171273561710918,
2799
+ "gap": 5.214908175998062,
2800
+ "fixedPoint": null
2801
+ },
2802
+ "endBinding": {
2803
+ "elementId": "cplZOVqKChIIlK1clqQyw",
2804
+ "focus": -0.0008688689602104533,
2805
+ "gap": 1,
2806
+ "fixedPoint": null
2807
+ },
2808
+ "startArrowhead": null,
2809
+ "endArrowhead": "arrow",
2810
+ "elbowed": false
2811
+ }
2812
+ ],
2813
+ "appState": {
2814
+ "gridSize": 20,
2815
+ "gridStep": 5,
2816
+ "gridModeEnabled": false,
2817
+ "viewBackgroundColor": "#fffce8"
2818
+ },
2819
+ "files": {}
2820
+ }
instructions/diagrams/AppFlow.png ADDED
instructions/diagrams/AppFlow_Simplified.excalidraw ADDED
@@ -0,0 +1,2140 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "type": "excalidraw",
3
+ "version": 2,
4
+ "source": "https://excalidraw.com",
5
+ "elements": [
6
+ {
7
+ "id": "wEufgc20D-l-mdtgWLXnT",
8
+ "type": "rectangle",
9
+ "x": 1049.5999755859375,
10
+ "y": 328.9332275390625,
11
+ "width": 226.8443603515625,
12
+ "height": 66.13334655761719,
13
+ "angle": 0,
14
+ "strokeColor": "#1e1e1e",
15
+ "backgroundColor": "transparent",
16
+ "fillStyle": "solid",
17
+ "strokeWidth": 2,
18
+ "strokeStyle": "solid",
19
+ "roughness": 1,
20
+ "opacity": 100,
21
+ "groupIds": [],
22
+ "frameId": null,
23
+ "index": "a0",
24
+ "roundness": {
25
+ "type": 3
26
+ },
27
+ "seed": 673334670,
28
+ "version": 193,
29
+ "versionNonce": 1990761870,
30
+ "isDeleted": false,
31
+ "boundElements": [
32
+ {
33
+ "type": "text",
34
+ "id": "4iRT9IIgWzQp78bB1HJtR"
35
+ },
36
+ {
37
+ "id": "DZEp77gEfCN0TqfeYrqOD",
38
+ "type": "arrow"
39
+ },
40
+ {
41
+ "id": "3X5XGRrrxXRErQWuuf1J7",
42
+ "type": "arrow"
43
+ }
44
+ ],
45
+ "updated": 1739436555417,
46
+ "link": null,
47
+ "locked": false
48
+ },
49
+ {
50
+ "id": "4iRT9IIgWzQp78bB1HJtR",
51
+ "type": "text",
52
+ "x": 1112.6022109985352,
53
+ "y": 349.4999008178711,
54
+ "width": 100.83988952636719,
55
+ "height": 25,
56
+ "angle": 0,
57
+ "strokeColor": "#1e1e1e",
58
+ "backgroundColor": "transparent",
59
+ "fillStyle": "solid",
60
+ "strokeWidth": 2,
61
+ "strokeStyle": "solid",
62
+ "roughness": 1,
63
+ "opacity": 100,
64
+ "groupIds": [],
65
+ "frameId": null,
66
+ "index": "a0V",
67
+ "roundness": null,
68
+ "seed": 1610706638,
69
+ "version": 129,
70
+ "versionNonce": 991542222,
71
+ "isDeleted": false,
72
+ "boundElements": [],
73
+ "updated": 1739436555417,
74
+ "link": null,
75
+ "locked": false,
76
+ "text": "text input",
77
+ "fontSize": 20,
78
+ "fontFamily": 5,
79
+ "textAlign": "center",
80
+ "verticalAlign": "middle",
81
+ "containerId": "wEufgc20D-l-mdtgWLXnT",
82
+ "originalText": "text input",
83
+ "autoResize": true,
84
+ "lineHeight": 1.25
85
+ },
86
+ {
87
+ "id": "N3a4gTaFwF4wJwxYBngYJ",
88
+ "type": "text",
89
+ "x": 1291.3778076171875,
90
+ "y": 109.9111328125,
91
+ "width": 79.11991882324219,
92
+ "height": 25,
93
+ "angle": 0,
94
+ "strokeColor": "#1e1e1e",
95
+ "backgroundColor": "transparent",
96
+ "fillStyle": "solid",
97
+ "strokeWidth": 2,
98
+ "strokeStyle": "solid",
99
+ "roughness": 1,
100
+ "opacity": 100,
101
+ "groupIds": [],
102
+ "frameId": null,
103
+ "index": "a2",
104
+ "roundness": null,
105
+ "seed": 1917973650,
106
+ "version": 150,
107
+ "versionNonce": 300251214,
108
+ "isDeleted": false,
109
+ "boundElements": [],
110
+ "updated": 1739435856511,
111
+ "link": null,
112
+ "locked": false,
113
+ "text": "Polyglot",
114
+ "fontSize": 20,
115
+ "fontFamily": 5,
116
+ "textAlign": "left",
117
+ "verticalAlign": "top",
118
+ "containerId": null,
119
+ "originalText": "Polyglot",
120
+ "autoResize": true,
121
+ "lineHeight": 1.25
122
+ },
123
+ {
124
+ "id": "1LwWmxwxo3oOtd8zyJsR2",
125
+ "type": "rectangle",
126
+ "x": 1409.0664672851562,
127
+ "y": 321.46659088134766,
128
+ "width": 226.8443603515625,
129
+ "height": 66.13334655761719,
130
+ "angle": 0,
131
+ "strokeColor": "#1e1e1e",
132
+ "backgroundColor": "transparent",
133
+ "fillStyle": "solid",
134
+ "strokeWidth": 2,
135
+ "strokeStyle": "solid",
136
+ "roughness": 1,
137
+ "opacity": 100,
138
+ "groupIds": [],
139
+ "frameId": null,
140
+ "index": "a3",
141
+ "roundness": {
142
+ "type": 3
143
+ },
144
+ "seed": 223842830,
145
+ "version": 242,
146
+ "versionNonce": 1639868046,
147
+ "isDeleted": false,
148
+ "boundElements": [
149
+ {
150
+ "type": "text",
151
+ "id": "UUEuTFXnWuviUmx9OMvH2"
152
+ },
153
+ {
154
+ "id": "KKYXAU7nTKYpdZPmLHxqe",
155
+ "type": "arrow"
156
+ },
157
+ {
158
+ "id": "u3Jvq2udAipXeegyZU1Ai",
159
+ "type": "arrow"
160
+ }
161
+ ],
162
+ "updated": 1739436555417,
163
+ "link": null,
164
+ "locked": false
165
+ },
166
+ {
167
+ "id": "UUEuTFXnWuviUmx9OMvH2",
168
+ "type": "text",
169
+ "x": 1468.6787033081055,
170
+ "y": 342.03326416015625,
171
+ "width": 107.61988830566406,
172
+ "height": 25,
173
+ "angle": 0,
174
+ "strokeColor": "#1e1e1e",
175
+ "backgroundColor": "transparent",
176
+ "fillStyle": "solid",
177
+ "strokeWidth": 2,
178
+ "strokeStyle": "solid",
179
+ "roughness": 1,
180
+ "opacity": 100,
181
+ "groupIds": [],
182
+ "frameId": null,
183
+ "index": "a4",
184
+ "roundness": null,
185
+ "seed": 2029396046,
186
+ "version": 183,
187
+ "versionNonce": 848192718,
188
+ "isDeleted": false,
189
+ "boundElements": [],
190
+ "updated": 1739436555417,
191
+ "link": null,
192
+ "locked": false,
193
+ "text": "audio input",
194
+ "fontSize": 20,
195
+ "fontFamily": 5,
196
+ "textAlign": "center",
197
+ "verticalAlign": "middle",
198
+ "containerId": "1LwWmxwxo3oOtd8zyJsR2",
199
+ "originalText": "audio input",
200
+ "autoResize": true,
201
+ "lineHeight": 1.25
202
+ },
203
+ {
204
+ "id": "qWnNFvspSJfngiQK7c6tU",
205
+ "type": "rectangle",
206
+ "x": 1396.2664184570312,
207
+ "y": 413.19986724853516,
208
+ "width": 226.8443603515625,
209
+ "height": 66.13334655761719,
210
+ "angle": 0,
211
+ "strokeColor": "#1e1e1e",
212
+ "backgroundColor": "transparent",
213
+ "fillStyle": "solid",
214
+ "strokeWidth": 2,
215
+ "strokeStyle": "solid",
216
+ "roughness": 1,
217
+ "opacity": 100,
218
+ "groupIds": [],
219
+ "frameId": null,
220
+ "index": "a5",
221
+ "roundness": {
222
+ "type": 3
223
+ },
224
+ "seed": 86937294,
225
+ "version": 369,
226
+ "versionNonce": 978941330,
227
+ "isDeleted": false,
228
+ "boundElements": [
229
+ {
230
+ "type": "text",
231
+ "id": "d1seOKVVllobMcoTVAF7q"
232
+ },
233
+ {
234
+ "id": "KKYXAU7nTKYpdZPmLHxqe",
235
+ "type": "arrow"
236
+ },
237
+ {
238
+ "id": "obGZKTevXg4XAoWm_IZ9Z",
239
+ "type": "arrow"
240
+ }
241
+ ],
242
+ "updated": 1739437644714,
243
+ "link": null,
244
+ "locked": false
245
+ },
246
+ {
247
+ "id": "d1seOKVVllobMcoTVAF7q",
248
+ "type": "text",
249
+ "x": 1461.2686614990234,
250
+ "y": 433.76654052734375,
251
+ "width": 96.83987426757812,
252
+ "height": 25,
253
+ "angle": 0,
254
+ "strokeColor": "#1e1e1e",
255
+ "backgroundColor": "transparent",
256
+ "fillStyle": "solid",
257
+ "strokeWidth": 2,
258
+ "strokeStyle": "solid",
259
+ "roughness": 1,
260
+ "opacity": 100,
261
+ "groupIds": [],
262
+ "frameId": null,
263
+ "index": "a6",
264
+ "roundness": null,
265
+ "seed": 2119140622,
266
+ "version": 315,
267
+ "versionNonce": 1307934030,
268
+ "isDeleted": false,
269
+ "boundElements": [],
270
+ "updated": 1739436570416,
271
+ "link": null,
272
+ "locked": false,
273
+ "text": "transcribe",
274
+ "fontSize": 20,
275
+ "fontFamily": 5,
276
+ "textAlign": "center",
277
+ "verticalAlign": "middle",
278
+ "containerId": "qWnNFvspSJfngiQK7c6tU",
279
+ "originalText": "transcribe",
280
+ "autoResize": true,
281
+ "lineHeight": 1.25
282
+ },
283
+ {
284
+ "id": "KKYXAU7nTKYpdZPmLHxqe",
285
+ "type": "arrow",
286
+ "x": 1521.066650390625,
287
+ "y": 386.5333251953125,
288
+ "width": 9.530270104567307,
289
+ "height": 24.8887939453125,
290
+ "angle": 0,
291
+ "strokeColor": "#1e1e1e",
292
+ "backgroundColor": "transparent",
293
+ "fillStyle": "solid",
294
+ "strokeWidth": 2,
295
+ "strokeStyle": "solid",
296
+ "roughness": 1,
297
+ "opacity": 100,
298
+ "groupIds": [],
299
+ "frameId": null,
300
+ "index": "a7",
301
+ "roundness": {
302
+ "type": 2
303
+ },
304
+ "seed": 1789217422,
305
+ "version": 416,
306
+ "versionNonce": 336566286,
307
+ "isDeleted": false,
308
+ "boundElements": [],
309
+ "updated": 1739436570450,
310
+ "link": null,
311
+ "locked": false,
312
+ "points": [
313
+ [
314
+ 0,
315
+ 0
316
+ ],
317
+ [
318
+ -9.530270104567307,
319
+ 24.8887939453125
320
+ ]
321
+ ],
322
+ "lastCommittedPoint": null,
323
+ "startBinding": {
324
+ "elementId": "1LwWmxwxo3oOtd8zyJsR2",
325
+ "focus": 0.020106376849068606,
326
+ "gap": 1,
327
+ "fixedPoint": null
328
+ },
329
+ "endBinding": {
330
+ "elementId": "qWnNFvspSJfngiQK7c6tU",
331
+ "focus": -0.0911666024609831,
332
+ "gap": 1.7777481079101562,
333
+ "fixedPoint": null
334
+ },
335
+ "startArrowhead": null,
336
+ "endArrowhead": "arrow",
337
+ "elbowed": false
338
+ },
339
+ {
340
+ "id": "HXIKjJvzQzR2zEsPTWBHk",
341
+ "type": "ellipse",
342
+ "x": 1284.977783203125,
343
+ "y": 175.33323669433594,
344
+ "width": 135.822265625,
345
+ "height": 85,
346
+ "angle": 0,
347
+ "strokeColor": "#1e1e1e",
348
+ "backgroundColor": "transparent",
349
+ "fillStyle": "solid",
350
+ "strokeWidth": 2,
351
+ "strokeStyle": "solid",
352
+ "roughness": 1,
353
+ "opacity": 100,
354
+ "groupIds": [],
355
+ "frameId": null,
356
+ "index": "a8",
357
+ "roundness": {
358
+ "type": 2
359
+ },
360
+ "seed": 619080910,
361
+ "version": 153,
362
+ "versionNonce": 1398945486,
363
+ "isDeleted": false,
364
+ "boundElements": [
365
+ {
366
+ "type": "text",
367
+ "id": "ddGhaBHov4FaBkfD3gxud"
368
+ },
369
+ {
370
+ "id": "u3Jvq2udAipXeegyZU1Ai",
371
+ "type": "arrow"
372
+ },
373
+ {
374
+ "id": "DZEp77gEfCN0TqfeYrqOD",
375
+ "type": "arrow"
376
+ }
377
+ ],
378
+ "updated": 1739436555417,
379
+ "link": null,
380
+ "locked": false
381
+ },
382
+ {
383
+ "id": "ddGhaBHov4FaBkfD3gxud",
384
+ "type": "text",
385
+ "x": 1314.8285307172914,
386
+ "y": 192.78119849390765,
387
+ "width": 76.07992553710938,
388
+ "height": 50,
389
+ "angle": 0,
390
+ "strokeColor": "#1e1e1e",
391
+ "backgroundColor": "transparent",
392
+ "fillStyle": "solid",
393
+ "strokeWidth": 2,
394
+ "strokeStyle": "solid",
395
+ "roughness": 1,
396
+ "opacity": 100,
397
+ "groupIds": [],
398
+ "frameId": null,
399
+ "index": "a9",
400
+ "roundness": null,
401
+ "seed": 2049036302,
402
+ "version": 125,
403
+ "versionNonce": 399387918,
404
+ "isDeleted": false,
405
+ "boundElements": [],
406
+ "updated": 1739436555417,
407
+ "link": null,
408
+ "locked": false,
409
+ "text": "User/ch\nat",
410
+ "fontSize": 20,
411
+ "fontFamily": 5,
412
+ "textAlign": "center",
413
+ "verticalAlign": "middle",
414
+ "containerId": "HXIKjJvzQzR2zEsPTWBHk",
415
+ "originalText": "User/chat",
416
+ "autoResize": true,
417
+ "lineHeight": 1.25
418
+ },
419
+ {
420
+ "id": "u3Jvq2udAipXeegyZU1Ai",
421
+ "type": "arrow",
422
+ "x": 1409.42236328125,
423
+ "y": 237.19989013671875,
424
+ "width": 95.2886962890625,
425
+ "height": 80.35556030273438,
426
+ "angle": 0,
427
+ "strokeColor": "#1e1e1e",
428
+ "backgroundColor": "transparent",
429
+ "fillStyle": "solid",
430
+ "strokeWidth": 2,
431
+ "strokeStyle": "solid",
432
+ "roughness": 1,
433
+ "opacity": 100,
434
+ "groupIds": [],
435
+ "frameId": null,
436
+ "index": "aA",
437
+ "roundness": {
438
+ "type": 2
439
+ },
440
+ "seed": 720733074,
441
+ "version": 389,
442
+ "versionNonce": 1688510034,
443
+ "isDeleted": false,
444
+ "boundElements": [],
445
+ "updated": 1739436556162,
446
+ "link": null,
447
+ "locked": false,
448
+ "points": [
449
+ [
450
+ 0,
451
+ 0
452
+ ],
453
+ [
454
+ 95.2886962890625,
455
+ 80.35556030273438
456
+ ]
457
+ ],
458
+ "lastCommittedPoint": null,
459
+ "startBinding": {
460
+ "elementId": "HXIKjJvzQzR2zEsPTWBHk",
461
+ "focus": -0.3969277448589378,
462
+ "gap": 1,
463
+ "fixedPoint": null
464
+ },
465
+ "endBinding": {
466
+ "elementId": "1LwWmxwxo3oOtd8zyJsR2",
467
+ "focus": 0.17081471868479614,
468
+ "gap": 3.9111404418945312,
469
+ "fixedPoint": null
470
+ },
471
+ "startArrowhead": null,
472
+ "endArrowhead": "arrow",
473
+ "elbowed": false
474
+ },
475
+ {
476
+ "id": "DZEp77gEfCN0TqfeYrqOD",
477
+ "type": "arrow",
478
+ "x": 1300.6221923828125,
479
+ "y": 238.62213134765625,
480
+ "width": 153.5999755859375,
481
+ "height": 91.022216796875,
482
+ "angle": 0,
483
+ "strokeColor": "#1e1e1e",
484
+ "backgroundColor": "transparent",
485
+ "fillStyle": "solid",
486
+ "strokeWidth": 2,
487
+ "strokeStyle": "solid",
488
+ "roughness": 1,
489
+ "opacity": 100,
490
+ "groupIds": [],
491
+ "frameId": null,
492
+ "index": "aB",
493
+ "roundness": {
494
+ "type": 2
495
+ },
496
+ "seed": 831034514,
497
+ "version": 393,
498
+ "versionNonce": 671789522,
499
+ "isDeleted": false,
500
+ "boundElements": [],
501
+ "updated": 1739436556162,
502
+ "link": null,
503
+ "locked": false,
504
+ "points": [
505
+ [
506
+ 0,
507
+ 0
508
+ ],
509
+ [
510
+ -153.5999755859375,
511
+ 91.022216796875
512
+ ]
513
+ ],
514
+ "lastCommittedPoint": null,
515
+ "startBinding": {
516
+ "elementId": "HXIKjJvzQzR2zEsPTWBHk",
517
+ "focus": 0.17399492475432984,
518
+ "gap": 1,
519
+ "fixedPoint": null
520
+ },
521
+ "endBinding": {
522
+ "elementId": "wEufgc20D-l-mdtgWLXnT",
523
+ "focus": -0.41720255737903406,
524
+ "gap": 1,
525
+ "fixedPoint": null
526
+ },
527
+ "startArrowhead": null,
528
+ "endArrowhead": "arrow",
529
+ "elbowed": false
530
+ },
531
+ {
532
+ "id": "GBp2vkKDN_rJ-0THbSebW",
533
+ "type": "rectangle",
534
+ "x": 1293.1953667534722,
535
+ "y": 539.5010630289715,
536
+ "width": 204.800048828125,
537
+ "height": 54.044464111328125,
538
+ "angle": 0,
539
+ "strokeColor": "#1e1e1e",
540
+ "backgroundColor": "transparent",
541
+ "fillStyle": "solid",
542
+ "strokeWidth": 2,
543
+ "strokeStyle": "solid",
544
+ "roughness": 1,
545
+ "opacity": 100,
546
+ "groupIds": [],
547
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
548
+ "index": "aC",
549
+ "roundness": {
550
+ "type": 3
551
+ },
552
+ "seed": 1307090450,
553
+ "version": 908,
554
+ "versionNonce": 2119229454,
555
+ "isDeleted": false,
556
+ "boundElements": [
557
+ {
558
+ "type": "text",
559
+ "id": "1JLqUklMHKwR58YKcxPg5"
560
+ },
561
+ {
562
+ "id": "3X5XGRrrxXRErQWuuf1J7",
563
+ "type": "arrow"
564
+ },
565
+ {
566
+ "id": "CX9int0DOUrljdTbAdw0y",
567
+ "type": "arrow"
568
+ },
569
+ {
570
+ "id": "obGZKTevXg4XAoWm_IZ9Z",
571
+ "type": "arrow"
572
+ }
573
+ ],
574
+ "updated": 1739443216784,
575
+ "link": null,
576
+ "locked": false
577
+ },
578
+ {
579
+ "id": "1JLqUklMHKwR58YKcxPg5",
580
+ "type": "text",
581
+ "x": 1329.315468682183,
582
+ "y": 554.0232950846356,
583
+ "width": 132.55984497070312,
584
+ "height": 25,
585
+ "angle": 0,
586
+ "strokeColor": "#1e1e1e",
587
+ "backgroundColor": "transparent",
588
+ "fillStyle": "solid",
589
+ "strokeWidth": 2,
590
+ "strokeStyle": "solid",
591
+ "roughness": 1,
592
+ "opacity": 100,
593
+ "groupIds": [],
594
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
595
+ "index": "aCV",
596
+ "roundness": null,
597
+ "seed": 1615368402,
598
+ "version": 839,
599
+ "versionNonce": 1941401554,
600
+ "isDeleted": false,
601
+ "boundElements": [],
602
+ "updated": 1739443216784,
603
+ "link": null,
604
+ "locked": false,
605
+ "text": "detect intent",
606
+ "fontSize": 20,
607
+ "fontFamily": 5,
608
+ "textAlign": "center",
609
+ "verticalAlign": "middle",
610
+ "containerId": "GBp2vkKDN_rJ-0THbSebW",
611
+ "originalText": "detect intent",
612
+ "autoResize": true,
613
+ "lineHeight": 1.25
614
+ },
615
+ {
616
+ "id": "3X5XGRrrxXRErQWuuf1J7",
617
+ "type": "arrow",
618
+ "x": 1150.5777587890625,
619
+ "y": 396.4888000488281,
620
+ "width": 228.60844359074213,
621
+ "height": 142.01226298014342,
622
+ "angle": 0,
623
+ "strokeColor": "#1e1e1e",
624
+ "backgroundColor": "transparent",
625
+ "fillStyle": "solid",
626
+ "strokeWidth": 2,
627
+ "strokeStyle": "solid",
628
+ "roughness": 1,
629
+ "opacity": 100,
630
+ "groupIds": [],
631
+ "frameId": null,
632
+ "index": "aE",
633
+ "roundness": {
634
+ "type": 2
635
+ },
636
+ "seed": 2079968658,
637
+ "version": 1218,
638
+ "versionNonce": 824705490,
639
+ "isDeleted": false,
640
+ "boundElements": [],
641
+ "updated": 1739437653572,
642
+ "link": null,
643
+ "locked": false,
644
+ "points": [
645
+ [
646
+ 0,
647
+ 0
648
+ ],
649
+ [
650
+ 228.60844359074213,
651
+ 142.01226298014342
652
+ ]
653
+ ],
654
+ "lastCommittedPoint": null,
655
+ "startBinding": {
656
+ "elementId": "wEufgc20D-l-mdtgWLXnT",
657
+ "focus": 0.34251598117639953,
658
+ "gap": 1.4222259521484375,
659
+ "fixedPoint": null
660
+ },
661
+ "endBinding": {
662
+ "elementId": "GBp2vkKDN_rJ-0THbSebW",
663
+ "focus": 0.19671319915003915,
664
+ "gap": 1,
665
+ "fixedPoint": null
666
+ },
667
+ "startArrowhead": null,
668
+ "endArrowhead": "arrow",
669
+ "elbowed": false
670
+ },
671
+ {
672
+ "id": "eWx-OAj8tmJ7UJucCFqT0",
673
+ "type": "diamond",
674
+ "x": 1291.7728814019097,
675
+ "y": 608.4788462320965,
676
+ "width": 155.02221679687491,
677
+ "height": 170,
678
+ "angle": 0,
679
+ "strokeColor": "#1e1e1e",
680
+ "backgroundColor": "transparent",
681
+ "fillStyle": "solid",
682
+ "strokeWidth": 2,
683
+ "strokeStyle": "solid",
684
+ "roughness": 1,
685
+ "opacity": 100,
686
+ "groupIds": [],
687
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
688
+ "index": "aG",
689
+ "roundness": {
690
+ "type": 2
691
+ },
692
+ "seed": 572105550,
693
+ "version": 1015,
694
+ "versionNonce": 1502981710,
695
+ "isDeleted": false,
696
+ "boundElements": [
697
+ {
698
+ "id": "CX9int0DOUrljdTbAdw0y",
699
+ "type": "arrow"
700
+ },
701
+ {
702
+ "id": "C0aHbsHvOP5sqfizC2uBO",
703
+ "type": "arrow"
704
+ },
705
+ {
706
+ "id": "k7_aznX7yugCPo8_9_dDT",
707
+ "type": "arrow"
708
+ },
709
+ {
710
+ "type": "text",
711
+ "id": "SWuSEEV_yRxsN1pYh-zOB"
712
+ }
713
+ ],
714
+ "updated": 1739443216784,
715
+ "link": null,
716
+ "locked": false
717
+ },
718
+ {
719
+ "id": "SWuSEEV_yRxsN1pYh-zOB",
720
+ "type": "text",
721
+ "x": 1339.3384713066948,
722
+ "y": 655.9788462320965,
723
+ "width": 60.37992858886719,
724
+ "height": 75,
725
+ "angle": 0,
726
+ "strokeColor": "#1e1e1e",
727
+ "backgroundColor": "transparent",
728
+ "fillStyle": "solid",
729
+ "strokeWidth": 2,
730
+ "strokeStyle": "solid",
731
+ "roughness": 1,
732
+ "opacity": 100,
733
+ "groupIds": [],
734
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
735
+ "index": "aGV",
736
+ "roundness": null,
737
+ "seed": 937179666,
738
+ "version": 552,
739
+ "versionNonce": 1990043026,
740
+ "isDeleted": false,
741
+ "boundElements": [],
742
+ "updated": 1739443216784,
743
+ "link": null,
744
+ "locked": false,
745
+ "text": "Transl\nate/C\nhat",
746
+ "fontSize": 20,
747
+ "fontFamily": 5,
748
+ "textAlign": "center",
749
+ "verticalAlign": "middle",
750
+ "containerId": "eWx-OAj8tmJ7UJucCFqT0",
751
+ "originalText": "Translate/Chat",
752
+ "autoResize": true,
753
+ "lineHeight": 1.25
754
+ },
755
+ {
756
+ "id": "CX9int0DOUrljdTbAdw0y",
757
+ "type": "arrow",
758
+ "x": 1385.3055152999598,
759
+ "y": 598.9742559507864,
760
+ "width": 1.7001984432224617,
761
+ "height": 22.418549735869078,
762
+ "angle": 0,
763
+ "strokeColor": "#1e1e1e",
764
+ "backgroundColor": "transparent",
765
+ "fillStyle": "solid",
766
+ "strokeWidth": 2,
767
+ "strokeStyle": "solid",
768
+ "roughness": 1,
769
+ "opacity": 100,
770
+ "groupIds": [],
771
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
772
+ "index": "aI",
773
+ "roundness": {
774
+ "type": 2
775
+ },
776
+ "seed": 842515470,
777
+ "version": 2741,
778
+ "versionNonce": 128365710,
779
+ "isDeleted": false,
780
+ "boundElements": [],
781
+ "updated": 1739443216784,
782
+ "link": null,
783
+ "locked": false,
784
+ "points": [
785
+ [
786
+ 0,
787
+ 0
788
+ ],
789
+ [
790
+ -1.7001984432224617,
791
+ 22.418549735869078
792
+ ]
793
+ ],
794
+ "lastCommittedPoint": null,
795
+ "startBinding": {
796
+ "elementId": "GBp2vkKDN_rJ-0THbSebW",
797
+ "focus": 0.07495335716176672,
798
+ "gap": 5.428728810486746,
799
+ "fixedPoint": null
800
+ },
801
+ "endBinding": {
802
+ "elementId": "eWx-OAj8tmJ7UJucCFqT0",
803
+ "focus": 0.33837106049009497,
804
+ "gap": 1.88062882486512,
805
+ "fixedPoint": null
806
+ },
807
+ "startArrowhead": null,
808
+ "endArrowhead": "arrow",
809
+ "elbowed": false
810
+ },
811
+ {
812
+ "id": "K7JKG04XiRPCsQ3h4_Dax",
813
+ "type": "rectangle",
814
+ "x": 1526.0840996636284,
815
+ "y": 740.3903223673504,
816
+ "width": 226.8443603515625,
817
+ "height": 66.13334655761719,
818
+ "angle": 0,
819
+ "strokeColor": "#1e1e1e",
820
+ "backgroundColor": "transparent",
821
+ "fillStyle": "solid",
822
+ "strokeWidth": 2,
823
+ "strokeStyle": "solid",
824
+ "roughness": 1,
825
+ "opacity": 100,
826
+ "groupIds": [],
827
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
828
+ "index": "aL",
829
+ "roundness": {
830
+ "type": 3
831
+ },
832
+ "seed": 1288555726,
833
+ "version": 901,
834
+ "versionNonce": 844818706,
835
+ "isDeleted": false,
836
+ "boundElements": [
837
+ {
838
+ "type": "text",
839
+ "id": "byE6AHVYQ1PeMM3oRZ3OS"
840
+ },
841
+ {
842
+ "id": "k7_aznX7yugCPo8_9_dDT",
843
+ "type": "arrow"
844
+ },
845
+ {
846
+ "id": "xx3Qb-dEk_gwNzn15L2Js",
847
+ "type": "arrow"
848
+ }
849
+ ],
850
+ "updated": 1739443216784,
851
+ "link": null,
852
+ "locked": false
853
+ },
854
+ {
855
+ "id": "byE6AHVYQ1PeMM3oRZ3OS",
856
+ "type": "text",
857
+ "x": 1617.5063027275933,
858
+ "y": 760.956995646159,
859
+ "width": 43.99995422363281,
860
+ "height": 25,
861
+ "angle": 0,
862
+ "strokeColor": "#1e1e1e",
863
+ "backgroundColor": "transparent",
864
+ "fillStyle": "solid",
865
+ "strokeWidth": 2,
866
+ "strokeStyle": "solid",
867
+ "roughness": 1,
868
+ "opacity": 100,
869
+ "groupIds": [],
870
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
871
+ "index": "aM",
872
+ "roundness": null,
873
+ "seed": 1263993614,
874
+ "version": 835,
875
+ "versionNonce": 1676765454,
876
+ "isDeleted": false,
877
+ "boundElements": [],
878
+ "updated": 1739443216784,
879
+ "link": null,
880
+ "locked": false,
881
+ "text": "chat",
882
+ "fontSize": 20,
883
+ "fontFamily": 5,
884
+ "textAlign": "center",
885
+ "verticalAlign": "middle",
886
+ "containerId": "K7JKG04XiRPCsQ3h4_Dax",
887
+ "originalText": "chat",
888
+ "autoResize": true,
889
+ "lineHeight": 1.25
890
+ },
891
+ {
892
+ "id": "C0aHbsHvOP5sqfizC2uBO",
893
+ "type": "arrow",
894
+ "x": 1295.9995378240656,
895
+ "y": 684.9493632675895,
896
+ "width": 129.1846373604535,
897
+ "height": 88.25984029893266,
898
+ "angle": 0,
899
+ "strokeColor": "#1e1e1e",
900
+ "backgroundColor": "transparent",
901
+ "fillStyle": "solid",
902
+ "strokeWidth": 2,
903
+ "strokeStyle": "solid",
904
+ "roughness": 1,
905
+ "opacity": 100,
906
+ "groupIds": [],
907
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
908
+ "index": "aN",
909
+ "roundness": {
910
+ "type": 2
911
+ },
912
+ "seed": 960346898,
913
+ "version": 2796,
914
+ "versionNonce": 486536914,
915
+ "isDeleted": false,
916
+ "boundElements": [
917
+ {
918
+ "type": "text",
919
+ "id": "WEyrlpHlup6Ivp43FxuGR"
920
+ }
921
+ ],
922
+ "updated": 1739443216784,
923
+ "link": null,
924
+ "locked": false,
925
+ "points": [
926
+ [
927
+ 0,
928
+ 0
929
+ ],
930
+ [
931
+ -112.31540153934338,
932
+ -22.425961371430503
933
+ ],
934
+ [
935
+ -129.1846373604535,
936
+ 65.83387892750216
937
+ ]
938
+ ],
939
+ "lastCommittedPoint": null,
940
+ "startBinding": {
941
+ "elementId": "eWx-OAj8tmJ7UJucCFqT0",
942
+ "focus": -0.07180220905959793,
943
+ "gap": 2.6241125503887375,
944
+ "fixedPoint": null
945
+ },
946
+ "endBinding": {
947
+ "elementId": "gBtT2H2gfCOioSXaQjgn3",
948
+ "focus": -0.07669935409861259,
949
+ "gap": 2.1861172996451614,
950
+ "fixedPoint": null
951
+ },
952
+ "startArrowhead": null,
953
+ "endArrowhead": "arrow",
954
+ "elbowed": false
955
+ },
956
+ {
957
+ "id": "WEyrlpHlup6Ivp43FxuGR",
958
+ "type": "text",
959
+ "x": 1202.9674919976128,
960
+ "y": 778.7347056070965,
961
+ "width": 93.69989013671875,
962
+ "height": 25,
963
+ "angle": 0,
964
+ "strokeColor": "#1e1e1e",
965
+ "backgroundColor": "transparent",
966
+ "fillStyle": "solid",
967
+ "strokeWidth": 2,
968
+ "strokeStyle": "solid",
969
+ "roughness": 1,
970
+ "opacity": 100,
971
+ "groupIds": [],
972
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
973
+ "index": "aNV",
974
+ "roundness": null,
975
+ "seed": 1828813522,
976
+ "version": 460,
977
+ "versionNonce": 742201166,
978
+ "isDeleted": false,
979
+ "boundElements": [],
980
+ "updated": 1739443216784,
981
+ "link": null,
982
+ "locked": false,
983
+ "text": "Translate",
984
+ "fontSize": 20,
985
+ "fontFamily": 5,
986
+ "textAlign": "center",
987
+ "verticalAlign": "middle",
988
+ "containerId": "C0aHbsHvOP5sqfizC2uBO",
989
+ "originalText": "Translate",
990
+ "autoResize": true,
991
+ "lineHeight": 1.25
992
+ },
993
+ {
994
+ "id": "k7_aznX7yugCPo8_9_dDT",
995
+ "type": "arrow",
996
+ "x": 1438.6781327565973,
997
+ "y": 681.9720610503717,
998
+ "width": 209.69976955783181,
999
+ "height": 77.51116943359375,
1000
+ "angle": 0,
1001
+ "strokeColor": "#1e1e1e",
1002
+ "backgroundColor": "transparent",
1003
+ "fillStyle": "solid",
1004
+ "strokeWidth": 2,
1005
+ "strokeStyle": "solid",
1006
+ "roughness": 1,
1007
+ "opacity": 100,
1008
+ "groupIds": [],
1009
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
1010
+ "index": "aO",
1011
+ "roundness": {
1012
+ "type": 2
1013
+ },
1014
+ "seed": 1186407950,
1015
+ "version": 2845,
1016
+ "versionNonce": 322784402,
1017
+ "isDeleted": false,
1018
+ "boundElements": [
1019
+ {
1020
+ "type": "text",
1021
+ "id": "mBuVXhrQjpx3Rew6QXVpk"
1022
+ }
1023
+ ],
1024
+ "updated": 1739443216784,
1025
+ "link": null,
1026
+ "locked": false,
1027
+ "points": [
1028
+ [
1029
+ 0,
1030
+ 0
1031
+ ],
1032
+ [
1033
+ 178.38513213450074,
1034
+ -27.237677130466977
1035
+ ],
1036
+ [
1037
+ 209.69976955783181,
1038
+ 50.27349230312677
1039
+ ]
1040
+ ],
1041
+ "lastCommittedPoint": null,
1042
+ "startBinding": {
1043
+ "elementId": "eWx-OAj8tmJ7UJucCFqT0",
1044
+ "focus": -0.010717335711518705,
1045
+ "gap": 1.7556588524229966,
1046
+ "fixedPoint": null
1047
+ },
1048
+ "endBinding": {
1049
+ "elementId": "K7JKG04XiRPCsQ3h4_Dax",
1050
+ "focus": 0.2013004905125822,
1051
+ "gap": 8.144769013851942,
1052
+ "fixedPoint": null
1053
+ },
1054
+ "startArrowhead": null,
1055
+ "endArrowhead": "arrow",
1056
+ "elbowed": false
1057
+ },
1058
+ {
1059
+ "id": "mBuVXhrQjpx3Rew6QXVpk",
1060
+ "type": "text",
1061
+ "x": 1659.9465885605316,
1062
+ "y": 770.9456876308421,
1063
+ "width": 46.49995422363281,
1064
+ "height": 25,
1065
+ "angle": 0,
1066
+ "strokeColor": "#1e1e1e",
1067
+ "backgroundColor": "transparent",
1068
+ "fillStyle": "solid",
1069
+ "strokeWidth": 2,
1070
+ "strokeStyle": "solid",
1071
+ "roughness": 1,
1072
+ "opacity": 100,
1073
+ "groupIds": [],
1074
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
1075
+ "index": "aP",
1076
+ "roundness": null,
1077
+ "seed": 943163666,
1078
+ "version": 457,
1079
+ "versionNonce": 1132002702,
1080
+ "isDeleted": false,
1081
+ "boundElements": [],
1082
+ "updated": 1739443216784,
1083
+ "link": null,
1084
+ "locked": false,
1085
+ "text": "Chat",
1086
+ "fontSize": 20,
1087
+ "fontFamily": 5,
1088
+ "textAlign": "center",
1089
+ "verticalAlign": "middle",
1090
+ "containerId": "k7_aznX7yugCPo8_9_dDT",
1091
+ "originalText": "Chat",
1092
+ "autoResize": true,
1093
+ "lineHeight": 1.25
1094
+ },
1095
+ {
1096
+ "id": "gBtT2H2gfCOioSXaQjgn3",
1097
+ "type": "rectangle",
1098
+ "x": 1054.1742392067642,
1099
+ "y": 752.9693594947369,
1100
+ "width": 226.8443603515625,
1101
+ "height": 85,
1102
+ "angle": 0,
1103
+ "strokeColor": "#1e1e1e",
1104
+ "backgroundColor": "transparent",
1105
+ "fillStyle": "solid",
1106
+ "strokeWidth": 2,
1107
+ "strokeStyle": "solid",
1108
+ "roughness": 1,
1109
+ "opacity": 100,
1110
+ "groupIds": [],
1111
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
1112
+ "index": "aQ",
1113
+ "roundness": {
1114
+ "type": 3
1115
+ },
1116
+ "seed": 1193112334,
1117
+ "version": 1034,
1118
+ "versionNonce": 181004882,
1119
+ "isDeleted": false,
1120
+ "boundElements": [
1121
+ {
1122
+ "type": "text",
1123
+ "id": "J4USxhJBuFgd1ddkcz7YR"
1124
+ },
1125
+ {
1126
+ "id": "dRuRJC031Lx5Irftqyzvc",
1127
+ "type": "arrow"
1128
+ },
1129
+ {
1130
+ "id": "Y2ub__u8TgOIwogbcOSyJ",
1131
+ "type": "arrow"
1132
+ },
1133
+ {
1134
+ "id": "C0aHbsHvOP5sqfizC2uBO",
1135
+ "type": "arrow"
1136
+ }
1137
+ ],
1138
+ "updated": 1739443216784,
1139
+ "link": null,
1140
+ "locked": false
1141
+ },
1142
+ {
1143
+ "id": "J4USxhJBuFgd1ddkcz7YR",
1144
+ "type": "text",
1145
+ "x": 1070.7065115456314,
1146
+ "y": 757.9693594947369,
1147
+ "width": 193.77981567382812,
1148
+ "height": 75,
1149
+ "angle": 0,
1150
+ "strokeColor": "#1e1e1e",
1151
+ "backgroundColor": "transparent",
1152
+ "fillStyle": "solid",
1153
+ "strokeWidth": 2,
1154
+ "strokeStyle": "solid",
1155
+ "roughness": 1,
1156
+ "opacity": 100,
1157
+ "groupIds": [],
1158
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
1159
+ "index": "aR",
1160
+ "roundness": null,
1161
+ "seed": 559407438,
1162
+ "version": 1040,
1163
+ "versionNonce": 1323178958,
1164
+ "isDeleted": false,
1165
+ "boundElements": [],
1166
+ "updated": 1739443216784,
1167
+ "link": null,
1168
+ "locked": false,
1169
+ "text": "Translate\ncan result in several\noptions",
1170
+ "fontSize": 20,
1171
+ "fontFamily": 5,
1172
+ "textAlign": "center",
1173
+ "verticalAlign": "middle",
1174
+ "containerId": "gBtT2H2gfCOioSXaQjgn3",
1175
+ "originalText": "Translate\ncan result in several options",
1176
+ "autoResize": true,
1177
+ "lineHeight": 1.25
1178
+ },
1179
+ {
1180
+ "id": "WsxPr8Q8Ki3MX02D1zoTP",
1181
+ "type": "rectangle",
1182
+ "x": 1038.1419004988272,
1183
+ "y": 908.0249972601982,
1184
+ "width": 226.8443603515625,
1185
+ "height": 135,
1186
+ "angle": 0,
1187
+ "strokeColor": "#1e1e1e",
1188
+ "backgroundColor": "transparent",
1189
+ "fillStyle": "solid",
1190
+ "strokeWidth": 2,
1191
+ "strokeStyle": "solid",
1192
+ "roughness": 1,
1193
+ "opacity": 100,
1194
+ "groupIds": [],
1195
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
1196
+ "index": "aT",
1197
+ "roundness": {
1198
+ "type": 3
1199
+ },
1200
+ "seed": 537673166,
1201
+ "version": 958,
1202
+ "versionNonce": 789765906,
1203
+ "isDeleted": false,
1204
+ "boundElements": [
1205
+ {
1206
+ "type": "text",
1207
+ "id": "f2o9j0XWQqkXo9FMAv5BZ"
1208
+ },
1209
+ {
1210
+ "id": "yNsW2h8Pss9Gb_S8sI9g1",
1211
+ "type": "arrow"
1212
+ },
1213
+ {
1214
+ "id": "dRuRJC031Lx5Irftqyzvc",
1215
+ "type": "arrow"
1216
+ },
1217
+ {
1218
+ "id": "qnVIwuImMX7lY7cpTgiEM",
1219
+ "type": "arrow"
1220
+ }
1221
+ ],
1222
+ "updated": 1739443231002,
1223
+ "link": null,
1224
+ "locked": false
1225
+ },
1226
+ {
1227
+ "id": "f2o9j0XWQqkXo9FMAv5BZ",
1228
+ "type": "text",
1229
+ "x": 1056.1141752791007,
1230
+ "y": 913.0249972601982,
1231
+ "width": 190.89981079101562,
1232
+ "height": 125,
1233
+ "angle": 0,
1234
+ "strokeColor": "#1e1e1e",
1235
+ "backgroundColor": "transparent",
1236
+ "fillStyle": "solid",
1237
+ "strokeWidth": 2,
1238
+ "strokeStyle": "solid",
1239
+ "roughness": 1,
1240
+ "opacity": 100,
1241
+ "groupIds": [],
1242
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
1243
+ "index": "aU",
1244
+ "roundness": null,
1245
+ "seed": 1872712718,
1246
+ "version": 1044,
1247
+ "versionNonce": 642579922,
1248
+ "isDeleted": false,
1249
+ "boundElements": [],
1250
+ "updated": 1739443216784,
1251
+ "link": null,
1252
+ "locked": false,
1253
+ "text": "Text to speech for\nall translations:\nCreates temporary\nfiles and stores in\ngraph's state",
1254
+ "fontSize": 20,
1255
+ "fontFamily": 5,
1256
+ "textAlign": "center",
1257
+ "verticalAlign": "middle",
1258
+ "containerId": "WsxPr8Q8Ki3MX02D1zoTP",
1259
+ "originalText": "Text to speech for all translations:\nCreates temporary files and stores in graph's state",
1260
+ "autoResize": true,
1261
+ "lineHeight": 1.25
1262
+ },
1263
+ {
1264
+ "id": "cplZOVqKChIIlK1clqQyw",
1265
+ "type": "rectangle",
1266
+ "x": 1017.8200048475978,
1267
+ "y": 1169.0067328370485,
1268
+ "width": 297.95556640625,
1269
+ "height": 93.86651611328125,
1270
+ "angle": 0,
1271
+ "strokeColor": "#1e1e1e",
1272
+ "backgroundColor": "transparent",
1273
+ "fillStyle": "solid",
1274
+ "strokeWidth": 2,
1275
+ "strokeStyle": "solid",
1276
+ "roughness": 1,
1277
+ "opacity": 100,
1278
+ "groupIds": [],
1279
+ "frameId": null,
1280
+ "index": "aW",
1281
+ "roundness": {
1282
+ "type": 3
1283
+ },
1284
+ "seed": 1093859470,
1285
+ "version": 598,
1286
+ "versionNonce": 855286610,
1287
+ "isDeleted": false,
1288
+ "boundElements": [
1289
+ {
1290
+ "type": "text",
1291
+ "id": "mPg0xKp-HoFN8npOB1WPG"
1292
+ },
1293
+ {
1294
+ "id": "TTwCIuNoNqJyJMCv6W3aQ",
1295
+ "type": "arrow"
1296
+ },
1297
+ {
1298
+ "id": "qnVIwuImMX7lY7cpTgiEM",
1299
+ "type": "arrow"
1300
+ }
1301
+ ],
1302
+ "updated": 1739443240075,
1303
+ "link": null,
1304
+ "locked": false
1305
+ },
1306
+ {
1307
+ "id": "mPg0xKp-HoFN8npOB1WPG",
1308
+ "type": "text",
1309
+ "x": 1028.8479131727931,
1310
+ "y": 1190.9399908936891,
1311
+ "width": 275.8997497558594,
1312
+ "height": 50,
1313
+ "angle": 0,
1314
+ "strokeColor": "#1e1e1e",
1315
+ "backgroundColor": "transparent",
1316
+ "fillStyle": "solid",
1317
+ "strokeWidth": 2,
1318
+ "strokeStyle": "solid",
1319
+ "roughness": 1,
1320
+ "opacity": 100,
1321
+ "groupIds": [],
1322
+ "frameId": null,
1323
+ "index": "aWV",
1324
+ "roundness": null,
1325
+ "seed": 2044616974,
1326
+ "version": 560,
1327
+ "versionNonce": 1580099858,
1328
+ "isDeleted": false,
1329
+ "boundElements": [],
1330
+ "updated": 1739443240075,
1331
+ "link": null,
1332
+ "locked": false,
1333
+ "text": "Displays translations and\nloads audio files in the chat",
1334
+ "fontSize": 20,
1335
+ "fontFamily": 5,
1336
+ "textAlign": "center",
1337
+ "verticalAlign": "middle",
1338
+ "containerId": "cplZOVqKChIIlK1clqQyw",
1339
+ "originalText": "Displays translations and loads audio files in the chat",
1340
+ "autoResize": true,
1341
+ "lineHeight": 1.25
1342
+ },
1343
+ {
1344
+ "id": "JgxMPeI9m-WxMJBe8p2iu",
1345
+ "type": "rectangle",
1346
+ "x": 1273.1765544842583,
1347
+ "y": 1433.334474047106,
1348
+ "width": 283.0220947265625,
1349
+ "height": 96.7110595703125,
1350
+ "angle": 0,
1351
+ "strokeColor": "#1e1e1e",
1352
+ "backgroundColor": "transparent",
1353
+ "fillStyle": "solid",
1354
+ "strokeWidth": 2,
1355
+ "strokeStyle": "solid",
1356
+ "roughness": 1,
1357
+ "opacity": 100,
1358
+ "groupIds": [],
1359
+ "frameId": null,
1360
+ "index": "aZ",
1361
+ "roundness": {
1362
+ "type": 3
1363
+ },
1364
+ "seed": 383392782,
1365
+ "version": 308,
1366
+ "versionNonce": 663471310,
1367
+ "isDeleted": false,
1368
+ "boundElements": [
1369
+ {
1370
+ "id": "TTwCIuNoNqJyJMCv6W3aQ",
1371
+ "type": "arrow"
1372
+ },
1373
+ {
1374
+ "type": "text",
1375
+ "id": "mpuGc6AQTGvoxqfktEp3b"
1376
+ },
1377
+ {
1378
+ "id": "FyQYDCMA748f6_svuDGi-",
1379
+ "type": "arrow"
1380
+ }
1381
+ ],
1382
+ "updated": 1739443245082,
1383
+ "link": null,
1384
+ "locked": false
1385
+ },
1386
+ {
1387
+ "id": "mpuGc6AQTGvoxqfktEp3b",
1388
+ "type": "text",
1389
+ "x": 1396.3076198529106,
1390
+ "y": 1469.1900038322622,
1391
+ "width": 36.75996398925781,
1392
+ "height": 25,
1393
+ "angle": 0,
1394
+ "strokeColor": "#1e1e1e",
1395
+ "backgroundColor": "transparent",
1396
+ "fillStyle": "solid",
1397
+ "strokeWidth": 2,
1398
+ "strokeStyle": "solid",
1399
+ "roughness": 1,
1400
+ "opacity": 100,
1401
+ "groupIds": [],
1402
+ "frameId": null,
1403
+ "index": "aZV",
1404
+ "roundness": null,
1405
+ "seed": 1699299790,
1406
+ "version": 209,
1407
+ "versionNonce": 194378510,
1408
+ "isDeleted": false,
1409
+ "boundElements": [],
1410
+ "updated": 1739443245082,
1411
+ "link": null,
1412
+ "locked": false,
1413
+ "text": "End",
1414
+ "fontSize": 20,
1415
+ "fontFamily": 5,
1416
+ "textAlign": "center",
1417
+ "verticalAlign": "middle",
1418
+ "containerId": "JgxMPeI9m-WxMJBe8p2iu",
1419
+ "originalText": "End",
1420
+ "autoResize": true,
1421
+ "lineHeight": 1.25
1422
+ },
1423
+ {
1424
+ "id": "TTwCIuNoNqJyJMCv6W3aQ",
1425
+ "type": "arrow",
1426
+ "x": 1078.40123397884,
1427
+ "y": 1267.1400946534548,
1428
+ "width": 372.1819840042483,
1429
+ "height": 165.19437939365116,
1430
+ "angle": 0,
1431
+ "strokeColor": "#1e1e1e",
1432
+ "backgroundColor": "transparent",
1433
+ "fillStyle": "solid",
1434
+ "strokeWidth": 2,
1435
+ "strokeStyle": "solid",
1436
+ "roughness": 1,
1437
+ "opacity": 100,
1438
+ "groupIds": [],
1439
+ "frameId": null,
1440
+ "index": "ab",
1441
+ "roundness": {
1442
+ "type": 2
1443
+ },
1444
+ "seed": 1340985870,
1445
+ "version": 984,
1446
+ "versionNonce": 1434413390,
1447
+ "isDeleted": false,
1448
+ "boundElements": [],
1449
+ "updated": 1739443245082,
1450
+ "link": null,
1451
+ "locked": false,
1452
+ "points": [
1453
+ [
1454
+ 0,
1455
+ 0
1456
+ ],
1457
+ [
1458
+ 372.1819840042483,
1459
+ 165.19437939365116
1460
+ ]
1461
+ ],
1462
+ "lastCommittedPoint": null,
1463
+ "startBinding": {
1464
+ "elementId": "cplZOVqKChIIlK1clqQyw",
1465
+ "focus": 0.6864140851390049,
1466
+ "gap": 4.266845703125,
1467
+ "fixedPoint": null
1468
+ },
1469
+ "endBinding": {
1470
+ "elementId": "JgxMPeI9m-WxMJBe8p2iu",
1471
+ "focus": 0.5873026439947175,
1472
+ "gap": 1,
1473
+ "fixedPoint": null
1474
+ },
1475
+ "startArrowhead": null,
1476
+ "endArrowhead": "arrow",
1477
+ "elbowed": false
1478
+ },
1479
+ {
1480
+ "id": "dRuRJC031Lx5Irftqyzvc",
1481
+ "type": "arrow",
1482
+ "x": 1161.2985005148364,
1483
+ "y": 845.7023688020306,
1484
+ "width": 2.3760668060756416,
1485
+ "height": 56.926923427661904,
1486
+ "angle": 0,
1487
+ "strokeColor": "#1e1e1e",
1488
+ "backgroundColor": "transparent",
1489
+ "fillStyle": "solid",
1490
+ "strokeWidth": 2,
1491
+ "strokeStyle": "solid",
1492
+ "roughness": 1,
1493
+ "opacity": 100,
1494
+ "groupIds": [],
1495
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
1496
+ "index": "ag",
1497
+ "roundness": {
1498
+ "type": 2
1499
+ },
1500
+ "seed": 1760723790,
1501
+ "version": 1751,
1502
+ "versionNonce": 1807823186,
1503
+ "isDeleted": false,
1504
+ "boundElements": [],
1505
+ "updated": 1739443216784,
1506
+ "link": null,
1507
+ "locked": false,
1508
+ "points": [
1509
+ [
1510
+ 0,
1511
+ 0
1512
+ ],
1513
+ [
1514
+ -2.3760668060756416,
1515
+ 56.926923427661904
1516
+ ]
1517
+ ],
1518
+ "lastCommittedPoint": null,
1519
+ "startBinding": {
1520
+ "elementId": "gBtT2H2gfCOioSXaQjgn3",
1521
+ "focus": 0.05526482509785807,
1522
+ "gap": 7.733009307293742,
1523
+ "fixedPoint": null
1524
+ },
1525
+ "endBinding": {
1526
+ "elementId": "WsxPr8Q8Ki3MX02D1zoTP",
1527
+ "focus": 0.037128212780096655,
1528
+ "gap": 5.395705030505724,
1529
+ "fixedPoint": null
1530
+ },
1531
+ "startArrowhead": null,
1532
+ "endArrowhead": "arrow",
1533
+ "elbowed": false
1534
+ },
1535
+ {
1536
+ "id": "w8cjE_ZmAWalkyMBdUsGJ",
1537
+ "type": "ellipse",
1538
+ "x": 604.7699438623885,
1539
+ "y": 709.5915595069439,
1540
+ "width": 214.3006328052213,
1541
+ "height": 137.52029631030177,
1542
+ "angle": 0,
1543
+ "strokeColor": "#1e1e1e",
1544
+ "backgroundColor": "transparent",
1545
+ "fillStyle": "solid",
1546
+ "strokeWidth": 2,
1547
+ "strokeStyle": "solid",
1548
+ "roughness": 1,
1549
+ "opacity": 100,
1550
+ "groupIds": [],
1551
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
1552
+ "index": "ak",
1553
+ "roundness": {
1554
+ "type": 2
1555
+ },
1556
+ "seed": 499944590,
1557
+ "version": 741,
1558
+ "versionNonce": 694060242,
1559
+ "isDeleted": false,
1560
+ "boundElements": [
1561
+ {
1562
+ "type": "text",
1563
+ "id": "GIizGzKGnOF0-oXa9jiZb"
1564
+ },
1565
+ {
1566
+ "id": "Y2ub__u8TgOIwogbcOSyJ",
1567
+ "type": "arrow"
1568
+ }
1569
+ ],
1570
+ "updated": 1739443216784,
1571
+ "link": null,
1572
+ "locked": false
1573
+ },
1574
+ {
1575
+ "id": "GIizGzKGnOF0-oXa9jiZb",
1576
+ "type": "text",
1577
+ "x": 645.3836093225189,
1578
+ "y": 753.2309406261959,
1579
+ "width": 133.5398712158203,
1580
+ "height": 50,
1581
+ "angle": 0,
1582
+ "strokeColor": "#1e1e1e",
1583
+ "backgroundColor": "transparent",
1584
+ "fillStyle": "solid",
1585
+ "strokeWidth": 2,
1586
+ "strokeStyle": "solid",
1587
+ "roughness": 1,
1588
+ "opacity": 100,
1589
+ "groupIds": [],
1590
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
1591
+ "index": "al",
1592
+ "roundness": null,
1593
+ "seed": 1441254094,
1594
+ "version": 676,
1595
+ "versionNonce": 89549134,
1596
+ "isDeleted": false,
1597
+ "boundElements": [],
1598
+ "updated": 1739443216784,
1599
+ "link": null,
1600
+ "locked": false,
1601
+ "text": "Dependencies:\n1. LLM",
1602
+ "fontSize": 20,
1603
+ "fontFamily": 5,
1604
+ "textAlign": "center",
1605
+ "verticalAlign": "middle",
1606
+ "containerId": "w8cjE_ZmAWalkyMBdUsGJ",
1607
+ "originalText": "Dependencies:\n1. LLM",
1608
+ "autoResize": true,
1609
+ "lineHeight": 1.25
1610
+ },
1611
+ {
1612
+ "id": "I7sHCIcRd544zlJb-k7MC",
1613
+ "type": "ellipse",
1614
+ "x": 622.5969744807153,
1615
+ "y": 906.2256932559203,
1616
+ "width": 214.3006328052213,
1617
+ "height": 155.50783146331636,
1618
+ "angle": 0,
1619
+ "strokeColor": "#1e1e1e",
1620
+ "backgroundColor": "transparent",
1621
+ "fillStyle": "solid",
1622
+ "strokeWidth": 2,
1623
+ "strokeStyle": "solid",
1624
+ "roughness": 1,
1625
+ "opacity": 100,
1626
+ "groupIds": [],
1627
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
1628
+ "index": "ao",
1629
+ "roundness": {
1630
+ "type": 2
1631
+ },
1632
+ "seed": 189647374,
1633
+ "version": 808,
1634
+ "versionNonce": 2136799314,
1635
+ "isDeleted": false,
1636
+ "boundElements": [
1637
+ {
1638
+ "type": "text",
1639
+ "id": "RdFDycnbkhVJiSB5iP26q"
1640
+ },
1641
+ {
1642
+ "id": "yNsW2h8Pss9Gb_S8sI9g1",
1643
+ "type": "arrow"
1644
+ }
1645
+ ],
1646
+ "updated": 1739443216784,
1647
+ "link": null,
1648
+ "locked": false
1649
+ },
1650
+ {
1651
+ "id": "RdFDycnbkhVJiSB5iP26q",
1652
+ "type": "text",
1653
+ "x": 663.2106399408457,
1654
+ "y": 958.9992879099159,
1655
+ "width": 133.5398712158203,
1656
+ "height": 50,
1657
+ "angle": 0,
1658
+ "strokeColor": "#1e1e1e",
1659
+ "backgroundColor": "transparent",
1660
+ "fillStyle": "solid",
1661
+ "strokeWidth": 2,
1662
+ "strokeStyle": "solid",
1663
+ "roughness": 1,
1664
+ "opacity": 100,
1665
+ "groupIds": [],
1666
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
1667
+ "index": "ap",
1668
+ "roundness": null,
1669
+ "seed": 1264932942,
1670
+ "version": 754,
1671
+ "versionNonce": 1800072654,
1672
+ "isDeleted": false,
1673
+ "boundElements": [],
1674
+ "updated": 1739443216784,
1675
+ "link": null,
1676
+ "locked": false,
1677
+ "text": "Dependencies:\n1. TTS Model",
1678
+ "fontSize": 20,
1679
+ "fontFamily": 5,
1680
+ "textAlign": "center",
1681
+ "verticalAlign": "middle",
1682
+ "containerId": "I7sHCIcRd544zlJb-k7MC",
1683
+ "originalText": "Dependencies:\n1. TTS Model",
1684
+ "autoResize": true,
1685
+ "lineHeight": 1.25
1686
+ },
1687
+ {
1688
+ "id": "Y2ub__u8TgOIwogbcOSyJ",
1689
+ "type": "arrow",
1690
+ "x": 1047.418807077858,
1691
+ "y": 797.591590024522,
1692
+ "width": 222.5718893216865,
1693
+ "height": 10.765825358585857,
1694
+ "angle": 0,
1695
+ "strokeColor": "#1e1e1e",
1696
+ "backgroundColor": "transparent",
1697
+ "fillStyle": "solid",
1698
+ "strokeWidth": 2,
1699
+ "strokeStyle": "dashed",
1700
+ "roughness": 1,
1701
+ "opacity": 100,
1702
+ "groupIds": [],
1703
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
1704
+ "index": "apV",
1705
+ "roundness": {
1706
+ "type": 2
1707
+ },
1708
+ "seed": 1013898254,
1709
+ "version": 1483,
1710
+ "versionNonce": 1971199506,
1711
+ "isDeleted": false,
1712
+ "boundElements": [],
1713
+ "updated": 1739443216784,
1714
+ "link": null,
1715
+ "locked": false,
1716
+ "points": [
1717
+ [
1718
+ 0,
1719
+ 0
1720
+ ],
1721
+ [
1722
+ -222.5718893216865,
1723
+ -10.765825358585857
1724
+ ]
1725
+ ],
1726
+ "lastCommittedPoint": null,
1727
+ "startBinding": {
1728
+ "elementId": "gBtT2H2gfCOioSXaQjgn3",
1729
+ "focus": -0.16536477254107806,
1730
+ "gap": 6.75543212890625,
1731
+ "fixedPoint": null
1732
+ },
1733
+ "endBinding": {
1734
+ "elementId": "w8cjE_ZmAWalkyMBdUsGJ",
1735
+ "focus": 0.04367738339496544,
1736
+ "gap": 6.48818040260042,
1737
+ "fixedPoint": null
1738
+ },
1739
+ "startArrowhead": null,
1740
+ "endArrowhead": "arrow",
1741
+ "elbowed": false
1742
+ },
1743
+ {
1744
+ "id": "yNsW2h8Pss9Gb_S8sI9g1",
1745
+ "type": "arrow",
1746
+ "x": 1029.964349229296,
1747
+ "y": 983.2248034735771,
1748
+ "width": 187.95914620974406,
1749
+ "height": 4.350599282177882,
1750
+ "angle": 0,
1751
+ "strokeColor": "#1e1e1e",
1752
+ "backgroundColor": "transparent",
1753
+ "fillStyle": "solid",
1754
+ "strokeWidth": 2,
1755
+ "strokeStyle": "dashed",
1756
+ "roughness": 1,
1757
+ "opacity": 100,
1758
+ "groupIds": [],
1759
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
1760
+ "index": "apt",
1761
+ "roundness": {
1762
+ "type": 2
1763
+ },
1764
+ "seed": 235643858,
1765
+ "version": 1696,
1766
+ "versionNonce": 1609862098,
1767
+ "isDeleted": false,
1768
+ "boundElements": [],
1769
+ "updated": 1739443216784,
1770
+ "link": null,
1771
+ "locked": false,
1772
+ "points": [
1773
+ [
1774
+ 0,
1775
+ 0
1776
+ ],
1777
+ [
1778
+ -187.95914620974406,
1779
+ -4.350599282177882
1780
+ ]
1781
+ ],
1782
+ "lastCommittedPoint": null,
1783
+ "startBinding": {
1784
+ "elementId": "WsxPr8Q8Ki3MX02D1zoTP",
1785
+ "focus": -0.14993749818034682,
1786
+ "gap": 8.17755126953125,
1787
+ "fixedPoint": null
1788
+ },
1789
+ "endBinding": {
1790
+ "elementId": "I7sHCIcRd544zlJb-k7MC",
1791
+ "focus": -0.0990286868152971,
1792
+ "gap": 5.318884744809651,
1793
+ "fixedPoint": null
1794
+ },
1795
+ "startArrowhead": null,
1796
+ "endArrowhead": "arrow",
1797
+ "elbowed": false
1798
+ },
1799
+ {
1800
+ "id": "4EpXJpZS9VYbSmYOdGndE",
1801
+ "type": "frame",
1802
+ "x": 556.4840630425347,
1803
+ "y": 469.65690104166686,
1804
+ "width": 1466.3111572265625,
1805
+ "height": 624.8562666615479,
1806
+ "angle": 0,
1807
+ "strokeColor": "#bbb",
1808
+ "backgroundColor": "transparent",
1809
+ "fillStyle": "solid",
1810
+ "strokeWidth": 2,
1811
+ "strokeStyle": "solid",
1812
+ "roughness": 0,
1813
+ "opacity": 100,
1814
+ "groupIds": [],
1815
+ "frameId": null,
1816
+ "index": "aq",
1817
+ "roundness": null,
1818
+ "seed": 2051690766,
1819
+ "version": 957,
1820
+ "versionNonce": 854574990,
1821
+ "isDeleted": false,
1822
+ "boundElements": [],
1823
+ "updated": 1739443216684,
1824
+ "link": null,
1825
+ "locked": false,
1826
+ "name": "Langgraph"
1827
+ },
1828
+ {
1829
+ "id": "NrAZkP8Ng_B8lM3f45B0d",
1830
+ "type": "rectangle",
1831
+ "x": 1478.4393988715276,
1832
+ "y": 1160.9345276647227,
1833
+ "width": 297.95556640625,
1834
+ "height": 93.86651611328125,
1835
+ "angle": 0,
1836
+ "strokeColor": "#1e1e1e",
1837
+ "backgroundColor": "transparent",
1838
+ "fillStyle": "solid",
1839
+ "strokeWidth": 2,
1840
+ "strokeStyle": "solid",
1841
+ "roughness": 1,
1842
+ "opacity": 100,
1843
+ "groupIds": [],
1844
+ "frameId": null,
1845
+ "index": "at",
1846
+ "roundness": {
1847
+ "type": 3
1848
+ },
1849
+ "seed": 531617870,
1850
+ "version": 532,
1851
+ "versionNonce": 2135145230,
1852
+ "isDeleted": false,
1853
+ "boundElements": [
1854
+ {
1855
+ "type": "text",
1856
+ "id": "bX-7TNY4PBleds7wTHIUv"
1857
+ },
1858
+ {
1859
+ "id": "xx3Qb-dEk_gwNzn15L2Js",
1860
+ "type": "arrow"
1861
+ },
1862
+ {
1863
+ "id": "FyQYDCMA748f6_svuDGi-",
1864
+ "type": "arrow"
1865
+ }
1866
+ ],
1867
+ "updated": 1739443242434,
1868
+ "link": null,
1869
+ "locked": false
1870
+ },
1871
+ {
1872
+ "id": "bX-7TNY4PBleds7wTHIUv",
1873
+ "type": "text",
1874
+ "x": 1541.4872656928167,
1875
+ "y": 1195.3677857213634,
1876
+ "width": 171.85983276367188,
1877
+ "height": 25,
1878
+ "angle": 0,
1879
+ "strokeColor": "#1e1e1e",
1880
+ "backgroundColor": "transparent",
1881
+ "fillStyle": "solid",
1882
+ "strokeWidth": 2,
1883
+ "strokeStyle": "solid",
1884
+ "roughness": 1,
1885
+ "opacity": 100,
1886
+ "groupIds": [],
1887
+ "frameId": null,
1888
+ "index": "au",
1889
+ "roundness": null,
1890
+ "seed": 485203598,
1891
+ "version": 502,
1892
+ "versionNonce": 225782094,
1893
+ "isDeleted": false,
1894
+ "boundElements": [],
1895
+ "updated": 1739443242434,
1896
+ "link": null,
1897
+ "locked": false,
1898
+ "text": "Displays response",
1899
+ "fontSize": 20,
1900
+ "fontFamily": 5,
1901
+ "textAlign": "center",
1902
+ "verticalAlign": "middle",
1903
+ "containerId": "NrAZkP8Ng_B8lM3f45B0d",
1904
+ "originalText": "Displays response",
1905
+ "autoResize": true,
1906
+ "lineHeight": 1.25
1907
+ },
1908
+ {
1909
+ "id": "xx3Qb-dEk_gwNzn15L2Js",
1910
+ "type": "arrow",
1911
+ "x": 1627.8170539567984,
1912
+ "y": 1157.3788330846446,
1913
+ "width": 10.136425847646024,
1914
+ "height": 348.3441854609465,
1915
+ "angle": 0,
1916
+ "strokeColor": "#1e1e1e",
1917
+ "backgroundColor": "transparent",
1918
+ "fillStyle": "solid",
1919
+ "strokeWidth": 2,
1920
+ "strokeStyle": "solid",
1921
+ "roughness": 1,
1922
+ "opacity": 100,
1923
+ "groupIds": [],
1924
+ "frameId": null,
1925
+ "index": "aw",
1926
+ "roundness": {
1927
+ "type": 2
1928
+ },
1929
+ "seed": 1422299666,
1930
+ "version": 507,
1931
+ "versionNonce": 668913550,
1932
+ "isDeleted": false,
1933
+ "boundElements": [],
1934
+ "updated": 1739443242434,
1935
+ "link": null,
1936
+ "locked": false,
1937
+ "points": [
1938
+ [
1939
+ 0,
1940
+ 0
1941
+ ],
1942
+ [
1943
+ 10.136425847646024,
1944
+ -348.3441854609465
1945
+ ]
1946
+ ],
1947
+ "lastCommittedPoint": null,
1948
+ "startBinding": {
1949
+ "elementId": "NrAZkP8Ng_B8lM3f45B0d",
1950
+ "focus": -0.007112380664110637,
1951
+ "gap": 3.555694580078125,
1952
+ "fixedPoint": null
1953
+ },
1954
+ "endBinding": {
1955
+ "elementId": "K7JKG04XiRPCsQ3h4_Dax",
1956
+ "focus": -0.005877344681196516,
1957
+ "gap": 2.5109786987304688,
1958
+ "fixedPoint": null
1959
+ },
1960
+ "startArrowhead": "arrow",
1961
+ "endArrowhead": null,
1962
+ "elbowed": false
1963
+ },
1964
+ {
1965
+ "id": "FyQYDCMA748f6_svuDGi-",
1966
+ "type": "arrow",
1967
+ "x": 1663.6587057464315,
1968
+ "y": 1258.3566162877696,
1969
+ "width": 270.0699390753109,
1970
+ "height": 173.91110055718786,
1971
+ "angle": 0,
1972
+ "strokeColor": "#1e1e1e",
1973
+ "backgroundColor": "transparent",
1974
+ "fillStyle": "solid",
1975
+ "strokeWidth": 2,
1976
+ "strokeStyle": "solid",
1977
+ "roughness": 1,
1978
+ "opacity": 100,
1979
+ "groupIds": [],
1980
+ "frameId": null,
1981
+ "index": "ax",
1982
+ "roundness": {
1983
+ "type": 2
1984
+ },
1985
+ "seed": 1157217170,
1986
+ "version": 312,
1987
+ "versionNonce": 1956712334,
1988
+ "isDeleted": false,
1989
+ "boundElements": [],
1990
+ "updated": 1739443245083,
1991
+ "link": null,
1992
+ "locked": false,
1993
+ "points": [
1994
+ [
1995
+ 0,
1996
+ 0
1997
+ ],
1998
+ [
1999
+ -270.0699390753109,
2000
+ 173.91110055718786
2001
+ ]
2002
+ ],
2003
+ "lastCommittedPoint": null,
2004
+ "startBinding": {
2005
+ "elementId": "NrAZkP8Ng_B8lM3f45B0d",
2006
+ "focus": -0.380041570384292,
2007
+ "gap": 3.555572509765625,
2008
+ "fixedPoint": null
2009
+ },
2010
+ "endBinding": {
2011
+ "elementId": "JgxMPeI9m-WxMJBe8p2iu",
2012
+ "focus": -0.4517367543467092,
2013
+ "gap": 1.0667572021484375,
2014
+ "fixedPoint": null
2015
+ },
2016
+ "startArrowhead": null,
2017
+ "endArrowhead": "arrow",
2018
+ "elbowed": false
2019
+ },
2020
+ {
2021
+ "id": "obGZKTevXg4XAoWm_IZ9Z",
2022
+ "type": "arrow",
2023
+ "x": 1506.3704562717016,
2024
+ "y": 487.0592447916665,
2025
+ "width": 94.45550712564273,
2026
+ "height": 51.44181823730503,
2027
+ "angle": 0,
2028
+ "strokeColor": "#1e1e1e",
2029
+ "backgroundColor": "transparent",
2030
+ "fillStyle": "solid",
2031
+ "strokeWidth": 2,
2032
+ "strokeStyle": "solid",
2033
+ "roughness": 1,
2034
+ "opacity": 100,
2035
+ "groupIds": [],
2036
+ "frameId": "4EpXJpZS9VYbSmYOdGndE",
2037
+ "index": "az",
2038
+ "roundness": {
2039
+ "type": 2
2040
+ },
2041
+ "seed": 912393166,
2042
+ "version": 180,
2043
+ "versionNonce": 810046030,
2044
+ "isDeleted": false,
2045
+ "boundElements": [],
2046
+ "updated": 1739443216784,
2047
+ "link": null,
2048
+ "locked": false,
2049
+ "points": [
2050
+ [
2051
+ 0,
2052
+ 0
2053
+ ],
2054
+ [
2055
+ -94.45550712564273,
2056
+ 51.44181823730503
2057
+ ]
2058
+ ],
2059
+ "lastCommittedPoint": null,
2060
+ "startBinding": {
2061
+ "elementId": "qWnNFvspSJfngiQK7c6tU",
2062
+ "focus": -0.32134278675123384,
2063
+ "gap": 7.726030985514171,
2064
+ "fixedPoint": null
2065
+ },
2066
+ "endBinding": {
2067
+ "elementId": "GBp2vkKDN_rJ-0THbSebW",
2068
+ "focus": -0.23111722249403238,
2069
+ "gap": 1,
2070
+ "fixedPoint": null
2071
+ },
2072
+ "startArrowhead": null,
2073
+ "endArrowhead": "arrow",
2074
+ "elbowed": false
2075
+ },
2076
+ {
2077
+ "id": "qnVIwuImMX7lY7cpTgiEM",
2078
+ "type": "arrow",
2079
+ "x": 1157.4667909922377,
2080
+ "y": 1048.4602511701644,
2081
+ "width": 4.489591209323862,
2082
+ "height": 119.54648166688412,
2083
+ "angle": 0,
2084
+ "strokeColor": "#1e1e1e",
2085
+ "backgroundColor": "transparent",
2086
+ "fillStyle": "solid",
2087
+ "strokeWidth": 2,
2088
+ "strokeStyle": "solid",
2089
+ "roughness": 1,
2090
+ "opacity": 100,
2091
+ "groupIds": [],
2092
+ "frameId": null,
2093
+ "index": "b02",
2094
+ "roundness": {
2095
+ "type": 2
2096
+ },
2097
+ "seed": 256302094,
2098
+ "version": 215,
2099
+ "versionNonce": 3198098,
2100
+ "isDeleted": false,
2101
+ "boundElements": [],
2102
+ "updated": 1739443240075,
2103
+ "link": null,
2104
+ "locked": false,
2105
+ "points": [
2106
+ [
2107
+ 0,
2108
+ 0
2109
+ ],
2110
+ [
2111
+ 4.489591209323862,
2112
+ 119.54648166688412
2113
+ ]
2114
+ ],
2115
+ "lastCommittedPoint": null,
2116
+ "startBinding": {
2117
+ "elementId": "WsxPr8Q8Ki3MX02D1zoTP",
2118
+ "focus": -0.03100872811681922,
2119
+ "gap": 5.43525390996615,
2120
+ "fixedPoint": null
2121
+ },
2122
+ "endBinding": {
2123
+ "elementId": "cplZOVqKChIIlK1clqQyw",
2124
+ "focus": -0.020175504869330726,
2125
+ "gap": 1,
2126
+ "fixedPoint": null
2127
+ },
2128
+ "startArrowhead": null,
2129
+ "endArrowhead": "arrow",
2130
+ "elbowed": false
2131
+ }
2132
+ ],
2133
+ "appState": {
2134
+ "gridSize": 20,
2135
+ "gridStep": 5,
2136
+ "gridModeEnabled": false,
2137
+ "viewBackgroundColor": "#fffce8"
2138
+ },
2139
+ "files": {}
2140
+ }
instructions/diagrams/AppFlow_Simplified.png ADDED
instructions/instructions.MD CHANGED
@@ -122,12 +122,11 @@ streamlit_app/
122
 
123
  - **Langgraph**
124
  - [How to add cross-thread persistence to your graph](https://langchain-ai.github.io/langgraph/how-tos/cross-thread-persistence/)
125
- - [How to add cross-thread persistence to your graph](https://langchain-ai.github.io/langgraph/how-tos/cross-thread-persistence/)
126
 
127
 
128
  - **LLM Processing:**
129
 
130
- - [LangChain's ChatGoogleGenerativeAI Documentation](https://docs.litellm.ai/docs/)
131
 
132
  ---
133
 
 
122
 
123
  - **Langgraph**
124
  - [How to add cross-thread persistence to your graph](https://langchain-ai.github.io/langgraph/how-tos/cross-thread-persistence/)
 
125
 
126
 
127
  - **LLM Processing:**
128
 
129
+ - [LiteLLM's Documentation](https://docs.litellm.ai/docs/)
130
 
131
  ---
132
 
streamlit_app/__init__.py ADDED
File without changes
streamlit_app/config.py ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import TypedDict
2
+ from pathlib import Path
3
+ import os
4
+ from dotenv import load_dotenv
5
+
6
+ class Config(TypedDict):
7
+ WHISPER_MODEL: str
8
+ TTS_MODEL: str
9
+ GOOGLE_API_KEY: str
10
+ AUDIO_BACKEND: str
11
+ DEVICE: str
12
+
13
+
14
+ def load_config() -> Config:
15
+ env_path = os.path.join( os.getcwd(), "env", ".env")
16
+ print(f"env_path: {env_path}")
17
+ load_dotenv(env_path)
18
+
19
+ return {
20
+ "WHISPER_MODEL": os.getenv("WHISPER_MODEL","small"),
21
+ "TTS_MODEL": os.getenv("TTS_MODEL","tts_models/en/jenny/jenny"),
22
+ "GOOGLE_API_KEY": os.getenv("GOOGLE_API_KEY", ""),
23
+ "AUDIO_BACKEND": os.getenv("AUDIO_BACKEND","sox_io"),
24
+ "DEVICE": "cpu"
25
+ }
streamlit_app/env/.env.example CHANGED
@@ -1,5 +1,8 @@
1
  # Google API Key for Gemini
2
  GOOGLE_API_KEY=your_google_api_key
 
 
 
3
 
4
  # Optional: Coqui TTS model settings
5
  COQUI_MODEL_NAME=tts_models/en/ljspeech/tacotron2-DDC
 
1
  # Google API Key for Gemini
2
  GOOGLE_API_KEY=your_google_api_key
3
+ AUDIO_BACKEND=sox_io
4
+ WHISPER_MODEL=small
5
+ TTS_MODEL=tts_models/en/jenny/jenny
6
 
7
  # Optional: Coqui TTS model settings
8
  COQUI_MODEL_NAME=tts_models/en/ljspeech/tacotron2-DDC
streamlit_app/graph/chains.py ADDED
@@ -0,0 +1,186 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from langchain_core.runnables.config import RunnableConfig
2
+ from pydantic import BaseModel, Field
3
+ from langchain.prompts import PromptTemplate
4
+ from typing import List, Optional
5
+ from langchain_core.output_parsers import StrOutputParser
6
+ # Models for structured outputs
7
+ class Intent(BaseModel):
8
+ Intent: str = Field(description="The intent of the user's message")
9
+
10
+ def create_detect_intent_chain(llm):
11
+ prompt_template = PromptTemplate.from_template(
12
+ """You are a helpful assistant that determines if a user's message is a request for translation or a general chat message.
13
+ If the user is asking for translation (either explicitly or implicitly), respond with exactly 'translation'.
14
+ If the user is having a general conversation or asking questions, respond with exactly 'chat'.
15
+ Only respond with one of these two words: 'translation' or 'chat'.
16
+
17
+ Examples:
18
+ - "Translate 'hello' to Spanish" -> 'translation'
19
+ - "How do you say 'hello' in Spanish" -> 'translation'
20
+ - "What's the weather like?" -> 'chat'
21
+ - "Can you help me learn Spanish?" -> 'chat'
22
+
23
+ User: {input}
24
+ """
25
+ )
26
+
27
+
28
+ llm_structured = llm.with_structured_output(Intent)
29
+ return prompt_template | llm_structured
30
+
31
+ # class ExtractedSentence(BaseModel):
32
+ # sentence: str = Field(description="The cleaned sentence to be translated")
33
+ # source_language: str = Field(description="Detected source language")
34
+ # target_language: Optional[str] = Field(description="Requested target language if specified")
35
+
36
+ # def create_extract_sentence_chain(llm, user_message: str):
37
+ # prompt_template = PromptTemplate.from_template(
38
+ # """
39
+ # You are a helpful language assistant that extracts the core sentence to be translated from the user's message.
40
+ # Detect the source language and identify target language if specified.
41
+ # Remove any extra context like 'translate this:' or 'how do you say'.
42
+
43
+ # Examples:
44
+ # Input: "Can you translate 'hello my friend' to Spanish?"
45
+ # Output: Core sentence: "hello my friend"
46
+ # Source: English
47
+ # Target: Spanish
48
+
49
+ # Input: "How do you say 'I love programming' in Japanese?"
50
+ # Output: Core sentence: "I love programming"
51
+ # Source: English
52
+ # Target: Japanese
53
+
54
+ # User message: {user_message}
55
+ # """
56
+ # )
57
+
58
+ # prompt = prompt_template.format(user_message=user_message)
59
+ # llm_structured = llm.with_structured_output(ExtractedSentence)
60
+ # return prompt | llm_structured
61
+
62
+ class TranslationOption(BaseModel):
63
+ translation: str = Field(description="The translated text")
64
+ description: str = Field(description="Description of this translation variant")
65
+ # formality_level: str = Field(description="Formality level (formal, informal, neutral)")
66
+
67
+ class TranslationResponse(BaseModel):
68
+ # source_text: str = Field(description="Original text")
69
+ target_language: str = Field(description="Target language")
70
+ options: List[TranslationOption] = Field(description="List of translation options")
71
+
72
+ def create_translate_chain(llm):
73
+ # prompt_template = PromptTemplate.from_template(
74
+ # """Translate the following text from {source_language} to {target_language}.
75
+ # Provide multiple translation options with different formality levels and explanations.
76
+
77
+ # Text to translate: {sentence}
78
+
79
+ # For each translation, provide:
80
+ # 1. The translated text
81
+ # 2. A description of when to use this variant
82
+ # 3. The formality level (formal, informal, neutral)
83
+
84
+ # Format your response as a structured list of translations with these components.
85
+ # """
86
+ # )
87
+
88
+ prompt_template = PromptTemplate.from_template(
89
+ """You are a helpful language assistant that translates text
90
+ Translate the provided user's request.
91
+ Provide possible translations and their respecitve explanations.
92
+
93
+ <user_request> {user_request} </user_request>
94
+ In your response, provide:
95
+ - the target language.
96
+ - For each translation, provide:
97
+ 1. The translated text
98
+ 2. A description of when to use this variant
99
+
100
+ Respond in JSON format
101
+ Example of JSON response:
102
+ response:{
103
+ "target_language": "here goes the target language",
104
+ "translations":[
105
+ {
106
+ "translation": "Here goes the translation",
107
+ "description": "Here goes the description/explanation of the translation",
108
+ }
109
+ ]
110
+ }
111
+ """
112
+ )
113
+
114
+ llm_structured = llm.with_structured_output(TranslationResponse)
115
+ return prompt_template | llm_structured
116
+
117
+ # class WordBreakdown(BaseModel):
118
+ # word: str = Field(description="Individual word")
119
+ # part_of_speech: str = Field(description="Part of speech (noun, verb, etc.)")
120
+ # base_form: str = Field(description="Base/dictionary form")
121
+ # explanation: str = Field(description="Meaning and usage explanation")
122
+
123
+ # class SentenceBreakdown(BaseModel):
124
+ # words: List[WordBreakdown] = Field(description="List of word breakdowns")
125
+ # # grammar_notes: Optional[str] = Field(description="Additional grammar explanations")
126
+
127
+
128
+ # def create_sentence_breakdown_chain(llm, translation: Translation):
129
+ # prompt_template = PromptTemplate.from_template(
130
+ # """Break down this translated sentence into individual words and provide detailed explanations.
131
+
132
+ # Original text: {source_text}
133
+ # Translated text: {translation}
134
+
135
+ # For each word, provide:
136
+ # 1. The word itself
137
+ # 2. Part of speech
138
+ # 3. Base/dictionary form
139
+ # 4. Detailed explanation of meaning and usage
140
+
141
+
142
+ # """
143
+ # )
144
+
145
+ # # Use the first translation option for breakdown
146
+ # prompt = prompt_template.format(
147
+ # source_text=translation.source_text,
148
+ # translation=translation.options[0].translation
149
+ # )
150
+ # llm_structured = llm.with_structured_output(SentenceBreakdown)
151
+ # return prompt | llm_structured
152
+
153
+ def create_chat_response_chain(llm):
154
+ prompt_template = PromptTemplate.from_template(
155
+ """You are a helpful language learning assistant. Engage in conversation with the user,
156
+ helping them practice and learn languages.
157
+
158
+ Previous conversation:
159
+ {chat_history}
160
+
161
+ User: {input}
162
+
163
+ Respond naturally and engagingly, encouraging language practice when appropriate.
164
+ """
165
+ )
166
+ # llm_structured = llm.with_structured_output(ChatResponse)
167
+ return prompt_template | llm | StrOutputParser()
168
+
169
+
170
+
171
+ if __name__ == "__main__":
172
+ from langchain_google_genai import ChatGoogleGenerativeAI
173
+ from ..config import load_config
174
+
175
+
176
+ def test_detect_intent_chain():
177
+ config = load_config()
178
+ llm = ChatGoogleGenerativeAI(
179
+ model="gemini-2.0-flash",
180
+ temperature=0.7,
181
+ )
182
+ detect_intent_chain = create_detect_intent_chain(llm)
183
+ result = detect_intent_chain.invoke({"input": "Translate 'hello' to Spanish"})
184
+ print(f"result: {result}")
185
+
186
+ test_detect_intent_chain()
streamlit_app/graph/configSchema.py CHANGED
@@ -1,7 +1,9 @@
1
  from typing import TypedDict, Any
 
2
 
3
  class ConfigSchema(TypedDict):
4
- tts_model: Any
5
- stt_model: Any
 
6
 
7
 
 
1
  from typing import TypedDict, Any
2
+ from stt_tts.models import TTSModel, STTModel
3
 
4
  class ConfigSchema(TypedDict):
5
+ tts_model: TTSModel
6
+ stt_model: STTModel
7
+ llm_config: dict[str, Any]
8
 
9
 
streamlit_app/graph/state.py CHANGED
@@ -1,5 +1,5 @@
1
- from ast import List
2
- from typing import Dict, TypedDict, Annotated
3
 
4
  class TranslationOptions(TypedDict):
5
  description: str
@@ -7,15 +7,16 @@ class TranslationOptions(TypedDict):
7
 
8
  class Translation(TypedDict):
9
  language: str
10
- options: List[TranslationOptions]
11
- # Define state schema
12
  class PolyglotState(TypedDict):
13
  input: str
14
- # input_type: str # "text" or "audio"
15
- intent: str # "chat" or "translation"
16
- # transcription: str
17
  translation: Translation
18
- response: str
19
- audio_response_file: str
 
20
 
21
  # class PolyglotStateInternal(TypedDict):
 
1
+ from typing import Literal, TypedDict, Annotated, Optional
2
+ from operator import add
3
 
4
  class TranslationOptions(TypedDict):
5
  description: str
 
7
 
8
  class Translation(TypedDict):
9
  language: str
10
+ options: Annotated[list[TranslationOptions], add]
11
+
12
  class PolyglotState(TypedDict):
13
  input: str
14
+ # input_type: Literal["text", "audio"]
15
+ intent: Literal["chat", "translation"]
16
+ # transcription: Optional[str]
17
  translation: Translation
18
+ chat_resp: str
19
+ chat_history: Annotated[list[str], add]
20
+ audio_response_file: Annotated[list[str], add]
21
 
22
  # class PolyglotStateInternal(TypedDict):
streamlit_app/graph/workflow.py CHANGED
@@ -1,11 +1,14 @@
1
- from typing import Annotated
2
  from langgraph.graph import StateGraph, END
3
- from langchain_google_genai import ChatGoogleGenerativeAI
4
- from dotenv import load_dotenv
5
  import os
6
- from .state import PolyglotState
 
 
 
 
7
  # Load environment variables
8
- load_dotenv()
9
 
10
  # Define nodes (placeholder implementations)
11
 
@@ -14,108 +17,166 @@ load_dotenv()
14
  # if state["input_type"] == "audio":
15
  # state["transcription"] = state["input"] # Placeholder
16
  # return state
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
 
18
- def detect_intent(state: PolyglotState) -> Annotated[PolyglotState, str]:
19
- # Initialize ChatGoogleGenerativeAI
20
- llm = ChatGoogleGenerativeAI(
21
- model="gemini-2.0-flash",
22
- temperature=0, # We want deterministic responses for intent detection
23
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
 
25
- # Get the input text
26
- text = state["transcription"] if state["input_type"] == "audio" else state["input"]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
 
28
- # Create system message and user message
29
- messages = [
30
- (
31
- "system",
32
- """You are a helpful assistant that determines if a user's message is a request for translation or a general chat message.
33
- If the user is asking for translation (either explicitly or implicitly), respond with exactly 'translation'.
34
- If the user is having a general conversation or asking questions, respond with exactly 'chat'.
35
- Only respond with one of these two words: 'translation' or 'chat'.
36
 
37
- Examples:
38
- - "Translate 'hello' to Spanish" -> 'translation'
39
- - "How do you say 'hello' in Spanish" -> 'translation'
40
- - "What's the weather like?" -> 'chat'
41
- - "Can you help me learn Spanish?" -> 'chat'
42
- """
43
- ),
44
- ("human", text)
45
- ]
46
-
47
- try:
48
- # Get intent from LLM
49
- ai_msg = llm.invoke(messages)
50
- intent = ai_msg.content.strip().lower()
51
-
52
- # Validate intent
53
- if intent not in ["translation", "chat"]:
54
- # Default to chat if response is invalid
55
- intent = "chat"
56
 
57
- state["intent"] = intent
58
- return state, intent
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
 
60
- except Exception as e:
61
- # Log the error (you might want to add proper logging)
62
- print(f"Error in intent detection: {str(e)}")
63
- # Default to chat on error
64
- state["intent"] = "chat"
65
- return state, "chat"
66
 
67
- def translate(state: PolyglotState) -> PolyglotState:
68
- # TODO: Implement translation using Gemini
69
- text = state["transcription"] if state["input_type"] == "audio" else state["input"]
70
- text = text.replace("translate:", "").strip()
71
- state["translation"] = f"Translation placeholder: {text}"
72
- return state
73
 
74
- def chat_response(state: PolyglotState) -> PolyglotState:
75
- # TODO: Implement chat using Gemini
76
- text = state["transcription"] if state["input_type"] == "audio" else state["input"]
77
- state["response"] = f"Chat response placeholder: {text}"
78
- return state
 
 
79
 
80
- def synthesize_speech(state: PolyglotState, config: RunnableConfig) -> PolyglotState:
81
- # TODO: Implement Coqui TTS
82
- # Access the config through the configurable key
83
- tts_model = config["configurable"].get("tts_model", None)
84
- state["audio_response"] = tts_model.tts_to_file(state["translation"])
85
- # state["audio_response"] = tts_model.tts_to_file(state["response"])
86
- state["audio_response"] = b"" # Placeholder
87
- return state
88
-
89
 
90
- def create_workflow() -> StateGraph:
 
 
91
  # Initialize workflow graph
92
  workflow = StateGraph(PolyglotState)
93
 
94
-
 
 
 
 
 
 
95
  # Add nodes to graph
96
- # workflow.add_node("transcribe", transcribe)
97
- workflow.add_node("detect_intent", detect_intent)
98
- workflow.add_node("translate", translate)
99
- workflow.add_node("chat_response", chat_response)
100
- workflow.add_node("synthesize_speech", synthesize_speech)
 
101
 
102
- # Define edges
103
- workflow.add_edge("transcribe", "detect_intent")
104
  workflow.add_conditional_edges(
105
  "detect_intent",
 
106
  {
107
- "translation": "translate",
108
- "chat": "chat_response",
109
  }
110
  )
111
- workflow.add_edge("translate", "synthesize_speech")
112
- workflow.add_edge("synthesize_speech", END)
 
 
 
 
 
 
 
113
  workflow.add_edge("chat_response", END)
114
 
115
  # Set entry point
116
- workflow.set_entry_point("transcribe")
117
 
118
- return workflow
119
-
120
- # Create singleton instance
121
- workflow = create_workflow()
 
1
+ from typing import Annotated, Dict, Any, Callable
2
  from langgraph.graph import StateGraph, END
3
+ # from dotenv import load_dotenv
 
4
  import os
5
+ from .state import PolyglotState, Translation, TranslationOptions
6
+ from langchain_core.runnables.config import RunnableConfig
7
+ from .configSchema import ConfigSchema
8
+ from .chains import create_detect_intent_chain, Intent, create_translate_chain, TranslationResponse, create_chat_response_chain
9
+ from stt_tts.models import TTSModel
10
  # Load environment variables
11
+ # load_dotenv()
12
 
13
  # Define nodes (placeholder implementations)
14
 
 
17
  # if state["input_type"] == "audio":
18
  # state["transcription"] = state["input"] # Placeholder
19
  # return state
20
+ def create_detect_intent_node(llm)-> Callable[[PolyglotState, RunnableConfig], PolyglotState]:
21
+ detect_intent_chain = create_detect_intent_chain(llm)
22
+ def detect_intent(state: PolyglotState, config: RunnableConfig) -> PolyglotState:
23
+ print(f"detect_intent")
24
+ print(f"input: {state['input']}")
25
+ try:
26
+ # Get intent from LLM
27
+ intent: Intent = detect_intent_chain.invoke({"input": state["input"]})
28
+ result = intent.Intent
29
+ # Validate intent
30
+ if intent.Intent not in ["translation", "chat"]:
31
+ # Default to chat if response is invalid
32
+ result = "chat"
33
+ except Exception as e:
34
+ # Log the error (you might want to add proper logging)
35
+ print(f"Error in intent detection: {str(e)}")
36
+ # Default to chat on error
37
+ result = "chat"
38
 
39
+ print(f"intent: {result}")
40
+ return {"intent": result}
41
+ return detect_intent
42
+
43
+
44
+
45
+ # def create_extract_sentence(llm):
46
+ # def extract_sentence_for_translation(state: PolyglotState, config: RunnableConfig) -> PolyglotState:
47
+ # """Extract sentences for translation using LLM."""
48
+ # text = state["transcription"] if state["input_type"] == "audio" else state["input"]
49
+
50
+ # messages = [
51
+ # ("system", """Extract the sentence to be translated. Remove any extra context like 'translate this:'
52
+ # or 'how do you say'. Just return the core sentence to translate."""),
53
+ # ("human", text)
54
+ # ]
55
+
56
+ # response = llm.invoke(messages)
57
+ # state["sentence_to_translate"] = response.content.strip()
58
+ # return state
59
 
60
+ # return extract_sentence_for_translation
61
+
62
+ def create_translate_node(llm)-> Callable[[PolyglotState, RunnableConfig], PolyglotState]:
63
+ translate_chain = create_translate_chain(llm)
64
+ def translate_text(state: PolyglotState, config: RunnableConfig) -> PolyglotState:
65
+ """Translate text and provide multiple options."""
66
+ print(f"translate_text")
67
+ print(f"input: {state['input']}")
68
+ try:
69
+ response:TranslationResponse = translate_chain.invoke({"user_request": state["input"]})
70
+ print(f"response: {response}")
71
+ translation = Translation()
72
+ translation["language"] = response.target_language
73
+ for option in response.translations:
74
+ translation_option = TranslationOptions()
75
+ translation_option["translation"] = option.translation
76
+ translation_option["description"] = option.description
77
+ translation["options"].append(translation_option)
78
+ return {"translation": translation}
79
+ except Exception as e:
80
+ print(f"Error in translate_text: {str(e)}")
81
+ return state
82
 
83
+ return translate_text
84
+
85
+ # def create_sentence_breakdown(llm):
86
+ # def break_down_sentence(state: PolyglotState, config: RunnableConfig) -> PolyglotState:
87
+ # """Break down translated sentence into words and store in state."""
88
+ # if not state.get("translation"):
89
+ # return state
 
90
 
91
+ # messages = [
92
+ # ("system", """Break down this translation into individual words and provide explanations.
93
+ # Format as a list of word objects with 'word' and 'explanation' fields."""),
94
+ # ("human", state["translation"]["options"][0]["translation"])
95
+ # ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
96
 
97
+ # response = llm.invoke(messages)
98
+ # state["word_breakdown"] = response.content # You'll want to parse this properly
99
+ # return state
100
+
101
+ # return break_down_sentence
102
+
103
+ def create_tts_node(tts_model:TTSModel) -> Callable[[PolyglotState, RunnableConfig], PolyglotState]:
104
+ """Convert translations to speech."""
105
+ def text_to_speech(state: PolyglotState, config: RunnableConfig) -> PolyglotState:
106
+ print(f"text_to_speech")
107
+ print(f"translation: {state['translation']}")
108
+ if not state.get("translation"):
109
+ return state
110
+
111
+ translations = state["translation"]["options"]
112
+ audio_files = []
113
 
114
+ for option in translations:
115
+ audio_path = tts_model.tts_to_file(option["translation"])
116
+ audio_files.append(audio_path)
 
 
 
117
 
118
+ print(f"audio_files: {audio_files}")
119
+ return {"audio_response_files": audio_files}
120
+
121
+ return text_to_speech
 
 
122
 
123
+ def create_chat_response_node(llm)-> Callable[[PolyglotState, RunnableConfig], PolyglotState]:
124
+ chat_response_chain = create_chat_response_chain(llm)
125
+ def chat_response(state: PolyglotState, config: RunnableConfig) -> PolyglotState:
126
+ """Generate a chat response using LLM."""
127
+ response = chat_response_chain.invoke({"chat_history": state["chat_history"], "input": state["input"]})
128
+ return {"chat_resp": response}
129
+ return chat_response
130
 
131
+ def where_to_go(state: PolyglotState, config: RunnableConfig) -> PolyglotState:
132
+ """Determine where to go based on intent."""
133
+ if state["intent"] == "translation":
134
+ return "translate"
135
+ else:
136
+ return "chat_response"
 
 
 
137
 
138
+ def create_workflow(llm, tts_model:TTSModel) -> StateGraph:
139
+ """Create the workflow graph with dependencies injected."""
140
+
141
  # Initialize workflow graph
142
  workflow = StateGraph(PolyglotState)
143
 
144
+ # Create nodes with dependencies
145
+ detect_intent_node = create_detect_intent_node(llm)
146
+ # extract_sentence_node = create_extract_sentence(llm)
147
+ translate_node = create_translate_node(llm)
148
+ # breakdown_node = create_sentence_breakdown(llm)
149
+ tts_node = create_tts_node(tts_model=tts_model)
150
+ chat_response_node = create_chat_response_node(llm)
151
  # Add nodes to graph
152
+ workflow.add_node("detect_intent", detect_intent_node)
153
+ workflow.add_node("chat_response", chat_response_node)
154
+ # workflow.add_node("extract_sentence", extract_sentence_node)
155
+ workflow.add_node("translate", translate_node)
156
+ # workflow.add_node("break_down_sentence", breakdown_node)
157
+ workflow.add_node("text_to_speech", tts_node)
158
 
159
+ # Define edges based on flow chart
 
160
  workflow.add_conditional_edges(
161
  "detect_intent",
162
+ where_to_go,
163
  {
164
+ "translate": "translate",
165
+ "chat_response": "chat_response",
166
  }
167
  )
168
+
169
+ # Translation flow
170
+ workflow.add_edge("translate", "text_to_speech")
171
+ # workflow.add_edge("extract_sentence", "translate")
172
+ # workflow.add_edge("translate", "break_down_sentence")
173
+ # workflow.add_edge("break_down_sentence", "text_to_speech")
174
+ workflow.add_edge("text_to_speech", END)
175
+
176
+ # Chat flow
177
  workflow.add_edge("chat_response", END)
178
 
179
  # Set entry point
180
+ workflow.set_entry_point("detect_intent")
181
 
182
+ return workflow
 
 
 
streamlit_app/main.py CHANGED
@@ -3,21 +3,39 @@ from pathlib import Path
3
  import json
4
  import os
5
  from dotenv import load_dotenv
6
- from streamlit_app.graph import workflow
7
- from streamlit_app.stt_tts.models import STTModel
8
-
 
 
9
  # Load environment variables
10
- load_dotenv()
 
 
 
 
11
 
 
 
12
  # Initialize session state
 
13
  if "messages" not in st.session_state:
14
  st.session_state.messages = []
15
  if "dictionary" not in st.session_state:
16
  st.session_state.dictionary = {}
17
  if "stt" not in st.session_state:
18
- st.session_state.stt = STTModel()
19
  if "tts" not in st.session_state:
20
- st.session_state.tts = TTSModel()
 
 
 
 
 
 
 
 
 
21
 
22
  def initialize_app():
23
  st.set_page_config(
@@ -44,8 +62,54 @@ def create_sidebar():
44
  # TODO: Implement download functionality
45
  st.text_input("Enter your email:", key="download_email")
46
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
  def display_chat_interface():
48
- workflow = create_workflow()
49
  # Display chat messages
50
  for message in st.session_state.messages:
51
  with st.chat_message(message["role"]):
@@ -55,56 +119,29 @@ def display_chat_interface():
55
  col1, col2 = st.columns([4, 1])
56
 
57
  with col1:
58
- # Text input
59
  prompt = st.chat_input("Type your message here...")
60
 
61
  with col2:
62
- # Audio input
63
  audio = st.audio_input("🎤")
64
 
65
  # Process text input
66
  if prompt:
67
- # Add user message to chat history
68
- st.session_state.messages.append({"role": "user", "content": prompt})
69
- with st.chat_message("user"):
70
- st.markdown(prompt)
71
-
72
- workflow.invoke({"input": prompt})
73
- with st.chat_message("assistant"):
74
- response = f"Echo: {prompt}"
75
- st.markdown(response)
76
- st.session_state.messages.append({"role": "assistant", "content": response})
77
- # Process audio input
78
- elif audio:
79
- # Add user audio message to chat history
80
- st.session_state.messages.append({"role": "user", "content": "🎤 *Audio message*"})
81
- transcribed = False
82
- with st.chat_message("user"):
83
- st.markdown("🎤 *Audio message*")
84
- st.audio(audio)
85
- st.markdown("Transcribing audio...")
86
- try:
87
- transcription = st.session_state.stt.transcribe(audio)
88
- st.markdown(transcription)
89
- st.session_state.messages.append({"role": "user", "content": transcription})
90
- # Transcribe audio
91
- transcription = st.session_state.stt.transcribe(audio)
92
- transcribed = True
93
- except Exception as e:
94
- st.error(f"Error transcribing audio: {str(e)}")
95
- st.markdown("Failed to transcribe audio, try again")
96
- # TODO: Process audio through LangGraph workflow
97
-
98
- if transcribed:
99
- st.session_state.messages.append({"role": "user", "content": transcription})
100
- st.markdown(transcription)
101
-
102
- # TODO: Process audio through LangGraph workflow
103
- # For now, just acknowledge receipt
104
- with st.chat_message("assistant"):
105
- response = "I received your audio message. Audio processing will be implemented soon!"
106
- st.markdown(response)
107
- st.session_state.messages.append({"role": "assistant", "content": response})
108
 
109
  def main():
110
  initialize_app()
 
3
  import json
4
  import os
5
  from dotenv import load_dotenv
6
+ # from streamlit_app.graph import workflow
7
+ from stt_tts.models import STTModel, TTSModel
8
+ from graph.workflow import create_workflow
9
+ from config import load_config
10
+ from langchain_google_genai import ChatGoogleGenerativeAI
11
  # Load environment variables
12
+ # load_dotenv()
13
+ config = load_config()
14
+ # print(f"config: {config}")
15
+ def print_available_tts_models():
16
+ from TTS.api import TTS
17
 
18
+ available_models = TTS.list_models(language="en")
19
+ print(available_models)
20
  # Initialize session state
21
+
22
  if "messages" not in st.session_state:
23
  st.session_state.messages = []
24
  if "dictionary" not in st.session_state:
25
  st.session_state.dictionary = {}
26
  if "stt" not in st.session_state:
27
+ st.session_state.stt = STTModel(config["WHISPER_MODEL"])
28
  if "tts" not in st.session_state:
29
+ # print_available_tts_models()
30
+ st.session_state.tts = TTSModel(config["TTS_MODEL"], audio_backend=config["AUDIO_BACKEND"])
31
+
32
+
33
+ if "llm" not in st.session_state:
34
+ # Initialize LLM
35
+ st.session_state.llm = ChatGoogleGenerativeAI(
36
+ model="gemini-2.0-flash",
37
+ temperature=0.7,
38
+ )
39
 
40
  def initialize_app():
41
  st.set_page_config(
 
62
  # TODO: Implement download functionality
63
  st.text_input("Enter your email:", key="download_email")
64
 
65
+ def display_translation_options(translation_options, audio_files):
66
+ for idx, option in enumerate(translation_options):
67
+ translation_text = option['translation']
68
+ context_text = option['description']
69
+ translation_number = idx + 1
70
+ translation_message = f"**Translation {translation_number}:** {translation_text}\n*Context:* {context_text}"
71
+ st.session_state.messages.append({"role": "assistant", "content": translation_message})
72
+ st.markdown(f"**Translation {translation_number}:** {translation_text}")
73
+ st.markdown(f"*Context:* {context_text}")
74
+ if audio_files and idx < len(audio_files):
75
+ st.audio(audio_files[idx])
76
+ else:
77
+ st.markdown("An error occurred while processing your message. Please try again.")
78
+
79
+ def process_chat_message(input_text: str, is_audio: bool = False) -> None:
80
+ """
81
+ Process a chat message and update the chat interface with the response.
82
+
83
+ Args:
84
+ input_text: The text to process (either direct input or transcribed audio)
85
+ is_audio: Boolean indicating if the input was from audio
86
+ """
87
+ # Add user message to chat history
88
+ display_text = f"🎤 *Audio message*:\n{input_text}" if is_audio else input_text
89
+ st.session_state.messages.append({"role": "user", "content": display_text})
90
+
91
+ with st.chat_message("user"):
92
+ st.markdown(display_text)
93
+ if is_audio:
94
+ st.markdown(input_text) # Show transcription below audio message
95
+
96
+ # Process through workflow
97
+ workflow = create_workflow(llm=st.session_state.llm,tts_model=st.session_state.tts)
98
+ app_workflow = workflow.compile()
99
+ result = app_workflow.invoke({"input": input_text})
100
+
101
+ # Display assistant response
102
+ with st.chat_message("assistant"):
103
+ if (result["chat_resp"] is not None):
104
+ st.markdown(result["chat_resp"])
105
+ st.session_state.messages.append({"role": "assistant", "content": result["chat_resp"]})
106
+ elif (result["translation"] is not None):
107
+ # Display each translation option with its audio
108
+ display_translation_options(result["translation"]["options"], result.get("audio_response_files", []))
109
+
110
+
111
+
112
  def display_chat_interface():
 
113
  # Display chat messages
114
  for message in st.session_state.messages:
115
  with st.chat_message(message["role"]):
 
119
  col1, col2 = st.columns([4, 1])
120
 
121
  with col1:
 
122
  prompt = st.chat_input("Type your message here...")
123
 
124
  with col2:
 
125
  audio = st.audio_input("🎤")
126
 
127
  # Process text input
128
  if prompt:
129
+ process_chat_message(prompt)
130
+ elif audio: # Process audio input
131
+ chat_message_user= st.chat_message("user")
132
+ chat_message_user.markdown("🎤 *Audio message*")
133
+ chat_message_user.audio(audio)
134
+ chat_message_user.markdown("Transcribing audio...")
135
+ try:
136
+ transcription = st.session_state.stt.transcribe(audio)
137
+ print(f"transcription: {transcription}")
138
+ if transcription and transcription["text"] and len(transcription["text"]) > 0:
139
+ process_chat_message(transcription["text"], is_audio=True)
140
+ else:
141
+ chat_message_user.markdown("Transcribing resulted in an empty text, try again")
142
+ except Exception as e:
143
+ chat_message_user.error(f"Error transcribing audio: {str(e)}")
144
+ chat_message_user.markdown("Failed to transcribe audio, try again")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
145
 
146
  def main():
147
  initialize_app()
streamlit_app/stt_tts/__init__.py ADDED
File without changes
streamlit_app/stt_tts/models.py CHANGED
@@ -1,22 +1,33 @@
 
1
  import whisper
2
  import torch
3
  from TTS.api import TTS
4
  import torchaudio
5
  import tempfile
6
  import os
 
7
 
8
  torch.classes.__path__ = [] # to silence warning
9
 
10
  class STTModel:
11
- def __init__(self, model_name = 'small', audio_backend = 'sox_io'):
12
- self.model = whisper.load_model(model_name)
13
- torchaudio.set_audio_backend(audio_backend) # or "soundfile" or "ffmpeg"
14
 
15
- def transcribe(self, audio_file:BytesIO):
 
 
 
 
 
 
 
 
 
16
  with tempfile.NamedTemporaryFile(delete=False) as temp_audio:
17
  temp_audio.write(audio_file.read())
18
  # Get the absolute path of the temporary audio file
19
  audio_file_path = os.path.abspath(temp_audio.name)
 
20
  try:
21
  transcription = self.model.transcribe(audio_file_path)
22
  return transcription
@@ -28,13 +39,14 @@ class STTModel:
28
 
29
  class TTSModel:
30
  def __init__(self, model_name = 'tts_models/en/jenny/jenny', device = 'cpu', audio_backend = 'sox_io'):
 
31
  self.model = TTS(model_name).to(device)
32
- torchaudio.set_audio_backend(audio_backend) # or "soundfile" or "ffmpeg"
33
 
34
  def tts_to_file(self, text:str):
35
  with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as temp_audio:
36
  temp_audio_path = temp_audio.name
37
- self.model.tts_to_file(text=text, file_path=temp_audio_path)
38
  return temp_audio_path
39
 
40
 
 
1
+ from io import BytesIO
2
  import whisper
3
  import torch
4
  from TTS.api import TTS
5
  import torchaudio
6
  import tempfile
7
  import os
8
+ from typing import Optional, Dict, Any
9
 
10
  torch.classes.__path__ = [] # to silence warning
11
 
12
  class STTModel:
13
+ def __init__(self, model_name: str = 'small', device = 'cpu') -> None:
14
+ self.model = whisper.load_model(model_name, device=device)
 
15
 
16
+ def transcribe(self, audio_file: BytesIO) -> Optional[Dict[str, Any]]:
17
+ """
18
+ Transcribe audio file to text using Whisper model.
19
+
20
+ Args:
21
+ audio_file: BytesIO object containing audio data
22
+
23
+ Returns:
24
+ Dict containing transcription result or None if error occurs
25
+ """
26
  with tempfile.NamedTemporaryFile(delete=False) as temp_audio:
27
  temp_audio.write(audio_file.read())
28
  # Get the absolute path of the temporary audio file
29
  audio_file_path = os.path.abspath(temp_audio.name)
30
+ print(f"Transcribing audio from: {audio_file_path}")
31
  try:
32
  transcription = self.model.transcribe(audio_file_path)
33
  return transcription
 
39
 
40
  class TTSModel:
41
  def __init__(self, model_name = 'tts_models/en/jenny/jenny', device = 'cpu', audio_backend = 'sox_io'):
42
+ # print(f"Initializing TTS model with model_name: {model_name}, device: {device}, audio_backend: {audio_backend}")
43
  self.model = TTS(model_name).to(device)
44
+ self.audio_backend = audio_backend
45
 
46
  def tts_to_file(self, text:str):
47
  with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as temp_audio:
48
  temp_audio_path = temp_audio.name
49
+ self.model.tts_to_file(text=text, file_path=temp_audio_path,audio_backend=self.audio_backend)
50
  return temp_audio_path
51
 
52