iatoolkit 0.58.1__tar.gz → 0.58.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/PKG-INFO +1 -1
  2. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/pyproject.toml +1 -1
  3. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/iatoolkit.py +1 -1
  4. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/infra/llm_client.py +1 -1
  5. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/infra/openai_adapter.py +1 -1
  6. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/services/query_service.py +1 -1
  7. iatoolkit-0.58.4/src/iatoolkit/static/js/chat_context_reload.js +60 -0
  8. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/templates/index.html +1 -1
  9. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/views/external_login_view.py +10 -1
  10. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/views/init_context_api_view.py +2 -2
  11. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/views/llmquery_api_view.py +4 -1
  12. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit.egg-info/PKG-INFO +1 -1
  13. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit.egg-info/SOURCES.txt +1 -0
  14. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/readme.md +0 -0
  15. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/requirements.txt +0 -0
  16. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/setup.cfg +0 -0
  17. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/__init__.py +0 -0
  18. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/base_company.py +0 -0
  19. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/cli_commands.py +0 -0
  20. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/common/__init__.py +0 -0
  21. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/common/exceptions.py +0 -0
  22. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/common/routes.py +0 -0
  23. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/common/session_manager.py +0 -0
  24. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/common/util.py +0 -0
  25. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/company_registry.py +0 -0
  26. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/infra/__init__.py +0 -0
  27. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/infra/call_service.py +0 -0
  28. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/infra/connectors/__init__.py +0 -0
  29. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/infra/connectors/file_connector.py +0 -0
  30. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/infra/connectors/file_connector_factory.py +0 -0
  31. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/infra/connectors/google_cloud_storage_connector.py +0 -0
  32. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/infra/connectors/google_drive_connector.py +0 -0
  33. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/infra/connectors/local_file_connector.py +0 -0
  34. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/infra/connectors/s3_connector.py +0 -0
  35. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/infra/gemini_adapter.py +0 -0
  36. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/infra/google_chat_app.py +0 -0
  37. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/infra/llm_proxy.py +0 -0
  38. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/infra/llm_response.py +0 -0
  39. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/infra/mail_app.py +0 -0
  40. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/infra/redis_session_manager.py +0 -0
  41. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/repositories/__init__.py +0 -0
  42. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/repositories/database_manager.py +0 -0
  43. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/repositories/document_repo.py +0 -0
  44. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/repositories/llm_query_repo.py +0 -0
  45. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/repositories/models.py +0 -0
  46. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/repositories/profile_repo.py +0 -0
  47. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/repositories/tasks_repo.py +0 -0
  48. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/repositories/vs_repo.py +0 -0
  49. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/services/__init__.py +0 -0
  50. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/services/auth_service.py +0 -0
  51. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/services/benchmark_service.py +0 -0
  52. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/services/branding_service.py +0 -0
  53. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/services/dispatcher_service.py +0 -0
  54. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/services/document_service.py +0 -0
  55. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/services/excel_service.py +0 -0
  56. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/services/file_processor_service.py +0 -0
  57. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/services/history_service.py +0 -0
  58. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/services/jwt_service.py +0 -0
  59. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/services/load_documents_service.py +0 -0
  60. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/services/mail_service.py +0 -0
  61. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/services/onboarding_service.py +0 -0
  62. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/services/profile_service.py +0 -0
  63. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/services/prompt_manager_service.py +0 -0
  64. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/services/search_service.py +0 -0
  65. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/services/sql_service.py +0 -0
  66. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/services/tasks_service.py +0 -0
  67. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/services/user_feedback_service.py +0 -0
  68. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/services/user_session_context_service.py +0 -0
  69. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/static/images/fernando.jpeg +0 -0
  70. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/static/js/chat_feedback.js +0 -0
  71. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/static/js/chat_filepond.js +0 -0
  72. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/static/js/chat_history.js +0 -0
  73. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/static/js/chat_main.js +0 -0
  74. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/static/js/chat_onboarding.js +0 -0
  75. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/static/styles/chat_iatoolkit.css +0 -0
  76. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/static/styles/chat_info.css +0 -0
  77. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/static/styles/chat_modal.css +0 -0
  78. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/static/styles/landing_page.css +0 -0
  79. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/static/styles/llm_output.css +0 -0
  80. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/static/styles/onboarding.css +0 -0
  81. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/system_prompts/format_styles.prompt +0 -0
  82. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/system_prompts/query_main.prompt +0 -0
  83. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/system_prompts/sql_rules.prompt +0 -0
  84. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/templates/_branding_styles.html +0 -0
  85. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/templates/_login_widget.html +0 -0
  86. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/templates/_navbar.html +0 -0
  87. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/templates/about.html +0 -0
  88. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/templates/base.html +0 -0
  89. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/templates/change_password.html +0 -0
  90. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/templates/chat.html +0 -0
  91. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/templates/chat_modals.html +0 -0
  92. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/templates/error.html +0 -0
  93. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/templates/forgot_password.html +0 -0
  94. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/templates/header.html +0 -0
  95. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/templates/login_simulation.html +0 -0
  96. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/templates/onboarding_shell.html +0 -0
  97. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/templates/signup.html +0 -0
  98. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/templates/test.html +0 -0
  99. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/views/__init__.py +0 -0
  100. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/views/base_login_view.py +0 -0
  101. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/views/change_password_view.py +0 -0
  102. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/views/chat_token_request_view.py +0 -0
  103. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/views/file_store_api_view.py +0 -0
  104. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/views/forgot_password_view.py +0 -0
  105. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/views/history_api_view.py +0 -0
  106. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/views/index_view.py +0 -0
  107. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/views/login_simulation_view.py +0 -0
  108. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/views/login_view.py +0 -0
  109. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/views/prompt_api_view.py +0 -0
  110. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/views/signup_view.py +0 -0
  111. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/views/tasks_review_view.py +0 -0
  112. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/views/tasks_view.py +0 -0
  113. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/views/user_feedback_api_view.py +0 -0
  114. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit/views/verify_user_view.py +0 -0
  115. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit.egg-info/dependency_links.txt +0 -0
  116. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit.egg-info/requires.txt +0 -0
  117. {iatoolkit-0.58.1 → iatoolkit-0.58.4}/src/iatoolkit.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iatoolkit
3
- Version: 0.58.1
3
+ Version: 0.58.4
4
4
  Summary: IAToolkit
5
5
  Author: Fernando Libedinsky
6
6
  License-Expression: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "iatoolkit"
7
- version = "0.58.1"
7
+ version = "0.58.4"
8
8
  requires-python = ">=3.12"
9
9
  description = "IAToolkit"
10
10
  readme = "readme.md"
@@ -19,7 +19,7 @@ from werkzeug.middleware.proxy_fix import ProxyFix
19
19
  from injector import Binder, singleton, Injector
20
20
  from importlib.metadata import version as _pkg_version, PackageNotFoundError
21
21
 
22
- IATOOLKIT_VERSION = "0.58.1"
22
+ IATOOLKIT_VERSION = "0.58.4"
23
23
 
24
24
  # global variable for the unique instance of IAToolkit
25
25
  _iatoolkit_instance: Optional['IAToolkit'] = None
@@ -21,7 +21,7 @@ import tiktoken
21
21
  from typing import Dict, Optional, List
22
22
  from iatoolkit.services.dispatcher_service import Dispatcher
23
23
 
24
- CONTEXT_ERROR_MESSAGE = 'Tu consulta supera el límite de contexto, recarga la página para limpiarlo (esto demora un poco ...)'
24
+ CONTEXT_ERROR_MESSAGE = 'Tu consulta supera el límite de contexto, utiliza el boton de recarga de contexto.'
25
25
 
26
26
  class llmClient:
27
27
  _llm_clients_cache = {} # class attribute, for the clients cache
@@ -55,7 +55,7 @@ class OpenAIAdapter:
55
55
 
56
56
  # En caso de error de contexto
57
57
  if "context_length_exceeded" in str(e):
58
- error_message = 'Tu consulta supera el limite de contexto, sale e ingresa de nuevo a IAToolkit'
58
+ error_message = 'Tu consulta supera el limite de contexto. Reinicia el contexto con el boton de la barra superior.'
59
59
 
60
60
  raise IAToolkitException(IAToolkitException.ErrorType.LLM_ERROR, error_message)
61
61
 
@@ -196,7 +196,7 @@ class QueryService:
196
196
  previous_response_id = self.session_context.get_last_response_id(company.short_name, user_identifier)
197
197
  if not previous_response_id:
198
198
  return {'error': True,
199
- "error_message": f"FATAL: No se encontró 'previous_response_id' para '{company.short_name}/{user_identifier}'. La conversación no puede continuar."
199
+ "error_message": f"No se encontró 'previous_response_id' para '{company.short_name}/{user_identifier}'. Reinicia el contexto para continuar."
200
200
  }
201
201
  elif self.util.is_gemini_model(self.model):
202
202
  # check the length of the context_history and remove old messages
@@ -0,0 +1,60 @@
1
+ document.addEventListener('DOMContentLoaded', function() {
2
+ const reloadButton = document.getElementById('force-reload-button');
3
+ if (!reloadButton) return;
4
+
5
+ const originalIconClass = 'bi bi-arrow-clockwise';
6
+ const spinnerIconClass = 'spinner-border spinner-border-sm';
7
+
8
+ // Configuración de Toastr para que aparezca abajo a la derecha
9
+ toastr.options = { "positionClass": "toast-bottom-right", "preventDuplicates": true };
10
+
11
+ reloadButton.addEventListener('click', function(event) {
12
+ event.preventDefault();
13
+
14
+ if (reloadButton.disabled) return; // Prevenir doble clic
15
+
16
+ // 1. Deshabilitar y mostrar spinner
17
+ reloadButton.disabled = true;
18
+ const icon = reloadButton.querySelector('i');
19
+ icon.className = spinnerIconClass;
20
+ toastr.info('Iniciando recarga de contexto en segundo plano...');
21
+
22
+ // 2. Construir la URL dinámicamente
23
+ const company = window.companyShortName;
24
+ const reloadUrl = `/${company}/api/init-context`;
25
+
26
+ // 3. Hacer la llamada AJAX con POST
27
+ fetch(reloadUrl, {
28
+ method: 'POST',
29
+ headers: {
30
+ 'Content-Type': 'application/json'
31
+ },
32
+ // Envía un cuerpo vacío o los datos necesarios
33
+ body: JSON.stringify({})
34
+ })
35
+ .then(response => {
36
+ if (!response.ok) {
37
+ return response.json().then(err => {
38
+ throw new Error(err.error_message || `Error del servidor: ${response.status}`);
39
+ });
40
+ }
41
+ return response.json();
42
+ })
43
+ .then(data => {
44
+ if (data.status === 'OK') {
45
+ toastr.success(data.message || 'Contexto recargado exitosamente.');
46
+ } else {
47
+ toastr.error(data.error_message || 'Ocurrió un error desconocido.');
48
+ }
49
+ })
50
+ .catch(error => {
51
+ console.error('Error durante la recarga del contexto:', error);
52
+ toastr.error(error.message || 'Error de red al intentar recargar.');
53
+ })
54
+ .finally(() => {
55
+ // 4. Restaurar el botón
56
+ reloadButton.disabled = false;
57
+ icon.className = originalIconClass;
58
+ });
59
+ });
60
+ });
@@ -136,7 +136,7 @@
136
136
  </div>
137
137
  <p class="author-bio mb-0">
138
138
  Soy <strong>Fernando Libedinsky</strong>, ingeniero de software y creador de <strong>IAToolkit</strong>.
139
- <br>Tras una extensa trayectoria en el desarrollo de tecnología, sigo movido por la misma curiosidad que me llevó a programar por primera vez: aprender, explorar y construir cosas nuevas.
139
+ <br>Tras una extensa trayectoria en el desarrollo de software, sigo movido por la misma curiosidad que me llevó a programar por primera vez: aprender, explorar y construir cosas nuevas.
140
140
  <br>IAToolkit es la continuación de ese impulso, una plataforma creada para conectar rapidamente empresas con la inteligencia artificial.
141
141
  </p>
142
142
  </div>
@@ -80,4 +80,13 @@ class RedeemTokenApiView(BaseLoginView):
80
80
  if not redeem_result['success']:
81
81
  return {"error": redeem_result['error']}, 401
82
82
 
83
- return {"status": "ok"}, 200
83
+ return {"status": "ok"}, 200
84
+
85
+ def options(self, company_short_name: str):
86
+ """
87
+ Handles CORS preflight requests.
88
+ The browser sends an OPTIONS request to this endpoint before the actual POST
89
+ to check permissions. This method simply returns a 200 OK, assuming
90
+ a CORS middleware will add the necessary 'Access-Control-Allow-*' headers.
91
+ """
92
+ return {}, 200
@@ -56,8 +56,8 @@ class InitContextApiView(MethodView):
56
56
  # logging.info(f"Context for {company_short_name}/{user_identifier} rebuilt successfully.")
57
57
 
58
58
  # 3. Respond with JSON, as this is an API endpoint.
59
- return jsonify({'status': 'OK', 'message': 'Context has been reloaded successfully.'}), 200
59
+ return jsonify({'status': 'OK', 'message': 'El context se ha recargado con éxito.'}), 200
60
60
 
61
61
  except Exception as e:
62
- logging.exception(f"Error forcing context rebuild for {user_identifier}: {e}")
62
+ logging.exception(f"Error durante la recarga de contexto {user_identifier}: {e}")
63
63
  return jsonify({"error_message": str(e)}), 500
@@ -41,4 +41,7 @@ class LLMQueryApiView(MethodView):
41
41
  client_data=data.get('client_data', {}),
42
42
  files=data.get('files', [])
43
43
  )
44
- return jsonify(result)
44
+ if 'error' in result:
45
+ return jsonify(result), 400
46
+
47
+ return jsonify(result), 200
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iatoolkit
3
- Version: 0.58.1
3
+ Version: 0.58.4
4
4
  Summary: IAToolkit
5
5
  Author: Fernando Libedinsky
6
6
  License-Expression: MIT
@@ -63,6 +63,7 @@ src/iatoolkit/services/tasks_service.py
63
63
  src/iatoolkit/services/user_feedback_service.py
64
64
  src/iatoolkit/services/user_session_context_service.py
65
65
  src/iatoolkit/static/images/fernando.jpeg
66
+ src/iatoolkit/static/js/chat_context_reload.js
66
67
  src/iatoolkit/static/js/chat_feedback.js
67
68
  src/iatoolkit/static/js/chat_filepond.js
68
69
  src/iatoolkit/static/js/chat_history.js
File without changes
File without changes
File without changes